2022-01-25  Pablo Saavedra  <psaavedra@igalia.com>

        [WPE][GTK] Build error in ARMv7 Neon targets after r286152
        https://bugs.webkit.org/show_bug.cgi?id=235410

        Reviewed by Simon Fraser.

        * platform/graphics/cpu/arm/filters/FEBlendNEON.h:
        (WebCore::FEBlend::platformApplySoftware): Deleted.
        * platform/graphics/filters/software/FEBlendSoftwareApplier.cpp:
        (WebCore::FEBlendSoftwareApplier::apply const):
        * platform/graphics/filters/software/FECompositeSoftwareApplier.cpp:
        (WebCore::FECompositeSoftwareApplier::applyArithmetic const):
        * platform/graphics/filters/software/FEGaussianBlurSoftwareApplier.cpp:

2022-01-25  Antti Koivisto  <antti@apple.com>

        [CSS Container Queries] Parsing support for container-name property
        https://bugs.webkit.org/show_bug.cgi?id=235564

        Reviewed by Dean Jackson.

        Parse 'container-name' and map it to style.

        https://drafts.csswg.org/css-contain-3/#container-name

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::valueForPropertyInStyle):
        * css/CSSProperties.json:
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeContainerName):
        (WebCore::CSSPropertyParser::parseSingleValue):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::containerNames const):
        (WebCore::RenderStyle::setContainerNames):
        (WebCore::RenderStyle::initialContainerNames):

        'container-name' is actually a list of names, that's why the plural.

        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator== const):
        * rendering/style/StyleRareNonInheritedData.h:
        * style/StyleBuilderConverter.h:
        (WebCore::Style::BuilderConverter::convertContainerName):

2022-01-25  Sam Sneddon  <gsnedders@apple.com>

        Missing EnabledBySetting=WebXREnabled where Conditional=WEBXR exists
        https://bugs.webkit.org/show_bug.cgi?id=235527

        Reviewed by Darin Adler.

        Manually tested.

        * Modules/webxr/XRFrameRequestCallback.idl:
        * html/canvas/WebGLContextAttributes.idl:
        * html/canvas/WebGLRenderingContextBase.idl:

2022-01-25  Lauro Moura  <lmoura@igalia.com>

        Non-unified buildfix after r288546/246378@main
        https://bugs.webkit.org/show_bug.cgi?id=235590

        Unreviewed build fix.

        * page/Navigator.cpp: Add missing include.

2022-01-25  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r282374.
        https://bugs.webkit.org/show_bug.cgi?id=235587

        Introduced perf regression

        Reverted changeset:

        "Playback stops although the progress bar moves"
        https://bugs.webkit.org/show_bug.cgi?id=230210
        https://commits.webkit.org/r282374

2022-01-25  Alan Bujtas  <zalan@apple.com>

        (REGRESSION r287485) [LFC][IFC] Incorrect RTL content position when intrusive float is present
        https://bugs.webkit.org/show_bug.cgi?id=235547
        <rdar://87824766>

        Reviewed by Antti Koivisto.

        The float box coordinates are always visual. They need to be converted to
        logical to be able to properly constrain the available space on the current line.

        Test: fast/inline/intrusive-float-with-rtl-content.html

        * layout/formattingContexts/inline/InlineLineBuilder.cpp:
        (WebCore::Layout::LineBuilder::floatConstraints const):

2022-01-25  Youenn Fablet  <youenn@apple.com>

        Add a WebShare policy quirk for Twitter
        https://bugs.webkit.org/show_bug.cgi?id=235502
        <rdar://87944391>

        Reviewed by Chris Dumez.

        Disable WebShare policy in case of twitter documents as this is not yet web compatible.

        Manually tested.

        * page/Navigator.cpp:
        (WebCore::validateWebSharePolicy):
        (WebCore::Navigator::canShare):
        (WebCore::Navigator::share):
        * page/Quirks.cpp:
        (WebCore::isTwitterDocument):
        (WebCore::Quirks::requiresUserGestureToLoadInPictureInPicture const):
        (WebCore::Quirks::shouldDisableWebSharePolicy const):
        * page/Quirks.h:

2022-01-25  Ziran Sun  <zsun@igalia.com>

        [css-grid] Fix grid shorthand expansion of initial values
        https://bugs.webkit.org/show_bug.cgi?id=234430

        Reviewed by Sergio Villar Senin.

        This CL is to add the InitialValue support when parsing the grid shorthand for 6 grid properties
        including grid-auto-columns, grid-auto-flow, grid-auto-rows, grid-template-areas, 
        grid-template-columns and grid-template-rows. The original code only adds a CSSInitial.

        This is an import of chromium change at
        https://chromium-review.googlesource.com/c/chromium/src/+/3299364

        Apart from fixing wpt test imported/w3c/web-platform-tests/css/css-grid/parsing/grid-shorthand.html,
        The CL also updates the expectation file for test
        imported/w3c/web-platform-tests/css/css-grid/parsing/grid-shorthand-valid.html. This test fails before
        this CL and need to be investigated as a seperated issue. Related bugs have been raised at -
        https://bugs.chromium.org/p/chromium/issues/detail?id=1028283 &
        https://bugs.webkit.org/show_bug.cgi?id=204611        
        
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeImplicitGridAutoFlow):
        (WebCore::CSSPropertyParser::consumeGridShorthand):
        * style/StyleBuilderConverter.h:
        (WebCore::Style::BuilderConverter::convertGridTrackSizeList):
        (WebCore::Style::BuilderConverter::convertGridAutoFlow):

2022-01-24  Youenn Fablet  <youenn@apple.com>

        A sandboxed document should not reuse its service worker client ID
        https://bugs.webkit.org/show_bug.cgi?id=235310

        Reviewed by Alex Christensen.

        Create a new identifier when the current identifier, already exposed to service workers, cannot be reused.
        Covered by updated test.

        * dom/Document.cpp:
        * dom/Document.h:
        * dom/ScriptExecutionContext.cpp:
        * dom/ScriptExecutionContext.h:
        * loader/DocumentLoader.cpp:

2022-01-24  Mark Lam  <mark.lam@apple.com>

        Rename Vector and FixedVector::findMatching to findIf to match stl naming.
        https://bugs.webkit.org/show_bug.cgi?id=234864
        rdar://87424746

        Reviewed by Yusuke Suzuki.

        * Modules/async-clipboard/Clipboard.cpp:
        (WebCore::Clipboard::getType):
        * Modules/async-clipboard/ClipboardItemBindingsDataSource.cpp:
        (WebCore::ClipboardItemBindingsDataSource::getType):
        (WebCore::ClipboardItemBindingsDataSource::collectDataForWriting):
        * Modules/cache/DOMCacheStorage.cpp:
        (WebCore::DOMCacheStorage::match):
        (WebCore::DOMCacheStorage::has):
        (WebCore::DOMCacheStorage::findCacheOrCreate):
        (WebCore::DOMCacheStorage::doOpen):
        (WebCore::DOMCacheStorage::doRemove):
        * Modules/highlight/Highlight.cpp:
        (WebCore::Highlight::addToSetLike):
        * Modules/mediacontrols/MediaControlsHost.cpp:
        (WebCore::MediaControlsHost::showMediaControlsContextMenu):
        * Modules/mediarecorder/MediaRecorder.cpp:
        (WebCore::MediaRecorder::trackEnded):
        * Modules/mediastream/RTCController.cpp:
        (WebCore::RTCController::shouldDisableICECandidateFiltering):
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::setConfiguration):
        (WebCore::RTCPeerConnection::getOrCreateIceTransport):
        (WebCore::RTCPeerConnection::getOrCreateDtlsTransport):
        * Modules/mediastream/RTCRtpSFrameTransformer.cpp:
        (WebCore::RTCRtpSFrameTransformer::decryptFrame):
        * Modules/webaudio/AudioNode.cpp:
        (WebCore::AudioNode::checkNumberOfChannelsForInput):
        * Modules/webaudio/AudioParamTimeline.cpp:
        (WebCore::AudioParamTimeline::cancelAndHoldAtTime):
        * Modules/webaudio/IIRFilterNode.cpp:
        (WebCore::IIRFilterNode::create):
        * Modules/webauthn/fido/U2fCommandConstructor.cpp:
        (fido::isConvertibleToU2fRegisterCommand):
        * Modules/webxr/WebXRInputSourceArray.cpp:
        (WebCore::WebXRInputSourceArray::handleAddedOrUpdatedInputSources):
        * Modules/webxr/WebXRSession.cpp:
        (WebCore::WebXRSession::cancelAnimationFrame):
        * Modules/webxr/WebXRSystem.cpp:
        (WebCore::WebXRSystem::ensureImmersiveXRDeviceIsSelected):
        * accessibility/AXObjectCache.cpp:
        (WebCore::appendIfNotContainsMatching):
        * accessibility/atspi/AccessibilityAtspi.cpp:
        (WebCore::AccessibilityAtspi::shouldEmitSignal):
        * dom/DataTransfer.cpp:
        (WebCore::DataTransfer::types const):
        * dom/DataTransferItemList.cpp:
        (WebCore::removeStringItemOfLowercasedType):
        * dom/Document.cpp:
        (WebCore::Document::addPendingScrollEventTarget):
        (WebCore::Document::updateIntersectionObservations):
        * dom/EventPath.cpp:
        (WebCore:: const):
        * dom/MutationObserver.cpp:
        (WebCore::MutationObserver::enqueueSlotChangeEvent):
        * html/BaseTextInputType.cpp:
        (WebCore::BaseTextInputType::patternMismatch const):
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::cancelVideoFrameCallback):
        * html/shadow/DateTimeEditElement.cpp:
        (WebCore::DateTimeEditElement::fieldIndexOf const):
        (WebCore::DateTimeEditElement::focusedFieldElement const):
        (WebCore::DateTimeEditElement::didBlurFromField):
        * html/track/InbandDataTextTrack.cpp:
        (WebCore::InbandDataTextTrack::findIncompleteCue):
        * inspector/InspectorCanvas.cpp:
        (WebCore::InspectorCanvas::indexForData):
        * inspector/agents/WebDebuggerAgent.cpp:
        (WebCore::WebDebuggerAgent::didAddEventListener):
        (WebCore::WebDebuggerAgent::willRemoveEventListener):
        * layout/floats/FloatingState.cpp:
        (WebCore::Layout::FloatingState::append):
        * layout/integration/LayoutIntegrationBoxTree.cpp:
        (WebCore::LayoutIntegration::BoxTree::layoutBoxForRenderer):
        (WebCore::LayoutIntegration::BoxTree::rendererForLayoutBox):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::startIconLoading):
        * page/IntersectionObserver.cpp:
        (WebCore::IntersectionObserver::isObserving const):
        * page/ModalContainerObserver.cpp:
        (WebCore::ModalContainerObserver::collectClickableElementsTimerFired):
        * page/ResizeObserver.cpp:
        (WebCore::ResizeObserver::observe):
        * page/scrolling/ScrollLatchingController.cpp:
        (WebCore::ScrollLatchingController::removeLatchingStateForTarget):
        * page/scrolling/ScrollSnapOffsetsInfo.cpp:
        (WebCore::hasCompatibleSnapArea):
        * page/scrolling/ScrollingTreeNode.cpp:
        (WebCore::ScrollingTreeNode::removeChild):
        * platform/MIMETypeRegistry.cpp:
        (WebCore::MIMETypeRegistry::preferredImageMIMETypeForEncoding):
        * platform/PasteboardCustomData.cpp:
        (WebCore::PasteboardCustomData::addOrMoveEntryToEnd):
        (WebCore::PasteboardCustomData::hasSameOriginCustomData const):
        * platform/cocoa/PasteboardCocoa.mm:
        (WebCore::Pasteboard::fileContentState):
        * platform/encryptedmedia/CDMProxy.cpp:
        (WebCore::KeyStore::containsKeyID const):
        (WebCore::KeyStore::add):
        * platform/graphics/DisplayRefreshMonitorManager.cpp:
        (WebCore::DisplayRefreshMonitorManager::findMonitorForDisplayID const):
        * platform/graphics/HEVCUtilities.cpp:
        (WebCore::createHEVCCodecParametersString):
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::mediaEngine):
        (WebCore::MediaPlayer::nextMediaEngine):
        * platform/graphics/avfoundation/objc/CDMInstanceFairPlayStreamingAVFObjC.mm:
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::sessionForKeyIDs const):
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::sessionForRequest const):
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::sessionForGroup const):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::updateLicense):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::animationIsRunning const):
        (WebCore::GraphicsLayerCA::platformCALayerAnimationStarted):
        (WebCore::GraphicsLayerCA::isRunningTransformAnimation const):
        * platform/graphics/coretext/FontCoreText.cpp:
        (WebCore::Font::isProbablyOnlyUsedToRenderIcons const):
        * platform/graphics/egl/GLContextEGL.cpp:
        (WebCore::GLContextEGL::getEGLConfig):
        * platform/graphics/gstreamer/GStreamerRegistryScanner.cpp:
        (WebCore::GStreamerRegistryScanner::isContentTypeSupported const):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::shouldHaveBackingStore const):
        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::Pasteboard::fileContentState):
        * platform/mediastream/CaptureDevice.h:
        (WebCore::haveDevicesChanged):
        * platform/mediastream/MediaConstraints.h:
        (WebCore::NumericConstraint::valueForDiscreteCapabilityValues const):
        * platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:
        (WebKitMediaStreamObserver::didRemoveTrack):
        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::generatePresets):
        * platform/network/HTTPHeaderMap.cpp:
        (WebCore::HTTPHeaderMap::getUncommonHeader const):
        (WebCore::HTTPHeaderMap::setUncommonHeader):
        (WebCore::HTTPHeaderMap::add):
        (WebCore::HTTPHeaderMap::contains const):
        (WebCore::HTTPHeaderMap::get const):
        (WebCore::HTTPHeaderMap::set):
        * platform/xr/openxr/OpenXRExtensions.cpp:
        (PlatformXR::OpenXRExtensions::isExtensionSupported const):
        * plugins/PluginData.h:
        (WebCore::isSupportedPlugin):

2022-01-24  Yusuke Suzuki  <ysuzuki@apple.com>

        Expand RefPtr / Ref use in FrameLoader
        https://bugs.webkit.org/show_bug.cgi?id=235551
        rdar://87986840

        Reviewed by Mark Lam.

        Apply Ref / RefPtr instead of taking SerializedScriptValue*.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadInSameDocument):
        (WebCore::FrameLoader::continueFragmentScrollAfterNavigationPolicy):
        * loader/FrameLoader.h:

2022-01-24  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r286932): Fixed position elements jiggle sometimes (Twitter, Facebook)
        https://bugs.webkit.org/show_bug.cgi?id=235543
        <rdar://87981122>

        Reviewed by Tim Horton.

        In r286932 we ensure that the scrolling layer's position gets committed in the scrolling
        thread to reduce stutters. However, we also have to do the same for fixed and sticky
        layers, because they need to committed in synchrony with the scrolling layer.

        Also change some 'override' to 'final' and add locking annotations.

        * page/scrolling/cocoa/ScrollingTreeFixedNode.h:
        * page/scrolling/cocoa/ScrollingTreeFixedNode.mm:
        (WebCore::ScrollingTreeFixedNode::applyLayerPositions):
        * page/scrolling/cocoa/ScrollingTreeStickyNodeCocoa.h:
        * page/scrolling/cocoa/ScrollingTreeStickyNodeCocoa.mm:
        (WebCore::ScrollingTreeStickyNodeCocoa::applyLayerPositions):

2022-01-24  Diego Pino Garcia  <dpino@igalia.com>

        Unreviewed, fix non-unified build after r288458

        * fileapi/FileReaderLoaderClient.h:

2022-01-24  Eric Carlson  <eric.carlson@apple.com>

        REGRESSION (iOS 15): HTMLAudioElement fails to load new audio when device is locked or safari is in background
        https://bugs.webkit.org/show_bug.cgi?id=229688
        <rdar://problem/82554226>

        Unreviewed, adress post-review feedback.

        * platform/audio/cocoa/MediaSessionManagerCocoa.mm:
        (WebCore::MediaSessionManagerCocoa::updateSessionState):

2022-01-24  Patrick Angle  <pangle@apple.com>

        Web Inspector: [Flexbox] Add instrumentation/protocol bits for flex layout containers
        https://bugs.webkit.org/show_bug.cgi?id=235454

        Reviewed by Devin Rousso.

        Added tests in inspector/css/nodeLayoutContextTypeChanged.html.

        Add instrumentation to RenderFlexibleBox to observe elements becoming/ceasing to be flex containers. We only
        instrument RenderFlexibleBox created with an Element, not a Document, since all anonymous nodes will have their
        document passed, which means we would attempt to track multiple different nodes against the same document,
        resulting in unexpected results. Conversely, we only instrument in the destructor for non-anonymous nodes.

        * inspector/agents/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::layoutContextTypeForRenderer):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::RenderFlexibleBox):
        (WebCore::RenderFlexibleBox::~RenderFlexibleBox):

2022-01-24  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Avoid calling IOSurfaceGetPropertyMaximum
        https://bugs.webkit.org/show_bug.cgi?id=235526
        <rdar://85128431>

        Reviewed by Simon Fraser and Darin Adler.

        There should be no need to call IOSurfaceGetPropertyMaximum on iOS, since the return value will exceed the hardcoded maximum.

        * platform/graphics/cocoa/IOSurface.mm:
        (WebCore::maxSurfaceDimensionCA):
        (WebCore::computeMaximumSurfaceSize):

2022-01-24  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] Update Pasteboard::read to prioritize native representations over TIFF
        https://bugs.webkit.org/show_bug.cgi?id=190101
        rdar://44879244

        Reviewed by Ryosuke Niwa.

        Currently on macOS, when pasting image data from the pasteboard into richly editable elements, we attempt to
        read the image data by checking a hard-coded list of types; in order, these are: TIFF, PDF, PNG, and finally
        JPEG. Since AppKit automatically provides TIFF as an available type for compatibility when writing non-TIFF
        image data to the pasteboard, this means that WebKit automatically transcodes all images to TIFF when pasting
        images in editable areas.

        This leads to unexpected behavior in Mail compose when using the continuity camera to insert images, since all
        drawings and photos end up being inserted as (often much larger) TIFF files instead of JPEG and PNG,
        respectively. To address this, we adjust `Pasteboard::read` to prioritize image formats in the hard-coded list
        above that were written directly to the pasteboard by the copier (i.e. without transcoding) before reading from
        the remaining types that were added to the pasteboard by the system (and thus require extra transcoding).

        In the case where only PNG and JPEG data was written to the pasteboard by the copier, this means we'll read
        images as PNG and JPEG data directly. If TIFF was explicitly written as an image format to the pasteboard, this
        patch will preserve existing behavior by reading the image data as TIFF.

        Note that this existing logic for reading images directly into web content is an existing privacy risk, since
        AppKit's pasteboard code preserves all metadata properties when transcoding between image formats. In the
        future, we should add a step here to strip out as much metadata as possible here, with an allow-list of metadata
        properties that are essential to preserving image fidelity (e.g. orientation).

        See: <https://webkit.org/b/235534> for more details.

        Test: WKAttachmentTests.PastingPreservesImageFormat

        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::read):

        Refactor this logic so that we first try to read any natively written image formats that happen to be one of
        ("TIFF", "PDF", "PNG", "JPEG"), before trying to read any other types that would otherwise require transcoding.

2022-01-24  Eric Carlson  <eric.carlson@apple.com>

        REGRESSION (iOS 15): HTMLAudioElement fails to load new audio when device is locked or safari is in background
        https://bugs.webkit.org/show_bug.cgi?id=229688
        <rdar://problem/82554226>

        Reviewed by Jer Noble.
        
        An iOS application loses its NowPlaying status as soon as the AudioSession category
        is set to Ambient, and it can only get it back again by changing the category
        to Playback *and* starting playback. When an application is in the background, however,
        it can't start playback unless it *already* has NowPlaying status. So, ipso facto,
        background playback will always fail once the category is set to Ambient.

        If an AudioSession's category is set to Playback when it is activated, it will 
        interrupt another application playing audio, activate Bluetooth routes, etc.
        This means WebKit has to relinquish Playback when a page is unable to produce audio
        because AVFoundation automatically activates the audio session when playback starts
        - even if the AVPlayer is muted or has no audio.

        To allow pages that were playing audio when WebKit went into the background to 
        continue to play after switching urls or activating another media element, add a
        grace period when switch from Playback to Ambient.

        Test: media/audio-session-category.html

        * platform/audio/cocoa/MediaSessionManagerCocoa.mm:
        (WebCore::MediaSessionManagerCocoa::updateSessionState): 

2022-01-24  Antti Koivisto  <antti@apple.com>

        [CSS Container Queries] Basic parsing support for container-type property
        https://bugs.webkit.org/show_bug.cgi?id=235514

        Reviewed by Sam Weinig.

        Parse 'container-type' with values 'none', 'size' and 'inline-size.

        https://drafts.csswg.org/css-contain-3/#container-type

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::valueForPropertyInStyle):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator ContainerType const):
        * css/CSSProperties.json:
        * css/CSSValueKeywords.in:
        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):
        (WebCore::CSSParserFastPaths::isKeywordPropertyID):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::containerType const):
        (WebCore::RenderStyle::setContainerType):
        (WebCore::RenderStyle::initialContainerType):
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator== const):
        * rendering/style/StyleRareNonInheritedData.h:

2022-01-24  Youenn Fablet  <youenn@apple.com>

        file.stream() is slow and CPU-bound
        https://bugs.webkit.org/show_bug.cgi?id=235448

        Reviewed by Alex Christensen.

        We introduce a ReadAsBinaryChunks mode to prevent storing the whole file in memory.
        Use this in Blob stream implementation.
        The new implementation is much faster for big files given it does not need to keep in memory the whole file.
        Covered by existing tests.

        * fileapi/Blob.cpp:
        * fileapi/FileReaderLoader.cpp:
        * fileapi/FileReaderLoader.h:
        * fileapi/FileReaderLoaderClient.h:

2022-01-24  Youenn Fablet  <youenn@apple.com>

        [ iOS Release ] fast/mediastream/mediaElement-gc.html is a flaky failure
        https://bugs.webkit.org/show_bug.cgi?id=231601
        <rdar://problem/84158942>

        Reviewed by Eric Carlson.

        Covered by existing test.

        * testing/Internals.cpp:
        Looking at https://build.webkit.org/results/Apple-iOS-15-Simulator-Debug-WK2-Tests/r287831%20(1192)/fast/mediastream/mediaElement-gc-pretty-diff.html,
        we can see the number of media elements is 2 while the test has created only 1 element.
        We update Internals.mediaElementCount to only count elements of the current document

2022-01-24  Antoine Quint  <graouts@webkit.org>

        Pass the Document through bindings to KeyframeEffect::setKeyframes()
        https://bugs.webkit.org/show_bug.cgi?id=235503

        Unreviewed build fix, I had a merge issue when landing r288452.

        * animation/KeyframeEffect.idl:

2022-01-24  Ben Nham  <nham@apple.com>

        Fix macOS build after r288442

        Unreviewed build fix.

        * DerivedSources-output.xcfilelist: Add the new IDL file to derived sources.

2022-01-24  Antoine Quint  <graouts@webkit.org>

        Pass the Document through bindings to KeyframeEffect::setKeyframes()
        https://bugs.webkit.org/show_bug.cgi?id=235503

        Reviewed by Sam Weinig.

        We're making a similar change as part of bug 232086 for getKeyframes()
        after a suggestion from Darin during review. Since the bindings code
        can guarantee a Document for these bindings-exposed methods, we might
        as well use it rather than obtain the Document through the global object.

        * animation/KeyframeEffect.cpp:
        (WebCore::processKeyframeLikeObject):
        (WebCore::processIterableKeyframes):
        (WebCore::processPropertyIndexedKeyframes):
        (WebCore::KeyframeEffect::create):
        (WebCore::KeyframeEffect::setBindingsKeyframes):
        (WebCore::KeyframeEffect::setKeyframes):
        (WebCore::KeyframeEffect::processKeyframes):
        * animation/KeyframeEffect.h:
        * animation/KeyframeEffect.idl:
        * dom/Element.cpp:
        (WebCore::Element::animate):

2022-01-24  David Quesada  <david_quesada@apple.com>

        Simplify accesses to SystemVersion.plist
        https://bugs.webkit.org/show_bug.cgi?id=234306

        Reviewed by Alexey Proskuryakov.

        No new tests since no behavior change is expected.

        * platform/cocoa/SystemVersion.mm:
        (WebCore::createSystemMarketingVersion):
            Read the SystemVersion.plist file using _CFCopySystemVersionDictionary()
            rather than by manually constructing the path and initializing the dictionary.

2022-01-24  Rob Buis  <rbuis@igalia.com>

        Remove customElements when transitioning documents
        https://bugs.webkit.org/show_bug.cgi?id=222727

        Reviewed by Ryosuke Niwa.

        Remove customElements when transitioning documents
        of Window since the old document may be gone.

        Test: fast/js-promise/js-promise-invalid-context-access.html

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::didSecureTransitionTo):
        (WebCore::DOMWindow::ensureCustomElementRegistry):

2022-01-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][a11y] Do not expose the slider thumb to ATs with ATSPI
        https://bugs.webkit.org/show_bug.cgi?id=235487

        Reviewed by Adrian Perez de Castro.

        We expose the slider as a whole but not its value indicator.

        * accessibility/atspi/AccessibilityObjectAtspi.cpp:
        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject const):

2022-01-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][a11y] Only consider links as replaced objects when iterating with EmitsObjectReplacementCharacters
        https://bugs.webkit.org/show_bug.cgi?id=235474

        Reviewed by Adrian Perez de Castro.

        We don't want to consider links replaced objects in other cases.

        * editing/TextIterator.cpp:
        (WebCore::isRendererReplacedElement): Add TextIteratorBehaviors parameter to check if
        EmitsObjectReplacementCharacters is present.
        (WebCore::TextIterator::advance): Pass m_behaviors to isRendererReplacedElement().
        (WebCore::SimplifiedBackwardsTextIterator::advance): Ditto.
        (WebCore::isInsideReplacedElement): Add TextIteratorBehaviors parameter and pass it to isRendererReplacedElement().
        (WebCore::resolveCharacterRange): Pass behaviors to isInsideReplacedElement().
        * editing/TextIterator.h:
        (WebCore::isRendererReplacedElement): Add optional parameter TextIteratorBehaviors.

2022-01-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][a11y] Do not use heap allocated timers in AccessibilityAtspi
        https://bugs.webkit.org/show_bug.cgi?id=235473

        Reviewed by Adrian Perez de Castro.

        It was needed to ensure they were constructed in the ax thread, but they are now always created in the main
        thread, so they can be created once in the constructor.

        * accessibility/atspi/AccessibilityAtspi.cpp:
        (WebCore::AccessibilityAtspi::AccessibilityAtspi):
        (WebCore::AccessibilityAtspi::addClient):
        (WebCore::AccessibilityAtspi::removeClient):
        (WebCore::AccessibilityAtspi::addToCacheIfPending):
        (WebCore::AccessibilityAtspi::addAccessible):
        (WebCore::AccessibilityAtspi::cacheClearTimerFired):
        (WebCore::AccessibilityAtspi::scheduleCacheUpdate): Deleted.
        * accessibility/atspi/AccessibilityAtspi.h:

2022-01-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][a11y] Emit children-changed:remove signal even for ignored objects with ATSPI
        https://bugs.webkit.org/show_bug.cgi?id=235472

        Reviewed by Adrian Perez de Castro.

        We are returning early in case the object is ignored, but that could change, so if an object is not initially
        ignored and is registered we still need to emit children-changed:remove signal when destroyed to ensure the
        atspi cache is updated.

        * accessibility/atspi/AccessibilityObjectAtspi.cpp:
        (WebCore::AccessibilityObjectAtspi::childRemoved):

2022-01-24  Joseph Griego  <jgriego@igalia.com>

        [Shadow Realms] Use WebCore module loaders for shadow realm importValue
        https://bugs.webkit.org/show_bug.cgi?id=234155

        Reviewed by Darin Adler.

        Introduces a new ShadowRealmGlobalScope that serves as the
        implementation of a global object for code running in a shadow realm--to
        implement the requirements of JS(DOM)GlobalObject, it simply delegates
        all methods to the incubating (enclosing) realm, with the exception of
        methods related to module loading, for which it uses a custom
        ScriptModuleLoader configured to use the appropriate global object when
        evaluating module code.

        Also requires some adjustment to the IDL-driven code generation--the
        current draft spec requires that the global object for the shadow realm
        be an ordinary object--ShadowRealmGlobalScope is opted out of codegen
        for producing a custom prototype, but can still have APIs included as
        properties if they are marked as `Exposed=ShadowRealm` or `Exposed=*`

        Tests: js/ShadowRealm-evaluate.html
               js/ShadowRealm-importValue.html
               js/ShadowRealm-worker.html

        * CMakeLists.txt:
        * DerivedSources.make:
        * Sources.txt:
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::scriptExecutionContext const):
        (WebCore::scriptModuleLoader):
        (WebCore::JSDOMGlobalObject::deriveShadowRealmGlobalObject):
        * bindings/js/JSDOMGlobalObject.h:
        * bindings/js/JSDOMWindowBase.cpp:
        * bindings/js/JSRemoteDOMWindowBase.cpp:
        * bindings/js/JSShadowRealmGlobalScopeBase.cpp: Added.
        (WebCore::JSShadowRealmGlobalScopeBase::JSShadowRealmGlobalScopeBase):
        (WebCore::JSShadowRealmGlobalScopeBase::finishCreation):
        (WebCore::JSShadowRealmGlobalScopeBase::visitChildrenImpl):
        (WebCore::JSShadowRealmGlobalScopeBase::scriptExecutionContext const):
        (WebCore::JSShadowRealmGlobalScopeBase::incubating const):
        (WebCore::JSShadowRealmGlobalScopeBase::destroy):
        (WebCore::JSShadowRealmGlobalScopeBase::supportsRichSourceInfo):
        (WebCore::JSShadowRealmGlobalScopeBase::shouldInterruptScript):
        (WebCore::JSShadowRealmGlobalScopeBase::shouldInterruptScriptBeforeTimeout):
        (WebCore::JSShadowRealmGlobalScopeBase::javaScriptRuntimeFlags):
        (WebCore::JSShadowRealmGlobalScopeBase::scriptExecutionStatus):
        (WebCore::JSShadowRealmGlobalScopeBase::reportViolationForUnsafeEval):
        (WebCore::JSShadowRealmGlobalScopeBase::queueMicrotaskToEventLoop):
        (WebCore::toJS):
        * bindings/js/JSShadowRealmGlobalScopeBase.h: Added.
        (WebCore::JSShadowRealmGlobalScopeBase::subspaceFor):
        (WebCore::JSShadowRealmGlobalScopeBase::wrapped const):
        (WebCore::JSShadowRealmGlobalScopeBase::incubating):
        (WebCore::toJS):
        * bindings/js/JSWorkerGlobalScopeBase.cpp:
        * bindings/js/JSWorkletGlobalScopeBase.cpp:
        * bindings/js/ScriptModuleLoader.cpp:
        (WebCore::ScriptModuleLoader::shadowRealmLoader const):
        (WebCore::ScriptModuleLoader::evaluate):
        * bindings/js/ScriptModuleLoader.h:
        * bindings/js/WebCoreJSClientData.cpp:
        (WebCore::JSVMClientData::JSVMClientData):
        * bindings/js/WebCoreJSClientData.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        (IsDOMGlobalObject):
        (ShouldUseOrdinaryObjectPrototype):
        (GenerateHeader):
        (GenerateRuntimeEnableConditionalStringForExposed):
        (GenerateImplementation):
        (GeneratePrototypeDeclaration):
        (GenerateConstructorHelperMethods):
        * bindings/scripts/preprocess-idls.pl:
        * bindings/scripts/test/ShadowRealmGlobalScopeConstructors.idl: Added.
        * bindings/scripts/test/SupplementalDependencies.dep:
        * dom/PromiseRejectionEvent.idl:
        * dom/ScriptExecutionContext.h:
        (WebCore::ScriptExecutionContext::isShadowRealmGlobalScope const):
        * page/ShadowRealmGlobalScope.cpp: Copied from Source/JavaScriptCore/runtime/ShadowRealmObject.h.
        (WebCore::ShadowRealmGlobalScope::tryCreate):
        (WebCore::ShadowRealmGlobalScope::ShadowRealmGlobalScope):
        (WebCore::ShadowRealmGlobalScope::moduleLoader):
        (WebCore::ShadowRealmGlobalScope::wrapper):
        (WebCore::ShadowRealmGlobalScope::~ShadowRealmGlobalScope):
        * page/ShadowRealmGlobalScope.h: Copied from Source/JavaScriptCore/runtime/ShadowRealmObject.h.
        (WebCore::ShadowRealmGlobalScope::self):
        * page/ShadowRealmGlobalScope.idl: Copied from Source/JavaScriptCore/runtime/ShadowRealmObject.h.

2022-01-24  Youenn Fablet  <youenn@apple.com>

        AVAudioSessionCaptureDeviceManager is not always computing the right default input device
        https://bugs.webkit.org/show_bug.cgi?id=235362
        <rdar://87707090>

        Addressing post commit comments.

        Reviewed by Eric Carlson and Geoff Garen.

        * platform/mediastream/ios/AVAudioSessionCaptureDeviceManager.mm:
        Fixed the release logging.

2022-01-24  Antoine Quint  <graouts@webkit.org>

        [Model] Add testing coverage for camera API
        https://bugs.webkit.org/show_bug.cgi?id=233643

        Reviewed by Dean Jackson.

        Test: model-element/model-element-camera.html

        We reject the promise returned by the getCamera() and setCamera() methods
        with an Exception so that we can correctly test this behavior. We also make
        the keys on HTMLModelElementCamera be required to reject incomplete objects.

        * Modules/model-element/HTMLModelElement.cpp:
        (WebCore::HTMLModelElement::getCamera):
        (WebCore::HTMLModelElement::setCamera):
        * Modules/model-element/HTMLModelElementCamera.idl:

2022-01-24  Youenn Fablet  <youenn@apple.com>

        Reconfiguring the CoreAudioSharedUnit should take into account that there is a speaker sample producer
        https://bugs.webkit.org/show_bug.cgi?id=235397
        <rdar://problem/87819949>

        Reviewed by Eric Carlson and Geoff Garen.

        Address post-commit comments.
        Introduce a boolean to make high priority thread callbacks no-ops when reconfiguring the audio unit.

        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:

2022-01-24  Adrian Perez de Castro  <aperez@igalia.com>

        Fix non-unified build after r288432

        Unreviewed non-unified build fix.

        No new tests needed.

        * platform/graphics/filters/software/FEImageSoftwareApplier.cpp: Do not use #pragma once
        in an implementation file, add missing inclusion of the GraphicsContext.h header.

2022-01-24  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Display builders should flip coords for writing mode
        https://bugs.webkit.org/show_bug.cgi?id=235498

        Reviewed by Antti Koivisto.

        Display boxes/lines all have visual geometries. This patch flips their coords when they
        are inside a block with vertical writing mode.

        This is in preparation for enabling vertical writing mode for IFC.

        * layout/formattingContexts/inline/display/InlineDisplayContentBuilder.cpp:
        (WebCore::Layout::InlineDisplayContentBuilder::processNonBidiContent):
        (WebCore::Layout::InlineDisplayContentBuilder::processBidiContent):
        (WebCore::Layout::InlineDisplayContentBuilder::flipLogicalRectToVisualForWritingMode):
        * layout/formattingContexts/inline/display/InlineDisplayContentBuilder.h:
        * layout/formattingContexts/inline/display/InlineDisplayLineBuilder.cpp:
        (WebCore::Layout::InlineDisplayLineBuilder::build const):

2022-01-24  Youenn Fablet  <youenn@apple.com>

        MediaStream canvas.captureStream() playback to LocalSampleBufferDisplayLayer is flaky
        https://bugs.webkit.org/show_bug.cgi?id=230623
        <rdar://problem/83668578>

        Reviewed by Kimmo Kinnunen.

        There are a few issues when creating the video element, setting the srcObject and playing it right away.
        The first thing is that we try to render the video element while thinking that it might be video accelerated
        (it is always the case for MediaStreamTrack based tracks), but the video element is asynchronously updating whether it is accelerated.
        Following what other MediaPlayerPrivate are doing, when MediaPlayerPrivateMediaStreamAVFObjC has set up its video layers,
        we schedule a call to renderingModeChanged which will trigger a relayout.

        We also ensure, when the layer is fully initialized to set all values (bounds, hide states) as otherwise, this might be lost on GPUProcess
        which currently does not register a RemoteSampleBufferDisplayLayer at the time the corresponding IPC message is received.

        The additional issue is in the case the MediaStreamTrack source only generates one frame for some time.
        In that case, and if the frame is enqueueud while setting up the video layers, we were not rendering this frame.
        To fix this, when the video layers are ready, we reenqueue the last video frame as neeeded.

        Manually tested.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:

2022-01-24  Kimmo Kinnunen  <kkinnunen@apple.com>

        texImage2d fails to set same video frame to multiple textures
        https://bugs.webkit.org/show_bug.cgi?id=203148
        <rdar://problem/56436745>

        Reviewed by Darin Adler.

        WebGL optimizes repeated video uploads to same texture, due to this being
        usual practice among pages. Reason is that there are no API to know when the 
        video frame updates.
        The algorithm was:
         - If the IOSurface is the same as in the last call
         - If the texture contents has not changed since we last modified this texture
         then skip the upload.
        However, this logic skips errorneously if the "last call" updates some other texture.
        Fix and test the above.

        There are other issues for the current algorithm. This patch fixes some other theoretical ones:
         - If the texture is deleted and new one gets assigned the same texture id and the content
           seed would clash
         - Video was uploaded to a different level

        The previous implementation was keeping per-texture seed value map in the context
        (GraphicsContextGLANGLE) and per-teture seed value map in the texture upload helper
        (GraphicsContextGLCVCocoa) and last uploaded IOSurface seed in the upload helper (not per
        texture).

        The implementation in this patch keeps per-texture known content description in the texture
        upload helper and invalidates this when each texture changes. The known content description
        is the parameter list of the texture upload call.

        Test: webgl/pending/conformance/textures/misc/tex-image-video-repeated.html

        * platform/graphics/GraphicsContextGLState.h:
        (WebCore::GraphicsContextGLState::setBoundTexture):
        * platform/graphics/angle/GraphicsContextGLANGLE.cpp:
        (WebCore::GraphicsContextGLANGLE::texImage2D):
        (WebCore::GraphicsContextGLANGLE::texSubImage2D):
        (WebCore::GraphicsContextGLANGLE::compressedTexImage2D):
        (WebCore::GraphicsContextGLANGLE::compressedTexSubImage2D):
        (WebCore::GraphicsContextGLANGLE::texStorage2D):
        (WebCore::GraphicsContextGLANGLE::texStorage3D):
        (WebCore::GraphicsContextGLANGLE::texImage2DDirect):
        (WebCore::GraphicsContextGLANGLE::framebufferTexture2D):
        (WebCore::GraphicsContextGLANGLE::createTexture):
        (WebCore::GraphicsContextGLANGLE::deleteTexture):
        (WebCore::GraphicsContextGLANGLE::invalidateKnownTextureContent):
        (WebCore::GraphicsContextGLANGLE::textureSeed): Deleted.
        * platform/graphics/angle/GraphicsContextGLANGLE.h:
        * platform/graphics/cocoa/GraphicsContextGLCocoa.h:
        * platform/graphics/cocoa/GraphicsContextGLCocoa.mm:
        (WebCore::GraphicsContextGLCocoa::invalidateKnownTextureContent):
        * platform/graphics/cv/GraphicsContextGLCVCocoa.cpp:
        (WebCore::GraphicsContextGLCVCocoa::TextureContent::operator== const):
        (WebCore::GraphicsContextGLCVCocoa::copyVideoSampleToTexture):
        (WebCore::GraphicsContextGLCVCocoa::invalidateKnownTextureContent):
        * platform/graphics/cv/GraphicsContextGLCVCocoa.h:

2022-01-24  Antoine Quint  <graouts@webkit.org>

        [Web Animations] add support for animation-composition CSS property
        https://bugs.webkit.org/show_bug.cgi?id=232086
        <rdar://problem/84508394>

        Reviewed by Darin Adler.

        Add support for the "animation-composition" property from the CSS Animations Level 2 specification.
        This property sets the "composite" property on the animation's effect and is overridden by use of
        the Web Animations API to set that property.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * animation/CSSAnimation.cpp:
        (WebCore::CSSAnimation::syncPropertiesWithBackingAnimation):
        (WebCore::CSSAnimation::setBindingsEffect):
        (WebCore::CSSAnimation::effectCompositeOperationWasSetUsingBindings):
        * animation/CSSAnimation.h:
        * animation/CompositeOperation.cpp: Added.
        (WebCore::toCompositeOperation):
        * animation/CompositeOperation.h:
        * animation/CompositeOperationOrAuto.h:
        (WebCore::toCompositeOperationOrAuto):
        * animation/KeyframeEffect.cpp:
        (WebCore::KeyframeEffect::getBindingsKeyframes):
        (WebCore::KeyframeEffect::getKeyframes):
        (WebCore::KeyframeEffect::bindingsComposite const):
        (WebCore::KeyframeEffect::setBindingsComposite):
        * animation/KeyframeEffect.h:
        * animation/KeyframeEffect.idl:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForAnimationComposition):
        (WebCore::ComputedStyleExtractor::addValueForAnimationPropertyToList):
        (WebCore::ComputedStyleExtractor::valueForPropertyInStyle):
        * css/CSSProperties.json:
        * css/CSSToStyleMap.cpp:
        (WebCore::CSSToStyleMap::mapAnimationCompositeOperation):
        * css/CSSToStyleMap.h:
        * css/CSSValueKeywords.in:
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeAnimationValue):
        (WebCore::CSSPropertyParser::parseSingleValue):
        * platform/animation/Animation.cpp:
        (WebCore::Animation::Animation):
        * platform/animation/Animation.h:
        (WebCore::Animation::clearCompositeOperation):
        (WebCore::Animation::fillCompositeOperation):
        (WebCore::Animation::isCompositeOperationFilled const):
        * platform/animation/AnimationList.cpp:
        (WebCore::AnimationList::fillUnsetProperties):
        * style/PropertyAllowlist.cpp:
        (WebCore::Style::isValidMarkerStyleProperty):
        * style/StyleResolver.cpp:
        (WebCore::Style::Resolver::styleForKeyframe):
        (WebCore::Style::Resolver::keyframeStylesForAnimation):

2022-01-24  Said Abou-Hallawa  <said@apple.com>

        [GPU Process] [Filters] Move FEImage to the 'platform' directory
        https://bugs.webkit.org/show_bug.cgi?id=234109
        rdar://86608573

        Reviewed by Darin Adler.

        Move FEImageSoftwareApplier to separate source and header files. Make all
        the filter applier concrete classes be final and make their overridden 
        'apply()' method be private and final.

        * Headers.cmake:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/coreimage/FEColorMatrixCoreImageApplier.h:
        * platform/graphics/coreimage/FEComponentTransferCoreImageApplier.h:
        * platform/graphics/coreimage/SourceGraphicCoreImageApplier.h:
        * platform/graphics/displaylists/DisplayListRecorder.cpp:
        * platform/graphics/filters/FEImage.cpp: Renamed from Source/WebCore/svg/graphics/filters/SVGFEImage.cpp.
        (WebCore::FEImage::create):
        (WebCore::FEImage::FEImage):
        (WebCore::FEImage::calculateImageRect const):
        (WebCore::FEImage::createSoftwareApplier const):
        (WebCore::FEImage::externalRepresentation const):
        * platform/graphics/filters/FEImage.h: Renamed from Source/WebCore/svg/graphics/filters/SVGFEImage.h.
        (WebCore::FEImage::encode const):
        (WebCore::FEImage::decode):
        * platform/graphics/filters/software/FEBlendSoftwareApplier.h:
        * platform/graphics/filters/software/FEColorMatrixSoftwareApplier.h:
        * platform/graphics/filters/software/FEComponentTransferSoftwareApplier.h:
        * platform/graphics/filters/software/FECompositeSoftwareApplier.h:
        * platform/graphics/filters/software/FEConvolveMatrixSoftwareApplier.h:
        * platform/graphics/filters/software/FEDisplacementMapSoftwareApplier.h:
        (WebCore::FEDisplacementMapSoftwareApplier::byteOffsetOfPixel): Deleted.
        * platform/graphics/filters/software/FEDropShadowSoftwareApplier.h:
        * platform/graphics/filters/software/FEFloodSoftwareApplier.h:
        * platform/graphics/filters/software/FEGaussianBlurSoftwareApplier.h:
        * platform/graphics/filters/software/FEImageSoftwareApplier.cpp: Added.
        (WebCore::FEImageSoftwareApplier::apply const):
        * platform/graphics/filters/software/FEImageSoftwareApplier.h: Copied from Source/WebCore/platform/graphics/coreimage/SourceGraphicCoreImageApplier.h.
        * platform/graphics/filters/software/FELightingSoftwareApplier.h:
        (WebCore::FELightingSoftwareApplier::AlphaWindow::topLeft const): Deleted.
        (WebCore::FELightingSoftwareApplier::AlphaWindow::left const): Deleted.
        (WebCore::FELightingSoftwareApplier::AlphaWindow::bottomLeft const): Deleted.
        (WebCore::FELightingSoftwareApplier::AlphaWindow::top const): Deleted.
        (WebCore::FELightingSoftwareApplier::AlphaWindow::center const): Deleted.
        (WebCore::FELightingSoftwareApplier::AlphaWindow::bottom const): Deleted.
        (WebCore::FELightingSoftwareApplier::AlphaWindow::setTop): Deleted.
        (WebCore::FELightingSoftwareApplier::AlphaWindow::setCenter): Deleted.
        (WebCore::FELightingSoftwareApplier::AlphaWindow::setBottom): Deleted.
        (WebCore::FELightingSoftwareApplier::AlphaWindow::setTopRight): Deleted.
        (WebCore::FELightingSoftwareApplier::AlphaWindow::setRight): Deleted.
        (WebCore::FELightingSoftwareApplier::AlphaWindow::setBottomRight): Deleted.
        (WebCore::FELightingSoftwareApplier::AlphaWindow::shiftRow): Deleted.
        (WebCore::FELightingSoftwareApplier::AlphaWindow::shift): Deleted.
        * platform/graphics/filters/software/FEMergeSoftwareApplier.h:
        * platform/graphics/filters/software/FEMorphologySoftwareApplier.h:
        (WebCore::FEMorphologySoftwareApplier::pixelArrayIndex): Deleted.
        (WebCore::FEMorphologySoftwareApplier::makePixelValueFromColorComponents): Deleted.
        (WebCore::FEMorphologySoftwareApplier::makeColorComponentsfromPixelValue): Deleted.
        * platform/graphics/filters/software/FEOffsetSoftwareApplier.h:
        * platform/graphics/filters/software/FETileSoftwareApplier.h:
        * platform/graphics/filters/software/FETurbulenceSoftwareApplier.h:
        (WebCore::FETurbulenceSoftwareApplier::PaintingData::random): Deleted.
        (WebCore::FETurbulenceSoftwareApplier::smoothCurve): Deleted.
        (WebCore::FETurbulenceSoftwareApplier::linearInterpolation): Deleted.
        * platform/graphics/filters/software/SourceAlphaSoftwareApplier.h:
        * platform/graphics/filters/software/SourceGraphicSoftwareApplier.h:
        * rendering/svg/RenderSVGResourceFilterPrimitive.cpp:
        * svg/SVGFEImageElement.cpp:
        * svg/SVGFEImageElement.h:

2022-01-23  Matt Woodrow  <mattwoodrow@apple.com>

        Position:fixed layers shouldn't allocate a backing buffer if all children are offscreen.
        https://bugs.webkit.org/show_bug.cgi?id=235420
        <rdar://86612099>

        Reviewed by Simon Fraser and Darin Adler.

        Adds a bounds intersection check to isPaintDestinationForDescendantLayers,
        so that we can exclude descendants that definitely won't draw anything into
        the compositing layer. Uses a conservative check, which gives up if there are
        any transforms in the ancestor chain.

        Test: compositing/backing/no-backing-for-offscreen-children-of-position-fixed.html

        * rendering/RenderLayerBacking.cpp:
        (WebCore::intersectsWithAncestor):
        (WebCore::RenderLayerBacking::isPaintDestinationForDescendantLayers const):

2022-01-23  Darin Adler  <darin@apple.com>

        Fix "componet" typo in just-landed patch.

        * platform/graphics/ColorInterpolation.h: I suggested Sam change a name
        to interpolateComponentWithoutAccountingForNaN, but mispelled it "componet".
        Fixing it here.

2022-01-23  Sam Weinig  <weinig@apple.com>

        Support interpolating colors with missing/none components via color-mix()
        https://bugs.webkit.org/show_bug.cgi?id=235496

        Reviewed by Darin Adler.

        Adds support for interpolating colors that have a missing/none component. Currently,
        the only way for a color to have a missing/none component is for it to be specified
        explicitly by the user (e.g. hsl(none 20% 40%)), but the interpolation implementation
        is agnostic to how the color was created so will work once there is automatic creation
        of missing/none components on conversion for powerless components.

        This change only enables the new interpolation behavior for color-mix(), by replacing
        a call of colorType.resolved() with colorType.unresolved(), support for other interpolation
        use cases will follow. 

        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::mixColorComponentsUsingColorInterpolationMethod):
        Replace resolved() with unrersolved() to allow NaN values through to interpolation.

        * platform/graphics/ColorInterpolation.cpp:
        (WebCore::fixupHueComponentsPriorToInterpolation):
        (WebCore::interpolateColors):
        Move non-templated version of interpolateColors to the implementation file as it generates
        a lot of code and there is little reason to believe it would be useful to inline it.

        * platform/graphics/ColorInterpolation.h:
        (WebCore::interpolateComponent):
        (WebCore::interpolateComponentAccountingForNaN):
        (WebCore::interpolateHue):
        (WebCore::interpolateAlphaPremulitplied):
        (WebCore::interpolateComponentUsingPremultipliedAlpha):
        (WebCore::interpolateAlphaUnpremulitplied):
        (WebCore::interpolateComponentUsingUnpremultipliedAlpha):
        (WebCore::interpolateColorComponents):
        (WebCore::preInterpolationNormalizationForComponent): Deleted.
        (WebCore::preInterpolationNormalization): Deleted.
        (WebCore::postInterpolationNormalizationForComponent): Deleted.
        (WebCore::postInterpolationNormalization): Deleted.
        (WebCore::interpolateColors): Deleted.
        Replace existing interpolation implementation which separated each component into pre/interpolate/post
        steps, with one that does all three steps at once and now also supports missing components. Removing
        the steps made the overall algorithm is easier to understand a couples premulitplication and unpremultiplication
        much closer together.

        * platform/graphics/ColorTypes.h:
        (WebCore::constexprIsNaN):
        Update comment to include missing word.

2022-01-23  Darin Adler  <darin@apple.com>

        Improve FourCC to use more inlining, fix incorrect mix of WEBCORE_EXPORT on entire class with inline functions
        https://bugs.webkit.org/show_bug.cgi?id=235461

        Reviewed by Sam Weinig.

        * WebCore.xcodeproj/project.pbxproj: Added FourCC.cpp. Because of
        unified sources it was compiled, but because it was not in the project
        various Xcode features would not work.

        * platform/graphics/avfoundation/ISOFairPlayStreamingPsshBox.cpp:
        Added some explicitly non-inlined exported functions. These need to
        be exported because they are used in TestWebKitAPI tests and we
        want to export the functions rather than the vtable pointer.
        * platform/graphics/avfoundation/ISOFairPlayStreamingPsshBox.h:
        Stop using WEBCORE_EXPORT on whole classes that contain inline
        functions, and instead use it on individual functions.

        * platform/graphics/FourCC.cpp:
        (WebCore::FourCC::fromString): Take a StringView instead of String.
        Removed unnecessary allocation of a temporary CString for the result
        of String::ascii.
        (WebCore::FourCC::string const): Rename from toString to string and
        changed the return type to std::array instead of String.

        * platform/graphics/FourCC.h: Made all the constructors constexpr.
        Changed the string literal constructor to just work with 4-character
        strings. The old one was a template for any length string, but then
        asserted it was 4 characters long, which is a roundabout way to do it.

        * platform/graphics/HEVCUtilities.cpp:
        (WebCore::parseHEVCDecoderConfigurationRecord): Take FourCC instead
        of const FourCC&. Also removed unnecessary explicit conversion to
        FourCC since four character strings.
        * platform/graphics/HEVCUtilities.h: Ditto.

        * platform/graphics/avfoundation/ISOFairPlayStreamingPsshBox.h:
        Removed unneeded WEBCORE_EXPORT on these classes.

        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp:
        (WebCore::InbandTextTrackPrivateAVF::processNativeSamples): Removed
        unnecesary calls to toString, logging can handle FourCC without it.
        Also removed unneeded type casts to size_t.

        * platform/graphics/avfoundation/objc/AVAssetTrackUtilities.mm:
        (WebCore::contentTypesToCodecs): Removed unnecessary allocation of
        a String by using StringView for the substring.

        * platform/graphics/cocoa/HEVCUtilitiesCocoa.mm:
        (WebCore::validateHEVCParameters): Added an explicit cast to String
        since FourCC::fromString now takes a StringView. Sadly there's not
        a trivial way to do this without allocating a String.

        * platform/graphics/cv/GraphicsContextGLCVCocoa.cpp:
        (WebCore::GraphicsContextGLCVCocoa::copyVideoSampleToTexture):
        Since FourCC::string now returns a std::array with a C-style
        null-terminated string, use it instead of calling toString and
        then utf8. Cleaner and also much more efficient.

        * platform/graphics/iso/ISOBox.cpp: Moved constructors and
        destructors so they are no longer inlined so there is no need to
        export the vtable.
        (WebCore::ISOBox::peekBox): Removed unnecessary initialization
        of FourCC since they are zero by default.

        * platform/graphics/iso/ISOBox.h: Removed WEBCORE_EXPORT of
        the entire class, since that's not fully compatible with a class
        with inline functions (warning is done by check-webkit-style).
        Put WEBCORE_EXPORT on individual functions instead.  Also use some
        more constexpr, removed unneeded FourCC initialization since it is
        zero by default, and use FourCC, not const FourCC& for return value.

        * platform/graphics/iso/ISOOriginalFormatBox.h: Removed unneeded
        FourCC initialization since it is zero by default.
        * platform/graphics/iso/ISOSchemeTypeBox.h: Ditto.

        * platform/graphics/iso/ISOVTTCue.cpp: Moved constructors and
        destructors so they are no longer inlined so there is no need to
        export the vtable.
        (WebCore::ISOWebVTTCue::parse): Use PRIu64 instead of casting
        to size_t, no need to rely on the relationship between type sizes.

        * platform/graphics/iso/ISOVTTCue.h: Removed WEBCORE_EXPORT of
        the entire class, since that's not fully compatible with a class
        with inline functions (warning is done by check-webkit-style).
        Put WEBCORE_EXPORT on individual functions instead.

2022-01-23  Tyler Wilcock  <tyler_w@apple.com>

        AX Isolated Tree Mode: Re-compute AXPropertyName::IsEnabled when a node experiences AXDisabledStateChanged
        https://bugs.webkit.org/show_bug.cgi?id=235295

        Reviewed by Chris Fleizach.

        Test: accessibility/dynamic-attribute-changes-should-update-isenabled.html

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::updateIsolatedTree):
        Re-compute AXPropertyName::IsEnabled when receiving an AXDisabledStateChanged notification.
        * accessibility/isolatedtree/AXIsolatedTree.cpp:
        (WebCore::AXIsolatedTree::updateNodeProperty):
        Handle requests for AXPropertyName::IsEnabled updates.

2022-01-23  Antoine Quint  <graouts@webkit.org>

        [Model] Add load and error events to distinguish resource load from model readiness
        https://bugs.webkit.org/show_bug.cgi?id=233706
        rdar://85922697

        Reviewed by Chris Dumez and Dean Jackson.

        Test: model-element/model-element-error-and-load-events.html

        Prior to this patch, <model> elements had a "ready" promise which resolved once the resource had been loaded.
        However, this promise should be used when the <model> is fully ready, and this is done on macOS and iOS asynchronously
        after the resource has been loaded by the supporting ARQL framework. So we need a way to monitor success or failure of
        the resource load specifically.

        To that end, and matching the <img> element, we dispatch "load" and "error" events on <model> elements and add a
        "complete" property to indicate whether the resource is loaded.

        Meanwhile, the "ready" promise is now resolved when the model is fully loaded by the supporting framework, indicating
        that further APIs are safe to use.

        Since creating the support ARQL object for macOS and iOS also requires the <model> element's renderer being available,
        we opt into "custom style resolve callbacks" so that we may implement didAttachRenderers() on HTMLModelElement and keep
        track of renderer availability before attempting to create the ModelPlayer.

        * Modules/model-element/HTMLModelElement.cpp:
        (WebCore::HTMLModelElement::HTMLModelElement):
        (WebCore::HTMLModelElement::create):
        (WebCore::HTMLModelElement::setSourceURL):
        (WebCore::HTMLModelElement::didAttachRenderers):
        (WebCore::HTMLModelElement::notifyFinished):
        (WebCore::HTMLModelElement::modelDidChange):
        (WebCore::HTMLModelElement::createModelPlayer):
        (WebCore::HTMLModelElement::didFinishLoading):
        (WebCore::HTMLModelElement::didFailLoading):
        (WebCore::HTMLModelElement::activeDOMObjectName const):
        (WebCore::HTMLModelElement::virtualHasPendingActivity const):
        * Modules/model-element/HTMLModelElement.h:
        * Modules/model-element/HTMLModelElement.idl:

2022-01-23  Antoine Quint  <graouts@webkit.org>

        m_lastStyleChangeEventStyle null ptr deref for accelerated CSS Animation with no duration and an implicit keyframe
        https://bugs.webkit.org/show_bug.cgi?id=235394
        <rdar://problem/87701738>

        Reviewed by Antti Koivisto.

        Test: webanimations/accelerated-animation-without-duration-crash.html

        In r287827, the fix for bug 235014, we stopped filling implicit keyframes for CSS Animations at creation
        time such that the output of getKeyframes() would correctly account for the missing keyframes. This meant
        that we have to fill in those implicit keyframes when running an accelerated animation before we pass it
        on to GraphicsLayer.

        We would always use the value stored by lastStyleChangeEventStyle() with an assert that this value was
        never null. However, in the case of an animation that is not relevant, such as a CSS Animation with no
        duration, we've never had a chance to set that style since Style::TreeResolver::createAnimatedElementUpdate()
        would not see any "relevant" (a term defined by the Web Animations specification to specify an animation
        that has an effect on its target) animations.

        We now use the renderer's style as a fallback, which is guaranteed to be defined at this stage.

        * animation/KeyframeEffect.cpp:
        (WebCore::KeyframeEffect::applyPendingAcceleratedActions):

2022-01-23  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] C++20 warnings
        https://bugs.webkit.org/show_bug.cgi?id=235493

        Reviewed by Darin Adler.

        Fix ambiguous-reversed-operator warnings. In C++20 comparison operators (like a == b) need
        to be declared const, so that reverse comparisons (like b == a) also work as intended.

        * platform/graphics/gstreamer/GStreamerCommon.h:
        (GstIteratorAdaptor::iterator::operator== const):
        (GstIteratorAdaptor::iterator::operator!= const):
        (GstIteratorAdaptor::iterator::operator==): Deleted.
        (GstIteratorAdaptor::iterator::operator!=): Deleted.

2022-01-23  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] InlineFormattingContext::computeGeometryForLineContent should always return the line logical rect
        https://bugs.webkit.org/show_bug.cgi?id=235494

        Reviewed by Antti Koivisto.

        The return rect of computeGeometryForLineContent (based on the display line) is input to the next line's
        initial rect and therefore it is supposed to be logical (in general, layout should strictly use logical coords).

        This is in preparation for supporting vertical writing mode.

        * layout/formattingContexts/inline/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::computeGeometryForLineContent):
        * layout/formattingContexts/inline/InlineFormattingGeometry.cpp:
        (WebCore::Layout::InlineFormattingGeometry::flipVisualRectToLogicalForWritingMode):
        * layout/formattingContexts/inline/InlineFormattingGeometry.h:

2022-01-23  Ziran Sun  <zsun@igalia.com>

        [forms] Prevent contenteditable anchors from being stuck
        https://bugs.webkit.org/show_bug.cgi?id=235438

        Reviewed by Darin Adler.

        Anchors can be stuck in the :active state if contenteditable is enabled before
        :active is removed. With this patch setActive() can remove :active during
        contenteditable in order to prevent anchors from navigating during contenteditable.

        This is an import of Chromium CL at
        https://chromium-review.googlesource.com/c/chromium/src/+/2595978        

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::setActive):

2022-01-23  Tyler Wilcock  <tyler_w@apple.com>

        AX: Refactor near-duplicate AXObjectCache::updateIsolatedTree implementations
        https://bugs.webkit.org/show_bug.cgi?id=235481

        Reviewed by Chris Fleizach.

        AXObjectCache::updateIsolatedTree(AXCoreObject&, AXNotification) and
        AXObjectCache::updateIsolatedTree(const Vector<std::pair<RefPtr<AXCoreObject>, AXNotification>>&)
        duplicate a lot of code, and make it possible to forget to add new
        notification handling in one place or the other. This patch refactors
        this by making the single-object versions of this method defer to the
        multiple-object version by wrapping the single change in a Vector.

        No tests added because there is no behavior change.

        * accessibility/AXObjectCache.cpp:
        (WebCore::appendIfNotContainsMatching):
        Moved this function above updateIsolatedTree methods. No other change.
        (WebCore::AXObjectCache::updateIsolatedTree):

2022-01-23  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] LineLayout::contentLogicalHeight should always return the logical height
        https://bugs.webkit.org/show_bug.cgi?id=235488

        Reviewed by Antti Koivisto.

        The display boxes/lines always have visual geometries and in case of vertical writing mode it means that the
        content stretches in horiztonal direction (left to right/right to left).

        This is in preparation for supporting vertical writing mode.

        * layout/integration/LayoutIntegrationLineLayout.cpp:
        (WebCore::LayoutIntegration::LineLayout::contentLogicalHeight const):
        (WebCore::LayoutIntegration::LineLayout::adjustForPagination):
        * layout/integration/LayoutIntegrationLineLayout.h:
        (WebCore::LayoutIntegration::LineLayout::isPaginated const):

2022-01-23  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Enable unicode-bidi: plaintext for IFC
        https://bugs.webkit.org/show_bug.cgi?id=235429

        Reviewed by Antti Koivisto.

        * layout/integration/LayoutIntegrationCoverage.cpp:
        (WebCore::LayoutIntegration::printReason):
        (WebCore::LayoutIntegration::canUseForStyle):
        * layout/integration/LayoutIntegrationCoverage.h:

2022-01-22  Ben Nham  <nham@apple.com>

        Add PushSubscriptionIdentifier
        https://bugs.webkit.org/show_bug.cgi?id=234797

        Reviewed by Darin Adler.

        This adds a PushSubscriptionIdentifier to each PushSubscription. Implementation-wise, it
        will be the rowid if the subscription in the subscription database. We need this so that
        PushSubscription.unsubscribe only unsubscribes from the given subscription. Currently it
        unsubscribes from any active subscription associated with the subscription's service worker
        scope.

        No new tests. I plan on adding a test for this case in an API test which will work with real
        PushSubscription objects when I submit the patch that implements the subscription business
        logic in webpushd. The current layout tests only work with fake PushSubscription objects
        that aren't connected to webpushd.

        * Headers.cmake:
        * Modules/push-api/PushSubscription.cpp:
        (WebCore::PushSubscription::unsubscribe):
        * Modules/push-api/PushSubscriptionData.cpp:
        (WebCore::PushSubscriptionData::isolatedCopy const):
        * Modules/push-api/PushSubscriptionData.h:
        (WebCore::PushSubscriptionData::encode const):
        (WebCore::PushSubscriptionData::decode):
        webpushd only supports modern decoding and we need to send this object to it, so use modern decoding.

        * Modules/push-api/PushSubscriptionIdentifier.h:
        * WebCore.xcodeproj/project.pbxproj:
        * testing/Internals.cpp:
        (WebCore::Internals::createPushSubscription):
        * testing/ServiceWorkerInternals.cpp:
        (WebCore::ServiceWorkerInternals::createPushSubscription):
        * workers/service/SWClientConnection.h:
        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::unsubscribeFromPushService):
        * workers/service/ServiceWorkerContainer.h:
        * workers/service/ServiceWorkerRegistration.cpp:
        (WebCore::ServiceWorkerRegistration::unsubscribeFromPushService):
        * workers/service/ServiceWorkerRegistration.h:
        * workers/service/WorkerSWClientConnection.cpp:
        (WebCore::WorkerSWClientConnection::unsubscribeFromPushService):
        * workers/service/WorkerSWClientConnection.h:

2022-01-22  Alan Bujtas  <zalan@apple.com>

        REGRESSION(r280887) broke some svg based chart content repaint
        https://bugs.webkit.org/show_bug.cgi?id=235483
        <rdar://87904254>

        Unreviewed, reverting r280887.

        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::svgAttributeChanged):

2022-01-22  Peng Liu  <peng.liu6@apple.com>

        REGRESSION (Safari 15?): Blob videos slow to pause, affects CBS and CNN
        https://bugs.webkit.org/show_bug.cgi?id=234066

        Reviewed by Jer Noble.

        `MediaPlayerPrivateMediaSourceAVFObjC::playInternal()` calls `[m_synchronizer setRate:]`,
        which will make the return value of `MediaPlayerPrivateMediaSourceAVFObjC::paused()` change
        from true to false. But it won't push the new `paused` value back to the Web process.

        `RemoteMediaPlayerProxy::play()` does call `sendCachedState()` after calling
        `m_player->play()`, but because `MediaPlayerPrivateMediaSourceAVFObjC::playInternal()` is not
        called in the same run loop, `sendCachedState()` won't send back the updated `paused` value either.

        In most cases, this is not an issue, because other member functions of `RemoteMediaPlayerProxy`
        will call `sendCachedState()` to push the updated `paused` value back to the Web process later.
        However, we did find some videos need the `paused` value to be pushed back the Web process
        in a timely manner.

        No new tests, manually tested.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::playInternal):

2022-01-22  Said Abou-Hallawa  <said@apple.com>

        [GPU Process] Add the class 'SourceImage' to represent variants of image
        https://bugs.webkit.org/show_bug.cgi?id=235467

        Reviewed by Cameron McCormack.

        Before the existence of GPUProcess we used to do some drawing on an 
        ImageBuffer, get a NativeImage from the ImageBuffer and then use this
        NativeImage. With GPUProces, this will require bouncing the NativeImage 
        between WebProcess and GPUProcess at least two times. To make this scenario 
        efficient, a new class called 'SourceImage' will be introduced. The purpose
        of this class is to provide a new level of abstraction for the images
        such that no conversion is needed before the actual use.

        Replace FEImage::SourceImage with a new class named 'SourceImage'. Let 
        the new class handle the encoding and decoding and the conversion from
        NativeImage to ImageBuffer and vice versa.

        Make Recorder::recordResourceUse() returns a boolean which indicates
        whether the resource can be cached for later replay or not.

        * Headers.cmake:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/Image.h:
        (WebCore::Image::nativeImageForCurrentFrame):
        (WebCore::Image::preTransformedNativeImageForCurrentFrame):
        * platform/graphics/SourceImage.cpp: Added.
        (WebCore::SourceImage::SourceImage):
        (WebCore::SourceImage::nativeImageIfExists const):
        (WebCore::SourceImage::nativeImage):
        (WebCore::SourceImage::imageBufferIfExists const):
        (WebCore::SourceImage::imageBuffer):
        (WebCore::SourceImage::imageIdentifier const):
        * platform/graphics/SourceImage.h: Added.
        (WebCore::SourceImage::encode const):
        (WebCore::SourceImage::decode):
        * platform/graphics/displaylists/DisplayListRecorder.cpp:
        (WebCore::DisplayList::Recorder::drawFilteredImageBuffer):
        (WebCore::DisplayList::Recorder::drawImageBuffer):
        * platform/graphics/displaylists/DisplayListRecorder.h:
        * platform/graphics/displaylists/DisplayListRecorderImpl.cpp:
        (WebCore::DisplayList::RecorderImpl::recordResourceUse):
        * platform/graphics/displaylists/DisplayListRecorderImpl.h:
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::filterEffect const):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::nativeImageForCurrentFrame): Deleted.
        * svg/graphics/SVGImage.h:
        * svg/graphics/filters/SVGFEImage.cpp:
        (WebCore::FEImage::calculateImageRect const):
        (WebCore::FEImageSoftwareApplier::apply const):
        * svg/graphics/filters/SVGFEImage.h:
        (WebCore::FEImage::encode const):
        (WebCore::FEImage::decode):

2022-01-22  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add InlineDisplay::Box::isHorizontal
        https://bugs.webkit.org/show_bug.cgi?id=235482

        Reviewed by Antti Koivisto.

        This is in preparation for supporting vertical writing mode.

        * layout/formattingContexts/inline/display/InlineDisplayBox.h:
        (WebCore::InlineDisplay::Box::isHorizontal const):
        * layout/integration/InlineIteratorBoxModernPath.h:
        (WebCore::InlineIterator::BoxModernPath::isHorizontal const):

2022-01-22  Alan Bujtas  <zalan@apple.com>

        REGRESSION (r288069): Bits of selection left after deselecting on bugzilla page
        https://bugs.webkit.org/show_bug.cgi?id=235466
        <rdar://87902230>

        Reviewed by Darin Adler.

        Undo the incorrect dynamicDowncast change.

        This code reads (perhaps confusingly at first sight):
          return is<RenderView>(containingBlock) ? nullptr : containingBlock;

        while the dynamicDowncast is meant to shorten code like this:
          return is<RenderView>(containingBlock) ? containingBlock : nullptr;

        Test: fast/text/incorrect-deselection-across-multiple-elements.html

        * rendering/SelectionRangeData.cpp:
        (WebCore::containingBlockBelowView):

2022-01-22  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Use content direction for the first "unicode-paragraph" when "unicode-bidi: plaintext" is present
        https://bugs.webkit.org/show_bug.cgi?id=235452

        Reviewed by Antti Koivisto.

        This makes the /css/css-writing-modes/bidi-plaintext-br-* tests pass (not enabled yet).

        * layout/formattingContexts/inline/InlineLineBuilder.cpp:
        (WebCore::Layout::LineBuilder::layoutInlineContent):

2022-01-22  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Alignment logic should take the line specific direction (which may be different from the root direction)
        https://bugs.webkit.org/show_bug.cgi?id=235460

        Reviewed by Antti Koivisto.

        This makes the the /html/dom/elements/global-attributes/dir_auto-* tests pass (not enabled yet).

        * layout/formattingContexts/inline/InlineLineBoxBuilder.cpp:
        (WebCore::Layout::LineBoxBuilder::build):

2022-01-22  Andres Gonzalez  <andresg_22@apple.com>

        Create ancestry of isolated objects instead of generating the entire subtree for an ancestor.
        https://bugs.webkit.org/show_bug.cgi?id=235389
        <rdar://problem/87803473>

        Reviewed by Chris Fleizach.

        AXIsolatedTree::updateChildren may be called for an AXObject that has no
        corresponding IsolatedObject. That is the case of empty canvas and some
        empty div elements. In those cases we were generating the subtree of the
        first available ancestor in the isolated tre. This can be expensive
        because in some cases the immediate exisiting ancestor was the webarea,
        causing the re-generation of the entire isolated tree. With this patch,
        only the IsolatedObjects that are missing in the isolated tree are added
        to the tree.

        * accessibility/isolatedtree/AXIsolatedTree.cpp:
        (WebCore::AXIsolatedTree::nodeChangeForObject):
        (WebCore::AXIsolatedTree::queueChanges):
        The above two methods are added to avoid coude duplication and to be
        able to decouple the creation of new isolated objects from the addition
        of those objects to the isolated tree.
        (WebCore::AXIsolatedTree::createSubtree):
        (WebCore::AXIsolatedTree::updateChildren):
        * accessibility/isolatedtree/AXIsolatedTree.h:

2022-01-22  Oriol Brufau  <obrufau@igalia.com>

        [CSS Cascade Layers] Enable CSSImportRule.layerName for WebKitGTK
        https://bugs.webkit.org/show_bug.cgi?id=235455

        Reviewed by Darin Adler.

        Bug 231340 added support for CSSImportRule.layerName, but CMakeLists.txt
        wasn't listing CSSImportRule+Layer.idl

        So the attribute was not there when running WebKitGTK, built with CMake.

        Tests: imported/w3c/web-platform-tests/css/css-cascade/idlharness.html
               imported/w3c/web-platform-tests/css/css-cascade/layer-rules-cssom.html

        * CMakeLists.txt: link missing css/CSSImportRule+Layer.idl

2022-01-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][a11y] Stop registering the tree when clients are connected with ATSPI
        https://bugs.webkit.org/show_bug.cgi?id=235313

        Reviewed by Adrian Perez de Castro.

        That was needed with the isolated tree mode, now we can go back to register objects on demand.

        * accessibility/atspi/AXObjectCacheAtspi.cpp:
        (WebCore::AXObjectCache::platformPerformDeferredCacheUpdate):
        * accessibility/atspi/AccessibilityAtspi.cpp:
        (WebCore::AccessibilityAtspi::addClient):
        (WebCore::AccessibilityAtspi::parentChanged):
        (WebCore::AccessibilityAtspi::childrenChanged):
        (WebCore::AccessibilityAtspi::cacheClearTimerFired):
        * accessibility/atspi/AccessibilityObjectAtspi.cpp:
        (WebCore::AccessibilityObjectAtspi::isTreeRegistered const): Deleted.
        * accessibility/atspi/AccessibilityObjectAtspi.h:
        * accessibility/atspi/AccessibilityRootAtspi.cpp:
        (WebCore::AccessibilityRootAtspi::embedded):
        (WebCore::AccessibilityRootAtspi::child const):
        (WebCore::AccessibilityRootAtspi::childAdded):
        (WebCore::registerSubtree): Deleted.
        (WebCore::AccessibilityRootAtspi::registerTree): Deleted.
        (WebCore::AccessibilityRootAtspi::didUnregisterTree): Deleted.
        * accessibility/atspi/AccessibilityRootAtspi.h:

2022-01-21  Tim Horton  <timothy_horton@apple.com>

        GraphicsContextStateChange logging doesn't dump shadow color
        https://bugs.webkit.org/show_bug.cgi?id=235428

        Reviewed by Wenson Hsieh.

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContextStateChange::dump const):
        Add shadowColor property to the things we dump on ShadowChange.

2022-01-21  Tyler Wilcock  <tyler_w@apple.com>

        AX: Move Mac subrole logic to new subrolePlatformString AXCoreObject interface method
        https://bugs.webkit.org/show_bug.cgi?id=235414

        Reviewed by Chris Fleizach.

        This patch moves most of the Mac subrole logic to a new AXCoreObject interface
        method, subrolePlatformString (matching the naming of rolePlatformString).
        This allows us to cache a new AXPropertyName::SubrolePlatformString
        property in isolated tree objects.

        This fixes accessibility/mac/subroles-for-formatted-groups.html in isolated
        tree mode because this test exercised the `backingObject->isStyleFormatGroup()` codepath,
        which in turn tried to compare AtomStrings off the main-thread, which won't work
        (the string comparisons will unexpectedly not match).

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::subrolePlatformString const):
        Added.
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityObjectInterface.h:
        * accessibility/isolatedtree/AXIsolatedObject.h:
        * accessibility/isolatedtree/AXIsolatedTree.h:
        Add new AXPropertyName::SubrolePlatformString property.
        * accessibility/isolatedtree/AXIsolatedObject.cpp:
        (WebCore::AXIsolatedObject::initializeAttributeData):
        Initialize new AXPropertyName::subrolePlatformString.
        * accessibility/mac/AccessibilityObjectMac.mm:
        (WebCore::AccessibilityObject::subrolePlatformString const):
        Added.
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper isEmptyGroup]):
        Added.
        (-[WebAccessibilityObjectWrapper subrole]):
        Defer to subrolePlatformString for determining all subroles except AXEmptyGroup.

2022-01-21  Sihui Liu  <sihui_liu@apple.com>

        Disable CFURLCache in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=234988
        <rdar://problem/87619196>

        Reviewed by Geoffrey Garen.

        _CFURLStorageSessionCopyCache can be slow (see rdar://85418732) and UI process may kill network process for
        being unresponsive. Since WebKit does not use CFURLCache, we should disable it to avoid the hang.

        * platform/network/NetworkStorageSession.h:
        * platform/network/cf/NetworkStorageSessionCFNet.cpp:
        (WebCore::NetworkStorageSession::createCFStorageSessionForIdentifier):
        * platform/network/cocoa/NetworkStorageSessionCocoa.mm:
        (WebCore::createPrivateStorageSession):

2022-01-21  Tim Horton  <timothy_horton@apple.com>

        imported/w3c/web-platform-tests/css/css-color/parsing/color-valid.html fails in debug

        Reviewed by Sam Weinig.

        * platform/graphics/ColorTypes.h:
        (WebCore::assertInRange):
        We want to *ignore* NaN alpha, like for the other channels. The conditional was backwards.

2022-01-21  Mike Gorse  <mgorse@suse.com>

        Build failure with g++ 12: std::exchange undefined
        https://bugs.webkit.org/show_bug.cgi?id=235445

        Reviewed by Michael Catanzaro.

        * platform/graphics/x11/XUniqueResource.h: Include <utility>

2022-01-21  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Inline boxes with collapsible content only should not be considered opaque bidi items
        https://bugs.webkit.org/show_bug.cgi?id=235447

        Reviewed by Antti Koivisto.

        We don't normally submit inline boxes with content to ubidi re-ordering since their content drives the visual
        position unless they are empty. While empty inline boxes do not usually produce visual artifacts (except ones with decoration)
        they still need to be able to answer "bounding box" type of questions.

        So in order to have geometry generated for inline boxes, they either
        1, need to have some content so that while processing their content, we also compute their geometries
        2, have to participate in ubidi's visual re-ordering so that they show up in the visual list (which is the input to the display box create function) 

        This patch treats inline boxes with fully collapsible content empty so that they fall into group #2. 

        * layout/formattingContexts/inline/InlineItemsBuilder.cpp:
        (WebCore::Layout::InlineItemsBuilder::breakAndComputeBidiLevels):

2022-01-21  Antti Koivisto  <antti@apple.com>

        WPT version of css/css-cascade/parsing/layer-import-parsing.html crashes with nullptr
        https://bugs.webkit.org/show_bug.cgi?id=235434
        rdar://87832940

        Reviewed by Alan Bujtas.

        Test: fast/css/insert-import-rule-crash.html

        * css/StyleRuleImport.cpp:
        (WebCore::StyleRuleImport::setCSSStyleSheet):

        Null check the parent stylesheet. It can be null if the rule has been removed.

        * dom/InlineStyleSheetOwner.cpp:
        (WebCore::InlineStyleSheetOwner::startLoadingDynamicSheet):

        Also fix a debug assert in addPendingSheet, this can get called multiple times.

2022-01-21  Lauro Moura  <lmoura@igalia.com>

        [CMake] Cannot link libTestRunnerInjectedBundle.so in non unified build
        https://bugs.webkit.org/show_bug.cgi?id=226088

        Reviewed by Adrian Perez de Castro.

        Covered by existing tests.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::isUnderTest const): Defining  it.
        * inspector/InspectorController.h: Export isUnderTest().
        * loader/SubresourceIntegrity.h: Add missing header.
        * platform/gtk/ValidationBubbleGtk.cpp: Ditto.
        * svg/graphics/filters/SVGFEImage.h: Ditto.
        * testing/Internals.cpp:
        (WebCore::Internals::mediaSessionState): Cast new enum to the WebCore
        one.
        * testing/Internals.h: Redefine MediaSessionState as a new enum
        instead of aliasing to avoid redefinitions of
        convertEnumerationToString in non-unified builds.
        * workers/WorkerConsoleClient.h:

2022-01-21  Martin Robinson  <mrobinson@webkit.org>

        element.scrollIntoView() sometimes doesn't scroll
        https://bugs.webkit.org/show_bug.cgi?id=42593

        Reviewed by Simon Fraser.

        No new tests. This is covered by existing WPT tests.

        For some operations which scroll to a rectangle, if an object is more than
        32 pixels onscreen, it's not considered onscreen. This was originally used
        to prevent unnecessary scrolling while tabbing through form fields, but is
        no longer used for that in the majority of cases. Instead, the behavior affects
        the calls to Element.focus(), Element.scrollIntoView(), and navigations to
        anchor elements.

        While navigation to anchor elements and calls to Element.focus() offer more
        flexibility to the user agent, this behavior is not spec-compliant with
        scrollIntoView(). This change adds a flag to ScrollAlignment to turn it off.

        It could be that, in the future, the behavior for focus() is specified more
        thoroughly, which might mean extending this fix.

        * dom/Element.cpp:
        (WebCore::Element::scrollIntoView): Turn off the legacy horizontal visibility threshold.
        (WebCore::Element::scrollIntoViewIfNeeded): Ditto.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::getRectToExpose const): Use the new setting in ScrollAlignment
        and also rework the code to use the new methods on ScrollAlignment.
        * rendering/ScrollAlignment.h:
        (WebCore::ScrollAlignment::getVisibleBehavior const): Converted this to a method to match
        the new ones.
        (WebCore::ScrollAlignment::getPartialBehavior const): Ditto.
        (WebCore::ScrollAlignment::getHiddenBehavior const): Ditto.
        (WebCore::ScrollAlignment::disableLegacyHorizontalVisibilityThreshold): Added.
        (WebCore::ScrollAlignment::legacyHorizontalVisibilityThresholdEnabled const): Added.
        (WebCore::ScrollAlignment::getVisibleBehavior): Deleted.
        (WebCore::ScrollAlignment::getPartialBehavior): Deleted.
        (WebCore::ScrollAlignment::getHiddenBehavior): Deleted.

2022-01-21  Fujii Hironori  <Hironori.Fujii@sony.com>

        Fix AppleWin build with newer MSVC
        https://bugs.webkit.org/show_bug.cgi?id=235431

        Reviewed by Alex Christensen.

        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        (printLayer):

2022-01-20  Said Abou-Hallawa  <said@apple.com>

        [Cocoa] Accelerated filters are enabled by the wrong setting
        https://bugs.webkit.org/show_bug.cgi?id=235376

        Reviewed by Simon Fraser.

        This patch does the following:

        1. Delete the setting AcceleratedFiltersEnabled since it has not been
           enabled by any port.
        2. Delete CoreImageAcceleratedFilterRenderEnabled from the experimental
           features list because CoreImage filters are not ready to be run in
           the layout tests.
        3. Add AcceleratedFiltersEnabled as an internal feature and use it to
           enable CoreImage filters for Cocoa ports.
           and SourceGraphic::createApplier().
        4. Use "Accelerated" instead of using "CoreImage" in the methods of 
           Filter and FilterEffect. The implementation of these methods will be
           guarded by #if USE(CORE_IMAGE) for Cocoa ports.
        6. Split the method createApplier() to two methods: createSoftwareApplier()
           and createAcceleratedApplier() and make FilterEffect::createApplier()
           decide which one to call.

        * Headers.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSFilterImageValue.cpp:
        (WebCore::CSSFilterImageValue::image):
        * page/Page.cpp:
        (WebCore::Page::acceleratedFiltersEnabled const):
        * page/Page.h:
        * page/Settings.yaml:
        * platform/graphics/coreimage/FEColorMatrixCoreImageApplier.h:
        * platform/graphics/coreimage/FEComponentTransferCoreImageApplier.h:
        * platform/graphics/coreimage/SourceGraphicCoreImageApplier.h:
        * platform/graphics/filters/FEBlend.cpp:
        (WebCore::FEBlend::createSoftwareApplier const):
        (WebCore::FEBlend::createApplier const): Deleted.
        * platform/graphics/filters/FEBlend.h:
        * platform/graphics/filters/FEColorMatrix.cpp:
        (WebCore::FEColorMatrix::resultIsAlphaImage const):
        (WebCore::FEColorMatrix::supportsAcceleratedRendering const):
        (WebCore::FEColorMatrix::createAcceleratedApplier const):
        (WebCore::FEColorMatrix::createSoftwareApplier const):
        (WebCore::FEColorMatrix::supportsCoreImageRendering const): Deleted.
        (WebCore::FEColorMatrix::createApplier const): Deleted.
        * platform/graphics/filters/FEColorMatrix.h:
        * platform/graphics/filters/FEComponentTransfer.cpp:
        (WebCore::FEComponentTransfer::supportsAcceleratedRendering const):
        (WebCore::FEComponentTransfer::createAcceleratedApplier const):
        (WebCore::FEComponentTransfer::createSoftwareApplier const):
        (WebCore::FEComponentTransfer::supportsCoreImageRendering const): Deleted.
        (WebCore::FEComponentTransfer::createApplier const): Deleted.
        * platform/graphics/filters/FEComponentTransfer.h:
        * platform/graphics/filters/FEComposite.cpp:
        (WebCore::FEComposite::createSoftwareApplier const):
        (WebCore::FEComposite::createApplier const): Deleted.
        * platform/graphics/filters/FEComposite.h:
        * platform/graphics/filters/FEConvolveMatrix.cpp:
        (WebCore::FEConvolveMatrix::createSoftwareApplier const):
        (WebCore::FEConvolveMatrix::createApplier const): Deleted.
        * platform/graphics/filters/FEConvolveMatrix.h:
        * platform/graphics/filters/FEDisplacementMap.cpp:
        (WebCore::FEDisplacementMap::createSoftwareApplier const):
        (WebCore::FEDisplacementMap::createApplier const): Deleted.
        * platform/graphics/filters/FEDisplacementMap.h:
        * platform/graphics/filters/FEDropShadow.cpp:
        (WebCore::FEDropShadow::createSoftwareApplier const):
        (WebCore::FEDropShadow::createApplier const): Deleted.
        * platform/graphics/filters/FEDropShadow.h:
        * platform/graphics/filters/FEFlood.cpp:
        (WebCore::FEFlood::createSoftwareApplier const):
        (WebCore::FEFlood::createApplier const): Deleted.
        * platform/graphics/filters/FEFlood.h:
        * platform/graphics/filters/FEGaussianBlur.cpp:
        (WebCore::FEGaussianBlur::createSoftwareApplier const):
        (WebCore::FEGaussianBlur::createApplier const): Deleted.
        * platform/graphics/filters/FEGaussianBlur.h:
        * platform/graphics/filters/FELighting.cpp:
        (WebCore::FELighting::createSoftwareApplier const):
        (WebCore::FELighting::createApplier const): Deleted.
        * platform/graphics/filters/FELighting.h:
        * platform/graphics/filters/FEMerge.cpp:
        (WebCore::FEMerge::createSoftwareApplier const):
        (WebCore::FEMerge::createApplier const): Deleted.
        * platform/graphics/filters/FEMerge.h:
        * platform/graphics/filters/FEMorphology.cpp:
        (WebCore::FEMorphology::createSoftwareApplier const):
        (WebCore::FEMorphology::createApplier const): Deleted.
        * platform/graphics/filters/FEMorphology.h:
        * platform/graphics/filters/FEOffset.cpp:
        (WebCore::FEOffset::createSoftwareApplier const):
        (WebCore::FEOffset::createApplier const): Deleted.
        * platform/graphics/filters/FEOffset.h:
        * platform/graphics/filters/FETile.cpp:
        (WebCore::FETile::createSoftwareApplier const):
        (WebCore::FETile::createApplier const): Deleted.
        * platform/graphics/filters/FETile.h:
        * platform/graphics/filters/FETurbulence.cpp:
        (WebCore::FETurbulence::createSoftwareApplier const):
        (WebCore::FETurbulence::createApplier const): Deleted.
        * platform/graphics/filters/FETurbulence.h:
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::createApplier const):
        * platform/graphics/filters/FilterEffect.h:
        (WebCore::FilterEffect::createAcceleratedApplier const):
        * platform/graphics/filters/FilterFunction.h:
        (WebCore::FilterFunction::supportsAcceleratedRendering const):
        (WebCore::FilterFunction::supportsCoreImageRendering const): Deleted.
        * platform/graphics/filters/SourceAlpha.cpp:
        (WebCore::SourceAlpha::createSoftwareApplier const):
        (WebCore::SourceAlpha::createApplier const): Deleted.
        * platform/graphics/filters/SourceAlpha.h:
        * platform/graphics/filters/SourceGraphic.cpp:
        (WebCore::SourceGraphic::supportsAcceleratedRendering const):
        (WebCore::SourceGraphic::createAcceleratedApplier const):
        (WebCore::SourceGraphic::createSoftwareApplier const):
        (WebCore::SourceGraphic::createApplier const): Deleted.
        * platform/graphics/filters/SourceGraphic.h:
        * rendering/CSSFilter.cpp:
        (WebCore::CSSFilter::create):
        (WebCore::CSSFilter::supportsAcceleratedRendering const):
        (WebCore::CSSFilter::supportsCoreImageRendering const): Deleted.
        * rendering/CSSFilter.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects const):
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::applyResource):
        * svg/graphics/filters/SVGFEImage.cpp:
        (WebCore::FEImage::createSoftwareApplier const):
        (WebCore::FEImage::createApplier const): Deleted.
        * svg/graphics/filters/SVGFEImage.h:
        * svg/graphics/filters/SVGFilter.cpp:
        (WebCore::SVGFilter::create):
        (WebCore::SVGFilter::supportsAcceleratedRendering const):
        (WebCore::SVGFilter::supportsCoreImageRendering const): Deleted.
        * svg/graphics/filters/SVGFilter.h:

2022-01-20  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Implement TextUtil::directionForTextContent
        https://bugs.webkit.org/show_bug.cgi?id=235392

        Reviewed by Antti Koivisto.

        Let's check with ubidi_getBaseDirection what the content direction is. We use this
        direction value to drive the line based "content alignment".

        * layout/formattingContexts/inline/text/TextUtil.cpp:
        (WebCore::Layout::TextUtil::directionForTextContent):

2022-01-20  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r284136): A slight horizontal rubberband kills scroll momentum
        https://bugs.webkit.org/show_bug.cgi?id=234384

        Reviewed by Tim Horton.

        ScrollAnimationRubberBand subtly changed the behavior of the rubberband animation on the
        axis that is not the rubberbanding axis. Because it converged on m_targetOffset, it always
        resulted in no offset on that axis.
        
        Fix by restoring the behavior from before r284136, which applies the rubberbanding as a
        delta from the current offset and no longer uses m_targetOffset, which is removed. It's a
        bit surprising that this rubberband animation drives a vertical scroll when the gesture is
        primarily horizontal (normally we'd clamp these deltas to be purely horizontal), but people
        are used to this behavior so restore it.

        Test: fast/scrolling/mac/j-shaped-scroll-rubberband.html

        * platform/ScrollAnimation.h:
        * platform/ScrollingEffectsController.cpp:
        (WebCore::ScrollingEffectsController::overscrollAmount):
        (WebCore::ScrollingEffectsController::scrollOffset):
        * platform/ScrollingEffectsController.h:
        * platform/mac/ScrollAnimationRubberBand.h:
        * platform/mac/ScrollAnimationRubberBand.mm:
        (WebCore::ScrollAnimationRubberBand::startRubberBandAnimation):
        (WebCore::ScrollAnimationRubberBand::serviceAnimation):
        (WebCore::ScrollAnimationRubberBand::debugDescription const):
        * platform/mac/ScrollingEffectsController.mm:
        (WebCore::ScrollingEffectsController::startRubberBandAnimation):
        (WebCore::ScrollingEffectsController::startRubberBandAnimationIfNecessary):

2022-01-20  Tyler Wilcock  <tyler_w@apple.com>

        AXCoreObject::childrenIDs can be simplified and more efficient by using map
        https://bugs.webkit.org/show_bug.cgi?id=235418

        Reviewed by Darin Adler.

        Follow-up to address Darin's comment at
        https://bugs.webkit.org/show_bug.cgi?id=235384#c8.

        No tests added because there's no behavior change.

        * accessibility/AccessibilityObjectInterface.h:
        (WebCore::AXCoreObject::childrenIDs):
        Use map instead of for-loop for simplicity and efficiency through
        map's use of uncheckedAppend and reserveInitialCapacity.

2022-01-20  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add LineContent::inlineBaseDirection to support line based inline direction
        https://bugs.webkit.org/show_bug.cgi?id=235391

        Reviewed by Antti Koivisto.

        In this patch we introduce the line based inline base direction. With "unicode-bidi: plaintext" each line can have its own
        base direction depending on the content on the line.

        * layout/formattingContexts/inline/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::computeGeometryForLineContent):
        * layout/formattingContexts/inline/InlineLineBuilder.cpp:
        (WebCore::Layout::toString): Unfortunately we have to rebuild the text content part of the line here.
        (WebCore::Layout::LineBuilder::layoutInlineContent):
        * layout/formattingContexts/inline/InlineLineBuilder.h:
        * layout/formattingContexts/inline/display/InlineDisplayContentBuilder.cpp:
        (WebCore::Layout::InlineDisplayContentBuilder::processNonBidiContent):
        * layout/formattingContexts/inline/display/InlineDisplayLineBuilder.cpp:
        (WebCore::Layout::InlineDisplayLineBuilder::build const):
        * layout/formattingContexts/inline/display/InlineDisplayLineBuilder.h:
        * layout/formattingContexts/inline/text/TextUtil.cpp:
        (WebCore::Layout::TextUtil::directionForTextContent):
        * layout/formattingContexts/inline/text/TextUtil.h:

2022-01-20  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] Various tests hit debug assertions under `SearchBuffer::search` after system ICU changes
        https://bugs.webkit.org/show_bug.cgi?id=235413
        rdar://87423185

        Reviewed by Darin Adler.

        After upgrading the system ICU version to ICU 70, many layout tests that attempt to use TextIterator on macOS
        (e.g. tests in `accessibility/mac`) hit debug assertions underneath `WebCore::SearchBuffer::search`; this is
        because ICU now emits `U_USING_DEFAULT_WARNING` as the error code when calling `usearch_next()`, instead of
        `U_ZERO_ERROR`, like it did in previous versions.

        This warning is propagated due to ICU falling back to the root locale (`kRootLocaleName`) when creating an
        `icu::BreakIterator`, and appears to be benign. We can address this by relaxing the debug assertion in this
        method to just check that the error code indicates success (i.e. "warning, or no error"), rather than strictly
        being equal to `U_ZERO_ERROR`.

        * editing/TextIterator.cpp:
        (WebCore::SearchBuffer::search):

2022-01-20  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add "previous line ends with a line break" flag to PreviousLine
        https://bugs.webkit.org/show_bug.cgi?id=235405

        Reviewed by Antti Koivisto.

        This is in preparation for supporting unicode-bidi: plaintext where we need to know if the previous line ends in a line break or not.

        * layout/formattingContexts/inline/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::lineLayout):
        * layout/formattingContexts/inline/InlineLineBuilder.h:

2022-01-20  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] LineBuilder::layoutInlineContent should take PreviousLine
        https://bugs.webkit.org/show_bug.cgi?id=235403

        Reviewed by Antti Koivisto.

        Let's pass in a PreviousLine struct to LineBuilder::layoutInlineContent instead of individual variables about the previous line.
        This is in preparation for supporting unicode-bidi: plaintext where we need to know if the previous line ends in a line break or not.

        * layout/formattingContexts/inline/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::lineLayout):
        (WebCore::Layout::InlineFormattingContext::computedIntrinsicWidthForConstraint const):
        * layout/formattingContexts/inline/InlineLineBuilder.cpp:
        (WebCore::Layout::LineBuilder::layoutInlineContent):
        (WebCore::Layout::LineBuilder::computedIntrinsicWidth):
        (WebCore::Layout::LineBuilder::initialize):
        * layout/formattingContexts/inline/InlineLineBuilder.h:

2022-01-20  Kimmo Kinnunen  <kkinnunen@apple.com>

        Implement WebGL GPU buffer texture upload path for Cocoa getUserMedia camera streams
        https://bugs.webkit.org/show_bug.cgi?id=235233
        <rdar://problem/87601762>

        Reviewed by Youenn Fablet.

        Make full texture uploads from MediaStream camera captures use CVPixelBuffers
        instead of reading the pixels back.
        Implement MediaPlayerInterface::pixelBufferForCurrentTime() for
        MediaPlayerPrivateMediaSourceAVFObjC.
        Rename functions from pixelBuffer... to videoSample...
        Use new type MediaSampleVideoFrame instead of CVPixelBuffer.
        MediaSampleVideoFrame contains also the frame orientation. The
        orientation is needed as the camera might capture the image
        with a rotation or a flip.

        To avoid ifdefs, the new API videoSampleForCurrentTime exists
        for all platforms, but is currently called only by Cocoa.
        Also the type MediaSampleVideoFrame exists for all platforms
        but has the frame contents implementation only for Cocoa.

        Tested by
        fast/mediastream/getUserMedia-to-canvas-1.html
        fast/mediastream/getUserMedia-to-canvas-2.html

        Currently the "mirrored" part is tested manually, WebKit
        does not request mirrored camera image so it is dead code.

        * Headers.cmake:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::videoSampleForCurrentTime):
        (WebCore::MediaPlayer::pixelBufferForCurrentTime): Deleted.
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::copyVideoTextureToPlatformTexture):
        (WebCore::MediaPlayerPrivateInterface::videoSampleForCurrentTime):
        (WebCore::MediaPlayerPrivateInterface::pixelBufferForCurrentTime): Deleted.
        * platform/graphics/MediaSampleVideoFrame.h: Added.
        (WebCore::MediaSampleVideoFrame::orientation const):
        (WebCore::MediaSampleVideoFrame::pixelBuffer const):
        (WebCore::MediaSampleVideoFrame::operator== const):
        (WebCore::MediaSampleVideoFrame::encode const):
        (WebCore::MediaSampleVideoFrame::decode):
        * platform/graphics/avfoundation/MediaSampleVideoFrameAVF.mm: Added.
        (WebCore::MediaSampleVideoFrame::MediaSampleVideoFrame):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::videoSampleForCurrentTime):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::pixelBufferForCurrentTime): Deleted.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::videoSampleForCurrentTime):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::pixelBufferForCurrentTime): Deleted.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::videoOrientation):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::videoSampleForCurrentTime):
        * platform/graphics/cocoa/GraphicsContextGLCocoa.mm:
        (WebCore::GraphicsContextGLCocoa::copyTextureFromMedia):
        * platform/graphics/cv/GraphicsContextGLCV.h:
        * platform/graphics/cv/GraphicsContextGLCVCocoa.cpp:
        (WebCore::GraphicsContextGLCVCocoa::GraphicsContextGLCVCocoa):
        (WebCore::GraphicsContextGLCVCocoa::copyVideoFrameToTexture):
        (WebCore::GraphicsContextGLCVCocoa::copyPixelBufferToTexture): Deleted.
        * platform/graphics/cv/GraphicsContextGLCVCocoa.h:

2022-01-20  Tyler Wilcock  <tyler_w@apple.com>

        AXIsolatedTree::updateChildren childrenIDs and children local variables could get out of sync
        https://bugs.webkit.org/show_bug.cgi?id=235384

        Reviewed by Andres Gonzalez.

        In AXIsolatedTree::updateChildren, we have this:

        const auto& axChildren = axAncestor->children();
        auto axChildrenIDs = axAncestor->childrenIDs();

        Because the current version of AXCoreObject::childrenIDs
        always updates the underlying children if necessary, these
        two variables could get out of sync if childrenIDs actually
        performs an update after we already got children().

        This patch changes childrenIDs to have the same interface as
        children() by adding a `bool updateChildrenIfNecessary` parameter,
        and using childrenIDs(false) in the above method.

        * accessibility/AccessibilityObjectInterface.h:
        (WebCore::AXCoreObject::childrenIDs):
        Add updateChildrenIfNecessary parameter to match AXCoreObject::children(bool).
        * accessibility/isolatedtree/AXIsolatedTree.cpp:
        (WebCore::AXIsolatedTree::updateChildren):

2022-01-20  Alexey Shvayka  <ashvayka@apple.com>

        Callback functions / interfaces should use global object of its _value_ for errors and lifecycle
        https://bugs.webkit.org/show_bug.cgi?id=232387

        Reviewed by Geoff Garen.

        This is a re-land of r288197 with an IntersectionObserver fixed to rely on its
        associated document rather than m_callback's context for time origin as per spec [3].

        Before this change, _relevant_ global object was used a) to throw errors in when
        invoking callback function / interface, which isn't correct [1], and b) to call
        canInvokeCallback() on (lifecycle), which doesn't match other browsers and not
        quite useful: _relevant_ event loop stops if document is detached.

        This patch:

          1. Removes [SkipCallbackInvokeCheck] extended attribute, while ensuring DOM
             traversal doesn't crash, which aligns WebKit with other browsers.

          2. Invokes canInvokeCallback() on the global object of _value_, which matches
              Gecko but not Blink, which uses _incumbent_ realm to determine if callback
              can still be invoked (doesn't make much sense to me).

          3. Throws callback invocation errors (e.g. non-callable method, revoked Proxy)
             in the global object of _value_, which matches the spec [1] and Blink, but not Gecko,
             which uses _current_ realm (of the method that was passed callback's _value_)
             to throw TypeErrors in.

             That doesn't make much sense to me either: "registering" a callback and invoking
             it could happen in different realms.

             The spec on this is worded quite trickily (yet I think I've figured it out):
             ECMA's "throw a TypeError exception" uses "running execution context" [2]
             to create an object in, which is switched to the realm of _value_ per [1].

        AudioWorklet changes are unobservable as worklets can't acquire a cross-realm method. 
        It's also nicer not to pass JSCallbackDataStrong around.

        This patch fixes only JSCallbackData-based callback interfaces / functions, and not
        the JSEventListener, which would also benefit from a similar change.

        [1] https://webidl.spec.whatwg.org/#ref-for-prepare-to-run-script
        [2] https://tc39.es/ecma262/#sec-ecmascript-function-objects-call-thisargument-argumentslist (step 4)
        [3] https://w3c.github.io/IntersectionObserver/#dom-intersectionobserverentry-time

        Tests: fast/dom/callback-function-detached-frame-intersection-observer.html
               fast/dom/callback-function-detached-frame-mutation-observer.html
               fast/dom/callback-function-detached-frame-performance-observer.html
               fast/dom/callback-function-detached-frame-raf.html
               fast/dom/callback-function-detached-frame-resize-observer.html
               fast/dom/callback-function-detached-frame-to-blob.html
               fast/dom/callback-interface-detached-frame-node-filter.html
               fast/dom/callback-interface-detached-frame-xpathnsresolver.html
               imported/w3c/web-platform-tests/dom/traversal/TreeWalker-acceptNode-filter-cross-realm-null-browsing-context.html
               imported/w3c/web-platform-tests/dom/traversal/TreeWalker-acceptNode-filter-cross-realm.html
               imported/w3c/web-platform-tests/dom/events/EventListener-handleEvent-cross-realm.html
               imported/w3c/web-platform-tests/domxpath/resolver-callback-interface-cross-realm.html
               imported/w3c/web-platform-tests/intersection-observer/timestamp.html

        * Modules/webaudio/AudioWorkletGlobalScope.cpp:
        (WebCore::AudioWorkletGlobalScope::registerProcessor):
        (WebCore::AudioWorkletGlobalScope::createProcessor):
        * Modules/webaudio/AudioWorkletProcessor.cpp:
        (WebCore::AudioWorkletProcessor::create):
        (WebCore::AudioWorkletProcessor::AudioWorkletProcessor):
        (WebCore::AudioWorkletProcessor::process):
        (WebCore::AudioWorkletProcessor::setProcessCallback):
        * Modules/webaudio/AudioWorkletProcessor.h:
        (WebCore::AudioWorkletProcessor::processCallbackWrapper):
        * bindings/js/JSAudioWorkletProcessorCustom.cpp:
        (WebCore::JSAudioWorkletProcessor::visitAdditionalChildren):
        * bindings/js/JSCallbackData.cpp:
        (WebCore::JSCallbackData::invokeCallback):
        * bindings/js/JSCallbackData.h:
        (WebCore::JSCallbackData::~JSCallbackData):
        (WebCore::JSCallbackDataStrong::JSCallbackDataStrong):
        (WebCore::JSCallbackDataStrong::invokeCallback):
        (WebCore::JSCallbackDataWeak::JSCallbackDataWeak):
        (WebCore::JSCallbackDataWeak::invokeCallback):
        (WebCore::JSCallbackData::globalObject): Deleted.
        (WebCore::JSCallbackData::JSCallbackData): Deleted.
        * bindings/js/JSDOMConvertCallbacks.h:
        (WebCore::Converter<IDLCallbackFunction<T>>::convert):
        (WebCore::Converter<IDLCallbackInterface<T>>::convert):
        * bindings/js/JSDOMConvertXPathNSResolver.h:
        (WebCore::Converter<IDLInterface<XPathNSResolver>>::convert):
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSC_DEFINE_HOST_FUNCTION):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::jsDOMWindowInstanceFunction_openDatabaseBody):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateCallbackHeaderContent):
        (GenerateCallbackImplementationContent):
        (JSValueToNativeDOMConvertNeedsGlobalObject):
        * bindings/scripts/IDLAttributes.json:
        * bindings/scripts/test/JS/*: Updated.
        * bindings/scripts/test/TestCallbackInterface.idl:
        * dom/NodeFilter.idl:
        * dom/Traversal.cpp:
        (WebCore::NodeIteratorBase::acceptNode):
        * page/IntersectionObserver.h:
        * page/IntersectionObserver.cpp:
        (WebCore::IntersectionObserver::nowTimestamp const):
        * workers/WorkerOrWorkletGlobalScope.h:
        * worklets/PaintWorkletGlobalScope.cpp:
        (WebCore::PaintWorkletGlobalScope::registerPaint):
        * xml/CustomXPathNSResolver.idl:

2022-01-20  Antti Koivisto  <antti@apple.com>

        [:has() pseudo-class] Ignore :visited inside :has()
        https://bugs.webkit.org/show_bug.cgi?id=235404

        Reviewed by Sam Weinig.

        Tests: imported/w3c/web-platform-tests/css/selectors/has-visited.html

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::matchHasPseudoClass const):

        Make this more similar to :is/:not():
        Use the current SelectorChecker with a different context rather than a nested SelectorChecker.
        Use matchRecursively.
        Setup the functional pseudo-class bits for the context.

2022-01-20  Antti Koivisto  <antti@apple.com>

        [:has pseudo-class] Support :has(:not(foo))
        https://bugs.webkit.org/show_bug.cgi?id=235399

        Reviewed by Darin Adler.

        This already works except for a filter bug.

        Test: imported/w3c/web-platform-tests/css/selectors/invalidation/has-with-not.html

        * style/HasSelectorFilter.h:
        (WebCore::Style::HasSelectorFilter::reject const):

        We shouldn't reject a selector if we have a null key.

2022-01-20  Youenn Fablet  <youenn@apple.com>

        Reconfiguring the CoreAudioSharedUnit should take into account that there is a speaker sample producer
        https://bugs.webkit.org/show_bug.cgi?id=235397

        Reviewed by Eric Carlson.

        Manually tested.

        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
        When using VPIO to render speaker samples, we might have to reconfigure the VPIO unit to take into account the speaker format.
        In that case, we might have a speaker sample producer and we should not stop the audio unit if getting samples from the producer at the same time.
        To prevent this, we set the producer temporarily, stop the audio unit, then set back the producer.

2022-01-20  Sihui Liu  <sihui_liu@apple.com>

        Make LocalStorage prewarming async
        https://bugs.webkit.org/show_bug.cgi?id=235236

        Reviewed by Chris Dumez.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::prewarmLocalStorageIfNecessary):
        * page/Frame.cpp:
        (WebCore::Frame::didPrewarmLocalStorage): Deleted.
        (WebCore::Frame::mayPrewarmLocalStorage const): Deleted.
        * page/Frame.h:
        * storage/StorageArea.h:
        (WebCore::StorageArea::prewarm):
        * storage/StorageType.h:

2022-01-20  Alan Bujtas  <zalan@apple.com>

        Address post-landing review comments from Darin.

        Reviewed by Antti Koivisto and Darin Adler.

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator UnicodeBidi const):
        * layout/formattingContexts/inline/InlineItemsBuilder.cpp:
        (WebCore::Layout::handleEnterExitBidiContext):
        (WebCore::Layout::buildBidiParagraph):
        (WebCore::Layout::InlineItemsBuilder::handleInlineBoxStart):
        (WebCore::Layout::InlineItemsBuilder::handleInlineBoxEnd):
        * rendering/LegacyInlineIterator.h:
        (WebCore::notifyObserverEnteredObject):
        (WebCore::notifyObserverWillExitObject):
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::adjustInnerStyle):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::initialUnicodeBidi):

2022-01-20  Youenn Fablet  <youenn@apple.com>

        AVAudioSessionCaptureDeviceManager is not always computing the right default input device
        https://bugs.webkit.org/show_bug.cgi?id=235362
        <rdar://87707090>

        Reviewed by Eric Carlson.

        Sometimes the defaultInput is not available, in which case it is good to resort to the previous default device if available.
        This fix prevents the following case to happen:
        - We start rendering WebRTC audio on some output, say AirPods
        - We start capturing microphone, but the default microphone is not the AirPods one (while it probably should, this is not always the case).
        - We migrate audio rendering to VPIO which will output audio to the same device as the input microphone if feasible (typically builtin speaker).
        - Audio is now flowing on builtin speaker instead of AirPods.

        Manually tested.

        * platform/mediastream/ios/AVAudioSessionCaptureDeviceManager.h:
        * platform/mediastream/ios/AVAudioSessionCaptureDeviceManager.mm:

2022-01-19  Simon Fraser  <simon.fraser@apple.com>

        <dialog> with transformed ancestor asserts under RenderGeometryMap
        https://bugs.webkit.org/show_bug.cgi?id=235194

        Reviewed by Antti Koivisto.

        With this change we reparent the RenderLayers of top layer elements under the RenderView's
        layer. This makes the RenderLayer hierarchy a closer match to the containing block
        hierarchy, and means that all the existing RenderLayer tree walks that use
        parent()/firstChild()/nextSibling() traverse the the "top layer" layers as children of the
        RenderView. This in turn means that the various bits of RenderLayer state that track the
        state of descendants (e.g. m_hasVisibleDescendant, m_hasSelfPaintingLayerDescendant,
        m_hasNotIsolatedBlendingDescendants) reflect descendency in the top-layer-aware hierarchy.

        Note that m_hasVisibleDescendant is about the inherited `visibility` property which follows
        DOM order, but since we consult it during painting-related tree walks, we want this state to
        reflect the top-layer-aware tree.
        
        The patch adds top-layer-aware helpers on RenderElement to find the parent and next sibling,
        and uses those when parenting layers.
        
        In addition, when the top layer status changes for a RenderLayer, we unparent and
        re-parent its layer (which in turn should toggle the relevant dirty bits).

        * rendering/RenderElement.cpp:
        (WebCore::findNextLayer):
        (WebCore::layerNextSiblingRespectingTopLayer):
        (WebCore::addLayers):
        (WebCore::RenderElement::layerParentRespectingTopLayer const):
        (WebCore::RenderElement::layerNextSiblingRespectingTopLayer const):
        (WebCore::RenderElement::insertedIntoTree):
        (WebCore::RenderElement::willBeRemovedFromTree):
        (WebCore::RenderElement::findNextLayer const): Deleted.
        * rendering/RenderElement.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::insertOnlyThisLayer):
        (WebCore::RenderLayer::stackingContext const): No need for the explicit establishesTopLayer() check.
        (WebCore::RenderLayer::setHasVisibleContent):
        (WebCore::RenderLayer::dirtyAncestorChainVisibleDescendantStatus):
        (WebCore::RenderLayer::setAncestorChainHasVisibleDescendant):
        (WebCore::RenderLayer::enclosingAncestorForPosition const): No need for the explicit establishesTopLayer() check.
        (WebCore::RenderLayer::paintLayerWithEffects): Ditto
        (WebCore::RenderLayer::establishesTopLayerWillChange):
        (WebCore::RenderLayer::establishesTopLayerDidChange):
        (WebCore::RenderLayer::clipCrossesPaintingBoundary const): No need for the explicit establishesTopLayer() check.
        (WebCore::RenderLayer::calculateClipRects const): Ditto

2022-01-19  Chris Dumez  <cdumez@apple.com>

        Align our qualified name validation with the specification
        https://bugs.webkit.org/show_bug.cgi?id=201699

        Reviewed by Geoffrey Garen.

        Align our qualified name validation with the latest specification:
        - https://dom.spec.whatwg.org/#validate
        - https://www.w3.org/TR/xml/#NT-NameStartChar

        No new tests, rebaselined existing tests.

        * dom/Document.cpp:
        (WebCore::isValidNameStart):
        (WebCore::isValidNamePart):

2022-01-19  Alan Bujtas  <zalan@apple.com>

        Turn EUnicodeBidi into an enum class
        https://bugs.webkit.org/show_bug.cgi?id=235379

        Reviewed by Antti Koivisto.

        * WebCore.order:
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator UnicodeBidi const):
        (WebCore::CSSPrimitiveValue::operator EUnicodeBidi const): Deleted.
        * layout/formattingContexts/inline/InlineItemsBuilder.cpp:
        (WebCore::Layout::handleEnterExitBidiContext):
        (WebCore::Layout::buildBidiParagraph):
        (WebCore::Layout::InlineItemsBuilder::breakAndComputeBidiLevels):
        (WebCore::Layout::InlineItemsBuilder::handleInlineBoxStart):
        (WebCore::Layout::InlineItemsBuilder::handleInlineBoxEnd):
        * layout/integration/LayoutIntegrationCoverage.cpp:
        (WebCore::LayoutIntegration::canUseForStyle):
        * platform/text/UnicodeBidi.h:
        (WebCore::isIsolated):
        (WebCore::isOverride):
        (): Deleted.
        * rendering/LegacyInlineIterator.h:
        (WebCore::embedCharFromDirection):
        (WebCore::notifyObserverEnteredObject):
        (WebCore::notifyObserverWillExitObject):
        * rendering/LegacyLineLayout.cpp:
        (WebCore::LegacyLineLayout::updateLogicalWidthForAlignment):
        (WebCore::constructBidiRunsForSegment):
        (WebCore::LegacyLineLayout::layoutRunsAndFloatsInRange):
        (WebCore::LegacyLineLayout::determineStartPosition):
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::computeMarkerStyle const):
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::adjustInnerStyle):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::RenderStyle):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::unicodeBidi const):
        (WebCore::RenderStyle::setUnicodeBidi):
        (WebCore::RenderStyle::initialUnicodeBidi):

2022-01-19  Sam Sneddon  <gsnedders@apple.com>

        Limit the deprecated CSSOMPrimitiveValue to formerly standardized unit types
        https://bugs.webkit.org/show_bug.cgi?id=233651
        <rdar://problem/85878291>

        Reviewed by Darin Adler.

        This removes support, and makes it clear that these deprecated APIs shouldn't be exposing
        anything more modern than what is standardized in DOM Level 2 Style. Hopefully this avoids
        others in future adding support for new units.

        Other changes included as they are necessary to make improved test not assert.

        Test: fast/css/CSSPrimitiveValue-modern-length.html

        * css/CSSUnits.cpp:
        (WebCore::unitCategory): Ensure this is complete for all units.
        (WebCore::canonicalUnitTypeForCategory): Ensure this is complete for all unit categories.
        * css/DeprecatedCSSOMPrimitiveValue.cpp:
        (WebCore::DeprecatedCSSOMPrimitiveValue::primitiveType const): Remove post-DOM Level 2 Style values.
        (WebCore::DeprecatedCSSOMPrimitiveValue::getFloatValue const): Remove post-DOM Level 2 Style values.
        (WebCore::DeprecatedCSSOMPrimitiveValue::getStringValue const): Add comment.
        * css/DeprecatedCSSOMPrimitiveValue.h: Remove post-DOM Level 2 Style constants.
        * css/DeprecatedCSSOMPrimitiveValue.idl: Remove post-DOM Level 2 Style constants.
        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::conversionToCanonicalUnitsScaleFactor): Change to return std::optional, making explicit when there is no scaling factor.
        (WebCore::CSSPrimitiveValue::doubleValueInternal const): Handle std::optional return.
        * css/CSSPrimitiveValue.h:
        (WebCore::CSSPrimitiveValue::conversionToCanonicalUnitsScaleFactor): Change to return std::optional, making explicit when there is no scaling factor.
        * page/PrintContext.cpp:
        (WebCore::PrintContext::computedPageMargin): Handle std::optional return.

2022-01-19  Said Abou-Hallawa  <said@apple.com>

        [GPU Process] ImageBuffer::convertToLuminanceMask() and transformToColorSpace() should not access the backend in WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=235305
        rdar://83437815

        Reviewed by Sam Weinig.

        When DOM rendering is handled in GPU Process, no backend access will be 
        allowed. So all the operations that require access to the backend should
        be handled in GPU Process. The WebProcess will stream messages for these
        operations to GPUProcess.

        * platform/graphics/displaylists/DisplayListRecorder.h:
        * platform/graphics/displaylists/DisplayListRecorderImpl.h:

2022-01-19  Yusuke Suzuki  <ysuzuki@apple.com>

        Do not use pas utils outside of libpas
        https://bugs.webkit.org/show_bug.cgi?id=235275

        Reviewed by Darin Adler.

        We should not use any utility functions from libpas outside of bmalloc.
        libpas is designed to be self-contained and used outside of WebKit.
        We cannot rely on non PAS_API functions.

        If we need these utilities, we should define it in WTF.

        * platform/graphics/HEVCUtilities.cpp:
        (WebCore::parseHEVCCodecParameters):
        (WebCore::createHEVCCodecParametersString):
        (WebCore::reverseBits): Deleted.

2022-01-19  Tim Nguyen  <ntim@apple.com>

        Add visibility: visible to modal dialogs in UA sheet
        https://bugs.webkit.org/show_bug.cgi?id=235369

        Reviewed by Brent Fulgham.

        Test: imported/w3c/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/modal-dialog-in-visibility-hidden.html

        * css/dialog.css:
        (dialog:-internal-modal-dialog):

2022-01-19  Robert Jenner  <Jenner@apple.com>

        Unreviewed, reverting r288197.

        Broke a test, slowing down EWS

        Reverted changeset:

        "Callback functions / interfaces should use global object of
        its _value_ for errors and lifecycle"
        https://bugs.webkit.org/show_bug.cgi?id=232387
        https://commits.webkit.org/r288197

2022-01-19  Sihui Liu  <sihui_liu@apple.com>

        Assertion is not acquired in network process when setting database journal mode
        https://bugs.webkit.org/show_bug.cgi?id=235340

        Setting database journal mode requires lock, so network process needs to stay active by holding assertion.

        Reviewed by Chris Dumez.

        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::useWALJournalMode):

2022-01-19  Tyler Wilcock  <tyler_w@apple.com>

        AX: Remove unnecessary isolated tree update for AXSelectedTextChanged node
        https://bugs.webkit.org/show_bug.cgi?id=235343

        Reviewed by Chris Fleizach.

        When we get an AXSelectedTextChanged notification, we update the isolated tree with
        the node that has gained selection. Sometimes this node is not yet part of the AX tree,
        meaning its AXAncestorFlags are not initialized. This results in hitting this ASSERT in AXIsolatedObject::initializeAttributeData:

        // For all objects besides the root, the ancestry flags should've been set by now.
        ASSERT(isRoot || object.ancestorFlagsAreInitialized());

        Updating the isolated tree with the selection node was added here to fix accessibility/mac/search-text/search-text.html:

        https://bugs.webkit.org/show_bug.cgi?id=208434

        But the test passes in ITM with and without updating the isolated tree with this node.
        Also, for text selection related operations, isolated tree objects currently defer to the main thread
        (e.g. AXIsolatedObject::selectedText, AXIsolatedObject::selectedText).

        This patch removes this update since it doesn't seem to be necessary.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::postTextStateChangeNotification):
        (WebCore::AXObjectCache::updateIsolatedTree):

2022-01-19  Alex Christensen  <achristensen@webkit.org>

        [ResourceTiming] nextHopProtocol is exposed regardless of Timing-Allow-Origin
        https://bugs.webkit.org/show_bug.cgi?id=235294

        Reviewed by Chris Dumez.

        Covered by an existing WPT test that starts passing.
        This was recently fixed in Chromium in https://chromium-review.googlesource.com/c/chromium/src/+/3354335

        * page/PerformanceResourceTiming.cpp:
        (WebCore::PerformanceResourceTiming::nextHopProtocol const):

2022-01-19  Rob Buis  <rbuis@igalia.com>

        Null check player in taintsOrigin
        https://bugs.webkit.org/show_bug.cgi?id=234257

        Reviewed by Youenn Fablet.

        Null check player in taintsOrigin.

        Test: fast/media/createImageBitmap-from-video-crash.html

        * html/ImageBitmap.cpp:
        (WebCore::taintsOrigin):

2022-01-19  Rob Buis  <rbuis@igalia.com>

        Null check m_progressTracker in clearProvisionalLoad
        https://bugs.webkit.org/show_bug.cgi?id=233063

        Reviewed by Alex Christensen.

        Null check m_progressTracker in clearProvisionalLoad.

        Test: fast/frames/contentFrame-disconnecting-crash.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::clearProvisionalLoad):

2022-01-19  Youenn Fablet  <youenn@apple.com>

        Improve computation of service worker FetchEvent.resultingClientId
        https://bugs.webkit.org/show_bug.cgi?id=235107

        Reviewed by Darin Adler.

        We are now passing the reserved client ID generated by DocumentLoader to the generated document.
        Previously, we would register a temporary ID that we would drop later on when creating a new document.
        This allows to be closer to spec, though we need to handle the case of a document whose origin gets unique
        due to CSP or sandboxing making a document origin unique.
        We are also removing targetClientId, which was renamed in the spec to replacesClientId but is also not implemented in any browser yet.

        Covered by existing tests.

        * dom/DOMImplementation.cpp:
        * dom/DOMImplementation.h:
        * dom/Document.cpp:
        * dom/Document.h:
        * dom/ScriptExecutionContext.cpp:
        * dom/ScriptExecutionContext.h:
        * html/FTPDirectoryDocument.cpp:
        * html/HTMLDocument.cpp:
        * html/HTMLDocument.h:
        * html/ImageDocument.cpp:
        * html/MediaDocument.cpp:
        * html/ModelDocument.cpp:
        * html/PluginDocument.cpp:
        * html/TextDocument.cpp:
        * html/TextDocument.h:
        * inspector/DOMPatchSupport.cpp:
        * loader/DocumentLoader.cpp:
        * loader/DocumentLoader.h:
        * loader/DocumentWriter.cpp:
        * loader/DocumentWriter.h:
        * loader/SinkDocument.cpp:
        * workers/service/FetchEvent.cpp:
        * workers/service/FetchEvent.h:
        * workers/service/FetchEvent.idl:
        * workers/service/server/SWServer.cpp:
        * xml/XMLHttpRequest.cpp:

2022-01-19  Michael Catanzaro  <mcatanzaro@gnome.org>

        Fix -Wreturn-type and -Wunused-parameter warnings, January 2022 edition
        https://bugs.webkit.org/show_bug.cgi?id=235336

        Reviewed by Adrian Perez de Castro.

        * Modules/push-api/PushCrypto.cpp:
        (WebCore::PushCrypto::computeP256DHSharedSecret):
        * bindings/js/JSCSSRuleCustom.cpp:
        (WebCore::toJSNewlyCreated):
        * contentextensions/DFABytecodeCompiler.cpp:
        (WebCore::ContentExtensions::toSizeT):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForAnimationDirection):
        (WebCore::valueForAnimationFillMode):
        (WebCore::valueForAnimationPlayState):
        * css/CSSPrimitiveValue.cpp:
        (WebCore::lengthOfViewportPhysicalAxisForLogicalAxis):
        * platform/graphics/ColorInterpolation.cpp:
        (WebCore::fixupHueComponentsPriorToInterpolation):
        * platform/graphics/ColorInterpolation.h:
        (WebCore::interpolateColors):
        * platform/graphics/filters/FEColorMatrix.cpp:
        (WebCore::FEColorMatrix::createApplier const):
        * platform/graphics/filters/FEComponentTransfer.cpp:
        (WebCore::FEComponentTransfer::createApplier const):
        * platform/graphics/filters/SourceGraphic.cpp:
        (WebCore::SourceGraphic::createApplier const):

2022-01-19  Alexey Shvayka  <ashvayka@apple.com>

        Callback functions / interfaces should use global object of its _value_ for errors and lifecycle
        https://bugs.webkit.org/show_bug.cgi?id=232387

        Reviewed by Geoff Garen.

        Before this change, _relevant_ global object was used a) to throw errors in when
        invoking callback function / interface, which isn't correct [1], and b) to call
        canInvokeCallback() on (lifecycle), which doesn't match other browsers and not
        quite useful: _relevant_ event loop stops if document is detached.

        This patch:

          1. Removes [SkipCallbackInvokeCheck] extended attribute, while ensuring DOM
             traversal doesn't crash, which aligns WebKit with other browsers.

          2. Invokes canInvokeCallback() on the global object of _value_, which matches
              Gecko but not Blink, which uses _incumbent_ realm to determine if callback
              can still be invoked (doesn't make much sense to me).

          3. Throws callback invocation errors (e.g. non-callable method, revoked Proxy)
             in the global object of _value_, which matches the spec [1] and Blink, but not Gecko,
             which uses _current_ realm (of the method that was passed callback's _value_)
             to throw TypeErrors in.

             That doesn't make much sense to me either: "registering" a callback and invoking
             it could happen in different realms.

             The spec on this is worded quite trickily (yet I think I've figured it out):
             ECMA's "throw a TypeError exception" uses "running execution context" [2]
             to create an object in, which is switched to the realm of _value_ per [1].

        AudioWorklet changes are unobservable as worklets can't acquire a cross-realm method. 
        It's also nicer not to pass JSCallbackDataStrong around.

        [1] https://webidl.spec.whatwg.org/#ref-for-prepare-to-run-script
        [2] https://tc39.es/ecma262/#sec-ecmascript-function-objects-call-thisargument-argumentslist (step 4)

        Tests: fast/dom/callback-function-detached-frame-intersection-observer.html
               fast/dom/callback-function-detached-frame-mutation-observer.html
               fast/dom/callback-function-detached-frame-performance-observer.html
               fast/dom/callback-function-detached-frame-raf.html
               fast/dom/callback-function-detached-frame-resize-observer.html
               fast/dom/callback-function-detached-frame-to-blob.html
               fast/dom/callback-interface-detached-frame-node-filter.html
               fast/dom/callback-interface-detached-frame-xpathnsresolver.html
               imported/w3c/web-platform-tests/dom/traversal/TreeWalker-acceptNode-filter-cross-realm-null-browsing-context.html
               imported/w3c/web-platform-tests/dom/traversal/TreeWalker-acceptNode-filter-cross-realm.html
               imported/w3c/web-platform-tests/dom/events/EventListener-handleEvent-cross-realm.html
               imported/w3c/web-platform-tests/domxpath/resolver-callback-interface-cross-realm.html

        * Modules/webaudio/AudioWorkletGlobalScope.cpp:
        (WebCore::AudioWorkletGlobalScope::registerProcessor):
        (WebCore::AudioWorkletGlobalScope::createProcessor):
        * Modules/webaudio/AudioWorkletProcessor.cpp:
        (WebCore::AudioWorkletProcessor::create):
        (WebCore::AudioWorkletProcessor::AudioWorkletProcessor):
        (WebCore::AudioWorkletProcessor::process):
        (WebCore::AudioWorkletProcessor::setProcessCallback):
        * Modules/webaudio/AudioWorkletProcessor.h:
        (WebCore::AudioWorkletProcessor::processCallbackWrapper):
        * bindings/js/JSAudioWorkletProcessorCustom.cpp:
        (WebCore::JSAudioWorkletProcessor::visitAdditionalChildren):
        * bindings/js/JSCallbackData.cpp:
        (WebCore::JSCallbackData::invokeCallback):
        * bindings/js/JSCallbackData.h:
        (WebCore::JSCallbackData::~JSCallbackData):
        (WebCore::JSCallbackDataStrong::JSCallbackDataStrong):
        (WebCore::JSCallbackDataStrong::invokeCallback):
        (WebCore::JSCallbackDataWeak::JSCallbackDataWeak):
        (WebCore::JSCallbackDataWeak::invokeCallback):
        (WebCore::JSCallbackData::globalObject): Deleted.
        (WebCore::JSCallbackData::JSCallbackData): Deleted.
        * bindings/js/JSDOMConvertCallbacks.h:
        (WebCore::Converter<IDLCallbackFunction<T>>::convert):
        (WebCore::Converter<IDLCallbackInterface<T>>::convert):
        * bindings/js/JSDOMConvertXPathNSResolver.h:
        (WebCore::Converter<IDLInterface<XPathNSResolver>>::convert):
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSC_DEFINE_HOST_FUNCTION):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::jsDOMWindowInstanceFunction_openDatabaseBody):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateCallbackHeaderContent):
        (GenerateCallbackImplementationContent):
        (JSValueToNativeDOMConvertNeedsGlobalObject):
        * bindings/scripts/IDLAttributes.json:
        * bindings/scripts/test/JS/*: Updated.
        * bindings/scripts/test/TestCallbackInterface.idl:
        * dom/NodeFilter.idl:
        * dom/Traversal.cpp:
        (WebCore::NodeIteratorBase::acceptNode):
        * workers/WorkerOrWorkletGlobalScope.h:
        * worklets/PaintWorkletGlobalScope.cpp:
        (WebCore::PaintWorkletGlobalScope::registerPaint):
        * xml/CustomXPathNSResolver.idl:

2022-01-19  Antti Koivisto  <antti@apple.com>

        [:has() pseudo-class] Compute specificity correctly
        https://bugs.webkit.org/show_bug.cgi?id=235351

        Reviewed by Alexey Shvayka.

        "The specificity of an ':is()', ':not()', or ':has()' pseudo-class is replaced by
        the specificity of the most specific complex selector in its selector list argument."

        https://www.w3.org/TR/selectors-4/#specificity-rules

        Test: imported/w3c/web-platform-tests/css/selectors/has-specificity.html

        * css/CSSSelector.cpp:
        (WebCore::simpleSelectorSpecificityInternal):

        Compute :has() specificity like :is() and :not().

2022-01-19  Youenn Fablet  <youenn@apple.com>

        [Cocoa] Do not change preferred AudioSession buffer size when VPIO is running
        https://bugs.webkit.org/show_bug.cgi?id=235317
        <rdar://87709485>

        Reviewed by Eric Carlson.

        Add infra to be notified when audio capture unit is stopped.
        Add a check to return early with microphone sample callback if microphone samples are not to be processed.

        Manually tested.

        * platform/mediastream/mac/BaseAudioSharedUnit.cpp:
        * platform/mediastream/mac/BaseAudioSharedUnit.h:
        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
        * platform/mediastream/mac/CoreAudioCaptureSource.h:

2022-01-18  Sergio Villar Senin  <svillar@igalia.com>

        [css-flexbox] Add support for intrinsic sizes to the flex shorthand
        https://bugs.webkit.org/show_bug.cgi?id=235314

        Reviewed by Darin Adler.

        In r288113 we added support for intrinsic sizes in the flex-basis property. However the flex-basis property
        can be also set via the flex shorthand. The flex shorthand was still not accepting the intrinsic sizes as
        valid values. That's why the code that was checking idents in flex-basis was refactored so we do perform
        now the very same test when parsing flex-basis and flex.

        This allows WebKit to pass 8 additional WPT subtests.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::isFlexBasisIdent): Refactored from consumeFlexBasis. Checks whether a given ident is a valid keyword
        for the flex-basis property.
        (WebCore::consumeFlexBasis): Use isFlexBasisIdent.
        (WebCore::CSSPropertyParser::consumeFlex): Ditto.

2022-01-19  Said Abou-Hallawa  <said@apple.com>

        filterRegion and outsets of referenced SVG filter are calculated incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=235338

        Reviewed by Darin Adler.

        Calculate the filterRegion of the referenced SVGFilter by calling 
        SVGLengthContext::resolveRectangle() given the targetBoundingBox of the
        CSSFilter.

        There is no need to set the filterRegion of the referenced SVG filter 
        from CSSFilter::setFilterRegion() since its filterRegion is the union
        of the filterRegions all its referenced SVGFilters.

        Calculate the outsets of the SVGFilter by looping through its expression
        of FilterEffects.

        Test: css3/filters/reference-filter-outsets.html

        * platform/graphics/filters/FEDropShadow.cpp:
        (WebCore::FEDropShadow::outsets const):
        * platform/graphics/filters/FEDropShadow.h:
        * platform/graphics/filters/FEGaussianBlur.cpp:
        (WebCore::FEGaussianBlur::outsets const):
        * platform/graphics/filters/FEGaussianBlur.h:
        * platform/graphics/filters/FEOffset.cpp:
        (WebCore::FEOffset::outsets const):
        * platform/graphics/filters/FEOffset.h:
        * platform/graphics/filters/Filter.h:
        * platform/graphics/filters/FilterFunction.h:
        (WebCore::FilterFunction::outsets const):
        * rendering/CSSFilter.cpp:
        (WebCore::createSVGFilter):
        (WebCore::CSSFilter::setFilterRegion):
        (WebCore::CSSFilter::outsets const):
        * rendering/CSSFilter.h:
        * rendering/RenderLayerFilters.cpp:
        (WebCore::RenderLayerFilters::beginFilterEffect):
        * svg/graphics/filters/SVGFilter.cpp:
        (WebCore::SVGFilter::create):
        (WebCore::SVGFilter::outsets const):
        (WebCore::SVGFilter::lastEffect const): Deleted.
        * svg/graphics/filters/SVGFilter.h:

2022-01-18  Sam Weinig  <weinig@apple.com>

        ColorTypes are no longer constexpr in debug builds due to std::isnan() in range assertion
        https://bugs.webkit.org/show_bug.cgi?id=235346

        Unreviewed build fix.

        Replace std::isnan() in color type range assertions with a constexpr variant using the x != x
        construction for detection.

        * platform/graphics/ColorTypes.h:
        (WebCore::constexprIsNaN):
        (WebCore::assertInRange):

2022-01-18  Megan Gardner  <megan_gardner@apple.com>

        Loupe sometimes flips to the bottom of the page when dragging the end of a selection to the top of a page with selection flipping.
        https://bugs.webkit.org/show_bug.cgi?id=235220

        Reviewed by Tim Horton.

        Test: fast/events/touch/ios/long-press-then-drag-up-to-change-selected-text-overflow.html

        When selecting on an EPUB in books, if you had a selection near the top of the page,
        and you dragged the end of the selection past the start and into the upper margin, sometimes
        this would result in the selection ending up on the previous page of content, which would result
        in the loupe being pushed to the bottom of the page (because the selection was on the previous page
        at the bottom), which is incorrect. The most solid way to keep this from happening is to clamp the selection
        to the unobscured content rect, which will keep selection from reaching back to the previous page.

        * platform/graphics/FloatPoint.cpp:
        (WebCore::FloatPoint::constrainedWithin const):
        * platform/graphics/FloatPoint.h:
        * platform/graphics/IntPoint.cpp:
        (WebCore::IntPoint::constrainedWithin const):
        * platform/graphics/IntPoint.h:

2022-01-18  Chris Dumez  <cdumez@apple.com>

        When inserting a selected <option> in a <select> element, its selected state should remain
        https://bugs.webkit.org/show_bug.cgi?id=235237

        Reviewed by Darin Adler.

        When inserting a selected <option> in a <select> element, its selected state should remain and other selected
        options should be de-selected.

        This is as per the specification [1] that says:
        """
        If the multiple attribute is absent, whenever an option element in the select element's list of options has
        its selectedness set to true, and whenever an option element with its selectedness set to true is added to
        the select element's list of options, the user agent must set the selectedness of all the other option
        elements in its list of options to false.
        """

        Firefox and Chrome correctly implement this.

        WebKit was trying to implement this logic from inside HTMLOptionElement::insertedIntoAncestor(). However,
        there were several issues with that:
        1. It was checking m_isSelected after calling updateValidity(). updateValidity() would call recalcListItems(),
           which could update m_isSelected. This part could have been addressed by saving m_isSelected before
           calling updateValidity() but would not have addressed the following issues.
        2. In the case where an <optgroup> containing several <option> elements is inserted into a <select>,
           insertedIntoAncestor() gets called from each options being inserted. When calling insertedIntoAncestor()
           from the first <option> and if this <option> is selected, it would deselect all following <option> elements
           even though insertedIntoAncestor() has not yet been called for them. As a result, we would end up selecting
           the first inserted <option> that had the selected state, instead of the last one.
        3. When more than one <option> is inserted at once, the current implementation would be really inefficient as
           every <option> would dirty and recalc the item list from insertedIntoAncestor().

        To address these issues, I got rid of HTMLOptionElement::insertedIntoAncestor(). Instead we now deal with
        <option> insertion from inside HTMLSelectElement::childrenChanged() and HTMLOptGroupElement::childrenChanged().
        Using the parent element's childrenChanged() is useful because it only gets called once when several <option>
        elements are inserted at once. I added logic to those childrenChanged() functions to keep track of the last
        selected <option> element being inserted. Then, after we recalc the item list (which may change <option>s'
        selected state, I make sure to this <option> is selected. This is similar to the logic that was previously
        in HTMLOptionElement::insertedIntoAncestor().


        [1] https://html.spec.whatwg.org/multipage/form-elements.html#the-select-element

        No new tests, rebaselined existing tests.

        * dom/CharacterData.cpp:
        (WebCore::makeChildChange):
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::removeAllChildrenWithScriptAssertion):
        (WebCore::makeChildChangeForRemoval):
        (WebCore::makeChildChangeForInsertion):
        (WebCore::ContainerNode::childrenChanged):
        (WebCore::affectsElements): Deleted.
        * dom/ContainerNode.h:
        (WebCore::ContainerNode::ChildChange::isInsertion const):
        (WebCore::ContainerNode::ChildChange::affectsElements const):
        - Add 'siblingChanged' member to ChildChange in addition to the previous / next siblings.
          This is useful for HTMLOptGroupElement and HTMLSelectElement where we want to know
          if a newly inserted child is an HTMLOptionElement (and if it is selected).
        - Move affectsElements() to the header so that it can be reused by HTMLOptGroupElement
          and HTMLOptionElement.

        * html/HTMLOptGroupElement.cpp:
        (WebCore::HTMLOptGroupElement::childrenChanged):
        * html/HTMLOptGroupElement.h:
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::insertedIntoAncestor): Deleted.
        * html/HTMLOptionElement.h:
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::optionToSelectFromChildChangeScope): Added.
        (WebCore::HTMLSelectElement::childrenChanged):

2022-01-18  Michael Catanzaro  <mcatanzaro@gnome.org>

        Fix -Wmultichar warnings in HEVCUtilities.cpp
        https://bugs.webkit.org/show_bug.cgi?id=235337

        Reviewed by Darin Adler.

        * platform/graphics/HEVCUtilities.cpp:
        (WebCore::parseHEVCDecoderConfigurationRecord):

2022-01-18  Chris Dumez  <cdumez@apple.com>

        input.labels doesn't work inside shadow DOM
        https://bugs.webkit.org/show_bug.cgi?id=235326

        Reviewed by Darin Adler.

        HTMLCollection and LiveNodeList had the concept of "isRootedAtDocument" which meant that
        we used the document as root when doing the traversal to find Nodes that belong to the
        list/collection. However, when the list's owner is inside a shadow tree, this didn't
        work as expected since we would traverse the main document's DOM tree instead of the
        shadow tree. To address the issue, I now renamed "isRootedAtDocument" to
        "isRootedAtTreeScope" and updated rootNode() to return the owner's tree scope's root
        node, instead of the owner's document.

        No new tests, rebaselined existing test.

        * dom/Document.cpp:
        (WebCore::Document::registerNodeListForInvalidation):
        (WebCore::Document::registerCollection):
        (WebCore::Document::unregisterCollection):
        * dom/LiveNodeList.h:
        (WebCore::LiveNodeList::rootNode const):
        * dom/NameNodeList.h:
        * dom/NodeRareData.h:
        (WebCore::NodeListsNodeData::adoptDocument):
        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::rootTypeFromCollectionType):
        * html/HTMLCollection.h:
        (WebCore::HTMLCollection::rootNode const):
        (WebCore::HTMLCollection::isRootedAtTreeScope const):
        (WebCore::HTMLCollection::isRootedAtDocument const): Deleted.
        * html/LabelsNodeList.h:
        * html/RadioNodeList.cpp:
        (WebCore::RadioNodeList::RadioNodeList):
        * html/RadioNodeList.h:

2022-01-18  Alan Bujtas  <zalan@apple.com>

        [LFC][Integration] Use IFC for preferred width computation for inline boxes
        https://bugs.webkit.org/show_bug.cgi?id=232620

        Reviewed by Antti Koivisto.

        * rendering/RenderBlockFlow.cpp:

2022-01-18  ChangSeok Oh  <changseok@webkit.org>

        [GTK] Implement native form validation bubbles for GTK4
        https://bugs.webkit.org/show_bug.cgi?id=235303

        Reviewed by Carlos Garcia Campos.

        The gtk port using gtk3 supports a native validation bubble for the form validation
        since r288104. This change brings the same support for gtk4.
        The same features of ValidationBubble are implemented using gtk4 API.

        No new tests since existing tests cover this change.

        * platform/gtk/ValidationBubbleGtk.cpp:
        (WebCore::ValidationBubble::ValidationBubble):
        (WebCore::ValidationBubble::invalidate):
        (WebCore::ValidationBubble::showRelativeTo):

2022-01-18  Alex Christensen  <achristensen@webkit.org>

        Use c++2a instead of gnu++2a for Cocoa builds
        https://bugs.webkit.org/show_bug.cgi?id=234936

        Reviewed by Sam Weinig.

        The only need for it was for two calls to memset_s, for which we define __STDC_WANT_LIB_EXT1__

        * Configurations/Base.xcconfig:
        * DerivedSources.make:

2022-01-18  Sam Weinig  <weinig@apple.com>

        [CSS Color 4] Add support for "Missing"/"none" color components
        https://bugs.webkit.org/show_bug.cgi?id=233526
        <rdar://problem/86026087>

        Reviewed by Dean Jackson.

        Adds support for parsing an identifier, 'none', as a CSS color component for all specified
        grammars, including rgb() (space separated), hsl() (space separated), hwb(), color(), lab(),
        lch(), oklab(), oklch() as well as all the respective relative forms.

        For color types that were already being stored using float components, the 'none' value
        is stored as NaN. For the types that were not (rgb(), hsl() and hwb()) we now store the
        value using float components if and only if there are any 'none' components (bounded SRGBA<float>
        for rgb(), HSLA<float> for hsl() and HWBA<float> for hwb()). This is necessary for both
        serialization, which has been updated to handle the new values, as well as interpolation,
        which is not included in this change.

        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::NoneRawKnownTokenTypeIdentConsumer::consume):
        (WebCore::CSSPropertyParserHelpers::AngleOrNumberRawKnownTokenTypeIdentConsumer::consume):
        (WebCore::CSSPropertyParserHelpers::NumberOrPercentRawKnownTokenTypeIdentConsumer::consume):
        (WebCore::CSSPropertyParserHelpers::IdentityTransformer::transform):
        (WebCore::CSSPropertyParserHelpers::RawIdentityTransformer::transform):
        (WebCore::CSSPropertyParserHelpers::RawVariantTransformerBase::transform):
        (WebCore::CSSPropertyParserHelpers::consumeNumberRaw):
        (WebCore::CSSPropertyParserHelpers::consumeNumberRawAllowingSymbolTableIdent):
        (WebCore::CSSPropertyParserHelpers::consumePercentRaw):
        (WebCore::CSSPropertyParserHelpers::consumePercentRawAllowingSymbolTableIdent):
        (WebCore::CSSPropertyParserHelpers::consumeLengthRaw):
        (WebCore::CSSPropertyParserHelpers::consumeAngleRaw):
        (WebCore::CSSPropertyParserHelpers::consumeLengthOrPercentRaw):
        (WebCore::CSSPropertyParserHelpers::consumeAngleOrNumberOrNoneRaw):
        (WebCore::CSSPropertyParserHelpers::consumeAngleOrNumberOrNoneRawAllowingSymbolTableIdent):
        (WebCore::CSSPropertyParserHelpers::consumeNumberOrPercentRawAllowingSymbolTableIdent):
        (WebCore::CSSPropertyParserHelpers::consumeNumberOrNoneRaw):
        (WebCore::CSSPropertyParserHelpers::consumeNumberOrNoneRawAllowingSymbolTableIdent):
        (WebCore::CSSPropertyParserHelpers::consumePercentOrNoneRaw):
        (WebCore::CSSPropertyParserHelpers::consumePercentOrNoneRawAllowingSymbolTableIdent):
        (WebCore::CSSPropertyParserHelpers::consumeNumberOrPercentOrNoneRaw):
        (WebCore::CSSPropertyParserHelpers::consumeNumberOrPercentOrNoneRawAllowingSymbolTableIdent):
        (WebCore::CSSPropertyParserHelpers::consumeOptionalAlpha):
        (WebCore::CSSPropertyParserHelpers::consumeOptionalAlphaAllowingSymbolTableIdent):
        (WebCore::CSSPropertyParserHelpers::normalizeRGBComponentToSRGBAByte):
        (WebCore::CSSPropertyParserHelpers::consumeRGBOrHSLOptionalAlpha):
        (WebCore::CSSPropertyParserHelpers::parseRelativeRGBParameters):
        (WebCore::CSSPropertyParserHelpers::parseNonRelativeRGBParameters):
        (WebCore::CSSPropertyParserHelpers::colorByNormalizingHSLComponents):
        (WebCore::CSSPropertyParserHelpers::parseRelativeHSLParameters):
        (WebCore::CSSPropertyParserHelpers::parseNonRelativeHSLParameters):
        (WebCore::CSSPropertyParserHelpers::parseHWBParameters):
        (WebCore::CSSPropertyParserHelpers::parseRelativeHWBParameters):
        (WebCore::CSSPropertyParserHelpers::parseNonRelativeHWBParameters):
        (WebCore::CSSPropertyParserHelpers::parseLabParameters):
        (WebCore::CSSPropertyParserHelpers::parseRelativeLabParameters):
        (WebCore::CSSPropertyParserHelpers::parseNonRelativeLabParameters):
        (WebCore::CSSPropertyParserHelpers::parseLCHParameters):
        (WebCore::CSSPropertyParserHelpers::parseRelativeLCHParameters):
        (WebCore::CSSPropertyParserHelpers::parseNonRelativeLCHParameters):
        (WebCore::CSSPropertyParserHelpers::parseColorFunctionForRGBTypes):
        (WebCore::CSSPropertyParserHelpers::parseRelativeColorFunctionForRGBTypes):
        (WebCore::CSSPropertyParserHelpers::parseColorFunctionForXYZTypes):
        (WebCore::CSSPropertyParserHelpers::parseRelativeColorFunctionForXYZTypes):
        (WebCore::CSSPropertyParserHelpers::AngleOrNumberRawToDegressTransformer::transform): Deleted.
        (WebCore::CSSPropertyParserHelpers::LengthOrPercentRawTransformer::transform): Deleted.
        (WebCore::CSSPropertyParserHelpers::consumeNumberAllowingSymbolTableIdent): Deleted.
        (WebCore::CSSPropertyParserHelpers::consumePercentAllowingSymbolTableIdent): Deleted.
        (WebCore::CSSPropertyParserHelpers::normalizeRGBComponentNumber): Deleted.
        (WebCore::CSSPropertyParserHelpers::normalizeRGBComponentPercentage): Deleted.
        (WebCore::CSSPropertyParserHelpers::RGBNormalizingTransformer::transform): Deleted.
        (WebCore::CSSPropertyParserHelpers::consumeRelativeRGBComponent): Deleted.
        (WebCore::CSSPropertyParserHelpers::clampRGBComponent): Deleted.
        * css/parser/CSSPropertyParserHelpers.h:
        * platform/graphics/ColorNormalization.h:
        (WebCore::normalizeClampedWhitenessBlacknessDisallowingNone):
        (WebCore::normalizeClampedWhitenessBlacknessAllowingNone):
        Pipe through support for parsing and normalizing 'none' components.

        * platform/graphics/ColorSerialization.cpp:
        (WebCore::legacyRGBComponent):
        (WebCore::numericComponent):
        (WebCore::percentageComponent):
        (WTF::StringTypeAdapter<WebCore::LegacyRGBComponent>::StringTypeAdapter):
        (WTF::StringTypeAdapter<WebCore::LegacyRGBComponent>::length const):
        (WTF::StringTypeAdapter<WebCore::LegacyRGBComponent>::is8Bit const):
        (WTF::StringTypeAdapter<WebCore::LegacyRGBComponent>::writeTo const):
        (WTF::StringTypeAdapter<WebCore::LegacyRGBComponent>::buffer const):
        (WTF::StringTypeAdapter<WebCore::NumericComponent>::StringTypeAdapter):
        (WTF::StringTypeAdapter<WebCore::NumericComponent>::length const):
        (WTF::StringTypeAdapter<WebCore::NumericComponent>::is8Bit const):
        (WTF::StringTypeAdapter<WebCore::NumericComponent>::writeTo const):
        (WTF::StringTypeAdapter<WebCore::NumericComponent>::buffer const):
        (WTF::StringTypeAdapter<WebCore::PercentageComponent>::StringTypeAdapter):
        (WTF::StringTypeAdapter<WebCore::PercentageComponent>::length const):
        (WTF::StringTypeAdapter<WebCore::PercentageComponent>::is8Bit const):
        (WTF::StringTypeAdapter<WebCore::PercentageComponent>::writeTo const):
        (WTF::StringTypeAdapter<WebCore::PercentageComponent>::buffer const):
        Add helper StringTypeAdapter to efficiently encode "none" or the number
        when used with makeString().

        (WebCore::serializationUsingColorFunction):
        (WebCore::serializationForCSS):
        (WebCore::serializationForHTML):
        (WebCore::serializationForRenderTreeAsText):
        Add support for serializing bounded SRGBA<float> in the rgba() form rather
        than the color function form for the case when it is used to store NaNs. This
        serialization is a bit different than the normal 8-bit serialization as it uses
        the whitespace syntax rather than comma syntax to allow round tripping of 'none'
        components. This is currently unders discussion with the editors:
            - https://github.com/w3c/csswg-drafts/issues/6959

        * platform/graphics/ColorTypes.h:
        (WebCore::assertInRange):
        Update bounds assertion to allow NaN for all components regardless of bounds.

2022-01-18  Sam Weinig  <weinig@apple.com>

        Canvas functions that take colors as strings don't support all the syntax that CSS supports
        https://bugs.webkit.org/show_bug.cgi?id=235269

        Reviewed by Darin Adler.

        Add a variant of CSSParser::parseColor() that takes a CSSParserContext
        and use it (and parser context created from a document) to get the parser
        to respect the settings. Rename the existing CSSParser::parseColor() to 
        CSSParser::parseColorWithoutContext() and add a comment indicating all
        uses should eventually be removed.

        Offscreen canvas and custom paint canvas are using the old path with https://webkit.org/b/235270
        tracking finding a solution for them.

        * Modules/applicationmanifest/ApplicationManifestParser.cpp:
        (WebCore::ApplicationManifestParser::parseColor):
        * css/StyleProperties.cpp:
        (WebCore::StyleProperties::propertyAsColor const):
        * css/parser/CSSParser.cpp:
        (WebCore::CSSParser::parseColor):
        (WebCore::CSSParser::parseColorWithoutContext):
        * css/parser/CSSParser.h:
        * editing/EditingStyle.cpp:
        (WebCore::cssValueToColor):
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::parseAttribute):
        * html/HTMLMetaElement.cpp:
        (WebCore::HTMLMetaElement::contentColor):
        * html/canvas/CanvasStyle.cpp:
        (WebCore::parseColor):
        (WebCore::currentColor):
        * svg/properties/SVGAnimationAdditiveValueFunctionImpl.h:
        * svg/properties/SVGPropertyTraits.h:
        (WebCore::SVGPropertyTraits<Color>::fromString):
        (WebCore::SVGPropertyTraits<Color>::parse):

2022-01-18  Alex Christensen  <achristensen@webkit.org>

        Remove ImplementationLacksVTable IDL attribute
        https://bugs.webkit.org/show_bug.cgi?id=235170

        Reviewed by Yusuke Suzuki.

        Also remove some bindings test results that don't seem to be used any more.

        * Modules/indexeddb/IDBKeyRange.idl:
        * bindings/scripts/IDLAttributes.json:
        * bindings/scripts/test/JS/JSInterfaceName.cpp: Removed.
        * bindings/scripts/test/JS/JSMapLike.cpp: Removed.

2022-01-18  Patrick Griffis  <pgriffis@igalia.com>

        CSP: Improve handling of multiple policies
        https://bugs.webkit.org/show_bug.cgi?id=235199

        Reviewed by Kate Cheney.

        This fixes many issues with multiple CSP policies.

        To quote the spec for script-src:

        > Their behavior will be blocked unless every policy allows inline script, either implicitly by not
          specifying a script-src (or default-src) directive, or explicitly, by specifying "unsafe-inline",
          a nonce-source or a hash-source that matches the inline block.

        The previous structure was many distinct calls to check if there was a nonce in any policy, then if there
        was a hash in any policy, etc, rather than actually checking the policies as a whole to know if they
        allow or block a behavior. This lead to various issues where polices were not properly respected and where
        reports were inaccurate.

        The allScriptPoliciesAllow() function did try to consider all policies but was not very flexible and had buggy
        behavior like for each policy it would call findHashOfContentInPolicies() meaning hashes from other policies
        incorrectly applied to the current policy, plus general inefficiency of hashing the same content many
        times over.

        The new behavior relies more on passing all required information in a single function call to verify all
        policies in a single pass.

        * bindings/js/CachedScriptFetcher.cpp:
        (WebCore::CachedScriptFetcher::requestScriptWithCache const):
        * dom/InlineStyleSheetOwner.cpp:
        (WebCore::InlineStyleSheetOwner::createSheet):
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::requestModuleScript):
        (WebCore::ScriptElement::executeClassicScript):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::styleAttributeChanged):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::process):
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::isAllowedByContentSecurityPolicy):
        * loader/ResourceLoaderOptions.h:
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::allowedByContentSecurityPolicy const):
        * page/csp/ContentSecurityPolicy.cpp:
        (WebCore::parseSubResourceIntegrityIntoDigests):
        (WebCore::generateHashesForContent):
        (WebCore::ContentSecurityPolicy::allowJavaScriptURLs const):
        (WebCore::ContentSecurityPolicy::allowInlineEventHandlers const):
        (WebCore::ContentSecurityPolicy::allowNonParserInsertedScripts const):
        (WebCore::ContentSecurityPolicy::allowInlineScript const):
        (WebCore::ContentSecurityPolicy::allowInlineStyle const):
        (WebCore::ContentSecurityPolicy::allowScriptFromSource const):
        (WebCore::ContentSecurityPolicy::allowStyleFromSource const):
        (WebCore::ContentSecurityPolicy::allScriptPoliciesAllow const): Deleted.
        (WebCore::ContentSecurityPolicy::findHashOfContentInPolicies const): Deleted.
        (WebCore::ContentSecurityPolicy::checkHashAndReportViolation const): Deleted.
        * page/csp/ContentSecurityPolicy.h:
        * page/csp/ContentSecurityPolicyDirectiveList.cpp:
        (WebCore::ContentSecurityPolicyDirectiveList::violatedDirectiveForUnsafeInlineScriptElement const):
        (WebCore::ContentSecurityPolicyDirectiveList::violatedDirectiveForInlineJavascriptURL const):
        (WebCore::ContentSecurityPolicyDirectiveList::violatedDirectiveForInlineEventHandlers const):
        (WebCore::ContentSecurityPolicyDirectiveList::violatedDirectiveForNonParserInsertedScripts const):
        (WebCore::ContentSecurityPolicyDirectiveList::violatedDirectiveForUnsafeInlineStyleElement const):
        (WebCore::ContentSecurityPolicyDirectiveList::violatedDirectiveForUnsafeInlineStyleAttribute const):
        (WebCore::ContentSecurityPolicyDirectiveList::violatedDirectiveForScript const):
        (WebCore::ContentSecurityPolicyDirectiveList::violatedDirectiveForStyle const):
        (WebCore::ContentSecurityPolicyDirectiveList::violatedDirectiveForUnsafeHashScript const): Deleted.
        (WebCore::ContentSecurityPolicyDirectiveList::violatedDirectiveForUnsafeHashStyle const): Deleted.
        (WebCore::ContentSecurityPolicyDirectiveList::violatedDirectiveForParserInsertedScript const): Deleted.
        (WebCore::ContentSecurityPolicyDirectiveList::violatedDirectiveForUnsafeInlineScriptAttribute const): Deleted.
        (WebCore::ContentSecurityPolicyDirectiveList::violatedDirectiveForScriptHash const): Deleted.
        (WebCore::ContentSecurityPolicyDirectiveList::violatedDirectiveForStyleHash const): Deleted.
        * page/csp/ContentSecurityPolicyDirectiveList.h:

2022-01-18  Simon Fraser  <simon.fraser@apple.com>

        Clean up some code around RenderElement::addLayers()
        https://bugs.webkit.org/show_bug.cgi?id=235272

        Reviewed by Darin Adler.

        The code that looks for the next layer via render tree traversal is tricky and
        hard to understand. Do some initial cleanup prior to fixing it for top layer.

        First, use std::optional<> in the static addLayers() to make the beforeChild
        finding easier to understand (no longer need a null newObject as the signal that
        you've tried to look).

        Second, use references in findNextLayer() and rename 'startPoint' to make its
        purpose more clear.

        * rendering/RenderElement.cpp:
        (WebCore::addLayers):
        (WebCore::RenderElement::addLayers):
        (WebCore::RenderElement::findNextLayer const):
        (WebCore::RenderElement::findNextLayer): Deleted.
        * rendering/RenderElement.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::insertOnlyThisLayer):

2022-01-18  Youenn Fablet  <youenn@apple.com>

        Reduce failure timer in CoreAudioSharedUnit in the case we only render audio samples
        https://bugs.webkit.org/show_bug.cgi?id=235318

        Reviewed by Eric Carlson.

        As shown in https://bugs.webkit.org/show_bug.cgi?id=235317, it might be possible for a VPIO that is only used for
        audio rendering to fail sometimes. Waiting for 10 seconds in that case is very long, so we reduce the verification delay to 2 seconds.
        Manually tested.

        * platform/mediastream/mac/BaseAudioSharedUnit.cpp:
        * platform/mediastream/mac/BaseAudioSharedUnit.h:
        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:

2022-01-18  Alex Christensen  <achristensen@webkit.org>

        Remove ImplementationLacksVTable IDL attribute
        https://bugs.webkit.org/show_bug.cgi?id=235170

        Reviewed by Yusuke Suzuki.

        It can be replaced by if constexpr (std::is_polymorphic_v<T>).

        * Modules/WebGPU/GPU.idl:
        * Modules/WebGPU/GPUAdapter.idl:
        * Modules/WebGPU/GPUBindGroup.idl:
        * Modules/WebGPU/GPUBindGroupLayout.idl:
        * Modules/WebGPU/GPUBuffer.idl:
        * Modules/WebGPU/GPUBufferUsage.idl:
        * Modules/WebGPU/GPUCanvasContext.idl:
        * Modules/WebGPU/GPUColorWrite.idl:
        * Modules/WebGPU/GPUCommandBuffer.idl:
        * Modules/WebGPU/GPUCommandEncoder.idl:
        * Modules/WebGPU/GPUCompilationInfo.idl:
        * Modules/WebGPU/GPUCompilationMessage.idl:
        * Modules/WebGPU/GPUComputePassEncoder.idl:
        * Modules/WebGPU/GPUComputePipeline.idl:
        * Modules/WebGPU/GPUDeviceLostInfo.idl:
        * Modules/WebGPU/GPUExternalTexture.idl:
        * Modules/WebGPU/GPUMapMode.idl:
        * Modules/WebGPU/GPUOutOfMemoryError.idl:
        * Modules/WebGPU/GPUPipelineLayout.idl:
        * Modules/WebGPU/GPUQuerySet.idl:
        * Modules/WebGPU/GPUQueue.idl:
        * Modules/WebGPU/GPURenderBundle.idl:
        * Modules/WebGPU/GPURenderBundleEncoder.idl:
        * Modules/WebGPU/GPURenderPassEncoder.idl:
        * Modules/WebGPU/GPURenderPipeline.idl:
        * Modules/WebGPU/GPUSampler.idl:
        * Modules/WebGPU/GPUShaderModule.idl:
        * Modules/WebGPU/GPUShaderStage.idl:
        * Modules/WebGPU/GPUSupportedFeatures.idl:
        * Modules/WebGPU/GPUSupportedLimits.idl:
        * Modules/WebGPU/GPUTexture.idl:
        * Modules/WebGPU/GPUTextureUsage.idl:
        * Modules/WebGPU/GPUTextureView.idl:
        * Modules/WebGPU/GPUValidationError.idl:
        * Modules/async-clipboard/ClipboardItem.idl:
        * Modules/contact-picker/ContactsManager.idl:
        * Modules/credentialmanagement/CredentialsContainer.idl:
        * Modules/encryptedmedia/MediaKeySystemAccess.idl:
        * Modules/entriesapi/DOMFileSystem.idl:
        * Modules/fetch/FetchHeaders.idl:
        * Modules/gamepad/Gamepad.idl:
        * Modules/gamepad/GamepadButton.idl:
        * Modules/geolocation/GeolocationCoordinates.idl:
        * Modules/geolocation/GeolocationPosition.idl:
        * Modules/geolocation/GeolocationPositionError.idl:
        * Modules/highlight/Highlight.idl:
        * Modules/highlight/HighlightRegister.idl:
        * Modules/indexeddb/IDBKeyRange.idl:
        * Modules/mediacapabilities/MediaCapabilities.idl:
        * Modules/mediacontrols/MediaControlsHost.idl:
        * Modules/mediasession/MediaMetadata.idl:
        * Modules/mediasource/VideoPlaybackQuality.idl:
        * Modules/mediastream/OverconstrainedError.idl:
        * Modules/mediastream/RTCCertificate.idl:
        * Modules/mediastream/RTCEncodedAudioFrame.idl:
        * Modules/mediastream/RTCEncodedVideoFrame.idl:
        * Modules/mediastream/RTCIceCandidate.idl:
        * Modules/mediastream/RTCSessionDescription.idl:
        * Modules/mediastream/RTCStatsReport.idl:
        * Modules/paymentrequest/PaymentAddress.idl:
        * Modules/permissions/Permissions.idl:
        * Modules/push-api/PushManager.idl:
        * Modules/push-api/PushMessageData.idl:
        * Modules/push-api/PushSubscription.idl:
        * Modules/push-api/PushSubscriptionOptions.idl:
        * Modules/speech/SpeechRecognitionAlternative.idl:
        * Modules/speech/SpeechRecognitionResult.idl:
        * Modules/speech/SpeechRecognitionResultList.idl:
        * Modules/storage/StorageManager.idl:
        * Modules/web-locks/WebLock.idl:
        * Modules/webaudio/AudioBuffer.idl:
        * Modules/webaudio/AudioListener.idl:
        * Modules/webaudio/AudioWorkletProcessor.idl:
        * Modules/webaudio/PeriodicWave.idl:
        * Modules/webcodecs/VideoColorSpace.idl:
        * Modules/webdatabase/Database.idl:
        * Modules/webdatabase/SQLError.idl:
        * Modules/webdatabase/SQLResultSet.idl:
        * Modules/webdatabase/SQLResultSetRowList.idl:
        * Modules/webxr/WebXRFrame.idl:
        * Modules/webxr/WebXRHand.idl:
        * Modules/webxr/WebXRInputSource.idl:
        * Modules/webxr/WebXRInputSourceArray.idl:
        * Modules/webxr/WebXRJointPose.idl:
        * Modules/webxr/WebXRRenderState.idl:
        * Modules/webxr/WebXRRigidTransform.idl:
        * Modules/webxr/WebXRView.idl:
        * Modules/webxr/WebXRViewport.idl:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GetGnuVTableNameForInterface):
        (GetWinVTableNameForInterface):
        (GenerateImplementation):
        (GetImplementationLacksVTableForInterface): Deleted.
        * bindings/scripts/IDLAttributes.json:
        * bindings/scripts/test/ExposedToWorkerAndWindow.idl:
        * bindings/scripts/test/JS/JSExposedStar.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSExposedToWorkerAndWindow.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestCEReactions.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestCEReactionsStringifier.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestCallTracer.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestConditionalIncludes.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestConditionallyReadWrite.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestDefaultToJSON.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestDefaultToJSONFilteredByExposed.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestDelegateToSharedSyntheticAttribute.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestDomainSecurity.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestEnabledBySetting.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestEnabledForContext.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestException.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestGenerateAddOpaqueRoot.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestIndexedSetterNoIdentifier.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestIndexedSetterThrowingException.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestIndexedSetterWithIdentifier.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestInterfaceLeadingUnderscore.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestIterable.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestLegacyFactoryFunction.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestLegacyNoInterfaceObject.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestLegacyOverrideBuiltIns.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestMapLike.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestMapLikeWithOverriddenOperations.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterNoIdentifier.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterThrowingException.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterWithIdentifier.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedDeleterNoIdentifier.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedDeleterThrowingException.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedDeleterWithIdentifier.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedDeleterWithIndexedGetter.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedGetterCallWith.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedGetterNoIdentifier.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedGetterWithIdentifier.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedSetterNoIdentifier.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedSetterThrowingException.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedSetterWithIdentifier.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetter.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetterAndSetter.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedSetterWithLegacyOverrideBuiltIns.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedSetterWithLegacyUnforgeableProperties.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedSetterWithLegacyUnforgeablePropertiesAndLegacyOverrideBuiltIns.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNode.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestOperationConditional.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestOverloadedConstructorsWithSequence.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestPluginInterface.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestPromiseRejectionEvent.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestReadOnlyMapLike.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestReadOnlySetLike.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestReportExtraMemoryCost.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestSetLike.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestSetLikeWithOverriddenOperations.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestStringifier.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestStringifierAnonymousOperation.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestStringifierNamedOperation.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestStringifierOperationImplementedAs.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestStringifierOperationNamedToString.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestStringifierReadOnlyAttribute.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestStringifierReadWriteAttribute.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/TestInterface.idl:
        * bindings/scripts/test/TestInterfaceLeadingUnderscore.idl:
        * css/CSSPaintSize.idl:
        * css/DOMMatrix.idl:
        * css/DOMMatrixReadOnly.idl:
        * css/DeprecatedCSSOMCounter.idl:
        * css/DeprecatedCSSOMPrimitiveValue.idl:
        * css/DeprecatedCSSOMRGBColor.idl:
        * css/DeprecatedCSSOMRect.idl:
        * css/DeprecatedCSSOMValue.idl:
        * css/DeprecatedCSSOMValueList.idl:
        * css/MediaList.idl:
        * css/StyleMedia.idl:
        * css/StyleSheetList.idl:
        * css/typedom/CSSOMVariableReferenceValue.idl:
        * css/typedom/numeric/CSSNumericArray.idl:
        * dom/AbortController.idl:
        * dom/DOMException.idl:
        * dom/DOMImplementation.idl:
        * dom/DOMPoint.idl:
        * dom/DOMPointReadOnly.idl:
        * dom/DOMQuad.idl:
        * dom/DOMRect.idl:
        * dom/DOMRectList.idl:
        * dom/DOMRectReadOnly.idl:
        * dom/DOMStringList.idl:
        * dom/DataTransferItem.idl:
        * dom/IdleDeadline.idl:
        * dom/MessageChannel.idl:
        * dom/MutationObserver.idl:
        * dom/NamedNodeMap.idl:
        * dom/NodeIterator.idl:
        * dom/TextDecoder.idl:
        * dom/TextDecoderStreamDecoder.idl:
        * dom/TextEncoder.idl:
        * dom/TextEncoderStreamEncoder.idl:
        * dom/Touch.idl:
        * dom/TouchList.idl:
        * dom/TreeWalker.idl:
        * fileapi/FileList.idl:
        * fileapi/FileReaderSync.idl:
        * html/DOMFormData.idl:
        * html/ImageBitmap.idl:
        * html/ImageData.idl:
        * html/MediaError.idl:
        * html/TextMetrics.idl:
        * html/TimeRanges.idl:
        * html/URLSearchParams.idl:
        * html/WebKitMediaKeyError.idl:
        * html/canvas/CanvasGradient.idl:
        * html/canvas/CanvasPattern.idl:
        * html/canvas/WebGLActiveInfo.idl:
        * html/canvas/WebGLShaderPrecisionFormat.idl:
        * html/canvas/WebGLUniformLocation.idl:
        * html/track/AudioTrackConfiguration.idl:
        * html/track/TextTrackCueList.idl:
        * html/track/VTTRegionList.idl:
        * html/track/VideoTrackConfiguration.idl:
        * inspector/CommandLineAPIHost.idl:
        * inspector/InspectorAuditAccessibilityObject.idl:
        * inspector/InspectorAuditDOMObject.idl:
        * inspector/InspectorAuditResourcesObject.idl:
        * inspector/InspectorFrontendHost.idl:
        * page/BarProp.idl:
        * page/DOMSelection.idl:
        * page/History.idl:
        * page/IntersectionObserver.idl:
        * page/IntersectionObserverEntry.idl:
        * page/Location.idl:
        * page/PerformanceNavigation.idl:
        * page/PerformanceObserver.idl:
        * page/PerformanceObserverEntryList.idl:
        * page/PerformanceServerTiming.idl:
        * page/PerformanceTiming.idl:
        * page/ResizeObserver.idl:
        * page/ResizeObserverEntry.idl:
        * page/Screen.idl:
        * page/UndoItem.idl:
        * page/UndoManager.idl:
        * page/WebKitPoint.idl:
        * plugins/DOMMimeType.idl:
        * plugins/DOMMimeTypeArray.idl:
        * plugins/DOMPlugin.idl:
        * plugins/DOMPluginArray.idl:
        * svg/SVGPathSeg.idl:
        * svg/SVGRenderingIntent.idl:
        * svg/SVGUnitTypes.idl:
        * svg/SVGViewSpec.idl:
        * testing/GCObservation.idl:
        * testing/MallocStatistics.idl:
        * testing/MemoryInfo.idl:
        * testing/MockContentFilterSettings.idl:
        * testing/MockPageOverlay.idl:
        * testing/ServiceWorkerInternals.idl:
        * testing/TypeConversions.idl:
        * testing/WebFakeXRDevice.idl:
        * testing/WebFakeXRInputController.idl:
        * workers/WorkerLocation.idl:
        * workers/service/ServiceWorkerClients.idl:
        * xml/DOMParser.idl:
        * xml/XMLSerializer.idl:
        * xml/XPathEvaluator.idl:
        * xml/XPathExpression.idl:
        * xml/XPathResult.idl:
        * xml/XSLTProcessor.idl:

2022-01-18  Sepand Parhami  <sparhami@apple.com>

        AX: Improve support for aria-owns in aria trees
        https://bugs.webkit.org/show_bug.cgi?id=233383

        Reviewed by Chris Fleizach.

        Better supports aria-owns in trees by following children specified through ownership similar
        to how DOM children are handled. Previously, you could use aria-owns for only one level of
        ownership. This change also fixes tree items being included twice (once as a DOM child and
        another time via aria-owns) and supports using both DOM children and aria-owns on a single
        element. This change only affects trees via a change to ariaTreeRows and does not change
        aria-owns behavior in general.

        Tests: accessibility/mac/treeitem-row-delegation.html
               accessibility/mac/treeitem-row-delegation-poorly-formed.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::ariaTreeRows):
        * accessibility/AccessibilityObject.h:

2022-01-18  Youenn Fablet  <youenn@apple.com>

        Make ServiceWorkerClient.id a UUID instead of a string derived from a ScriptExecutionContextIdentifier
        https://bugs.webkit.org/show_bug.cgi?id=235070
        <rdar://problem/87673540>

        Reviewed by Darin Adler and Chris Dumez.

        Covered by existing and beefed-up API tests.

        * platform/ScriptExecutionContextIdentifier.h:
        Remove unneeded const & and && constructors and use by value constructor instead.
        Add computeHash direct specialization to remove UUID Hasher specialization.

2022-01-18  Oriol Brufau  <obrufau@igalia.com>

        [css-logical] Simplify logical property groups
        https://bugs.webkit.org/show_bug.cgi?id=228130

        Reviewed by Antti Koivisto.

        Refactors logical property group code in makeprop.pl to make it a bit
        more simple and easy the extend if new kinds of logical properties are
        introduced in the future.

        No new tests since no change in behavior.

        * css/makeprop.pl:
        (addProperty):

2022-01-17  Sergio Villar Senin  <svillar@igalia.com>

        [css-flexbox] Add support for intrinsic sizes in flex-basis
        https://bugs.webkit.org/show_bug.cgi?id=235291

        Reviewed by Darin Adler.

        The flex-basis property should allow the same values as <'width'>. However we were only allowing 'auto', 'content'
        and any Length. That did not include intrinsic sizes like 'min-content', 'fit-content' etc. Added the proper parsing
        machinery in order to fix that.

        Apart from that, a change in the flexbox code was needed. In particular the code was incorrectly assuming that a
        flex-basis with intrinsic size in a column flexbox was always an indefinite size. That's true as long as the flexbox
        has an horizontal writing mode (in that case the main axis would be the block axis). However that's totally wrong for
        a flexbox with vertical writing mode (as in that case the main axis would be the inline axis).

        The flexbox fix + the parsing additions allow us to pass 12 more WPT subtests.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeFlexBasis): Additionally check for any validWidthOrHeightKeyword().
        (WebCore::CSSPropertyParser::parseSingleValue): Pass the context instead of the mode.
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::childMainSizeIsDefinite): Replaced isColumnFlow() by !mainAxisIsChildInlineAxis().

2022-01-17  Antti Koivisto  <antti@apple.com>

        [:has() pseudo-class] Disallow nested :has()
        https://bugs.webkit.org/show_bug.cgi?id=235231

        Reviewed by Dean Jackson.

        Nested case ':has(:has(foo))' adds no meaningful capability and would complicate invalidation.
        See https://github.com/w3c/csswg-drafts/issues/6952 for more details.

        * css/parser/CSSSelectorParser.cpp:
        (WebCore::CSSSelectorParser::consumePseudo):

        Also set m_resistDefaultNamespace like other logical combination pseudo-classes.

        * css/parser/CSSSelectorParser.h:

2022-01-17  Youenn Fablet  <youenn@apple.com>

        BaseAudioSharedUnit::devicesChanged is failing capture too much in GPUProcess
        https://bugs.webkit.org/show_bug.cgi?id=235288

        Reviewed by Eric Carlson.

        Manually tested.

        * platform/mediastream/mac/CoreAudioCaptureDeviceManager.h:
        In GPUProcess, we do not need to filter tap enabled devices, since this may filter out valid devices, which may break capture.
        Given we only need to filter tap enabled devices in the process that enumerates devices for selecting the one to use,
        We can reverse the default value to not filter, and enable the filtering in UIProcess as done currently based on whether capturing in GPUProcess or not.

2022-01-17  Youenn Fablet  <youenn@apple.com>

        AudioMediaStreamTrackRendererUnit::reset should hop to the main thread before calling its observers
        https://bugs.webkit.org/show_bug.cgi?id=235290

        Reviewed by Darin Adler.

        In case of doing audio rendering in WebProcess, we need to hop to main thread since the callback might get called from a background thread.

        * platform/mediastream/cocoa/AudioMediaStreamTrackRendererUnit.cpp:
        * platform/mediastream/cocoa/AudioMediaStreamTrackRendererUnit.h:

2022-01-17  Myles C. Maxfield  <mmaxfield@apple.com>

        REGRESSION(r281389): using font-variant-ligatures causes Unicode bidi isolation control characters to render
        https://bugs.webkit.org/show_bug.cgi?id=235053
        <rdar://problem/87425066>

        Reviewed by Darin Adler.

        The spec says (https://drafts.csswg.org/css-text-3/#white-space-processing)

        > unsupported Default_ignorable characters must be ignored for text rendering.

        Previously, we were handling this by mapping the characters to the zero width space character. r281389 changed
        that to be more faithful to the original string (and not do the mapping). One somewhat unexpected result of
        this patch was that, now that we're not mapping these code points to the zero width space character, fewer fonts
        on the system will support those code points. It became much more common for no font at all to support the code
        point in question. r281389 handled the situation where the code points were supported by a font but shouldn't be
        rendered, but didn't handle the case where the code points *weren't* supported by any fonts (in the complex text
        codepath). This patch updates that path to handle it.

        This patch also replaces our previous hardcoded list of Default_ignorable characters with the proper call to ICU
        to check the Unicode property. It does this in both the fast text codepath and the simple text codepath, to make
        sure they match.

        Tests: imported/w3c/web-platform-tests/css/css-text/white-space/default-ignorable-complex.html
               imported/w3c/web-platform-tests/css/css-text/white-space/default-ignorable.html

        * platform/graphics/ComplexTextController.cpp:
        (WebCore::ComplexTextController::ComplexTextRun::ComplexTextRun):
        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::applyCSSVisibilityRules):

2022-01-17  ChangSeok Oh  <changseok@webkit.org>

        [GTK] Implement form validation with gtk3 widgets in the UI process
        https://bugs.webkit.org/show_bug.cgi?id=234629

        Reviewed by Carlos Garcia Campos.

        This change re-implements form validation with gtk3 widgets in the UI process.
        The current form validation is implemented by using shadow DOM in the web process.
        The overall design is similar to that of mac port but the gtk port adds
        a callback of webkitWebViewBaseSetShouldNotifyFocusEvents to WebCore::ValidationBubble
        to suppress a focus event triggered by the popover widget. Otherwise, the native
        bubble does not display properly.
        This change does not support gtk4 yet. A follow-up patch will add the gtk4 support.

        No new tests because existing tests cover this change.

        * SourcesGTK.txt:
        * platform/ValidationBubble.h:
        (WebCore::ValidationBubble::create):
        * platform/gtk/ValidationBubbleGtk.cpp: Added.
        (WebCore::ValidationBubble::ValidationBubble):
        (WebCore::ValidationBubble::~ValidationBubble):
        (WebCore::ValidationBubble::invalidate):
        (WebCore::ValidationBubble::showRelativeTo):

2022-01-17  Alan Bujtas  <zalan@apple.com>

        Fractional td width is not rendering correctly
        https://bugs.webkit.org/show_bug.cgi?id=234745
        <rdar://problem/87162997>

        Reviewed by Darin Adler.

        This is based on the following Blink commit
           https://chromium.googlesource.com/chromium/src/+/bfade5f8c943d322f5aca3ab0341824e4ae885a1

        The code that ignores a width of zero was incorrectly parsing as an integer and ignoring fractional values.

        Test: fast/table/table-cell-percent-width-between-0-and-1.html

        * html/HTMLTableCellElement.cpp:
        (WebCore::HTMLTableCellElement::collectPresentationalHintsForAttribute):

2022-01-17  Wenson Hsieh  <wenson_hsieh@apple.com>

        ImageAnalysisQueue should analyze image elements that are loaded after the call to enqueueAllImages()
        https://bugs.webkit.org/show_bug.cgi?id=233266
        rdar://85731875

        Reviewed by Darin Adler.

        Make a few adjustments to ImageAnalysisQueue, such that it continues to analyze images in the document that have
        finished loading after triggering the initial call to `enqueueAllImages()` in the document.

        Test:   ImageAnalysisTests.AnalyzeDynamicallyLoadedImages
                ImageAnalysisTests.ResetImageAnalysisAfterNavigation

        * page/ImageAnalysisQueue.cpp:
        (WebCore::ImageAnalysisQueue::enqueueIfNeeded):

        Pull logic for queueing an image element for analysis into a separate helper method; we only attempt to analyze
        image elements that have successfully loaded and contain a `CachedImage` that is larger than an arbitrarily
        chosen size of 20px by 20px.

        (WebCore::ImageAnalysisQueue::enqueueAllImages):

        Refactor this to use the new `enqueueIfNeeded` method above.

        (WebCore::ImageAnalysisQueue::resumeProcessing):
        (WebCore::ImageAnalysisQueue::clear):
        * page/ImageAnalysisQueue.h:

        Add a weak hashset of elements that we've already added to the image analysis queue at some point. This prevents
        us from continually performing image analysis on the same image if it's only being removed and reinserted in the
        document.

        * page/Page.cpp:
        (WebCore::Page::didCommitLoad):

        Additionally reset the image analysis queue when committing page load, so that the image analysis queue doesn't
        persist and continue analyzing images even after reloading the page (or navigating away).

        (WebCore::Page::didFinishLoadingImageForElement):

        If it exists, tell the page's image analysis queue to add the newly loaded image.

        (WebCore::Page::resetImageAnalysisQueue):
        * page/Page.h:

2022-01-17  Antoine Quint  <graouts@webkit.org>

        Crash may occur under ComputedStyleExtractor::propertyValue()
        https://bugs.webkit.org/show_bug.cgi?id=235255

        Reviewed by Antti Koivisto.

        When calling getComputedStyle() after an element has had its style set to "display: none",
        ComputedStyleExtractor::propertyValue() will first start with a non-null renderer but it will
        become null after document.updateLayoutIgnorePendingStylesheets() is called.

        To avoid this problem, we stop storing the renderer throughout the method, and instead call
        styledRenderer() to obtain a valid renderer each time we need to access it.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):

2022-01-17  Sepand Parhami  <sparhami@apple.com>

        AX: Expose toggle buttons using role="button" as form controls.
        https://bugs.webkit.org/show_bug.cgi?id=234119

        Reviewed by Chris Fleizach.

        Add the ToggleButton role to the list of aria controls in isARIAControl so that it
        is a control when checked by the accessibility object search.

        Tests: LayoutTests/accessibility/mac/search-predicate-element-count.html

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::isLabelable const):

        Remove redundant check, isControl already covers it.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::isARIAControl):

2022-01-17  Antti Koivisto  <antti@apple.com>

        Layered @import rules in <style> should be preloaded
        https://bugs.webkit.org/show_bug.cgi?id=234094
        <rdar://problem/86586969>

        Reviewed by Dean Jackson.

        Test: http/tests/loading/preload-css-import-layer.html

        * html/parser/CSSPreloadScanner.cpp:
        (WebCore::CSSPreloadScanner::tokenize):
        (WebCore::hasValidImportConditions):
        (WebCore::CSSPreloadScanner::emitRule):
        * html/parser/CSSPreloadScanner.h:

        Allow @import rule containing layer condition to be preloaded.

2022-01-17  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] ASSERT in InlineContentBreaker::tryBreakingPreviousNonOverflowingRuns (!partialRun->length) when webinspector is open
        https://bugs.webkit.org/show_bug.cgi?id=235286

        Reviewed by Antti Koivisto.

        When the overflowing run is non-breakable (in this case an "inline box end" with padding), we try to find a breakable
        previous run in the candidate list. If we find such text run, we try to break it by looking at the applicable CSS properties
        (e.g. word-break, overflow-wrap). Now text runs with 1 (and 0) length and no adjacent text runs need special handling
        as they can't be broken "within word" or at boundary (they treated as "unbreakable").

        Test: fast/text/overflow-wrap-assert-with-zero-width-overflowing-content.html

        * layout/formattingContexts/inline/InlineContentBreaker.cpp:
        (WebCore::Layout::InlineContentBreaker::tryBreakingTextRun const):
        (WebCore::Layout::InlineContentBreaker::tryBreakingPreviousNonOverflowingRuns const): The trailing run starts
        at the beginning of the run and ends right before at the last character.

2022-01-17  Youenn Fablet  <youenn@apple.com>

        Make ServiceWorkerClient.id a UUID instead of a string derived from a ScriptExecutionContextIdentifier
        https://bugs.webkit.org/show_bug.cgi?id=235070

        Reviewed by Chris Dumez.

        Update ScriptExecutionContextIdentifier to be a process-scoped UUID.
        This allows to identify the process running a process as well as exposing to JavaScript context identifiers as UUIDs.
        This is matching what Chrome and Firefox are doing.
        Make SWServer store the maping from context UUID strings to the internal ScriptExecutionContextIdentifiers.
        This allows to find a ServiceWorkerClient directly from its JavaScript exposed identifier.
        Rename reservedClientId in resultingClientId to match the spec.

        Covered by existing tests.

        * Modules/web-locks/WebLockRegistry.cpp:
        * dom/ScriptExecutionContext.cpp:
        * loader/DocumentLoader.cpp:
        * page/mac/PageMac.mm:
        * platform/ProcessQualified.h:
        * platform/ScriptExecutionContextIdentifier.h:
        * testing/Internals.cpp:
        * testing/Internals.h:
        * testing/Internals.idl:
        * testing/ServiceWorkerInternals.cpp:
        * testing/ServiceWorkerInternals.h:
        * testing/ServiceWorkerInternals.idl:
        * workers/service/FetchEvent.cpp:
        * workers/service/FetchEvent.h:
        * workers/service/FetchEvent.idl:
        * workers/service/ServiceWorkerClient.cpp:
        * workers/service/ServiceWorkerClient.idl:
        * workers/service/ServiceWorkerClients.cpp:
        * workers/service/context/SWContextManager.h:
        * workers/service/context/ServiceWorkerFetch.cpp:
        * workers/service/context/ServiceWorkerFetch.h:
        * workers/service/context/ServiceWorkerThread.cpp:
        * workers/service/context/ServiceWorkerThread.h:
        * workers/service/context/ServiceWorkerThreadProxy.cpp:
        * workers/service/context/ServiceWorkerThreadProxy.h:
        * workers/service/server/SWServer.cpp:
        * workers/service/server/SWServer.h:
        * workers/service/server/SWServerToContextConnection.cpp:
        * workers/service/server/SWServerToContextConnection.h:
        * workers/service/server/SWServerWorker.cpp:
        * workers/service/server/SWServerWorker.h:

2022-01-17  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] tests media/track/audio-track-configuration.html and media/track/video-track-configuration.html fail
        https://bugs.webkit.org/show_bug.cgi?id=234084

        Reviewed by Xabier Rodriguez-Calvar.

        The known caps and tags of the track GstStream are now exposed through the corresponding
        Platform{Audio,Video}TrackConfiguration. This is supported only when playbin3 is used at
        runtime. Supporting playbin2 would be some work (pad probes upfront of decoders?) that could
        be done as a follow-up. The codec string is generated with the new GStreamer API
        gst_codec_utils_caps_get_mime_codec(), which will ship in 1.20.

        * platform/graphics/gstreamer/AudioTrackPrivateGStreamer.cpp:
        (WebCore::AudioTrackPrivateGStreamer::AudioTrackPrivateGStreamer):
        * platform/graphics/gstreamer/VideoTrackPrivateGStreamer.cpp:
        (WebCore::VideoTrackPrivateGStreamer::VideoTrackPrivateGStreamer):

2022-01-17  Philippe Normand  <pnormand@igalia.com>

        [Debug][GStreamer] Crash in fast/mediastream/get-display-media-settings.html
        https://bugs.webkit.org/show_bug.cgi?id=235221

        Reviewed by Xabier Rodriguez-Calvar.

        Fix use-after-move issue in MockDisplayCaptureSourceGStreamer. The hashSalt string was moved
        to the wrapped mock video source, and then again as a parent class constructor parameter.

        * platform/mediastream/gstreamer/MockRealtimeVideoSourceGStreamer.cpp:
        (WebCore::MockDisplayCaptureSourceGStreamer::create):

2022-01-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][a11y] Stop using isolated tree for the ATSPI implementation
        https://bugs.webkit.org/show_bug.cgi?id=235229

        Reviewed by Adrian Perez de Castro.

        Isolated tree performance is not good enough with many websites, so for now we will stop using it.

        * SourcesGTK.txt:
        * accessibility/atspi/AXObjectCacheAtspi.cpp:
        (WebCore::AXObjectCache::postPlatformNotification):
        (WebCore::AXObjectCache::postTextStateChangePlatformNotification):
        (WebCore::AXObjectCache::postTextReplacementPlatformNotificationForTextControl):
        (WebCore::AXObjectCache::postTextReplacementPlatformNotification):
        (WebCore::AXObjectCache::frameLoadingEventPlatformNotification):
        (WebCore::AXObjectCache::isIsolatedTreeEnabled): Deleted.
        (WebCore::AXObjectCache::initializeSecondaryAXThread): Deleted.
        (WebCore::AXObjectCache::usedOnAXThread): Deleted.
        * accessibility/atspi/AccessibilityAtspi.cpp:
        (WebCore::AccessibilityAtspi::connect):
        (WebCore::AccessibilityAtspi::didConnect):
        (WebCore::AccessibilityAtspi::initializeRegistry):
        (WebCore::AccessibilityAtspi::addEventListener):
        (WebCore::AccessibilityAtspi::removeEventListener):
        (WebCore::AccessibilityAtspi::addClient):
        (WebCore::AccessibilityAtspi::removeClient):
        (WebCore::AccessibilityAtspi::shouldEmitSignal):
        (WebCore::AccessibilityAtspi::uniqueName const):
        (WebCore::AccessibilityAtspi::nullReference const):
        (WebCore::AccessibilityAtspi::applicationReference const):
        (WebCore::AccessibilityAtspi::registerRoot):
        (WebCore::AccessibilityAtspi::unregisterRoot):
        (WebCore::AccessibilityAtspi::registerObject):
        (WebCore::AccessibilityAtspi::unregisterObject):
        (WebCore::AccessibilityAtspi::registerHyperlink):
        (WebCore::AccessibilityAtspi::parentChanged):
        (WebCore::AccessibilityAtspi::childrenChanged):
        (WebCore::AccessibilityAtspi::stateChanged):
        (WebCore::AccessibilityAtspi::textChanged):
        (WebCore::AccessibilityAtspi::textAttributesChanged):
        (WebCore::AccessibilityAtspi::textCaretMoved):
        (WebCore::AccessibilityAtspi::textSelectionChanged):
        (WebCore::AccessibilityAtspi::valueChanged):
        (WebCore::AccessibilityAtspi::selectionChanged):
        (WebCore::AccessibilityAtspi::loadEvent):
        (WebCore::AccessibilityAtspi::ensureCache):
        (WebCore::AccessibilityAtspi::addToCacheIfNeeded):
        (WebCore::AccessibilityAtspi::scheduleCacheUpdate):
        (WebCore::AccessibilityAtspi::addAccessible):
        (WebCore::AccessibilityAtspi::removeAccessible):
        (WebCore::AccessibilityAtspi::AccessibilityAtspi): Deleted.
        (WebCore::AccessibilityAtspi::runLoop const): Deleted.
        * accessibility/atspi/AccessibilityAtspi.h:
        * accessibility/atspi/AccessibilityObjectActionAtspi.cpp:
        (WebCore::AccessibilityObjectAtspi::actionName const):
        (WebCore::AccessibilityObjectAtspi::localizedActionName const):
        (WebCore::AccessibilityObjectAtspi::actionKeyBinding const):
        (WebCore::AccessibilityObjectAtspi::doAction const):
        * accessibility/atspi/AccessibilityObjectAtspi.cpp:
        (WebCore::AccessibilityObjectAtspi::AccessibilityObjectAtspi):
        (WebCore::AccessibilityObjectAtspi::cacheDestroyed):
        (WebCore::AccessibilityObjectAtspi::elementDestroyed):
        (WebCore::AccessibilityObjectAtspi::root):
        (WebCore::AccessibilityObjectAtspi::registerObject):
        (WebCore::AccessibilityObjectAtspi::didUnregisterObject):
        (WebCore::AccessibilityObjectAtspi::path):
        (WebCore::AccessibilityObjectAtspi::reference):
        (WebCore::AccessibilityObjectAtspi::hyperlinkReference):
        (WebCore::AccessibilityObjectAtspi::setParent):
        (WebCore:: const):
        (WebCore::AccessibilityObjectAtspi::childCount const):
        (WebCore::AccessibilityObjectAtspi::childAt const):
        (WebCore::AccessibilityObjectAtspi::children const):
        (WebCore::AccessibilityObjectAtspi::indexInParent const):
        (WebCore::AccessibilityObjectAtspi::name const):
        (WebCore::AccessibilityObjectAtspi::description const):
        (WebCore::AccessibilityObjectAtspi::locale const):
        (WebCore::AccessibilityObjectAtspi::state const):
        (WebCore::AccessibilityObjectAtspi::isDefunct const):
        (WebCore::AccessibilityObjectAtspi::id const):
        (WebCore::AccessibilityObjectAtspi::attributes const):
        (WebCore::AccessibilityObjectAtspi::buildAttributes const):
        (WebCore::AccessibilityObjectAtspi::relationMap const):
        (WebCore::AccessibilityObjectAtspi::buildRelationSet const):
        (WebCore::AccessibilityObjectAtspi::buildInterfaces const):
        (WebCore::AccessibilityObjectAtspi::serialize const):
        (WebCore::AccessibilityObjectAtspi::childAdded):
        (WebCore::AccessibilityObjectAtspi::childRemoved):
        (WebCore::AccessibilityObjectAtspi::stateChanged):
        (WebCore::AccessibilityObjectAtspi::loadEvent):
        (WebCore::AccessibilityObjectAtspi::effectiveRole const):
        (WebCore::AccessibilityObjectAtspi::role const):
        (WebCore::AccessibilityObjectAtspi::roleName const):
        (WebCore::AccessibilityObjectAtspi::localizedRoleName const):
        (WebCore::AccessibilityObjectAtspi::updateBackingStore):
        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject const):
        (WebCore::AccessibilityObjectAtspi::attach): Deleted.
        (WebCore::AccessibilityObjectAtspi::detach): Deleted.
        * accessibility/atspi/AccessibilityObjectAtspi.h:
        * accessibility/atspi/AccessibilityObjectComponentAtspi.cpp:
        (WebCore::AccessibilityObjectAtspi::hitTest const):
        (WebCore::AccessibilityObjectAtspi::elementRect const):
        (WebCore::AccessibilityObjectAtspi::focus const):
        (WebCore::AccessibilityObjectAtspi::opacity const):
        (WebCore::AccessibilityObjectAtspi::scrollToMakeVisible const):
        (WebCore::AccessibilityObjectAtspi::scrollToPoint const):
        * accessibility/atspi/AccessibilityObjectDocumentAtspi.cpp:
        (WebCore::AccessibilityObjectAtspi::documentAttribute const):
        (WebCore::AccessibilityObjectAtspi::documentAttributes const):
        (WebCore::AccessibilityObjectAtspi::documentLocale const):
        * accessibility/atspi/AccessibilityObjectHyperlinkAtspi.cpp:
        (WebCore::AccessibilityObjectAtspi::url const):
        (WebCore::AccessibilityObjectAtspi::offsetInParent const):
        * accessibility/atspi/AccessibilityObjectHypertextAtspi.cpp:
        (WebCore::AccessibilityObjectAtspi::hyperlinkCount const):
        (WebCore::AccessibilityObjectAtspi::hyperlink const):
        * accessibility/atspi/AccessibilityObjectImageAtspi.cpp:
        (WebCore::AccessibilityObjectAtspi::imageDescription const):
        * accessibility/atspi/AccessibilityObjectSelectionAtspi.cpp:
        (WebCore::AccessibilityObjectAtspi::selectionCount const):
        (WebCore::AccessibilityObjectAtspi::selectedChild const):
        (WebCore::AccessibilityObjectAtspi::setChildSelected const):
        (WebCore::AccessibilityObjectAtspi::deselectSelectedChild const):
        (WebCore::AccessibilityObjectAtspi::isChildSelected const):
        (WebCore::AccessibilityObjectAtspi::selectAll const):
        (WebCore::AccessibilityObjectAtspi::clearSelection const):
        (WebCore::AccessibilityObjectAtspi::selectionChanged):
        * accessibility/atspi/AccessibilityObjectTableAtspi.cpp:
        (WebCore::AccessibilityObjectAtspi::rowCount const):
        (WebCore::AccessibilityObjectAtspi::columnCount const):
        (WebCore::AccessibilityObjectAtspi::cell const):
        (WebCore::AccessibilityObjectAtspi::tableCaption const):
        (WebCore::AccessibilityObjectAtspi::cellIndex const):
        (WebCore::AccessibilityObjectAtspi::rowAtIndex const):
        (WebCore::AccessibilityObjectAtspi::columnAtIndex const):
        (WebCore::AccessibilityObjectAtspi::rowHeader const):
        (WebCore::AccessibilityObjectAtspi::columnHeader const):
        (WebCore::AccessibilityObjectAtspi::rowDescription const):
        (WebCore::AccessibilityObjectAtspi::columnDescription const):
        (WebCore::AccessibilityObjectAtspi::rowExtent const):
        (WebCore::AccessibilityObjectAtspi::columnExtent const):
        (WebCore::AccessibilityObjectAtspi::cells const):
        (WebCore::AccessibilityObjectAtspi::rows const):
        (WebCore::AccessibilityObjectAtspi::rowHeaders const):
        (WebCore::AccessibilityObjectAtspi::columnHeaders const):
        * accessibility/atspi/AccessibilityObjectTableCellAtspi.cpp:
        (WebCore::AccessibilityObjectAtspi::cellRowHeaders const):
        (WebCore::AccessibilityObjectAtspi::cellColumnHeaders const):
        (WebCore::AccessibilityObjectAtspi::rowSpan const):
        (WebCore::AccessibilityObjectAtspi::columnSpan const):
        (WebCore::AccessibilityObjectAtspi::cellPosition const):
        * accessibility/atspi/AccessibilityObjectTextAtspi.cpp:
        (WebCore::AccessibilityObjectAtspi::text const):
        (WebCore::AccessibilityObject::getLengthForTextRange const):
        (WebCore::AccessibilityObjectAtspi::textInserted):
        (WebCore::AccessibilityObjectAtspi::textDeleted):
        (WebCore::AccessibilityObjectAtspi::boundaryOffset const):
        (WebCore::AccessibilityObjectAtspi::textAtOffset const):
        (WebCore::AccessibilityObjectAtspi::characterAtOffset const):
        (WebCore::AccessibilityObjectAtspi::boundsForRange const):
        (WebCore::AccessibilityObjectAtspi::textExtents const):
        (WebCore::AccessibilityObjectAtspi::offsetAtPoint const):
        (WebCore::AccessibilityObjectAtspi::boundsForSelection const):
        (WebCore::AccessibilityObjectAtspi::selectedRange const):
        (WebCore::AccessibilityObjectAtspi::selectionBounds const):
        (WebCore::AccessibilityObjectAtspi::setSelectedRange):
        (WebCore::AccessibilityObjectAtspi::selectRange):
        (WebCore::AccessibilityObjectAtspi::selectionChanged):
        (WebCore::AccessibilityObjectAtspi::textAttributes const):
        (WebCore::AccessibilityObjectAtspi::textAttributesWithUTF8Offset const):
        (WebCore::AccessibilityObjectAtspi::textAttributesChanged):
        (WebCore::AccessibilityObjectAtspi::scrollToMakeVisible const):
        (WebCore::AccessibilityObjectAtspi::scrollToPoint const):
        * accessibility/atspi/AccessibilityObjectValueAtspi.cpp:
        (WebCore::AccessibilityObjectAtspi::currentValue const):
        (WebCore::AccessibilityObjectAtspi::setCurrentValue):
        (WebCore::AccessibilityObjectAtspi::minimumValue const):
        (WebCore::AccessibilityObjectAtspi::maximumValue const):
        (WebCore::AccessibilityObjectAtspi::minimumIncrement const):
        (WebCore::AccessibilityObjectAtspi::valueChanged):
        * accessibility/atspi/AccessibilityRootAtspi.cpp:
        (WebCore::AccessibilityRootAtspi::AccessibilityRootAtspi):
        (WebCore::AccessibilityRootAtspi::registerObject):
        (WebCore::AccessibilityRootAtspi::unregisterObject):
        (WebCore::AccessibilityRootAtspi::registerTree):
        (WebCore::AccessibilityRootAtspi::didUnregisterTree):
        (WebCore::AccessibilityRootAtspi::setPath):
        (WebCore::AccessibilityRootAtspi::embedded):
        (WebCore::AccessibilityRootAtspi::applicationReference const):
        (WebCore::AccessibilityRootAtspi::reference const):
        (WebCore::AccessibilityRootAtspi::parentReference const):
        (WebCore::AccessibilityRootAtspi::child const):
        (WebCore::AccessibilityRootAtspi::childAdded):
        (WebCore::AccessibilityRootAtspi::serialize const):
        (WebCore::AccessibilityRootAtspi::frameRect const):
        * accessibility/atspi/AccessibilityRootAtspi.h:
        * accessibility/isolatedtree/atspi/AXIsolatedObjectAtspi.cpp: Removed.
        (WebCore::AXIsolatedObject::initializePlatformProperties): Deleted.
        (WebCore::AXIsolatedObject::attachPlatformWrapper): Deleted.
        (WebCore::AXIsolatedObject::detachPlatformWrapper): Deleted.

2022-01-17  Youenn Fablet  <youenn@apple.com>

        Transmit network load metrics when service worker is using one of its network load to respond to FetchEvents
        https://bugs.webkit.org/show_bug.cgi?id=235179

        Reviewed by Darin Adler.

        Allow FetchResponses to get their network metrics.
        This requires all ThreadableLoaderClients to receive these metrics.
        ServiceWorkerFetch is then able to get the metrics from its FetchResponse to send it to the service worker load client.

        Test: http/wpt/service-workers/fetch-metrics-via-service-worker.https.html

        * Modules/fetch/FetchBodyOwner.h:
        * Modules/fetch/FetchLoader.cpp:
        * Modules/fetch/FetchLoader.h:
        * Modules/fetch/FetchLoaderClient.h:
        * Modules/fetch/FetchResponse.cpp:
        * Modules/fetch/FetchResponse.h:
        * fileapi/FileReaderLoader.cpp:
        * fileapi/FileReaderLoader.h:
        * inspector/agents/InspectorNetworkAgent.cpp:
        * loader/DocumentThreadableLoader.cpp:
        * loader/DocumentThreadableLoader.h:
        * loader/ThreadableLoaderClient.h:
        * loader/ThreadableLoaderClientWrapper.h:
        * loader/WorkerThreadableLoader.cpp:
        * loader/WorkerThreadableLoader.h:
        * page/EventSource.cpp:
        * page/EventSource.h:
        * testing/Internals.cpp:
        * testing/Internals.h:
        * testing/Internals.idl:
        * workers/WorkerFontLoadRequest.cpp:
        * workers/WorkerFontLoadRequest.h:
        * workers/WorkerScriptLoader.cpp:
        * workers/WorkerScriptLoader.h:
        * workers/service/context/ServiceWorkerFetch.cpp:
        * workers/service/context/ServiceWorkerFetch.h:
        * xml/XMLHttpRequest.cpp:
        * xml/XMLHttpRequest.h:

2022-01-16  Youenn Fablet  <youenn@apple.com>

        Enforce focus check for getUserMedia
        https://bugs.webkit.org/show_bug.cgi?id=235026

        Reviewed by Eric Carlson.

        Add infrastructure to register a callback so that a task is executed when the document is visible.
        Use this to delay getUserMedia requests until document is visible.
        The spec currently defines that we should wait for the current document to have focus but this is about to be changed and is not aligned with other browser implementations.

        The patch also moves some getUserMedia checks earlier so as to respect order provided by the specs.
        Add a check to validate getDisplayMedia is called on a visible document as the user gesture is now time based.

        Covered by API test.

        * Modules/mediastream/MediaDevices.cpp:
        * Modules/mediastream/UserMediaRequest.cpp:
        * Modules/mediastream/UserMediaRequest.h:
        * dom/Document.cpp:
        * dom/Document.h:
        * editing/FrameSelection.cpp:

2022-01-16  Youenn Fablet  <youenn@apple.com>

        Queue a task to fire MediaStreamTrack ended event
        https://bugs.webkit.org/show_bug.cgi?id=235227

        Reviewed by Eric Carlson.

        Adding a specific readyState slot to match the spec and queue a task to stop the track instead of firing the event synchronously.
        Covered by updated test.

        * Modules/mediastream/MediaStreamTrack.cpp:
        * Modules/mediastream/MediaStreamTrack.h:

2022-01-16  Lauro Moura  <lmoura@igalia.com>

        Fix C++20 build warnings with GCC
        https://bugs.webkit.org/show_bug.cgi?id=235023

        Reviewed by Alex Christensen.

        Mostly related to deprecating operations between enums of different
        types and not capturing this by default in lambdas.

        * dom/ViewportArguments.h: Replace enum with constexpr ints as they're
        compared to doubles in various places through ViewportArguments.cpp.
        * dom/WheelEvent.h: Replace single-valued enum with constexpr
        variable.
        * platform/animation/Animation.h: Ditto.
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        Ditto.
        (WebCore::CoordinatedGraphicsLayer::shouldDirectlyCompositeImage const):
        * rendering/style/RenderStyleConstants.h: Merge two enums that are
        used only in the context of being combined to form a third enum.

2022-01-16  Brady Eidson  <beidson@apple.com>

        database names leak cross-origin within the same browser session
        https://bugs.webkit.org/show_bug.cgi?id=233548

        Reviewed by Geoff Garen.

        Test: http/tests/security/getdatabases-crossorigin.html

        * Modules/indexeddb/server/IDBServer.cpp:
        (WebCore::IDBServer::IDBServer::getAllDatabaseNamesAndVersions): When iterating the set of all open
          UniqueIDBDatabases, only add them to the results list if their origins match.
           
        * page/ClientOrigin.h:
        (WebCore::ClientOrigin::operator!= const):

2022-01-16  Myles C. Maxfield  <mmaxfield@apple.com>

        [Win] Use character names instead of codepoint values in overrideControlCharacters()
        https://bugs.webkit.org/show_bug.cgi?id=235283

        Reviewed by Cameron McCormack.

        It's simply easier to read.

        No new tests because there is no behavior change.

        * platform/graphics/Font.cpp:
        (WebCore::overrideControlCharacters):

2022-01-16  Cameron McCormack  <heycam@apple.com>

        Ensure in flight layer transactions don't accumulate further canvas drawing
        https://bugs.webkit.org/show_bug.cgi?id=231163
        <rdar://problem/83863292>

        Reviewed by Simon Fraser.

        When UI side compositing is enabled (as it is on iOS), we build a
        layer tree transaction in RemoteLayerTreeDrawingArea::updateRendering to
        send off to the UI process. At a high level, updateRendering does this:

        1. Run any requestAnimationFrame callbacks
        2. Iterate over the composited layers to draw their contents into the
           layer backing stores
        3. Dispatch a task to a different thread to flush the contexts of the
           layer backing stores and then send the transaction to the UI
           process

        Step 3 is done off a separate task as an optimization, to get the
        drawing work queued up by step 2 happening in parallel to any work the
        page may day once updateRendering is finished. This can be a problem
        when:

        - GPU process canvas rendering is enabled (but DOM rendering is
          disabled)
        - we have accelerated ImageBuffers for both layer backing stores and
          canvas backing stores
        - the page does canvas drawing between steps 2 and 3, which affects
          the contents of a canvas backing store IOSurface that was drawn into
          a layer backing store IOSurface while building the transaction

        The way we draw the canvas contents into the layer is by creating a
        CGImage from the canvas backing store ImageBuffer's IOSurface.
        Normally, if we draw into an IOSurface that has been wrapped by a
        CGImage, this will cause the CGImage to obtain a unique copy of the
        IOSurface's pixels, rather than continue holding on to the IOSurface
        itself.

        When the drawing of this CGImage on to the layer backing store
        IOSurface happens, the "draw image" command is queued up to be
        processed later. It's only when the flush happens in step 3 above that
        the drawing occurs. This means that the CGImage wrapping the IOSurface
        exists until that flush.

        But while the CGImage does exist, it's in the Web process, and the
        canvas drawing on to the same IOSurface happens in the GPU process.
        Since QuartzCore doesn't know of its existence, it doesn't cause the
        copy-on-write to occur. The effect of this is that subsequent page
        drawing on to the canvas can make its way into the layer transaction
        unexpectedly.

        This patch induces the copy-on-write in the Web process when needed,
        by tracking whether a canvas has been drawn into a layer backing
        store and the layer transaction flush hasn't happened yet. Just before
        we do any more drawing on the canvas, if we are in this state, we
        perform a no-op drawing command on the IOSurface, then flush, to make
        the CGImage copy the IOSurface data out.

        * html/HTMLCanvasElement.cpp:
        (WebCore::imageDrawingRequiresGuardAgainstUseByPendingLayerTransaction):
        We only need to induce the CGImage copy-on-write behavior if both the
        layer and canvas backing stores are accelerated, the canvas
        ImageBuffer is remote, and the layer ImageBuffer is not remote.
        (WebCore::HTMLCanvasElement::paint):
        (WebCore::HTMLCanvasElement::drawingContext const):
        Use drawingContext as a convenient single place to check whether we
        are performing the first drawing command before the layer tree
        transaction flush has happened.
        * html/HTMLCanvasElement.h:
        * page/Page.h:
        (WebCore::Page::setIsAwaitingLayerTreeTransactionFlush):
        (WebCore::Page::isAwaitingLayerTreeTransactionFlush const):
        * platform/graphics/ImageBufferBackend.h:
        (WebCore::ImageBufferBackend::ensureNativeImagesHaveCopiedBackingStore):
        * platform/graphics/cg/ImageBufferIOSurfaceBackend.cpp:
        (WebCore::ImageBufferIOSurfaceBackend::ensureNativeImagesHaveCopiedBackingStore):
        The flush is needed since the CGImage wrapping the IOSurface will only
        copy the pixel data out once the no-op drawing command is processed.
        * platform/graphics/cg/ImageBufferIOSurfaceBackend.h:

2022-01-15  Sam Weinig  <weinig@apple.com>

        CSS Gradients: interpolation mode should default to OKLab if any non-legacy color syntax colors are used in the stops
        https://bugs.webkit.org/show_bug.cgi?id=235071

        Reviewed by Darin Adler.

        Change the default interpolation mode for CSS gradients that have any color stops specified using non-legacy
        color syntax (e.g. color(...), lab(...), oklch(...), etc.) to OKLab from sRGB.

        This is the current behavior specified (kind of, it could be clearer) by the spec, but I have concerns about
        whether it is a good idea for the behavior to be dependent on what syntax style you use. This has been raised
        with the editors at https://github.com/w3c/csswg-drafts/issues/6914.

        To implement, we now compute the default color interpolation method from the parsed stop list and pass the
        result to CSSGradientValue along with the stops and other data. The CSSGradientValue needs this information
        avoid computing on serialization, since we need to conditionally exclude either "in srgb" or "in oklab"
        depending on which one is computed.

        To continue passing the interpolation color method to the CSSGradientValue constructor so it can be immutable,
        we now need to consume all the color stops before we can create the CSSGradientValue. This also allows us to
        pass the stops to the constructor and make them immutable as well.

        * css/CSSGradientValue.cpp:
        (WebCore::CSSGradientValue::equals const):
        (WebCore::appendColorInterpolationMethod):
        (WebCore::CSSLinearGradientValue::customCSSText const):
        (WebCore::CSSRadialGradientValue::customCSSText const):
        (WebCore::CSSConicGradientValue::customCSSText const):
        * css/CSSGradientValue.h:
        (WebCore::CSSGradientValue::setSecondY):
        (WebCore::CSSGradientValue::CSSGradientValue):
        (WebCore::CSSGradientValue::defaultColorInterpolationMethod const):
        (WebCore::CSSGradientValue::addStop): Deleted.
        (WebCore::CSSGradientValue::doneAddingStops): Deleted.
        (WebCore::CSSGradientValue::hasAtLeastTwoStops const): Deleted.
        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::consumeDeprecatedGradient):
        (WebCore::CSSPropertyParserHelpers::consumeGradientColorStops):
        (WebCore::CSSPropertyParserHelpers::consumePrefixedRadialGradient):
        (WebCore::CSSPropertyParserHelpers::computeGradientColorInterpolationMethod):
        (WebCore::CSSPropertyParserHelpers::consumeRadialGradient):
        (WebCore::CSSPropertyParserHelpers::consumePrefixedLinearGradient):
        (WebCore::CSSPropertyParserHelpers::consumeLinearGradient):
        (WebCore::CSSPropertyParserHelpers::consumeConicGradient):
        * html/HTMLInputElement.cpp:
        (WebCore::autoFillStrongPasswordMaskImage):

2022-01-15  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Enable content with complex font codepath for IFC
        https://bugs.webkit.org/show_bug.cgi?id=235266

        Reviewed by Antti Koivisto.

        * layout/integration/LayoutIntegrationCoverage.cpp:
        (WebCore::LayoutIntegration::canUseForFontAndText):

2022-01-15  Chris Dumez  <cdumez@apple.com>

        Introduce dynamicDowncast<>() for convenience
        https://bugs.webkit.org/show_bug.cgi?id=235259

        Reviewed by Darin Adler.

        Start adopting dynamicDowncast<>().

        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::setTimeline):
        (WebCore::WebAnimation::willChangeRenderer):
        (WebCore::WebAnimation::timingDidChange):
        (WebCore::WebAnimation::invalidateEffect):
        (WebCore::WebAnimation::finishNotificationSteps):
        (WebCore::WebAnimation::resolve):
        (WebCore::WebAnimation::persist):
        (WebCore::WebAnimation::commitStyles):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent):
        * bindings/js/JSLazyEventListener.cpp:
        (WebCore::isCloneInShadowTreeOfSVGUseElement):
        (WebCore::JSLazyEventListener::initializeJSFunction const):
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::fontRangesForFamily):
        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::insertRule):
        * dom/Attr.cpp:
        (WebCore::Attr::style):
        * dom/BroadcastChannel.cpp:
        (WebCore::BroadcastChannel::MainThreadBridge::ensureOnMainThread):
        (WebCore::BroadcastChannel::isEligibleForMessaging const):
        * dom/CharacterData.cpp:
        (WebCore::CharacterData::parserAppendData):
        (WebCore::CharacterData::setDataAndUpdate):
        * dom/CharacterData.h:
        (WebCore::Node::length const):
        * dom/ComposedTreeAncestorIterator.h:
        (WebCore::ComposedTreeAncestorIterator::traverseParent):
        (WebCore::ComposedTreeAncestorAdapter::begin):
        * dom/ComposedTreeIterator.h:
        (WebCore::firstChildInComposedTreeIgnoringUserAgentShadow):
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::removeNodeWithScriptAssertion):
        (WebCore::ContainerNode::removeSelfOrChildNodesForInsertion):
        (WebCore::destroyRenderTreeIfNeeded):
        (WebCore::containsIncludingHostElements):
        (WebCore::checkAcceptChild):
        * dom/ContainerNode.h:
        (WebCore::Node::countChildNodes const):
        (WebCore::Node::traverseToChildAt const):
        (WebCore::Node::firstChild const):
        (WebCore::Node::lastChild const):
        * dom/Document.cpp:
        (WebCore::widgetForElement):
        (WebCore::Document::buildAccessKeyCache):
        (WebCore::Document::adjustFocusedNodeOnNodeRemoval):
        * dom/Element.cpp:
        (WebCore::Element::insertedIntoAncestor):
        (WebCore::Element::removedFromAncestor):
        * dom/ElementInlines.h:
        (WebCore::Node::parentElement const):
        * dom/EventDispatcher.cpp:
        (WebCore::EventDispatcher::dispatchEvent):
        * dom/MouseEvent.cpp:
        (WebCore::MouseEvent::toElement const):
        (WebCore::MouseEvent::fromElement const):
        * dom/Node.cpp:
        (WebCore::Node::renderBox const):
        (WebCore::Node::renderBoxModelObject const):
        (WebCore::Node::containingShadowRoot const):
        (WebCore::Node::compareDocumentPosition):
        * dom/Position.cpp:
        (WebCore::Position::containerText const):
        * dom/TextNodeTraversal.cpp:
        (WebCore::TextNodeTraversal::contentsAsString):
        * dom/TreeScope.cpp:
        (WebCore::TreeScope::elementsFromPoint):
        * dom/TypedElementDescendantIterator.h:
        (WebCore::ElementDescendantRange<ElementType>::from const):
        (WebCore::InclusiveElementDescendantRange<ElementType>::from const):
        * dom/VisitedLinkState.cpp:
        (WebCore::linkHashForElement):
        * dom/messageports/MessagePortChannelProvider.cpp:
        (WebCore::MessagePortChannelProvider::fromContext):
        * editing/Editing.cpp:
        (WebCore::enclosingBlock):
        * html/HTMLOptGroupElement.cpp:
        (WebCore::HTMLOptGroupElement::ownerSelectElement const):
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::renderEmbeddedObject const):
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::create):
        * layout/Verification.cpp:
        (WebCore::Layout::outputMismatchingComplexLineInformationIfNeeded):
        * page/AutoscrollController.cpp:
        (WebCore::AutoscrollController::updateAutoscrollRenderer):
        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::fired):
        * page/DragController.cpp:
        (WebCore::asFileInput):
        (WebCore::DragController::operationForLoad):
        * platform/DragImage.cpp:
        (WebCore::ScopedNodeDragEnabler::ScopedNodeDragEnabler):
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::setCDMInstance):
        * rendering/LegacyInlineFlowBox.cpp:
        (WebCore::LegacyInlineFlowBox::computeLogicalBoxHeights):
        (WebCore::placeChildInlineBoxesInBlockDirection):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::layoutBlockChild):
        (WebCore::RenderBlockFlow::marginValuesForChild const):
        (WebCore::RenderBlockFlow::adjustBlockChildForPagination):
        (WebCore::RenderBlockFlow::positionNewFloats):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::findAutoscrollable):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::imageOrientation const):
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::uploadButton const):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::updateInnerContentRect):
        (WebCore::RenderImage::paintIntoRect):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::mayAffectLayout const):
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::renderBox const):
        * rendering/RenderLineBoxList.cpp:
        (WebCore::RenderLineBoxList::dirtyLinesFromChangedChild):
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::updateValueNow const):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::offsetParent const):
        * rendering/RenderTableCol.cpp:
        (WebCore::RenderTableCol::table const):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::writeDebugInfo):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::paintBoxDecorations):
        * rendering/SelectionRangeData.cpp:
        (WebCore::containingBlockBelowView):
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::normalizeTreeAfterStyleChange):
        * rendering/updating/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::Parent::Parent):
        * style/ChildChangeInvalidation.h:
        (WebCore::Style::ChildChangeInvalidation::ChildChangeInvalidation):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::findViewAnchor const):
        (WebCore::SVGSVGElement::findRootAnchor const):
        * testing/Internals.cpp:
        (WebCore::bitmapImageFromImageElement):
        (WebCore::pdfDocumentImageFromImageElement):

2022-01-15  Darin Adler  <darin@apple.com>

        First step to fix hacked isReplaced: Rename isReplaced functions to isReplacedOrInlineBlock
        https://bugs.webkit.org/show_bug.cgi?id=235258

        Reviewed by Alan Bujtas.

        The isReplaced function returns true for things that are not CSS replaced
        elements. That's confusing and not good. We want to straighten this out.
        In this first step, we rename the isReplaced and setReplaced functions
        to isReplacedOrInlineBlock and setReplacedOrInlineBlock. There are still
        functions with out arguments named "isReplaced", which we can deal with
        later. Other later clean-up and clarification could one day change what
        bits we store in RenderStyle and possibly even remove this function entirely.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::nextContinuation):
        * accessibility/atk/WebKitAccessible.cpp:
        (interfaceMaskFromObject):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::isNonReplacedInline):
        * dom/Node.cpp:
        (WebCore::Node::renderRect):
        * dom/Position.cpp:
        (WebCore::endsOfNodeAreVisuallyDistinctPositions):
        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::leftVisuallyDistinctCandidate const):
        (WebCore::VisiblePosition::rightVisuallyDistinctCandidate const):
        * layout/integration/LayoutIntegrationCoverage.cpp:
        (WebCore::LayoutIntegration::canUseForChild):
        * layout/integration/LayoutIntegrationLineLayout.cpp:
        (WebCore::LayoutIntegration::LineLayout::paint):
        * page/TextIndicator.cpp:
        (WebCore::hasNonInlineOrReplacedElements):
        * page/ios/FrameIOS.mm:
        (WebCore::Frame::renderRectForPoint const):
        * rendering/CaretRectComputation.cpp:
        (WebCore::computeCaretRectForBox):
        * rendering/LegacyInlineBox.cpp:
        (WebCore::LegacyInlineBox::adjustPosition):
        (WebCore::LegacyInlineBox::canAccommodateEllipsis const):
        * rendering/LegacyInlineFlowBox.cpp:
        (WebCore::LegacyInlineFlowBox::addToLine):
        (WebCore::LegacyInlineFlowBox::computeOverAnnotationAdjustment const):
        (WebCore::LegacyInlineFlowBox::computeUnderAnnotationAdjustment const):
        * rendering/LegacyInlineIterator.h:
        (WebCore::isIteratorTarget):
        * rendering/LegacyLineLayout.cpp:
        (WebCore::LegacyLineLayout::computeInlineDirectionPositionsForLine):
        (WebCore::LegacyLineLayout::layoutLineBoxes):
        * rendering/LegacyRootInlineBox.cpp:
        (WebCore::LegacyRootInlineBox::ascentAndDescentForBox const):
        (WebCore::LegacyRootInlineBox::verticalPositionForBox):
        (WebCore::LegacyRootInlineBox::includeLeadingForBox const):
        (WebCore::LegacyRootInlineBox::includeFontForBox const):
        (WebCore::LegacyRootInlineBox::includeGlyphsForBox const):
        (WebCore::LegacyRootInlineBox::includeInitialLetterForBox const):
        (WebCore::LegacyRootInlineBox::includeMarginForBox const):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::removePositionedObjectsIfNeeded):
        (WebCore::RenderBlock::styleWillChange):
        (WebCore::RenderBlock::simplifiedNormalFlowLayout):
        (WebCore::RenderBlock::paintChild):
        (WebCore::RenderBlock::positionForPoint):
        (WebCore::RenderBlock::lineHeight const):
        (WebCore::RenderBlock::baselinePosition const):
        (WebCore::RenderBlock::firstLineBlock const):
        (WebCore::findFirstLetterBlock):
        (WebCore::RenderBlock::getFirstLetter):
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::rebuildFloatingObjectSetFromIntrudingFloats):
        (WebCore::RenderBlockFlow::positionForPointWithInlineChildren):
        (WebCore::InlineMinMaxIterator::next):
        (WebCore::RenderBlockFlow::computeInlinePreferredLogicalWidths const):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::offsetFromContainer const):
        (WebCore::RenderBox::positionLineBox):
        (WebCore::RenderBox::computeLogicalHeight const):
        (WebCore::RenderBox::shouldTreatChildAsReplacedInTableCells const):
        (WebCore::RenderBox::computePositionedLogicalWidth const):
        (WebCore::RenderBox::computePositionedLogicalHeight const):
        (WebCore::RenderBox::avoidsFloats const):
        (WebCore::RenderBox::isUnsplittableForPagination const):
        (WebCore::RenderBox::lineHeight const):
        (WebCore::RenderBox::baselinePosition const):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::shouldComputeSizeAsReplaced const):
        * rendering/RenderBoxModelObject.h:
        (WebCore::RenderBoxModelObject::canHaveBoxInfoInFragment const):
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::RenderDeprecatedFlexibleBox::applyLineClamp):
        (WebCore::RenderDeprecatedFlexibleBox::clearLineClamp):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::getLeadingCorner const):
        (WebCore::RenderElement::getTrailingCorner const):
        (WebCore::RenderElement::absoluteAnchorRect const):
        * rendering/RenderFullScreen.cpp:
        (WebCore::RenderFullScreen::RenderFullScreen):
        * rendering/RenderLineBoxList.cpp:
        (WebCore::RenderLineBoxList::dirtyLinesFromChangedChild):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::RenderListMarker):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::containingBlockForPositionType):
        (WebCore::RenderObject::caretMaxOffset const):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::hasIntrinsicAspectRatio const):
        (WebCore::RenderObject::isReplacedOrInlineBlock const):
        (WebCore::RenderObject::setReplacedOrInlineBlock):
        (WebCore::RenderObject::RenderObjectBitfields::RenderObjectBitfields):
        (WebCore::RenderObject::isAtomicInlineLevelBox const):
        (WebCore::RenderObject::isReplaced const): Deleted.
        (WebCore::RenderObject::setReplaced): Deleted.
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::RenderReplaced):
        * rendering/RenderReplica.cpp:
        (WebCore::RenderReplica::RenderReplica):
        * rendering/RenderRubyRun.cpp:
        (WebCore::RenderRubyRun::RenderRubyRun):
        * rendering/line/BreakingContext.h:
        (WebCore::BreakingContext::initializeForCurrentObject):
        (WebCore::BreakingContext::canBreakAtThisPosition):
        (WebCore::BreakingContext::commitAndUpdateLineBreakIfNeeded):
        * rendering/line/LineBreaker.cpp:
        (WebCore::LineBreaker::nextLineBreak):
        * rendering/updating/RenderTreeBuilderInline.cpp:
        (WebCore::nextContinuation):
        Renamed in all these places. Also added one FIXME for something
        Alan pointed out we'd like to do in the future.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::removeOnlyThisLayer): Removed unhelpful use
        of RenderLayer::reflection function just to find out whether the
        RenderLayer::reflectionLayer function will return null or not.
        * rendering/RenderLayer.h: Removed unneeded RenderLayer::reflection.
        * rendering/RenderLayerCompositor.cpp: Removed an unneeded include
        of RenderReplica.h.

2022-01-15  Alan Bujtas  <zalan@apple.com>

        web-platform-tests/html/rendering/dimension-attributes.html is failing when table width is set to 0px
        https://bugs.webkit.org/show_bug.cgi?id=235267

        Reviewed by Antti Koivisto.

        This patch is based on the following Blink commit:
          https://chromium-review.googlesource.com/c/chromium/src/+/2458587

        This only applies to width (not height) - see:
          https://wpt.fyi/results/html/rendering/dimension-attributes.html?label=master&label=experimental&aligned&q=dimension-attributes

        See also: https://drafts.csswg.org/css-tables-3/#mapping

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::addHTMLLengthToStyle):
        * html/HTMLElement.h:
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::collectPresentationalHintsForAttribute):

2022-01-15  Simon Fraser  <simon.fraser@apple.com>

        Share some code that looks at visibility in order to short-circuit repaint rect computation
        https://bugs.webkit.org/show_bug.cgi?id=235242

        Reviewed by Dean Jackson.

        There were five instances of this common code pattern that short-circuited clippedOverflowRect()
        when we know that the renderer is hidden with visibility:hidden, so factor it into a common
        function on RenderElement.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::clippedOverflowRect const):
        * rendering/RenderBox.h:
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::isInsideEntirelyHiddenLayer const):
        * rendering/RenderElement.h:
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::clippedOverflowRect const):
        * rendering/svg/LegacyRenderSVGRoot.cpp:
        (WebCore::LegacyRenderSVGRoot::clippedOverflowRect const):
        * rendering/svg/RenderSVGModelObject.cpp:
        (WebCore::RenderSVGModelObject::clippedOverflowRect const):
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::clippedOverflowRect const):

2022-01-15  Simon Fraser  <simon.fraser@apple.com>

        Make a function that returns the ordered list of top layer RenderLayers
        https://bugs.webkit.org/show_bug.cgi?id=235251

        Reviewed by Alan Bujtas.

        Factor the code in RenderLayer::rebuildZOrderLists() that generates the list of
        top-layer RenderLayers into its own function.

        Add Document::hasTopLayerElement() to avoid calling it when there are no top layer
        elements.

        * dom/Document.h:
        (WebCore::Document::hasTopLayerElement const):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::rebuildZOrderLists):
        * rendering/RenderLayer.h:

2022-01-15  Tyler Wilcock  <tyler_w@apple.com>

        AX: Fix disabled-controls-not-focusable.html in isolated tree mode by updating AXPropertyName::CanSetFocusAttribute when the disabled attribute changes
        https://bugs.webkit.org/show_bug.cgi?id=235246

        Reviewed by Chris Fleizach.

        Fixes disabled-controls-not-focusable.html in isolated tree mode.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::handleAttributeChange):
        Post a AXDisabledStateChanged notification when the disabled attribute changes.
        (WebCore::AXObjectCache::updateIsolatedTree):
        Handle the AXDisabledStateChanged notification to update AXPropertyName::CanSetFocusAttribute.
        * accessibility/isolatedtree/AXIsolatedTree.cpp:
        (WebCore::AXIsolatedTree::updateNodeProperty):
        Re-compute AXPropertyName::CanSetFocusAttribute when asked to do so.

2022-01-15  Rob Buis  <rbuis@igalia.com>

        [css-contain] Fix contain-size-replaced-002.html
        https://bugs.webkit.org/show_bug.cgi?id=235175

        Reviewed by Manuel Rego Casasnovas.

        If the SVG root has zero content width and/or height, there is no point
        in painting the children contents.

        Test: imported/w3c/web-platform-tests/css/css-contain/contain-size-replaced-002.html

        * rendering/svg/LegacyRenderSVGRoot.cpp:
        (WebCore::LegacyRenderSVGRoot::paintReplaced):

2022-01-15  Tyler Wilcock  <tyler_w@apple.com>

        AX: Remove AXAriaAttributeChanged notification because it's not used by anything
        https://bugs.webkit.org/show_bug.cgi?id=235253

        Reviewed by Chris Fleizach.

        Nothing uses AXAriaAttributeChanged, but we still spend time processing
        it through the notification pipeline (postNotification -> m_notificationsToPost -> updateIsolatedTree(notifications) + postPlatformNotification(notifications)).

        This patch deletes it.

        * accessibility/AXLogger.cpp:
        (WebCore::operator<<):
        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::handleAttributeChange):
        * accessibility/AXObjectCache.h:
        * accessibility/atspi/AXObjectCacheAtspi.cpp:
        (WebCore::AXObjectCache::postPlatformNotification):

2022-01-15  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] imported/w3c/web-platform-tests/css/css-text/word-break/word-break-normal-ar-000.html fails with incorrect run position
        https://bugs.webkit.org/show_bug.cgi?id=235011

        Reviewed by Antti Koivisto.

        IFC (inherited from simple line layout) uses this technique of measuring the content with the trailing whitespace
        and then simply subtract the whitespace width. It enables us to keep pushing content to the line without re-measuring it each time.
        (the "non-whitespace + whitespace" pattern is extremely common for IFC content).
        However in some cases when the trailing whitespace is trimmed, subtracting the trimmed width from the
        content width instead of measuring it produces a visually incorrect result.
        This patch fixes the most obvious cases when the incorrect width turns into an offset for the RTL content.

        * layout/formattingContexts/inline/InlineLine.cpp:
        (WebCore::Layout::Line::TrimmableTrailingContent::remove):
        (WebCore::Layout::Line::Run::removeTrailingLetterSpacing):
        (WebCore::Layout::Line::Run::removeTrailingWhitespace):
        * layout/formattingContexts/inline/InlineLine.h:
        * layout/formattingContexts/inline/text/TextUtil.cpp:
        (WebCore::Layout::TextUtil::width):
        * layout/formattingContexts/inline/text/TextUtil.h:

2022-01-14  Antoine Quint  <graouts@webkit.org>

        Setting `content: normal` on a ::marker should make computed style return resolved values
        https://bugs.webkit.org/show_bug.cgi?id=235222

        Reviewed by Aditya Keerthi.

        Until now, StyleBuilder would treat "none" and "normal" values the same way for the "content"
        CSS property. However, "normal", the initial value, is not the same as "none" which explicitly
        states that we do not have any content. The WPT test css/css-pseudo/marker-computed-size.html
        checks on this by setting `content: normal` on a ::marker and expecting the computed style
        for "width" and "height" to be pixel values and not "auto".

        We already have a bit in RenderStyle that would be turned on when we would parse either "none"
        or "normal". We're now only setting that bit, with a better name  when the value is explicitly "none".

        So we now remove hasExplicitlyClearedContent() and instead expose hasEffectiveContentNone()
        on RenderStyle.

        We also remove a stale comment in applyInheritContent() since the spec has not changed to make
        "content" inherited.

        Finally, Styleable::renderer() now returns the markerRenderer() unless
        RenderStyle::hasEffectiveContentNone() is true.

        For reference, the relevant spec is https://drafts.csswg.org/css-content-3/#content-property.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::contentToCSSValue):
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::isControlStyled const):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::RenderStyle):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::hasEffectiveContentNone const):
        (WebCore::RenderStyle::setHasContentNone):
        (WebCore::RenderStyle::NonInheritedFlags::operator== const):
        (WebCore::RenderStyle::setHasExplicitlyClearedContent): Deleted.
        (WebCore::RenderStyle::hasExplicitlyClearedContent const): Deleted.
        * style/StyleBuilderCustom.h:
        (WebCore::Style::BuilderCustom::applyInitialContent):
        (WebCore::Style::BuilderCustom::applyInheritContent):
        (WebCore::Style::BuilderCustom::applyValueContent):
        * style/Styleable.cpp:
        (WebCore::Styleable::renderer const):

2022-01-14  Peng Liu  <peng.liu6@apple.com>

        Unable to playback portrait videos on HTML canvas elements
        https://bugs.webkit.org/show_bug.cgi?id=235238

        Reviewed by Jer Noble.

        We need to make sure the destination pixel buffer is IOSurface-backed.
        Otherwise, VTImageRotationSession cannot rotate a pixel buffer with
        a compressed pixel format.

        Manually tested.

        Layout tests for this exist, but unless they run on an iPhone 12 or
        later HW, they won't fail. For example:
        - media/video-orientation-canvas.html

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::updateLastPixelBuffer):
        * platform/graphics/cv/ImageRotationSessionVT.mm:
        (WebCore::ImageRotationSessionVT::rotate):

2022-01-14  Frederic Wang  <fwang@igalia.com>

        null ptr deref in WebCore::ReplaceSelectionCommand::moveNodeOutOfAncestor()
        https://bugs.webkit.org/show_bug.cgi?id=233463

        Reviewed by Wenson Hsieh.

        One line of ReplaceSelectionCommand::moveNodeOutOfAncestor() assumes that the pointer
        ancestor.parentNode() is non-null. However, the call to removeNode(node) just before can
        lead to arbitrary tree mutations that leaves the ancestor orphan, causing a nullptr deref.
        This patch mitigates that issue by exiting early if that situation happens.

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::moveNodeOutOfAncestor): Exit early if the ancestor
        is no longer connected.

2022-01-14  Alan Bujtas  <zalan@apple.com>

        [Cleanup] Remove redundant (and incorrect) RenderStyle::isDisplayReplacedType
        https://bugs.webkit.org/show_bug.cgi?id=235250

        Reviewed by Simon Fraser.

        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::isDisplayInlineType): display types do not make a box replaced.
        (WebCore::RenderStyle::isDisplayReplacedType): Deleted.

2022-01-14  Chris Dumez  <cdumez@apple.com>

        Clarify / Optimize <select> logic given that deeply nested <option> or <optgroup> are not supported
        https://bugs.webkit.org/show_bug.cgi?id=235247

        Reviewed by Geoffrey Garen.

        Clarify / Optimize <select> logic given that deeply nested <option> or <optgroup> are not supported, as per the
        specification.

        An <option> is only associated with a <select> element if it is either a child of the <select> or a child of an
        <optgroup> that is itself a child of the <select>:
        - https://html.spec.whatwg.org/multipage/form-elements.html#concept-select-option-list

        As a result, an <optgroup> is only associated with a <select> element if it is a child of that <select>.

        No new tests, no Web-facing behavior change.

        * html/HTMLOptGroupElement.cpp:
        (WebCore::HTMLOptGroupElement::recalcSelectOptions):
        (WebCore::HTMLOptGroupElement::ownerSelectElement const):
        (WebCore::HTMLOptGroupElement::accessKeyAction):
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::setText):
        (WebCore::HTMLOptionElement::accessKeyAction):
        (WebCore::HTMLOptionElement::index const):
        (WebCore::HTMLOptionElement::selected const):
        (WebCore::HTMLOptionElement::setSelected):
        (WebCore::HTMLOptionElement::childrenChanged):
        (WebCore::HTMLOptionElement::ownerSelectElement const):
        (WebCore::HTMLOptionElement::textIndentedToRespectGroupLabel const):
        (WebCore::HTMLOptionElement::insertedIntoAncestor):
        (WebCore::HTMLOptionElement::collectOptionInnerText const):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::recalcListItems const):
        (WebCore::HTMLSelectElement::listBoxDefaultEventHandler):

2022-01-14  Jer Noble  <jer.noble@apple.com>

        [Cocoa] rVFC() isn't called for initial video load
        https://bugs.webkit.org/show_bug.cgi?id=235006

        Reviewed by Eric Carlson.

        Tests: media/request-video-frame-loadstart.html
               media/request-video-frame-seek.html

        Add a new utility class, QueuedVideoOutput, which will pull pixel buffers out of an AVPlayerItemVideoOutput
        pre-emptively. Once those pixel buffers are enqueued locally, their associated timing information can be used to
        fire a callback for that buffer's display time.

        Previously, paints were blocked from pulling new pixel buffers from the video output. With the QueuedVideoOutput
        class, this is no longer necessary. The QueuedVideoOutput will notify its client when the image for currentTime
        changes, and other clients can freely ask for the currentTime's image.

        To curb runaway memory growth, frames are purged as soon as a new image for the current time is available, and when
        the video output signals that its own queues were purged.

        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::cancelVideoFrameCallback):
        (WebCore::HTMLVideoElement::serviceRequestVideoFrameCallbacks):
        * html/HTMLVideoElement.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::~MediaPlayerPrivateAVFoundationObjC):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::hasAvailableVideoFrame const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::updateVideoFullscreenInlineImage):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setVideoFullscreenLayer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::startVideoFrameMetadataGathering):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::checkNewVideoFrameMetadata):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::updateVideoTracks):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createVideoOutput):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::destroyVideoOutput):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::updateLastPixelBuffer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::videoOutputHasAvailableFrame):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::updateLastImage):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::paintWithVideoOutput):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::pixelBufferForCurrentTime):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::nativeImageForCurrentTime):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::colorSpace):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::outputMediaDataWillChange):
        (WebCore::globalPullDelegateQueue): Deleted.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::waitForVideoOutputMediaDataWillChange): Deleted.
        (-[WebCoreAVFPullDelegate initWithPlayer:]): Deleted.
        (-[WebCoreAVFPullDelegate outputMediaDataWillChange:]): Deleted.
        (-[WebCoreAVFPullDelegate outputSequenceWasFlushed:]): Deleted.
        * platform/graphics/avfoundation/objc/QueuedVideoOutput.h: Added.
        * platform/graphics/avfoundation/objc/QueuedVideoOutput.mm: Added.
        (-[WebQueuedVideoOutputDelegate initWithParent:]):
        (-[WebQueuedVideoOutputDelegate outputMediaDataWillChange:]):
        (-[WebQueuedVideoOutputDelegate outputSequenceWasFlushed:]):
        (-[WebQueuedVideoOutputDelegate observeValueForKeyPath:ofObject:change:context:]):
        (WebCore::globalOutputDelegateQueue):
        (WebCore::QueuedVideoOutput::create):
        (WebCore::QueuedVideoOutput::QueuedVideoOutput):
        (WebCore::QueuedVideoOutput::~QueuedVideoOutput):
        (WebCore::QueuedVideoOutput::invalidate):
        (WebCore::decltype):
        (WebCore::QueuedVideoOutput::hasImageForTime const):
        (WebCore::QueuedVideoOutput::takeVideoFrameEntryForTime):
        (WebCore::QueuedVideoOutput::addCurrentImageChangedObserver):
        (WebCore::QueuedVideoOutput::configureNextImageObserver):
        (WebCore::QueuedVideoOutput::imageForCurrentTimeChanged):
        (WebCore::QueuedVideoOutput::addVideoFrameEntries):
        (WebCore::QueuedVideoOutput::purgeVideoFrameEntries):
        (WebCore::QueuedVideoOutput::purgeImagesBeforeTime):
        (WebCore::QueuedVideoOutput::rateChanged):

2022-01-14  Tyler Wilcock  <tyler_w@apple.com>

        AX: AXIsolatedObject::initializeAttributeData should compute AXAncestorFlags if they are unexpectedly uninitialized
        https://bugs.webkit.org/show_bug.cgi?id=235189

        Reviewed by Andres Gonzalez.

        Currently in AXIsolatedObject::initializeAttributeData, we don't store
        any ancestor flags if they are unexpectedly uninitialized (i.e. we're
        asked to initialize an isolated object for a live AX object that has
        not been added to the live AX tree).

        Rather than not storing flags and thus creating an isolated object
        with incorrect properties, we should do a single traversal to initialize them.
        We should have to do this very rarely since we generally expect to be
        given live AX objects with initialized flags here (and debug ASSERT that this is the case).

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::computeAncestorFlagsWithTraversal const):
        Added.
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityObjectInterface.h:
        (WebCore::Accessibility::enumerateAncestors):
        Added.
        * accessibility/isolatedtree/AXIsolatedObject.cpp:
        (WebCore::AXIsolatedObject::initializeAttributeData):
        Compute ancestor flags with a single traversal if they are unexpected uninitialized.

2022-01-14  Kimmo Kinnunen  <kkinnunen@apple.com>

        MediaPlayerPrivateMediaStreamAVFObjC::m_videoTransform is redundant
        https://bugs.webkit.org/show_bug.cgi?id=235181

        Reviewed by Youenn Fablet.

        The video sample transform was stored as a member variable during video sample
        enqueuing. However, this is just a normal video sample property, and
        does not need to be handled specially. The member variable anyway ended up being assigned
        during use. Calculating the transform is not a heavy operation, since it
        is accessed once per video paint.

        This simplifies the future code where the underlying video frame would be
        used as-is by WebGL, as there we need to have the correct transform.

        No new tests, refactor.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::videoSampleAvailable):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::processNewVideoSample):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateRenderingMode):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::paintCurrentFrameInContext):

2022-01-14  Kimmo Kinnunen  <kkinnunen@apple.com>

        gl.texImage2D upload of getUserMedia streams via <video> element fails
        https://bugs.webkit.org/show_bug.cgi?id=230617
        <rdar://problem/83407577>

        Reviewed by Youenn Fablet.

        Fix MSE camera to WebGL texture uploads.
        Partially revert r280963 for Cocoa MediaPlayer implementatations
        that do not have nativeImageForCurrentTime / pixelBufferForCurrentTime.
        Turns out MSE does not have these implemented, so currently fall back
        to the painting path.

        Test: fast/mediastream/getUserMedia-to-canvas.html

        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::videoFrameToImage):

2022-01-14  Chris Dumez  <cdumez@apple.com>

        Regression(r281520) 3 subtests started failing on dom/traversal/TreeWalker-acceptNode-filter-cross-realm.html WPT test
        https://bugs.webkit.org/show_bug.cgi?id=235153
        <rdar://problem/87485756>

        Unreviewed, revert r281520 since it regressed dom/traversal/TreeWalker-acceptNode-filter-cross-realm.html WPT test.

        * Modules/geolocation/Geolocation.cpp:
        (WebCore::Geolocation::getCurrentPosition):
        (WebCore::Geolocation::watchPosition):
        * Modules/web-locks/WebLockManager.cpp:
        (WebCore::WebLockManager::didCompleteLockRequest):
        Covered by "Removed Frame as lock is granted" test in imported/w3c/web-platform-tests/web-locks/frames.tentative.https.html.
        Before this change, WebLockGrantedCallback was using incumbent global object (main frame in test) to create a promise instead
        of lexical (removed frame in test), causing the test to be false-passing.

        * bindings/js/JSDOMConvertCallbacks.h:
        (WebCore::Converter<IDLCallbackFunction<T>>::convert):
        (WebCore::Converter<IDLCallbackInterface<T>>::convert):
        * dom/TaskSource.h:

2022-01-14  Tyler Wilcock  <tyler_w@apple.com>

        AX: Move methods that are unnecessarily in AccessibilityRenderObject to AccessibilityNodeObject (part 1 of n)
        https://bugs.webkit.org/show_bug.cgi?id=235204

        Reviewed by Chris Fleizach.

        Many methods in AccessibilityRenderObject don't actually do anything renderer-specific,
        and thus should be in the base class AccessibilityNodeObject. This will help improve our support
        for AX objects that normally have renderers, but don't because of CSS or ARIA markup (e.g. display: contents).

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::isFileUploadButton const):
        (WebCore::AccessibilityNodeObject::correspondingControlForLabelElement const):
        (WebCore::AccessibilityNodeObject::correspondingLabelForControlElement const):
        (WebCore::AccessibilityNodeObject::labelElementContainer const):
        (WebCore::AccessibilityNodeObject::exposesTitleUIElement const):
        (WebCore::AccessibilityNodeObject::hasTextAlternative const):
        * accessibility/AccessibilityNodeObject.h:
        Add all of the above methods from AccessibilityRenderObject.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::determineDropEffects const):
        (WebCore::AccessibilityRenderObject::isFileUploadButton const):
        (WebCore::AccessibilityRenderObject::labelElementContainer const):
        (WebCore::AccessibilityRenderObject::hasTextAlternative const):
        (WebCore::AccessibilityRenderObject::exposesTitleUIElement const):
        (WebCore::AccessibilityRenderObject::correspondingControlForLabelElement const):
        (WebCore::AccessibilityRenderObject::correspondingLabelForControlElement const):
        * accessibility/AccessibilityRenderObject.h:
        Move all of the above methods to AccessibilityNodeObject.

2022-01-14  Antoine Quint  <graouts@webkit.org>

        Reduce use of KeyframeEffect::targetElementOrPseudoElement()
        https://bugs.webkit.org/show_bug.cgi?id=235228

        Reviewed by Antti Koivisto.

        The KeyframeEffect::targetElementOrPseudoElement() method is one of the few remaining places
        in animation-related code where we deal with PseudoElement objects. As it turns out, a lot of
        its remaning call sites are not actually making any use of PseudoElement and should just use
        the simple target() method.

        * animation/KeyframeEffect.cpp:
        (WebCore::KeyframeEffect::invalidate):
        * dom/Document.cpp:
        (WebCore::Document::matchingAnimations):
        * dom/Element.cpp:
        (WebCore::Element::getAnimations):

2022-01-14  Antoine Quint  <graouts@webkit.org>

        Stop forcing the creation of PseudoElement in KeyframeEffect
        https://bugs.webkit.org/show_bug.cgi?id=235225

        Reviewed by Antti Koivisto.

        At the time we started supporting targeting pseudo-elements using the Web Animations API,
        we resorted to some hack-ish code to enforce the creation of a PseudoElement should the
        target of the animation be a ::before or ::after pseudo-element.

        This isn't necessary, and was due to some incorrect code in
        RenderTreeUpdater::GeneratedContent::updatePseudoElement() which this patch corrects.
        Indeed, if there are animations targeting the pseudo-element in question, we should not
        be removing the pseudo-element and exiting this method.

        * animation/KeyframeEffect.cpp:
        (WebCore::KeyframeEffect::didChangeTargetStyleable):
        (WebCore::elementOrPseudoElementForStyleable): Deleted.
        * rendering/updating/RenderTreeUpdaterGeneratedContent.cpp:
        (WebCore::RenderTreeUpdater::GeneratedContent::updatePseudoElement):

2022-01-14  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Incorrect root inline box position when non-empty atomic inline level child box has height: 0px
        https://bugs.webkit.org/show_bug.cgi?id=235218
        <rdar://84617690>

        Reviewed by Antti Koivisto.

        Even if the atomic inline level box itself does not stetch the line box, it may still affect the root inline box position
        through baseline "syncing" (This is mostly the case with 0 tall boxes as (non-empty) atomic inline boxes in general stretch the line box).

        Test: fast/block/line-layout/non-empty-inline-block-with-zero-height.html

        * layout/formattingContexts/inline/InlineLineBoxVerticalAligner.cpp:
        (WebCore::Layout::LineBoxVerticalAligner::computeRootInlineBoxVerticalPosition const):

2022-01-14  Chris Lord  <clord@igalia.com>

        [GTK][WPE] Share code between NicosiaGCGLLayer+ANGLE and NicosiaImageBufferPipe
        https://bugs.webkit.org/show_bug.cgi?id=235182

        Reviewed by Alejandro G. Castro.

        Rename NicosiaGCGLANGLELayer to NicosiaGCGLANGLEPipe and have it
        inherit from NicosiaImageBufferPipe instead of NicosiaGCGLLayer.

        No new tests, no change in behaviour.

        * platform/TextureMapper.cmake:
        * platform/graphics/angle/GraphicsContextGLANGLE.h:
        * platform/graphics/nicosia/NicosiaImageBufferPipe.cpp:
        (Nicosia::NicosiaImageBufferPipe::NicosiaImageBufferPipe):
        (Nicosia::NicosiaImageBufferPipe::source const):
        (Nicosia::NicosiaImageBufferPipe::layerContentsDisplayDelegate):
        (): Deleted.
        (Nicosia::WebCore::NicosiaImageBufferPipeSource::NicosiaImageBufferPipeSource): Deleted.
        (Nicosia::WebCore::NicosiaImageBufferPipeSource::~NicosiaImageBufferPipeSource): Deleted.
        (Nicosia::WebCore::NicosiaImageBufferPipeSource::handle): Deleted.
        (Nicosia::WebCore::NicosiaImageBufferPipeSource::swapBuffersIfNeeded): Deleted.
        * platform/graphics/nicosia/NicosiaImageBufferPipe.h: Added.
        (Nicosia::NicosiaImageBufferPipeSource::platformLayer const):
        * platform/graphics/nicosia/texmap/NicosiaGCGLANGLEPipe.cpp: Renamed from Source/WebCore/platform/graphics/nicosia/texmap/NicosiaGCGLANGLELayer.cpp.
        * platform/graphics/nicosia/texmap/NicosiaGCGLANGLEPipe.h: Renamed from Source/WebCore/platform/graphics/nicosia/texmap/NicosiaGCGLANGLELayer.h.
        * platform/graphics/nicosia/texmap/NicosiaGCGLLayer.cpp:
        (Nicosia::GCGLLayer::GCGLLayer):
        (Nicosia::GCGLLayer::swapBuffersIfNeeded):
        * platform/graphics/nicosia/texmap/NicosiaGCGLLayer.h:
        * platform/graphics/texmap/GraphicsContextGLTextureMapper.cpp:
        (WebCore::GraphicsContextGLTextureMapper::GraphicsContextGLTextureMapper):
        * platform/graphics/texmap/GraphicsContextGLTextureMapperANGLE.cpp:
        (WebCore::GraphicsContextGLANGLE::GraphicsContextGLANGLE):
        (WebCore::GraphicsContextGLANGLE::platformDisplay const):
        (WebCore::GraphicsContextGLANGLE::platformConfig const):
        (WebCore::GraphicsContextGLANGLE::makeContextCurrent):

2022-01-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][a11y] Unregister objects and clear cache when last client disconnect with ATSPI
        https://bugs.webkit.org/show_bug.cgi?id=234781

        Reviewed by Adrian Perez de Castro.

        We currently register objects when there are clients asking for cached items or connect event listeners. We
        could unregister the objects and clear the cache if all the clients are disconnected. This patch adds a low
        priority timer to clear the cache and unregister the objects if there aren't new clients after 10 seconds
        since the last client disconnected.

        * accessibility/atspi/AccessibilityAtspi.cpp:
        (WebCore::AccessibilityAtspi::initializeRegistry): Remove the calls to registerTrees(), since it's now done by
        addClient() when the first client is added.
        (WebCore::AccessibilityAtspi::addEventListener): Call addClient().
        (WebCore::AccessibilityAtspi::addClient): Register the trees if this is the first client. Add the client to the
        map and subscribe to NameOwnerChanged to remove the client when it's disconnected.
        (WebCore::AccessibilityAtspi::removeClient): Remove the client and start the clear cache timer if the clients
        map is empty.
        (WebCore::AccessibilityAtspi::cacheClearTimerFired): Unregister all the objects and clear the cache.
        (WebCore::AccessibilityAtspi::registerTrees const): Deleted.
        * accessibility/atspi/AccessibilityAtspi.h:
        (WebCore::AccessibilityAtspi::hasClients const): Return whether there are clients connected.
        (WebCore::AccessibilityAtspi::hasEventListeners const): Deleted.
        * accessibility/atspi/AccessibilityObjectAtspi.cpp:
        (WebCore::AccessibilityObjectAtspi::didUnregisterObject): Object was unregistered by the clear cache timer,
        reset the path and isRegistered members.
        * accessibility/atspi/AccessibilityObjectAtspi.h:
        * accessibility/atspi/AccessibilityRootAtspi.cpp:
        (WebCore::AccessibilityRootAtspi::registerTree): Return early if already registered.
        (WebCore::AccessibilityRootAtspi::didUnregisterTree): Tree was unregistered by the clear caceh timer, reset the
        treeIsRegistered member.
        (WebCore::AccessibilityRootAtspi::embedded): Check if there are clients.
        * accessibility/atspi/AccessibilityRootAtspi.h:

2022-01-14  Antti Koivisto  <antti@apple.com>

        [:has() pseudo-class] Avoid O(n^2) in style invalidation with repeated DOM mutations
        https://bugs.webkit.org/show_bug.cgi?id=234842
        <rdar://problem/87397176>

        Reviewed by Dean Jackson.

        Use invalidation selectors to check if a given mutation needs :has() invalidation.

        Test: imported/w3c/web-platform-tests/css/selectors/invalidation/has-complexity.html

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne const):
        * css/SelectorChecker.h:
        * style/ChildChangeInvalidation.cpp:
        (WebCore::Style::ChildChangeInvalidation::invalidateForChangedElement):

        Invalidate only if the invalidation ruleset has an invalidation selector that matches
        the added/removed element. Even in that case we only need to invalidate if that selector
        has not already matched within this parent.

        As we don't have persistent state that would remember what already matched accross multiple
        mutations, approximate this by checking if the closest sibling matched.

        (WebCore::Style::ChildChangeInvalidation::invalidateForHasBeforeMutation):
        (WebCore::Style::ChildChangeInvalidation::invalidateForHasAfterMutation):
        * style/ChildChangeInvalidation.h:

2022-01-14  Nikolas Zimmermann  <nzimmermann@igalia.com>

        [LBSE] Introduce SVGContainerLayout
        https://bugs.webkit.org/show_bug.cgi?id=235101

        Reviewed by Rob Buis.

        Upstream SVGContainerLayout, a utility class centralizing
        the "layout children in SVG render tree" algorithm. The legacy
        engines relies on various helper methods in SVGRenderingSupport -- for
        LBSE it's all in one place: SVGContainerLayout.

        The actual two-pass algorithm is described in the technical document
        covering LBSE. It's identical to the LBSE downstream version, which
        used to pass all layout tests.

        Currently the functionality is not observable, as we don't create
        LBSE renderers yet.

        Covered by existing tests, no change in behaviour.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isSVGLayerAwareRenderer const):
        * rendering/svg/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::layoutChildren):
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::layout):
        * rendering/svg/SVGContainerLayout.cpp: Added.
        (WebCore::SVGContainerLayout::SVGContainerLayout):
        (WebCore::SVGContainerLayout::layoutChildren):
        (WebCore::layoutLocationFromRenderer):
        (WebCore::setLayoutLocationForRenderer):
        (WebCore::SVGContainerLayout::positionChildrenRelativeToContainer):
        (WebCore::SVGContainerLayout::verifyLayoutLocationConsistency):
        (WebCore::SVGContainerLayout::layoutDifferentRootIfNeeded):
        (WebCore::SVGContainerLayout::invalidateResourcesOfChildren):
        (WebCore::SVGContainerLayout::layoutSizeOfNearestViewportChanged const):
        (WebCore::SVGContainerLayout::transformToRootChanged):
        * rendering/svg/SVGContainerLayout.h: Added.

2022-01-13  Simon Fraser  <simon.fraser@apple.com>

        Don't call invalidateRectsForAllMarkers() for every layer in the updateLayerPositions() traversal
        https://bugs.webkit.org/show_bug.cgi?id=235211

        Reviewed by Alan Bujtas.

        RenderLayer::updateLayerPositions() called renderer().document().markers().invalidateRectsForAllMarkers()
        but that is called on every layer in the recursive updateLayerPositions() traveral. Yet it only needs
        to be called once.

        So differentiate the entry points for layer traversal from the recursive traversal functions
        by using "recursive" in the naming of the latter, and move two of those entrypoints from
        RenderLayerScrollableArea back to RenderLayer so everything is in the same file.

        Now the entrypoints can call willUpdateLayerPositions() which does the invalidateRectsForAllMarkers().

        * page/FrameView.cpp:
        (WebCore::FrameView::updateLayerPositionsAfterScrolling):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::willUpdateLayerPositions):
        (WebCore::RenderLayer::updateLayerPositionsAfterStyleChange):
        (WebCore::RenderLayer::updateLayerPositionsAfterLayout):
        (WebCore::RenderLayer::recursiveUpdateLayerPositions):
        (WebCore::RenderLayer::updateLayerPositionsAfterOverflowScroll):
        (WebCore::RenderLayer::updateLayerPositionsAfterDocumentScroll):
        (WebCore::RenderLayer::recursiveUpdateLayerPositionsAfterScroll):
        (WebCore::RenderLayer::updateLayerPositions): Deleted.
        (WebCore::RenderLayer::updateLayerPositionsAfterScroll): Deleted.
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::recursiveUpdateLayerPositionsAfterScroll):
        (WebCore::RenderLayer::updateLayerPositionsAfterScroll): Deleted.
        * rendering/RenderLayerScrollableArea.cpp:
        (WebCore::RenderLayerScrollableArea::scrollTo):
        (WebCore::RenderLayerScrollableArea::updateLayerPositionsAfterDocumentScroll): Deleted.
        (WebCore::RenderLayerScrollableArea::updateLayerPositionsAfterOverflowScroll): Deleted.
        * rendering/RenderLayerScrollableArea.h:

2022-01-13  Alan Bujtas  <zalan@apple.com>

        [Cleanup] Line::selectionState logic is slightly confusing and redundant
        https://bugs.webkit.org/show_bug.cgi?id=235187

        Reviewed by Antti Koivisto.

        Go from a seemingly random set of conditions to a incremental state change (None -> Start -> Inside -> End).
        (This also removes redundant code like "if (state == None || ((boxState == Start || boxState == End) && (state == None || state == Inside)))"
        and clears up what "state" here actually means.)

        * layout/integration/InlineIteratorLine.cpp:
        (WebCore::InlineIterator::Line::selectionState const):

2022-01-13  Chris Dumez  <cdumez@apple.com>

        Unable to have new lines in HTMLTextArea's placeholder text
        https://bugs.webkit.org/show_bug.cgi?id=235205

        Reviewed by Wenson Hsieh.

        Unlike the placeholder for HTMLInputElement, the placeholder for HTMLTextAreaElement needs
        to allow new lines as per:
        - https://html.spec.whatwg.org/multipage/form-elements.html#attr-textarea-placeholder

        This aligns our behavior with Blink and Gecko.

        No new tests, unskipped existing WPT tests.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::placeholder const):
        * html/HTMLInputElement.h:
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::updatePlaceholderText):
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::strippedPlaceholder const): Deleted.
        * html/HTMLTextFormControlElement.h:
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::updatePlaceholderText):

2022-01-13  Chris Dumez  <cdumez@apple.com>

        html/semantics/scripting-1/the-script-element/script-type-and-language-empty.html WPT test is failing
        https://bugs.webkit.org/show_bug.cgi?id=235202

        Reviewed by Darin Adler.

        Per https://html.spec.whatwg.org/multipage/scripting.html#prepare-a-script (step 8), we should assume
        the type is "text/javascript" if the type attribute is present and its value is the empty string.
        Our logic in ScriptElement::determineScriptType() was slightly wrong and didn't get this case right
        because it was doing an `isEmpty()` check which could mean both that the attribute is missing or present
        with a value that is the empty string.

        No new tests, rebaselined existing test.

        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::determineScriptType const):

2022-01-13  Cameron McCormack  <heycam@apple.com>

        Only apply automatic minimum block-size aspect-ratio rules to non-replaced elements
        https://bugs.webkit.org/show_bug.cgi?id=235058
        <rdar://85505101>

        Reviewed by Alan Bujtas.

        The rules in https://www.w3.org/TR/css-sizing-4/#aspect-ratio-minimum
        that define the automatic minimum size of an element subject to an
        aspect-ratio only apply if the element is non-replaced.

        In constrainLogicalHeightByMinMax specifically, when min-height is
        auto, after applying the aspect-ratio to produce an automatic minimum
        height, we bump it up to the content height if the element has
        children. This, presumably, is to account for the way the height of a
        block is computed in CSS 2.2. (As CSS 2.2 doesn't have an auto value
        for min-height, and a CSS Block Layout module has not been written in
        terms of CSS Sizing concepts, there is no clear definition of
        automatic minimum sizing for blocks at the moment.) If we erroneously
        apply this to a replaced element, such as an image or video, it can
        get a computed min-height equal to the intrinsic height of the image,
        which may be much larger than expected.

        This commit adds an is<RenderReplaced>() check for both automatic
        minimum logical width and height calculations, although I was unable to
        produce a test to exercise the logical width case (which does not take
        the intrinsic size into account when computing the automatic minimum).

        Test: fast/css/aspect-ratio-min-height-replaced.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::constrainLogicalWidthInFragmentByMinMax const):
        (WebCore::RenderBox::constrainLogicalHeightByMinMax const):

2022-01-13  Simon Fraser  <simon.fraser@apple.com>

        Move the code that computes layer content visibility into its own function
        https://bugs.webkit.org/show_bug.cgi?id=235195

        Reviewed by Alan Bujtas.

        Just move into its own function the code with the odd-looking RenderObject walk that looks
        for visibility:visible non-layer children in a visibility:hidden ancestor.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateDescendantDependentFlags):
        (WebCore::RenderLayer::computeHasVisibleContent const):
        * rendering/RenderLayer.h:

2022-01-13  Elliott Williams  <emw@apple.com>

        [XCBuild] Add "product dependencies" which influence workspace build order
        https://bugs.webkit.org/show_bug.cgi?id=235094

        Reviewed by Alexey Proskuryakov.

        No tests, build system only.

        * Configurations/Base.xcconfig: Add EXCLUDED_SOURCE_FILE_NAMES
        * Configurations/WebCore.xcconfig: Inherit EXCLUDED_SOURCE_FILE_NAMES
        * WebCore.xcodeproj/project.pbxproj: Add Product Dependencies

2022-01-13  Adrian Perez de Castro  <aperez@igalia.com>

        Non-unified build fixes, mid January 2022 edition
        https://bugs.webkit.org/show_bug.cgi?id=235180

        Unreviewed non-unified build fixes.

        No new tests needed.

        * platform/graphics/filters/SourceAlpha.cpp: Add missing ImageBuffer.h header.
        * svg/SVGFEPointLightElement.cpp: Add missing FilterEffectVector.h header.
        * svg/SVGFESpotLightElement.cpp: Add missing headers FilterEffectVector.h,
        GeometryUtilities.h, and ImageBuffer.h.
        * svg/graphics/filters/SVGFilterBuilder.h: Add missing FilterEffectVector.h header.

2022-01-13  Chris Dumez  <cdumez@apple.com>

        Implement HTMLScriptElement.supports(type) method
        https://bugs.webkit.org/show_bug.cgi?id=229929
        <rdar://problem/82933899>

        Reviewed by Geoff Garen and Darin Adler.

        Implement HTMLScriptElement.supports(type) method which was fairly recently
        introduced in the HTML specification:
        - https://html.spec.whatwg.org/multipage/scripting.html#dom-script-supports

        Blink and Gecko already implement this.

        No new tests, rebaselined existing tests.

        * html/HTMLScriptElement.h:
        * html/HTMLScriptElement.idl:

2022-01-13  Gabriel Nava Marino  <gnavamarino@apple.com>

        null ptr deref while trying to access DeferredPromise::promise()
        https://bugs.webkit.org/show_bug.cgi?id=234447

        Reviewed by Darin Adler.

        The sequence of steps is as follows:
        1) In Document::~Document() the parent class ScriptExecutionContext::~ScriptExecutionContext() destroys the context
           on all m_destructionObservers.
        2) One of these objects is a DeferredPromise created earlier and stored in the JSCustomElementRegistry's promiseMap.
        3) Destroying the context via DOMGuardedObject::contextDestroyed() nulls out m_globalObject.
        4) Later, an event listener is invoked and tries to access the DeferredPromise stored in the
           JSCustomElementRegistry's promiseMap.
        5) However, this DeferredPromise has a null m_globalObject and we crash after trying to access it.

        We should check in DeferredPromise::promise() if isEmpty().
        This is true when the DeferredPromise's context has been destroyed in DOMGuardedObject::contextDestroyed().

        Tests: fast/js-promise/js-promise-from-detached-iframe.html
               fast/js-promise/js-promise-invalid-context-access.html

        * bindings/js/JSDOMPromiseDeferred.cpp:
        (WebCore::DeferredPromise::promise const):

2022-01-13  Wenson Hsieh  <wenson_hsieh@apple.com>

        Crash in Document::updateStyleIfNeeded() when removing a node containing the drag caret
        https://bugs.webkit.org/show_bug.cgi?id=235184
        rdar://74845918

        Reviewed by Darin Adler.

        While performing drag and drop over editable content, DragCaretController handles updating and painting a drag
        caret, which indicates where the dragged content will be inserted upon drop. If the node containing this drag
        caret is disconnected, `DragCaretController::nodeWillBeRemoved()` resets the drag caret position and issues a
        repaint on the renderer responsible for drawing the drag caret. This call to `nodeWillBeRemoved()` occurs in the
        middle of node removal, so it's encapsulated by a `ScriptDisallowedScope::InMainThread` scope which causes a
        release assertion in WebKit2 if anything tries to trigger layout or style updates.

        Currently, if the node being removed would cause the caret position to be removed as well, DragCaretController
        calls into `setCaretPosition()` with a null visible position, which then calls into `invalidateCaretRect` with
        the current caret position's anchor node. In turn, `invalidateCaretRect` contains logic to issue a repaint on
        the anchor node's renderer if the node is editable. However, to check whether the node is editable, we use the
        helper function `WebCore::isEditableNode()`, which triggers a style update if needed, only in the case where:

        1. A style recalc is needed, and...
        2. The document contains an element with the `-webkit-user-modify` CSS property.

        As such, dirtying element styles right before removing the drag caret's anchor node from the document while
        dispatching a `drag` or `drop` event in an editor with `-webkit-user-modify: read-write;` is sufficient to
        trigger the release assertion and cause a crash.

        To address this, instead of calling `clear()` inside of `DragCaretController::nodeWillBeRemoved()`, we can
        instead directly invalidate the caret rect using the current drag caret anchor (passing in `true` for
        `caretRectChanged()` since we already know that the drag caret is being cleared out), and then reset the current
        drag caret position and caret rect. This allows us to avoid the `isEditableNode()` check in this scenario when
        deciding whether to trigger paint invalidation, which is unnecessary because we already know that the node
        containing the caret is being removed, so the renderer is going to be repainted anyways. We also pull this logic
        out into a separate helper method, `clearCaretPositionWithoutUpdatingStyle()`, to make it clear that we must
        avoid triggering style recalc here.

        Test: DragAndDropTests.DoNotCrashWhenRemovingNodeOnDrop

        * editing/FrameSelection.cpp:
        (WebCore::DragCaretController::nodeWillBeRemoved):
        (WebCore::DragCaretController::clearCaretPositionWithoutUpdatingStyle):
        * editing/FrameSelection.h:

2022-01-13  Antoine Quint  <graouts@webkit.org>

        Remove use of PseudoElement in ComputedStyleExtractor
        https://bugs.webkit.org/show_bug.cgi?id=235158

        Reviewed by Darin Adler.

        When we fixed bug 234987, the easiest thing was to add some code that uses PseudoElement,
        which was already used in several places in ComputedStyleExtractor. However, we want to
        remove code using PseudoElement, not add more.

        This patch does that throughout ComputedStyleExtractor and also removes some use in
        KeyframeEffect by always invalidating the host instead of going through PseudoElement,
        which wasn't necessary anymore.

        We also had to modify Styleable::renderer() to return nullptr for the "::marker" case
        in case there is no content set for the marker, because essentially there is nothing
        being rendered for the marker and it would cause ComputedStyleExtractor::propertyValue()
        to return computed value instead of "auto" for width and height for instance.

        * animation/KeyframeEffect.cpp:
        (WebCore::invalidateElement):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::styledRenderer const):
        (WebCore::hasValidStyleForProperty):
        (WebCore::computeRenderStyleForProperty):
        (WebCore::ComputedStyleExtractor::customPropertyValue):
        (WebCore::ComputedStyleExtractor::propertyValue):
        (WebCore::ComputedStyleExtractor::getLayerCount):
        (WebCore::ComputedStyleExtractor::styledElement const): Deleted.
        * css/CSSComputedStyleDeclaration.h:
        * style/Styleable.cpp:
        (WebCore::Styleable::renderer const):

2022-01-13  Tim Horton  <timothy_horton@apple.com>

        Fix a few Objective-C object leaks due to early returns in `init`
        https://bugs.webkit.org/show_bug.cgi?id=235162
        <rdar://problem/87489048>

        Reviewed by Wenson Hsieh.

        * platform/ios/WebAVPlayerController.mm:
        (-[WebAVPlayerController init]):

2022-01-13  Alejandro G. Castro  <alex@igalia.com>

        Remove the code inside USE(OPENGL) && ENABLE(WEBGL2)
        https://bugs.webkit.org/show_bug.cgi?id=235178

        Reviewed by Dean Jackson.

        No port is supporting WebGL2 without ANGLE nowadays, that code is
        historical and we can remove it.

        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::getRestartIndex): Deleted.
        * platform/graphics/opengl/GraphicsContextGLOpenGL.cpp:
        (WebCore::GraphicsContextGLOpenGL::primitiveRestartIndex): Deleted.
        * platform/graphics/opengl/GraphicsContextGLOpenGL.h:

2022-01-13  Alejandro G. Castro  <alex@igalia.com>

        [GTK][WPE][WebGL2] compilation fixes
        https://bugs.webkit.org/show_bug.cgi?id=225563

        Reviewed by Chris Lord.

        Fix the compilation and add the ANGLE dependency, the architecture
        is still not the final one but it is handy to use WebGL2 demos for
        testing already.

        We are still not enabling the tests until we have the final
        architecture.

        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::drawElements): Leftover code,
        there is no port using OpenGL directly to support WebGL2 anymore.
        (WebCore::WebGLRenderingContextBase::drawElementsInstanced):
        Ditto.

2022-01-13  Said Abou-Hallawa  <said@apple.com>

        Referenced SVG filter uses always sRGB color space for its result
        https://bugs.webkit.org/show_bug.cgi?id=235159

        Reviewed by Simon Fraser.

        Do not setOperatingColorSpace() of the lastEffect() of the referenced
        SVGFilter to DestinationColorSpace::SRGB(). This will have the pixels
        of the result FilterImage of the lastEffect() in the color space which
        is defined by the color-interpolation style of the effect SVGElement.

        Test: css3/filters/reference-filter-color-space.html

        * platform/graphics/filters/Filter.h:
        * rendering/CSSFilter.cpp:
        (WebCore::CSSFilter::create):
        Move checking the CoreImage support to this function.

        (WebCore::CSSFilter::buildFilterFunctions):
        Remove resetting m_functions and m_outsets from this function since it
        is now called only once from CSSFilter::create().

        (WebCore::CSSFilter::lastEffect const): Deleted.
        * rendering/CSSFilter.h:
        * svg/graphics/filters/SVGFilter.h:

2022-01-13  Alan Bujtas  <zalan@apple.com>

        REGRESSION (r278561): Right clicking a link selects the full line with unrelated text
        https://bugs.webkit.org/show_bug.cgi?id=235172
        <rdar://84069534>

        Reviewed by Dean Jackson.

        r278561 slightly change highlightStateForTextBox's behavior which now (correctly) returns HighlightState::None when the
        RenderText content is not part of the current selection. Prior to r278561, it returned the RenderText's original selection state
        which in this case was HighlightState::End.

        <div><span>A<br>B<span style="position: absolute"></span></span>C</div>

        In this specific case when we select the outer <span>, we end up with the following selection states for the generated line boxes:
          (B) -> "Inside"
          (C) -> "None"
        while previously (C) came back as "End" (note that the absolute positioned element does not generate line boxes).

        Now as Line::selectionState traverses through the line boxes, it comes across an unexpected "Inside -> None" transition at the selection end boundary (B -> C)
        which incorrectly leaves the line state in "Inside" and we paint the selection all the way to the end of the block.

        Test: fast/editing/selection-with-absolute-positioned-empty-content.html

        * layout/integration/InlineIteratorLine.cpp:
        (WebCore::InlineIterator::Line::selectionState const):

2022-01-13  Peng Liu  <peng.liu6@apple.com>

        Clean up MediaPlaybackTargetPicker::Client
        https://bugs.webkit.org/show_bug.cgi?id=235128

        Reviewed by Eric Carlson.

        Small cleanup to remove an unused function and change override to final.

        * Modules/airplay/WebMediaSessionManager.h:
        * platform/graphics/MediaPlaybackTargetPicker.h:

2022-01-13  Ziran Sun  <zsun@igalia.com>

        [css-grid] Fix rounding of distributed free space to flexible tracks
        https://bugs.webkit.org/show_bug.cgi?id=234917

        Reviewed by Darin Adler.

        When computing the growth size for flex sized tracks, the flexFraction multiplied by the flex factor can result
        in a non-integer size. However, we floor the stretched size to fit in a LayoutUnit. This means that we may lose
        the fractional part of the computation which can cause the entire free space not being distributed evenly. This
        fix is to sum up the leftover fractional part from every flexible track to avoid this issue.

        It is an import of Chromium GridNG CL at  https://chromium-review.googlesource.com/c/chromium/src/+/3193674.

        * rendering/GridTrackSizingAlgorithm.cpp:
        (WebCore::GridTrackSizingAlgorithm::computeFlexSizedTracksGrowth const):

2022-01-10  Sergio Villar Senin  <svillar@igalia.com>

        [css-flexbox] Incorrect height of flex items with aspect-ratio whenever the cross axis intrinsic size is larger than the viewport
        https://bugs.webkit.org/show_bug.cgi?id=234564
        <rdar://problem/86958389>

        Reviewed by Manuel Rego Casasnovas.

        Automatic preferred sizes were considered always indefinite. However whenever they correspond to
        the (physical) width we could consider them as definite. This allows us to use that size instead of
        the flex item intrinsic size when computing the transferred size contribution. This way, flex items
        with aspect ratio and large intrinsic size are not abnormally stretched due to the min-size:auto
        computation.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::computeMainSizeFromAspectRatioUsing const): Use availableLogical{Width|Height}
        to compute the cross size when then automatic preferred size is the physical width.
        (WebCore::RenderFlexibleBox::childCrossAxisIsPhysicalWidth const):
        (WebCore::RenderFlexibleBox::childCrossSizeShouldUseContainerCrossSize const): Handle the cases of
        automatic preferred widths.
        * rendering/RenderFlexibleBox.h:

2022-01-12  Antti Koivisto  <antti@apple.com>

        [:has() pseudo-class] Collect invalidation selectors for child invalidation
        https://bugs.webkit.org/show_bug.cgi?id=235103

        Reviewed by Dean Jackson.

        Collect selectors we can use to test if :has status actually changed before invalidating.

        This patch doesn't yet use the the selector.

        * style/ChildChangeInvalidation.cpp:
        (WebCore::Style::ChildChangeInvalidation::invalidateForChangedElement):

        Use the pseudo class invalidation keys for looking up :has selectors too
        instead of having a custom mechanism for doing the same thing.

        * style/PseudoClassChangeInvalidation.cpp:
        (WebCore::Style::makePseudoClassInvalidationKeys):
        * style/PseudoClassChangeInvalidation.h:
        * style/RuleFeature.cpp:
        (WebCore::Style::RuleFeatureSet::recursivelyCollectFeaturesFromSelector):

        Always return a selector for consistency.

        (WebCore::Style::makePseudoClassInvalidationKey):
        (WebCore::Style::RuleFeatureSet::collectFeatures):
        (WebCore::Style::RuleFeatureSet::add):
        (WebCore::Style::RuleFeatureSet::clear):
        (WebCore::Style::RuleFeatureSet::shrinkToFit):
        * style/RuleFeature.h:
        * style/StyleScopeRuleSets.cpp:
        (WebCore::Style::ScopeRuleSets::collectFeatures const):
        (WebCore::Style::ScopeRuleSets::hasPseudoClassInvalidationRuleSets const):
        (WebCore::Style::ScopeRuleSets::tagInvalidationRuleSets const): Deleted.

        We don't need keep around tag rule sets anymore.

        * style/StyleScopeRuleSets.h:

2022-01-12  John Wilander  <wilander@apple.com>

        PCM: Same-site triggering events should support ephemeral measurement
        https://bugs.webkit.org/show_bug.cgi?id=235160
        <rdar://87423294>

        Reviewed by Alex Christensen.

        We added ephemeral measurement for direct response advertising in https://bugs.webkit.org/show_bug.cgi?id=228984.
        We added support for same-site triggering events in https://bugs.webkit.org/show_bug.cgi?id=233173.
        These two features should work together.

        The bug was that WebKit::NetworkSession::handlePrivateClickMeasurementConversion()
        only checked for cross-site triggering events when handling ephemeral measurements.

        Test: http/tests/privateClickMeasurement/triggering-event-with-attribution-source-through-fetch-keepalive-ephemeral.html

        * loader/PrivateClickMeasurement.cpp:
        (WebCore::PrivateClickMeasurement::isNeitherSameSiteNorCrossSiteTriggeringEvent):
            New convenience function to enhance readability in
            WebKit::NetworkSession::handlePrivateClickMeasurementConversion().
        * loader/PrivateClickMeasurement.h:

2022-01-12  Andres Gonzalez  <andresg_22@apple.com>

        Process deferred ChildrenChanged notifications before creating an isolated subtree.
        https://bugs.webkit.org/show_bug.cgi?id=235115
        <rdar://problem/87458790>

        Reviewed by Chris Fleizach.

        Fixes ~20 tests in isolated tree mode.

        Before creating an isolated subtree, it is necessary to handle any
        pending, deferred children change so that the AXObject tree is updated.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::processDeferredChildrenChangedList):
        Added this method in order to be called from AXIsolatedTree::createSubtree.
        (WebCore::AXObjectCache::performDeferredCacheUpdate):
        * accessibility/AXObjectCache.h:
        * accessibility/isolatedtree/AXIsolatedTree.cpp:
        (WebCore::AXIsolatedTree::createSubtree):
        Calls AXObjectCache::processDeferredChildrenChangedList once before
        start creating a new subtree.
        * accessibility/isolatedtree/AXIsolatedTree.h:

2022-01-12  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo] Tiling scroll support
        https://bugs.webkit.org/show_bug.cgi?id=233676

        Reviewed by Don Olmstead.

        Added a new class TextureMapperSparseBackingStore that supports
        partially tiling the layer and removing tiles outside of the
        coverage rect.

        * Headers.cmake:
        * platform/TextureMapper.cmake:
        * platform/graphics/texmap/TextureMapperSparseBackingStore.cpp: Added.
        (WebCore::TextureMapperSparseBackingStore::TextureMapperSparseBackingStore):
        (WebCore::TextureMapperSparseBackingStore::setSize):
        (WebCore::TextureMapperSparseBackingStore::removeUncoveredTiles):
        (WebCore::TextureMapperSparseBackingStore::adjustedTransformForRect):
        (WebCore::TextureMapperSparseBackingStore::paintToTextureMapper):
        (WebCore::TextureMapperSparseBackingStore::drawBorder):
        (WebCore::TextureMapperSparseBackingStore::drawRepaintCounter):
        (WebCore::TextureMapperSparseBackingStore::tileDimension const):
        (WebCore::TextureMapperSparseBackingStore::updateContents):
        * platform/graphics/texmap/TextureMapperSparseBackingStore.h: Added.

2022-01-12  Megan Gardner  <megan_gardner@apple.com>

        Add to Contact menu item does nothing on mac.
        https://bugs.webkit.org/show_bug.cgi?id=235154

        Reviewed by Tim Horton.

        Add to Context menu item for telephone numbers did not actually show the contact card.
        This was because the delgate did not tell the menu where to display the card from, so it just failed.
        Plumbing that information through fixes the issue.

        * page/ChromeClient.h:
        (WebCore::ChromeClient::handleTelephoneNumberClick):
        * page/mac/ServicesOverlayController.mm:
        (WebCore::ServicesOverlayController::handleClick):

2022-01-12  Wenson Hsieh  <wenson_hsieh@apple.com>

        Live Text is sometimes horizontally clipped when injecting TextRecognitionBlockData
        https://bugs.webkit.org/show_bug.cgi?id=235122

        Reviewed by Devin Rousso.

        The current heuristic for sizing Live Text paragraphs avoids vertical overflow, but does not avoid horizontal
        overflow. Line breaking inside the fixed-width container prevents the latter in most cases, but not in the
        scenario where the recognized text block is a single word with no opportunity for line break.

        Address this by adjusting the sizing heuristic to shrink both the width and height to fit within the target size
        (rather than just fitting the height).

        Test: fast/images/text-recognition/image-overlay-block-horizontal-overflow.html

        * dom/ImageOverlay.cpp:
        (WebCore::ImageOverlay::updateWithTextRecognitionResult):

2022-01-12  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] [WK2] NSFontPanel UI (font color, text decorations, font shadow) doesn't update on selection change
        https://bugs.webkit.org/show_bug.cgi?id=190120
        rdar://44897405

        Reviewed by Darin Adler.

        Add a boolean `hasMultipleFonts` flag to FontAttributes, and pass it as an out-reference when computing the
        font at the current selection. See WebKit/ChangeLog for more details.

        * editing/Editor.cpp:
        (WebCore::Editor::fontAttributesAtSelectionStart):
        * editing/FontAttributes.h:

2022-01-12  Brandon Stewart  <brandonstewart@apple.com>

        Verify startNode is prior to the beyondEnd node
        https://bugs.webkit.org/show_bug.cgi?id=230712

        Reviewed by Wenson Hsieh.

        Verify that the startNode is prior to the beyondEnd. If this condition is not met,
        this will lead to undesirable situations when traversing through the nodes.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyRelativeFontStyleChange):

2022-01-12  Fujii Hironori  <Hironori.Fujii@sony.com>

        [MediaFoundation] Invalidate only the videa area using MediaPlayer::repaint(), not the whole FrameView
        https://bugs.webkit.org/show_bug.cgi?id=235088

        Reviewed by Don Olmstead.

        r192176 added MediaPlayerPrivateMediaFoundation::invalidateFrameView()
        to render the next frame. It was, as per the method name,
        invalidating the whole FrameView.

        This approach doesn't render video frames with TiledBacking (Bug
        233676). Calling MediaPlayer::repaint() is the correct way to
        invalidate the video area.

        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:
        (WebCore::MediaPlayerPrivateMediaFoundation::invalidateVideoArea): Call MediaPlayer::repaint().
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::processInputNotify):
        (WebCore::MediaPlayerPrivateMediaFoundation::invalidateFrameView): Deleted.
        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.h:

2022-01-12  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Live Text] Image overlay text is misaligned on rfi.fr
        https://bugs.webkit.org/show_bug.cgi?id=235118

        Reviewed by Aditya Keerthi.

        Reset any `text-indent` to 0 when injecting Live Text into image elements, to ensure that any `text-indent`
        value set on the image doesn't propagate into UA shadow DOM content.

        Test: fast/images/text-recognition/image-overlay-with-text-indent.html

        * html/shadow/imageOverlay.css:
        (div.image-overlay-line, .image-overlay-text, div.image-overlay-block):

2022-01-11  Simon Fraser  <simon.fraser@apple.com>

        Correctly dirty z-order lists when showing a modal dialog
        https://bugs.webkit.org/show_bug.cgi?id=232762
        <rdar://problem/85082354>

        Reviewed by Alan Bujtas.

        When showing a dialog element which is split into continuations, we need to ensure
        to call establishesTopLayerWillChange()/establishesTopLayerDidChange() on the
        layers of all the continuation renderers.

        * dom/Element.cpp:
        (WebCore::forEachRenderLayer): Call the provided function on the layers for all
        the associated render objects. It's a little cumbersome because layers relate to
        RenderLayerModelObject, but continuations relate to RenderBoxModelObject. 
        (WebCore::Element::addToTopLayer):
        (WebCore::Element::removeFromTopLayer):
        (WebCore::renderLayerForElement): Deleted.
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::forRendererAndContinuations):
        * rendering/RenderBoxModelObject.h: Provider a static helper to call a function
        on a renderer and all its continuations, if any.

2022-01-12  Sam Weinig  <weinig@apple.com>

        Add some functions to Color to make debugging using color indicators easier
        https://bugs.webkit.org/show_bug.cgi?id=234886

        Reviewed by Darin Adler.

        Add two helpers to Color to aid debugging, allowing easy access to components in simplified form.

        * platform/graphics/Color.cpp:
        (WebCore::Color::debugRGBA const):
        (WebCore::Color::debugDescription const):
        * platform/graphics/Color.h:

2022-01-12  Antoine Quint  <graouts@webkit.org>

        css/css-transitions/pseudo-elements-002.html WPT is a failure
        https://bugs.webkit.org/show_bug.cgi?id=234987

        Reviewed by Antti Koivisto.

        When checking for style validity, we would only check the element itself and not its host
        in the case where the element were a PseudoElement. Ideally, we'd eradicate all use of
        PseudoElement throughout this source file, but this is a start, and I'll attempt a
        refactor in a followup patch.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::hasValidStyleForProperty):

2022-01-12  Antoine Quint  <graouts@webkit.org>

        Remove WebKitTransitionEvent and WebKitAnimationEvent
        https://bugs.webkit.org/show_bug.cgi?id=235113

        Reviewed by Dean Jackson.

        Remove all files related to these interfaces and fix some missing header includes
        revealed by a change in unified sources.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/EventNames.in:
        * dom/EventTarget.cpp:
        * dom/WebKitAnimationEvent.cpp: Removed.
        * dom/WebKitAnimationEvent.h: Removed.
        * dom/WebKitAnimationEvent.idl: Removed.
        * dom/WebKitTransitionEvent.cpp: Removed.
        * dom/WebKitTransitionEvent.h: Removed.
        * dom/WebKitTransitionEvent.idl: Removed.
        * dom/mac/ImageControlsMac.cpp:
        * dom/mac/ImageControlsMac.h:

2022-01-12  Chris Lord  <clord@igalia.com>

        [WPE] Fix building WebXR with ANGLE enabled
        https://bugs.webkit.org/show_bug.cgi?id=235108

        Reviewed by Alejandro G. Castro.

        Fix building both ANGLE WebGL and WebXR simultaneously when GLES is
        being used.

        * Modules/webxr/WebXROpaqueFramebuffer.cpp:
        (WebCore::WebXROpaqueFramebuffer::startFrame):
        (WebCore::WebXROpaqueFramebuffer::setupFramebuffer):

2022-01-12  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Incorrect negative margin handling (both left/right) with RTL inline base direction
        https://bugs.webkit.org/show_bug.cgi?id=235095

        Reviewed by Antti Koivisto.

        The simplified negative margin handling on inline boxes does not work well with RTL inline base direction.
        With LTR direction, we could just treat the negative left margin value (which pulls content to the left)
        as part the "logical width" (may resulting in negative width values) and let this shorter width pull
        the the adjoining content.
        However this setup produces incorrect box positions when the inline base direction is RTL.
        In this patch, we switch over to a more correct inline box positioning where the negative margin
        affects the logical left while it does not make the run shorter anymore.

        Test: fast/inline/rtl-negative-margins.html

        * layout/formattingContexts/inline/InlineLine.cpp:
        (WebCore::Layout::Line::appendInlineBoxStart):
        (WebCore::Layout::Line::appendNonReplacedInlineLevelBox):
        * layout/formattingContexts/inline/InlineLineBoxBuilder.cpp:
        (WebCore::Layout::LineBoxBuilder::constructAndAlignInlineLevelBoxes):
        * layout/formattingContexts/inline/InlineLineBuilder.cpp:
        (WebCore::Layout::LineBuilder::layoutInlineContent):
        * layout/formattingContexts/inline/InlineLineBuilder.h:
        * layout/formattingContexts/inline/display/InlineDisplayLineBuilder.cpp:
        (WebCore::Layout::InlineDisplayLineBuilder::build const):

2022-01-12  Nikolas Zimmermann  <nzimmermann@igalia.com>

        [LBSE] Begin layer-aware RenderSVGContainer implementation
        https://bugs.webkit.org/show_bug.cgi?id=235100

        Reviewed by Rob Buis.

        Create RenderSVGContainer based on the downstream LBSE implementation.

        This patch does not yet enable the creation of RenderSVGContainer
        renderers if LBSE is enabled, since the derived classes, such as
        RenderSVGHiddenContainer / RenderSVGViewportContainer / ..., are still
        missing in LBSE.

        Covered by existing tests, no change in behaviour.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isSVGContainer const):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::write):
        * rendering/svg/RenderSVGContainer.cpp: Added.
        (WebCore::RenderSVGContainer::RenderSVGContainer):
        (WebCore::RenderSVGContainer::layout):
        (WebCore::RenderSVGContainer::calculateViewport):
        (WebCore::RenderSVGContainer::layoutChildren):
        (WebCore::RenderSVGContainer::styleDidChange):
        (WebCore::RenderSVGContainer::selfWillPaint):
        (WebCore::RenderSVGContainer::paint):
        (WebCore::RenderSVGContainer::nodeAtPoint):
        * rendering/svg/RenderSVGContainer.h: Added.
        (WebCore::RenderSVGContainer::isObjectBoundingBoxValid const):
        (WebCore::RenderSVGContainer::updateLayerInformation):
        (WebCore::RenderSVGContainer::pointIsInsideViewportClip):
        * rendering/svg/SVGBoundingBoxComputation.cpp:
        (WebCore::SVGBoundingBoxComputation::computeDecoratedBoundingBox const):
        (WebCore::SVGBoundingBoxComputation::handleRootOrContainer const):
        * rendering/svg/SVGRenderTreeAsText.cpp:
        (WebCore::writeSVGContainer):
        * rendering/svg/SVGRenderTreeAsText.h:
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::attachInternal):
        (WebCore::RenderTreeBuilder::detach):
        * rendering/updating/RenderTreeBuilderSVG.cpp:
        (WebCore::RenderTreeBuilder::SVG::attach):
        (WebCore::RenderTreeBuilder::SVG::detach):
        * rendering/updating/RenderTreeBuilderSVG.h:

2022-01-12  Chris Lord  <clord@igalia.com>

        [WPE] Enable WebGL ANGLE support
        https://bugs.webkit.org/show_bug.cgi?id=235064

        Reviewed by Alejandro G. Castro.

        Enable ANGLE WebGL support when building the WPE port.

        * platform/graphics/angle/ANGLEHeaders.h:
        * platform/graphics/nicosia/texmap/NicosiaGCGLLayer.cpp:
        (Nicosia::GCGLLayer::swapBuffersIfNeeded):

2022-01-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][a11y] Defer the emission of AddAccessible signal with ATSPI
        https://bugs.webkit.org/show_bug.cgi?id=234740

        Reviewed by Adrian Perez de Castro.

        In case of node added and removed quickly, we just avoid the emission of the signal.

        * accessibility/atspi/AXObjectCacheAtspi.cpp:
        (WebCore::AXObjectCache::attachWrapper): Notify the root about its new child earlier to ensure the isolated tree
        is created as soon as possible.
        (WebCore::AXObjectCache::platformPerformDeferredCacheUpdate): Remove the root case from here.
        * accessibility/atspi/AccessibilityAtspi.cpp:
        (WebCore::AccessibilityAtspi::parentChanged): Ensure object is cached before emitting the signal.
        (WebCore::AccessibilityAtspi::childrenChanged): Ditto.
        (WebCore::AccessibilityAtspi::stateChanged): Ditto.
        (WebCore::AccessibilityAtspi::textChanged): Ditto.
        (WebCore::AccessibilityAtspi::textAttributesChanged): Ditto.
        (WebCore::AccessibilityAtspi::textCaretMoved): Ditto.
        (WebCore::AccessibilityAtspi::textSelectionChanged): Ditto.
        (WebCore::AccessibilityAtspi::valueChanged): Ditto.
        (WebCore::AccessibilityAtspi::selectionChanged): Ditto.
        (WebCore::AccessibilityAtspi::loadEvent): Ditto.
        (WebCore::AccessibilityAtspi::addToCacheIfNeeded): Helper to add an object to the cache and emit AddAccessible signal.
        (WebCore::AccessibilityAtspi::cacheUpdateTimerFired): Update the cache with pending adds.
        (WebCore::AccessibilityAtspi::scheduleCacheUpdate): Create the update cache timer if needed and schedule an
        update if there isn't a pending one already.
        (WebCore::AccessibilityAtspi::addAccessible): Add object to the list and schedule a cache update.
        (WebCore::AccessibilityAtspi::removeAccessible): Return early if the object is in the update cache list.
        * accessibility/atspi/AccessibilityAtspi.h:
        * accessibility/atspi/AccessibilityObjectAtspi.cpp:
        (WebCore::AccessibilityObjectAtspi::registerObject): Remove the call to AccessibilityRootAtspi::child() when an
        object is registered before being attached to the isolated object.
        * accessibility/atspi/AccessibilityRootAtspi.cpp:
        (WebCore::AccessibilityRootAtspi::child const): Set m_isInChild.
        (WebCore::AccessibilityRootAtspi::childAdded): Return early if the given child is not the current one or called
        from child().
        * accessibility/atspi/AccessibilityRootAtspi.h:

2022-01-12  Martin Robinson  <mrobinson@webkit.org>

        Interpolation during animation of two empty transform lists should always yield "none"
        https://bugs.webkit.org/show_bug.cgi?id=235069

        Reviewed by Antoine Quint.

        No new tests. This is covered by an existing WPT test.

        * animation/KeyframeEffect.cpp:
        (WebCore::KeyframeEffect::checkForMatchingTransformFunctionLists): When all keyframes have "transform: none"
        they transform function lists should match. This allows TransformOperations::blend to avoid doing
        matrix interpolation to generate the interpolated transform.

2022-01-12  Nikolas Zimmermann  <nzimmermann@igalia.com>

        [LBSE] Rename RenderSVGContainer -> LegacyRenderSVGContainer
        https://bugs.webkit.org/show_bug.cgi?id=235099

        Reviewed by Rob Buis.

        Following the established procedure: rename RenderSVGContainer -> LegacyRenderSVGContainer.
        In a follow-up patch RenderSVGContainer will be reintroduced for LBSE, inheriting from
        RenderSVGModelObject instead of LegacyRenderSVGModelObject.

        Covered by existing tests, no change in behaviour.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isLegacySVGContainer const):
        (WebCore::RenderObject::isSVGContainer const): Deleted.
        * rendering/RenderTreeAsText.cpp:
        (WebCore::write):
        * rendering/svg/LegacyRenderSVGContainer.cpp: Renamed from Source/WebCore/rendering/svg/RenderSVGContainer.cpp.
        (WebCore::LegacyRenderSVGContainer::LegacyRenderSVGContainer):
        (WebCore::LegacyRenderSVGContainer::layout):
        (WebCore::LegacyRenderSVGContainer::selfWillPaint):
        (WebCore::LegacyRenderSVGContainer::paint):
        (WebCore::LegacyRenderSVGContainer::addFocusRingRects):
        (WebCore::LegacyRenderSVGContainer::updateCachedBoundaries):
        (WebCore::LegacyRenderSVGContainer::nodeAtFloatPoint):
        * rendering/svg/LegacyRenderSVGContainer.h: Renamed from Source/WebCore/rendering/svg/RenderSVGContainer.h.
        (WebCore::LegacyRenderSVGContainer::didTransformToRootUpdate):
        (WebCore::LegacyRenderSVGContainer::isObjectBoundingBoxValid const):
        (WebCore::LegacyRenderSVGContainer::calculateLocalTransform):
        (WebCore::LegacyRenderSVGContainer::calcViewport):
        (WebCore::LegacyRenderSVGContainer::applyViewportClip):
        (WebCore::LegacyRenderSVGContainer::pointIsInsideViewportClip):
        (WebCore::LegacyRenderSVGContainer::determineIfLayoutSizeChanged):
        * rendering/svg/LegacyRenderSVGShape.h:
        * rendering/svg/RenderSVGHiddenContainer.cpp:
        (WebCore::RenderSVGHiddenContainer::RenderSVGHiddenContainer):
        * rendering/svg/RenderSVGHiddenContainer.h:
        * rendering/svg/RenderSVGResourceMarker.cpp:
        (WebCore::RenderSVGResourceMarker::layout):
        (WebCore::RenderSVGResourceMarker::markerBoundaries const):
        (WebCore::RenderSVGResourceMarker::draw):
        * rendering/svg/RenderSVGShape.h:
        * rendering/svg/RenderSVGTransformableContainer.cpp:
        (WebCore::RenderSVGTransformableContainer::RenderSVGTransformableContainer):
        (WebCore::RenderSVGTransformableContainer::graphicsElement):
        * rendering/svg/RenderSVGTransformableContainer.h:
        * rendering/svg/RenderSVGViewportContainer.cpp:
        (WebCore::RenderSVGViewportContainer::RenderSVGViewportContainer):
        (WebCore::RenderSVGViewportContainer::svgSVGElement const):
        (WebCore::RenderSVGViewportContainer::paint):
        * rendering/svg/RenderSVGViewportContainer.h:
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::checkForSVGRepaintDuringLayout):
        (WebCore::updateObjectBoundingBox):
        * rendering/svg/SVGRenderTreeAsText.cpp:
        (WebCore::writeSVGContainer):
        * rendering/svg/SVGRenderTreeAsText.h:
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::attachInternal):
        (WebCore::RenderTreeBuilder::detach):
        * rendering/updating/RenderTreeBuilderSVG.cpp:
        (WebCore::RenderTreeBuilder::SVG::attach):
        (WebCore::RenderTreeBuilder::SVG::detach):
        * rendering/updating/RenderTreeBuilderSVG.h:
        * svg/SVGPatternElement.cpp:

2022-01-12  Youenn Fablet  <youenn@apple.com>

        New service worker API 'FetchEvent.handled' needs to be supported
        https://bugs.webkit.org/show_bug.cgi?id=208185
        <rdar://problem/59808975>

        Reviewed by Chris Dumez.

        Expose FetchEvent.handled and resolve/reject it as per specification.

        Covered by test that we update to not rely on clientIds that we do not support very well.

        * workers/service/FetchEvent.cpp:
        (WebCore::FetchEvent::createForTesting):
        (WebCore::retrieveHandledPromise):
        (WebCore::FetchEvent::FetchEvent):
        * workers/service/FetchEvent.h:
        * workers/service/FetchEvent.idl:
        * workers/service/context/ServiceWorkerFetch.cpp:
        (WebCore::ServiceWorkerFetch::processResponse):
        (WebCore::ServiceWorkerFetch::dispatchFetchEvent):

2022-01-12  Frédéric Wang  <fwang@igalia.com>

        Protect DocumentLoader when a reference to its members is used.
        https://bugs.webkit.org/show_bug.cgi?id=233464

        Reviewed by Brady Eidson.

        No new tests, due to our infra (bug 127676).

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame): Ensure that DocumentLoader loader
        remains alive while DocumentLoader::m_mainDocumentError is used.

2022-01-11  Fujii Hironori  <Hironori.Fujii@sony.com>

        Remove Direct2D code (part 2)
        https://bugs.webkit.org/show_bug.cgi?id=235097

        Reviewed by Yusuke Suzuki.

        * platform/graphics/Color.h:
        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::createGDIFont):
        (WebCore::FontCache::createFontPlatformData):
        * platform/graphics/win/FontPlatformDataWin.cpp:
        * platform/image-decoders/ScalableImageDecoder.cpp:
        (WebCore::ScalableImageDecoder::setTargetContext): Deleted.
        * platform/image-decoders/ScalableImageDecoder.h:

2022-01-11  Said Abou-Hallawa  <said@apple.com>

        [GPU Process] Make SVG resources create remote ImageBuffers for their drawing
        https://bugs.webkit.org/show_bug.cgi?id=235073
        rdar://87402419

        Reviewed by Darin Adler.

        Pass a hostWindow when calling SVGRenderingContext::createImageBuffer().

        * rendering/svg/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::applyClippingToContext):
        * rendering/svg/RenderSVGResourceGradient.cpp:
        (WebCore::createMaskAndSwapContextForTextGradient):
        (WebCore::clipToTextMask):
        (WebCore::RenderSVGResourceGradient::applyResource):
        (WebCore::RenderSVGResourceGradient::postApplyResource):
        * rendering/svg/RenderSVGResourceMasker.cpp:
        (WebCore::RenderSVGResourceMasker::applyResource):
        * rendering/svg/RenderSVGResourcePattern.cpp:
        (WebCore::RenderSVGResourcePattern::createTileImage const):
        * rendering/svg/SVGRenderingContext.cpp:
        (WebCore::SVGRenderingContext::createImageBuffer):
        * rendering/svg/SVGRenderingContext.h:
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::imageBufferForEffect const):

2021-11-29 Simon Fraser  <simon.fraser@apple.com> 

        Serialize CSS <number> values with rounding, limited decimal precision, and no exponents per-spec
        https://bugs.webkit.org/show_bug.cgi?id=218880

        Reviewed by Darin Adler.

        Serializes CSS numbers with up to a maximum of 6 decimal places, as required by CSSOM-1
        https://www.w3.org/TR/cssom-1/#serialize-a-css-component-value

        Introduces CSSUnitType::CSS_INTEGER to differentiate types that are explicitly integers, and uses the
        new <number> serialization for CSS_NUMBER.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForGridPosition):
        (WebCore::counterToCSSValue):
        (WebCore::ComputedStyleExtractor::valueForPropertyInStyle):
        * css/CSSPrimitiveValue.cpp:
        (WebCore::isValidCSSUnitTypeForDoubleConversion):
        (WebCore::isStringType):
        (WebCore::CSSPrimitiveValue::cleanup):
        (WebCore::CSSPrimitiveValue::doubleValueInternal const):
        (WebCore::CSSPrimitiveValue::formatNumberValue const):
        (WebCore::CSSPrimitiveValue::formatIntegerValue const):
        (WebCore::CSSPrimitiveValue::unitTypeString):
        (WebCore::CSSPrimitiveValue::formatNumberForCustomCSSText const):
        (WebCore::CSSPrimitiveValue::equals const):
        * css/CSSPrimitiveValue.h:
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::operator short const):
        (WebCore::CSSPrimitiveValue::operator unsigned short const):
        (WebCore::CSSPrimitiveValue::operator int const):
        (WebCore::CSSPrimitiveValue::operator unsigned const):
        (WebCore::CSSPrimitiveValue::operator float const):
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator LineClampValue const):
        (WebCore::CSSPrimitiveValue::operator ColumnSpan const):
        * css/CSSUnits.cpp:
        (WebCore::unitCategory):
        (WebCore::operator<<):
        * css/CSSUnits.h:
        * css/DeprecatedCSSOMPrimitiveValue.cpp:
        (WebCore::DeprecatedCSSOMPrimitiveValue::primitiveType const):
        * css/MediaQueryEvaluator.cpp:
        (WebCore::doubleValue):
        (WebCore::evaluateResolution):
        (WebCore::devicePixelRatioEvaluate):
        (WebCore::computeLength):
        * css/MediaQueryExpression.cpp:
        (WebCore::featureWithValidPositiveLength):
        (WebCore::featureWithPositiveInteger):
        (WebCore::featureWithPositiveNumber):
        (WebCore::featureWithZeroOrOne):
        (WebCore::MediaQueryExpression::MediaQueryExpression):
        * css/StyleProperties.cpp:
        (WebCore::StyleProperties::getPropertyValue const):
        * css/calc/CSSCalcCategoryMapping.cpp:
        (WebCore::calcUnitCategory):
        (WebCore::calculationCategoryForCombination):
        (WebCore::hasDoubleValue):
        * css/calc/CSSCalcPrimitiveValueNode.cpp:
        (WebCore::CSSCalcPrimitiveValueNode::isNumericValue const):
        * css/parser/CSSParserImpl.cpp:
        (WebCore::CSSParserImpl::consumeFontPaletteValuesRule):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeCounter):
        (WebCore::consumeCounterStyleRange):
        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::CalcParser::consumeInteger):
        (WebCore::CSSPropertyParserHelpers::consumeIntegerTypeCSSPrimitiveValueWithCalcWithKnownTokenTypeFunction):
        (WebCore::CSSPropertyParserHelpers::consumeIntegerTypeCSSPrimitiveValueWithCalcWithKnownTokenTypeNumber):
        * style/StyleBuilderConverter.h:
        (WebCore::Style::BuilderConverter::createGridPosition):

2022-01-11  Peng Liu  <peng.liu6@apple.com>

        DataURLResourceMediaLoader decodes the URL repeatedly during a video playback
        https://bugs.webkit.org/show_bug.cgi?id=234940

        Reviewed by Darin Adler.

        In r264864, we adopted a new SPI to tell AVFoundation that the entire file is available for custom URLs.
        As a result, during a video playback, AVFoundation will request small data ranges instead of "caching"
        the whole file again.

        However, that leads to efficiency issue for DataURLResourceMediaLoader. Because it needs to decode the whole
        URL when AVFoundation requests a data range, which is inefficient when the URL is very long.

        This patch reverts the change in r264864 for the DataURLResourceMediaLoader case to fix the performance issue.
        If DataURLDecoder::decode() supports decoding a data range in the future, we can change it back for better
        memory efficiency.

        * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.mm:
        (WebCore::WebCoreAVFResourceLoader::responseReceived):

2022-01-11  Antoine Quint  <graouts@webkit.org>

        css/css-transitions/KeyframeEffect-setKeyframes.tentative.html is a failure (part 2)
        https://bugs.webkit.org/show_bug.cgi?id=235077

        Reviewed by Dean Jackson.

        There were a few issues that prevented the final subtest in this WPT from passing
        after the fix made in bug 235062.

        First, while we must flush pending style changes for some of the Web Animations APIs
        when called on a style-originated animation (CSS Transition or CSS Animation), this
        should not apply to setters, only getters. In the context of this test, it was critical
        that either setting keyframes or setting the current time not force pending style changes
        to be flushed or a reversing CSS Transition may be started too soon and the test would
        fail.

        Second, when the spec says to use the "the current value of the property in the running
        transition", it is equivalent to using the before-change style since we updated the
        current value of all animations targeting this element, not getting the value from the
        last time this transition was resolved since this would not account for any API calls
        or style changes since then, which is precisely what this test is checking.

        * animation/DeclarativeAnimation.cpp:
        (WebCore::DeclarativeAnimation::setBindingsStartTime): Deleted.
        (WebCore::DeclarativeAnimation::setBindingsCurrentTime): Deleted.
        * animation/DeclarativeAnimation.h:
        * animation/KeyframeEffect.cpp:
        (WebCore::KeyframeEffect::setBindingsKeyframes):
        * style/Styleable.cpp:
        (WebCore::updateCSSTransitionsForStyleableAndProperty):

2022-01-11  Said Abou-Hallawa  <said@apple.com>

        [GPU Process] Remove the dependency from FilterEffect to its inputs
        https://bugs.webkit.org/show_bug.cgi?id=232841
        rdar://85425930

        Reviewed by Darin Adler.

        This is the last clean-up in the FilterEffect code. It will make the 
        FilterEffect objects in the GPUProcess resemble exactly their counterpart
        ones in the WebProcess from now on.

        For CSSFilter, we do not need to set the input effects because every
        FilterFunction is the input of its successor. Passing the previous result
        FilterImage to the apply() method of the current FilterFunction is enough
        to get the filter applied correctly.

        For SVGFilter, we need the filter effect inputs only when building the
        SVGFilterExpression. So we can build a HashMap in SVGFilterBuilder which
        maps a FilterEffect to its input FilterEffectVector. To make the change
        clearer, the SVGFExxxElement classes will implement two methods:
        1. filterEffectInputsNames() which returns the names of the input FilterEffects.
        2. filterEffect() which returns the FilterEffect representing this element.
        SVGFilterBuilder::buildFilterEffects() converts the names to FilterEffects.

        No need to initialize the SourceGraphic of the referenced SVGFilter with
        the FilterEffect of its previous FilterFunction. The referenced SVGFilter
        will create its own native SourceGraphic. This SourceGraphic will copy
        the input FilterImage to the result FilterImage.

        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::inputEffect const): Deleted.
        * platform/graphics/filters/FilterEffect.h:
        (WebCore::FilterEffect::inputEffects): Deleted.
        * platform/graphics/filters/SourceAlpha.cpp:
        (WebCore::SourceAlpha::create):
        (WebCore::SourceAlpha::SourceAlpha):
        * platform/graphics/filters/SourceAlpha.h:
        * rendering/CSSFilter.cpp:
        (WebCore::createSVGFilter):
        (WebCore::CSSFilter::buildFilterFunctions):
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::applyResource):
        * rendering/svg/SVGRenderTreeAsText.cpp:
        (WebCore::writeSVGResourceContainer):
        * svg/SVGFEBlendElement.cpp:
        (WebCore::SVGFEBlendElement::filterEffect const):
        (WebCore::SVGFEBlendElement::build const): Deleted.
        * svg/SVGFEBlendElement.h:
        * svg/SVGFEColorMatrixElement.cpp:
        (WebCore::SVGFEColorMatrixElement::filterEffect const):
        (WebCore::SVGFEColorMatrixElement::build const): Deleted.
        * svg/SVGFEColorMatrixElement.h:
        * svg/SVGFEComponentTransferElement.cpp:
        (WebCore::SVGFEComponentTransferElement::filterEffect const):
        (WebCore::SVGFEComponentTransferElement::build const): Deleted.
        * svg/SVGFEComponentTransferElement.h:
        * svg/SVGFECompositeElement.cpp:
        (WebCore::SVGFECompositeElement::filterEffect const):
        (WebCore::SVGFECompositeElement::build const): Deleted.
        * svg/SVGFECompositeElement.h:
        * svg/SVGFEConvolveMatrixElement.cpp:
        (WebCore::SVGFEConvolveMatrixElement::filterEffect const):
        (WebCore::SVGFEConvolveMatrixElement::build const): Deleted.
        * svg/SVGFEConvolveMatrixElement.h:
        * svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::filterEffect const):
        (WebCore::SVGFEDiffuseLightingElement::build const): Deleted.
        * svg/SVGFEDiffuseLightingElement.h:
        * svg/SVGFEDisplacementMapElement.cpp:
        (WebCore::SVGFEDisplacementMapElement::filterEffect const):
        (WebCore::SVGFEDisplacementMapElement::build const): Deleted.
        * svg/SVGFEDisplacementMapElement.h:
        * svg/SVGFEDistantLightElement.cpp:
        (WebCore::SVGFEDistantLightElement::lightSource const):
        * svg/SVGFEDistantLightElement.h:
        * svg/SVGFEDropShadowElement.cpp:
        (WebCore::SVGFEDropShadowElement::filterEffect const):
        (WebCore::SVGFEDropShadowElement::build const): Deleted.
        * svg/SVGFEDropShadowElement.h:
        * svg/SVGFEFloodElement.cpp:
        (WebCore::SVGFEFloodElement::filterEffect const):
        (WebCore::SVGFEFloodElement::build const): Deleted.
        * svg/SVGFEFloodElement.h:
        * svg/SVGFEGaussianBlurElement.cpp:
        (WebCore::SVGFEGaussianBlurElement::filterEffect const):
        (WebCore::SVGFEGaussianBlurElement::build const): Deleted.
        * svg/SVGFEGaussianBlurElement.h:
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::filterEffect const):
        (WebCore::SVGFEImageElement::build const): Deleted.
        * svg/SVGFEImageElement.h:
        * svg/SVGFELightElement.h:
        * svg/SVGFEMergeElement.cpp:
        (WebCore::SVGFEMergeElement::filterEffectInputsNames const):
        (WebCore::SVGFEMergeElement::filterEffect const):
        (WebCore::SVGFEMergeElement::build const): Deleted.
        * svg/SVGFEMergeElement.h:
        * svg/SVGFEMorphologyElement.cpp:
        (WebCore::SVGFEMorphologyElement::filterEffect const):
        (WebCore::SVGFEMorphologyElement::build const): Deleted.
        * svg/SVGFEMorphologyElement.h:
        * svg/SVGFEOffsetElement.cpp:
        (WebCore::SVGFEOffsetElement::filterEffect const):
        (WebCore::SVGFEOffsetElement::build const): Deleted.
        * svg/SVGFEOffsetElement.h:
        * svg/SVGFEPointLightElement.cpp:
        (WebCore::SVGFEPointLightElement::lightSource const):
        * svg/SVGFEPointLightElement.h:
        * svg/SVGFESpecularLightingElement.cpp:
        (WebCore::SVGFESpecularLightingElement::filterEffect const):
        (WebCore::SVGFESpecularLightingElement::build const): Deleted.
        * svg/SVGFESpecularLightingElement.h:
        * svg/SVGFESpotLightElement.cpp:
        (WebCore::SVGFESpotLightElement::lightSource const):
        * svg/SVGFESpotLightElement.h:
        * svg/SVGFETileElement.cpp:
        (WebCore::SVGFETileElement::filterEffect const):
        (WebCore::SVGFETileElement::build const): Deleted.
        * svg/SVGFETileElement.h:
        * svg/SVGFETurbulenceElement.cpp:
        (WebCore::SVGFETurbulenceElement::filterEffect const):
        (WebCore::SVGFETurbulenceElement::build const): Deleted.
        * svg/SVGFETurbulenceElement.h:
        * svg/SVGFilterPrimitiveStandardAttributes.h:
        (WebCore::SVGFilterPrimitiveStandardAttributes::filterEffectInputsNames const):
        * svg/graphics/filters/SVGFilter.cpp:
        (WebCore::SVGFilter::create):
        * svg/graphics/filters/SVGFilter.h:
        * svg/graphics/filters/SVGFilterBuilder.cpp:
        (WebCore::SVGFilterBuilder::setupBuiltinEffects):
        (WebCore::SVGFilterBuilder::buildFilterEffects):
        (WebCore::SVGFilterBuilder::sourceGraphic const):
        (WebCore::SVGFilterBuilder::sourceAlpha const):
        (WebCore::SVGFilterBuilder::addNamedEffect):
        (WebCore::SVGFilterBuilder::namedEffect const):
        (WebCore::SVGFilterBuilder::namedEffects const):
        (WebCore::SVGFilterBuilder::setEffectInputs):
        (WebCore::SVGFilterBuilder::buildEffectExpression const):
        (WebCore::SVGFilterBuilder::add): Deleted.
        (WebCore::SVGFilterBuilder::getEffectById const): Deleted.
        * svg/graphics/filters/SVGFilterBuilder.h:

2022-01-11  Sam Weinig  <weinig@apple.com>

        Use the new template ColorSpaceCG helpers to cleanup some code
        https://bugs.webkit.org/show_bug.cgi?id=235034

        Reviewed by Cameron McCormack.

        Utilize the new template helpers in ColorSpaceCG.h to remove some #ifdefs.

        * platform/graphics/cg/ColorCG.cpp:
        (WebCore::cachedCGColorTransform):
        Add a singleton for this transform since it is always the same.

        (WebCore::Color::createAndLosslesslyConvertToSupportedColorSpace):
        (WebCore::convertToCGCompatibleComponents):
        (WebCore::createCGColor):
        (WebCore::platformConvertColorComponents):
        Replace #ifdefs with constexpr checking of HasCGColorSpaceMapping<>. Also switch
        some c-style arrays to std::array for consistency with the rest of the codebase.

        * platform/graphics/cg/GradientRendererCG.cpp:
        (WebCore::classifyAlphaType):
        Make constexpr (feedback from a previous change).

        (WebCore::GradientRendererCG::makeGradient const):
        (WebCore::GradientRendererCG::Shading::shadingFunction):
        (WebCore::GradientRendererCG::makeShading const):
        Replace #ifdefs with constexpr checking of HasCGColorSpaceMapping<>.

2022-01-11  Michael Saboff  <msaboff@apple.com>

        Fixed installhdr build failures in WebCore and WebKitLegacy
        https://bugs.webkit.org/show_bug.cgi?id=235059

        Reviewed by Filip Pizlo.

        Reworked how SYSTEM_CONTENT_PATH is added to values to the minimum that is required for the build system.
        Before this change, SYSTEM_CONTENT_PATH was added twice to some configuration variables due to is
        incorrectly being added to NORMAL_WEBCORE_FRAMEWORKS_DIR.

        Also refactored the computation of JAVASCRIPTCORE_PRIVATE_HEADERS_DIR to use the newly added
        INSTALL_PATH_PREFIX value.

        * Configurations/WebCore.xcconfig:

2022-01-11  Antoine Quint  <graouts@webkit.org>

        css/css-transitions/KeyframeEffect-setKeyframes.tentative.html is a failure
        https://bugs.webkit.org/show_bug.cgi?id=235062

        Reviewed by Dean Jackson.

        The WPT at css/css-transitions/KeyframeEffect-setKeyframes.tentative.html, which checks
        the behavior of programmatically changing keyframes for a CSS Transition, highlighted
        three failures:

        1. we did not flush pending style changes as setKeyframes() was called for an animation
           created fromm CSS (CSS Transition or CSS Animation),
        2. we did not use the style from the last style update to computed the before-change style
           if available, but rather the computed style generated _after_ the last style update,
        3. we did not apply _all_ animations as we compute the before-change style to consider
           new transitions to run, but only animations matching the current property.

        We've corrected all of those errors and this test now passes save for one failure, which
        seems to be a different type of problem and will be looked at in a future patch.

        * animation/KeyframeEffect.cpp:
        (WebCore::KeyframeEffect::setBindingsKeyframes):
        * style/Styleable.cpp:
        (WebCore::updateCSSTransitionsForStyleableAndProperty):

2022-01-11  Andres Gonzalez  <andresg_22@apple.com>

        Make [WebAccessibilityObjectWrapperBase axBackingObject] return the appropriate underlying object for the calling thread.
        https://bugs.webkit.org/show_bug.cgi?id=235046
        <rdar://problem/87358177>

        Reviewed by Chris Fleizach.

        In isolated tree mode, WebAccessibilityObjectWrapperBase axBackingObject
        can be called on and off the main thread. This change ensures that the
        AXIsolatedObject is always returned off the main thread, while the
        AXObejct is always returned on the main thread, which is the required
        behavior.

        * accessibility/mac/WebAccessibilityObjectWrapperBase.mm:
        (-[WebAccessibilityObjectWrapperBase axBackingObject]):

2022-01-11  Sam Weinig  <weinig@apple.com>

        Remove AppleTV specific disabling of conic gradients, its not necessary
        https://bugs.webkit.org/show_bug.cgi?id=235041

        Reviewed by Darin Adler.

        There doesn't seem to be any reason to disable conic gradients on AppleTV. We do still
        need to disable it on windows, but rather than hard coding this in WebCore, use a new
        HAVE macro to conditionalize the code.

        * platform/graphics/cg/GradientCG.cpp:
        (WebCore::Gradient::paint):
        * platform/graphics/cg/GradientRendererCG.cpp:
        (WebCore::GradientRendererCG::drawConicGradient):

2022-01-11  Tim Nguyen  <ntim@apple.com>

        ::backdrop pseudo element should react to associated element event listeners
        https://bugs.webkit.org/show_bug.cgi?id=233072

        Reviewed by Alan Bujtas.

        Test: imported/w3c/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/backdrop-receives-element-events.html

        We now append the ::backdrop renderer as a child of the top layer element, rather than a sibling of the
        top layer element. This gets hit testing working properly for free.

        We used to append the ::backdrop renderer as a sibling to get the proper layout, but this is no longer
        necessary after r287683 and r287845.

        * rendering/updating/RenderTreeUpdaterGeneratedContent.cpp:
        (WebCore::RenderTreeUpdater::GeneratedContent::updateBackdropRenderer):

2022-01-11  Adrian Perez de Castro  <aperez@igalia.com>

        Non-unified build fixes, early January 2022 edition
        https://bugs.webkit.org/show_bug.cgi?id=235013

        Unreviewed non-unified build fixes.

        No new tests needed.

        * Modules/fetch/FetchBodyConsumer.cpp: Add missing FormData.h header.
        * Modules/fetch/FormDataConsumer.h: Add missing ExceptionOr.h header, and forward
        declaration for the WebCore::ScriptExecutionContext type.
        * animation/CSSAnimation.cpp: Add missing KeyframeEffect.h header.
        * animation/KeyframeEffect.cpp: Add missing StyledElement.h header.
        * html/HTMLFormElement.cpp: Add missing PseudoClassChangeInvalidation.h header.
        * platform/network/SynchronousLoaderClient.cpp: Add missing SharedBuffer.h header.
        * rendering/svg/RenderSVGBlock.cpp: Add missing SVGRenderSupport.h header.
        * rendering/svg/RenderSVGForeignObject.cpp: Ditto.
        * rendering/svg/RenderSVGInline.cpp: Ditto.
        * rendering/svg/RenderSVGModelObject.cpp: Add missing SVGElementInlines.h header.
        * rendering/svg/SVGInlineTextBox.cpp: Add missing FloatConversion.h header.
        * svg/SVGViewElement.cpp: Add missing RenderElement.h header.
        * workers/service/context/ServiceWorkerFetch.h: Add missing forward declaration for the
        WebCore::SharedBuffer type, remove unused one for WebCore::FragmentedSharedBuffer.

2022-01-11  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][a11y] Web process crashes in some sites having SVG images
        https://bugs.webkit.org/show_bug.cgi?id=234737

        Reviewed by Adrian Perez de Castro.

        Unfortunately the changes in r287388 are not enough, it can still happen that root hasn't been set to the
        SVGImage page when the wrappers are created. So, we can't actually create the wrappers with a reference to the
        root object as we did in r286767. In most of the cases wrappers use the root just to get AccessibilityAtspi,
        which is not a singleton, but it's created and owned by the web process singleton at startup, so it can be
        accessed globaly. This patch makes AccessibilityAtspi a singleton to get the global instance without having to
        keep a reference in the root object.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::remoteSVGRootElement const): Move the code to set the root in SVGImage page
        before the remote svg wrapper is created.
        * accessibility/atspi/AXObjectCacheAtspi.cpp:
        (WebCore::AXObjectCache::attachWrapper): Just pass the page root object to the wrapper constructor, that now
        receives a pointer that might be nullptr.
        * accessibility/atspi/AccessibilityAtspi.cpp:
        (WebCore::AccessibilityAtspi::AccessibilityAtspi): Just create the WorkQueue.
        (WebCore::AccessibilityAtspi::singleton): Return a reference to the global instance.
        (WebCore::AccessibilityAtspi::connect): Connect to the given dbus address.
        (WebCore::AccessibilityAtspi::applicationReference const): This allows wrappers to get the application reference
        without having to check if m_root is nullptr or not.
        (WebCore::AccessibilityAtspi::parentChanged): Use AccessibilityObjectAtspi::isTreeRegistered()
        (WebCore::AccessibilityAtspi::childrenChanged): Ditto.
        * accessibility/atspi/AccessibilityAtspi.h:
        * accessibility/atspi/AccessibilityObjectAtspi.cpp:
        (WebCore::AccessibilityObjectAtspi::create): Receive a AccessibilityRootAtspi pointer instead of reference.
        (WebCore::AccessibilityObjectAtspi::AccessibilityObjectAtspi): Ditto.
        (WebCore::AccessibilityObjectAtspi::cacheDestroyed): Only call AccessibilityRootAtspi::childRemoved if parent is
        the root object.
        (WebCore::AccessibilityObjectAtspi::elementDestroyed): Null check m_root and use AccessibilityAtspi::singleton().
        (WebCore::AccessibilityObjectAtspi::root): Get the root if already set or try to get it from the page.
        (WebCore::AccessibilityObjectAtspi::isTreeRegistered const): Return try if root has been set and its tree has
        been registered.
        (WebCore::AccessibilityObjectAtspi::registerObject): Use AccessibilityObjectAtspi::root().
        (WebCore::AccessibilityObjectAtspi::reference): Use AccessibilityAtspi::singleton().
        (WebCore::AccessibilityObjectAtspi::hyperlinkReference): Ditto.
        (WebCore::AccessibilityObjectAtspi::setParent): Return early also if root hasn't been set yet.
        (WebCore::AccessibilityObjectAtspi::parentReference const): Use AccessibilityAtspi::singleton().
        (WebCore::AccessibilityObjectAtspi::serialize const): Ditto.
        (WebCore::AccessibilityObjectAtspi::childAdded): Ditto.
        (WebCore::AccessibilityObjectAtspi::childRemoved): Ditto.
        (WebCore::AccessibilityObjectAtspi::stateChanged): Ditto.
        (WebCore::AccessibilityObjectAtspi::loadEvent): Ditto.
        * accessibility/atspi/AccessibilityObjectAtspi.h:
        * accessibility/atspi/AccessibilityObjectComponentAtspi.cpp:
        * accessibility/atspi/AccessibilityObjectHyperlinkAtspi.cpp:
        * accessibility/atspi/AccessibilityObjectHypertextAtspi.cpp:
        * accessibility/atspi/AccessibilityObjectSelectionAtspi.cpp:
        (WebCore::AccessibilityObjectAtspi::selectionChanged): Ditto.
        * accessibility/atspi/AccessibilityObjectTableAtspi.cpp:
        * accessibility/atspi/AccessibilityObjectTableCellAtspi.cpp:
        * accessibility/atspi/AccessibilityObjectTextAtspi.cpp:
        (WebCore::AccessibilityObjectAtspi::textInserted): Ditto.
        (WebCore::AccessibilityObjectAtspi::textDeleted): Ditto.
        (WebCore::AccessibilityObjectAtspi::selectionChanged): Ditto.
        (WebCore::AccessibilityObjectAtspi::textAttributesChanged): Ditto.
        * accessibility/atspi/AccessibilityObjectValueAtspi.cpp:
        (WebCore::AccessibilityObjectAtspi::valueChanged): Ditto.
        * accessibility/atspi/AccessibilityRootAtspi.cpp:
        (WebCore::AccessibilityRootAtspi::create): Remove AccessibilityAtspi parameter.
        (WebCore::AccessibilityRootAtspi::AccessibilityRootAtspi): Ditto.
        (WebCore::AccessibilityRootAtspi::registerObject): Use AccessibilityAtspi::singleton().
        (WebCore::AccessibilityRootAtspi::unregisterObject): Ditto
        (WebCore::AccessibilityRootAtspi::embedded): Ditto.
        (WebCore::AccessibilityRootAtspi::applicationReference const): Ditto.
        (WebCore::AccessibilityRootAtspi::reference const): Ditto.
        (WebCore::AccessibilityRootAtspi::childAdded): Ditto.
        (WebCore::AccessibilityRootAtspi::childRemoved): Ditto.
        (WebCore::AccessibilityRootAtspi::serialize const): Ditto.
        * accessibility/atspi/AccessibilityRootAtspi.h:

2022-01-11  Martin Robinson  <mrobinson@webkit.org>

        Some css-transforms tests assert in debug
        https://bugs.webkit.org/show_bug.cgi?id=230079
        <rdar://problem/83179970>

        Reviewed by Simon Fraser.

        No new tests. This is covered by existing WPT tests. This change fixes
        five assertions and one test completely. In addition, it leads to progressions,
        but not complete fixes, in the four remaining tests.

        Table elements, which can be transformed, were not properly forming containing blocks
        for fixed and absolutely positioned elements.

        * rendering/RenderElement.h:
        (WebCore::RenderElement::canContainFixedPositionObjects const): Return true even when
        we have a transformed element that is not a block.
        (WebCore::RenderElement::canContainAbsolutelyPositionedObjects const): Ditto.
        (WebCore::RenderElement::isTransformable const): Added this helper which returns whether
        not SVG elements are transformable. Eventually this should be extended to handle SVG
        elements as well.

2022-01-11  Nikolas Zimmermann  <nzimmermann@igalia.com>

        [LBSE] Introduce SVGBoundingBoxComputation
        https://bugs.webkit.org/show_bug.cgi?id=234632
        <rdar://problem/87001334>

        Reviewed by Rob Buis.

        Upstream SVGBoundingBoxComputation, a utility class
        implementing the SVG2 "bounding box computation" algorithm,
        as spec'ed in https://svgwg.org/svg2-draft/coords.html#BoundingBoxes.

        SVG2 also specifies a new optional argument for getBBox() & friends:
        DOMRect getBBox(optional SVGBoundingBoxOptions options = {});

        SVGBoundingBoxOptions can be implemented using SVGBoundingBoxComputation:
        exposing this to the Web is left for the future, once more of LBSE is ready.

        LBSE utilizes SVGBoundingBoxComputation whenever any kind of bounding box
        needs to be computed (object / stroke / decorated (e.g. including markers).

        Covered by existing tests, no change in behaviour.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/svg/LegacyRenderSVGModelObject.h:
        (WebCore::LegacyRenderSVGModelObject::visualOverflowRectEquivalent const): Deleted.
        * rendering/svg/RenderSVGModelObject.h:
        (WebCore::RenderSVGModelObject::visualOverflowRectEquivalent const):
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::layout):
        * rendering/svg/RenderSVGRoot.h:
        * rendering/svg/SVGBoundingBoxComputation.cpp: Added.
        (WebCore::SVGBoundingBoxComputation::SVGBoundingBoxComputation):
        (WebCore::SVGBoundingBoxComputation::~SVGBoundingBoxComputation):
        (WebCore::SVGBoundingBoxComputation::computeDecoratedBoundingBox const):
        (WebCore::SVGBoundingBoxComputation::handleShapeOrTextOrInline const):
        (WebCore::SVGBoundingBoxComputation::handleRootOrContainer const):
        (WebCore::SVGBoundingBoxComputation::handleForeignObjectOrImage const):
        (WebCore::SVGBoundingBoxComputation::adjustBoxForClippingAndEffects const):
        * rendering/svg/SVGBoundingBoxComputation.h: Added.
        (WebCore::SVGBoundingBoxComputation::computeDecoratedBoundingBox):
        (WebCore::SVGBoundingBoxComputation::computeRepaintBoundingBox):
        (WebCore::SVGBoundingBoxComputation::computeVisualOverflowRect):

2022-01-11  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][a11y] WTR: do not immediately process main thread events while waiting for ax thread task
        https://bugs.webkit.org/show_bug.cgi?id=234950

        Reviewed by Adrian Perez de Castro.

        Run a layout before creating the isolated tree to ensure we get an updated tree after ignored is computed.

        * accessibility/isolatedtree/AXIsolatedTree.cpp:
        (WebCore::AXIsolatedTree::create):

2022-01-11  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][a11y] Set active state when element is the selected option active or aria-current isn't false with ATSPI
        https://bugs.webkit.org/show_bug.cgi?id=235029

        Reviewed by Adrian Perez de Castro.

        * accessibility/atspi/AXObjectCacheAtspi.cpp:
        (WebCore::AXObjectCache::postPlatformNotification):
        * accessibility/atspi/AccessibilityObjectAtspi.cpp:
        (WebCore::AccessibilityObjectAtspi::state const):

2022-01-10  Yusuke Suzuki  <ysuzuki@apple.com>

        Fix Windows build after r287829
        https://bugs.webkit.org/show_bug.cgi?id=235054

        Reviewed by Sam Weinig.

        FTW removal accidentally removed RECT handling in FloatRect while it is not a part of Direct2D.
        This patch recovers it. And we also use IntRect in some places since it is proper one.

        * PlatformWin.cmake:
        * platform/graphics/FloatRect.h:
        * platform/graphics/win/FloatRectWin.cpp: Copied from Source/WebCore/platform/graphics/win/IntRectWin.cpp.
        (WebCore::FloatRect::FloatRect):
        * platform/graphics/win/IntRectWin.cpp:
        (WebCore::IntRect::IntRect):
        (WebCore::IntRect::operator RECT const):
        * platform/win/PopupMenuWin.cpp:
        (WebCore::monitorFromHwnd):
        (WebCore::PopupMenuWin::calculatePositionAndSize):

2022-01-10  Alan Bujtas  <zalan@apple.com>

        null ptr deref in WebCore::LayoutIntegration::LineLayout::collectOverflow()
        https://bugs.webkit.org/show_bug.cgi?id=234654
        <rdar://problem/86571571>

        Reviewed by Antti Koivisto.

        needsLayout() check in invalidateLineLayoutPath is insufficient for modern line layout.

        m_lineLayout = std::monostate() does not only destroy the line layout object but it also nukes all the IFC geometries.
        It is equivalent to having all the child boxes dirty, since in order to re-generate the geometry information,
        we have to layout _all_ the boxes (note that nuking the legacy line layout object does not destroy the inline tree).
        The bug here is that needsLayout() returns true for cases (e.g. posChildNeedsLayout) when
        while the geometry is all gone, we are going to take a special layout codepath which expects pre-computed geometries.

        Test: fast/block/line-layout/line-layout-collect-overflow-crash.html

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::invalidateLineLayoutPath):

2022-01-10  Wenson Hsieh  <wenson_hsieh@apple.com>

        Followup to r287863 - adjust line wrapping behavior in image overlays
        https://bugs.webkit.org/show_bug.cgi?id=235035
        rdar://85139146

        Reviewed by Tim Horton.

        The previous change I landed in r287863 was written under the assumption that `-shouldWrap` describes whether or
        not a recognized line of text should wrap to the next line. However, after trying it out, it seems to indicate
        whether or not the previous line of text should wrap to the current line. As a result, the current adoption of
        this property is wrong, since the line wrapping is off-by-one.

        Fix this by renaming the `shouldWrap` boolean flag in TextRecognitionLineData to the much less ambiguous name
        `hasTrailingNewline`, and set `hasTrailingNewline` based on the `shouldWrap` property of the *next*
        VKWKLineInfo.

        * dom/ImageOverlay.cpp:
        (WebCore::ImageOverlay::updateSubtree):

        Avoid a potentially even-more-confusing `!= !!` here by using `static_cast<>` to check the nullity of the
        `RefPtr`.

        * platform/TextRecognitionResult.h:
        (WebCore::TextRecognitionLineData::TextRecognitionLineData):
        (WebCore::TextRecognitionLineData::encode const):
        (WebCore::TextRecognitionLineData::decode):

        Make sure we also flip the default from `false` to `true`, since `hasTrailingNewline` is intended to have the
        opposite effect as the extant `shouldWrap`.

        * testing/Internals.cpp:
        (WebCore::makeDataForLine):
        * testing/Internals.h:
        * testing/Internals.idl:

2022-01-10  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add support for a -shouldWrap property when injecting Live Text
        https://bugs.webkit.org/show_bug.cgi?id=235035
        rdar://85139146

        Reviewed by Tim Horton.

        Add support for a new property on VKWKLineInfo to indicate whether or not the line should wrap. If set to true,
        we will avoid adding a `br` element at the end of the `div.image-overlay-line` that corresponds to the line of
        recognized text in the image overlay; currently, we always add this trailing `br`.

        Test: fast/images/text-recognition/image-overlay-line-wrapping.html

        * dom/ImageOverlay.cpp:
        (WebCore::ImageOverlay::updateSubtree):

        Consult the flag when converting each TextRecognitionLineData into shadow DOM elements.

        * platform/TextRecognitionResult.h:

        Add the new boolean flag to TextRecognitionLineData, and add encoding/decoding support.

        (WebCore::TextRecognitionLineData::TextRecognitionLineData):
        (WebCore::TextRecognitionLineData::encode const):
        (WebCore::TextRecognitionLineData::decode):
        * testing/Internals.cpp:
        (WebCore::makeDataForLine):

        Add a way to specify a value for `shouldWrap`, when using `internals` to inject image overlay content in layout
        and API tests.

        * testing/Internals.h:
        * testing/Internals.idl:

2022-01-10  Eric Carlson  <eric.carlson@apple.com>

        hasBrokenEncryptedMediaAPISupportQuirk and needsPreloadAutoQuirk have overly permissive domain allow lists
        https://bugs.webkit.org/show_bug.cgi?id=222130
        <rdar://problem/74758560>

        Unreviewed, fix typo introduced in r287855.

        * page/Quirks.cpp:
        (WebCore::Quirks::needsPreloadAutoQuirk const): "vimeo" should be "vimeo.com".

2022-01-10  Wenson Hsieh  <wenson_hsieh@apple.com>

        Modal container observer should classify elements that are styled like clickable controls
        https://bugs.webkit.org/show_bug.cgi?id=235022

        Reviewed by Tim Horton.

        Broaden the criteria when considering whether or not an element inside of a detected modal container is a
        "clickable control". In the case where there are event listeners on the modal container, an element inside of
        the modal container that has `cursor: pointer;` may trigger an action on the modal container when clicked, even
        if it does not have event listeners itself. Handle this scenario by considering the element to be a "clickable
        control", and extract text from the element for the purposes of control classification.

        Test: ModalContainerObservation.DetectControlsWithEventListenersOnModalContainer

        * page/ModalContainerObserver.cpp:
        (WebCore::listensToUserActivation):

        Factor out this logic into a separate helper function.

        (WebCore::isClickableControl):
        (WebCore::ModalContainerObserver::collectClickableElements):

2022-01-10  Eric Carlson  <eric.carlson@apple.com>

        hasBrokenEncryptedMediaAPISupportQuirk and needsPreloadAutoQuirk have overly
        permissive domain allow lists
        https://bugs.webkit.org/show_bug.cgi?id=222130
        <rdar://problem/74758560>

        Reviewed by Jer Noble.

        Fix quirk tests for subdomains of vimeo and hulu by using RegistrableDomain instead
        of testing the url directly.

        * page/Quirks.cpp:
        (WebCore::Quirks::hasBrokenEncryptedMediaAPISupportQuirk const):
        (WebCore::Quirks::needsPreloadAutoQuirk const):

2022-01-10  Chris Dumez  <cdumez@apple.com>

        https://brianpeiris.github.io/spatial-audio-test/?ramped stops playing after a few seconds
        https://bugs.webkit.org/show_bug.cgi?id=234979

        Reviewed by Eric Carlson.

        In ConeEffect::gain(), due to precision issues and with certain panner node parameters, it was possible for
        `sourceToListener.dot(sourceOrientation)` to return a value that is very slightly outside the [-1.0, 1.0]
        range. We would then call `acos()` on the dot product and it would thus return NaN.

        To addresss this, we now make sure the clamp the dot product to the expected range before calling acos().

        I also made the following stylistic changes:
        - Drop unnecessary normalizedSourceOrientation local variable since the sourceOrientation paramter is not const
        - Add missing curly brackets in if conditions with more than one lines (due to comments)
        - Call rad2deg() for readability instead of duplicating its logic here

        Test: webaudio/Panner/panner-cone-gain-nan.html

        * platform/audio/Cone.cpp:
        (WebCore::ConeEffect::gain const):

2022-01-10  Wenson Hsieh  <wenson_hsieh@apple.com>

        Modal container observer fails detection when rendered text is inserted after the container
        https://bugs.webkit.org/show_bug.cgi?id=234752
        rdar://87200177

        Reviewed by Tim Horton.

        Teach ModalContainerObserver to detect modal containers whose text content is set by script after the container
        element itself has already been inserted into the document and laid out. See below for more details.

        Test: ModalContainerObservation.DetectModalContainerAfterSettingText

        * page/ModalContainerObserver.cpp:
        (WebCore::searchForMatch):

        Change this to return two `bool`s: one indicating whether a match was found (i.e. the original return value),
        and another indicating whether any rendered text was discovered in the process of searching. In the case where
        the viewport-constrained element did not contain any rendered text at all, we avoid adding the element to the
        `m_elementsToIgnoreWhenSearching` set, thereby allowing us to search it again in the future.

        (WebCore::ModalContainerObserver::updateModalContainerIfNeeded):
        (WebCore::containsMatchingText): Deleted.

2022-01-10  Alex Christensen  <achristensen@webkit.org>

        Start using C++20
        https://bugs.webkit.org/show_bug.cgi?id=233963

        Reviewed by Yusuke Suzuki.

        * Configurations/Base.xcconfig:
        * DerivedSources.make:
        * platform/graphics/cocoa/IOSurface.mm:
        (WebCore::IOSurface::ensurePlatformContext):
        * platform/ios/wak/WebCoreThread.mm:

2022-01-10  Cathie Chen  <cathiechen@igalia.com>

        ASSERTION FAILED in RenderLayer::updateClipRects
        https://bugs.webkit.org/show_bug.cgi?id=234315

        Reviewed by Simon Fraser.

        In clippingRootForPainting(), the dialog element uses the top layer as its clipping root layer.
        When it caculates the clip rects, it caculates all its ancestors' clip rects and caches them
        including the clipping root layer. However, if the ancestor is a transformed layer, it should be
        treated as a root layer. When the transformed layer updates its clip rects, the root layer won't
        match the one in cache. This patch stops the dialog descendant propagating its clipping root layer
        to the ancestors' in cache.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::clipCrossesPaintingBoundary const):

2022-01-10  Tim Nguyen  <ntim@apple.com>

        REGRESSION(r287683): <dialog> elements inside clipped/overflowed elements are no longer shown
        https://bugs.webkit.org/show_bug.cgi?id=234984

        Reviewed by Simon Fraser.

        Paint at the right place by fixing isContainerForPositioned, also fix clip rects.

        * rendering/RenderLayer.cpp:
        (WebCore::isContainerForPositioned):
        (WebCore::RenderLayer::enclosingAncestorForPosition const):
        (WebCore::accumulateOffsetTowardsAncestor):
        (WebCore::RenderLayer::calculateClipRects const):

2022-01-10  Sam Weinig  <weinig@apple.com>

        [CSS Color 4] CSS color() function should not clamp channels to the 0-1 range
        https://bugs.webkit.org/show_bug.cgi?id=234697

        Reviewed by Darin Adler.

        Allow components outside the the 0-1 range for RGB color function types (e.g. color(srgb -2 15 100)).

        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::parseColorFunctionForRGBTypes):
        Remove clamping when parsing RGB color function types (we still clamp for legacy rgb()/rgba() as specified).

        (WebCore::CSSPropertyParserHelpers::parseRelativeColorFunctionParameters):
        (WebCore::CSSPropertyParserHelpers::parseNonRelativeColorFunctionParameters):
        Switch mapping of RGB color function types to their extended counterparts which allow the extended range.
 
        * platform/graphics/ColorInterpolationMethod.h:
        Switch the RGB interpolation color types to the extended counterparts as well to allow out of gamut mixing. 

2022-01-10  Antoine Quint  <graouts@webkit.org>

        [Web Animations] getKeyframes() for a CSS Animation should not use computed style for keyframes (part 2)
        https://bugs.webkit.org/show_bug.cgi?id=235028

        Reviewed by Antti Koivisto.

        In bug 235008, we already improved the situtation by reading from the StyleProperties
        associated with the StyleRuleKeyframe for CSS Animations. We're now taking the next
        step by reading from the matching rules for the provided element.

        There is one remaining case where we use the computed style: when the CSSValue uses
        a CSS variable. To fix the css/css-animations/KeyframeEffect-getKeyframes.tentative.html
        WPT entirely, we'll need to be able to substitute those in the output.

        * animation/KeyframeEffect.cpp:
        (WebCore::KeyframeEffect::getKeyframes):

2022-01-10  Nikolas Zimmermann  <nzimmermann@igalia.com>

        [LBSE] Begin layer-aware RenderSVGRect implementation
        https://bugs.webkit.org/show_bug.cgi?id=234992

        Reviewed by Rob Buis.

        Create RenderSVGRect as copy of LegacyRenderSVGRect, inheriting from
        RenderSVGShape (and thus RenderLayerModelObject) instead of
        LegacyRenderSVGShape, as LegacyRenderSVGRect does.

        This patch does not yet enable the creation of RenderSVGRect
        renderers if LBSE is enabled, this is postponed until more
        functionality is fully available in LBSE (such as layout!).

        Covered by existing tests, no change in behaviour.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/svg/LegacyRenderSVGModelObject.cpp:
        (WebCore::LegacyRenderSVGModelObject::clippedOverflowRect const):
        (WebCore::LegacyRenderSVGModelObject::nodeAtPoint):
        * rendering/svg/RenderSVGRect.cpp: Added.
        (WebCore::RenderSVGRect::RenderSVGRect):
        (WebCore::RenderSVGRect::rectElement const):
        (WebCore::RenderSVGRect::updateShapeFromElement):
        (WebCore::RenderSVGRect::fillShape const):
        (WebCore::RenderSVGRect::strokeShape const):
        (WebCore::RenderSVGRect::shapeDependentStrokeContains):
        (WebCore::RenderSVGRect::shapeDependentFillContains const):
        (WebCore::RenderSVGRect::isRenderingDisabled const):
        * rendering/svg/RenderSVGRect.h: Added.
        * rendering/svg/SVGResources.cpp:
        * svg/SVGRectElement.cpp:
        (WebCore::SVGRectElement::createElementRenderer):

2022-01-10  Nikolas Zimmermann  <nzimmermann@igalia.com>

        [LBSE] Begin layer-aware RenderSVGShape implementation
        https://bugs.webkit.org/show_bug.cgi?id=234954

        Reviewed by Rob Buis.

        Begin implementing RenderSVGShape, based on the downstream version in the
        LBSE branch. Many parts are 1:1 copies from LegacyRenderSVGShape, although
        the core methods for layout / paint / hit-testing looks quite different in
        RenderSVGShape -- the code is mostly adapted from layer-aware CSS renderers
        such as RenderBox / RenderBlock taking SVG specifics into account.

        This patch hooks in RenderSVGShape in all places that used to handle
        LegacyRenderSVGShape, e.g. in AccessibilityRenderObject. However no
        renderer inherits from RenderSVGShape yet -- a follow-up patch will
        introduce RenderSVGRect.

        Covered by existing tests, no change in behaviour.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::supportsPath const):
        (WebCore::AccessibilityRenderObject::elementPath const):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::write):
        * rendering/svg/RenderSVGResource.cpp:
        (WebCore::RenderSVGResource::fillAndStrokePathOrShape const):
        * rendering/svg/RenderSVGResource.h:
        (WebCore::RenderSVGResource::postApplyResource):
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::postApplyResource):
        * rendering/svg/RenderSVGResourceFilter.h:
        * rendering/svg/RenderSVGResourceGradient.cpp:
        (WebCore::RenderSVGResourceGradient::postApplyResource):
        * rendering/svg/RenderSVGResourceGradient.h:
        * rendering/svg/RenderSVGResourcePattern.cpp:
        (WebCore::RenderSVGResourcePattern::postApplyResource):
        * rendering/svg/RenderSVGResourcePattern.h:
        * rendering/svg/RenderSVGResourceSolidColor.cpp:
        (WebCore::RenderSVGResourceSolidColor::postApplyResource):
        * rendering/svg/RenderSVGResourceSolidColor.h:
        * rendering/svg/RenderSVGShape.cpp: Added.
        (WebCore::RenderSVGShape::RenderSVGShape):
        (WebCore::RenderSVGShape::updateShapeFromElement):
        (WebCore::RenderSVGShape::isEmpty const):
        (WebCore::RenderSVGShape::fillShape const):
        (WebCore::RenderSVGShape::strokeShape const):
        (WebCore::RenderSVGShape::shapeDependentStrokeContains):
        (WebCore::RenderSVGShape::shapeDependentFillContains const):
        (WebCore::RenderSVGShape::fillContains):
        (WebCore::RenderSVGShape::strokeContains):
        (WebCore::RenderSVGShape::layout):
        (WebCore::RenderSVGShape::nonScalingStrokePath const):
        (WebCore::RenderSVGShape::setupNonScalingStrokeContext):
        (WebCore::RenderSVGShape::nonScalingStrokeTransform const):
        (WebCore::RenderSVGShape::shouldGenerateMarkerPositions const):
        (WebCore::RenderSVGShape::fillShape):
        (WebCore::RenderSVGShape::strokeShape):
        (WebCore::RenderSVGShape::fillStrokeMarkers):
        (WebCore::RenderSVGShape::paint):
        (WebCore::RenderSVGShape::isPointInFill):
        (WebCore::RenderSVGShape::isPointInStroke):
        (WebCore::RenderSVGShape::getTotalLength const):
        (WebCore::RenderSVGShape::getPointAtLength const):
        (WebCore::RenderSVGShape::nodeAtPoint):
        (WebCore::markerForType):
        (WebCore::RenderSVGShape::computeMarkerBoundingBox const):
        (WebCore::RenderSVGShape::calculateObjectBoundingBox const):
        (WebCore::RenderSVGShape::calculateStrokeBoundingBox const):
        (WebCore::RenderSVGShape::strokeWidth const):
        (WebCore::RenderSVGShape::hasSmoothStroke const):
        (WebCore::RenderSVGShape::drawMarkers):
        (WebCore::RenderSVGShape::createPath const):
        (WebCore::RenderSVGShape::processMarkerPositions):
        (WebCore::RenderSVGShape::styleWillChange):
        * rendering/svg/RenderSVGShape.h: Added.
        (WebCore::RenderSVGShape::setNeedsShapeUpdate):
        (WebCore::RenderSVGShape::hasPath const):
        (WebCore::RenderSVGShape::path const):
        (WebCore::RenderSVGShape::clearPath):
        (WebCore::RenderSVGShape::hasNonScalingStroke const):
        * rendering/svg/RenderSVGShapeInlines.h: Added.
        (WebCore::RenderSVGShape::graphicsElement const):
        * rendering/svg/SVGRenderSupport.cpp:
        * rendering/svg/SVGRenderTreeAsText.cpp:
        (WebCore::writeSVGPaintingResource):
        (WebCore::writeSVGFillPaintingResource):
        (WebCore::writeSVGStrokePaintingResource):
        (WebCore::writeStyle):
        (WebCore::writeSVGGraphicsElement):
        (WebCore::operator<<):
        (WebCore::write):
        * rendering/svg/SVGRenderTreeAsText.h:
        * svg/SVGAnimateMotionElement.cpp:
        * svg/SVGGeometryElement.cpp:
        (WebCore::SVGGeometryElement::getTotalLength const):
        (WebCore::SVGGeometryElement::getPointAtLength const):
        (WebCore::SVGGeometryElement::isPointInFill):
        (WebCore::SVGGeometryElement::isPointInStroke):
        * svg/SVGLineElement.cpp:

2022-01-09  Sam Weinig  <weinig@apple.com>

        Remove support for Direct2D / FTW
        https://bugs.webkit.org/show_bug.cgi?id=234999

        Reviewed by Darin Adler.

        Direct2D and FTW have not been building for over a year. It is
        time to remove them.

        * PlatformAppleWin.cmake:
        * PlatformFTW.cmake: Removed.
        * PlatformWin.cmake:
        * page/CaptionUserPreferencesMediaAF.cpp:
        * page/CaptionUserPreferencesMediaAF.h:
        * page/win/FrameWinDirect2D.cpp: Removed.
        * platform/MIMETypeRegistry.cpp:
        (WebCore::MIMETypeRegistry::createMIMETypeRegistryThreadGlobalData):
        * platform/graphics/BifurcatedGraphicsContext.cpp:
        * platform/graphics/BifurcatedGraphicsContext.h:
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::frameImageAtIndexCacheIfNeeded):
        (WebCore::BitmapImage::nativeImage):
        (WebCore::BitmapImage::nativeImageForCurrentFrame):
        (WebCore::BitmapImage::preTransformedNativeImageForCurrentFrame):
        (WebCore::BitmapImage::nativeImageOfSize):
        (WebCore::BitmapImage::draw):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/Font.h:
        * platform/graphics/FontPlatformData.h:
        (WebCore::FontPlatformData::dwFont const): Deleted.
        (WebCore::FontPlatformData::dwFontFace const): Deleted.
        * platform/graphics/Gradient.h:
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/Image.h:
        (WebCore::Image::nativeImage):
        (WebCore::Image::nativeImageForCurrentFrame):
        (WebCore::Image::preTransformedNativeImageForCurrentFrame):
        (WebCore::Image::nativeImageOfSize):
        * platform/graphics/ImageDecoder.cpp:
        (WebCore::ImageDecoder::create):
        (WebCore::ImageDecoder::supportsMediaType):
        * platform/graphics/ImageDecoder.h:
        * platform/graphics/ImageSource.cpp:
        (WebCore::ImageSource::setTargetContext): Deleted.
        * platform/graphics/ImageSource.h:
        * platform/graphics/NullGraphicsContext.h:
        * platform/graphics/Path.cpp:
        (WebCore::Path::length const):
        (WebCore::Path::addRoundedRect):
        * platform/graphics/Path.h:
        * platform/graphics/Pattern.h:
        * platform/graphics/PlatformImage.h:
        * platform/graphics/PlatformImageBuffer.h:
        * platform/graphics/PlatformImageBufferBackend.h:
        * platform/graphics/avfoundation/cf/CDMSessionAVFoundationCF.cpp:
        (WebCore::CDMSessionAVFoundationCF::generateKeyRequest):
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::MediaPlayerPrivateAVFoundationCF::paint):
        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::PDFDocumentImage::drawPDFPage):
        * platform/graphics/displaylists/DisplayListRecorder.h:
        * platform/graphics/opentype/OpenTypeMathData.cpp:
        (WebCore::OpenTypeMathData::OpenTypeMathData):
        * platform/graphics/opentype/OpenTypeUtilities.cpp:
        (WebCore::renameAndActivateFont):
        * platform/graphics/texmap/BitmapTexture.cpp:
        (WebCore::BitmapTexture::updateContents):
        * platform/graphics/texmap/BitmapTextureGL.cpp:
        (WebCore::BitmapTextureGL::updateContents):
        * platform/graphics/win/BackingStoreBackendDirect2D.h: Removed.
        * platform/graphics/win/BackingStoreBackendDirect2DImpl.cpp: Removed.
        * platform/graphics/win/BackingStoreBackendDirect2DImpl.h: Removed.
        * platform/graphics/win/ColorDirect2D.cpp: Removed.
        * platform/graphics/win/ComplexTextControllerDirectWrite.cpp: Removed.
        * platform/graphics/win/ComplexTextControllerUniscribe.cpp:
        * platform/graphics/win/Direct2DOperations.cpp: Removed.
        * platform/graphics/win/Direct2DOperations.h: Removed.
        * platform/graphics/win/Direct2DUtilities.cpp: Removed.
        * platform/graphics/win/Direct2DUtilities.h: Removed.
        * platform/graphics/win/DirectWriteUtilities.cpp: Removed.
        * platform/graphics/win/DirectWriteUtilities.h: Removed.
        * platform/graphics/win/FloatPointDirect2D.cpp: Removed.
        * platform/graphics/win/FloatRectDirect2D.cpp: Removed.
        * platform/graphics/win/FloatSizeDirect2D.cpp: Removed.
        * platform/graphics/win/FontCascadeDirect2D.cpp: Removed.
        * platform/graphics/win/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/win/FontPlatformDataDirect2D.cpp: Removed.
        * platform/graphics/win/GlyphPageTreeNodeDirect2D.cpp: Removed.
        * platform/graphics/win/GradientDirect2D.cpp: Removed.
        * platform/graphics/win/GraphicsContextDirect2D.cpp: Removed.
        * platform/graphics/win/GraphicsContextGLDirect2D.cpp: Removed.
        * platform/graphics/win/GraphicsContextPlatformPrivateDirect2D.h: Removed.
        * platform/graphics/win/GraphicsContextWin.cpp:
        * platform/graphics/win/GraphicsContextWin.h:
        * platform/graphics/win/GraphicsLayerDirect2D.cpp: Removed.
        * platform/graphics/win/GraphicsLayerDirect2D.h: Removed.
        * platform/graphics/win/ImageBufferDirect2DBackend.cpp: Removed.
        * platform/graphics/win/ImageBufferDirect2DBackend.h: Removed.
        * platform/graphics/win/ImageDecoderDirect2D.cpp: Removed.
        * platform/graphics/win/ImageDecoderDirect2D.h: Removed.
        * platform/graphics/win/ImageDirect2D.cpp: Removed.
        * platform/graphics/win/NativeImageDirect2D.cpp: Removed.
        * platform/graphics/win/PathDirect2D.cpp: Removed.
        * platform/graphics/win/PatternDirect2D.cpp: Removed.
        * platform/graphics/win/PlatformContextDirect2D.cpp: Removed.
        * platform/graphics/win/PlatformContextDirect2D.h: Removed.
        * platform/graphics/win/SimpleFontDataDirect2D.cpp: Removed.
        * platform/graphics/win/TextAnalyzerHelper.cpp: Removed.
        * platform/graphics/win/TextAnalyzerHelper.h: Removed.
        * platform/graphics/win/TransformationMatrixDirect2D.cpp: Removed.
        * platform/win/DragImageDirect2D.cpp: Removed.
        * rendering/RenderLayerFilters.cpp:
        (WebCore::RenderLayerFilters::allocateBackingStoreIfNeeded):
        (WebCore::RenderLayerFilters::beginFilterEffect):
        * rendering/RenderLayerFilters.h:
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::applyResource):
        * rendering/svg/RenderSVGResourceMasker.cpp:
        (WebCore::RenderSVGResourceMasker::applyResource):
        * rendering/svg/SVGRenderingContext.cpp:
        (WebCore::SVGRenderingContext::createImageBuffer):
        * rendering/svg/SVGRenderingContext.h:
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::nativeImageForCurrentFrame):
        (WebCore::SVGImage::nativeImage):
        * svg/graphics/SVGImage.h:
        * svg/graphics/SVGImageForContainer.cpp:
        (WebCore::SVGImageForContainer::nativeImageForCurrentFrame):
        * svg/graphics/SVGImageForContainer.h:

2022-01-09  Antoine Quint  <graouts@webkit.org>

        Style::Resolver::keyframeRulesForName() signature should be improved
        https://bugs.webkit.org/show_bug.cgi?id=235021

        Reviewed by Darin Adler.

        Darin pointed out during the review for bug 235008 that the method itself
        should be const, not its return value.

        * style/StyleResolver.cpp:
        (WebCore::Style::Resolver::keyframeRulesForName const):
        (WebCore::Style::Resolver::keyframeRulesForName): Deleted.
        * style/StyleResolver.h:

2022-01-09  Antoine Quint  <graouts@webkit.org>

        Implicit keyframe for a CSS Animation should always use the underlying style
        https://bugs.webkit.org/show_bug.cgi?id=235014

        Reviewed by Antti Koivisto.

        When resolving keyframes for a CSS Animation in Style::Resolver::keyframeStylesForAnimation(),
        we would fill implicit keyframes based on the style at the time the animation was created.
        However, the underlying style may change at any point while the CSS Animation is in flight,
        so we should not be filling those values.

        The code that actually resolves animated styles already knows how to handle this case, which
        we already supported correctly for JS-originated animations. The only thing we need to do is
        to ensure we fill implicit keyframes when calling getKeyframes().

        This surfaced an issue with KeyframeList::copyKeyframes() where we only copied the styles
        from one set of keyframes to another, but not the timing function, which would cause a
        getKeyframes() test to regress. We should also make sure to copy the composite operation
        for when we support the animation-composition property (see bug 232086).

        Test: imported/w3c/web-platform-tests/css/css-animations/animation-change-underlying-value-changed-in-flight.html

        * animation/KeyframeEffect.cpp:
        (WebCore::KeyframeEffect::getKeyframes):
        * rendering/style/KeyframeList.cpp:
        (WebCore::KeyframeList::copyKeyframes):
        * style/StyleResolver.cpp:
        (WebCore::Style::Resolver::keyframeStylesForAnimation):

2022-01-09  Antoine Quint  <graouts@webkit.org>

        Interpolation for the "filter" property fails with a single keyframe
        https://bugs.webkit.org/show_bug.cgi?id=235019

        Reviewed by Dean Jackson.

        In the case of an animation with a single keyframe, the 0% or 100% value (or both) may
        be implicit and the blending keyframes can have fewer than to entries. This would make
        KeyframeEffect::checkForMatchingFilterFunctionLists() always store "false" values for
        whether "filter" values in keyframes match and prevent any blending from happening.

        In the case where we have fewer than 2 values, as long as the property is animated,
        we return true.

        * animation/KeyframeEffect.cpp:
        (WebCore::KeyframeEffect::checkForMatchingFilterFunctionLists const):

2022-01-09  Sam Weinig  <weinig@apple.com>

        Refactor CSS property parsing helpers to be a bit more composable
        https://bugs.webkit.org/show_bug.cgi?id=234869

        Reviewed by Darin Adler.

        Refactors primitive CSS property parsing to be built on a new composable set of 
        lower level primitives.

        The lowest level primitive is now a "consumer" struct that only knows how to consume
        a particular type for a particular token type. For example, NumberRawKnownTokenTypeNumberConsumer
        only knows how to consume and return a NumberRaw if the token type is a NumberToken.

        For these token specific consumers to be useful, they need to be combined together. To
        do this, a higher level meta-consumer type that is not tied to a specific token is used.
        These are defined as empty structs with 'using' statements to indicate which low level
        consumers to use for which token token types. For example:
        
            struct NumberRawConsumer {
                using Result = std::optional<NumberRaw>;

                using FunctionToken = NumberRawKnownTokenTypeFunctionConsumer;
                using NumberToken = NumberRawKnownTokenTypeNumberConsumer;
            };

        This meta-consumer definition defines a consumer that utilizes two lower level token 
        specific consumers for function and number tokens.

        To actuall do something with this meta-consumer definition, the  consumeMetaConsumer<>(...) 
        function is used, which introspects which using statements are defined, and dispatches to 
        the corresponding token specific consumer (see MetaConsumerDispatcher for how introspection works).

        In addition to primitive meta-consumer definitions, there are also definitions for meta-consumers
        that can consumer more complex things without duplicate work. For example, AngleOrPercentConsumer
        is a meta-consumer that consumes either an Angle or a Percent. To deal with the fact that both
        of these want to operate on function tokens, the SameTokenMetaConsumer allows concatenating multiple
        per-token consumers (in this case, two function token consumers) together. 
        
        Meta-consumer definitions can also define, or allow defining via a template parameter, a Transformer,
        which, as the name implies, transform the output. For example, the AngleOrNumberRawToDegressTransformer
        can be used to ensure that the result is a number in degrees, and doesn't have to be unwrapped by
        the user.

        The goal is avoid the combinatorial explosition of functions branching on token type for
        more and more specialized parsing needs. For instance, an upcomping change will want to 
        extend consumeNumberOrPercentRawAllowingSymbolTableIdent and a few other related consumers
        to also consume the identifier 'none'. Rather than duplicating all the logic, this allows
        for just defining a few meta-consumer definitions utilizing almost entirely existing lower
        level consumers.

        * css/MediaQueryExpression.cpp:
        (WebCore::consumeFirstValue):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeFontVariationTag):
        (WebCore::consumeCubicBezier):
        (WebCore::consumeSpringFunction):
        (WebCore::consumePerspective):
        (WebCore::consumeCursor):
        (WebCore::CSSPropertyParser::parseSingleValue):
        (WebCore::consumeCounterStylePad):
        (WebCore::consumeCounterStyleAdditiveSymbols):
        (WebCore::consumeBasePaletteDescriptor):
        (WebCore::consumeOverrideColorsDescriptor):
        (WebCore::CSSPropertyParser::consumeFlex):
        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::CalcParser::CalcParser):
        (WebCore::CSSPropertyParserHelpers::consumeCalcRawWithKnownTokenTypeFunction):
        (WebCore::CSSPropertyParserHelpers::computeMinimumValue):
        (WebCore::CSSPropertyParserHelpers::IntegerTypeRawKnownTokenTypeFunctionConsumer::consume):
        (WebCore::CSSPropertyParserHelpers::IntegerTypeRawKnownTokenTypeNumberConsumer::consume):
        (WebCore::CSSPropertyParserHelpers::IntegerTypeKnownTokenTypeFunctionConsumer::consume):
        (WebCore::CSSPropertyParserHelpers::IntegerTypeKnownTokenTypeNumberConsumer::consume):
        (WebCore::CSSPropertyParserHelpers::validatedNumberRaw):
        (WebCore::CSSPropertyParserHelpers::NumberRawKnownTokenTypeFunctionConsumer::consume):
        (WebCore::CSSPropertyParserHelpers::NumberRawKnownTokenTypeNumberConsumer::consume):
        (WebCore::CSSPropertyParserHelpers::NumberRawKnownTokenTypeIdentConsumer::consume):
        (WebCore::CSSPropertyParserHelpers::NumberCSSPrimitiveValueWithCalcWithKnownTokenTypeFunctionConsumer::consume):
        (WebCore::CSSPropertyParserHelpers::NumberCSSPrimitiveValueWithCalcWithKnownTokenTypeNumberConsumer::consume):
        (WebCore::CSSPropertyParserHelpers::validatedPercentRaw):
        (WebCore::CSSPropertyParserHelpers::PercentRawKnownTokenTypeFunctionConsumer::consume):
        (WebCore::CSSPropertyParserHelpers::PercentRawKnownTokenTypePercentConsumer::consume):
        (WebCore::CSSPropertyParserHelpers::PercentRawKnownTokenTypeIdentConsumer::consume):
        (WebCore::CSSPropertyParserHelpers::PercentCSSPrimitiveValueWithCalcWithKnownTokenTypeFunctionConsumer::consume):
        (WebCore::CSSPropertyParserHelpers::PercentCSSPrimitiveValueWithCalcWithKnownTokenTypePercentConsumer::consume):
        (WebCore::CSSPropertyParserHelpers::LengthRawKnownTokenTypeFunctionConsumer::consume):
        (WebCore::CSSPropertyParserHelpers::LengthRawKnownTokenTypeDimensionConsumer::consume):
        (WebCore::CSSPropertyParserHelpers::LengthRawKnownTokenTypeNumberConsumer::consume):
        (WebCore::CSSPropertyParserHelpers::LengthCSSPrimitiveValueWithCalcWithKnownTokenTypeFunctionConsumer::consume):
        (WebCore::CSSPropertyParserHelpers::LengthCSSPrimitiveValueWithCalcWithKnownTokenTypeDimensionConsumer::consume):
        (WebCore::CSSPropertyParserHelpers::LengthCSSPrimitiveValueWithCalcWithKnownTokenTypeNumberConsumer::consume):
        (WebCore::CSSPropertyParserHelpers::AngleRawKnownTokenTypeFunctionConsumer::consume):
        (WebCore::CSSPropertyParserHelpers::AngleRawKnownTokenTypeDimensionConsumer::consume):
        (WebCore::CSSPropertyParserHelpers::AngleRawKnownTokenTypeNumberConsumer::consume):
        (WebCore::CSSPropertyParserHelpers::AngleCSSPrimitiveValueWithCalcWithKnownTokenTypeFunctionConsumer::consume):
        (WebCore::CSSPropertyParserHelpers::AngleCSSPrimitiveValueWithCalcWithKnownTokenTypeDimensionConsumer::consume):
        (WebCore::CSSPropertyParserHelpers::AngleCSSPrimitiveValueWithCalcWithKnownTokenTypeNumberConsumer::consume):
        (WebCore::CSSPropertyParserHelpers::TimeCSSPrimitiveValueWithCalcWithKnownTokenTypeFunctionConsumer::consume):
        (WebCore::CSSPropertyParserHelpers::TimeCSSPrimitiveValueWithCalcWithKnownTokenTypeDimensionConsumer::consume):
        (WebCore::CSSPropertyParserHelpers::TimeCSSPrimitiveValueWithCalcWithKnownTokenTypeNumberConsumer::consume):
        (WebCore::CSSPropertyParserHelpers::ResolutionCSSPrimitiveValueWithKnownTokenTypeDimensionConsumer::consume):
        (WebCore::CSSPropertyParserHelpers::TransformApplier::apply):
        (WebCore::CSSPropertyParserHelpers::applyTransform):
        (WebCore::CSSPropertyParserHelpers::IdentityTransformer::transform):
        (WebCore::CSSPropertyParserHelpers::RawVariantTransformerBase::transform):
        (WebCore::CSSPropertyParserHelpers::AngleOrNumberRawToDegressTransformer::transform):
        (WebCore::CSSPropertyParserHelpers::NumberOrPercentDividedBy100Transformer::transform):
        (WebCore::CSSPropertyParserHelpers::MetaConsumerDispatcher::consume):
        (WebCore::CSSPropertyParserHelpers::consumeMetaConsumer):
        (WebCore::CSSPropertyParserHelpers::SameTokenMetaConsumerApplier::consume):
        (WebCore::CSSPropertyParserHelpers::SameTokenMetaConsumer::consume):
        (WebCore::CSSPropertyParserHelpers::LengthOrPercentRawTransformer::transform):
        (WebCore::CSSPropertyParserHelpers::AngleOrNumberRawKnownTokenTypeIdentConsumer::consume):
        (WebCore::CSSPropertyParserHelpers::NumberOrPercentRawKnownTokenTypeIdentConsumer::consume):
        (WebCore::CSSPropertyParserHelpers::consumeIntegerTypeRaw):
        (WebCore::CSSPropertyParserHelpers::consumeIntegerType):
        (WebCore::CSSPropertyParserHelpers::consumeIntegerRaw):
        (WebCore::CSSPropertyParserHelpers::consumeInteger):
        (WebCore::CSSPropertyParserHelpers::consumeIntegerZeroAndGreaterRaw):
        (WebCore::CSSPropertyParserHelpers::consumeIntegerZeroAndGreater):
        (WebCore::CSSPropertyParserHelpers::consumePositiveIntegerRaw):
        (WebCore::CSSPropertyParserHelpers::consumePositiveInteger):
        (WebCore::CSSPropertyParserHelpers::consumeNumberRaw):
        (WebCore::CSSPropertyParserHelpers::consumeNumberAllowingSymbolTableIdent):
        (WebCore::CSSPropertyParserHelpers::consumeNumber):
        (WebCore::CSSPropertyParserHelpers::consumePercentRaw):
        (WebCore::CSSPropertyParserHelpers::consumePercentAllowingSymbolTableIdent):
        (WebCore::CSSPropertyParserHelpers::consumePercent):
        (WebCore::CSSPropertyParserHelpers::consumePercentWorkerSafe):
        (WebCore::CSSPropertyParserHelpers::consumeLengthRaw):
        (WebCore::CSSPropertyParserHelpers::consumeLength):
        (WebCore::CSSPropertyParserHelpers::consumeAngleRaw):
        (WebCore::CSSPropertyParserHelpers::consumeAngle):
        (WebCore::CSSPropertyParserHelpers::consumeAngleWorkerSafe):
        (WebCore::CSSPropertyParserHelpers::consumeTime):
        (WebCore::CSSPropertyParserHelpers::consumeResolution):
        (WebCore::CSSPropertyParserHelpers::consumeAngleOrPercent):
        (WebCore::CSSPropertyParserHelpers::consumeLengthOrPercentRaw):
        (WebCore::CSSPropertyParserHelpers::consumeLengthOrPercent):
        (WebCore::CSSPropertyParserHelpers::consumeAngleOrNumberRaw):
        (WebCore::CSSPropertyParserHelpers::consumeAngleOrNumberRawAllowingSymbolTableIdent):
        (WebCore::CSSPropertyParserHelpers::consumeNumberOrPercentRaw):
        (WebCore::CSSPropertyParserHelpers::consumeNumberOrPercentRawAllowingSymbolTableIdent):
        (WebCore::CSSPropertyParserHelpers::consumeNumberOrPercent):
        (WebCore::CSSPropertyParserHelpers::consumeFontWeightNumberRaw):
        (WebCore::CSSPropertyParserHelpers::consumeOptionalAlpha):
        (WebCore::CSSPropertyParserHelpers::consumeOptionalAlphaAllowingSymbolTableIdent):
        (WebCore::CSSPropertyParserHelpers::normalizeRGBComponentNumber):
        (WebCore::CSSPropertyParserHelpers::normalizeRGBComponentPercentage):
        (WebCore::CSSPropertyParserHelpers::RGBNormalizingTransformer::transform):
        (WebCore::CSSPropertyParserHelpers::consumeRelativeRGBComponent):
        (WebCore::CSSPropertyParserHelpers::clampRGBComponent):
        (WebCore::CSSPropertyParserHelpers::consumeRGBOrHSLOptionalAlpha):
        (WebCore::CSSPropertyParserHelpers::parseNonRelativeRGBParameters):
        (WebCore::CSSPropertyParserHelpers::parseRelativeHSLParameters):
        (WebCore::CSSPropertyParserHelpers::parseNonRelativeHSLParameters):
        (WebCore::CSSPropertyParserHelpers::parseHWBParameters):
        (WebCore::CSSPropertyParserHelpers::parseRelativeHWBParameters):
        (WebCore::CSSPropertyParserHelpers::parseNonRelativeHWBParameters):
        (WebCore::CSSPropertyParserHelpers::parseLabParameters):
        (WebCore::CSSPropertyParserHelpers::parseLCHParameters):
        (WebCore::CSSPropertyParserHelpers::parseRelativeLCHParameters):
        (WebCore::CSSPropertyParserHelpers::parseNonRelativeLCHParameters):
        (WebCore::CSSPropertyParserHelpers::parseRelativeColorFunctionForRGBTypes):
        (WebCore::CSSPropertyParserHelpers::parseColorFunctionForRGBTypes):
        (WebCore::CSSPropertyParserHelpers::parseColorFunctionForXYZTypes):
        (WebCore::CSSPropertyParserHelpers::parseColorContrastFunctionParameters):
        (WebCore::CSSPropertyParserHelpers::consumeColorMixComponent):
        (WebCore::CSSPropertyParserHelpers::consumePositionComponent):
        (WebCore::CSSPropertyParserHelpers::consumePositionCoordinates):
        (WebCore::CSSPropertyParserHelpers::consumeDeprecatedGradientColorStop):
        (WebCore::CSSPropertyParserHelpers::consumeCrossFade):
        (WebCore::CSSPropertyParserHelpers::consumeLineHeightRaw):
        (WebCore::CSSPropertyParserHelpers::CalcParser::consumeInteger): Deleted.
        (WebCore::CSSPropertyParserHelpers::CalcParser::consumeIntegerTypeRaw): Deleted.
        (WebCore::CSSPropertyParserHelpers::CalcParser::consumeNumber): Deleted.
        (WebCore::CSSPropertyParserHelpers::CalcParser::consumeNumberRaw): Deleted.
        (WebCore::CSSPropertyParserHelpers::CalcParser::consumePercentRaw): Deleted.
        (WebCore::CSSPropertyParserHelpers::CalcParser::consumeAngleRaw): Deleted.
        (WebCore::CSSPropertyParserHelpers::CalcParser::consumeLengthRaw): Deleted.
        (WebCore::CSSPropertyParserHelpers::consumeIntegerTypeRawWithKnownTokenTypeFunction): Deleted.
        (WebCore::CSSPropertyParserHelpers::consumeIntegerTypeRawWithKnownTokenTypeNumber): Deleted.
        (WebCore::CSSPropertyParserHelpers::consumeIntegerTypeCSSPrimitiveValueWithCalcWithKnownTokenTypeFunction): Deleted.
        (WebCore::CSSPropertyParserHelpers::consumeIntegerTypeCSSPrimitiveValueWithCalcWithKnownTokenTypeNumber): Deleted.
        (WebCore::CSSPropertyParserHelpers::consumeNumberRawWithKnownTokenTypeFunction): Deleted.
        (WebCore::CSSPropertyParserHelpers::consumeNumberRawWithKnownTokenTypeNumber): Deleted.
        (WebCore::CSSPropertyParserHelpers::consumeNumberRawWithKnownTokenTypeIdent): Deleted.
        (WebCore::CSSPropertyParserHelpers::consumeNumberCSSPrimitiveValueWithCalcWithKnownTokenTypeFunction): Deleted.
        (WebCore::CSSPropertyParserHelpers::consumeNumberCSSPrimitiveValueWithCalcWithKnownTokenTypeNumber): Deleted.
        (WebCore::CSSPropertyParserHelpers::consumePercentRawWithKnownTokenTypeFunction): Deleted.
        (WebCore::CSSPropertyParserHelpers::consumePercentRawWithKnownTokenTypePercentage): Deleted.
        (WebCore::CSSPropertyParserHelpers::consumePercentRawWithKnownTokenTypeIdent): Deleted.
        (WebCore::CSSPropertyParserHelpers::consumePercentCSSPrimitiveValueWithCalcWithKnownTokenTypeFunction): Deleted.
        (WebCore::CSSPropertyParserHelpers::consumePercentCSSPrimitiveValueWithCalcWithKnownTokenTypePercentage): Deleted.
        (WebCore::CSSPropertyParserHelpers::consumeLengthRawWithKnownTokenTypeFunction): Deleted.
        (WebCore::CSSPropertyParserHelpers::consumeLengthRawWithKnownTokenTypeDimension): Deleted.
        (WebCore::CSSPropertyParserHelpers::consumeLengthRawWithKnownTokenTypeNumber): Deleted.
        (WebCore::CSSPropertyParserHelpers::consumeLengthCSSPrimitiveValueWithCalcWithKnownTokenTypeFunction): Deleted.
        (WebCore::CSSPropertyParserHelpers::consumeLengthCSSPrimitiveValueWithCalcWithKnownTokenTypeDimension): Deleted.
        (WebCore::CSSPropertyParserHelpers::consumeLengthCSSPrimitiveValueWithCalcWithKnownTokenTypeNumber): Deleted.
        (WebCore::CSSPropertyParserHelpers::consumeAngleRawWithKnownTokenTypeFunction): Deleted.
        (WebCore::CSSPropertyParserHelpers::consumeAngleRawWithKnownTokenTypeDimension): Deleted.
        (WebCore::CSSPropertyParserHelpers::consumeAngleRawWithKnownTokenTypeNumber): Deleted.
        (WebCore::CSSPropertyParserHelpers::consumeAngleCSSPrimitiveValueWithCalcWithKnownTokenTypeFunction): Deleted.
        (WebCore::CSSPropertyParserHelpers::consumeAngleCSSPrimitiveValueWithCalcWithKnownTokenTypeDimension): Deleted.
        (WebCore::CSSPropertyParserHelpers::consumeAngleCSSPrimitiveValueWithCalcWithKnownTokenTypeNumber): Deleted.
        (WebCore::CSSPropertyParserHelpers::consumeTimeCSSPrimitiveValueWithCalcWithKnownTokenTypeFunction): Deleted.
        (WebCore::CSSPropertyParserHelpers::consumeTimeCSSPrimitiveValueWithCalcWithKnownTokenTypeDimension): Deleted.
        (WebCore::CSSPropertyParserHelpers::consumeTimeCSSPrimitiveValueWithCalcWithKnownTokenTypeNumber): Deleted.
        (WebCore::CSSPropertyParserHelpers::consumeResolutionCSSPrimitiveValueWithKnownTokenTypeDimension): Deleted.
        (WebCore::CSSPropertyParserHelpers::consumeAngleRawOrNumberRaw): Deleted.
        (WebCore::CSSPropertyParserHelpers::consumeAngleRawOrNumberRawAllowingSymbolTableIdent): Deleted.
        (WebCore::CSSPropertyParserHelpers::consumeNumberRawOrPercentRaw): Deleted.
        (WebCore::CSSPropertyParserHelpers::consumeNumberRawOrPercentDividedBy100Raw): Deleted.
        (WebCore::CSSPropertyParserHelpers::consumeNumberRawOrPercentRawAllowingSymbolTableIdent): Deleted.
        (WebCore::CSSPropertyParserHelpers::consumeNumberRawOrPercentDividedBy100RawAllowingSymbolTableIdent): Deleted.
        * css/parser/CSSPropertyParserHelpers.h:
        * css/parser/CSSPropertyParserWorkerSafe.cpp:
        (WebCore::CSSPropertyParserHelpersWorkerSafe::consumeFontFeatureTag):
        * style/StyleResolveForFontRaw.cpp:
        (WebCore::Style::resolveForFontRaw):

2022-01-09  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Introduce a dedicated structure for Line::Run's trailing whitespace information
        https://bugs.webkit.org/show_bug.cgi?id=235010

        Reviewed by Antti Koivisto.

        * layout/formattingContexts/inline/InlineLine.cpp:
        (WebCore::Layout::Line::Run::trailingWhitespaceType):
        (WebCore::Layout::Line::Run::Run):
        (WebCore::Layout::Line::Run::expand):
        (WebCore::Layout::Line::Run::removeTrailingWhitespace):
        (WebCore::Layout::m_bidiLevel): Deleted.
        (WebCore::Layout::m_textContent): Deleted.
        * layout/formattingContexts/inline/InlineLine.h:
        (WebCore::Layout::Line::Run::hasTrailingWhitespace const):
        (WebCore::Layout::Line::Run::trailingWhitespaceWidth const):
        (WebCore::Layout::Line::Run::hasCollapsibleTrailingWhitespace const):
        (WebCore::Layout::Line::Run::hasCollapsedTrailingWhitespace const):
        (WebCore::Layout::Line::Run::trailingWhitespaceType const): Deleted.

2022-01-09  Antoine Quint  <graouts@webkit.org>

        translate() function in transform property should remove trailing 0 value when parsing
        https://bugs.webkit.org/show_bug.cgi?id=235016

        Reviewed by Antti Koivisto.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeTransformValue):

2022-01-09  Sam Weinig  <weinig@apple.com>

        Add helpers to access CoreGraphics color spaces more easily in generic contexts
        https://bugs.webkit.org/show_bug.cgi?id=235004

        Reviewed by Darin Adler.

        Add some structs and type trait helpers to allow accessing the CoreGraphics
        CGColorSpaceRef associated with a ColorSpace enum value at compile time. This
        will be useful for generalizing some of the gradient rendering code optimizations
        I have planned.

        * platform/graphics/cg/ColorCG.cpp:
        (WebCore::Color::createAndLosslesslyConvertToSupportedColorSpace):
        * platform/graphics/cg/ColorSpaceCG.cpp:
        (WebCore::colorSpaceForCGColorSpace):
        * platform/graphics/cg/ColorSpaceCG.h:
        (WebCore::CGColorSpaceMapping<ColorSpace::SRGB>::colorSpace):
        (WebCore::CGColorSpaceMapping<ColorSpace::A98RGB>::colorSpace):
        (WebCore::CGColorSpaceMapping<ColorSpace::DisplayP3>::colorSpace):
        (WebCore::CGColorSpaceMapping<ColorSpace::ExtendedA98RGB>::colorSpace):
        (WebCore::CGColorSpaceMapping<ColorSpace::ExtendedDisplayP3>::colorSpace):
        (WebCore::CGColorSpaceMapping<ColorSpace::ExtendedRec2020>::colorSpace):
        (WebCore::CGColorSpaceMapping<ColorSpace::ExtendedLinearSRGB>::colorSpace):
        (WebCore::CGColorSpaceMapping<ColorSpace::ExtendedProPhotoRGB>::colorSpace):
        (WebCore::CGColorSpaceMapping<ColorSpace::ExtendedSRGB>::colorSpace):
        (WebCore::CGColorSpaceMapping<ColorSpace::Rec2020>::colorSpace):
        (WebCore::CGColorSpaceMapping<ColorSpace::LinearSRGB>::colorSpace):
        (WebCore::CGColorSpaceMapping<ColorSpace::ProPhotoRGB>::colorSpace):
        (WebCore::CGColorSpaceMapping<ColorSpace::XYZ_D50>::colorSpace):
        (WebCore::CGColorSpaceMappingGetter::colorSpace):
        (WebCore::cachedNullableCGColorSpace):

2022-01-08  Antoine Quint  <graouts@webkit.org>

        [Web Animations] getKeyframes() for a CSS Animation should not use computed style for keyframes
        https://bugs.webkit.org/show_bug.cgi?id=235008

        Reviewed by Antti Koivisto.

        Until now, when calling getKeyframes() on a keyframe effect associated with a CSS Animation, we would
        serialize for each keyframe the computed style for the animated properties. However, the Web Aniations
        spec says (https://drafts.csswg.org/web-animations-1/#dom-keyframeeffect-getkeyframes) that the value
        to use should "be the result of serializing the property value of declaration by passing declaration
        to the algorithm to serialize a CSS value [CSSOM]."

        One way we can get to the value as specified on the @keyframes rule rather than the computed style
        is to access the StyleRuleKeyframe object directly as stored by the Style::Resolver. This keeps the
        raw CSSValues as parsed.

        To do this, we first refactor Style::Resolver::keyframeStylesForAnimation() such that all the code
        that creates a Vector<Ref<StyleRuleKeyframe>> with deduplicated keyframe rules is in the new dedicated
        method Style::Resolver::keyframeRulesForName().

        Then, in KeyframeEffect::getKeyframes(), we can call into this function to obtain the set of keyframe
        rules for the associated CSS Animation's name and read the style from there. Note that these values
        may contain unsubstituted --var() values, so in that case for now we still use the computed style.

        * animation/KeyframeEffect.cpp:
        (WebCore::KeyframeEffect::getKeyframes):
        * style/StyleResolver.cpp:
        (WebCore::Style::Resolver::keyframeRulesForName):
        (WebCore::Style::Resolver::keyframeStylesForAnimation):
        * style/StyleResolver.h:

2022-01-09  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Line::Run needs access to FontCascade
        https://bugs.webkit.org/show_bug.cgi?id=235009

        Reviewed by Antti Koivisto.

        This is in preparation for computing trimmed trailing content width properly.

        * layout/formattingContexts/inline/InlineLine.cpp:
        (WebCore::Layout::Line::append):
        (WebCore::Layout::Line::appendLineBreak):
        (WebCore::Layout::Line::appendWordBreakOpportunity):
        (WebCore::Layout::Line::Run::Run):
        (WebCore::Layout::m_textContent):
        (WebCore::Layout::m_style): Deleted. - We learnt in the past that expanding structures like this (stack backed, large in number) could
        lead to measurable perf regression.
        * layout/formattingContexts/inline/InlineLine.h:
        (WebCore::Layout::Line::Run::shouldTrailingWhitespaceHang const):
        (WebCore::Layout::Line::Run::inlineDirection const):
        (WebCore::Layout::Line::Run::letterSpacing const):
        (WebCore::Layout::Line::Run::hasTextCombine const):

2022-01-09  Antti Koivisto  <antti@apple.com>

        Use IsNegation bit for more efficient pseudo-class style invalidation
        https://bugs.webkit.org/show_bug.cgi?id=235003

        Reviewed by Simon Fraser.

        We now know if a given invalidation ruleset is for negated context. We can use this to avoid
        unnecessary traversal in pseudo-class invalidation, similar to what we already do with classes.

        * dom/Document.cpp:
        (WebCore::Document::updateHoverActiveState):
        * dom/Element.cpp:
        (WebCore::Element::setActive):
        (WebCore::Element::setFocus):
        (WebCore::Element::setHasFocusWithin):
        (WebCore::Element::setHovered):
        (WebCore::Element::setBeingDragged):

        Provide the value for invalidation.

        * html/HTMLFieldSetElement.cpp:
        (WebCore::HTMLFieldSetElement::addInvalidDescendant):
        (WebCore::HTMLFieldSetElement::removeInvalidDescendant):
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::setAncestorDisabled):
        (WebCore::HTMLFormControlElement::parseAttribute):
        (WebCore::HTMLFormControlElement::updateValidity):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::registerInvalidAssociatedFormControl):
        (WebCore::HTMLFormElement::removeInvalidAssociatedFormControlIfNeeded):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setChecked):
        * html/HTMLOptGroupElement.cpp:
        (WebCore::HTMLOptGroupElement::parseAttribute):
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::parseAttribute):
        (WebCore::HTMLOptionElement::setSelectedState):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::internalKeyEvent):
        * style/PseudoClassChangeInvalidation.cpp:
        (WebCore::Style::PseudoClassChangeInvalidation::computeInvalidation):
        (WebCore::Style::PseudoClassChangeInvalidation::collectRuleSets):

        Setting a pseudo-class can only make a regular selector (not inside :not()) start matching.
        Setting a pseudo-class can only make a negated selector (inside :not()) stop matching.
        We only need to invalidate for the first case after the mutation has happened and for the second
        case before it happens.

        The cases are reversed when pseudo-class is unset.

        (WebCore::Style::PseudoClassChangeInvalidation::invalidateBeforeChange):
        (WebCore::Style::PseudoClassChangeInvalidation::invalidateAfterChange):
        (WebCore::Style::PseudoClassChangeInvalidation::invalidateStyleWithRuleSets): Deleted.
        * style/PseudoClassChangeInvalidation.h:
        (WebCore::Style::emplace):

        Add a helper since std::optional::emplace() is awkward to use with std::initializer_list.

        (WebCore::Style::PseudoClassChangeInvalidation::PseudoClassChangeInvalidation):
        (WebCore::Style::PseudoClassChangeInvalidation::~PseudoClassChangeInvalidation):

2022-01-08  Simon Fraser  <simon.fraser@apple.com>

        If the drop-shadow filter has no color, it should use the value of the color property
        https://bugs.webkit.org/show_bug.cgi?id=235012

        Reviewed by Alan Bujtas.

        https://drafts.fxtf.org/filter-effects-1/#funcdef-filter-drop-shadow states that if
        drop-shadow() does not specify a color, the value of the color property should be used.

        Test: css3/filters/drop-shadow-no-color.html

        * style/StyleBuilderState.cpp:
        (WebCore::Style::BuilderState::createFilterOperations):

2022-01-08  Simon Fraser  <simon.fraser@apple.com>

        Fix some CSS filter interpolation issues
        https://bugs.webkit.org/show_bug.cgi?id=235007

        Reviewed by Antoine Quint.

        Ensure that filter values are clamped after animation according to
        https://drafts.fxtf.org/filter-effects-1/.

        Tested by WPT.

        * platform/graphics/filters/FilterOperation.cpp:
        (WebCore::BasicColorMatrixFilterOperation::blend):
        (WebCore::BasicComponentTransferFilterOperation::blend):
        (WebCore::BlurFilterOperation::blend):
        (WebCore::DropShadowFilterOperation::blend):

2022-01-08  Wenson Hsieh  <wenson_hsieh@apple.com>

        Null pointer crash when calling into `-[WebView close]` in `-webView:didCommitLoadForFrame:`
        https://bugs.webkit.org/show_bug.cgi?id=234994
        rdar://86845512

        Reviewed by Chris Dumez and Geoff Garen.

        Add a null check in `FrameLoader::dispatchDidCommitLoad()` before calling into any methods on the frame's Page.
        Since we called into the client layer to `dispatchDidCommitLoad()` immediately prior to this, a legacy WebKit
        client may have already caused the page to be destroyed (e.g. by closing the web view). Since Frame's pointer
        to Page is a WeakPtr, this triggers null derefs when attempting to call either `didCommitLoad()` or
        `remoteInspectorInformationDidChange()`.

        Test: WebKitLegacy.CloseWhileCommittingLoad

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::dispatchDidCommitLoad):

2022-01-08  Gabriel Nava Marino  <gnavamarino@apple.com>

        null ptr deref in WebCore::ModifySelectionListLevelCommand::appendSiblingNodeRange
        https://bugs.webkit.org/show_bug.cgi?id=234862

        Reviewed by Darin Adler.

        ModifySelectionListLevelCommand::appendSiblingNodeRange loops through nodes assuming
        existence of siblings, which is not guaranteed, and can result in nullptr deref. Instead,
        check for node existence as part of loop condition, and change raw pointer usage to RefPtr.

        This addresses the crash but results in ASSERT(isEndOfParagraph(endOfParagraphToMove))
        failing in CompositeEditCommand::moveParagraph. We modify WebCore::findEndOfParagraph
        to check for HTMLBRElement nodes to avoid unexpectedly changing the AnchorType.

        Test: http/tests/lists/list-new-parent-no-sibling-append.html

        * editing/ModifySelectionListLevel.cpp:
        (WebCore::ModifySelectionListLevelCommand::insertSiblingNodeRangeBefore):
        (WebCore::ModifySelectionListLevelCommand::insertSiblingNodeRangeAfter):
        (WebCore::ModifySelectionListLevelCommand::appendSiblingNodeRange):
        * editing/VisibleUnits.cpp:
        (WebCore::findEndOfParagraph):

2022-01-08  Tyler Wilcock  <tyler_w@apple.com>

        AX: Improve WeakHashSet hygienics in AXObjectCache
        https://bugs.webkit.org/show_bug.cgi?id=234961

        Reviewed by Andres Gonzalez.

        AXObjectCache owns four WeakHashSets. WeakHashSets are not notified
        when the objects they hold are deleted[1], so we should be cleaning
        them up in AXObjectCache::remove(Node&).

        This patch also replaces range-based for loop iteration over these
        WeakHashSets with WeakHashSet::forEach, which inherently checks that
        each item is valid (non-null and contained in the hashset) before
        using the item.

        [1]: https://github.com/WebKit/WebKit/blob/main/Introduction.md#weakhashset

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::remove):
        Delete the removed node from AXObjectCache's owned WeakHashSets.
        (WebCore::filterWeakHashSetForRemoval): Added.
        (WebCore::AXObjectCache::prepareForDocumentDestruction):
        Use filterWeakHashSetForRemoval to remove soon-to-be-deleted nodes
        from AXObjectCache's owned WeakHashSets.
        (WebCore::AXObjectCache::performDeferredCacheUpdate):
        Use WeakHashSet::forEach instead of range-based for loops.

2022-01-08  Tyler Wilcock  <tyler_w@apple.com>

        AX: AccessibilityObject::setFocused(true) should make the webpage focused, and make web content the first responder
        https://bugs.webkit.org/show_bug.cgi?id=234885

        Reviewed by Darin Adler.

        With this patch, focusing an element via an AX client on iOS makes
        the page focused immediately. This allows a focus ring to be drawn,
        even when apps that embed WKWebViews don't make web content the
        first responder themselves (`[WKContentViewInteraction becomeFirstResponderForWebView]`
        makes the page focused after a delay due to async IPC between the UI and web processes).

        Tests: accessibility/ios-simulator/accessibility-make-first-responder.html
               accessibility/ios-simulator/taking-focus-should-refocus-page.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::setFocused):
        Make the webpage focused if it isn't already focused.

        * testing/Internals.cpp:
        (WebCore::Internals::setPageIsFocused):
        Added to simulate the scenario where the webpage doesn't gain focus
        through becoming first responder.
        * testing/Internals.h:
        Add setPageIsFocused.
        * testing/Internals.idl:
        Add setPageIsFocused.

2022-01-08  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Implement TextUtil::breakWord for the complex font codepath using ubrk_next
        https://bugs.webkit.org/show_bug.cgi?id=234998

        Reviewed by Antti Koivisto.

        In order to use ubrk_preceding/ubrk_following with arbitrary position (binary search) inside a cluster with surrogate pairs we have to
        implement some additional surrogate boundary checks (it would move the index to the beginning/end of the surrogate when it falls right
        in the middle of it). In addition to that, ICU would still need to scan the content from the start to find the right index for
        the boundary.
        This new breakWord implementation simply iterates over the clusters by calling ubrk_next until the content overflows.

        * layout/formattingContexts/inline/text/TextUtil.cpp:
        (WebCore::Layout::TextUtil::breakWord):

2022-01-07  Jean-Yves Avenard  <jya@apple.com>

        Remove IPC::SharedBufferDataReference and use IPC::SharedBufferCopy instead
        https://bugs.webkit.org/show_bug.cgi?id=234921
        rdar://problem/87196287

        Reviewed by Youenn Fablet.

        Pass the FragmentedSharedBuffer through const reference to avoid
        having to const_cast the argument in WebKit.

        No change in observable behaviour, covered by existing tests.

        * platform/graphics/ImageDecoder.h:
        * platform/graphics/avfoundation/objc/ImageDecoderAVFObjC.h:
        * platform/graphics/avfoundation/objc/ImageDecoderAVFObjC.mm:
        (WebCore::ImageDecoderAVFObjC::create):
        (WebCore::ImageDecoderAVFObjC::ImageDecoderAVFObjC):
        (WebCore::ImageDecoderAVFObjC::setData):
        * platform/graphics/cg/ImageDecoderCG.cpp:
        (WebCore::ImageDecoderCG::setData):
        * platform/graphics/cg/ImageDecoderCG.h:
        * platform/graphics/gstreamer/ImageDecoderGStreamer.cpp:
        (WebCore::ImageDecoderGStreamer::setData):
        * platform/graphics/gstreamer/ImageDecoderGStreamer.h:
        * platform/graphics/win/ImageDecoderDirect2D.cpp:
        (WebCore::ImageDecoderDirect2D::setData):
        * platform/graphics/win/ImageDecoderDirect2D.h:
        * platform/image-decoders/ScalableImageDecoder.h:
        * platform/image-decoders/bmp/BMPImageDecoder.cpp:
        (WebCore::BMPImageDecoder::setData):
        * platform/image-decoders/bmp/BMPImageDecoder.h:
        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::setData):
        * platform/image-decoders/gif/GIFImageDecoder.h:
        * platform/image-decoders/ico/ICOImageDecoder.cpp:
        (WebCore::ICOImageDecoder::setData):
        * platform/image-decoders/ico/ICOImageDecoder.h:
        * platform/image-decoders/webp/WEBPImageDecoder.cpp:
        (WebCore::WEBPImageDecoder::setData):
        * platform/image-decoders/webp/WEBPImageDecoder.h:

2022-01-07  Brent Fulgham  <bfulgham@apple.com>

        [Hardening] Improve multi draw offset validation
        https://bugs.webkit.org/show_bug.cgi?id=234966
        <rdar://problem/86814830>

        Reviewed by Darin Adler.

        Incorporate draw count into validation of the offset.

        * html/canvas/WebGLMultiDraw.cpp:
        (WebCore::WebGLMultiDraw::validateOffset):

2022-01-07  Myles C. Maxfield  <mmaxfield@apple.com>

        [GPU Process] Can't getImageData on canvas larger than 4096x4096
        https://bugs.webkit.org/show_bug.cgi?id=234321
        <rdar://problem/83575501>

        Reviewed by Tim Horton.

        We already have a policy about how big canvases can be. Simply export that policy
        so it can be consulted from the GPU process.

        Test: fast/canvas/large-getImageData.html

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::maxActivePixelMemory):
        (WebCore::maxActivePixelMemory): Deleted.
        * html/HTMLCanvasElement.h:

2022-01-07  Alex Christensen  <achristensen@webkit.org>

        Make FullscreenManager::requestFullscreenForElement more robust
        https://bugs.webkit.org/show_bug.cgi?id=234995

        Reviewed by Darin Adler.

        I think this may fix the Windows crashes after bug 233963 lands, and it makes things more robust anyways.

        * dom/Element.cpp:
        (WebCore::Element::webkitRequestFullscreen):
        * dom/FullscreenManager.cpp:
        (WebCore::FullscreenManager::requestFullscreenForElement):
        * dom/FullscreenManager.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::enterFullscreen):

2022-01-07  Alexey Shvayka  <ashvayka@apple.com>

        Don't dispatch "focusin" / "focusout" events if there are no listeners
        https://bugs.webkit.org/show_bug.cgi?id=234928

        Reviewed by Geoff Garen.

        This patch avoids creating and dispatching "focusin" / "focusout" events if it's
        guaranteed there are no registered listeners for them. These events are rather new
        and not widely popular: according to Chrome stats, only 17% page loads use them [1],
        which is even less than `document.all`.

        Together with r287787, creation of four FocusEvent instances is now avoided when
        focus is changed, advancing attached microbenchmark by 6%.

        [1] https://chromestatus.com/metrics/feature/timeline/popularity/433

        No new tests, no behavior change.

        * dom/Document.cpp:
        (WebCore::Document::setFocusedElement):
        (WebCore::Document::addListenerTypeIfNeeded):
        * dom/Document.h:
        * dom/Element.cpp:
        (WebCore::Element::dispatchFocusInEventIfNeeded):
        (WebCore::Element::dispatchFocusOutEventIfNeeded):
        (WebCore::Element::dispatchFocusInEvent): Deleted.
        (WebCore::Element::dispatchFocusOutEvent): Deleted.
        * dom/Element.h:

2022-01-07  Alexey Shvayka  <ashvayka@apple.com>

        Remove obsolete DOM Level 2 "DOMFocusIn" / "DOMFocusOut" events
        https://bugs.webkit.org/show_bug.cgi?id=234978

        Reviewed by Geoff Garen.

        This patch removes these events because according to Chrome stats, only 0.04%
        of page loads use them [1], which is below the Blink's removal threshold of 0.10%.

        All the "top sites" listed as "DOMFocusIn" / "DOMFocusOut" adopters, are now dead.
        Also, these events were never implemented in Firefox.

        [1] https://chromestatus.com/metrics/feature/timeline/popularity/211

        No new tests because it's a feature removal.

        * dom/Document.cpp:
        (WebCore::Document::setFocusedElement):
        * dom/Document.h:
        * dom/Element.cpp:
        (WebCore::Element::dispatchFocusInEvent):
        (WebCore::Element::dispatchFocusOutEvent):
        * dom/Element.h:
        * dom/EventNames.h:

2022-01-07  Kate Cheney  <katherine_cheney@apple.com>

        CSP: strict-dynamic is causing incorrect and unexpected behavior
        https://bugs.webkit.org/show_bug.cgi?id=234756
        <rdar://problem/87018316>

        Reviewed by Brent Fulgham.

        Per the CSP spec, if strict-dynamic is included in the script-src
        directive, 'self' and 'unsafe-inline' should be ignored. This fixes a
        bug where they were only ignored if specified before 'strict-dynamic'.

        Additionally, this reports the sourceURL as empty for inline scripts
        instead of using the contextURL, which was unexpectedly allowing
        inline scripts when "self" was used with "strict-dynamic".

        Tests: http/tests/security/contentSecurityPolicy/strict-dynamic-mixed-order-host-list.html
               http/tests/security/contentSecurityPolicy/strict-dynamic-mixed-order-scheme-list.html
               http/tests/security/contentSecurityPolicy/strict-dynamic-mixed-order-self.html
               http/tests/security/contentSecurityPolicy/strict-dynamic-mixed-order-unsafe-inline.html

        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::requestClassicScript):
        (WebCore::ScriptElement::executeClassicScript):
        * page/csp/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::allScriptPoliciesAllow const):
        (WebCore::ContentSecurityPolicy::allowNonParserInsertedScripts const):
        * page/csp/ContentSecurityPolicy.h:
        * page/csp/ContentSecurityPolicySourceList.cpp:
        (WebCore::ContentSecurityPolicySourceList::parseSource):

2022-01-07  Said Abou-Hallawa  <said@apple.com>

        [GPU Process] Remove the result FilterImage from FilterEffect
        https://bugs.webkit.org/show_bug.cgi?id=232840
        rdar://85425842

        Reviewed by Darin Adler.

        Removing the result FilterImage from FilterEffect will allow reusing the
        same FilterEffect for all the renderers that reference it. The results 
        will now be stored in the new class 'FilterResults'.

        -- FilterData still keeps the results of applying the Filter to its
           renderer in a new member of type FilterResults.

        -- RenderLayerFilters will not need to clear its CSSFilter intermediate
           results because this will happen once the temporary FilterResults goes
           out of scope.

        FilterResults will have two maps:

        1. FilterEffect -> FilterImage: The value is the result FilterImage of 
           applying the FilterEffect.
        2. FilterImage -> FilterEffectSet: The value is a list of FilterEffects,
           whose FilterImages depend on the key FilterImage.

        * Headers.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/ConcreteImageBuffer.h:
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawFilteredImageBuffer):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/displaylists/DisplayListItems.cpp:
        (WebCore::DisplayList::DrawFilteredImageBuffer::apply):
        * platform/graphics/displaylists/DisplayListItems.h:
        * platform/graphics/displaylists/DisplayListRecorder.cpp:
        (WebCore::DisplayList::Recorder::drawFilteredImageBuffer):
        * platform/graphics/displaylists/DisplayListRecorder.h:
        * platform/graphics/filters/Filter.cpp:
        (WebCore::Filter::apply):
        * platform/graphics/filters/Filter.h:
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::apply):
        (WebCore::FilterEffect::clearResult): Deleted.
        (WebCore::FilterEffect::clearResultsRecursive): Deleted.
        * platform/graphics/filters/FilterEffect.h:
        (WebCore::FilterEffect::hasResult const): Deleted.
        (WebCore::FilterEffect::filterImage const): Deleted.
        * platform/graphics/filters/FilterFunction.h:
        (WebCore::FilterFunction::apply):
        (WebCore::FilterFunction::outsets const):
        (WebCore::FilterFunction::clearResult): Deleted.
        * platform/graphics/filters/FilterResults.h: Added.
        (WebCore::FilterResults::effectResult const):
        (WebCore::FilterResults::setEffectResult):
        (WebCore::FilterResults::clearEffectResult):
        * platform/network/SynchronousLoaderClient.cpp:
        * rendering/CSSFilter.cpp:
        (WebCore::CSSFilter::apply):
        (WebCore::CSSFilter::clearIntermediateResults): Deleted.
        * rendering/CSSFilter.h:
        * rendering/RenderLayerFilters.cpp:
        (WebCore::RenderLayerFilters::applyFilterEffect):
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::postApplyResource):
        (WebCore::RenderSVGResourceFilter::primitiveAttributeChanged):
        * rendering/svg/RenderSVGResourceFilter.h:
        * svg/graphics/filters/SVGFilter.cpp:
        (WebCore::SVGFilter::apply):
        (WebCore::SVGFilter::clearResult): Deleted.
        * svg/graphics/filters/SVGFilter.h:
        * svg/graphics/filters/SVGFilterBuilder.cpp:
        (WebCore::SVGFilterBuilder::setupBuiltinEffects):
        (WebCore::SVGFilterBuilder::buildFilterEffects):
        (WebCore::SVGFilterBuilder::appendEffectToEffectRenderer):
        (WebCore::SVGFilterBuilder::appendEffectToEffectReferences): Deleted.
        (WebCore::SVGFilterBuilder::clearEffects): Deleted.
        (WebCore::SVGFilterBuilder::clearResultsRecursive): Deleted.
        * svg/graphics/filters/SVGFilterBuilder.h:
        (WebCore::SVGFilterBuilder::lastEffect const): Deleted.
        (WebCore::SVGFilterBuilder::effectReferences): Deleted.
        (WebCore::SVGFilterBuilder::addBuiltinEffects): Deleted.

2022-01-07  Patrick Angle  <pangle@apple.com>

        [Cocoa] Web Driver: WebSocket over TLS failing over WebDriver with acceptInsecureCerts on Big Sur
        https://bugs.webkit.org/show_bug.cgi?id=234403

        Reviewed by BJ Burg.

        * page/SocketProvider.cpp:
        (WebCore::SocketProvider::createSocketStreamHandle):
        * platform/network/cf/SocketStreamHandleImpl.h:
        (WebCore::SocketStreamHandleImpl::create):
        * platform/network/cf/SocketStreamHandleImplCFNet.cpp:
        (WebCore::SocketStreamHandleImpl::SocketStreamHandleImpl):
        (WebCore::SocketStreamHandleImpl::createStreams):
        * platform/network/curl/SocketStreamHandleImpl.h:
        (WebCore::SocketStreamHandleImpl::create):
        * platform/network/soup/SocketStreamHandleImpl.h:

2022-01-07  Alan Bujtas  <zalan@apple.com>

        Inline blocks that contain text with min-width, box-sizing: border-box incorrectly include the border in width calculation
        https://bugs.webkit.org/show_bug.cgi?id=234935
        <rdar://problem/87217423>

        Reviewed by Antti Koivisto.

        The block formatting context root takes care of applying the the min/max-width constraints.  

        Test: fast/inline/min-max-width-and-preferred-width.html

        * layout/formattingContexts/inline/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::computedIntrinsicWidthConstraintsForIntegration): remove redundant min/max-width checking.

2022-01-07  Andres Gonzalez  <andresg_22@apple.com>

        WebAccessibilityObjectWrapper accessibilityHitTest should call AXCoreObject::widget() on the main thread.
        https://bugs.webkit.org/show_bug.cgi?id=234973
        <rdar://problem/87264153>

        Reviewed by Chris Fleizach.

        In isolated tree mode, the AX object widget() method and any subsequent
        access to the returned value must be dispatch to the main thread.

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityHitTest:]):

2022-01-07  Wenson Hsieh  <wenson_hsieh@apple.com>

        Teach modal container observer to make the body element scrollable if necessary
        https://bugs.webkit.org/show_bug.cgi?id=234708
        rdar://86960677

        Reviewed by Tim Horton.

        Add a mechanism to allow ModalContainerObserver to force the body and/or document elements in the main document
        to become vertically scrollable, in the case where a modal container has been detected.

        In particular, if a modal container has already been detected and hidden away, the frame is non-scrollable, and
        the body and/or document element satisfies both conditions:

        1. Has a height that is taller than the visible height of the top FrameView
        2. Has `overflow-y: hidden;`

        ...then we'll flag one or both of those elements and force them to be vertically scrollable during style
        adjustment (i.e. return `true` from `shouldMakeVerticallyScrollable()`).

        Covered by augmenting an existing API test:
        ModalContainerObservation.HideUserInteractionBlockingElementAndMakeDocumentScrollable

        * page/ModalContainerObserver.cpp:
        (WebCore::ModalContainerObserver::setContainer):
        (WebCore::ModalContainerObserver::collectClickableElementsTimerFired):
        (WebCore::ModalContainerObserver::makeBodyAndDocumentElementScrollableIfNeeded):

        Helper method that contains logic for overriding scrollability on the body or html element, if needed.

        (WebCore::ModalContainerObserver::clearScrollabilityOverrides):
        (WebCore::ModalContainerObserver::hideUserInteractionBlockingElementIfNeeded):

        Drive-by fix: `target` is just a raw pointer here, so just assign it directly to `foundElement` instead of
        trying to use move semantics.

        (WebCore::ModalContainerObserver::revealModalContainer):
        (WebCore::ModalContainerObserver::shouldMakeVerticallyScrollable const):

        Add a helper method (similar to `shouldHide()`) that can be used to make elements vertically scrollable during
        style adjustment time. See above for more details.

        (WebCore::ModalContainerObserver::tryToMakeBodyAndDocumentElementScrollableThroughQuirks):
        * page/ModalContainerObserver.h:
        * style/StyleAdjuster.cpp:
        (WebCore::Style::Adjuster::adjust const):

        Consult `shouldMakeVerticallyScrollable` in addition to `shouldHide` if `ModalContainerObserver` is present.

2022-01-07  Antti Koivisto  <antti@apple.com>

        Make separate invalidation rulesets for negated selectors (inside :not())
        https://bugs.webkit.org/show_bug.cgi?id=234959

        Reviewed by Darin Adler.

        Use this information to reduce traversal on class changes. Other mutations will follow.

        * style/ClassChangeInvalidation.cpp:
        (WebCore::Style::collectClasses):
        (WebCore::Style::computeClassChanges):
        (WebCore::Style::ClassChangeInvalidation::computeInvalidation):

        Adding a class can only make a regular selector (not inside :not()) start matching.
        Adding a class can only make a negated selector (inside :not()) stop matching.
        We only need to invalidate for the first case after the mutation has happened and for the second
        case before it happens.

        These are reversed when removing a class.

        (WebCore::Style::ClassChangeInvalidation::invalidateBeforeChange):
        (WebCore::Style::ClassChangeInvalidation::invalidateAfterChange):
        (WebCore::Style::computeClassChange): Deleted.
        (WebCore::Style::ClassChangeInvalidation::invalidateStyleWithRuleSets): Deleted.
        * style/ClassChangeInvalidation.h:
        (WebCore::Style::ClassChangeInvalidation::ClassChangeInvalidation):
        (WebCore::Style::ClassChangeInvalidation::~ClassChangeInvalidation):
        * style/RuleFeature.cpp:
        (WebCore::Style::RuleFeature::RuleFeature):
        (WebCore::Style::RuleFeatureWithInvalidationSelector::RuleFeatureWithInvalidationSelector):
        (WebCore::Style::RuleFeatureSet::recursivelyCollectFeaturesFromSelector):

        Compute the negation state. :not(foo) is negated, :not(:not(foo)) isn't.

        (WebCore::Style::RuleFeatureSet::collectFeatures):
        * style/RuleFeature.h:
        (WebCore::Style::RuleFeatureWithInvalidationSelector::RuleFeatureWithInvalidationSelector): Deleted.
        * style/StyleScopeRuleSets.cpp:
        (WebCore::Style::ensureInvalidationRuleSets):

        Make separate ruleset.

        * style/StyleScopeRuleSets.h:

2022-01-07  Gabriel Nava Marino  <gnavamarino@apple.com>

        nullptr deref in ComputeFloatOffsetForLineLayoutAdapter<FloatingObject::FloatLeft>::updateOffsetIfNeeded
        https://bugs.webkit.org/show_bug.cgi?id=234018

        Reviewed by Darin Adler.

        In RenderBlockFlow::subtreeContainsFloat and RenderBlockFlow::subtreeContainsFloats we now will
        use a non-recursive iterator and return true when we find something, or then return false at the
        end of the function.

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::subtreeContainsFloat const):
        (WebCore::RenderBlockFlow::subtreeContainsFloats const):

2022-01-07  Alex Christensen  <achristensen@webkit.org>

        Unreviewed, reverting r287698.

        Broke an internal build

        Reverted changeset:

        "Start using C++20"
        https://bugs.webkit.org/show_bug.cgi?id=233963
        https://commits.webkit.org/r287698

2022-01-07  Antoine Quint  <graouts@webkit.org>

        Inserting a new @keyframes rule does not start animations that already used this name
        https://bugs.webkit.org/show_bug.cgi?id=234955

        Reviewed by Antti Koivisto.

        In bug 234895, we added logic to handle the case where an existing @keyframes rule was manipulated
        via the CSSOM API and ensured this would update the keyframes of any existing CSSAnimation currently
        referencing this @keyframes rule.

        Another WPT tests the case where a @keyframes rule is referenced by an animation prior to existing
        in the stylesheet, adding that named @keyframes rule, and then testing a CSSAnimation was created.

        To handle this case, we need to track which animation names were ignored during style resolution
        due not matching an existing @keyframes rule. We now manage a list of invalid CSS animation names
        stored on the KeyframeEffectStack (where we also keep track of the AnimationList last seen during
        style resolution) and use that to determine when, even though the previous and current AnimationList
        contain the same data, a previously-ignored animation should now be processed due to its referenced
        @keyframes rule now existing.

        * animation/KeyframeEffectStack.cpp:
        (WebCore::KeyframeEffectStack::clearInvalidCSSAnimationNames):
        (WebCore::KeyframeEffectStack::hasInvalidCSSAnimationNames const):
        (WebCore::KeyframeEffectStack::containsInvalidCSSAnimationName const):
        (WebCore::KeyframeEffectStack::addInvalidCSSAnimationName):
        * animation/KeyframeEffectStack.h:
        * style/Styleable.cpp:
        (WebCore::keyframesRuleExistsForAnimation):
        (WebCore::Styleable::animationListContainsNewlyValidAnimation const):
        (WebCore::Styleable::updateCSSAnimations const):
        (WebCore::shouldConsiderAnimation): Deleted.
        * style/Styleable.h:

2022-01-07  Antoine Quint  <graouts@webkit.org>

        Transitions without an explicit property-name should not be considered
        https://bugs.webkit.org/show_bug.cgi?id=234960

        Reviewed by Darin Adler.

        When we fill the transition-property to match the number of another `transition-`
        property, we should not consider running a transition for that property.

        * style/Styleable.cpp:
        (WebCore::transitionMatchesProperty):

2022-01-07  Youenn Fablet  <youenn@apple.com>

        Use completion handlers for takeAllMessagesForPort methods
        https://bugs.webkit.org/show_bug.cgi?id=234947

        Reviewed by Chris Dumez.

        Covered by existing tests.

        * dom/MessagePort.cpp:
        * dom/messageports/MessagePortChannel.cpp:
        * dom/messageports/MessagePortChannel.h:
        * dom/messageports/MessagePortChannelProvider.h:
        * dom/messageports/MessagePortChannelProviderImpl.cpp:
        * dom/messageports/MessagePortChannelProviderImpl.h:
        * dom/messageports/MessagePortChannelRegistry.cpp:
        * dom/messageports/MessagePortChannelRegistry.h:
        * dom/messageports/WorkerMessagePortChannelProvider.cpp:
        * dom/messageports/WorkerMessagePortChannelProvider.h:

2022-01-07  Antoine Quint  <graouts@webkit.org>

        Expose iterators on AnimationList
        https://bugs.webkit.org/show_bug.cgi?id=234957

        Reviewed by Antti Koivisto.

        * animation/WebAnimationUtilities.cpp:
        (WebCore::compareCSSAnimations):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueListForAnimationOrTransitionProperty):
        (WebCore::animationShorthandValue):
        * css/makeprop.pl:
        (generateAnimationPropertyInitialValueSetter):
        * platform/animation/AnimationList.h:
        (WebCore::AnimationList::begin const):
        (WebCore::AnimationList::end const):
        (WebCore::AnimationList::rbegin const):
        (WebCore::AnimationList::rend const):
        * style/Styleable.cpp:
        (WebCore::Styleable::updateCSSAnimations const):
        (WebCore::compileTransitionPropertiesInStyle):
        (WebCore::updateCSSTransitionsForStyleableAndProperty):

2022-01-07  Antoine Quint  <graouts@webkit.org>

        Values in WebAnimation::instances should not be null-checked
        https://bugs.webkit.org/show_bug.cgi?id=234948

        Reviewed by Darin Adler.

        The HashSet<WebAnimation*> returned by WebAnimation::instances() cannnot hold nullptr
        values so we should not have any check for a null value when iterating over its values.

        * dom/Document.cpp:
        (WebCore::Document::matchingAnimations):
        (WebCore::Document::keyframesRuleDidChange):

2022-01-07  Youenn Fablet  <youenn@apple.com>

        Allow storing form data responses in Cache Storage
        https://bugs.webkit.org/show_bug.cgi?id=234881

        Reviewed by Alex Christensen.

        Covered by rebased tests.

        * Modules/cache/DOMCache.cpp:
        (WebCore::DOMCache::put):

2022-01-07  Youenn Fablet  <youenn@apple.com>

        Expose rvfc processingDuration for the WebRTC code path
        https://bugs.webkit.org/show_bug.cgi?id=234949

        Reviewed by Eric Carlson.

        This processing duration is the time it took for an assembled frame to be decoded and sent to RealtimIncomingVideoSource.
        This duration can be approximately retrieved from WebRTC encoded transform (time for the assembled frame, aka time just before decoding)
        and the time at which it is exposed by requestVideoFrameCallback (aka time just after decoding).
        The processing duration is rounded in milliseconds.

        Covered by updated test.

        * platform/mediastream/RealtimeIncomingVideoSource.cpp:

2022-01-07  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (Safari 14): background-attachment: local does not work
        https://bugs.webkit.org/show_bug.cgi?id=219324
        <rdar://71808922>

        Reviewed by Antti Koivisto.

        With async overflow scrolling, we need to trigger a repaint if the scrolling element
        has any background layer with `background-attachment: local`.

        The background won't always be synchronized with the scrolling, but a little jitter
        is better than a broken CSS behavior (and this is what Firefox does).

        Test: fast/repaint/background-attachment-local-scroll.html

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::needsRepaintOnCompositedScroll const):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::hasAnyLocalBackground const):
        * rendering/style/RenderStyle.h:

2022-01-07  Kate Cheney  <katherine_cheney@apple.com>

        Implement CSP strict-dynamic for module scripts
        https://bugs.webkit.org/show_bug.cgi?id=234934
        <rdar://problem/83728374>

        Reviewed by Brent Fulgham.

        Test: http/tests/security/contentSecurityPolicy/strict-dynamic-module-script.html

        This also adds the contextLine value instead of using the default
        OrdinalNumber::beforeFirst() value.

        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::requestClassicScript):
        (WebCore::ScriptElement::requestModuleScript):
        (WebCore::ScriptElement::executeClassicScript):
        * page/csp/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::allowNonParserInsertedScripts const):
        * page/csp/ContentSecurityPolicy.h:

2022-01-07  Aditya Keerthi  <akeerthi@apple.com>

        Checkboxes on PurpleAir map controls are much smaller in Safari than other browsers
        https://bugs.webkit.org/show_bug.cgi?id=234897
        rdar://83367191

        Reviewed by Darin Adler.

        Unlike other browser engines, WebKit adjusts the size of checkboxes and
        radio buttons based on the font-size of the element, when the size is
        unspecified. The checkboxes on PurpleAir have a font-size of 9px, which
        results in WebKit painting a checkbox using NSControlSizeMini (with a
        length of 10px). In constrast, Chrome and Firefox simply use their
        default sizes (13px and 12.6px respectively).

        To fix, remove the font-size adjustments for checkboxes and radio
        buttons with an unspecified size, and use the current effective
        default of NSControlSizeSmall (with a length of 12px) to paint the
        controls.

        This ensures our unspecified sizing behavior matches other browsers.
        There may be some risk for other WebKit clients that currently rely
        on font-size getting them their desired size. However, this risk is
        believed to be minimal given the sizes of these controls are already
        restricted to a 10 - 16px range.

        Test: fast/forms/checkbox-radio-font-size.html

        * platform/mac/ThemeMac.mm:
        (WebCore::checkboxSize):
        (WebCore::radioSize):
        (WebCore::ThemeMac::controlSize const):

2022-01-07  Alan Bujtas  <zalan@apple.com>

        [Cleanup] RenderElement::containingBlockFor*(fixed/absolute/inflow)Position is slightly confusing
        https://bugs.webkit.org/show_bug.cgi?id=234939

        Reviewed by Antti Koivisto.

        These 3 helper functions (containingBlockForFixedPosition/containingBlockForAbsolutePosition/containingBlockForObjectInFlow)
        are expected to return an ancestor renderer which would act as the containing block if the renderer was
        fixed/absolute/inflow positioned (in their current form they should read as containingBlockIfTheRendererWasFixedPositioned..)

        These functions were introduced as part of LogicalSelectionOffsetCaches where we cache all 3 types of
        containing blocks (fixed/absolute/inflow) to save containingBlock() calls as the cached object gets propagated
        to ancestor renderers (so we really have a "what if" type of use case).

        After some refactoring (and moving them out of LogicalSelectionOffsetCaches), we started introducing more and more
        callsites of these functions where the "what if" question made less sense.

        This patch replaces these 3 functions with a static helper:
          static RenderBlock* containingBlockForPositionType(PositionType, const RenderObject&);
        While it does not make the callsites look much cleaner, it helps to stop the spread of the special containing block handling for top-layer/backdrop boxes.

        * dom/Element.cpp:
        (WebCore::layoutOverflowRectContainsAllDescendants):
        * rendering/LogicalSelectionOffsetCaches.h:
        (WebCore::LogicalSelectionOffsetCaches::LogicalSelectionOffsetCaches):
        * rendering/RenderElement.cpp:
        (WebCore::nearestNonAnonymousContainingBlockIncludingSelf): Deleted.
        (WebCore::RenderElement::containingBlockForFixedPosition const): Deleted.
        (WebCore::RenderElement::containingBlockForAbsolutePosition const): Deleted.
        * rendering/RenderElement.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::styleWillChange):
        * rendering/RenderLineBreak.cpp:
        (WebCore::RenderLineBreak::collectSelectionGeometries):
        * rendering/RenderObject.cpp:
        (WebCore::nearestNonAnonymousContainingBlockIncludingSelf):
        (WebCore::RenderObject::containingBlockForPositionType):
        (WebCore::RenderObject::containingBlock const):
        (WebCore::RenderObject::containingBlockForObjectInFlow const): Deleted.
        * rendering/RenderObject.h:

2022-01-06  Nikolas Zimmermann  <nzimmermann@igalia.com>

        [LBSE] Rename RenderSVGRect -> LegacyRenderSVGRect
        https://bugs.webkit.org/show_bug.cgi?id=234878

        Reviewed by Rob Buis.

        Following the established procedure: rename RenderSVGRect -> LegacyRenderSVGRect.
        In a follow-up patch RenderSVGRect will be reintroduced for LBSE, inheriting from
        RenderSVGShape instead of LegacyRenderSVGShape.

        Covered by existing tests, no change in behaviour.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/svg/LegacyRenderSVGRect.cpp: Renamed from Source/WebCore/rendering/svg/RenderSVGRect.cpp.
        (WebCore::LegacyRenderSVGRect::LegacyRenderSVGRect):
        (WebCore::LegacyRenderSVGRect::rectElement const):
        (WebCore::LegacyRenderSVGRect::updateShapeFromElement):
        (WebCore::LegacyRenderSVGRect::fillShape const):
        (WebCore::LegacyRenderSVGRect::strokeShape const):
        (WebCore::LegacyRenderSVGRect::shapeDependentStrokeContains):
        (WebCore::LegacyRenderSVGRect::shapeDependentFillContains const):
        (WebCore::LegacyRenderSVGRect::isRenderingDisabled const):
        * rendering/svg/LegacyRenderSVGRect.h: Renamed from Source/WebCore/rendering/svg/RenderSVGRect.h.
        * svg/SVGRectElement.cpp:
        (WebCore::SVGRectElement::createElementRenderer):

2022-01-07  Martin Robinson  <mrobinson@webkit.org>

        When transform-style: preserve-3d is used with a grouping property it should still create a containing block
        https://bugs.webkit.org/show_bug.cgi?id=234145
        <rdar://problem/86630387>

        Reviewed by Simon Fraser.

        No new tests. This is covered by an existing WPT test.

        Previously, when a grouping property (and the few extra properties specific to WebKit) forced
        transform-style: flat, this change was made in the StyleAdjuster and affected computed style.
        The specification says that these properties should actually adjust the used value of
        the property.

        The specification also says:
        > The use of this property with any value other than none establishes a
        > stacking context. It also establishes a containing block for all
        > descendants, just like the transform property does.

        Together, this means that no matter what the used value is of transform-style, it should
        establish a containing block and create a stacking context.

        This change adds a usedTransformStyle RenderStyle method and a StyleRareNonInheritedData member
        to adjust the return value appropriately. RenderStyle::preserves3D reads the used value
        and hasTransformRelatedProperty, which is used for establishing containing blocks
        and stacking contexts, uses the calculated value.

        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::preserves3D const): Use usedTransformStyle.
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGeometry): This now calls preserve3D() and usedTransformStyle3D().
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::recompositeChangeRequiresGeometryUpdate): Ditto.
        (WebCore::RenderLayerCompositor::requiresCompositingForBackfaceVisibility const): Ditto.
        (WebCore::RenderLayerCompositor::computeIndirectCompositingReason const): Ditto.
        (WebCore::RenderLayerCompositor::styleChangeMayAffectIndirectCompositingReasons): Ditto.
        (WebCore::RenderLayerCompositor::layerHas3DContent const): Ditto.
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::changeRequiresRecompositeLayer const): Ditto.
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::hasTransformRelatedProperty const): Modified to look at the calculated value explicitly.
        (WebCore::RenderStyle::usedTransformStyle3D const): Return 'flat' when the property is forced to flat.
        (WebCore::RenderStyle::preserves3D const): Look at the used value.
        (WebCore::RenderStyle::setTransformStyleForcedToFlat): Added.
        * rendering/style/StyleRareNonInheritedData.cpp: Added a new transformStyleForcedToFlat member.
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData): Ditto.
        (WebCore::StyleRareNonInheritedData::operator== const): Ditto.
        * rendering/style/StyleRareNonInheritedData.h:
        * style/StyleAdjuster.cpp:
        (WebCore::Style::Adjuster::adjust const): Call setTransformStyleForcedToFlat with the
        appropriate value when an element has 'preserve-3d' set.

2022-01-06  Antoine Quint <graouts@webkit.org>

        Unreviewed, removing duplicated code added in https://commits.webkit.org/245793@trunk.

        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::didMutateRules):

2022-01-06  Simon Fraser  <simon.fraser@apple.com>

        Ensure that the scrolling thread always commits layer position changes to reduce scrolling stutters (v2)
        https://bugs.webkit.org/show_bug.cgi?id=234937

        Reviewed by Tim Horton.

        Refine the logic added in r286932, which tries to ensure that the scrolling thread commits a
        layer position change in cases where the main thread is also in the middle of a commit.

        The condition used in r286932 forced a layer position change if the scroll position had
        changed from the scroll position at the last display refresh. Tracing shows that this isn't
        always correct, so, instead, use ThreadedScrollingTree's "desynchronized" state as the
        signal to force a position change. We can thus remove the code related to maintaining
        scrollPositionAtLastDisplayRefresh.

        However, towards the end of a momentum scroll, when there isn't an event on every display
        refresh, this caused too many forced commits. So make two changes to reduce the frequency of
        going into the desynchronized state here:
        
        1. Not every display refresh triggers a rendering update. So tell ThreadedScrollingTree, via
           RenderingUpdateScheduler, Page and ScrollingCoordinatorMac if a rendering update was scheduled.
           ThreadedScrollingTree::displayDidRefreshOnScrollingThread() uses this knowledge to avoid
           scheduling the delayed rendering update detection timer.

        2. Not every rendering update results in a CA commit, yet the code assumed this. Fix by having
           ScrollingTreeMac::didCompleteRenderingUpdate() check to see if a CA transaction is active.
           This stops waitForRenderingUpdateCompletionOrTimeout() waiting for a signal that never
           comes and thus timing out.

        * page/Page.cpp:
        (WebCore::Page::scheduledRenderingUpdate):
        * page/Page.h:
        * page/RenderingUpdateScheduler.cpp:
        (WebCore::RenderingUpdateScheduler::scheduleRenderingUpdate):
        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollingCoordinator::scheduledRenderingUpdate):
        * page/scrolling/ScrollingTree.h:
        (WebCore::ScrollingTree::isScrollingTreeMac const):
        (WebCore::ScrollingTree::WTF_REQUIRES_LOCK):
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::updateScrollPositionAtLastDisplayRefresh): Deleted.
        * page/scrolling/ScrollingTreeScrollingNode.h:
        * page/scrolling/ThreadedScrollingTree.cpp:
        (WebCore::ThreadedScrollingTree::scheduledRenderingUpdate):
        (WebCore::ThreadedScrollingTree::willStartRenderingUpdate):
        (WebCore::ThreadedScrollingTree::didCompleteRenderingUpdate):
        (WebCore::ThreadedScrollingTree::displayDidRefreshOnScrollingThread):
        (WebCore::ThreadedScrollingTree::isScrollingSynchronizedWithMainThread):
        (WebCore::ThreadedScrollingTree::didCompletePlatformRenderingUpdate): Deleted.
        (WebCore::ThreadedScrollingTree::storeScrollPositionsAtLastDisplayRefresh): Deleted.
        * page/scrolling/ThreadedScrollingTree.h:
        (WebCore::ThreadedScrollingTree::WTF_GUARDED_BY_LOCK):
        * page/scrolling/mac/ScrollingCoordinatorMac.h:
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::scheduledRenderingUpdate):
        (WebCore::ScrollingCoordinatorMac::didCompletePlatformRenderingUpdate):
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeMac::repositionScrollingLayers):
        * page/scrolling/mac/ScrollingTreeMac.h:
        * page/scrolling/mac/ScrollingTreeMac.mm:
        (ScrollingTreeMac::didCompleteRenderingUpdate):
        (ScrollingTreeMac::didCompletePlatformRenderingUpdate):

2022-01-06  Tim Horton  <timothy_horton@apple.com>

        Move linkedOnOrAfter() to WTF
        https://bugs.webkit.org/show_bug.cgi?id=234942

        Reviewed by Darin Adler.

        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMWindowCustom.cpp:
        * bindings/js/JSWindowProxy.cpp:
        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::requiresFullscreenForVideoPlayback const):
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::makeCrossOriginAccessRequest):
        * page/Quirks.cpp:
        * page/SecurityOrigin.cpp:
        * platform/Timer.cpp:
        (WebCore::shouldSuppressThreadSafetyCheck):
        * platform/cocoa/VersionChecks.h: Removed.
        * platform/cocoa/VersionChecks.mm: Removed.
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        * platform/network/DataURLDecoder.cpp:
        * testing/js/WebCoreTestSupport.cpp:

2022-01-06  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add a helper function that returns the value of a std::optional<T> or constructs T if needed
        https://bugs.webkit.org/show_bug.cgi?id=234865

        Reviewed by Darin Adler.

        Use `valueOrDefault` where appropriate. See WTF/ChangeLog for more details.

        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp:
        (WebCore::convert):
        (WebCore::ApplePayPaymentHandler::didAuthorizePayment):
        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::applyConstraints):
        * Modules/mediastream/RTCIceCandidate.cpp:
        (WebCore::RTCIceCandidate::create):
        * Modules/webdatabase/SQLTransaction.cpp:
        (WebCore::SQLTransaction::executeSql):
        * Modules/webxr/WebXRBoundedReferenceSpace.cpp:
        (WebCore::WebXRBoundedReferenceSpace::updateIfNeeded):
        * dom/Document.cpp:
        * html/BaseDateAndTimeInputType.cpp:
        (WebCore::BaseDateAndTimeInputType::setupDateTimeChooserParameters):
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::handleClick):
        * html/canvas/CanvasRenderingContext2DBase.cpp:
        (WebCore::CanvasRenderingContext2DBase::isPointInPathInternal):
        (WebCore::CanvasRenderingContext2DBase::isPointInStrokeInternal):
        * layout/formattingContexts/inline/InlineLineBoxBuilder.cpp:
        (WebCore::Layout::LineBoxBuilder::build):
        * layout/formattingContexts/inline/InlineLineBoxVerticalAligner.cpp:
        (WebCore::Layout::LineBoxVerticalAligner::computeLineBoxLogicalHeight const):
        * layout/formattingContexts/table/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::setUsedGeometryForCells):
        * loader/DocumentLoader.cpp:
        * loader/FrameLoader.cpp:
        * loader/PolicyChecker.cpp:
        * loader/ResourceLoader.cpp:
        * loader/SubresourceLoader.cpp:
        * loader/cache/CachedResource.cpp:
        * loader/cache/CachedResourceLoader.cpp:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::updateSelectionForMouseDrag):
        (WebCore::EventHandler::lastKnownMousePosition const):
        (WebCore::EventHandler::handleMouseMoveEvent):
        (WebCore::EventHandler::handleMouseReleaseEvent):
        (WebCore::EventHandler::targetPositionInWindowForSelectionAutoscroll const):
        (WebCore::EventHandler::dispatchFakeMouseMoveEventSoonInQuad):
        (WebCore::EventHandler::fakeMouseMoveEventTimerFired):
        (WebCore::EventHandler::hoverTimerFired):
        * page/FrameView.cpp:
        (WebCore::FrameView::setLayoutViewportOverrideRect):
        * page/Page.cpp:
        (WebCore::Page::sampledPageTopColor const):
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::targetPositionInWindowForSelectionAutoscroll const):
        * page/scrolling/ScrollingTreeLatchingController.cpp:
        (WebCore::ScrollingTreeLatchingController::nodeDidHandleEvent):
        * platform/graphics/ShadowBlur.cpp:
        (WebCore::ShadowBlur::calculateLayerBoundingRect):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::paintCurrentFrameInContext):
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::naturalSize):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::setVisibleAndCoverageRects):
        * platform/graphics/transforms/TransformState.cpp:
        (WebCore::TransformState::mappedPoint const):
        (WebCore::TransformState::mapQuad const):
        (WebCore::TransformState::flattenWithTransform):
        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::systemPreviewInfo const):
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::filter):
        (WebCore::ResourceResponseBase::sanitizeHTTPHeaderFieldsAccordingToTainting):
        * rendering/PaintInfo.h:
        (WebCore::PaintInfo::applyTransform):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::relativePositionOffset const):
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::computeAutoRepeatTracksCount const):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositions):
        (WebCore::RenderLayer::paintLayerByApplyingTransform):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::layout):
        * rendering/svg/LegacyRenderSVGRoot.cpp:
        (WebCore::LegacyRenderSVGRoot::nodeAtPoint):
        * rendering/svg/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::nodeAtFloatPoint):
        * rendering/svg/RenderSVGForeignObject.cpp:
        (WebCore::RenderSVGForeignObject::nodeAtFloatPoint):
        * rendering/svg/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::nodeAtFloatPoint):
        * rendering/svg/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::hitTestClipContent):
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::clippedOverflowRect const):
        (WebCore::RenderSVGRoot::absoluteRects const):
        (WebCore::RenderSVGRoot::absoluteQuads const):
        * rendering/svg/RenderSVGShape.cpp:
        (WebCore::RenderSVGShape::nodeAtFloatPoint):
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::nodeAtFloatPoint):
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::clipContextToCSSClippingArea):
        * rendering/svg/SVGRenderingContext.cpp:
        (WebCore::SVGRenderingContext::clipToImageBuffer):
        * svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::calculateToAtEndOfDurationValue):
        (WebCore::SVGAnimateMotionElement::calculateFromAndToValues):
        (WebCore::SVGAnimateMotionElement::calculateFromAndByValues):
        * svg/SVGToOTFFontConversion.cpp:
        (WebCore::SVGToOTFFontConverter::processGlyphElement):
        (WebCore::SVGToOTFFontConverter::SVGToOTFFontConverter):
        * svg/properties/SVGPropertyTraits.h:
        (WebCore::SVGPropertyTraits<FloatPoint>::fromString):
        (WebCore::SVGPropertyTraits<FloatRect>::fromString):
        * testing/Internals.cpp:
        (WebCore::Internals::frameIdentifier const):
        (WebCore::Internals::pageIdentifier const):
        * workers/service/server/SWScriptStorage.cpp:
        (WebCore::SWScriptStorage::SWScriptStorage):

2022-01-06  Myles C. Maxfield  <mmaxfield@apple.com>

        REGRESSION(r281389): Text wraps unnecessarily within intrinsically-sized elements when using certain fonts and the inner HTML of the element contains a new line that is not preceded by a space
        https://bugs.webkit.org/show_bug.cgi?id=232939
        <rdar://problem/85254819>

        Reviewed by Alan Bujtas.

        We need newline characters to have the same width as space characters for 2 reasons:
        1. Our code implicitly depends on it. We have places where we measure a newline character in one place,
               and then later realize that we shouldn't have included its with so we subtract out the width of
               the space character. (For more information, read the comments of this bugzilla bug.) This assumes
               that the width of the newline character is equal to the width of the space character.
        2. We need it for correctness. Even if WebKit was entirely consistent about measuring the width of
               newline characters, we don't want to have the width of an element depend on the width of the
               newline character in the font. Every other browser forces newline characters to have the same
               width as space characters. And, even if we weren't concerned about compatibility (we are),
               we'd be producing bogus results because font designers aren't incentivized to put any meaningful
               values in their fonts for the width of a newline character, since no software actually uses it.

        Luckily, we already have our "charactersTreatedAsSpace" infrastructure, so we can just tweak it to have
        it set characters which are treated as space, but aren't the tab character, to have the same width as
        the space character.

        Test: fast/text/newline-width.html

        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::advanceInternal):

2022-01-06  Tim Horton  <timothy_horton@apple.com>

        Separate "linked-on-or-{before, after}-everything" override from the SDK version
        https://bugs.webkit.org/show_bug.cgi?id=234930

        Reviewed by Wenson Hsieh.

        * platform/cocoa/VersionChecks.mm:
        (WebCore::linkedOnOrAfter):
        Make use of the new bit instead of checking for Safari's bundle identifier.

        * testing/js/WebCoreTestSupport.cpp:
        (WebCoreTestSupport::setLinkedOnOrAfterEverythingForTesting):
        Adopt the new bit.

2022-01-06  Youenn Fablet  <youenn@apple.com>

        Microphone device filtering heuristic is too harsh
        https://bugs.webkit.org/show_bug.cgi?id=234596
        <rdar://problem/86803287>

        Reviewed by Eric Carlson.

        When audio capture happens, there are more audio devices and some audio devices get an input stream for echo cancellation.
        We add an API to disable that filtering which is used when capture is not done in the process where audio enumeration is done.
        A longer term solution should look at doing this filtering in all cases.

        Manually tested in Safari and Minibrowser.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/mediastream/mac/CoreAudioCaptureDeviceManager.cpp:
        * platform/mediastream/mac/CoreAudioCaptureDeviceManager.h:

2022-01-06  Simon Fraser  <simon.fraser@apple.com>

        A gentle momentum scroll into an edge sometimes fails to rubberband, stopping abruptly
        https://bugs.webkit.org/show_bug.cgi?id=234896

        Reviewed by Tim Horton.

        During the momentum phase of a scroll gesture we can hit the edge and try to determine that
        we should start a rubberband animation. If, at this time, we happen to be at the edge, then
        we'd fail to start the animation and the momentum would appear to stop abruptly.

        Two fixes were needed. First,
        ScrollingEffectsController::startRubberBandAnimationIfNecessary() looks at whether we're
        currently stretched, but we might be passing through the edge on the way into a rubberband,
        so also need to check for a stretch force.

        Second, ScrollAnimationRubberBand needs to not stop prematurely if, in its first callback,
        it's still at the edge even though it's animating into a rubberband. The easy fix here is to
        just avoid completion during the first few frames.

        I was unable to make a reliable layout test for this.

        * platform/mac/ScrollAnimationRubberBand.mm:
        (WebCore::ScrollAnimationRubberBand::serviceAnimation):
        * platform/mac/ScrollingEffectsController.mm:
        (WebCore::ScrollingEffectsController::startRubberBandAnimationIfNecessary):

2022-01-06  Tim Nguyen  <ntim@apple.com>

        Unprefix -webkit-print-color-adjust CSS property
        https://bugs.webkit.org/show_bug.cgi?id=201098

        Reviewed by Darin Adler.

        color-adjust is also a deprecated shorthand that just contains print-color-adjust.

        * animation/CSSPropertyAnimation.cpp:
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::valueForPropertyInStyle):
        * css/CSSProperties.json:
        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):
        (WebCore::CSSParserFastPaths::isKeywordPropertyID):

2022-01-06  Youenn Fablet  <youenn@apple.com>

        ReadableStream::lock should check whether there is an exception when getting ReadableStreamDefaultReader private constructor
        https://bugs.webkit.org/show_bug.cgi?id=234890

        Reviewed by Frédéric Wang and Mark Lam.

        Do in ReadableStream::lock like we are doing when getting ReadableStream private constructor in ReadableStream::create.
        For that reason, introduce a invokeConstructor utility function.

        Test: streams/readable-stream-lock-after-worker-terminates-crash.html

        * bindings/js/ReadableStream.cpp:

2022-01-06  Said Abou-Hallawa  <said@apple.com>

        REGRESSION(r285618):A crash may happen when calculating the color-interpolation of a referenced SVG filter
        https://bugs.webkit.org/show_bug.cgi?id=234918
        rdar://86928631

        Reviewed by Simon Fraser.

        When building a referenced SVGFilter, the color-interpolation property
        of the effect element is needed. If the effect element does not have a
        renderer, we fallback to the computed style property value. And if the
        SVG filter is inside an <iframe> which has media queries, a Document::
        updateLayout() will be forced. Building the SVGFilter should not invoke
        an updateLayout() since this may not be safe and out of order.

        Test: css3/filters/reference-filter-color-interpolation-update-layout.html

        * svg/graphics/filters/SVGFilterBuilder.cpp:
        (WebCore::colorInterpolationForElement):

2022-01-06  Antoine Quint  <graouts@webkit.org>

        Remove Animation::operator=
        https://bugs.webkit.org/show_bug.cgi?id=234915

        Reviewed by Yusuke Suzuki.

        This doesn't seem to be required, so let's remove it.

        * platform/animation/Animation.cpp:
        (WebCore::Animation::operator=): Deleted.
        * platform/animation/Animation.h:

2022-01-06  Antoine Quint  <graouts@webkit.org>

        [Web Animations] inserting a rule within a @keyframes rule should update animations
        https://bugs.webkit.org/show_bug.cgi?id=234895

        Reviewed by Darin Adler.

        Using the CSSOM, it is possible to insert or delete rules within an @keyframes rule.
        In fact, there are two WPT that check this behavior with the getKeyframes() and
        setKeyframes() methods.

        This would not have any effect until now because when we consider whether to invalidate
        animations in Styleable::updateCSSAnimations(), we look at the previous and current
        AnimationList and don't see any difference because we look, as far as keyframes are
        concerned, at the @keyframes name but not at the keyframes content.

        Now, when a rule is added or deleted from an @keyframes rule using the CSSOM, we notify
        the Document using the new keyframesRuleDidChange() method, which in turn checks all
        CSSAnimation objects applied to elements in that document using that @keyframes rule
        and notifies them of the change by calling keyframesRuleDidChange().

        This clears the keyframes on the associated KeyframeEffect, invalidates the target
        and sets a flag on the ElementAnimationRareData that this element is pending update
        to its CSS Animations' keyframe such that during the next call
        Styleable::updateCSSAnimations() we force the update even if the previous and current
        AnimationList look identical.

        During that next call to Styleable::updateCSSAnimations(), we will call into the new
        CSSAnimation::updateKeyframesIfNeeded() which will re-compute the keyframes based on the
        current set of rules within the @keyframes rule.

        The final piece of work required is to track when setKeyframes() is called on the effect
        that updates to the @keyframes rule should no longer apply since they keyframes were overriden
        by the Web Animations API. This is done by setting an additional flag in
        CSSAnimation::effectKeyframesWereSetUsingBindings().

        * animation/CSSAnimation.cpp:
        (WebCore::CSSAnimation::effectKeyframesWereSetUsingBindings):
        (WebCore::CSSAnimation::keyframesRuleDidChange):
        (WebCore::CSSAnimation::updateKeyframesIfNeeded):
        * animation/CSSAnimation.h:
        * animation/ElementAnimationRareData.h:
        (WebCore::ElementAnimationRareData::cssAnimationsDidUpdate):
        (WebCore::ElementAnimationRareData::keyframesRuleDidChange):
        (WebCore::ElementAnimationRareData::hasPendingKeyframesUpdate const):
        * animation/KeyframeEffect.cpp:
        (WebCore::KeyframeEffect::keyframesRuleDidChange):
        * animation/KeyframeEffect.h:
        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::didMutateRules):
        (WebCore::CSSStyleSheet::RuleMutationScope::RuleMutationScope):
        (WebCore::CSSStyleSheet::RuleMutationScope::~RuleMutationScope):
        * css/CSSStyleSheet.h:
        * dom/Document.cpp:
        (WebCore::Document::keyframesRuleDidChange):
        * dom/Document.h:
        * dom/Element.cpp:
        (WebCore::Element::cssAnimationsDidUpdate):
        (WebCore::Element::keyframesRuleDidChange):
        (WebCore::Element::hasPendingKeyframesUpdate const):
        * dom/Element.h:
        * style/Styleable.cpp:
        (WebCore::Styleable::updateCSSAnimations const):
        * style/Styleable.h:
        (WebCore::Styleable::keyframesRuleDidChange const):

2022-01-06  Andres Gonzalez  <andresg_22@apple.com>

        Replace WTFMove + clear with std::exchange for AXObjectCache notification queues.
        https://bugs.webkit.org/show_bug.cgi?id=234919
        <rdar://problem/87194936>

        Reviewed by Chris Fleizach.

        Code clean up, per Darin Adler's comment in
        https://bugs.webkit.org/show_bug.cgi?id=234355.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::notificationPostTimerFired):
        (WebCore::AXObjectCache::passwordNotificationPostTimerFired):

2022-01-06  Tim Horton  <timothy_horton@apple.com>

        Always assume Safari is "linked-on-or-after" any SDK version
        https://bugs.webkit.org/show_bug.cgi?id=234914

        Reviewed by Aditya Keerthi.

        * platform/cocoa/VersionChecks.h:
        * platform/cocoa/VersionChecks.mm:
        (WebCore::linkedOnOrAfter):
        Remove the AssumeSafariIsAlwaysLinkedOnAfter::No mechanism, which no longer
        has any clients.

2022-01-06  Alex Christensen  <achristensen@webkit.org>

        Start using C++20
        https://bugs.webkit.org/show_bug.cgi?id=233963

        Reviewed by Yusuke Suzuki.

        * Configurations/Base.xcconfig:
        * DerivedSources.make:
        * platform/graphics/cocoa/IOSurface.mm:
        (WebCore::IOSurface::ensurePlatformContext):
        * platform/ios/wak/WebCoreThread.mm:

2022-01-06  Aditya Keerthi  <akeerthi@apple.com>

        Prevent reentrancy in -[WebCoreThemeView window]
        https://bugs.webkit.org/show_bug.cgi?id=234258
        <rdar://85927756>

        Reviewed by Wenson Hsieh.

        Prevent reentrancy in `-[WebCoreThemeView window]` by eagerly
        initializing the window (when `WebCoreThemeView` is created).

        `WebCoreThemeView` is already only created once per process (as a
        static variable in `ThemeMac::ensuredView`), so a static variable
        for the window is unnecessary.

        * platform/mac/ThemeMac.mm:
        (-[WebCoreThemeView init]):
        (-[WebCoreThemeView window]):

2022-01-06  Chris Dumez  <cdumez@apple.com>

        Drop implementation for COOP / COEP violation reporting
        https://bugs.webkit.org/show_bug.cgi?id=234899

        Reviewed by Geoffrey Garen.

        Drop implementation for COOP / COEP violation reporting. The implementation was based on an outdated version of the specification
        and has never shipped. Many COOP/COEP reporting tests are also flaky.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/CrossOriginEmbedderPolicy.cpp:
        (WebCore::contextURLForReport): Deleted.
        (WebCore::sendCOEPPolicyInheritenceViolation): Deleted.
        (WebCore::sendCOEPCORPViolation): Deleted.
        * loader/CrossOriginEmbedderPolicy.h:
        * loader/CrossOriginOpenerPolicy.cpp:
        (WebCore::enforceResponseCrossOriginOpenerPolicy):
        (WebCore::doCrossOriginOpenerHandlingOfResponse):
        (WebCore::crossOriginOpenerPolicyValueToEffectivePolicyString): Deleted.
        (WebCore::sendViolationReportWhenNavigatingToCOOPResponse): Deleted.
        (WebCore::sendViolationReportWhenNavigatingAwayFromCOOPResponse): Deleted.
        * loader/CrossOriginOpenerPolicy.h:
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::willSendRequest):
        (WebCore::DocumentLoader::doCrossOriginOpenerHandlingOfResponse):
        (WebCore::DocumentLoader::responseReceived):
        * loader/PingLoader.cpp:
        (WebCore::PingLoader::sendReportToEndpoint): Deleted.
        * loader/PingLoader.h:
        * loader/ReportingEndpointsCache.cpp: Removed.
        (WebCore::ReportingEndpointsCache::Endpoint::Endpoint): Deleted.
        (WebCore::ReportingEndpointsCache::Endpoint::hasExpired const): Deleted.
        (WebCore::ReportingEndpointsCache::create): Deleted.
        (WebCore::ReportingEndpointsCache::addEndpointsFromResponse): Deleted.
        (WebCore::ReportingEndpointsCache::addEndpointsFromReportToHeader): Deleted.
        (WebCore::ReportingEndpointsCache::addEndpointFromDictionary): Deleted.
        (WebCore::ReportingEndpointsCache::endpointURL const): Deleted.
        * loader/ReportingEndpointsCache.h: Removed.
        * page/Page.cpp:
        * page/Page.h:
        (WebCore::Page::reportingEndpointsCache): Deleted.
        * page/PageConfiguration.cpp:
        * page/PageConfiguration.h:

2022-01-06  Chris Dumez  <cdumez@apple.com>

        Drop unnecessary data member in WorkerThreadableLoader
        https://bugs.webkit.org/show_bug.cgi?id=234907

        Reviewed by Youenn Fablet.

        Drop unnecessary data member in WorkerThreadableLoader. It is unused and holding a strong
        reference to the WorkerGlobalScope for an extended period of time can lead to issues such
        as Bug 230109.

        * loader/WorkerThreadableLoader.cpp:
        (WebCore::WorkerThreadableLoader::WorkerThreadableLoader):
        * loader/WorkerThreadableLoader.h:

2022-01-06  Chris Dumez  <cdumez@apple.com>

        Potential high CPU usage on macrumors.com
        https://bugs.webkit.org/show_bug.cgi?id=234867
        <rdar://85382450>

        Reviewed by Geoffrey Garen.

        The issue would occur when a suspended EventLoopTaskGroup had pending tasks and was getting marked
        as ready to stop. The "ready to stop" concept was introduced in r269227 so that we would only stop
        event loop groups for a given origin once all groups in that origin are ready to stop. This was so
        that promises from detached iframes could resolve when scripted from another frame. The bug here
        was that an EventLoopTaskGroup could move from "Suspended" state (a mode in which its tasks are not
        executed) and into a "ReadyToStop" state (a mode in which its tasks are executed until all groups
        in its origin are ready to stop). As a result, we would take a EventLoopGroup out of suspended
        state unintentionally. This was causing a rescheduling loop in DeferredPromise::callFunction()
        which would cause high CPU usage. Because activeDOMObjectsAreSuspended() returns true,
        callFunction() would not call the JS function and would instead schedule a task on the event loop
        to do so. The exception here is that the event loop group is suspended too and thus the scheduled
        task will not run until the ActiveDOMObjects (and the event loop group) get resumed (i.e. page is
        restored from the back/forward cache). However, due to the bug above, the event loop group was
        unexpected NOT suspended and would run the scheduled task on the next runloop iteration and
        callFunction() would just keep rescheduling itself in a loop.

        To address the issue, we now cancel all tasks in the group and stop it permanently when its state
        moves from "suspended" to "ready to stop". The state moves from "suspended" to "ready to stop"
        when a CachedPage gets destroyed. As this point, the tasks in this group will never run since
        we're suspended and we'll never get out of suspension (ready to stop).

        * bindings/js/JSDOMPromiseDeferred.cpp:
        (WebCore::DeferredPromise::callFunction):
        * dom/EventLoop.cpp:
        (WebCore::EventLoop::resumeGroup):
        (WebCore::EventLoop::run):
        (WebCore::EventLoop::clearAllTasks):
        * dom/EventLoop.h:
        (WebCore::EventLoopTaskGroup::markAsReadyToStop):
        (WebCore::EventLoopTaskGroup::isStoppedPermanently const):
        (WebCore::EventLoopTaskGroup::isSuspended const):
        (WebCore::EventLoopTaskGroup::isStoppedPermanently): Deleted.
        (WebCore::EventLoopTaskGroup::isSuspended): Deleted.

2022-01-06  Jean-Yves Avenard  <jya@apple.com>

        Content Filtering should be using SharedBuffer instead of copying its data
        https://bugs.webkit.org/show_bug.cgi?id=234713
        rdar://problem/86947433

        Reviewed by Youenn Fablet.

        We can directly construct the NSData used by ParentalControlsContentFilter
        and NetworkExtensionContentFilter from the SharedBuffer.

        No change in observable behaviour.

        * loader/ContentFilter.cpp:
        (WebCore::ContentFilter::continueAfterDataReceived):
        * loader/ContentFilter.h:
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::dataReceived):
        * platform/PlatformContentFilter.h:
        * platform/cocoa/NetworkExtensionContentFilter.h:
        * platform/cocoa/NetworkExtensionContentFilter.mm:
        (WebCore::NetworkExtensionContentFilter::addData):
        * platform/cocoa/ParentalControlsContentFilter.h:
        * platform/cocoa/ParentalControlsContentFilter.mm:
        (WebCore::ParentalControlsContentFilter::addData):
        * testing/MockContentFilter.cpp:
        (WebCore::MockContentFilter::addData):
        * testing/MockContentFilter.h:

2022-01-06  Jean-Yves Avenard  <jya@apple.com>

        Have CachedRawResourceClient and related networking actors use SharedBuffer.
        https://bugs.webkit.org/show_bug.cgi?id=232424
        rdar://84744687

        Reviewed by Youenn Fablet.

        We modify all didReceiveData and related methods so that they no longer
        use uint8_t*/int and instead use SharedBuffer.
        We do the same for any intermediaries used by the various didReceiveData
        implementations.
        This will facilitate moving networking off the main thread in the GPU
        process and allows to remove several memory allocations and copies at the
        process boundaries.
        We can now consider transfer the underlying SharedMemory created in
        the network process all the way to the GPU process.

        Fly-by fix: change FragmentedSharedBuffer type to SharedBuffer when appropriate.

        No change in observable behaviour. Covered by all existing tests.

        * Modules/fetch/FetchBodyConsumer.cpp:
        (WebCore::FetchBodyConsumer::append):
        * Modules/fetch/FetchBodyConsumer.h:
        * Modules/fetch/FetchBodyOwner.cpp:
        (WebCore::FetchBodyOwner::blobChunk):
        * Modules/fetch/FetchBodyOwner.h:
        * Modules/fetch/FetchLoader.cpp:
        (WebCore::FetchLoader::didReceiveData):
        * Modules/fetch/FetchLoader.h:
        * Modules/fetch/FetchLoaderClient.h:
        (WebCore::FetchLoaderClient::didReceiveData):
        * Modules/fetch/FetchResponse.cpp:
        (WebCore::FetchResponse::BodyLoader::didReceiveData):
        (WebCore::FetchResponse::consumeChunk):
        * Modules/fetch/FetchResponse.h:
        * Modules/model-element/HTMLModelElement.cpp:
        (WebCore::HTMLModelElement::dataReceived):
        * Modules/model-element/HTMLModelElement.h:
        * Modules/streams/ReadableStreamSink.h:
        * fileapi/FileReaderLoader.cpp:
        (WebCore::FileReaderLoader::didReceiveData):
        * fileapi/FileReaderLoader.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didReceiveDataImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didReceiveData):
        * inspector/NetworkResourcesData.cpp:
        (WebCore::NetworkResourcesData::ResourceData::appendData):
        (WebCore::NetworkResourcesData::maybeAddResourceData):
        * inspector/NetworkResourcesData.h:
        * inspector/agents/InspectorNetworkAgent.cpp:
        (WebCore::InspectorNetworkAgent::didReceiveResponse):
        (WebCore::InspectorNetworkAgent::didReceiveData):
        (WebCore::InspectorNetworkAgent::interceptRequestWithResponse):
        * inspector/agents/InspectorNetworkAgent.h:
        * loader/ContentFilter.cpp:
        (WebCore::ContentFilter::deliverResourceData):
        * loader/ContentFilterClient.h:
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::finishedLoading):
        (WebCore::DocumentLoader::continueAfterContentPolicy):
        (WebCore::DocumentLoader::commitLoad):
        (WebCore::DocumentLoader::commitData):
        (WebCore::DocumentLoader::dataReceived):
        (WebCore::DocumentLoader::maybeCreateArchive):
        (WebCore::DocumentLoader::maybeFinishLoadingMultipartContent):
        (WebCore::DocumentLoader::dataReceivedThroughContentFilter):
        * loader/DocumentLoader.h:
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::dataReceived):
        (WebCore::DocumentThreadableLoader::didReceiveData):
        (WebCore::DocumentThreadableLoader::didFinishLoading):
        (WebCore::DocumentThreadableLoader::loadRequest):
        * loader/DocumentThreadableLoader.h:
        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::addData):
        * loader/DocumentWriter.h:
        * loader/EmptyClients.cpp:
        (WebCore::EmptyFrameLoaderClient::committedLoad):
        * loader/EmptyFrameLoaderClient.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::willLoadMediaElementURL):
        (WebCore::FrameLoader::commitProvisionalLoad):
        (WebCore::FrameLoader::loadResourceSynchronously):
        (WebCore::FrameLoader::loadedResourceFromMemoryCache):
        * loader/FrameLoaderClient.h:
        * loader/MediaResourceLoader.cpp:
        (WebCore::MediaResource::dataReceived):
        * loader/MediaResourceLoader.h:
        * loader/NetscapePlugInStreamLoader.cpp:
        (WebCore::NetscapePlugInStreamLoader::didReceiveData):
        * loader/NetscapePlugInStreamLoader.h:
        * loader/ResourceLoadNotifier.cpp:
        (WebCore::ResourceLoadNotifier::didReceiveData):
        (WebCore::ResourceLoadNotifier::dispatchDidReceiveData):
        (WebCore::ResourceLoadNotifier::sendRemainingDelegateMessages):
        * loader/ResourceLoadNotifier.h:
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::loadDataURL):
        (WebCore::ResourceLoader::addBuffer):
        (WebCore::ResourceLoader::didReceiveData):
        (WebCore::ResourceLoader::didReceiveBuffer):
        * loader/ResourceLoader.h:
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didReceiveBuffer):
        * loader/SubresourceLoader.h:
        * loader/SubstituteResource.h:
        (WebCore::SubstituteResource::append):
        * loader/ThreadableLoaderClient.h:
        (WebCore::ThreadableLoaderClient::didReceiveData):
        * loader/ThreadableLoaderClientWrapper.h:
        (WebCore::ThreadableLoaderClientWrapper::didReceiveData):
        * loader/WorkerThreadableLoader.cpp:
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didReceiveData):
        * loader/WorkerThreadableLoader.h:
        * loader/appcache/ApplicationCacheHost.cpp:
        (WebCore::ApplicationCacheHost::mainResourceDataReceived):
        * loader/appcache/ApplicationCacheHost.h:
        * loader/appcache/ApplicationCacheResource.cpp:
        (WebCore::ApplicationCacheResource::deliver):
        * loader/appcache/ApplicationCacheResourceLoader.cpp:
        (WebCore::ApplicationCacheResourceLoader::dataReceived):
        * loader/appcache/ApplicationCacheResourceLoader.h:
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::updateBufferInternal):
        (WebCore::CachedImage::updateBuffer):
        (WebCore::CachedImage::updateData):
        * loader/cache/CachedImage.h:
        * loader/cache/CachedRawResource.cpp:
        (WebCore::CachedRawResource::calculateIncrementalDataChunk const):
        (WebCore::CachedRawResource::updateBuffer):
        (WebCore::CachedRawResource::updateData):
        (WebCore::CachedRawResource::finishLoading):
        (WebCore::CachedRawResource::notifyClientsDataWasReceived):
        (WebCore::CachedRawResource::didAddClient):
        * loader/cache/CachedRawResource.h:
        * loader/cache/CachedRawResourceClient.h:
        (WebCore::CachedRawResourceClient::dataReceived):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::updateData):
        * loader/cache/CachedResource.h:
        * loader/ios/LegacyPreviewLoader.h:
        * loader/ios/LegacyPreviewLoader.mm:
        (WebCore::LegacyPreviewLoader::didReceiveData):
        (WebCore::LegacyPreviewLoader::previewConverterDidReceiveData):
        * page/EventSource.cpp:
        (WebCore::EventSource::didReceiveData):
        * page/EventSource.h:
        * platform/SharedBuffer.cpp:
        (WebCore::FragmentedSharedBuffer::takeData): Update due to DataSegmentVectorEntry::segment being const
        (WebCore::FragmentedSharedBuffer::forEachSegmentAsSharedBuffer const): Add convenience method.
        (WebCore::SharedBuffer::SharedBuffer):
        (WebCore::SharedBufferDataView::SharedBufferDataView):
        (WebCore::SharedBufferDataView::createSharedBuffer const):
        * platform/SharedBuffer.h: Make DataSegmentVectorEntry::segment const.
        (WebCore::SharedBuffer::create):
        (WebCore::SharedBuffer::SharedBuffer):
        * platform/graphics/PlatformMediaResourceLoader.h:
        (WebCore::PlatformMediaResourceClient::dataReceived):
        * platform/graphics/avfoundation/cf/WebCoreAVCFResourceLoader.cpp:
        (WebCore::WebCoreAVCFResourceLoader::dataReceived):
        * platform/graphics/avfoundation/cf/WebCoreAVCFResourceLoader.h:
        * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.mm:
        (WebCore::CachedResourceMediaLoader::dataReceived):
        (WebCore::PlatformResourceMediaLoader::dataReceived):
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (CachedResourceStreamingClient::dataReceived):
        * platform/network/ResourceHandleClient.cpp:
        (WebCore::ResourceHandleClient::didReceiveBuffer):
        * platform/network/ResourceHandleClient.h:
        (WebCore::ResourceHandleClient::didReceiveData):
        * platform/network/SynchronousLoaderClient.cpp:
        (WebCore::SynchronousLoaderClient::didReceiveData):
        * platform/network/SynchronousLoaderClient.h:
        * platform/network/cocoa/RangeResponseGenerator.mm:
        (WebCore::RangeResponseGenerator::giveResponseToTaskIfBytesInRangeReceived):
        * platform/network/cocoa/WebCoreNSURLSession.h:
        * platform/network/cocoa/WebCoreNSURLSession.mm:
        (WebCore::WebCoreNSURLSessionDataTaskClient::dataReceived):
        (-[WebCoreNSURLSessionDataTask resource:receivedData:]):
        * platform/network/curl/CurlCacheManager.cpp:
        (WebCore::CurlCacheManager::didReceiveData):
        * platform/network/curl/CurlCacheManager.h:
        * platform/network/curl/CurlDownload.cpp:
        (WebCore::CurlDownload::curlDidReceiveData):
        * platform/network/curl/CurlDownload.h:
        * platform/network/curl/CurlMultipartHandle.cpp:
        (WebCore::CurlMultipartHandle::didReceiveData):
        * platform/network/curl/CurlMultipartHandle.h:
        * platform/network/curl/CurlMultipartHandleClient.h:
        * platform/network/curl/CurlRequest.cpp:
        (WebCore::CurlRequest::didReceiveData):
        (WebCore::CurlRequest::didReceiveDataFromMultipart):
        * platform/network/curl/CurlRequest.h:
        * platform/network/curl/CurlRequestClient.h:
        * platform/network/curl/CurlResourceHandleDelegate.cpp:
        (WebCore::CurlResourceHandleDelegate::curlDidReceiveData):
        * platform/network/curl/CurlResourceHandleDelegate.h:
        * platform/network/curl/CurlStream.cpp:
        (WebCore::CurlStream::tryToReceive):
        * platform/network/curl/CurlStream.h:
        * platform/network/curl/SocketStreamHandleImpl.h:
        * platform/network/curl/SocketStreamHandleImplCurl.cpp:
        (WebCore::SocketStreamHandleImpl::didReceiveData):
        * platform/network/ios/LegacyPreviewLoaderClient.h:
        (WebCore::LegacyPreviewLoaderClient::didReceiveData):
        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm:
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:didReceiveData:lengthReceived:]):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged):
        * workers/WorkerFontLoadRequest.cpp:
        (WebCore::WorkerFontLoadRequest::didReceiveData):
        * workers/WorkerFontLoadRequest.h:
        * workers/WorkerScriptLoader.cpp:
        (WebCore::WorkerScriptLoader::didReceiveData):
        * workers/WorkerScriptLoader.h:
        * workers/service/context/ServiceWorkerFetch.h:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::didReceiveData):
        * xml/XMLHttpRequest.h:

2022-01-06  Alan Bujtas  <zalan@apple.com>

        Ensure that the top layer is always anchored to the RenderView
        https://bugs.webkit.org/show_bug.cgi?id=231292
        <rdar://problem/83941854>

        Reviewed by Simon Fraser.

        A fixed positioned block level box is not necessarily anchored to the RenderView (see canContainFixedPositionObjects).
        This patch ensures that we skip those ancestors and return the RenderView as the containing block for the top layer content.

        https://fullscreen.spec.whatwg.org/#new-stacking-layer
        "If the top layer position property computes to fixed, its containing block is the viewport, and the initial containing block otherwise."

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::containingBlock const):
        (WebCore::containerForElement):

2022-01-06  Jean-Yves Avenard  <jya@apple.com>

        length argument passed to didReceiveData can never be negative.
        https://bugs.webkit.org/show_bug.cgi?id=234916
        rdar://problem/87190340

        Reviewed by Youenn Fablet.

        Signed int argument will be removed in bug 232424.

        No change in observable behaviour. Covered by existing tests.

        * inspector/agents/InspectorNetworkAgent.cpp:
        * workers/WorkerScriptLoader.cpp:
        (WebCore::WorkerScriptLoader::didReceiveData):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::didReceiveData):

2022-01-06  Youenn Fablet  <youenn@apple.com>

        WorkerMessagePortChannelProvider::takeAllMessagesForPort should guarantee execution of the takeMessagePort callback
        https://bugs.webkit.org/show_bug.cgi?id=234883
        <rdar://86708232>

        Reviewed by Alex Christensen.

        In case we enqueue a worker task, and before the task is executed, the worker is terminated,
        the task will not be executed and will be destroyed in worker thread.
        Instead, we should make sure to execute the callback in main thread.
        Introduce MainThreadCompletionHandler for that purpose.
        Covered by existing tests.

        * dom/messageports/WorkerMessagePortChannelProvider.cpp:
        (WebCore::MainThreadCompletionHandler::MainThreadCompletionHandler):
        (WebCore::MainThreadCompletionHandler::~MainThreadCompletionHandler):
        (WebCore::MainThreadCompletionHandler::complete):
        (WebCore::WorkerMessagePortChannelProvider::takeAllMessagesForPort):

2022-01-05  Antoine Quint  <graouts@webkit.org>

        computed style for transition longhand properties is wrong
        https://bugs.webkit.org/show_bug.cgi?id=234880

        Reviewed by Antti Koivisto.

        We had two issues in the way we treated animation lists.

        First, we would always output the filled-in values in the computed style, which
        meant that setting `animation-name: one, two; animation-duration: 1s` would yield
        `1s, 1s` instead of just `1s` for animation-duration. So we now maintain a bit
        on Animation to indicate whether a given value was set for filling and
        ComputedStyleExtractor::addValueForAnimationPropertyToList() can now query it
        before adding this value when returning the computed style.

        Second, in RenderStyle::adjustTransitions(), we would mistakenly try to remove entries
        if we found a transition-property repeated. However, this is valid so we remove the
        code related to this entirely.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::addValueForAnimationPropertyToList):
        * platform/animation/Animation.cpp:
        (WebCore::Animation::Animation):
        * platform/animation/Animation.h:
        (WebCore::Animation::clearDelay):
        (WebCore::Animation::clearDirection):
        (WebCore::Animation::clearDuration):
        (WebCore::Animation::clearFillMode):
        (WebCore::Animation::clearIterationCount):
        (WebCore::Animation::clearPlayState):
        (WebCore::Animation::clearProperty):
        (WebCore::Animation::clearTimingFunction):
        (WebCore::Animation::fillDelay):
        (WebCore::Animation::fillDirection):
        (WebCore::Animation::fillDuration):
        (WebCore::Animation::fillFillMode):
        (WebCore::Animation::fillIterationCount):
        (WebCore::Animation::fillPlayState):
        (WebCore::Animation::fillProperty):
        (WebCore::Animation::fillTimingFunction):
        (WebCore::Animation::isDelayFilled const):
        (WebCore::Animation::isDirectionFilled const):
        (WebCore::Animation::isDurationFilled const):
        (WebCore::Animation::isFillModeFilled const):
        (WebCore::Animation::isIterationCountFilled const):
        (WebCore::Animation::isPlayStateFilled const):
        (WebCore::Animation::isPropertyFilled const):
        (WebCore::Animation::isTimingFunctionFilled const):
        * platform/animation/AnimationList.cpp:
        (WebCore::AnimationList::fillUnsetProperties):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::adjustTransitions):

2022-01-05  Nikolas Zimmermann  <nzimmermann@igalia.com>

        [LBSE] Rename RenderSVGShape -> LegacyRenderSVGShape
        https://bugs.webkit.org/show_bug.cgi?id=234877

        Reviewed by Rob Buis.

        Following the established procedure: rename RenderSVGShape -> LegacyRenderSVGShape.
        In a follow-up patch RenderSVGShape will be reintroduced for LBSE, inheriting from
        RenderSVGModelObject instead of LegacyRenderSVGModelObject.

        Covered by existing tests, no change in behaviour.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::supportsPath const):
        (WebCore::AccessibilityRenderObject::elementPath const):
        * accessibility/AccessibilitySVGElement.cpp:
        (WebCore::AccessibilitySVGElement::computeAccessibilityIsIgnored const):
        (WebCore::AccessibilitySVGElement::determineAccessibilityRole):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isLegacySVGShape const):
        (WebCore::RenderObject::isSVGShapeOrLegacySVGShape const):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::write):
        * rendering/svg/LegacyRenderSVGModelObject.cpp:
        (WebCore::isGraphicsElement):
        * rendering/svg/LegacyRenderSVGShape.cpp: Renamed from Source/WebCore/rendering/svg/RenderSVGShape.cpp.
        (WebCore::LegacyRenderSVGShape::LegacyRenderSVGShape):
        (WebCore::LegacyRenderSVGShape::updateShapeFromElement):
        (WebCore::LegacyRenderSVGShape::isEmpty const):
        (WebCore::LegacyRenderSVGShape::fillShape const):
        (WebCore::LegacyRenderSVGShape::strokeShape const):
        (WebCore::LegacyRenderSVGShape::shapeDependentStrokeContains):
        (WebCore::LegacyRenderSVGShape::shapeDependentFillContains const):
        (WebCore::LegacyRenderSVGShape::fillContains):
        (WebCore::LegacyRenderSVGShape::strokeContains):
        (WebCore::LegacyRenderSVGShape::layout):
        (WebCore::LegacyRenderSVGShape::nonScalingStrokePath const):
        (WebCore::LegacyRenderSVGShape::setupNonScalingStrokeContext):
        (WebCore::LegacyRenderSVGShape::nonScalingStrokeTransform const):
        (WebCore::LegacyRenderSVGShape::shouldGenerateMarkerPositions const):
        (WebCore::LegacyRenderSVGShape::fillShape):
        (WebCore::LegacyRenderSVGShape::strokeShape):
        (WebCore::LegacyRenderSVGShape::fillStrokeMarkers):
        (WebCore::LegacyRenderSVGShape::paint):
        (WebCore::LegacyRenderSVGShape::addFocusRingRects):
        (WebCore::LegacyRenderSVGShape::isPointInFill):
        (WebCore::LegacyRenderSVGShape::isPointInStroke):
        (WebCore::LegacyRenderSVGShape::getTotalLength const):
        (WebCore::LegacyRenderSVGShape::getPointAtLength const):
        (WebCore::LegacyRenderSVGShape::nodeAtFloatPoint):
        (WebCore::markerForType):
        (WebCore::LegacyRenderSVGShape::markerRect const):
        (WebCore::LegacyRenderSVGShape::calculateObjectBoundingBox const):
        (WebCore::LegacyRenderSVGShape::calculateStrokeBoundingBox const):
        (WebCore::LegacyRenderSVGShape::updateRepaintBoundingBox):
        (WebCore::LegacyRenderSVGShape::strokeWidth const):
        (WebCore::LegacyRenderSVGShape::hasSmoothStroke const):
        (WebCore::LegacyRenderSVGShape::drawMarkers):
        (WebCore::LegacyRenderSVGShape::createPath const):
        (WebCore::LegacyRenderSVGShape::processMarkerPositions):
        * rendering/svg/LegacyRenderSVGShape.h: Renamed from Source/WebCore/rendering/svg/RenderSVGShape.h.
        (WebCore::LegacyRenderSVGShape::setNeedsShapeUpdate):
        (WebCore::LegacyRenderSVGShape::hasPath const):
        (WebCore::LegacyRenderSVGShape::path const):
        (WebCore::LegacyRenderSVGShape::clearPath):
        (WebCore::LegacyRenderSVGShape::hasNonScalingStroke const):
        * rendering/svg/LegacyRenderSVGShapeInlines.h: Renamed from Source/WebCore/rendering/svg/RenderSVGShapeInlines.h.
        (WebCore::LegacyRenderSVGShape::graphicsElement const):
        * rendering/svg/RenderSVGEllipse.cpp:
        (WebCore::RenderSVGEllipse::RenderSVGEllipse):
        (WebCore::RenderSVGEllipse::updateShapeFromElement):
        (WebCore::RenderSVGEllipse::fillShape const):
        (WebCore::RenderSVGEllipse::strokeShape const):
        (WebCore::RenderSVGEllipse::shapeDependentStrokeContains):
        (WebCore::RenderSVGEllipse::shapeDependentFillContains const):
        * rendering/svg/RenderSVGEllipse.h:
        * rendering/svg/RenderSVGPath.cpp:
        (WebCore::RenderSVGPath::RenderSVGPath):
        (WebCore::RenderSVGPath::updateShapeFromElement):
        (WebCore::RenderSVGPath::strokeShape const):
        (WebCore::RenderSVGPath::shapeDependentStrokeContains):
        * rendering/svg/RenderSVGPath.h:
        * rendering/svg/RenderSVGRect.cpp:
        (WebCore::RenderSVGRect::RenderSVGRect):
        (WebCore::RenderSVGRect::rectElement const):
        (WebCore::RenderSVGRect::updateShapeFromElement):
        (WebCore::RenderSVGRect::fillShape const):
        (WebCore::RenderSVGRect::strokeShape const):
        (WebCore::RenderSVGRect::shapeDependentStrokeContains):
        (WebCore::RenderSVGRect::shapeDependentFillContains const):
        * rendering/svg/RenderSVGRect.h:
        * rendering/svg/RenderSVGResource.h:
        (WebCore::RenderSVGResource::postApplyResource):
        * rendering/svg/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::drawContentIntoMaskImage):
        (WebCore::RenderSVGResourceClipper::calculateClipContentRepaintRect):
        (WebCore::RenderSVGResourceClipper::hitTestClipContent):
        * rendering/svg/RenderSVGResourceContainer.cpp:
        (WebCore::RenderSVGResourceContainer::transformOnNonScalingStroke):
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::postApplyResource):
        * rendering/svg/RenderSVGResourceFilter.h:
        * rendering/svg/RenderSVGResourceGradient.cpp:
        (WebCore::RenderSVGResourceGradient::postApplyResource):
        * rendering/svg/RenderSVGResourceGradient.h:
        * rendering/svg/RenderSVGResourcePattern.cpp:
        (WebCore::RenderSVGResourcePattern::postApplyResource):
        * rendering/svg/RenderSVGResourcePattern.h:
        * rendering/svg/RenderSVGResourceSolidColor.cpp:
        (WebCore::RenderSVGResourceSolidColor::postApplyResource):
        * rendering/svg/RenderSVGResourceSolidColor.h:
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::releasePaintingResource):
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::computeContainerBoundingBoxes):
        (WebCore::SVGRenderSupport::layoutChildren):
        (WebCore::SVGRenderSupport::applyStrokeStyleToContext):
        * rendering/svg/SVGRenderTreeAsText.cpp:
        (WebCore::writeStyle):
        (WebCore::operator<<):
        (WebCore::write):
        * rendering/svg/SVGRenderTreeAsText.h:
        * svg/SVGGeometryElement.cpp:
        (WebCore::SVGGeometryElement::getTotalLength const):
        (WebCore::SVGGeometryElement::getPointAtLength const):
        (WebCore::SVGGeometryElement::isPointInFill):
        (WebCore::SVGGeometryElement::isPointInStroke):
        * svg/SVGLineElement.cpp:
        (WebCore::SVGLineElement::svgAttributeChanged):

2022-01-06  Youenn Fablet  <youenn@apple.com>

        "ReadableStream uploading is not supported" when fetch()ing a Request that has been logged to console
        https://bugs.webkit.org/show_bug.cgi?id=203617
        <rdar://problem/56772045>

        Reviewed by Alex Christensen.

        Keep the underlying body even if a stream is created.
        This allows to fetch the request even if request.body is accessed.

        Test: http/wpt/fetch/fetch-request-with-stream-body.html

        * Modules/beacon/NavigatorBeacon.cpp:
        * Modules/fetch/FetchBody.cpp:
        * Modules/fetch/FetchBody.h:
        * Modules/fetch/FetchBodyOwner.h:

2022-01-05  Alan Bujtas  <zalan@apple.com>

        Text-decoration color not changing back after input blur with outline removed
        https://bugs.webkit.org/show_bug.cgi?id=234800
        <rdar://problem/87145636>

        Reviewed by Antti Koivisto.

        This patch fixes the case when a decoration type of style value changes on the input
        element (e.g. text-decoration-color) and the inner renderer does not get notified through the usual styleDidChange
        flow because the property is non-inherited.

        Test: fast/forms/dynamic-text-decoration-change.html

        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::styleDidChange):

2022-01-05  Wenson Hsieh  <wenson_hsieh@apple.com>

        Modal container observer should detect and suppress elements that prevent user interaction
        https://bugs.webkit.org/show_bug.cgi?id=234695

        Reviewed by Tim Horton.

        Add support for additionally detecting and hiding viewport-constrained elements whose sole (apparent) purpose
        is to prevent the user from interacting with the rest of the page, after suppressing a detected modal
        container. See comments below for more details.

        Test: ModalContainerObservation.HideUserInteractionBlockingElement

        * page/ModalContainerObserver.cpp:
        (WebCore::ModalContainerObserver::setContainer):

        When setting (and hiding) a detected modal container, queue an internal task to try and identify an element
        underneath the modal container that may be preventing user interaction with the rest of the page (note that this
        must be queued as an async task because it may trigger layout, unlike `updateModalContainerIfNeeded`). See below
        for more information.

        (WebCore::ModalContainerObserver::hideUserInteractionBlockingElementIfNeeded):

        Implement a simple heuristic to detect elements that block user interaction after the modal container has been
        hidden. To do this, we hit-test five locations relative to the absolute rect for fixed-position elements: one
        hit-test in the center of the rect, and 4 more near all of the corners (shifted by 1px towards the center).

        If all 5 hit-tests find the same viewport-constrained element with no rendered children that isn't also the
        document or body element, we flag it as the `m_userInteractionBlockingElement` and hide it during style
        adjustment in the same way as the modal container (see below).

        (WebCore::ModalContainerObserver::revealModalContainer):
        * page/ModalContainerObserver.h:
        (WebCore::ModalContainerObserver::shouldHide const):

        Add `m_userInteractionBlockingElement` and hide both the modal container as well as this new element during
        style adjustment.

2022-01-05  Antoine Quint  <graouts@webkit.org>

        Refactor computed style code for transition-property and the transition shorthand
        https://bugs.webkit.org/show_bug.cgi?id=234872

        Reviewed by Antti Koivisto.

        There's no reason for the "transition-property" and "transition" properties to be
        handled any differently to any other "transition-" property or the "animation"
        shorthand.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::animationShorthandValue):
        (WebCore::ComputedStyleExtractor::valueForPropertyInStyle):
        (WebCore::transitionPropertyValue): Deleted.

2022-01-05  Chris Dumez  <cdumez@apple.com>

        [ Monterey Debug arm64 ] ASSERTION FAILED: result == &worker ./workers/service/server/SWServer.cpp(837) : void WebCore::SWServer::workerContextTerminated(WebCore::SWServerWorker &)
        https://bugs.webkit.org/show_bug.cgi?id=233219
        <rdar://problem/85478756>

        Reviewed by Darin Adler.

        The crash would occur when we get notified by the service worker process that a given service worker
        was terminated right after we've determined that we no longer needed a given service worker process
        and called markAllWorkersForRegistrableDomainAsTerminated(). This race would cause
        SWServer::workerContextTerminated() to get called twice for the same worker. During the second call,
        we would retrieve a null worker from the HashMap and hit the assertion. I updated the call to ignore
        the call to workerContextTerminated() if the worker was already removed from the HashMap and added
        an assertion to make sure we've already marked the service worker as "not running" in this case.

        No new tests, covered by existing API test that is flakily crashing in debug.

        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::workerContextTerminated):

2022-01-05  Alex Christensen  <achristensen@webkit.org>

        Fix Windows and Linux builds
        https://bugs.webkit.org/show_bug.cgi?id=234405

        * platform/ThemeTypes.h:
        Missing semicolon.

2022-01-05  Megan Gardner  <megan_gardner@apple.com>

        Remove unneeded webkit specific CSS attribute for Image Control Menu.
        https://bugs.webkit.org/show_bug.cgi?id=234405

        Reviewed by Darin Adler.

        Test: fast/images/mac/image-controls-basic.html

        We do not actually need a specific CSS attribute to achieve the image control menu,
        so we should remove it to keep WebKit specific clutter out of our CSS implementation
        and we should keep track of the presence of the image control menu fully internally.
        Doing this also exposed several issues, including the fact that we had already run out
        of space for the storing of the ControlPart in RenderStyle. Also added a check to make
        sure that will not happen again.

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        * css/CSSProperties.json:
        * css/CSSValueKeywords.in:
        * css/parser/CSSParserIdioms.cpp:
        (WebCore::isValueAllowedInMode):
        * dom/mac/ImageControlsMac.cpp:
        (WebCore::ImageControlsMac::isInsideImageControls):
        * dom/mac/ImageControlsMac.h:
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::parseAttribute):
        (WebCore::HTMLImageElement::setAttachmentElement):
        (WebCore::HTMLImageElement::updateImageControls):
        * html/HTMLImageElement.h:
        * html/shadow/mac/imageControlsMac.css:
        (div#image-controls button#image-controls-button):
        * platform/ThemeTypes.h:
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::nodeForImageData const):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::autoAppearanceForElement const):
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::isImageControl const):
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::isImageControl const):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::setAppearance):
        (WebCore::RenderStyle::setEffectiveAppearance):
        * rendering/style/StyleRareNonInheritedData.h:
        * testing/Internals.cpp:
        (WebCore::Internals::hasImageControls const):
        * testing/Internals.h:
        * testing/Internals.idl:

2022-01-05  Tim Horton  <timothy_horton@apple.com>

        Move more SDK checks to linkedOnOrAfter()
        https://bugs.webkit.org/show_bug.cgi?id=234875

        Reviewed by Sam Weinig.

        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::requiresFullscreenForVideoPlayback const):
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::makeCrossOriginAccessRequest):
        * platform/Timer.cpp:
        (WebCore::shouldSuppressThreadSafetyCheck):
        * platform/cocoa/VersionChecks.h:

2022-01-05  Youenn Fablet  <youenn@apple.com>

        MediaRecorder should support the bitsPerSecond option
        https://bugs.webkit.org/show_bug.cgi?id=234784

        Reviewed by Darin Adler.

        In case bitsPerSecond is set, we now compute audioBitsPerSecond and videoBitsPerSecond value according to it.
        We set audioBitsPerSecond to a tenth of bitsPerSecond and set videoBitsPerSecond to the remaining available bandwidth.
        We then use minimum values of 8kbps for audio and 80kbps for video.
        As per spec, we compute these values at creation, start and stop times.
        We introduce dedicated class members for audio and video bitrates, similarly to the spec defining corresponding slots.

        Test: http/wpt/mediarecorder/MediaRecorder-bitrate.html

        * Modules/mediarecorder/MediaRecorder.cpp:
        * Modules/mediarecorder/MediaRecorder.h:
        * platform/mediarecorder/MediaRecorderPrivate.cpp:
        * platform/mediarecorder/MediaRecorderPrivate.h:
        * platform/mediarecorder/MediaRecorderPrivateAVFImpl.cpp:

2022-01-05  Youenn Fablet  <youenn@apple.com>

        Fetch using FormData with file doesn't go through Service Worker
        https://bugs.webkit.org/show_bug.cgi?id=187461
        <rdar://problem/41975544>

        Reviewed by Chris Dumez.

        Add support for reading formData based bodies through streams or regular methods like text.
        For that purpose, we add FormDataConsumer which allows serializing form datas that may contain files or blobs.
        Add the ability to load blobs from BlobLoader using the internal URL (stored in FormData) in lieu of passing a blob object.
        Enable fetch events for form data based fetch events.

        Test: http/wpt/service-workers/form-data-upload.html

        * Modules/fetch/FetchBody.cpp:
        * Modules/fetch/FetchBody.h:
        * Modules/fetch/FetchBodyConsumer.cpp:
        * Modules/fetch/FetchBodyConsumer.h:
        * Modules/fetch/FormDataConsumer.cpp: Added.
        * Modules/fetch/FormDataConsumer.h: Added.
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * fileapi/BlobLoader.h:
        * fileapi/FileReaderLoader.cpp:
        * fileapi/FileReaderLoader.h:
        * workers/service/context/ServiceWorkerFetch.cpp:

2022-01-05  Youenn Fablet  <youenn@apple.com>

        Make sure secure websocket connections in service workers can trigger authentication challenge callbacks
        https://bugs.webkit.org/show_bug.cgi?id=234809
        <rdar://85888177>

        Reviewed by Chris Dumez.

        * dom/Document.h:

2022-01-05  Martin Robinson  <mrobinson@webkit.org>

        Change offsetParent to match spec change
        https://bugs.webkit.org/show_bug.cgi?id=161788
        <rdar://problem/28230510>

        Reviewed by Simon Fraser.

        No new tests. This is covered by new test statements in web-platform-tests/css/cssom-view/offsetParent_element_test.html.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::offsetParent const): Update the offsetParent algorithm to return all elements
        that create containing blocks for absolutely positioned items and not just positioned elements.

2022-01-05  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r285915.
        https://bugs.webkit.org/show_bug.cgi?id=234873

        causes crashes

        Reverted changeset:

        "border-radius inline style should serialize with valid
        syntax"
        https://bugs.webkit.org/show_bug.cgi?id=183994
        https://commits.webkit.org/r285915

2022-01-05  Youenn Fablet  <youenn@apple.com>

        Tighten ServiceWorkerRegistrationKey::fromDatabaseKey
        https://bugs.webkit.org/show_bug.cgi?id=234838

        Reviewed by Chris Dumez.

        Add missing input validation checks.
        Covered by API test.
        In addition, validate that the registration key matches the other database fields.

        * workers/service/ServiceWorkerRegistrationKey.cpp:
        * workers/service/ServiceWorkerRegistrationKey.h:
        * workers/service/server/RegistrationDatabase.cpp:
        (WebCore::RegistrationDatabase::importRecords):

2022-01-05  Martin Robinson  <mrobinson@webkit.org>

        CSS `transform` property  should take into account transform reference box
        https://bugs.webkit.org/show_bug.cgi?id=234144
        <rdar://problem/86630206>

        Reviewed by Darin Adler.

        No new tests. This is covered by the existing WPT test:
            web-platform-tests/css/css-transforms/transform-percent-009.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::computedTransform): Use the transform reference box when computing the
        computed transform instead of always using the border box. This function is
        modified to take in a RenderElement to avoid casting. All callers pass a RenderElement.

2022-01-04  Frédéric Wang  <fwang@igalia.com>

        Protect frame from destruction in HTMLMediaElement::setupAndCallJS
        https://bugs.webkit.org/show_bug.cgi?id=234259

        Reviewed by Darin Adler.

        Test: http/tests/media/media-element-frame-destroyed-crash.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setupAndCallJS): Protect the frame before executing the JS code,
        so that it is not destroyed before its associated ScriptController.

2022-01-04  Antoine Quint  <graouts@webkit.org>

        RenderStyle::transitionForProperty() is unused
        https://bugs.webkit.org/show_bug.cgi?id=234860

        Reviewed by Dean Jackson.

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::transitionForProperty const): Deleted.
        * rendering/style/RenderStyle.h:

2022-01-04  Antoine Quint  <graouts@webkit.org>

        WPT test css/css-transitions/parsing/transition-shorthand.html has failures
        https://bugs.webkit.org/show_bug.cgi?id=234856

        Reviewed by Dean Jackson.

        Parse the "transition" shorthand the same way we parse the "animation" shorthand
        and teach ComputedStyleExtractor::addValueForAnimationPropertyToList() about
        "transition-property" so that it correctly returns a CSSValue for it.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::addValueForAnimationPropertyToList):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::consumeAnimationShorthand):

2022-01-04  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] fast/text/combining-mark-paint.html is failing (complex text)
        https://bugs.webkit.org/show_bug.cgi?id=234834

        Reviewed by Antti Koivisto.

        Apparently it's perfectly valid to have zero width unicode character (e.g. macron) and
        still affect the line height.

        * layout/formattingContexts/inline/text/TextUtil.cpp:
        (WebCore::Layout::fallbackFontsForRunWithIterator):

2022-01-04  Wenson Hsieh  <wenson_hsieh@apple.com>

        ModalContainerObserver should search for text in subframes
        https://bugs.webkit.org/show_bug.cgi?id=234446
        rdar://86897770

        Reviewed by Tim Horton.

        Adds support for detecting modal containers when the search term is embedded inside a subframe in the top
        document. To do this, we make a few adjustments to ModalContainerObserver, detailed in the comments below. This
        supports both scenarios in which (1) a subframe that has not yet loaded is added to the top document and then
        later gains occurrences of the search term, and (2) a subframe that already contains the search term in rendered
        text is made visible inside the top document.

        Test: ModalContainerObservation.ModalContainerInSubframe

        * page/ModalContainerObserver.cpp:
        (WebCore::ModalContainerObserver::isNeededFor):

        Install a ModalContainerObserver for child documents in the case where the parent document already has a modal
        container observer that is waiting for this frame to finish its first visually non-empty layout (see the comment
        in `ModalContainerObserver::updateModalContainerIfNeeded()`, below).

        (WebCore::containsMatchingText):

        Pull out logic for searching all text renderer descendants underneath a given renderer into a separate helper
        function.

        (WebCore::ModalContainerObserver::searchForModalContainerOnBehalfOfFrameOwnerIfNeeded):

        Used for a ModalContainerObserver in a child frame to notify the ModalContainerObserver in the parent document
        when the child document has finished layout. If this child document's owner element is one of the elements in
        `m_frameOwnersAndContainersToSearchAgain`, we invalidate the corresponding viewport-constrained container that
        we've previously searched (i.e. by removing it from `m_elementsToIgnoreWhenSearching`) and re-search the
        container.

        (WebCore::ModalContainerObserver::updateModalContainerIfNeeded):

        Make a couple of adjustments:

        -       For modal container observers that are not in the top document: delegate the modal container update out
                to the parent document's modal container observer, by calling the helper method above.

        -       For modal container observers that are in the top document: add logic to search content in subframes
                inside of viewport-constrained containers as a fallback in the case where the search term does not
                appear in content at the top document.

        (WebCore::ModalContainerObserver::setContainer):

        Pull out logic for tracking the currently detected modal container into a separate helper method that takes
        the modal container element, as well as the frame owner element where we observed the search term (or null if
        the search term was observed in the top document).

        (WebCore::ModalContainerObserver::container const):
        (WebCore::ModalContainerObserver::frameOwnerForControls const):

        Replace `m_container` with a `std::pair` containing the current modal container (i.e. what is currently just
        `m_container`, as well as a weak pointer to the associated frame owner element where we discovered the search
        term). We use a `std::pair` here because these two elements should always be set and cleared out in tandem.

        (WebCore::ModalContainerObserver::collectClickableElementsTimerFired):
        (WebCore::ModalContainerObserver::revealModalContainer):

        Replace uses of `m_container` with the `container()` method.

        (WebCore::ModalContainerObserver::collectClickableElements):

        If a frame owner element is set, use the subframe's content document element as the container for collecting
        clickable controls instead of using the actual modal container element in the top document.

        * page/ModalContainerObserver.h:
        (WebCore::ModalContainerObserver::shouldHide const):

        Use `container()` instead of `m_container`.

2022-01-04  Jer Noble  <jer.noble@apple.com>

        [Cocoa] Hang in AVTrackPrivateAVFObjCImpl::bitrate()
        https://bugs.webkit.org/show_bug.cgi?id=234753

        Reviewed by Eric Carlson.

        In r286908, WebCore added new queries onto existing AVAssetTrack objects; however, querying
        those properties will block if data for those properties is not yet available. The media element
        could block moving to the HAVE_METADATA state until those properties are fully loaded, however
        this might regress PLT, so instead, we will check the load state of those properties before returning
        values.

        However, to make the properties exposed through VideoTrackConfiguration.idl/AudioTrackConfiguration.idl
        dynamic, changes need to be signaled and propagated upward through the layers between AVAssetTrack and
        the DOM. Rather than make individual notifications for each property in a Configuration struct, make one
        notification that handles any change to the Configuration struct at all and push that upward to clients.

        Since these properties are being grouped together at a lower-level, they do not need to be tracked
        individually, and Video/AudioTrackConfigurationInit can just be aliased to a platform-defined struct.

        * html/track/AudioTrack.cpp:
        (WebCore::AudioTrack::configurationChanged):
        (WebCore::AudioTrack::updateConfigurationFromPrivate):
        * html/track/AudioTrack.h:
        * html/track/AudioTrackConfiguration.h:
        (WebCore::AudioTrackConfiguration::setState):
        (): Deleted.
        * html/track/VideoTrack.cpp:
        (WebCore::VideoTrack::configurationChanged):
        (WebCore::VideoTrack::updateConfigurationFromPrivate):
        * html/track/VideoTrack.h:
        * html/track/VideoTrackConfiguration.h:
        (WebCore::VideoTrackConfiguration::setState):
        (WebCore::VideoTrackConfiguration::colorSpace const):
        (WebCore::VideoTrackConfiguration::setColorSpace):
        (WebCore::VideoTrackConfiguration::VideoTrackConfiguration):
        (): Deleted.
        * platform/graphics/AudioTrackPrivate.h:
        (WebCore::AudioTrackPrivate::configuration const):
        (WebCore::AudioTrackPrivate::setConfiguration):
        (WebCore::AudioTrackPrivate::codec const): Deleted.
        (WebCore::AudioTrackPrivate::setCodec): Deleted.
        (WebCore::AudioTrackPrivate::sampleRate const): Deleted.
        (WebCore::AudioTrackPrivate::setSampleRate): Deleted.
        (WebCore::AudioTrackPrivate::numberOfChannels const): Deleted.
        (WebCore::AudioTrackPrivate::setNumberOfChannels): Deleted.
        (WebCore::AudioTrackPrivate::bitrate const): Deleted.
        (WebCore::AudioTrackPrivate::setBitrate): Deleted.
        * platform/graphics/AudioTrackPrivateClient.h:
        * platform/graphics/PlatformVideoColorSpace.h:
        (WebCore::operator==):
        (WebCore::operator!=):
        * platform/graphics/VideoTrackPrivate.h:
        (WebCore::VideoTrackPrivate::configuration const):
        (WebCore::VideoTrackPrivate::setConfiguration):
        (WebCore::VideoTrackPrivate::codec const): Deleted.
        (WebCore::VideoTrackPrivate::setCodec): Deleted.
        (WebCore::VideoTrackPrivate::width const): Deleted.
        (WebCore::VideoTrackPrivate::setWidth): Deleted.
        (WebCore::VideoTrackPrivate::height const): Deleted.
        (WebCore::VideoTrackPrivate::setHeight): Deleted.
        (WebCore::VideoTrackPrivate::colorSpace const): Deleted.
        (WebCore::VideoTrackPrivate::setColorSpace): Deleted.
        (WebCore::VideoTrackPrivate::framerate const): Deleted.
        (WebCore::VideoTrackPrivate::setFramerate): Deleted.
        (WebCore::VideoTrackPrivate::bitrate const): Deleted.
        (WebCore::VideoTrackPrivate::setBitrate): Deleted.
        * platform/graphics/VideoTrackPrivateClient.h:
        * platform/graphics/avfoundation/AVTrackPrivateAVFObjCImpl.h:
        (WebCore::AVTrackPrivateAVFObjCImpl::setVideoTrackConfigurationObserver):
        (WebCore::AVTrackPrivateAVFObjCImpl::setAudioTrackConfigurationObserver):
        * platform/graphics/avfoundation/AVTrackPrivateAVFObjCImpl.mm:
        (WebCore::assetTrackConfigurationKeyNames):
        (WebCore::AVTrackPrivateAVFObjCImpl::AVTrackPrivateAVFObjCImpl):
        (WebCore::AVTrackPrivateAVFObjCImpl::initializeAssetTrack):
        (WebCore::AVTrackPrivateAVFObjCImpl::videoTrackConfiguration const):
        (WebCore::AVTrackPrivateAVFObjCImpl::audioTrackConfiguration const):
        * platform/graphics/avfoundation/objc/AudioTrackPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/AudioTrackPrivateAVFObjC.mm:
        (WebCore::AudioTrackPrivateAVFObjC::AudioTrackPrivateAVFObjC):
        (WebCore::AudioTrackPrivateAVFObjC::resetPropertiesFromTrack):
        (WebCore::AudioTrackPrivateAVFObjC::audioTrackConfigurationChanged):
        * platform/graphics/avfoundation/objc/VideoTrackPrivateAVFObjC.cpp:
        (WebCore::VideoTrackPrivateAVFObjC::VideoTrackPrivateAVFObjC):
        (WebCore::VideoTrackPrivateAVFObjC::resetPropertiesFromTrack):
        (WebCore::VideoTrackPrivateAVFObjC::videoTrackConfigurationChanged):
        * platform/graphics/avfoundation/objc/VideoTrackPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/VideoTrackPrivateMediaSourceAVFObjC.mm:
        (WebCore::VideoTrackPrivateMediaSourceAVFObjC::resetPropertiesFromTrack):
        * platform/graphics/cocoa/VideoTrackPrivateWebM.cpp:
        (WebCore::VideoTrackPrivateWebM::VideoTrackPrivateWebM):
        (WebCore::VideoTrackPrivateWebM::updateConfiguration):
        * platform/graphics/cocoa/VideoTrackPrivateWebM.h:

2022-01-04  Antoine Quint  <graouts@webkit.org>

        [Web Animations] changing the timing of a transition such that it's finished should no longer have it marked as running
        https://bugs.webkit.org/show_bug.cgi?id=234823

        Reviewed by Dean Jackson.

        Many factors could contribute to an animation entering its finished state. In case it's a transition,
        we must remove it from the list of running transitions immediately, so we add a new virtual method when
        the finished state is entered such that CSSTransition can implement this method and do the necessary
        cleanup.

        * animation/CSSTransition.cpp:
        (WebCore::CSSTransition::animationDidFinish):
        * animation/CSSTransition.h:
        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::updateFinishedState):
        * animation/WebAnimation.h:
        (WebCore::WebAnimation::animationDidFinish):

2022-01-04  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r283546.
        https://bugs.webkit.org/show_bug.cgi?id=234844

        Causes bad scrolling behavior on Discourse pages

        Reverted changeset:

        "[css-position-sticky] scrollIntoView should not take into
        account sticky positioning offsets"
        https://bugs.webkit.org/show_bug.cgi?id=230689
        https://commits.webkit.org/r283546

2022-01-04  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][a11y] Take into account the active descendant when setting focus related states with ATSPI
        https://bugs.webkit.org/show_bug.cgi?id=234751

        Reviewed by Joanmarie Diggs.

        * accessibility/atspi/AccessibilityObjectAtspi.cpp:
        (WebCore::AccessibilityObjectAtspi::state const):

2022-01-04  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][a11y] Ensure ATSPI wrappers are destroyed in the main thread
        https://bugs.webkit.org/show_bug.cgi?id=234808

        Reviewed by Joanmarie Diggs.

        Sometimes they can be destroyed in the a11y thread, since we keep a reference when unregistering the objects.

        * accessibility/atspi/AccessibilityObjectAtspi.h:
        * accessibility/atspi/AccessibilityRootAtspi.h:

2022-01-04  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][a11y] Use invalid as role for detached objects in ATSPI
        https://bugs.webkit.org/show_bug.cgi?id=234835

        Reviewed by Joanmarie Diggs.

        We are using unknown by mistake.

        * accessibility/atspi/AccessibilityObjectAtspi.cpp:
        (WebCore::AccessibilityObjectAtspi::role const):

2022-01-04  Manuel Rego Casasnovas  <rego@igalia.com>

        [selectors] :focus-visible not matching on accessKey focus after focusing something via mouse
        https://bugs.webkit.org/show_bug.cgi?id=234077
        <rdar://problem/86572561>

        Reviewed by Antti Koivisto.

        This patch adds Element::focusForBindings() to differentitate when this is called from JavaScript.
        If that's the case it pass a new FocusTrigger::Bindings value to Element::focus(),
        so we can differentiate when this was called from some internal code or from JavaScript.

        When Element::focus() has been called internally, we always want to show the focus ring
        (thus pass FocusVisibility::Visible). However when it's called from a script
        we'll set it to Visible or Invisible depending on if the previously focused element
        was focused via mouse click or not (this is needed to pass
        the css/selectors/focus-visible-script-focus-* tests from WPT repository).

        Test: fast/selectors/focus-visible-accesskey.html

        * dom/Element.cpp:
        (WebCore::Element::focus):
        (WebCore::Element::focusForBindings):
        * dom/Element.h:
        (WebCore::Element::focusForBindings):
        * dom/FocusOptions.h:
        * html/HTMLOrForeignElement.idl:

2022-01-03  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Incorrect word-spacing gaps when logical order != visual order (bidi)
        https://bugs.webkit.org/show_bug.cgi?id=234826

        Reviewed by Antti Koivisto.

        Add missing condition from the (rtl) word-spacing patch, where we don't merge
        adjacent text runs when word-spacing is not 0 and the run is a word-separator.
        (we can't merge a whitespace run with a non-whitepace run and expect that the word-spacing
        margin is always on the left side (visual reordering)).

        Test: fast/text/simple-bidi-word-spacing.html

        * layout/formattingContexts/inline/InlineLine.cpp:
        (WebCore::Layout::Line::appendTextContent):

2022-01-03  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r287550.
        https://bugs.webkit.org/show_bug.cgi?id=234829


        Reverted changeset:

        "[Web Animations] changing the effect of a transition should
        no longer have it marked as running"
        https://bugs.webkit.org/show_bug.cgi?id=234823
        https://commits.webkit.org/r287550

2022-01-03  Sam Weinig  <weinig@apple.com>

        Add resolved/unresolved color type accessors to require users to be explicit about whether they will handle missing/none color components
        https://bugs.webkit.org/show_bug.cgi?id=234798

        Reviewed by Antti Koivisto.

        In preparation for adding support for missing / powerless color components, this change changes the API
        of color types (e.g. SRGBA<float>, OKLab<float>, etc) to require an extra step before users can access
        the component values, forcing the user to choose whether they want to handle the missing / powerless color
        components (the unresolved state) or have them converted to the value they should use for rendering (the
        resolved state).

        To do this, color types no longer expose their components publicly, but rather, only allow access to them
        via new subclasses, ResolvedColorType<ColorType> and UnresolvedColorType<ColorType>. Theses subclasses 
        expose the components publicly via using directives.

        To keep the API consistent (and keep generic contexts simpler), color types using both float and uint8_t
        require the use of resolved() / unresolved() to access components, but for uint8_t, there is no actual
        resolution that happens, as there is no way to encode the missing / powerless concept in them.

        One tricky thing having a more complex hierarchy of color types is that generic functions parameterized
        on the input color type can no longer assume the input and output types will be the same (for instance,
        if you call colorWithOverriddenAlpha() with a ResolvedColorType<Lab<float>> it will not necessarily 
        return a ResolvedColorType<Lab<float>>) so a few generic functions have had their explicit return types
        replaced with deduced (auto) return types to avoid this (additionally, a CanonicalColorType<> type trait
        was added if one needs to be specific for something like template specialization purposes). 

        Since there is no way to add missing / powerless components yet, there is no actual behavior change, but
        this lays the foundation for adding that in a follow up.

        As this change was already touching most uses of the toSRGBALossy<> function on Color, I also took the
        opportunity to replace all its uses with the generic toColorTypeLossy<SRGBA<>>.

        * platform/graphics/ColorModels.h:
        (WebCore::resolvedColor):
        (WebCore::unresolvedColor):
        (WebCore::resolveColorComponents):
        (WebCore::ResolvedColorType::resolved const):
        (WebCore::ResolvedColorType::unresolved const):
        (WebCore::ResolvedColorType::ResolvedColorType):
        (WebCore::ResolvedColorType::resolve):
        (WebCore::UnresolvedColorType::unresolved const):
        (WebCore::UnresolvedColorType::UnresolvedColorType):
        (WebCore::asColorComponents):
        (WebCore::get):
        Adds ResolvedColorType and UnresolvedColorType generic types. They both inherit from
        the helper type ExposedColorType which is specialized for each color model and does
        the work of exposing the components via public 'using ColorType::componentName'. These
        types also have overrides of the new resolved()/unresolved() member functions on color
        types (well, only unresolved() for UnresolvedColorType) to allow generic code to not
        care about whether it already has resolved or unresolved color type, and just use the
        accessor it wants without worrying about duplicated resolution.
        
        Since asColorComponents() can only be called with exposed color types, those functions
        have been moved here from ColorTypes.h to make their relationship more clear. We also
        reduced the number of these overloads as we now just have one per color model (we previously
        had one per color type).

        Also took the opportunity to merge ExtendedRGBModel and RGBModel into a single type
        parameterized by an RGBBoundedness enum. This allowed fewer ExposedColorType specializations
        and asColorComponents() overloads (and to remove some uses of UsesExtendedRGBModel<>).

        One unfortunate side effect of the more complex type hierarchy is that we no longer get
        destructuring for free, so to add that back, a generic get<> overload is added as well
        as the required std::tuple_size/std::tuple_element specializations of ResolvedColorType
        and UnresolvedColorType (the most derived class must be used for specializations, so
        a single ExposedColorType specialization was not possible).

        * platform/graphics/ColorTypes.h:
        (WebCore::makeFromComponents):
        (WebCore::makeFromComponentsClamping):
        (WebCore::makeFromComponentsClampingExceptAlpha):
        (WebCore::assertInRange):
        (WebCore::ColorWithAlphaHelper::colorWithAlphaByte const):
        (WebCore::operator==):
        (WebCore::RGBAType::resolved const):
        (WebCore::RGBAType::unresolved const):
        (WebCore::Lab::resolved const):
        (WebCore::Lab::unresolved const):
        (WebCore::LCHA::resolved const):
        (WebCore::LCHA::unresolved const):
        (WebCore::OKLab::resolved const):
        (WebCore::OKLab::unresolved const):
        (WebCore::OKLCHA::resolved const):
        (WebCore::OKLCHA::unresolved const):
        (WebCore::HSLA::resolved const):
        (WebCore::HSLA::unresolved const):
        (WebCore::HWBA::resolved const):
        (WebCore::HWBA::unresolved const):
        (WebCore::XYZA::resolved const):
        (WebCore::XYZA::unresolved const):
        (WebCore::PackedColor::RGBA::RGBA):
        (WebCore::PackedColor::ARGB::ARGB):
        (WebCore::asColorComponents): Deleted.
        Makes the component memebers of each color type protected, so that only
        the ResolvedColorType and UnresolvedColorType derived types can access
        and re-expose them. To access those, resolved() and unresolved() member
        functions were added to make it easy, but explicit.

        Also added a new type trait helper, CanonicalColorType<> which will return
        the base/canonical name for a color type. For example:
        
             CanonicalColorType<SRGBA<float>> == SRGBA<float>
             CanonicalColorType<ResolvedColorType<SRGBA<float>>> == SRGBA<float>
             CanonicalColorType<UnresolvedColorType<SRGBA<float>>> == SRGBA<float>

        This makes it easier for generic code to not care whether it is paramterized used
        the base/canonical type or one of the derived ones.

        * platform/graphics/ColorSpace.h:

        * platform/graphics/Color.cpp:
        (WebCore::Color::lightened const):
        (WebCore::Color::darkened const):
        (WebCore::Color::lightness const):
        (WebCore::Color::toResolvedColorComponentsInColorSpace const):
        (WebCore::Color::colorSpaceAndResolvedColorComponents const):
        (WebCore::Color::toColorComponentsInColorSpace const): Deleted.
        (WebCore::Color::colorSpaceAndComponents const): Deleted.
        * platform/graphics/Color.h:
        (WebCore::Color::isOpaque const):
        (WebCore::Color::isVisible const):
        (WebCore::Color::alphaByte const):
        (WebCore::Color::alphaAsFloat const):
        (WebCore::Color::asInline const):
        (WebCore::Color::toSRGBALossy const): Deleted.
        Add resolution where needed, but keep the components unresolved for storage in 
        the OutOfLineComponents object. Also updates some names of functions that return
        ColorComponents that they explicitly return resolved color components. If need
        variants that return unresolved components, we can add them as necessary since
        the storage remains unresolved.

        * platform/graphics/ColorComponents.h:
        Add operator/=(T) to make some code in PageColorSampler.cpp much simpler.

        * accessibility/isolatedtree/AXIsolatedObject.cpp:
        (WebCore::AXIsolatedObject::colorValue const):
        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::colorValue const):
        Switch to toColorTypeLossy.

        * accessibility/AccessibilityObjectInterface.h:
        (WebCore::AXCoreObject::value):
        * accessibility/atk/WebKitAccessibleInterfaceText.cpp:
        (getAttributeSetForAccessibilityObject):
        * accessibility/atspi/AccessibilityObjectTextAtspi.cpp:
        (WebCore::AccessibilityObjectAtspi::textAttributes const):
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilityColorStringValue]):
        * css/DeprecatedCSSOMRGBColor.h:
        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::parseRelativeRGBParameters):
        (WebCore::CSSPropertyParserHelpers::parseRelativeHSLParameters):
        (WebCore::CSSPropertyParserHelpers::parseRelativeHWBParameters):
        (WebCore::CSSPropertyParserHelpers::parseRelativeLabParameters):
        (WebCore::CSSPropertyParserHelpers::parseRelativeLCHParameters):
        (WebCore::CSSPropertyParserHelpers::parseRelativeColorFunctionForRGBTypes):
        (WebCore::CSSPropertyParserHelpers::parseRelativeColorFunctionForXYZTypes):
        (WebCore::CSSPropertyParserHelpers::mixColorComponentsUsingColorInterpolationMethod):
        * editing/cocoa/DataDetection.mm:
        (WebCore::DataDetection::detectContentInRange):
        * platform/graphics/ColorBlending.cpp:
        (WebCore::blendSourceOver):
        (WebCore::blendWithWhite):
        (WebCore::blend):
        (WebCore::blendWithoutPremultiply):
        * platform/graphics/ColorConversion.cpp:
        (WebCore::convertToPolarForm):
        (WebCore::convertToRectangularForm):
        (WebCore::calculateHSLHue):
        (WebCore::SRGBA<float>>::convert):
        (WebCore::HSLA<float>>::convert):
        (WebCore::HWBA<float>>::convert):
        (WebCore::Lab<float>>::convert):
        (WebCore::WhitePoint::D50>>::convert):
        (WebCore::OKLab<float>>::convert):
        (WebCore::WhitePoint::D65>>::convert):
        (WebCore::convertAndResolveColorComponents):
        (WebCore::convertColorComponents): Deleted.
        * platform/graphics/ColorConversion.h:
        (WebCore::ColorConversion::handleToFloatConversion):
        (WebCore::ColorConversion::handleToByteConversion):
        (WebCore::ColorConversion::toLinearEncoded):
        (WebCore::ColorConversion::toGammaEncoded):
        (WebCore::ColorConversion::toExtended):
        (WebCore::ColorConversion::toBounded):
        (WebCore::ColorConversion::handleMatrixConversion):
        * platform/graphics/ColorInterpolation.h:
        (WebCore::interpolateColorComponents):
        * platform/graphics/ColorLuminance.h:
        (WebCore::relativeLuminance):
        * platform/graphics/ColorUtilities.cpp:
        (WebCore::premultiplied):
        (WebCore::unpremultiplied):
        (WebCore::premultipliedFlooring):
        (WebCore::premultipliedCeiling):
        * platform/graphics/ColorSerialization.cpp:
        (WebCore::serializationUsingColorFunction):
        (WebCore::serializationForCSS):
        (WebCore::serializationForHTML):
        (WebCore::serializationForRenderTreeAsText):
        * platform/graphics/ColorUtilities.h:
        (WebCore::colorByModifingEachNonAlphaComponent):
        (WebCore::colorWithOverriddenAlpha):
        (WebCore::invertedColorWithOverriddenAlpha):
        (WebCore::isBlack):
        (WebCore::isWhite):
        * platform/graphics/ca/cocoa/PlatformCAAnimationCocoa.mm:
        (WebCore::PlatformCAAnimationCocoa::setFromValue):
        (WebCore::PlatformCAAnimationCocoa::setToValue):
        (WebCore::PlatformCAAnimationCocoa::setValues):
        * platform/graphics/ca/win/PlatformCAAnimationWin.cpp:
        (PlatformCAAnimationWin::setFromValue):
        (PlatformCAAnimationWin::setToValue):
        (PlatformCAAnimationWin::setValues):
        * platform/graphics/cairo/CairoUtilities.cpp:
        (WebCore::setSourceRGBAFromColor):
        * platform/graphics/cairo/GradientCairo.cpp:
        (WebCore::addColorStopRGBA):
        (WebCore::setCornerColorRGBA):
        * platform/graphics/cg/ColorCG.cpp:
        (WebCore::convertToCGCompatibleComponents):
        (WebCore::createCGColor):
        * platform/graphics/cg/GradientRendererCG.cpp:
        (WebCore::GradientRendererCG::makeGradient const):
        (WebCore::GradientRendererCG::Shading::shadingFunction):
        (WebCore::GradientRendererCG::makeShading const):
        * platform/graphics/cpu/arm/filters/FELightingNEON.h:
        (WebCore::FELighting::platformApplyNeon):
        * platform/graphics/filters/FilterOperation.cpp:
        (WebCore::BasicColorMatrixFilterOperation::transformColor const):
        (WebCore::BasicComponentTransferFilterOperation::transformColor const):
        (WebCore::InvertLightnessFilterOperation::transformColor const):
        (WebCore::InvertLightnessFilterOperation::inverseTransformColor const):
        * platform/graphics/filters/FilterOperations.cpp:
        (WebCore::FilterOperations::transformColor const):
        (WebCore::FilterOperations::inverseTransformColor const):
        * platform/graphics/filters/software/FELightingSoftwareApplier.cpp:
        (WebCore::FELightingSoftwareApplier::applyPlatform):
        * platform/graphics/filters/software/FEMorphologySoftwareApplier.h:
        (WebCore::FEMorphologySoftwareApplier::makeColorComponentsfromPixelValue):
        * platform/graphics/gtk/ColorGtk.cpp:
        (WebCore::Color::operator GdkRGBA const):
        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGL::drawBorder):
        (WebCore::TextureMapperGL::drawNumber):
        (WebCore::prepareFilterProgram):
        (WebCore::TextureMapperGL::drawSolidColor):
        (WebCore::TextureMapperGL::clearColor):
        * platform/graphics/win/ColorDirect2D.cpp:
        (WebCore::Color::operator D2D1_COLOR_F const):
        (WebCore::Color::operator D2D1_VECTOR_4F const):
        * platform/graphics/win/GradientDirect2D.cpp:
        (WebCore::Gradient::createBrush):
        * platform/graphics/win/GraphicsContextDirect2D.cpp:
        (WebCore::GraphicsContextDirect2D::colorWithGlobalAlpha const):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::datePlaceholderTextColor const):
        * rendering/RenderThemeIOS.mm:
        (WebCore::shouldUseConvexGradient):
        * svg/properties/SVGAnimationAdditiveValueFunctionImpl.h:
        (WebCore::SVGAnimationColorFunction::animate):
        Add calls to resolved() to access components. Some of these (particularlly in serialization, conversion and
        interpolation related calls) will need to be converted to use unresolved() eventually, but first they will
        need to handle the NaN case properly.

        * page/PageColorSampler.cpp:
        (WebCore::colorDifference):
        (WebCore::averageColor):
        (WebCore::PageColorSampler::sampleTop):
        Rework code a bit to use modern WebKit idioms (std::array, Span, ColorComponents).

2022-01-03  Antti Koivisto  <antti@apple.com>

        [:has() pseudo-class] Style invalidation for :valid and :invalid
        https://bugs.webkit.org/show_bug.cgi?id=234815

        Reviewed by Sam Weinig.

        Use PseudoClassChangeInvalidation for accurate and :has() supporting style invalidation.

        Test: imported/w3c/web-platform-tests/css/selectors/invalidation/has-with-pseudo-class.html

        * html/FormAssociatedElement.cpp:
        (WebCore::FormAssociatedElement::computeValidity const):
        (WebCore::FormAssociatedElement::isValid const): Deleted.
        * html/FormAssociatedElement.h:
        * html/HTMLFieldSetElement.cpp:
        (WebCore::HTMLFieldSetElement::addInvalidDescendant):
        (WebCore::HTMLFieldSetElement::removeInvalidDescendant):
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::updateWillValidateAndValidity):
        (WebCore::HTMLFormControlElement::isValidFormControlElement const):
        (WebCore::HTMLFormControlElement::updateValidity):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::registerInvalidAssociatedFormControl):
        (WebCore::HTMLFormElement::removeInvalidAssociatedFormControlIfNeeded):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::computeValidity const):
        (WebCore::HTMLInputElement::isValid const): Deleted.
        * html/HTMLInputElement.h:
        * html/ValidityState.idl:

2022-01-03  Antoine Quint  <graouts@webkit.org>

        [Web Animations] changing the effect of a transition should no longer have it marked as running
        https://bugs.webkit.org/show_bug.cgi?id=234823

        Reviewed by Dean Jackson.

        * animation/DeclarativeAnimation.cpp:
        (WebCore::DeclarativeAnimation::setEffect):
        * animation/DeclarativeAnimation.h:
        * animation/WebAnimation.h:

2022-01-03  Antoine Quint  <graouts@webkit.org>

        [Web Animations] calling setKeyframes() on a running CSS Transition has no immediate effect
        https://bugs.webkit.org/show_bug.cgi?id=234818

        Reviewed by Dean Jackson.

        We must mark the target as dirty if setKeyframes() is called.

        * animation/KeyframeEffect.cpp:
        (WebCore::KeyframeEffect::processKeyframes):

2022-01-03  Antoine Quint  <graouts@webkit.org>

        [Web Animations] reversing factor should be computed before canceling the previous transition
        https://bugs.webkit.org/show_bug.cgi?id=234821

        Reviewed by Dean Jackson.

        We would always compute the transition reversing factor to 1.0 since we would cancel the
        previously-running transition prior to getting its computed progress.

        * style/Styleable.cpp:
        (WebCore::updateCSSTransitionsForStyleableAndProperty):

2022-01-03  Wenson Hsieh  <wenson_hsieh@apple.com>

        Undownloaded iCloud Photos are inserted as broken images when attachment element is enabled
        https://bugs.webkit.org/show_bug.cgi?id=234803
        rdar://82318259

        Reviewed by Darin Adler.

        Currently, when inserting file paths via paste or drop that correspond to undownloaded files in iCloud Drive,
        we show a generic empty file as the file preview, with "Zero Bytes" as the attachment subtitle when the
        attachment element is enabled (i.e., Mail compose when using WebKit2). Even worse, for undownloaded image files,
        we'll attempt to insert them as broken images.

        Mail handles this scenario by detecting that we've dropped an undownloaded attachment, downloads the attachment,
        and eventually updates the attachment element with the downloaded data. In the meantime, however, it's not ideal
        for WebKit to represent the attachment that is still being downloaded as a broken image or empty file.

        To address this, make a slight adjustment to detect that the file we're inserting is not locally available and
        render it as an attachment element with progress="0". The client is then expected to update this progress as the
        download is taking place, and update the attachment data once it's complete.

        Test: WKAttachmentTestsMac.InsertNonExistentImageFileAsAttachment

        * editing/cocoa/WebContentReaderCocoa.mm:
        (WebCore::attachmentForFilePath):

2022-01-03  Antti Koivisto  <antti@apple.com>

        PseudoClassChangeInvalidation should allow multiple pseudo classes as argument
        https://bugs.webkit.org/show_bug.cgi?id=234810

        Reviewed by Alan Bujtas.

        It is common to invalidate multiple pseudo-classes together (say :disabled and :enabled).

        * dom/Element.cpp:
        (WebCore::Element::setFocus):
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::setAncestorDisabled):
        (WebCore::HTMLFormControlElement::parseAttribute):
        * html/HTMLOptGroupElement.cpp:
        (WebCore::HTMLOptGroupElement::parseAttribute):
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::parseAttribute):
        * style/PseudoClassChangeInvalidation.h:
        (WebCore::Style::PseudoClassChangeInvalidation::PseudoClassChangeInvalidation):

2022-01-03  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Take grapheme clusters into account at TextUtil::breakWord
        https://bugs.webkit.org/show_bug.cgi?id=234805

        Reviewed by Antti Koivisto.

        userPerceivedCharacterBoundaryAlignedIndex -> ubrk_preceding
        nextUserPerceivedCharacterIndex -> ubrk_following

        * layout/formattingContexts/inline/text/TextUtil.cpp:
        (WebCore::Layout::TextUtil::breakWord): This average character estimation does not work well with character clusters.

2022-01-03  Nikolas Zimmermann  <nzimmermann@igalia.com>

        [LBSE] Begin layer-aware RenderSVGModelObject implementation
        https://bugs.webkit.org/show_bug.cgi?id=234524

        Reviewed by Rob Buis.

        Begin implementing RenderSVGModelObject - the base class for most graphics
        primitives in SVG (path / rect / circle / image / ...) for the LBSE.

        In the legacy engine, RenderSVGImage / RenderSVGShape / RenderSVGContainer inherit
        from LegacyRenderSVGModelObject, which in turn inherits from RenderElement. The SVG
        <text> / <foreignObject> renderers inherit from their existing "HTML counterparts"
        e.g. RenderSVGBlock from RenderBlockFlow, or RenderSVGInline from RenderInline.

        This has historical reasons: When SVG text rendering was prototyped in WebCore, a goal was to
        re-use the existing HTML/CSS text rendering code whenever possible. Therefore the SVG text
        renderers were modelled in the terminology of HTML/CSS: A natural choice is to treat a SVG
        <text> element as a CSS "block-level element" and <tspan> / <textPath> / <tref> / ...
        elements as CSS "inline elements". These design choices from almost two decades ago, are
        the reason for the unnecessary confusing SVG inheritance structure. Furthermore we explicitly
        disable layer support in all SVG classes that indirectly inherit from RenderLayerModelObject.

        However for LBSE we do want SVG to participate in the layer tree.
        Therefore let RenderSVGModelObject inherit from RenderLayerModelObject. This turns
        RenderLayerModelObject into the common base-class for all SVG renderers in LBSE.

        The price for the layer support is that all SVG renderers need to be able to answer questions
        in HTML/CSS language (what's your 'border box rect'? do you have visual overflow? etc.).
        Finding consistent definitions/mappings was a tedious job, that is fully solved in LBSE and
        will be upstreamed in pieces. This patch is one main piece of the work.

        If we forget about the legacy engine, the inheritance structure now looks like the following:

        + RenderObject
            + RenderElement
            |    + RenderLayerModelObject
            |        + RenderBoxModelObject
            |        |    + RenderBox
            |        |    |    + RenderReplaced (CSS "replaced" elements)
            |        |    |    |    + RenderSVGRoot (outermost <svg> element)
            |        |    |    |
            |        |    |    + RenderBlock (CSS "block-level" elements)
            |        |    |        + RenderBlockFlow
            |        |    |            + RenderSVGBlock (HTML/SVG glue code)
            |        |    |                + RenderSVGForeignObject (<foreignObject> element)
            |        |    |                + RenderSVGText (<text> element)
            |        |    |
            |        |    + RenderInline (CSS "inline" elements)
            |        |        + RenderSVGInline (HTML/SVG glue code)
            |        |            + RenderSVGTSpan (<tspan> element)
            |        |            + RenderSVGTextPath (<textPath> element)
            |        |
            |        + RenderSVGModelObject
            |            + RenderSVGContainer
            |            |    + RenderSVGHiddenContainer (<defs> / <g> with 'display: none' / <symbol> elements)
            |            |    |    + RenderSVGResourceContainer
            |            |    |        + RenderSVGResourceClipper (<clipPath> element)
            |            |    |        + RenderSVGResourceFilter (<filter> element)
            |            |    |        + RenderSVGResourceFilterPrimitive
            |            |    |        + RenderSVGResourceGradient
            |            |    |        |    + RenderSVGResourceLinearGradient (<linearGradient> element)
            |            |    |        |    + RenderSVGResourceRadialGradient (<radialGradient> element)
            |            |    |        |
            |            |    |        + RenderSVGResourceMarker (<marker> element)
            |            |    |        + RenderSVGResourceMasker (<masker> element)
            |            |    |        + RenderSVGResourcePattern (<pattern> element)
            |            |    |        + RenderSVGResourceSolidColor
            |            |    |
            |            |    + RenderSVGTransformableContainer (<a> / <g> / <switch> / <use> elements)
            |            |
            |            + RenderSVGImage (<image> element)
            |            + RenderSVGShape (<rect> / <circle> / <path> ... elements)
            |                + RenderSVGEllipse
            |                + RenderSVGPath
            |                + RenderSVGRect
            |
            + RenderText (#text nodes in HTML)
                + RenderSVGInlineText (#text nodes in SVG)

        This is way less confusing then the previous version of the SVG render tree.
        Covered by existing tests, no change in behaviour.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderLayerModelObject.cpp:
        (WebCore::RenderLayerModelObject::computeVisibleRectInSVGContainer const):
        (WebCore::RenderLayerModelObject::mapLocalToSVGContainer const):
        * rendering/RenderLayerModelObject.h:
        * rendering/svg/RenderSVGModelObject.cpp: Added.
        (WebCore::RenderSVGModelObject::RenderSVGModelObject):
        (WebCore::RenderSVGModelObject::updateFromStyle):
        (WebCore::RenderSVGModelObject::borderBoxRectInFragmentEquivalent const):
        (WebCore::RenderSVGModelObject::overflowClipRect const):
        (WebCore::RenderSVGModelObject::clippedOverflowRect const):
        (WebCore::RenderSVGModelObject::computeVisibleRectInContainer const):
        (WebCore::RenderSVGModelObject::pushMappingToContainer const):
        (WebCore::RenderSVGModelObject::outlineBoundsForRepaint const):
        (WebCore::RenderSVGModelObject::absoluteRects const):
        (WebCore::RenderSVGModelObject::absoluteQuads const):
        (WebCore::RenderSVGModelObject::willBeDestroyed):
        (WebCore::RenderSVGModelObject::styleDidChange):
        (WebCore::RenderSVGModelObject::mapAbsoluteToLocalPoint const):
        (WebCore::RenderSVGModelObject::mapLocalToContainer const):
        (WebCore::RenderSVGModelObject::offsetFromContainer const):
        (WebCore::RenderSVGModelObject::addFocusRingRects):
        (WebCore::RenderSVGModelObject::shouldPaintSVGRenderer const):
        (WebCore::intersectsAllowingEmpty):
        (WebCore::isGraphicsElement):
        (WebCore::RenderSVGModelObject::checkIntersection):
        (WebCore::RenderSVGModelObject::checkEnclosure):
        (WebCore::RenderSVGModelObject::applyTransform const):
        * rendering/svg/RenderSVGModelObject.h: Added.
        (WebCore::RenderSVGModelObject::element const):
        (WebCore::RenderSVGModelObject::borderBoxRectEquivalent const):
        (WebCore::RenderSVGModelObject::contentBoxRectEquivalent const):
        (WebCore::RenderSVGModelObject::frameRectEquivalent const):
        (WebCore::RenderSVGModelObject::visualOverflowRectEquivalent const):
        (WebCore::RenderSVGModelObject::applyTopLeftLocationOffsetEquivalent const):
        (WebCore::RenderSVGModelObject::layoutRect const):
        (WebCore::RenderSVGModelObject::setLayoutRect):
        (WebCore::RenderSVGModelObject::setLayoutLocation):
        (WebCore::RenderSVGModelObject::paintingLocation const):
        (WebCore::RenderSVGModelObject::layoutLocation const):
        (WebCore::RenderSVGModelObject::layoutLocationOffset const):
        (WebCore::RenderSVGModelObject::layoutSize const):
        (WebCore::RenderSVGModelObject::overflowClipRectForChildLayers):

2022-01-03  Antoine Quint  <graouts@webkit.org>

        Refactor code creating css values and lists for animation and transition properties
        https://bugs.webkit.org/show_bug.cgi?id=234812

        Reviewed by Antti Koivisto.

        For bug 234792 we exposed a series of static functions on ComputedStyleExtractor to share
        code between CSSPropertyParser.cpp and CSSComputedStyleDeclaration.cpp for the creation of
        CSS values for CSS Animations properties. Darin suggested some refactoring as part of the
        review of that bug which was even more appropriate following the fix for bug 234785.

        We now expose a single ComputedStyleExtractor::addCSSValueForAnimationPropertyToList()
        static method to add the CSSValue for a given animation or transition CSS property to
        a CSS list, providing an optional Animation to read the value from that, otherwise
        using the default value.  

        This allowed initially for shorter code in CSSPropertyParser::consumeAnimationShorthand()
        and animationShorthandValue(). Looking at ComputedStyleExtractor::valueForPropertyInStyle(),
        there were more opportunities to share code and so valueListForAnimationOrTransitionProperty()
        was added as well.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForAnimationDuration):
        (WebCore::valueForAnimationDelay):
        (WebCore::valueForAnimationIterationCount):
        (WebCore::valueForAnimationDirection):
        (WebCore::valueForAnimationFillMode):
        (WebCore::valueForAnimationPlayState):
        (WebCore::valueForAnimationName):
        (WebCore::valueForAnimationTimingFunction):
        (WebCore::ComputedStyleExtractor::addCSSValueForAnimationPropertyToList):
        (WebCore::valueListForAnimationOrTransitionProperty):
        (WebCore::animationShorthandValue):
        (WebCore::ComputedStyleExtractor::valueForPropertyInStyle):
        (WebCore::ComputedStyleExtractor::valueForAnimationDuration): Deleted.
        (WebCore::ComputedStyleExtractor::valueForAnimationDelay): Deleted.
        (WebCore::ComputedStyleExtractor::valueForAnimationIterationCount): Deleted.
        (WebCore::ComputedStyleExtractor::valueForAnimationDirection): Deleted.
        (WebCore::ComputedStyleExtractor::valueForAnimationFillMode): Deleted.
        (WebCore::ComputedStyleExtractor::valueForAnimationPlayState): Deleted.
        (WebCore::ComputedStyleExtractor::valueForAnimationName): Deleted.
        (WebCore::delayValue): Deleted.
        (WebCore::durationValue): Deleted.
        (WebCore::ComputedStyleExtractor::valueForAnimationTimingFunction): Deleted.
        (WebCore::timingFunctionValue): Deleted.
        * css/CSSComputedStyleDeclaration.h:
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::consumeAnimationShorthand):

2022-01-03  Antoine Quint  <graouts@webkit.org>

        Support the "animation" shorthand property in the computed style
        https://bugs.webkit.org/show_bug.cgi?id=234785

        Reviewed by Sam Weinig.

        There is an existing WPT for the "animation" shorthand in the computed style which we
        used to fail because we would simply not do any work to return the longhands compiled
        into a list. It seems that the CSS WG, per https://github.com/w3c/csswg-drafts/issues/2529,
        is moving in the direction of specifying what happens with shorthands in computed style,
        so we're adding support for the "animation" shorthand.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::animationShorthandValue):
        (WebCore::ComputedStyleExtractor::valueForPropertyInStyle):

2022-01-02  Antoine Quint  <graouts@webkit.org>

        "animation" shorthand should list all longhand values when serializing
        https://bugs.webkit.org/show_bug.cgi?id=234792

        Reviewed by Darin Adler.

        Currently we omit any initial value when serializing the "animation" shorthand. However,
        the CSS Animations spec says:

            Note that order is also important within each animation definition for distinguishing
            <keyframes-name> values from other keywords. When parsing, keywords that are valid for
            properties other than animation-name whose values were not found earlier in the shorthand
            must be accepted for those properties rather than for animation-name. Furthermore, when
            serializing, default values of other properties must be output in at least the cases
            necessary to distinguish an animation-name that could be a value of another property,
            and may be output in additional cases.        

        Both Firefox and Chrome always include all longhand values when querying the inline style,
        such that <div style="animation: none"> yields "0s ease 0s 1 normal none running none" for
        element.style.animation. Currently, Safari only outputs "none".

        When parsing the "animation" shorthand in consumeAnimationShorthand(), we now fill in initial
        values as if they were explicitly set to their initial value, for instance duration is set to
        "0s".

        To do this, we refactored code in CSSComputedStyleDeclaration.cpp that dealt with the creation
        of CSSValue from various values exposed on Animation such that it may be called from within
        CSSPropertyParser.cpp.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::valueForAnimationDuration):
        (WebCore::ComputedStyleExtractor::valueForAnimationDelay):
        (WebCore::ComputedStyleExtractor::valueForAnimationIterationCount):
        (WebCore::ComputedStyleExtractor::valueForAnimationDirection):
        (WebCore::ComputedStyleExtractor::valueForAnimationFillMode):
        (WebCore::ComputedStyleExtractor::valueForAnimationPlayState):
        (WebCore::ComputedStyleExtractor::valueForAnimationName):
        (WebCore::delayValue):
        (WebCore::durationValue):
        (WebCore::ComputedStyleExtractor::valueForAnimationTimingFunction):
        (WebCore::timingFunctionValue):
        (WebCore::ComputedStyleExtractor::valueForPropertyInStyle):
        (WebCore::createTimingFunctionValue): Deleted.
        * css/CSSComputedStyleDeclaration.h:
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::consumeAnimationShorthand):

2022-01-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        AX: web process crash with isolated tree mode enabled
        https://bugs.webkit.org/show_bug.cgi?id=234739
        <rdar://problem/86983058>

        Reviewed by Chris Fleizach.

        It can happen that a new node being added is removed by AXIsolatedObject constructor when initializing
        ComputedLabel property, because AccessibilityObject::computedLabel() calls updateBackingStore() that can trigger
        a layout. We don't really need ComputedLabel property for isolated objects because AccessibilityObject::computedLabel()
        is only used by the inspector that uses AccessibilityObject directly.

        * accessibility/isolatedtree/AXIsolatedObject.cpp:
        (WebCore::AXIsolatedObject::initializeAttributeData): Remove ComputedLabel property initialization.
        (WebCore::AXIsolatedObject::computedLabel): Assert if called.
        * accessibility/isolatedtree/AXIsolatedObject.h:
        * accessibility/isolatedtree/AXIsolatedTree.cpp:
        (WebCore::AXIsolatedTree::createSubtree): Add an assert to ensure the wrapper is still valid after AXIsolatedObject::create().
        * accessibility/isolatedtree/AXIsolatedTree.h:

2022-01-03  Youenn Fablet  <youenn@apple.com>

        FetchRequest.clone does not need to be called with the current context
        https://bugs.webkit.org/show_bug.cgi?id=234515

        Reviewed by Darin Adler.

        Make FetchRequest, FetchResponse and FetchBodyOwner take a ScriptExecutionContext* instead of a ScriptExecutionContext&.
        This allows cloning FetchRequest and FetchResponse with the context of the original request or response.

        Update call site, as well as for AbortSignal.

        For FetchResponse, we did a change to throw in case of cloning FetchResponse on a stopped context.
        It appeared that Firefox is not doing that, and Chrome is only doing that in some specific cases.
        For that reason, it is better to go back to our previous behavior of not throwing.

        To ease testing, we add an internals API to check whether a request/response is linked to a closed context.

        Covered by updated tests.

        * Modules/cache/DOMCache.cpp:
        * Modules/fetch/FetchBodyOwner.cpp:
        * Modules/fetch/FetchBodyOwner.h:
        * Modules/fetch/FetchRequest.cpp:
        * Modules/fetch/FetchRequest.h:
        * Modules/fetch/FetchRequest.idl:
        * Modules/fetch/FetchResponse.cpp:
        * Modules/fetch/FetchResponse.h:
        * dom/AbortController.cpp:
        * dom/AbortSignal.cpp:
        * dom/AbortSignal.h:
        * testing/Internals.cpp:
        * testing/Internals.h:
        * testing/Internals.idl:
        * testing/ServiceWorkerInternals.cpp:

2022-01-02  Manuel Rego Casasnovas  <rego@igalia.com>

        Access key should work on focusable element.
        https://bugs.webkit.org/show_bug.cgi?id=72359

        Reviewed by Darin Adler.

        Elements that have "accesskey" attribute and are focusable should be focused when you use the access key,
        this is happening for some elements but not all.
        To fix the issue this patch moves accessKeyAction() implementation from some subclasses to HTMLElement,
        which makes us match other browsers.

        This patch changes the behavior for HTMLAnchorElement, as it was not focused before, but that matches other browsers too.

        Test: fast/dom/accesskey-focus-element.html

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::accessKeyAction): Deleted.
        * html/HTMLAnchorElement.h:
        * html/HTMLButtonElement.cpp:
        (WebCore::HTMLButtonElement::accessKeyAction): Deleted.
        * html/HTMLButtonElement.h:
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::accessKeyAction):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::accessKeyAction): Deleted.
        * html/HTMLSelectElement.h:

2022-01-02  Diego Pino Garcia  <dpino@igalia.com>

        [GTK] Unreviewed build fix after r287519
        https://bugs.webkit.org/show_bug.cgi?id=234802

        * layout/integration/InlineIteratorInlineBox.cpp:
        (WebCore::InlineIterator::firstInlineBoxFor):
        (WebCore::InlineIterator::firstRootInlineBoxFor):

2022-01-02  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add ASSERT(middle >= left && middle < right) to TextUtil::breakWord
        https://bugs.webkit.org/show_bug.cgi?id=234801

        Reviewed by Antti Koivisto.

        Before adding support for surrogate pairs, the implicit integral flooring guaranteed that
        (left + right) / 2 always produced a middle point where left >= middle and middle < right.
        With introducing surrogate pair support, the middle point may end up being equal to the right position.
        (when the (left + right) / 2 falls right in the middle of a surrogate pair, we advance the index
        to the _end_ of the pair (and later we adjust it by calling U16_SET_CP_START)).

        In this patch, we revert this behavior back so that the middle point is always < right.
        We also make sure that left/right/middle are all fall on cluster boundary by calling nextUserPerceivedCharacterIndex.
        This patch is also in preparation for introducing grapheme cluster support.

        * layout/formattingContexts/inline/text/TextUtil.cpp:
        (WebCore::Layout::TextUtil::breakWord):

2022-01-02  Antoine Quint  <graouts@webkit.org>

        [Web Animations] getKeyframes() should handle multiple keyframes for the same offset
        https://bugs.webkit.org/show_bug.cgi?id=234799

        Reviewed by Dean Jackson.

        A @keyframes rule may specify multiple keyframes for the same offset. We currently have support
        for merging such keyframes into consolidated keyframes in Style::Resolver::keyframeStylesForAnimation()
        but WPT shows that it's lacking since it doesn't account for animation-timing-function. Indeed, we
        need to be careful not to merge keyframes with the same offset but a different timing function.

        So we now use a std::pair<> using an offset and a timing function to compute de-duplicated keyframes.
        But this showed an issue with StepsTimingFunction::operator== where we would not return true for
        steps(1) and steps(1, end) since we only checked for equality for the optional keyword and did not
        account for the default "end" value should the keyword not be explicit.

        This ensured we correctly de-duplicated keyframes accounting for not only the offset but also
        the timing function. But this then highlighted a different issue which was that our getKeyframes()
        only ever expected one keyframe respectively for the 0% or 100% offsets when filling in implicit
        values, which we'd just added support for in bug 234795.

        So in KeyframeEffect::getKeyframes() we now compile a list of properties not explicitly specified
        on any of the 0% or 100% keyframes and, as we process the first of a 0% or 100% keyframe, we set
        the implicit properties.

        * animation/KeyframeEffect.cpp:
        (WebCore::KeyframeEffect::getKeyframes):
        * platform/animation/TimingFunction.h:
        * style/StyleResolver.cpp:
        (WebCore::Style::Resolver::keyframeStylesForAnimation):

2022-01-02  Wenson Hsieh  <wenson_hsieh@apple.com>

        Followup to r287494
        https://bugs.webkit.org/show_bug.cgi?id=234747
        rdar://85899879

        Reviewed by Darin Adler.

        Use `auto` instread of `RefPtr` when storing the result of `enclosingImageElement()` in a few places; this
        method already returns a `RefPtr`.

        * html/HTMLAttachmentElement.cpp:
        (WebCore::HTMLAttachmentElement::updateAttributes):
        (WebCore::HTMLAttachmentElement::updateEnclosingImageWithData):

2022-01-02  Antti Koivisto  <antti@apple.com>

        [LFC][Integration] RenderBlockFlow::containsNonZeroBidiLevel should use iterator
        https://bugs.webkit.org/show_bug.cgi?id=234796

        Reviewed by Alan Bujtas.

        Also rename Line::first/lastRun -> Line::first/lastLeafBox for consistency and accuracy.

        * editing/VisibleUnits.cpp:
        (WebCore::startPositionForLine):
        (WebCore::endPositionForLine):
        (WebCore::previousLinePosition):
        (WebCore::nextLinePosition):
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::valueWithHardLineBreaks const):
        * layout/integration/InlineIteratorLine.cpp:
        (WebCore::InlineIterator::Line::firstLeafBox const):
        (WebCore::InlineIterator::Line::lastLeafBox const):
        (WebCore::InlineIterator::Line::closestRunForLogicalLeftPosition const):
        (WebCore::InlineIterator::Line::selectionState const):
        (WebCore::InlineIterator::Line::firstSelectedBox const):
        (WebCore::InlineIterator::Line::lastSelectedBox const):
        (WebCore::InlineIterator::Line::firstRun const): Deleted.
        (WebCore::InlineIterator::Line::lastRun const): Deleted.
        * layout/integration/InlineIteratorLine.h:
        * layout/integration/InlineIteratorLineLegacyPath.h:
        (WebCore::InlineIterator::LineIteratorLegacyPath::firstLeafBox const):
        (WebCore::InlineIterator::LineIteratorLegacyPath::lastLeafBox const):
        (WebCore::InlineIterator::LineIteratorLegacyPath::firstRun const): Deleted.
        (WebCore::InlineIterator::LineIteratorLegacyPath::lastRun const): Deleted.
        * layout/integration/InlineIteratorLineModernPath.h:
        (WebCore::InlineIterator::LineIteratorModernPath::firstLeafBox const):
        (WebCore::InlineIterator::LineIteratorModernPath::lastLeafBox const):
        (WebCore::InlineIterator::LineIteratorModernPath::firstRun const): Deleted.
        (WebCore::InlineIterator::LineIteratorModernPath::lastRun const): Deleted.
        * layout/integration/InlineIteratorLogicalOrderTraversal.h:
        (WebCore::InlineIterator::leafBoxesInLogicalOrder):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::containsNonZeroBidiLevel const):
        (WebCore::RenderBlockFlow::positionForPointWithInlineChildren):
        * style/InlineTextBoxStyle.cpp:
        (WebCore::minLogicalTopForTextDecorationLine):
        (WebCore::maxLogicalBottomForTextDecorationLine):

2022-01-02  Antti Koivisto  <antti@apple.com>

        [LFC][Integration] Support outlines
        https://bugs.webkit.org/show_bug.cgi?id=234766

        Reviewed by Alan Bujtas.

        Outlines should not require legacy line layout.

        * layout/integration/InlineIteratorInlineBox.cpp:
        (WebCore::InlineIterator::firstInlineBoxFor):
        (WebCore::InlineIterator::firstRootInlineBoxFor):

        Add iterator support for getting inline boxes from renderer.

        * layout/integration/InlineIteratorInlineBox.h:
        * layout/integration/LayoutIntegrationCoverage.cpp:
        (WebCore::LayoutIntegration::printReason):
        (WebCore::LayoutIntegration::canUseForRenderInlineChild):
        (WebCore::LayoutIntegration::canUseForLineLayoutWithReason):
        * layout/integration/LayoutIntegrationCoverage.h:
        * layout/integration/LayoutIntegrationLineLayout.cpp:
        (WebCore::LayoutIntegration::LineLayout::firstInlineBoxFor const):
        (WebCore::LayoutIntegration::LineLayout::firstRootInlineBox const):
        (WebCore::LayoutIntegration::LineLayout::paint):

        Support outline painting.

        * layout/integration/LayoutIntegrationLineLayout.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintObject):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::addFocusRingRectsForInlineChildren):

        Port to use iterator.

        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::paintOutline):

        Port to use iterator.

2022-01-02  Antoine Quint  <graouts@webkit.org>

        [Web Animations] getKeyframes() should ensure that all properties are present on 0% and 100% keyframes
        https://bugs.webkit.org/show_bug.cgi?id=234795

        Reviewed by Dean Jackson.

        Keyframes at 0% and 100% may not explicitly specify properties animated on intermediate keyframes, so
        in the case of such keyframes, we must ensure we output the non-animated value for properties not
        explicitly specified on the keyframe style.

        * animation/KeyframeEffect.cpp:
        (WebCore::KeyframeEffect::getKeyframes):

2022-01-02  Antoine Quint  <graouts@webkit.org>

        [Web Animations] getKeyframes() should return an empty object when there are no animatable properties in @keyframes rule
        https://bugs.webkit.org/show_bug.cgi?id=234793

        Reviewed by Dean Jackson.

        If the keyframes for an animation result from a declarative source, let's not output any data if none of the properties
        are animatable.

        * animation/KeyframeEffect.cpp:
        (WebCore::KeyframeEffect::getKeyframes):
        * rendering/style/KeyframeList.cpp:
        (WebCore::KeyframeList::containsAnimatableProperty const):
        * rendering/style/KeyframeList.h:

2022-01-02  Alan Bujtas  <zalan@apple.com>

        InlineTextItems should never split inside surrogate pairs
        https://bugs.webkit.org/show_bug.cgi?id=234791

        Reviewed by Antti Koivisto.

        This check was added (r285016) to handle the case if the start position in TextUtil::breakWord is
        inside a surrogate pair. However we should never have surrogate pairs split across InlineTextItems.
        This incorrect state was caused by the bogus "let's keep the first character on the current line" logic
        -which could also lead to a visually broken rendering. 
        (Note that fast/text/word-break-letter-spacing-utf16-surrogates.html passes without the early return)

        * layout/formattingContexts/inline/text/TextUtil.cpp:
        (WebCore::Layout::TextUtil::breakWord):
        (WebCore::Layout::TextUtil::firstUserPerceivedCharacterLength):

2022-01-02  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Nested inline box continuation fails to omit margin/border/padding start/end values
        https://bugs.webkit.org/show_bug.cgi?id=234789

        Reviewed by Antti Koivisto.

        Nested inline boxes inside continuation do not have block parents. It's sufficient to check
        for the continuation bits.

        Test: fast/inline/unexpected-start-end-decoration-with-nested-continuation.html

        * layout/integration/LayoutIntegrationBoxTree.cpp:
        (WebCore::LayoutIntegration::BoxTree::buildTree):
        * layout/integration/LayoutIntegrationLineLayout.cpp:
        (WebCore::LayoutIntegration::LineLayout::updateInlineBoxDimensions):

2022-01-01  Antoine Quint  <graouts@webkit.org>

        "animation" shorthand does not parse values in the right order
        https://bugs.webkit.org/show_bug.cgi?id=234788

        Reviewed by Dean Jackson.

        The animation-name should be parsed last, not first.

        * css/CSSProperties.json:

2022-01-01  Jean-Yves Avenard  <jya@apple.com>

        ScalableImageDecoder should be using SharedBuffer instead of DataSegment
        https://bugs.webkit.org/show_bug.cgi?id=233441
        rdar://problem/85854204

        Reviewed by Darin Adler.

        DataSegment should be a SharedBuffer's implementation details and not
        be used outside SharedBuffer's code.
        Historically, using the inner DataSegment was required as it was thread
        safe while SharedBuffer wasn't: This is no longer the case.
        SharedBuffer and DataSegment are semantically very similar, so this is
        mostly a find/replace change.
        Flattening the FragmentedSharedBuffer is still required as most decoders
        require reading the raw bytes.

        No change in observable behaviour.

        * platform/graphics/ImageBackingStore.h:
        (WebCore::ImageBackingStore::setSize):
        (WebCore::ImageBackingStore::ImageBackingStore):
        * platform/image-decoders/ScalableImageDecoder.h:
        * platform/image-decoders/avif/AVIFImageReader.cpp:
        (WebCore::AVIFImageReader::parseHeader):
        (WebCore::AVIFImageReader::decodeFrame):
        * platform/image-decoders/avif/AVIFImageReader.h:
        * platform/image-decoders/bmp/BMPImageReader.h:
        (WebCore::BMPImageReader::readUint16):
        (WebCore::BMPImageReader::readUint32):
        (WebCore::BMPImageReader::setData):
        * platform/image-decoders/gif/GIFImageReader.h:
        (GIFImageReader::setData):
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore::JPEGImageReader::decode):
        * platform/image-decoders/jpeg2000/JPEG2000ImageDecoder.cpp:
        (WebCore::JPEG2000ImageDecoder::decode):
        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageReader::decode):
        * platform/image-decoders/webp/WEBPImageDecoder.cpp:
        (WebCore::WEBPImageDecoder::decode):

2022-01-01  Jean-Yves Avenard  <jya@apple.com>

        make SharedBuffer::copy() return a contiguous SharedBuffer
        https://bugs.webkit.org/show_bug.cgi?id=234622
        rdar://problem/86829527

        Reviewed by Darin Adler.

        make SharedBuffer::copy() return a contiguous SharedBuffer

        API tests added.

        * platform/SharedBuffer.cpp:
        (WebCore::FragmentedSharedBuffer::copy const):

2022-01-01  Wenson Hsieh  <wenson_hsieh@apple.com>

        Modal containers are incorrectly detected in navigation elements and fixed document elements
        https://bugs.webkit.org/show_bug.cgi?id=234669
        rdar://87030613

        Reviewed by Darin Adler.

        Avoid false positives when detecting modal containers in the following scenarios:
        - Fixed-position document elements that contain the search term.
        - Text that contains the search term inside fixed-position navigation elements.

        Additionally, ensure that we unhide the current modal container in the event of a false positive where we find
        no element that fulfills the criteria for being a classifiable control.

        Tests:  ModalContainerObservation.IgnoreFixedDocumentElement
                ModalContainerObservation.IgnoreNavigationElements
                ModalContainerObservation.ShowModalContainerAfterFalsePositive

        * page/ModalContainerObserver.cpp:
        (WebCore::accessibilityRole):

        Move this static helper function farther up this source file, so that we can use it inside
        `updateModalContainerIfNeeded()`.

        (WebCore::isInsideNavigationElement):
        (WebCore::ModalContainerObserver::updateModalContainerIfNeeded):
        (WebCore::ModalContainerPolicyDecisionScope::ModalContainerPolicyDecisionScope):
        (WebCore::ModalContainerPolicyDecisionScope::~ModalContainerPolicyDecisionScope):
        (WebCore::ModalContainerPolicyDecisionScope::continueHidingModalContainerAfterScope):
        (WebCore::ModalContainerPolicyDecisionScope::document const):

        Add a RAII helper object to ensure that the modal container is revealed at the end of the modal container policy
        decision scope, unless `continueHidingModalContainerAfterScope()` is invoked. Since this class contains a
        `WeakPtr<Document>` already, we can replace the `WeakPtr<Document>` we're currently plumbing through each of the
        async callbacks with only the `ModalContainerPolicyDecisionScope`, and just grab the document (or null if it was
        destroyed) from the scope object.

        This helper object allows us to avoid sprinkling ad-hoc calls to `revealModalContainer()` when exiting modal
        container classification codepaths.

        (WebCore::ModalContainerObserver::collectClickableElementsTimerFired):
        * page/ModalContainerObserver.h:

2022-01-01  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Unexpected line break with leading collapsed whitespace
        https://bugs.webkit.org/show_bug.cgi?id=234786

        Reviewed by Antti Koivisto.

        We use Line::hasContent to decide whether an overflowing content should be wrapped to the next line.
        Line is considered empty unless it has at least one content-type run. 

        Test: fast/inline/unexpected-line-break-on-empty-content.html

        * layout/formattingContexts/inline/InlineLine.h:
        (WebCore::Layout::Line::hasContent const):

2022-01-01  Jeff Miller  <jeffm@apple.com>

        Update user-visible copyright strings to include 2022
        https://bugs.webkit.org/show_bug.cgi?id=234263

        Reviewed by Anders Carlsson.

        * Info.plist:

2022-01-01  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Simple RTL content triggers redundant horizontal positioning
        https://bugs.webkit.org/show_bug.cgi?id=234772

        Reviewed by Antti Koivisto.

        RTL content with inline boxes require a second pass horizontal positioning.
        Currently we trigger this second pass even when the content does not have any inline box.
        (e.g <div>content<span>with inline box</span></div> <div>content with no inline box</div>)

        * layout/formattingContexts/inline/display/InlineDisplayContentBuilder.cpp:
        (WebCore::Layout::InlineDisplayContentBuilder::processBidiContent): !0 parentDisplayBoxNodeIndex means non-root inline box.
        (WebCore::Layout::DisplayBoxTree::hasInlineBox const): Deleted.

2022-01-01  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Incorrect word-spacing gaps between RTL runs
        https://bugs.webkit.org/show_bug.cgi?id=234771

        Reviewed by Antti Koivisto.

        "word-spacing" acts as a margin for word separator type of runs.
        In this patch we take this margin into account the same way we do for atomic inline level boxes with margins.

        Test: fast/text/word-spacing-rtl.html

        * layout/formattingContexts/inline/InlineLine.cpp:
        (WebCore::Layout::Line::Run::Run):
        * layout/formattingContexts/inline/InlineLine.h:
        (WebCore::Layout::Line::Run::isText const):
        (WebCore::Layout::Line::Run::isWordSeparator const):
        * layout/formattingContexts/inline/display/InlineDisplayBox.h:
        (WebCore::InlineDisplay::Box::isText const):
        (WebCore::InlineDisplay::Box::isWordSeparator const):
        (WebCore::InlineDisplay::Box::isNonRootInlineLevelBox const):
        (WebCore::InlineDisplay::Box::type const): Deleted.
        * layout/formattingContexts/inline/display/InlineDisplayContentBuilder.cpp:
        (WebCore::Layout::InlineDisplayContentBuilder::appendTextDisplayBox):
        (WebCore::Layout::InlineDisplayContentBuilder::adjustVisualGeometryForDisplayBox):
        (WebCore::Layout::InlineDisplayContentBuilder::processBidiContent):

2021-12-31  Tyler Wilcock  <tyler_w@apple.com>

        Reduce repetition in Internals "set page activity state" methods
        https://bugs.webkit.org/show_bug.cgi?id=234768

        Reviewed by Darin Adler.

        `setPageVisibility`, `setPageIsFocusedAndActive`, and 
        `setPageIsInWindow` all modify page activity state, and repeat a lot
        of the same logic to do so. This patch refactors this into a common
        `updatePageActivityState` method.

        * testing/Internals.cpp:
        (WebCore::Internals::setPageVisibility):
        (WebCore::Internals::setPageIsFocusedAndActive):
        (WebCore::Internals::setPageIsInWindow):
        Refactor to use the new updatePageActivityState method.
        (WebCore::Internals::updatePageActivityState):
        Added.
        * testing/Internals.h:

2021-12-31  Wenson Hsieh  <wenson_hsieh@apple.com>

        Include a few more tag names to search when running modal container detection
        https://bugs.webkit.org/show_bug.cgi?id=234652

        Reviewed by Darin Adler.

        Broaden the list of tag names that we heuristically scan for the search term. This particular modal container
        detection failure was due to the search term appearing inside a `b` element, though I'm adding a few additional
        types just to be safe. Since we're checking more than just few tag names, we also take this opportunity to
        convert this into a compact AtomString hashtable of tag names that we should scan in the process of detecting
        modal containers.

        Test: ModalContainerObservation.DetectSearchTermInBoldTag

        * page/ModalContainerObserver.cpp:
        (WebCore::matchesSearchTerm):

2021-12-31  Wenson Hsieh  <wenson_hsieh@apple.com>

        Refactor some Cocoa-specific code in WebCore::FontAttributes to be platform-agnostic
        https://bugs.webkit.org/show_bug.cgi?id=234757

        Reviewed by Darin Adler.

        Replace the UIFont/NSFont currently in WebCore::FontAttributes with a WebCore::Font instead. This removes a bit
        of platform-specific logic in an otherwise platform-agnostic class (with the exception of a couple Cocoa-
        specific helper methods). This additionally lets us remove some platform-specific logic for computing font
        attributes (i.e. `platformFontAttributesAtSelectionStart`) below.

        * WebCore.xcodeproj/project.pbxproj:
        * editing/Editor.cpp:
        (WebCore::Editor::fontAttributesAtSelectionStart):
        (WebCore::Editor::platformFontAttributesAtSelectionStart const): Deleted.
        * editing/Editor.h:
        * editing/FontAttributes.h:
        (WebCore::TextList::encode const):
        (WebCore::TextList::decode):

        Drive-by fix: instead of `static_cast`-ing to a uint8_t and encoding/decoding the raw value, encode and decode
        the ListStyleType as a normal enum instead. This also ensures that we validate the enum value upon decoding.

        (WebCore::FontAttributes::encodingRequiresPlatformData const): Deleted.
        * editing/cocoa/EditorCocoa.mm:
        (WebCore::Editor::platformFontAttributesAtSelectionStart const): Deleted.
        * editing/cocoa/FontAttributesCocoa.mm:
        (WebCore::FontAttributes::createDictionary const):

        Only grab the NSFont or UIFont from the WebCore::Font object once we're in this Cocoa-specific helper.

        * platform/graphics/cocoa/FontCocoa.h: Added.

        Moved here from CocoaFont.h in WebKit. See WebKit/ChangeLog for more details.

        * rendering/style/RenderStyleConstants.h:

        Add EnumTraits for ListStyleType, so that it can be encoded/decoded.

2021-12-31  Alan Bujtas  <zalan@apple.com>

        REGRESSION (r287028): Incorrect root inline box horizontal position when text-align offset is present
        https://bugs.webkit.org/show_bug.cgi?id=234767

        Reviewed by Antti Koivisto.

        Display line has the content's visual left (rtl vs ltr) which should be used to position the root inline box.
        We use the same offset when construcing the non-root display boxes.

        Test: fast/text/root-inline-box-offset-with-text-align.html

        * layout/formattingContexts/inline/display/InlineDisplayContentBuilder.cpp:
        (WebCore::Layout::InlineDisplayContentBuilder::build):

2021-12-31  Wenson Hsieh  <wenson_hsieh@apple.com>

        Updating the file name of attachment-backed images should automatically set the `alt` attribute
        https://bugs.webkit.org/show_bug.cgi?id=234747
        rdar://85899879

        Reviewed by Darin Adler.

        Make a small adjustment when updating attachment attributes for attachment-backed images (i.e. when using
        `-[_WKAttachmentInfo setFileWrapper:contentType:completion:]`), such that the `alt` attribute of the image is
        set to the attachment element's `title`. While convenient for all internal clients of the `_WKAttachment` SPI
        (i.e. Mail, Notes), this has the added benefit of preserving the attachment's file name when copying and pasting
        across different web views (where a new `API::Attachment` is generated on paste), instead of defaulting to the
        last path component of the blob URL corresponding to the image data in the web archive.

        Test: WKAttachmentTests.CopyAndPasteImageBetweenWebViews

        * editing/Editor.cpp:
        (WebCore::Editor::notifyClientOfAttachmentUpdates):
        * html/HTMLAttachmentElement.cpp:
        (WebCore::HTMLAttachmentElement::enclosingImageElement const):
        (WebCore::HTMLAttachmentElement::updateAttributes):
        (WebCore::HTMLAttachmentElement::updateEnclosingImageWithData):
        (WebCore::HTMLAttachmentElement::hasEnclosingImage const): Deleted.

        Replace `hasEnclosingImage()` with `enclosingImageElement()`, a helper that returns the enclosing image element
        (or null if there is none). We use the latter in a couple of places above, where we modify some attributes on
        the enclosing image in response to attribute and data updates.

        * html/HTMLAttachmentElement.h:

2021-12-31  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Take grapheme clusters into account when keeping the first "character" on the line
        https://bugs.webkit.org/show_bug.cgi?id=234758

        Reviewed by Antti Koivisto.

        When dealing with complex fonts, we have to start looking beyond code points and taking
        larger cluster of code units into account.

        This patch is in preparation for enabling complex font codepath.

        * layout/formattingContexts/inline/InlineContentBreaker.cpp:
        (WebCore::Layout::InlineContentBreaker::processOverflowingContent const):
        * layout/formattingContexts/inline/text/TextUtil.cpp:
        (WebCore::Layout::TextUtil::firstUserPerceivedCharacterLength): user-perceived character is a unicode term.
        see https://unicode.org/reports/tr29/#Grapheme_Cluster_Boundaries
        * layout/formattingContexts/inline/text/TextUtil.h:
        * layout/integration/LayoutIntegrationBoxTree.cpp:
        (WebCore::LayoutIntegration::BoxTree::buildTree):
        * layout/layouttree/LayoutInlineTextBox.cpp:
        (WebCore::Layout::InlineTextBox::InlineTextBox):
        (WebCore::Layout::m_canUseSimpleFontCodePath):
        (WebCore::Layout::m_canUseSimplifiedContentMeasuring): Deleted.
        * layout/layouttree/LayoutInlineTextBox.h:
        (WebCore::Layout::InlineTextBox::canUseSimpleFontCodePath const):
        * layout/layouttree/LayoutTreeBuilder.cpp:
        (WebCore::Layout::TreeBuilder::createTextBox):
        (WebCore::Layout::TreeBuilder::createLayoutBox):
        * layout/layouttree/LayoutTreeBuilder.h:

2021-12-30  Jean-Yves Avenard  <jya@apple.com>

        SharedBuffer::takeData() is still dangerous
        https://bugs.webkit.org/show_bug.cgi?id=234724
        rdar://problem/86957233

        Reviewed by Darin Adler.

        Similar to bug 228161; however we only take the content of the DataSegment
        if its refcount is 1.
        DataSegments can be shared across multiple SharedBuffer and so we can't
        assume that when the SharedBuffer refcount is 1 that it is safe to use
        the DataSegment.
        This use of SharedBuffer::extractData will need to be revisited when
        SharedBuffer are used across different threads as the operation isn't
        thread-safe.

        API tests added.

        * platform/SharedBuffer.cpp:
        (WebCore::FragmentedSharedBuffer::takeData):

2021-12-30  Tim Nguyen  <ntim@apple.com>

        REGRESSION(r286955): Fix painting text-decorations with combined text
        https://bugs.webkit.org/show_bug.cgi?id=234707

        Reviewed by Dean Jackson.

        Test: imported/w3c/web-platform-tests/css/css-writing-modes/text-combine-upright-decorations-001.html

        * rendering/TextBoxPainter.cpp:
        (WebCore::TextBoxPainter::createDecorationPainter):
        (WebCore::TextBoxPainter::paintBackgroundDecorations):
        (WebCore::TextBoxPainter::paintForegroundDecorations):

2021-12-27  Tim Nguyen  <ntim@apple.com>

        Implement text-combine-upright property
        https://bugs.webkit.org/show_bug.cgi?id=150821

        Reviewed by Dean Jackson.

        webkit.org/b/234694 and webkit.org/b/234707 are landed for this initial version of text-combine-upright.

        To reach Chrome parity, layout needs to be tweaked (webkit.org/b/234704), and pseudo elements need to be properly supported (webkit.org/b/234705).

        To reach standards parity, it also needs the digits syntax to be implemented (webkit.org/b/234706), which no browser implements yet.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::valueForPropertyInStyle):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator TextCombine const):
        * css/CSSProperties.json:
        * css/CSSValueKeywords.in:
        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):
        (WebCore::CSSParserFastPaths::isKeywordPropertyID):
        * rendering/LegacyLineLayout.cpp:
        (WebCore::expansionBehaviorForInlineTextBox):
        * rendering/style/RenderStyleConstants.cpp:
        (WebCore::operator<<):
        * rendering/style/RenderStyleConstants.h:
        * style/PropertyAllowlist.cpp:
        (WebCore::Style::isValidMarkerStyleProperty):
        Allow setting text-combine-upright on ::marker.

2021-12-30  Adrian Perez de Castro  <aperez@igalia.com>

        Non-unified build fixes, end-of-year 2021 edition
        https://bugs.webkit.org/show_bug.cgi?id=234755

        Unreviewed non-unified build fixes.

        No new tests needed.

        * bindings/js/JSExecState.cpp:
        (WebCore::executionContext): Add missing namespace prefix in usage of JSC::jsCast() function.
        * bindings/js/SerializedScriptValue.cpp: Add missing JSExecState.h header.
        * inspector/InspectorFrontendHost.cpp: Add missing ScriptController.h header.
        * inspector/WebInjectedScriptManager.cpp: Add missing DOMWindow.h and JSExecState.h headers.
        * inspector/agents/InspectorTimelineAgent.cpp: Add missing JSExecState.h header.
        * inspector/agents/WebConsoleAgent.cpp: Add missing InspectorWebAgentBase.h and
        JSExecState.h headers.
        * inspector/agents/WebConsoleAgent.h: Add missing forward declaration of struct
        WebAgentContext.
        * layout/formattingContexts/inline/display/InlineDisplayLineBuilder.cpp: Add missing
        LayoutBoxGeometry.h header.
        * loader/CrossOriginAccessControl.cpp: Add missing DocumentLoader.h header.

2021-12-30  Alan Bujtas  <zalan@apple.com>

        [IFC][Integration] Enable RTL inline base direction
        https://bugs.webkit.org/show_bug.cgi?id=234736

        Reviewed by Antti Koivisto.

        * layout/formattingContexts/inline/display/InlineDisplayContentBuilder.cpp:
        (WebCore::Layout::InlineDisplayContentBuilder::processBidiContent):
        * layout/integration/LayoutIntegrationCoverage.cpp:
        (WebCore::LayoutIntegration::canUseForStyle):

2021-12-30  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Non-empty inline boxes construction should be driven by their content
        https://bugs.webkit.org/show_bug.cgi?id=234744

        Reviewed by Antti Koivisto.

        At bidi paragraph processing, we assign bidi levels to inline items. Normally only content type
        of inline items need bidi levels as inline box start(end) visual order is driven by their content.
        However there are 2 cases when inline box start require bidi level
          - empty inline boxes (1<span></span>2) -so that we can find out their position.
          - inline boxes with unicode-bidi style -they change their content's bidi behavior.
        In this patch we ignore the second type of inline boxes at display box construction
        as they may trigger redundant inline boxes on the line (as we create them for their content).

        * layout/formattingContexts/inline/display/InlineDisplayContentBuilder.cpp:
        (WebCore::Layout::InlineDisplayContentBuilder::processBidiContent):

2021-12-29  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add support for -webkit-rtl-ordering
        https://bugs.webkit.org/show_bug.cgi?id=234715

        Reviewed by Antti Koivisto.

        "-webkit-rtl-ordering: visual" introduces EUnicodeBidi::Override on the block level
        (apparently it has no effect on inline boxes).

        * layout/formattingContexts/inline/InlineItemsBuilder.cpp:
        (WebCore::Layout::handleEnterExitBidiContext):
        (WebCore::Layout::buildBidiParagraph):
        * layout/integration/LayoutIntegrationCoverage.cpp:
        (WebCore::LayoutIntegration::printReason):
        (WebCore::LayoutIntegration::canUseForStyle):
        * layout/integration/LayoutIntegrationCoverage.h:

2021-12-29  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Collapsed trailing whitespace may introduce stray inline box
        https://bugs.webkit.org/show_bug.cgi?id=234735

        Reviewed by Antti Koivisto.

        See the comment in LineBuilder::handleInlineContent.

        Test: fast/inline/inline-box-with-collapsed-whitespace.html

        * layout/formattingContexts/inline/InlineLineBuilder.cpp:
        (WebCore::Layout::LineBuilder::handleInlineContent):

2021-12-29  Sam Weinig  <weinig@apple.com>

        Add additional named color spaces for extended rgb color types and HSL/HWB in preparation for out of gamut and missing component support
        https://bugs.webkit.org/show_bug.cgi?id=234741

        Reviewed by Dean Jackson.

        Adds named color space support, which provides the ability for a color type to live
        in a Color, for the following color spaces:  
        
            ExtendedA98RGB
            ExtendedDisplayP3
            ExtendedLinearSRGB
            ExtendedProPhotoRGB
            ExtendedRec2020
            ExtendedSRGB
            HSL
            HWB

        This is going to be needed to add support for out of gamut color() function support 
        and support for the new missing component syntax.

        The extended variants serialize identically to their bounded counterparts, HSL/HWB
        serialize as they do today, by converting to 8-bit sRGB and serializing as it.

        * platform/graphics/ColorConversion.cpp:
        (WebCore::convertColorComponents):
        * platform/graphics/ColorSerialization.cpp:
        (WebCore::serialization):
        (WebCore::serializationForRenderTreeAsText):
        (WebCore::serializationForCSS):
        (WebCore::serializationForHTML):
        * platform/graphics/ColorSpace.cpp:
        (WebCore::operator<<):
        * platform/graphics/ColorSpace.h:
        (WebCore::callWithColorType):
        * platform/graphics/ColorTypes.h:
        * platform/graphics/ColorUtilities.h:
        * platform/graphics/cg/ColorSpaceCG.cpp:
        (WebCore::extendedNamedColorSpace):
        (WebCore::extendedAdobeRGB1998ColorSpaceRef):
        (WebCore::extendedDisplayP3ColorSpaceRef):
        (WebCore::extendedITUR_2020ColorSpaceRef):
        (WebCore::extendedLinearSRGBColorSpaceRef):
        (WebCore::extendedROMMRGBColorSpaceRef):
        (WebCore::colorSpaceForCGColorSpace):
        (WebCore::labColorSpaceRef): Deleted.
        * platform/graphics/cg/ColorSpaceCG.h:
        (WebCore::cachedNullableCGColorSpace):

2021-12-29  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r287478.
        https://bugs.webkit.org/show_bug.cgi?id=234742

        causes debug failures

        Reverted changeset:

        "[LFC][IFC] Collapsed trailing whitespace may introduce stray
        inline box"
        https://bugs.webkit.org/show_bug.cgi?id=234735
        https://commits.webkit.org/r287478

2021-12-29  Antti Koivisto  <antti@apple.com>

        Make MatchElement in RuleFeature non-optional
        https://bugs.webkit.org/show_bug.cgi?id=234738

        Reviewed by Sam Weinig.

        Split no-MatchElement case into a separate RuleAndSelector struct.

        Also make MediaQueryCollector collect whole StyleRules instead of using RuleFeature/RuleAndSelector for simplicity
        and better logic. Media queries always affect all of a StyleRule, not some invidiual selectors.

        * style/RuleFeature.cpp:
        (WebCore::Style::RuleAndSelector::RuleAndSelector):
        (WebCore::Style::RuleFeature::RuleFeature):
        * style/RuleFeature.h:
        (WebCore::Style::RuleFeatureWithInvalidationSelector::RuleFeatureWithInvalidationSelector):
        * style/RuleSet.cpp:
        (WebCore::Style::RuleSet::evaluateDynamicMediaQueryRules):

        Use RuleSetBuilder to build the media query invalidation ruleset. It also does shrink-to-fit for us.

        * style/RuleSet.h:
        (WebCore::Style::RuleSet::DynamicMediaQueryRules::shrinkToFit):
        * style/RuleSetBuilder.cpp:
        (WebCore::Style::RuleSetBuilder::MediaQueryCollector::pop):
        (WebCore::Style::RuleSetBuilder::MediaQueryCollector::addRuleIfNeeded):
        * style/RuleSetBuilder.h:
        * style/StyleScopeRuleSets.cpp:
        (WebCore::Style::makeRuleSet):
        (WebCore::Style::ensureInvalidationRuleSets):

2021-12-29  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Collapsed trailing whitespace may introduce stray inline box
        https://bugs.webkit.org/show_bug.cgi?id=234735

        Reviewed by Antti Koivisto.

        See the comment in LineBuilder::handleInlineContent.

        Test: fast/inline/inline-box-with-collapsed-whitespace.html

        * layout/formattingContexts/inline/InlineLineBuilder.cpp:
        (WebCore::Layout::LineBuilder::handleInlineContent):

2021-12-28  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Do not let Layout geometry types leak into InlineDisplay::Line
        https://bugs.webkit.org/show_bug.cgi?id=234729

        Reviewed by Antti Koivisto.

        InlineLayoutUnit -> float
        InlineRect -> FloatRect
        (This is also where we will eventually do some pixel snapping)

        * layout/formattingContexts/block/BlockFormattingGeometry.cpp:
        (WebCore::Layout::BlockFormattingGeometry::inFlowNonReplacedContentHeightAndMargin const):
        * layout/formattingContexts/inline/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::usedContentHeight const):
        (WebCore::Layout::InlineFormattingContext::computeStaticPositionForOutOfFlowContent):
        * layout/formattingContexts/inline/InlineLineBoxBuilder.cpp:
        (WebCore::Layout::LineBoxBuilder::constructAndAlignInlineLevelBoxes):
        * layout/formattingContexts/inline/display/InlineDisplayContentBuilder.cpp:
        (WebCore::Layout::InlineDisplayContentBuilder::build):
        (WebCore::Layout::InlineDisplayContentBuilder::processNonBidiContent):
        (WebCore::Layout::InlineDisplayContentBuilder::processBidiContent):
        * layout/formattingContexts/inline/display/InlineDisplayLine.h:
        (WebCore::InlineDisplay::Line::left const):
        (WebCore::InlineDisplay::Line::right const):
        (WebCore::InlineDisplay::Line::top const):
        (WebCore::InlineDisplay::Line::bottom const):
        (WebCore::InlineDisplay::Line::topLeft const):
        (WebCore::InlineDisplay::Line::lineBoxRect const):
        (WebCore::InlineDisplay::Line::scrollableOverflow const):
        (WebCore::InlineDisplay::Line::baseline const):
        (WebCore::InlineDisplay::Line::contentLeft const):
        (WebCore::InlineDisplay::Line::contentWidth const):
        (WebCore::InlineDisplay::Line::moveVertically):
        (WebCore::InlineDisplay::Line::Line):
        * layout/layouttree/LayoutTreeBuilder.cpp:
        (WebCore::Layout::showInlineTreeAndRuns):

2021-12-28  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Do not let Layout geometry types leak into InlineDisplay::Box
        https://bugs.webkit.org/show_bug.cgi?id=234728

        Reviewed by Antti Koivisto.

        InlineLayoutUnit -> float
        InlineRect -> FloatRect
        (This is also where we will eventually do some pixel snapping)

        * layout/formattingContexts/inline/display/InlineDisplayBox.h:
        (WebCore::InlineDisplay::Box::Box):
        (WebCore::InlineDisplay::Box::rect const):
        (WebCore::InlineDisplay::Box::inkOverflow const):
        (WebCore::InlineDisplay::Box::top const):
        (WebCore::InlineDisplay::Box::bottom const):
        (WebCore::InlineDisplay::Box::left const):
        (WebCore::InlineDisplay::Box::right const):
        (WebCore::InlineDisplay::Box::width const):
        (WebCore::InlineDisplay::Box::height const):
        (WebCore::InlineDisplay::Box::moveVertically):
        (WebCore::InlineDisplay::Box::moveHorizontally):
        (WebCore::InlineDisplay::Box::adjustInkOverflow):
        (WebCore::InlineDisplay::Box::setLeft):
        (WebCore::InlineDisplay::Box::setRight):
        (WebCore::InlineDisplay::Box::setRect):
        (WebCore::InlineDisplay::Box::truncate):
        * layout/formattingContexts/inline/display/InlineDisplayContentBuilder.cpp:
        (WebCore::Layout::computeBoxShadowInkOverflow):
        (WebCore::Layout::InlineDisplayContentBuilder::appendAtomicInlineLevelDisplayBox):
        (WebCore::Layout::InlineDisplayContentBuilder::appendInlineBoxDisplayBox):
        (WebCore::Layout::InlineDisplayContentBuilder::appendSpanningInlineBoxDisplayBox):
        (WebCore::Layout::InlineDisplayContentBuilder::adjustVisualGeometryForDisplayBox):
        (WebCore::Layout::InlineDisplayContentBuilder::processOverflownRunsForEllipsis):
        * layout/integration/LayoutIntegrationBoxTree.cpp:
        (WebCore::LayoutIntegration::showInlineContent):
        * layout/integration/LayoutIntegrationInlineContentBuilder.cpp:
        (WebCore::LayoutIntegration::InlineContentBuilder::createDisplayLines const):
        * layout/layouttree/LayoutTreeBuilder.cpp:
        (WebCore::Layout::showInlineTreeAndRuns):
        * platform/graphics/FloatRect.h:
        (WebCore::FloatRect::inflate):

2021-12-28  Sam Weinig  <weinig@apple.com>

        Support color interpolation methods for CSS Gradients
        https://bugs.webkit.org/show_bug.cgi?id=234711

        Reviewed by Simon Fraser.

        Tests: imported/w3c/web-platform-tests/css/css-images/parsing/gradient-interpolation-method-computed.html
               imported/w3c/web-platform-tests/css/css-images/parsing/gradient-interpolation-method-invalid.html
               imported/w3c/web-platform-tests/css/css-images/parsing/gradient-interpolation-method-valid.html

        Add support for specifying a color intpolation method in CSS gradients. The grammar
        uses the same production as color-mix(), but unlike color-mix(), it is optional for
        backwards compatibility, defaulting to 'srgb'. As 'srgb' is the default if nothing is
        specified, when serializing and the 'srgb' is used, no interpolation method is serialized
        as specified in the spec.

        * css/CSSGradientValue.cpp:
        (WebCore::appendHueInterpolationMethod):
        Serialize the hue method if it is not the default, "shorter".
        (WebCore::appendColorInterpolationMethod):
        Serialize the color space if it is not the default, "srgb".
        (WebCore::CSSLinearGradientValue::customCSSText const):
        (WebCore::CSSRadialGradientValue::customCSSText const):
        (WebCore::CSSConicGradientValue::customCSSText const):
        Serialize the interpolation method after any initial conditions / positions
        but before the color stops to match the rule in the spec that it should be
        in the order they appear in the grammar.

        * css/parser/CSSParserContext.cpp:
        * css/parser/CSSParserContext.h:
        Add new bit for the enabling CSS gradient interpolation method support.
        Bump size of bits up to a uint64_t since we were overflowing.

        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::consumeColorInterpolationMethod):
        (WebCore::CSSPropertyParserHelpers::parseColorMixFunctionParameters):
        (WebCore::CSSPropertyParserHelpers::consumePrefixedRadialGradient):
        (WebCore::CSSPropertyParserHelpers::consumeRadialGradient):
        (WebCore::CSSPropertyParserHelpers::consumePrefixedLinearGradient):
        (WebCore::CSSPropertyParserHelpers::consumeLinearGradient):
        (WebCore::CSSPropertyParserHelpers::consumeConicGradient):
        (WebCore::CSSPropertyParserHelpers::consumeGeneratedImage):
        (WebCore::CSSPropertyParserHelpers::consumeDeprecatedRadialGradient): Deleted.
        Add support for parsing the color interpolation method on non-prefixed/non-deprecated
        gradient functions. Renames consumeDeprecatedRadialGradient to consumePrefixedRadialGradient,
        since it is not consuming a deprecated radial gradient, a different function does that,
        and break out consuming prefixed linear gradients into consumePrefixedLinearGradient
        now that the logic is even more diverged from the standard one.

        * platform/graphics/cg/GradientRendererCG.cpp:
        (WebCore::GradientRendererCG::pickStrategy const):
        Use the shading strategy for all non-srgb interpolation methods as CGGradientRef does
        not support it.

2021-12-28  Sam Weinig  <weinig@apple.com>

        Enhance Vector::map to allow specifying what kind of Vector to return (e.g. inline capacity, overflow, etc.)
        https://bugs.webkit.org/show_bug.cgi?id=234683

        Reviewed by Darin Adler.

        * platform/graphics/GradientColorStops.h:
        (WebCore::GradientColorStops::mapColors const):
        (WebCore::GradientColorStops::GradientColorStops):
        Utilize new overloaded Vector::map to streamline GradientColorStops::mapColors(). Also
        made it preserve the isSorted bit, which is valid because the offsets don't change.

2021-12-28  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Hanging content may not be whitespace type
        https://bugs.webkit.org/show_bug.cgi?id=234698

        Reviewed by Antti Koivisto.

        While we only allow whitespace hanging content, they could be any type.

        * layout/formattingContexts/inline/InlineLineBoxBuilder.cpp:
        (WebCore::Layout::horizontalAlignmentOffset):
        (WebCore::Layout::LineBoxBuilder::build):
        * layout/formattingContexts/inline/InlineLineBuilder.h:
        * layout/formattingContexts/inline/display/InlineDisplayLineBuilder.cpp:
        (WebCore::Layout::InlineDisplayLineBuilder::build const):

2021-12-28  Alan Bujtas  <zalan@apple.com>

        REGRESSION(r287440) Do not wrap the content for a collapsed whitespace
        https://bugs.webkit.org/show_bug.cgi?id=234710

        Reviewed by Antti Koivisto.

        While r287440 was correct, shouldKeepEndOfLineWhitespace had an unintentional side-effect of
        keeping collapsed whitespace content on the line even when it is followed by an inline box end
        with margin/padding/border that would otherwise overflow the line.

        e.g <div style="width: 0px"><span style="border-right: 100px;">X </span></div>
        ^^ the overflowing inline box end should not be wrapped over to the next line.

        Test: fast/inline/trailing-whitespace-content-with-overflowing-inline-box.html

        * layout/formattingContexts/inline/InlineContentBreaker.cpp:
        (WebCore::Layout::isWhitespaceOnlyContent):
        (WebCore::Layout::InlineContentBreaker::processOverflowingContent const):
        (WebCore::Layout::isVisuallyEmptyWhitespaceContent): Deleted.

2021-12-27  Wenson Hsieh  <wenson_hsieh@apple.com>

        Element::boundingAbsoluteRectWithoutLayout() should be marked `const`
        https://bugs.webkit.org/show_bug.cgi?id=234703

        Reviewed by Darin Adler.

        Mark an existing method on Element as `const`, so that it can be invoked with `const Element*`/`const Element&`.
        No change in behavior.

        * dom/Element.cpp:
        (WebCore::listBoxElementBoundingBox):
        (WebCore::Element::boundingAbsoluteRectWithoutLayout const):
        (WebCore::Element::boundingAbsoluteRectWithoutLayout): Deleted.
        * dom/Element.h:

2021-12-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][a11y] Test accessibility/aria-inherits-presentational.html is failing with ATSPI
        https://bugs.webkit.org/show_bug.cgi?id=234685

        Reviewed by Adrian Perez de Castro.

        We are ignoring list items inheriting presentational role, but we need to expose its contents.

        * accessibility/atspi/AccessibilityObjectAtspi.cpp:
        (WebCore::AccessibilityObjectAtspi::effectiveRole const): Use section as effective role of list items inheriting
        presentational role.
        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject const): Include list items inheriting
        presentational role.

2021-12-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][a11y] Stop setting manages-descendants on web process root object with ATSPI
        https://bugs.webkit.org/show_bug.cgi?id=234663

        Reviewed by Adrian Perez de Castro.

        Emit parent-changed and children-changed signals instead, like all other objects, to properly update the ATSPI
        cache.

        * accessibility/atspi/AccessibilityAtspi.cpp:
        (WebCore::AccessibilityAtspi::parentChanged): Emit the signal for the root object.
        (WebCore::AccessibilityAtspi::childrenChanged): Ditto.
        * accessibility/atspi/AccessibilityAtspi.h:
        * accessibility/atspi/AccessibilityObjectAtspi.cpp:
        (WebCore::AccessibilityObjectAtspi::cacheDestroyed): Notify the root object too.
        (WebCore::AccessibilityObjectAtspi::elementDestroyed): Ditto.
        (WebCore::AccessibilityObjectAtspi::setParent): Ditto.
        (WebCore::AccessibilityObjectAtspi::serialize const): Use AccessibilityRootAtspi::applicationReference().
        * accessibility/atspi/AccessibilityRootAtspi.cpp:
        (WebCore::AccessibilityRootAtspi::embedded): Call AccessibilityAtspi::parentChanged().
        (WebCore::AccessibilityRootAtspi::parentReference const): Added.
        (WebCore::AccessibilityRootAtspi::childAdded): Call AccessibilityAtspi::childrenChanged().
        (WebCore::AccessibilityRootAtspi::childRemoved): Ditto.
        (WebCore::AccessibilityRootAtspi::serialize const): Do not set manages-descendants state.
        * accessibility/atspi/AccessibilityRootAtspi.h:

2021-12-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][a11y] Test /webkit/WebKitAccessibility/selection/listbox is flaky with ATSPI
        https://bugs.webkit.org/show_bug.cgi?id=234665

        Reviewed by Adrian Perez de Castro.

        The problem is that selection-changed can be called multiple times for list boxes. When the notification is
        deferred by the AXObject cache, it's ensured to be called only one for every element in the following run loop
        iteration, but when not deferred the signal is emitted for every notification.

        * accessibility/atspi/AccessibilityObjectAtspi.h:
        * accessibility/atspi/AccessibilityObjectSelectionAtspi.cpp:
        (WebCore::AccessibilityObjectAtspi::selectionChanged): Ensure we don't emit the selection-changed signal more
        than once in the same run loop iteration.

2021-12-26  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Do not trim the hanging trailing content
        https://bugs.webkit.org/show_bug.cgi?id=234679

        Reviewed by Antti Koivisto.

        This is the final step of making the hanging content handling inline with the spec.
        (https://www.w3.org/TR/css-text-3/#hang)
        Since we don't (fake)trim such content when closing the line, the content width matches
        the actual content on the line which also helps when it is aligned to support RTL ordering.

        * layout/formattingContexts/inline/InlineLine.cpp:
        (WebCore::Layout::Line::Run::removeTrailingWhitespace):
        (WebCore::Layout::Line::visuallyCollapseHangingOverflowingGlyphs): Deleted.
        (WebCore::Layout::Line::Run::visuallyCollapseTrailingWhitespace): Deleted.
        * layout/formattingContexts/inline/InlineLine.h:
        * layout/formattingContexts/inline/InlineLineBoxBuilder.cpp:
        (WebCore::Layout::horizontalAlignmentOffset):
        * layout/formattingContexts/inline/InlineLineBuilder.cpp:
        (WebCore::Layout::LineBuilder::close):

2021-12-26  Tim Nguyen  <ntim@apple.com>

        Make -webkit-text-combine an inherited property
        https://bugs.webkit.org/show_bug.cgi?id=234694

        Reviewed by Simon Fraser.

        -webkit-text-combine is said to be inherited in CSSProperties.json, but it is not actually the case.
        It should be inherited per-spec (for text-combine-upright).

        https://drafts.csswg.org/css-writing-modes/#text-combine-upright

        Test: fast/text/text-combine-inherited.html

        * rendering/style/RenderStyle.cpp:
        (WebCore::rareNonInheritedDataChangeRequiresLayout):
        (WebCore::rareInheritedDataChangeRequiresLayout):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::textCombine const):
        (WebCore::RenderStyle::setTextCombine):
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::operator== const):
        * rendering/style/StyleRareInheritedData.h:
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator== const):
        * rendering/style/StyleRareNonInheritedData.h:

2021-12-26  Frédéric Wang  <fwang@igalia.com>

        null ptr deref in WebCore::indexForVisiblePosition()
        https://bugs.webkit.org/show_bug.cgi?id=234255

        Reviewed by Darin Adler.

        * editing/InsertListCommand.cpp:
        (WebCore::InsertListCommand::doApply): Ensure endOfSelection did not become orphan before
        calling indexForVisiblePosition(). This may happen because the VisiblePosition constructor
        is called in the while loop, triggering re-layout and post-layout tasks.

2021-12-26  Tim Nguyen  <ntim@apple.com>

        Remove -webkit-{border-fit/margin-collapse} leftovers in StyleRareNonInheritedData
        https://bugs.webkit.org/show_bug.cgi?id=234692

        Reviewed by Simon Fraser.

        r285615 removed -webkit-border-fit.
        r287429 removed -webkit-margin-collapse properties.

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::hashForTextAutosizing const):
        (WebCore::RenderStyle::equalForTextAutosizing const):
        (WebCore::rareNonInheritedDataChangeRequiresLayout):
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator== const):
        * rendering/style/StyleRareNonInheritedData.h:

2021-12-26  Alan Bujtas  <zalan@apple.com>

        [IFC][Integration] Update text renderer's needsVisualReordering bit
        https://bugs.webkit.org/show_bug.cgi?id=234688

        Reviewed by Antti Koivisto.

        This is similar to legacy line layout where the RenderText's needsVisualReordering is
        updated as the (bidi) text box is being placed on the line.
        Here we update this bit right after the line layout, when we finished constructing the display boxes. 

        * layout/formattingContexts/inline/InlineItemsBuilder.cpp:
        (WebCore::Layout::InlineItemsBuilder::handleTextContent):
        * layout/integration/LayoutIntegrationBoxTree.cpp:
        (WebCore::LayoutIntegration::BoxTree::buildTree):
        * layout/integration/LayoutIntegrationInlineContentBuilder.cpp:
        (WebCore::LayoutIntegration::InlineContentBuilder::InlineContentBuilder):
        (WebCore::LayoutIntegration::InlineContentBuilder::build const):
        * layout/integration/LayoutIntegrationInlineContentBuilder.h:
        * layout/layouttree/LayoutInlineTextBox.cpp:
        (WebCore::Layout::InlineTextBox::InlineTextBox):
        (WebCore::Layout::m_canUseSimplifiedContentMeasuring):
        (WebCore::Layout::m_containsBidiText): Deleted.
        * layout/layouttree/LayoutInlineTextBox.h:
        (WebCore::Layout::InlineTextBox::canUseSimplifiedContentMeasuring const):
        (WebCore::Layout::InlineTextBox::containsBidiText const): Deleted. No need to cache this value on the layout box
        InlineTextItems more or less have the same lifecycle as their associated layout boxes.
        * layout/layouttree/LayoutTreeBuilder.cpp:
        (WebCore::Layout::TreeBuilder::createTextBox):

2021-12-26  Tim Nguyen  <ntim@apple.com>

        Update writing-mode property values in CSSProperties.json
        https://bugs.webkit.org/show_bug.cgi?id=234689

        Reviewed by Simon Fraser.

        horizontal-tb/vertical-lr/vertical-rl have been supported for a while now.
        horizontal-bt has too, but it is non-standard.

        * css/CSSProperties.json:

2021-12-26  Antti Koivisto  <antti@apple.com>

        [:has() pseudo-class] Support :disabled and :enabled pseudo-class invalidation
        https://bugs.webkit.org/show_bug.cgi?id=234636

        Reviewed by Simon Fraser.

        Use Style::PseudoClassChangeInvalidation to support invalidation with :has(:disabled).

        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::setAncestorDisabled):
        (WebCore::HTMLFormControlElement::parseAttribute):
        (WebCore::HTMLFormControlElement::disabledStateChanged):
        * html/HTMLOptGroupElement.cpp:
        (WebCore::HTMLOptGroupElement::isDisabledFormControl const):

        Use a member bit instead of checking the attribute directly. This allows invalidation to be scoped over the state change.

        (WebCore::HTMLOptGroupElement::parseAttribute):

        Optgroup can flip the disabled status of the associated option elements too so handle that specifically.

        * html/HTMLOptGroupElement.h:
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::parseAttribute):

2021-12-26  Alan Bujtas  <zalan@apple.com>

        makeTextLogicalOrderCacheIfNeeded is only interested in whether the content needs visual reordering
        https://bugs.webkit.org/show_bug.cgi?id=234687

        Reviewed by Antti Koivisto.

        This renaming patch is in preparation for fixing the caching codepath for LFC bidi.

        * layout/formattingContexts/inline/text/TextUtil.cpp:
        (WebCore::Layout::TextUtil::containsStrongDirectionalityText):
        (WebCore::Layout::TextUtil::containsBidiText): Deleted.
        * layout/formattingContexts/inline/text/TextUtil.h:
        * layout/integration/InlineIteratorLogicalOrderTraversal.cpp:
        (WebCore::InlineIterator::makeTextLogicalOrderCacheIfNeeded):
        * layout/integration/LayoutIntegrationBoxTree.cpp:
        (WebCore::LayoutIntegration::BoxTree::buildTree):
        * layout/layouttree/LayoutTreeBuilder.cpp:
        (WebCore::Layout::TreeBuilder::createTextBox):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::RenderText):
        (WebCore::RenderText::positionLineBox):
        * rendering/RenderText.h:
        (WebCore::RenderText::needsVisualReordering const):
        (WebCore::RenderText::setNeedsVisualReordering):
        (WebCore::RenderText::containsBidiText const): Deleted.
        (WebCore::RenderText::setContainsBidiText): Deleted.

2021-12-26  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] ContinuousContent should tell InlineContentBreaker if the candidate content is hanging
        https://bugs.webkit.org/show_bug.cgi?id=234671

        Reviewed by Antti Koivisto.

        ContinuousContent now keeps track of whether the candidate run is a hanging content.
        It enables InlineContentBreaker to just simply look at the flag to decide if the overflowing
        (hanging) content should stay on the line or not.

        * layout/formattingContexts/inline/InlineContentBreaker.cpp:
        (WebCore::Layout::InlineContentBreaker::processOverflowingContent const):
        (WebCore::Layout::InlineContentBreaker::ContinuousContent::append):
        (WebCore::Layout::InlineContentBreaker::ContinuousContent::reset):
        * layout/formattingContexts/inline/InlineContentBreaker.h:
        (WebCore::Layout::InlineContentBreaker::ContinuousContent::isHangingContent const):
        * layout/formattingContexts/inline/InlineLineBuilder.cpp:
        (WebCore::Layout::LineCandidate::InlineContent::appendInlineItem):

2021-12-25  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Turn InlineContentBreaker::ContinuousContent's leading/trailing member variables to std::optional<InlineLayoutUnit>
        https://bugs.webkit.org/show_bug.cgi?id=234676

        Reviewed by Antti Koivisto.

        While an empty (logical width = 0) ContinuousContent takes up no space, it should not be mistaken for collapsed content
        (i.e when m_logicalWidth(0) == m_trailingCollapsibleWidth(0), hasCollapsibleContent() should still return false)

        * layout/formattingContexts/inline/InlineContentBreaker.cpp:
        (WebCore::Layout::InlineContentBreaker::processOverflowingContent const):
        (WebCore::Layout::InlineContentBreaker::tryBreakingOverflowingRun const):
        (WebCore::Layout::InlineContentBreaker::tryBreakingPreviousNonOverflowingRuns const):
        (WebCore::Layout::InlineContentBreaker::ContinuousContent::appendToRunList): Add a dedicated function to deal with append and logicalWidth.
        (WebCore::Layout::InlineContentBreaker::ContinuousContent::resetTrailingWhitespace): Turn trailing whitespace into leading if applicable.
        (WebCore::Layout::InlineContentBreaker::ContinuousContent::append): Add dedicated functions for each inline item types.
        * layout/formattingContexts/inline/InlineContentBreaker.h:
        (WebCore::Layout::InlineContentBreaker::ContinuousContent::leadingCollapsibleWidth const):
        (WebCore::Layout::InlineContentBreaker::ContinuousContent::trailingCollapsibleWidth const):
        (WebCore::Layout::InlineContentBreaker::ContinuousContent::hasCollapsibleContent const):
        (WebCore::Layout::InlineContentBreaker::ContinuousContent::isFullyCollapsible const):
        * layout/formattingContexts/inline/InlineLineBuilder.cpp:
        (WebCore::Layout::LineCandidate::InlineContent::appendInlineItem):

2021-12-25  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Remove redundant InlineContentBreaker::shouldKeepEndOfLineWhitespace
        https://bugs.webkit.org/show_bug.cgi?id=234668

        Reviewed by Antti Koivisto.

        This is in preparation for moving pre-wrap checking out of InlineContentBreaker.

        * layout/formattingContexts/inline/InlineContentBreaker.cpp:
        (WebCore::Layout::InlineContentBreaker::processOverflowingContent const):
        (WebCore::Layout::InlineContentBreaker::shouldKeepEndOfLineWhitespace const): Deleted.
        * layout/formattingContexts/inline/InlineContentBreaker.h:

2021-12-25  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Fully collapsible whitespace content should always stay on the current line
        https://bugs.webkit.org/show_bug.cgi?id=234667

        Reviewed by Antti Koivisto.

        Fully collapsible trailing whitespace content (normal/nowrap/preline) gets removed at
        the trimming phase so it always "fits" the current line.
        This is also in preparation for decoupling removeable and hanging trailing content.

        * layout/formattingContexts/inline/InlineContentBreaker.cpp:
        (WebCore::Layout::InlineContentBreaker::processOverflowingContent const):

2021-12-25  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] InlineContentBreaker should know about the hanging content width
        https://bugs.webkit.org/show_bug.cgi?id=234662

        Reviewed by Antti Koivisto.

        Pass in the trailing hanging content width to InlineContentBreaker as this specific type
        of content (e.g. pre-wrap whitespace) should be ignored when checking for content fit.

        (Note that we already ignore it through the shouldKeepEndOfLineWhitespace() call in
        InlineContentBreaker::processOverflowingContent, but this patch is in preparation for making hanging content logic
        more inline with the spec. -and also removing shouldKeepEndOfLineWhitespace needs some more changes.)

        * layout/formattingContexts/inline/InlineContentBreaker.cpp:
        (WebCore::Layout::InlineContentBreaker::processOverflowingContent const):
        * layout/formattingContexts/inline/InlineContentBreaker.h:
        * layout/formattingContexts/inline/InlineLine.h:
        (WebCore::Layout::Line::hangingTrailingContentWidth const):
        (WebCore::Layout::Line::hangingWhitespaceWidth const): Deleted.
        * layout/formattingContexts/inline/InlineLineBuilder.cpp:
        (WebCore::Layout::LineBuilder::layoutInlineContent):
        (WebCore::Layout::LineBuilder::handleInlineContent):

2021-12-24  Tim Nguyen  <ntim@apple.com>

        Unreviewed, remove -webkit-svg-shadow from CSSProperties.json

        It's been unshipped since 2018, and most removed properties aren't kept in CSSProperties.json
        (e.g. -webkit-border-fit, -webkit-background-composite, -webkit-margin-collapse).

        There's not much point to keep it in there.

        * css/CSSProperties.json:

2021-12-24  Tim Nguyen  <ntim@apple.com>

        Internally unprefix -webkit-font-kerning CSS property
        https://bugs.webkit.org/show_bug.cgi?id=234673

        Reviewed by Myles C. Maxfield.

        Same to what was done in bug 234602 for text-emphasis CSS properties.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::valueForPropertyInStyle):
        * css/CSSProperties.json:
        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):
        (WebCore::CSSParserFastPaths::isKeywordPropertyID):
        * editing/cocoa/HTMLConverter.mm:
        (HTMLConverter::computedAttributesForElement):

2021-12-24  Tim Nguyen  <ntim@apple.com>

        Remove non-standard -webkit-background-composite CSS property
        https://bugs.webkit.org/show_bug.cgi?id=234661

        Reviewed by Simon Fraser.

        Allows removing the non-standard -webkit-mask-composite CSS values (which do not match the standard
        mask-composite ones) more easily later on.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::valueForPropertyInStyle):
        * css/CSSProperties.json:
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumePrefixedMaskComposite):
        (WebCore::consumeMaskComposite):
        (WebCore::consumeBackgroundComponent):
        (WebCore::CSSPropertyParser::parseSingleValue):
        (WebCore::consumePrefixedBackgroundComposite): Deleted.
        (WebCore::consumeBackgroundComposite): Deleted.
        * rendering/RenderLayerBacking.cpp:
        (WebCore::supportsDirectlyCompositedBoxDecorations):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::backgroundRepeatY const):
        (WebCore::RenderStyle::backgroundComposite const): Deleted.

2021-12-24  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] MSVC reports "DownloadBundleWin.cpp(87): error C2362: initialization of 'magic' is skipped by 'goto exit'" with /std:c++20
        https://bugs.webkit.org/show_bug.cgi?id=234504
        <rdar://problem/86755997>

        Reviewed by Darin Adler.

        * platform/network/win/DownloadBundleWin.cpp:
        (WebCore::DownloadBundle::appendResumeData): Use fclose directly.
        (WebCore::DownloadBundle::extractResumeData): Ditto.
        (WebCore::DownloadBundle::fileCloser): Deleted.

2021-12-24  Simon Fraser  <simon.fraser@apple.com>

        Apply the scroll delta in the "began" wheel event
        https://bugs.webkit.org/show_bug.cgi?id=234645

        Reviewed by Wenson Hsieh.

        ScrollingEffectsController::handleWheelEvent() previously early returned without applying
        the delta in the "Began" event, which means that scrolling started a frame later than it
        should have. For snappier scrolling in Safari, we should apply this delta.

        * platform/ScrollSnapAnimatorState.cpp:
        (WebCore::ScrollSnapAnimatorState::setupAnimationForState):
        * platform/mac/ScrollingEffectsController.mm:
        (WebCore::ScrollingEffectsController::handleWheelEvent):

2021-12-24  Tim Nguyen  <ntim@apple.com>

        Unreviewed, r287356 followups and rebaselining for glib

        * css/html.css:
        (rt): unprefix usage of -webkit-text-emphasis
        * style/StyleBuilderCustom.h:
        Sort per Darin Adler's comment

2021-12-24  Tim Nguyen  <ntim@apple.com>

        Remove non-standard -webkit-margin-collapse CSS property and longhands
        https://bugs.webkit.org/show_bug.cgi?id=190788

        Reviewed by Simon Fraser.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::valueForPropertyInStyle):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::operator MarginCollapse const): Deleted.
        * css/CSSProperties.json:
        * css/StyleProperties.cpp:
        (WebCore::StyleProperties::getPropertyValue const):
        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):
        (WebCore::CSSParserFastPaths::isKeywordPropertyID):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::parseShorthand):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::isSelfCollapsingBlock const):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::MarginInfo::MarginInfo):
        (WebCore::RenderBlockFlow::layoutBlockChild):
        (WebCore::RenderBlockFlow::collapseMarginsWithChildInfo):
        (WebCore::RenderBlockFlow::clearFloatsIfNeeded):
        (WebCore::RenderBlockFlow::marginBeforeEstimateForChild const):
        (WebCore::RenderBlockFlow::estimateLogicalTopPosition):
        (WebCore::RenderBlockFlow::setCollapsedBottomMargin):
        (WebCore::RenderBlockFlow::handleAfterSideOfBlock):
        (WebCore::RenderBlockFlow::setMustDiscardMarginBefore): Deleted.
        (WebCore::RenderBlockFlow::setMustDiscardMarginAfter): Deleted.
        (WebCore::RenderBlockFlow::mustDiscardMarginBefore const): Deleted.
        (WebCore::RenderBlockFlow::mustDiscardMarginAfter const): Deleted.
        (WebCore::RenderBlockFlow::mustDiscardMarginBeforeForChild const): Deleted.
        (WebCore::RenderBlockFlow::mustDiscardMarginAfterForChild const): Deleted.
        (WebCore::RenderBlockFlow::mustSeparateMarginBeforeForChild const): Deleted.
        (WebCore::RenderBlockFlow::mustSeparateMarginAfterForChild const): Deleted.
        * rendering/RenderBlockFlow.h:
        (WebCore::RenderBlockFlow::RenderBlockFlowRareData::RenderBlockFlowRareData):
        (WebCore::RenderBlockFlow::MarginInfo::setPositiveMargin):
        (WebCore::RenderBlockFlow::MarginInfo::setNegativeMargin):
        (WebCore::RenderBlockFlow::MarginInfo::setPositiveMarginIfLarger):
        (WebCore::RenderBlockFlow::MarginInfo::setNegativeMarginIfLarger):
        (WebCore::RenderBlockFlow::MarginInfo::setMargin):
        (WebCore::RenderBlockFlow::MarginInfo::setCanCollapseMarginAfterWithChildren):
        (WebCore::RenderBlockFlow::MarginInfo::negativeMargin const):
        (WebCore::RenderBlockFlow::initMaxMarginValues):
        (WebCore::RenderBlockFlow::MarginInfo::setDiscardMargin): Deleted.
        (WebCore::RenderBlockFlow::MarginInfo::discardMargin const): Deleted.
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::textOverflow const):
        (WebCore::RenderStyle::setTextOverflow):
        (WebCore::RenderStyle::initialTextOverflow):
        (WebCore::RenderStyle::marginBeforeCollapse const): Deleted.
        (WebCore::RenderStyle::marginAfterCollapse const): Deleted.
        (WebCore::RenderStyle::setMarginBeforeCollapse): Deleted.
        (WebCore::RenderStyle::setMarginAfterCollapse): Deleted.
        (WebCore::RenderStyle::initialMarginBeforeCollapse): Deleted.
        (WebCore::RenderStyle::initialMarginAfterCollapse): Deleted.
        * rendering/style/RenderStyleConstants.cpp:
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):

2021-12-24  Frederic Wang  <fwang@igalia.com>

        Simplify test for startOfLastParagraph in InsertListCommand::doApply
        https://bugs.webkit.org/show_bug.cgi?id=234600

        Reviewed by Darin Adler.

        Current test is !startOfLastParagraph.deepEquivalent().anchorNode()->isConnected(). It could
        be replaced with the less verbose startOfLastParagraph.isOrphan() which is equivalent to
        startOfLastParagraph.deepEquivalent().isOrphan() and so to the condition
        startOfLastParagraph.deepEquivalent().anchorNode() &&
        !startOfLastParagraph.deepEquivalent().anchorNode()->isConnected(). A difference can only
        happen for a page where anchorNode() is a null pointer. In such a test case exists, then it
        is already crashing with a null ptr deref anyway.

        No new tests, behavior essentially unchanged.

        * editing/InsertListCommand.cpp:
        (WebCore::InsertListCommand::doApply): Use startOfLastParagraph.isOrphan().

2021-12-24  Sam Weinig  <weinig@apple.com>

        On systems without CG support for alpha premultiplied gradients, the CGGradientRef path should still be used for the subset of gradients that can transformed
        https://bugs.webkit.org/show_bug.cgi?id=234653

        Reviewed by Simon Fraser.

        Test: fast/gradients/alpha-premultiplied-representable-by-unpremultiplied.html

        Optimize gradient rendering on systems without a version of CoreGraphics that supports
        alpha premultiplied gradients by using the CGGradientRef code path for the subset of
        alpha premultiplied gradients that can be represented as alpha non-premultiplied gradients.

        Two types of optimizations are possible for two classes of this subset:

          1. Any gradient that uses the same alpha value for all color stops can be used as is
             with the alpha non-premultiplied CGGradientRef.
          2. Any gradient that conforms to the rule that "any two consecutive color stops must 
             either have one that is fully transparent or have the same alpha value for both"
             can be transformed into an identical alpha non-premultiplied gradient by transforming
             the fully transparent stops into either one or two stops. A comment in the code
             goes into much more detail about this.

        * platform/graphics/cg/GradientRendererCG.cpp:
        (WebCore::classifyAlphaType):
        (WebCore::analyzeColorStopsForEmulatedAlphaPremuliplicationOppertunity):
        (WebCore::alphaTransformStopsToEmulateAlphaPremuliplication):
        (WebCore::GradientRendererCG::pickStrategy const):

2021-12-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][a11y] Expose live region attributes with ATSPI
        https://bugs.webkit.org/show_bug.cgi?id=234637

        Reviewed by Adrian Perez de Castro.

        * accessibility/atspi/AccessibilityObjectAtspi.cpp:
        (WebCore::AccessibilityObjectAtspi::attributes const):

2021-12-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][a11y] Expose the right roles for math elements with ATSPI
        https://bugs.webkit.org/show_bug.cgi?id=234634

        Reviewed by Adrian Perez de Castro.

        This is missing with ATSPI causing all a11y mathml layout tests to fail.

        * accessibility/atspi/AccessibilityObjectAtspi.cpp:
        (WebCore::atspiRole):
        (WebCore::AccessibilityObjectAtspi::attributes const):
        (WebCore::AccessibilityObjectAtspi::effectiveRole const):
        (WebCore::AccessibilityObjectAtspi::effectiveRoleName const):
        (WebCore::AccessibilityObjectAtspi::effectiveLocalizedRoleName const):

2021-12-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][a11y] Expose list items with pseudo marker as List instead of Group with ATSPI
        https://bugs.webkit.org/show_bug.cgi?id=234633

        Reviewed by Adrian Perez de Castro.

        This happens because pseudo markers don't have the ListMarker role, but StaticText that we ignore.

        Fixes accessibility/list-detection2.html.

        * accessibility/AccessibilityList.cpp:
        (WebCore::AccessibilityList::childHasPseudoVisibleListItemMarkers): Add ATSPI ifdef too.

2021-12-23  Alan Bujtas  <zalan@apple.com>

        REGRESSION(Containment) nullptr deref in RenderBox::styleDidChange
        https://bugs.webkit.org/show_bug.cgi?id=234647
        <rdar://86841302>

        Reviewed by Simon Fraser.

        Do not try to propagate the writing mode to the RenderView unless we are attached to one.

        Test: fast/dynamic/document-elment-renderer-null-crash.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::styleDidChange):

2021-12-23  Tim Nguyen  <ntim@apple.com>

        Update features.json for STP 134-137
        https://bugs.webkit.org/show_bug.cgi?id=234650

        Reviewed by Simon Fraser.

        New contacts for Web Authn, dialog, inert (with their permission).
        New CSS features added.

        * features.json:

2021-12-23  Tim Nguyen  <ntim@apple.com>

        Update display property values in CSSProperties.json
        https://bugs.webkit.org/show_bug.cgi?id=234649

        Reviewed by Simon Fraser.

        Removed some spec links, since they're all in the css-display-3 spec which is already linked for the property.

        flow, flow-root: r276293 implemented those 2 keywords in CSSPropertyParser.cpp (consumeDisplay function).

        compact: removed in r163560

        Also remove duplicate values array for border-collapse.

        * css/CSSProperties.json:

2021-12-23  Matt Woodrow  <mattwoodrow@apple.com>

        Check allowed network hosts list when we schedule the load in the network process
        https://bugs.webkit.org/show_bug.cgi?id=234543
        <rdar://83501315>

        Reviewed by Alex Christensen.

        The check for WKWebViewConfiguration._allowedNetworkHost previously happened before the check to see if
        the given ResourceRequest would directly from an archive.
        This moves to the allowed network host list check to happen when we schedule the network request, and thus
        allows subresources cached within an archive to load, even if their original URL would be blocked.

        New test LoadWebArchive.DisallowedNetworkHosts added.

        * loader/ResourceLoadNotifier.cpp:
        (WebCore::ResourceLoadNotifier::dispatchWillSendRequest):
        * loader/ResourceLoadNotifier.h:
        (WebCore::ResourceLoadNotifier::isInitialRequestIdentifier):

2021-12-23  Brady Eidson  <beidson@apple.com>

        Add WTF::UUID class which is natively a 128-bit integer
        https://bugs.webkit.org/show_bug.cgi?id=234571

        Reviewed by Alex Christensen.

        No new tests (Refactor, covered by existing tests)

        * Modules/notifications/NotificationData.h:
        (WebCore::NotificationData::decode):

2021-12-23  Sam Weinig  <weinig@apple.com>

        Encapsulate gradient color stops into a self contained class
        https://bugs.webkit.org/show_bug.cgi?id=234583

        Reviewed by Simon Fraser.

        Replace most uses of Gradient::ColorStopVector with new GradientColorStops class.

        * Headers.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        Add new file.

        * css/CSSGradientValue.h:
        * css/CSSGradientValue.cpp:
        (WebCore::CSSGradientValue::computeStops):
        Replace some usage of Gradient::ColorStopVector with GradientColorStops. While here,
        optimize color filter transformation to only happen when there is color filter,
        removing extra unnecessary copies of Colors.

        Also utilizes the GradientColorStops::Sorted type to create a GradientColorStops
        object that has the isSorted bit set.
 
        (WebCore::CSSLinearGradientValue::createGradient):
        (WebCore::CSSRadialGradientValue::createGradient):
        (WebCore::CSSConicGradientValue::createGradient):
        The calls to setSortedColorStops is no longer needed, as the GradientColorStops
        now maintains that state.

        * platform/graphics/Color.h:
        (WebCore::add):
        Move definition of add(Hasher&, Color) here, where it makes sense, rather than
        keeping it in Gradient.

        * platform/graphics/FloatPoint.h:
        (WebCore::add):
        Move definition of add(Hasher&, FloatPoint) here, where it makes sense, rather than
        keeping it in Gradient.

        * platform/graphics/Gradient.h:
        * platform/graphics/Gradient.cpp:
        (WebCore::Gradient::create):
        (WebCore::Gradient::Gradient):
        (WebCore::Gradient::addColorStop):
        (WebCore::Gradient::hash const):
        (WebCore::Gradient::setSortedColorStops): Deleted.
        (WebCore::Gradient::sortStops const): Deleted.
        Replace ColorStopVector with GradientColorStops. This allows removing the m_stopsSorted
        bit, as the new class maintains that, as well as removing setSortedColorStops since
        you can achieve this by just creating the Gradient with a GradientColorStops that knows
        it is sorted (using the GradientColorStops::Sorted helper).

        * platform/graphics/GradientColorStop.h:
        (WebCore::add):
        Move definition of add(Hasher&, GradientColorStop) here, where it makes sense, rather than
        keeping it in Gradient.

        * platform/graphics/GradientColorStops.h: Added.
        (WebCore::GradientColorStops::GradientColorStops):
        (WebCore::GradientColorStops::addColorStop):
        (WebCore::GradientColorStops::sort):
        (WebCore::GradientColorStops::sorted const):
        (WebCore::GradientColorStops::size const):
        (WebCore::GradientColorStops::isEmpty const):
        (WebCore::GradientColorStops::begin const):
        (WebCore::GradientColorStops::end const):
        (WebCore::GradientColorStops::mapColors const):
        (WebCore::GradientColorStops::stops const):
        (WebCore::GradientColorStops::validateIsSorted const):
        (WebCore::GradientColorStops::encode const):
        (WebCore::GradientColorStops::decode):
        Encapsulate state and functionality of the gradient color stop list, maintaining
        the sorted state, and providing a pleasent API to work with. In the future, this
        will be a good place to add functions to analyze and transform the list for optimizing
        what can use the gradient fast paths.

        * platform/graphics/cairo/GradientCairo.cpp:
        Update to use the new names.

        * platform/graphics/cg/GradientCG.cpp:
        (WebCore::Gradient::paint):
        Ensure the color stops passed to the gradient renderer are sorted using the sorted()
        helper, which does an inplace sort and returns a reference to itself.

        * platform/graphics/cg/GradientRendererCG.h:
        * platform/graphics/cg/GradientRendererCG.cpp:
        (WebCore::GradientRendererCG::GradientRendererCG):
        (WebCore::GradientRendererCG::pickStrategy const):
        (WebCore::GradientRendererCG::makeGradient const):
        (WebCore::GradientRendererCG::makeShading const):
        Replace uses of GradientColorStopVector with GradientColorStops.

        * rendering/svg/RenderSVGResourceGradient.h:
        * rendering/svg/RenderSVGResourceGradient.cpp:
        (WebCore::RenderSVGResourceGradient::stopsByApplyingColorFilter):
        Add early return if there is no color filter to apply, and utilize the mapColors()
        function to update the colors if there is.

        * rendering/svg/RenderSVGResourceLinearGradient.cpp:
        (WebCore::RenderSVGResourceLinearGradient::buildGradient const):
        * rendering/svg/RenderSVGResourceRadialGradient.cpp:
        (WebCore::RenderSVGResourceRadialGradient::buildGradient const):
        Remove some extraneous type names.

        * svg/GradientAttributes.h:
        (WebCore::GradientAttributes::stops const):
        (WebCore::GradientAttributes::setStops):
        * svg/SVGGradientElement.cpp:
        (WebCore::SVGGradientElement::buildStops):
        * svg/SVGGradientElement.h:
        Replace uses of GradientColorStopVector with GradientColorStops.

2021-12-23  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] MediaPlayerPrivateGStreamer mishandles failure to create WebKitTextCombiner
        https://bugs.webkit.org/show_bug.cgi?id=233230

        Reviewed by Michael Catanzaro.

        Gracefully fail when the subenc plugin is not available. It is optional, we should not
        assert or crash if it's not found. Two warnings are logged already when it's not found.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin):

2021-12-23  Sihui Liu  <sihui_liu@apple.com>

        Ensure file handles used in FileSystemAccess API are closed
        https://bugs.webkit.org/show_bug.cgi?id=234520

        Reviewed by Darin Adler.

        WebCore::FileHandle closes file handle in its destructor. Replace FileSystem::PlatformFileHandle with 
        WebCore::FileHandle in FileSystemSyncAccessHandle and WorkerFileSystemStorageConnection to ensure file handle 
        get closed if worker thread fails to execute the callback of createSyncAccessHandle, and if 
        FileSystemSyncAccessHandle is destroyed.

        * Modules/filesystemaccess/FileSystemFileHandle.cpp:
        (WebCore::FileSystemFileHandle::createSyncAccessHandle):
        * Modules/filesystemaccess/FileSystemStorageConnection.h:
        * Modules/filesystemaccess/FileSystemSyncAccessHandle.cpp:
        (WebCore::FileSystemSyncAccessHandle::create):
        (WebCore::FileSystemSyncAccessHandle::FileSystemSyncAccessHandle):
        (WebCore::FileSystemSyncAccessHandle::truncate):
        (WebCore::FileSystemSyncAccessHandle::getSize):
        (WebCore::FileSystemSyncAccessHandle::flush):
        (WebCore::FileSystemSyncAccessHandle::closeInternal):
        (WebCore::FileSystemSyncAccessHandle::closeFile):
        (WebCore::FileSystemSyncAccessHandle::read):
        (WebCore::FileSystemSyncAccessHandle::write):
        * Modules/filesystemaccess/FileSystemSyncAccessHandle.h:
        * Modules/filesystemaccess/WorkerFileSystemStorageConnection.cpp:
        (WebCore::WorkerFileSystemStorageConnection::didCreateSyncAccessHandle):
        (WebCore::WorkerFileSystemStorageConnection::createSyncAccessHandle):
        * Modules/filesystemaccess/WorkerFileSystemStorageConnection.h:
        * platform/FileHandle.cpp:
        (WebCore::FileHandle::FileHandle):
        (WebCore::FileHandle::operator=):
        (WebCore::FileHandle::open):
        (WebCore::FileHandle::read):
        (WebCore::FileHandle::write):
        (WebCore::FileHandle::close):
        (WebCore::FileHandle::handle const):
        * platform/FileHandle.h:

2021-12-23  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add API testing support for modal container observation
        https://bugs.webkit.org/show_bug.cgi?id=234610

        Reviewed by Megan Gardner.

        Add support for new API tests for modal container observation SPI. See Tools/ChangeLog for more details.

        Tests:  ModalContainerObservation.HideAndAllowModalContainer
                ModalContainerObservation.HideAndDisallowModalContainer
                ModalContainerObservation.HideAndIgnoreModalContainer
                ModalContainerObservation.ShowModalContainer

        * dom/Document.h:
        * page/ModalContainerObserver.cpp:
        (WebCore::ModalContainerObserver::updateModalContainerIfNeeded):
        (WebCore::ModalContainerObserver::shouldHide): Deleted.

        Drive-by adjustment: make `shouldHide()` an inline method, and mark it `const`.

        * page/ModalContainerObserver.h:
        (WebCore::ModalContainerObserver::overrideSearchTermForTesting):

        Add a testing-only method to override the search term used for modal container observation; if set, we ignore
        the search term vended by the chrome client, and instead use this override.

        (WebCore::ModalContainerObserver::shouldHide const):
        * testing/Internals.cpp:
        (WebCore::Internals::overrideModalContainerSearchTermForTesting):
        * testing/Internals.h:

        Add an `internals` hook to override the modal container search term.

        * testing/Internals.idl:

2021-12-22  Simon Fraser  <simon.fraser@apple.com>

        Share macOS code between ScrollAnimator::handleWheelEvent() and ScrollingEffectsController::handleWheelEvent()
        https://bugs.webkit.org/show_bug.cgi?id=231238

        Reviewed by Wenson Hsieh.

        ScrollAnimator::handleWheelEvent() had some macOS-only code (despite having a
        ScrollAnimatorMac subclass) whose purpose was unclear. It turns out the code runs in two
        scenarios: for select lists, which always scroll on the main thread, and in some main thread
        scrolling cases when responding to non-gesture events (i.e. those from old-style clicky
        scroll wheels).

        Clean this by making that code clearly specific to "stepped scrolling", via the
        virtual ScrollableArea::hasSteppedScrolling(). Call it in cross-platform code in
        ScrollAnimator::handleWheelEvent().
        
        The ScrollAnimatorMac::handleWheelEvent() override now simply calls into the base class,
        after doing some macOS-specific stuff for phase handling (which is related to scrollbar flashing).

        rubberBandingEnabledForSystem() is no longer consulted; this never worked for threaded scrolling.
        If we need it, we can bring it back. We no longer need the shouldForwardWheelEventsToParent()
        and its misleading comment.

        Now that stateless wheel events go through ScrollingEffectsController::handleWheelEvent(),
        we have to avoid doing axis snapping for them.
        
        css3/scroll-snap/scroll-snap-wheel-event.html reveals a behavior progression: previously
        stateless, main thread scroll snap scrolls would use the code now in
        handleSteppedScrolling() and a single small delta would pick the snap point in that
        direction. This differed from scrolling thread scrolls, where stateless scrolls animate to
        the nearest snap pointer after a timer fire. Now, this same behavior applies to main thread
        stateless scrolls.

        * platform/PlatformWheelEvent.h:
        (WebCore::PlatformWheelEvent::isGestureEvent const):
        (WebCore::PlatformWheelEvent::isNonGestureEvent const):
        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::handleWheelEvent):
        (WebCore::ScrollAnimator::handleSteppedScrolling):
        * platform/ScrollAnimator.h:
        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::hasSteppedScrolling const):
        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::handleWheelEvent):
        (WebCore::rubberBandingEnabledForSystem): Deleted.
        (WebCore::ScrollAnimatorMac::shouldForwardWheelEventsToParent const): Deleted.
        * platform/mac/ScrollingEffectsController.mm:
        (WebCore::ScrollingEffectsController::handleWheelEvent):
        * rendering/RenderListBox.h:

2021-12-23  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Do not try to bidi reorder empty content
        https://bugs.webkit.org/show_bug.cgi?id=234623

        Reviewed by Antti Koivisto.

        * layout/formattingContexts/inline/InlineItemsBuilder.cpp:
        (WebCore::Layout::buildBidiParagraph):
        (WebCore::Layout::InlineItemsBuilder::breakAndComputeBidiLevels):
        * layout/formattingContexts/inline/display/InlineDisplayContentBuilder.cpp:
        (WebCore::Layout::InlineDisplayContentBuilder::processNonBidiContent):

2021-12-23  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Empty bidi inline boxes should not make the line taller
        https://bugs.webkit.org/show_bug.cgi?id=234621

        Reviewed by Antti Koivisto.

        We perform the same check for non-bidi inline boxes (also see FIXME).

        * layout/formattingContexts/inline/display/InlineDisplayContentBuilder.cpp:
        (WebCore::Layout::InlineDisplayContentBuilder::processBidiContent):

2021-12-23  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add support for RTL scrollable overflow
        https://bugs.webkit.org/show_bug.cgi?id=234617

        Reviewed by Antti Koivisto.

        * layout/integration/LayoutIntegrationInlineContentBuilder.cpp:
        (WebCore::LayoutIntegration::InlineContentBuilder::createDisplayLines const):
        * platform/graphics/FloatRect.h:
        (WebCore::FloatRect::shiftMaxXEdgeBy):

2021-12-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][a11y] Test accessibility/svg-remote-element.html crashes with ATSPI
        https://bugs.webkit.org/show_bug.cgi?id=234563

        Reviewed by Adrian Perez de Castro.

        This is because the remote svg element wrappers can't be created because the svg image page hasn't the root
        object set.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::remoteSVGRootElement const): Set the root image wrapper element on the svg
        image page.

2021-12-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][a11y] WTR: add support for notifications when building with ATSPI
        https://bugs.webkit.org/show_bug.cgi?id=234550

        Reviewed by Adrian Perez de Castro.

        Add private API for WTR notifications.

        * accessibility/atspi/AccessibilityAtspi.cpp:
        (WebCore::AccessibilityAtspi::childrenChanged):
        (WebCore::AccessibilityAtspi::stateChanged):
        (WebCore::AccessibilityAtspi::textChanged):
        (WebCore::AccessibilityAtspi::textCaretMoved):
        (WebCore::AccessibilityAtspi::valueChanged):
        (WebCore::AccessibilityAtspi::selectionChanged):
        (WebCore::AccessibilityAtspi::loadEvent):
        (WebCore::AccessibilityAtspi::addNotificationObserver):
        (WebCore::AccessibilityAtspi::removeNotificationObserver):
        (WebCore::AccessibilityAtspi::notifyStateChanged const):
        (WebCore::AccessibilityAtspi::notifySelectionChanged const):
        (WebCore::AccessibilityAtspi::notifyTextChanged const):
        (WebCore::AccessibilityAtspi::notifyTextCaretMoved const):
        (WebCore::AccessibilityAtspi::notifyChildrenChanged const):
        (WebCore::AccessibilityAtspi::notifyValueChanged const):
        (WebCore::AccessibilityAtspi::notifyLoadEvent const):
        * accessibility/atspi/AccessibilityAtspi.h:

2021-12-23  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] test fast/mediastream/get-display-media-settings.html fails
        https://bugs.webkit.org/show_bug.cgi?id=233879

        Reviewed by Youenn Fablet.

        Pass down hashSalt to GStreamer display mock capture source and
        advertise its deviceId as supported constraint.

        * platform/mediastream/gstreamer/MockRealtimeVideoSourceGStreamer.cpp:
        (WebCore::MockDisplayCaptureSourceGStreamer::create):
        (WebCore::MockDisplayCaptureSourceGStreamer::MockDisplayCaptureSourceGStreamer):
        (WebCore::MockDisplayCaptureSourceGStreamer::settings):
        * platform/mediastream/gstreamer/MockRealtimeVideoSourceGStreamer.h:
        * platform/mock/MockRealtimeMediaSourceCenter.cpp:

2021-12-22  Rob Buis  <rbuis@igalia.com>

        RenderLayer WIP
        https://bugs.webkit.org/show_bug.cgi?id=234154

        Reviewed by Simon Fraser.

        The  members to store absolute (static inline/block) and
        relative offset are used orthogonally, so we just merge
        them.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPosition):
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::offsetForInFlowPosition const):
        (WebCore::RenderLayer::staticInlinePosition const):
        (WebCore::RenderLayer::staticBlockPosition const):
        (WebCore::RenderLayer::setStaticInlinePosition):
        (WebCore::RenderLayer::setStaticBlockPosition):

2021-12-22  Michael Saboff  <msaboff@apple.com>

        Fix WebKit Build issues when using system content path
        https://bugs.webkit.org/show_bug.cgi?id=234624

        Reviewed by Filip Pizlo.

        Covered by existing tests.

        Added SYSTEM_CONTENT_PATH processing to WebCore's normal location.

        * Configurations/WebCore.xcconfig:

2021-12-22  Brent Fulgham  <bfulgham@apple.com>

        Hardening: decodeArrayBuffer is missing WARN_UNUSED_RETURN 
        https://bugs.webkit.org/show_bug.cgi?id=234619
        <rdar://problem/62755159>

        Reviewed by Alex Christensen.

        * Modules/webauthn/AuthenticatorResponseData.h:
        (WebCore::decodeArrayBuffer): Add WARN_UNUSED_RETURN to declaration.

2021-12-22  Simon Fraser  <simon.fraser@apple.com>

        Convert css3/scroll-snap/scroll-snap-wheel-event.html to use monitorWheelEvents()
        https://bugs.webkit.org/show_bug.cgi?id=234526

        Reviewed by Wenson Hsieh.

        This test sends a stateless wheel event and waits for the timer and subsequent scroll snap
        animation, which is already tracked by WheelEventTestMonitor, but the code had a bug where
        the monitor wasn't informed if no animation was required.

        * platform/mac/ScrollingEffectsController.mm:
        (WebCore::ScrollingEffectsController::statelessSnapTransitionTimerFired):

2021-12-22  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Close/open nested bidi contexts for new lines after force line breaks
        https://bugs.webkit.org/show_bug.cgi?id=234611

        Reviewed by Antti Koivisto.

        Bidi handling requires us to close all the nested bidi contexts at the end of the line (triggered by forced line breaks)
        and re-open it for the content on the next line. 

        * layout/formattingContexts/inline/InlineItemsBuilder.cpp:
        (WebCore::Layout::handleEnterExitBidiContext):
        (WebCore::Layout::buildBidiParagraph):

2021-12-22  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Soft linebreaks have incorrect bidi paragraph positions
        https://bugs.webkit.org/show_bug.cgi?id=234608

        Reviewed by Antti Koivisto.

        Soft linebreaks are part of the InlineTextBox content and they are appened to the bidi paragraph
        together with the rest of the text content (as we append the InlineTextBox content in one block).
        We need to handle their positions the same way we do with regular text content i.e. use the inline item's offset
        and not the paragraphContentBuilder's length.

        * layout/formattingContexts/inline/InlineItemsBuilder.cpp:
        (WebCore::Layout::buildBidiParagraph):

2021-12-22  Alex Christensen  <achristensen@webkit.org>

        Fix compiling with pickier compiler
        https://bugs.webkit.org/show_bug.cgi?id=234593

        Reviewed by Brady Eidson.

        * editing/cocoa/HTMLConverter.mm:
        (HTMLConverter::_addMarkersToList):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::tracksChanged):
        * platform/graphics/cocoa/GraphicsContextGLCocoa.mm:
        (WebCore::GraphicsContextGLANGLE::checkGPUStatus):
        * platform/graphics/cocoa/SourceBufferParserWebM.cpp:
        * platform/graphics/coreimage/FEColorMatrixCoreImageApplier.mm:
        (WebCore::FEColorMatrixCoreImageApplier::apply const):

2021-12-22  Antti Koivisto  <antti@apple.com>

        [:has() pseudo-class] :has() selector invalidation issue with toggling :checked
        https://bugs.webkit.org/show_bug.cgi?id=234561

        Reviewed by Simon Fraser.

        Test: imported/w3c/web-platform-tests/css/selectors/invalidation/has-pseudo-class.html

        Pseudo-classes need to use Style::PseudoClassChangeInvalidation to support invalidation as :has() argument.
        This patch adds it for :checked.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::parseAttribute):
        (WebCore::HTMLInputElement::setChecked):
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::HTMLOptionElement):
        (WebCore::HTMLOptionElement::matchesDefaultPseudoClass const):

        Use a member for :default instead of attribute test so we can do invalidation over changing it in parseAttribute.

        (WebCore::HTMLOptionElement::parseAttribute):
        (WebCore::HTMLOptionElement::setSelectedState):
        * html/HTMLOptionElement.h:

2021-12-22  Antti Koivisto  <antti@apple.com>

        [:has() pseudo-class] :has() selector does not render on first pass?
        https://bugs.webkit.org/show_bug.cgi?id=234531

        Reviewed by Simon Fraser.

        With :has() identical sibling elements can have different style which breaks the current
        assumptions of the style sharing optimization.

        Test: fast/selectors/has-style-sharing.html

        * style/StyleSharingResolver.cpp:
        (WebCore::Style::SharingResolver::resolve):

        Disable style sharing in presence of :has() rules for now.

        For a less heavy-handed approach we need to start testing for :has() rules similar to what is already done
        for sibling and attribute rules.

2021-12-22  Michael Saboff  <msaboff@apple.com>

        Fix WebCore install headers with alternate build
        https://bugs.webkit.org/show_bug.cgi?id=234592

        Reviewed by Filip Pizlo.

        Covered by existing tests.

        Fixed OUTPUT_ALTERNATE_ROOT_PATH for macOS to return an empty value since we don't need a symlink
        as the WebCore framework is in a subdirectory of WebKit.framework.
        Fixed typos with NORMAL_PRODUCTION_FRAMEWORKS_DIR_USE_SYSTEM_CONTENT_PATH_YES rules,
        eliminating the ')'s at the end of the lines.

        * Configurations/WebCore.xcconfig:

2021-12-22  Tim Nguyen  <ntim@apple.com>

        Internally unprefix -webkit-text-emphasis properties
        https://bugs.webkit.org/show_bug.cgi?id=234602

        Reviewed by Antti Koivisto.

        It's already exposed unprefixed externally, let's reflect this internally as well.

        Makes it easier to remove prefixed versions later on if needed, and it's also less confusing when
        going through the CSSProperties.json file.

        * animation/CSSPropertyAnimation.cpp:
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::valueForPropertyInStyle):
        * css/CSSProperties.json:
        * css/CSSValueKeywords.in:
        * css/StyleProperties.cpp:
        (WebCore::StyleProperties::getPropertyValue const):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::parseSingleValue):
        (WebCore::CSSPropertyParser::parseShorthand):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::selectionEmphasisMarkColor const):
        * rendering/TextPaintStyle.cpp:
        (WebCore::computeTextPaintStyle):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::unresolvedColorForProperty const):
        * style/PropertyAllowlist.cpp:
        (WebCore::Style::isValidMarkerStyleProperty):
        * style/StyleBuilder.cpp:
        (WebCore::Style::isValidVisitedLinkProperty):
        * style/StyleBuilderCustom.h:
        (WebCore::Style::BuilderCustom::applyInitialTextEmphasisStyle):
        (WebCore::Style::BuilderCustom::applyInheritTextEmphasisStyle):
        (WebCore::Style::BuilderCustom::applyValueTextEmphasisStyle):
        (WebCore::Style::BuilderCustom::applyInitialWebkitTextEmphasisStyle): Deleted.
        (WebCore::Style::BuilderCustom::applyInheritWebkitTextEmphasisStyle): Deleted.
        (WebCore::Style::BuilderCustom::applyValueWebkitTextEmphasisStyle): Deleted.

2021-12-21  Sergio Villar Senin  <svillar@igalia.com>

        [REGRESSION][[css-flexbox] child elements are shrunk to fit into container after r286206
        https://bugs.webkit.org/show_bug.cgi?id=234361

        Reviewed by Manuel Rego Casasnovas.

        The patch from r286206 fixed the sizing of flex items with intrinsic aspect ratios but no intrinsic sizes
        as happens with many SVG images. That fix was however way too general as it was targeted at any replaced
        element. The problem of generalizing it is that replaced elements as iframes do not have intrinsic aspect
        ratios although they have a default size (300x150px). Constraining the new code to SVG images fixes the
        regression.

        Replacing is<RenderReplaced>(child) with is<RenderSVGRoot>(child) wouldn't be enough as we need to consider
        the newly added LegacySVGRoot that was added as part of the SVG layout refactoring.

        Test: imported/w3c/web-platform-tests/css/css-flexbox/flexbox-iframe-intrinsic-size-001.html

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::isSVGRootWithIntrinsicAspectRatio):
        (WebCore::childHasAspectRatio):
        (WebCore::RenderFlexibleBox::computeMainSizeFromAspectRatioUsing const):
        (WebCore::RenderFlexibleBox::childHasComputableAspectRatio const):
        (WebCore::isRenderReplacedWithIntrinsicAspectRatio): Deleted.

2021-12-22  Frédéric Wang  <fwang@igalia.com>

        null ptr deref in DocumentTimeline::animate
        https://bugs.webkit.org/show_bug.cgi?id=234260

        Reviewed by Darin Adler.

        Test: webanimations/document-timeline-animate-crash.html

        * animation/DocumentTimeline.cpp:
        (WebCore::DocumentTimeline::animate): If the WeakPtr m_document was destroyed, throw a
        TypeError exception so that the call to WebAnimation::create won't cause a null ptr deref.

2021-12-22  Youenn Fablet  <youenn@apple.com>

        Use requester when calling updateRequestAndAddExtraFields
        https://bugs.webkit.org/show_bug.cgi?id=234507
        <rdar://problem/85049490>

        Reviewed by Brent Fulgham.

        In case of navigation loads, the requester is the fetch request client.
        As such, it should be the one used to determine whether the request is cross-origin is not.
        Pass the requester to updateRequestAndAddExtraFields to do the correct computation.
        Validate that some request fields are now correctly observed in service workers.

        Test: http/wpt/service-workers/navigation-iframe-site.https.html

        * loader/FrameLoader.cpp:
        * loader/FrameLoader.h:
        * testing/ServiceWorkerInternals.cpp:
        * testing/ServiceWorkerInternals.h:
        * testing/ServiceWorkerInternals.idl:

2021-12-22  Philippe Normand  <pnormand@igalia.com>

        REGRESSION(r287021): [EME][Thunder] Build broken
        https://bugs.webkit.org/show_bug.cgi?id=234434

        Reviewed by Xabier Rodriguez-Calvar.

        Fix build, simplify a bit the parsing of message payloads.

        * platform/graphics/gstreamer/eme/CDMThunder.cpp:
        (WebCore::CDMInstanceThunder::setServerCertificate):
        (WebCore::ParsedResponseMessage::ParsedResponseMessage):
        (WebCore::CDMInstanceSessionThunder::errorCallback):
        (WebCore::CDMInstanceSessionThunder::requestLicense):
        (WebCore::CDMInstanceSessionThunder::updateLicense):
        (WebCore::CDMInstanceSessionThunder::loadSession):

2021-12-22  Philippe Normand  <pnormand@igalia.com>

        REGRESSION(r284368) [GStreamer] test imported/w3c/web-platform-tests/media-source/mediasource-video-is-visible.html fails on GTK and WPE
        https://bugs.webkit.org/show_bug.cgi?id=234352

        Reviewed by Xabier Rodriguez-Calvar.

        r284368 introduced a new behavior in the GL sink where any downstream not being a tag event
        was triggering a flush in the media player, which was not originally intended.

        * platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp:
        (webKitGLVideoSinkSetMediaPlayerPrivate):

2021-12-21  Brent Fulgham  <bfulgham@apple.com>

        Propagate app-initiated state to new ResourceRequests
        https://bugs.webkit.org/show_bug.cgi?id=234015
        <rdar://problem/86128638>

        Reviewed by Kate Cheney.

        While reviewing logging we have found that some ResourceRequest objects
        are missing the correct state for app-initiated loads. Typically, these
        are cases where a new ResourceRequest is created from a URL string, losing
        the context that came with the original load (or the context of the page
        triggering the load).

        This patch corrects a number of such cases.

        Tests: http/tests/app-privacy-report/app-attribution-beacon-isappinitiated.html
               http/tests/app-privacy-report/app-attribution-beacon-isnotappinitiated.html
               http/tests/app-privacy-report/new-window-isappinitiated.html
               http/tests/app-privacy-report/new-window-isnotappinitiated.html

        * Modules/beacon/NavigatorBeacon.cpp:
        (WebCore::NavigatorBeacon::sendBeacon):
        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::connect):
        * Modules/websockets/WebSocketHandshake.cpp:
        (WebCore::WebSocketHandshake::WebSocketHandshake):
        (WebCore::WebSocketHandshake::clientHandshakeRequest const):
        * Modules/websockets/WebSocketHandshake.h:
        * loader/CrossOriginAccessControl.cpp:
        (WebCore::createPotentialAccessControlRequest):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::willLoadMediaElementURL):
        (WebCore::FrameLoader::commitProvisionalLoad):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::createWindow):
 
2021-12-21  Brady Eidson  <beidson@apple.com>

        Make Notification identifiers be a UUID string instead of a uint64_t
        https://bugs.webkit.org/show_bug.cgi?id=234534

        Reviewed by Alex Christensen.

        No new tests (Refactor, covered by existing tests)

        Before this patch, Notifications were tagged with an in-WebContent-process-unique identifier
        and also tagged with a UIProcess-unique identifier.
        
        There were maps between these two identifiers in WebKit, and both of them were exposed via API/SPI
        (e.g. through the injected bundle), necessitating maps between them in WKTR as well.
        
        This simplifies things by making a UUID identifier in the WebContent process that can be treated
        as the One True Identifier within WebKit.
        
        There's existing SPI clients that rely on the UIProcess-unique uin64_t identifier, so we sadly
        couldn't get rid of that entirely. But this patch still puts us in a much better place.

        * Modules/notifications/Notification.cpp:
        (WebCore::Notification::show):
        (WebCore::Notification::close):
        (WebCore::Notification::stop):
        (WebCore::Notification::data const):
        (WebCore::Notification::dataWithoutNotificationID const): Deleted.
        * Modules/notifications/Notification.h:

        * Modules/notifications/NotificationClient.h:
        (WebCore::NotificationClient::clearNotifications): Deleted.
        * Modules/notifications/NotificationData.h:
        (WebCore::NotificationData::decode):

2021-12-21  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Compute visual geometry for InlineDisplay::Line
        https://bugs.webkit.org/show_bug.cgi?id=234545

        Reviewed by Antti Koivisto.

        1. Compute visual geometry for InlineDisplay::Line
        2. Use this visual geometry when constructing display boxes

        * layout/formattingContexts/inline/display/InlineDisplayContentBuilder.cpp:
        (WebCore::Layout::InlineDisplayContentBuilder::processBidiContent):
        * layout/formattingContexts/inline/display/InlineDisplayLineBuilder.cpp:
        (WebCore::Layout::InlineDisplayLineBuilder::build const):

2021-12-21  Darin Adler  <darin@apple.com>

        ScriptState.h/cpp is a remnant of JavaScript engine abstraction that can be removed
        https://bugs.webkit.org/show_bug.cgi?id=234548

        Reviewed by Yusuke Suzuki.

        ScriptState.h/cpp is file left over from when we had a layer to abstract
        JavaScript binding and usage in WebCore so it could work with both JavaScriptCore
        and Google's V8 engine. We haven't needed that for years, and stripping away some
        of the layers might help us make code more readable and perhaps even notice ways
        to make it more efficient. For now, this patch removes the functions from
        ScriptState.h/cpp and moves them to more suitable places, simplifying in the process.

        Also begin to just call global objects "global object", and not "script state".

        * Headers.cmake: Removed ScriptState.h.

        * Modules/indexeddb/IDBObjectStore.cpp: Removed include of ScriptState.h.
        * Modules/indexeddb/IDBTransaction.cpp: Ditto.

        * Sources.txt: Removed ScriptState.cpp.
        * WebCore.xcodeproj/project.pbxproj: Removed ScriptState.h and .cpp.
        Also allowed the script to sort the file.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::mainWorldGlobalObject): Renamed the mainWorldExecState function and
        moved it here from ScriptState.cpp.
        * bindings/js/JSDOMWindowCustom.h: Tweaked formatting of the header. Added the
        mainWorldGlobalObject function.

        * bindings/js/JSExecState.cpp: Removed include of ScriptState.h.
        (WebCore::JSExecState::didLeaveScriptContext): Call scriptExecutionContext.
        (WebCore::executionContext): Renamed the scriptExecutionContextFromExecState
        function and moved it here from ScriptState.cpp.
        * bindings/js/JSExecState.h: Added the executionContext function.

        * bindings/js/JSNodeCustom.cpp: Removed include of ScriptState.h, added include
        of JSDOMWindowCustom.h.
        (WebCore::willCreatePossiblyOrphanedTreeByRemovalSlowCase): Call mainWorldGlobalObject.

        * bindings/js/JSNodeCustom.h: Changed willCreatePossiblyOrphanedTreeByRemoval
        functions to take a Node& instead of a never-null Node*.

        * bindings/js/JSWindowProxy.h: Tweaked formatting a bit.

        * bindings/js/ScriptState.cpp: Removed.
        * bindings/js/ScriptState.h: Removed.

        * bindings/js/SerializedScriptValue.cpp: Removed include of ScriptState.h.
        (WebCore::wrapCryptoKey): Update for name change of executionContext function.
        (WebCore::unwrapCryptoKey): Ditto.
        (WebCore::CloneDeserializer::readFile): Ditto.
        (WebCore::CloneDeserializer::readOffscreenCanvas): Ditto.
        (WebCore::CloneDeserializer::readRTCDataChannel): Ditto.
        (WebCore::CloneDeserializer::readImageBitmap): Ditto.
        (WebCore::CloneDeserializer::readTerminal): Ditto.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::removeAllChildrenWithScriptAssertion):
        Pass reference to willCreatePossiblyOrphanedTreeByRemoval.
        (WebCore::ContainerNode::removeNodeWithScriptAssertion): Ditto.

        * dom/Document.cpp: Removed include of ScriptState.h, added include
        of JSDOMWindowCustom.h.
        (WebCore::Document::didLogMessage): Use mainWorldGlobalObject.

        * dom/ScriptExecutionContext.cpp: Removed include of ScriptState.h.
        (WebCore::ScriptExecutionContext::globalObject): Use the
        ScriptController directly instead of through helper functions.

        * inspector/InspectorFrontendAPIDispatcher.cpp: Removed include of ScriptState.h.
        * inspector/InspectorFrontendClientLocal.cpp: Ditto.

        * inspector/InspectorFrontendHost.cpp: Removed include of ScriptState.h.
        (WebCore::InspectorFrontendHost::addSelfToGlobalObjectInWorld):
        Use the ScriptController directly instead of through a helper function.
        (WebCore::InspectorFrontendHost::showContextMenu): Ditto.

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::frameWindowDiscardedImpl): Do
        the null check here instead of in frameWindowDiscarded.

        * inspector/WebInjectedScriptManager.cpp: Removed include of ScriptState.h.
        (WebCore::WebInjectedScriptManager::discardInjectedScriptsFor):
        Reworked logic to use executionContext instead of domWindowFromExecState.

        * inspector/agents/InspectorCanvasAgent.cpp: Removed include of ScriptState.h.

        * inspector/agents/InspectorDOMAgent.cpp: Removed include of ScriptState.h.
        (WebCore::InspectorDOMAgent::focusNode): Use std::exchange here in the
        idiomatic "take and null a value" case here. Use mainWorldGlobalObject.
        (WebCore::InspectorDOMAgent::buildObjectForEventListener): Use
        ScriptController directly instead of through a helper function.
        (WebCore::InspectorDOMAgent::resolveNode): Use mainWorldGlobalObject.

        * inspector/agents/InspectorIndexedDBAgent.cpp: Removed include of
        ScriptState.h and added include of JSDOMWindowCustom.h.
        (WebCore::InspectorIndexedDBAgent::requestData): Use mainWorldGlobalObject.

        * inspector/agents/InspectorNetworkAgent.cpp: Removed include of
        ScriptState.h and added include of JSDOMWindowCustom.h.
        (WebCore::InspectorNetworkAgent::resolveWebSocket): Use mainWorldGlobalObject.

        * inspector/agents/InspectorTimelineAgent.cpp: Removed include of ScriptState.h.
        (WebCore::frame): Added. Helper function to get from a global object to a frame.
        Calls executionContext and gets to the frame from there.
        (WebCore::InspectorTimelineAgent::startFromConsole): Use frame.
        (WebCore::InspectorTimelineAgent::breakpointActionProbe): Ditto.

        * inspector/agents/WebConsoleAgent.cpp: Removed include of ScriptState.h.
        (WebCore::WebConsoleAgent::frameWindowDiscarded): Take a reference instead of
        a pointer that must not be null. Use executionContext instead of
        domWindowFromExecState.

        * inspector/agents/WebConsoleAgent.h: Removed unneeded includes. Removed
        unneeded WTF_MAKE_NONCOPYABLE (base class is already not copyable) and
        WTF_MAKE_FAST_ALLOCATED (class is an abstract base class and never allocated).
        Made constructor protected. Changed the DOMWindow argument to
        frameWindowDiscarded to a reference instead of a pointer that must not be null.

        * inspector/agents/page/PageAuditAgent.cpp: Removed include of
        ScriptState.h and added include of JSDOMWindowCustom.h.
        (WebCore::PageAuditAgent::injectedScriptForEval): Use mainWorldGlobalObject.

        * inspector/agents/page/PageDebuggerAgent.cpp: Removed include of
        ScriptState.h and added include of JSDOMWindowCustom.h.
        (WebCore::PageDebuggerAgent::injectedScriptForEval): Use mainWorldGlobalObject.

        * inspector/agents/page/PageNetworkAgent.cpp: Removed include of ScriptState.h.

        * inspector/agents/page/PageRuntimeAgent.cpp: Removed include of
        ScriptState.h and added include of JSDOMWindowCustom.h.
        (WebCore::PageRuntimeAgent::frameNavigated): Use mainWorldGlobalObject.
        (WebCore::PageRuntimeAgent::injectedScriptForEval): Ditto.
        (WebCore::PageRuntimeAgent::reportExecutionContextCreation): Ditto.
        Also use Page::forEachFrame instead of a hand-written loop.

        * inspector/agents/worker/WorkerAuditAgent.cpp: Removed include of ScriptState.h.
        (WebCore::WorkerAuditAgent::injectedScriptForEval): Use ScriptController directly
        instead of through a helper function.

        * inspector/agents/worker/WorkerDebuggerAgent.cpp: Removed include of ScriptState.h.
        (WebCore::WorkerDebuggerAgent::injectedScriptForEval): Use ScriptController directly
        instead of through a helper function.

        * inspector/agents/worker/WorkerRuntimeAgent.cpp: Removed include of ScriptState.h.
        (WebCore::WorkerRuntimeAgent::injectedScriptForEval): Use ScriptController directly
        instead of through a helper function.

2021-12-21  Michael Saboff  <msaboff@apple.com>

        Fix symlinks for alternate root framework locations
        https://bugs.webkit.org/show_bug.cgi?id=234567

        Reviewed by Filip Pizlo.

        Covered by existing tests.

        Moved OUTPUT_ALTERNATE_ROOT_PATH in create symlink script from outputFileListPaths to outputPaths.

        * WebCore.xcodeproj/project.pbxproj:

2021-12-21  Antti Koivisto  <antti@apple.com>

        REGRESSION(r286169): 0.3% Speedometer regression
        https://bugs.webkit.org/show_bug.cgi?id=234549

        Reviewed by Alan Bujtas.

        There is some additional work in ChildChangeInvalidation even when :has is not used.
        Speedemater2 Vanilla-* subtests are very heavy on DOM mutations.

        * style/ChildChangeInvalidation.cpp:
        (WebCore::Style::ChildChangeInvalidation::invalidateForHasBeforeMutation):
        (WebCore::Style::ChildChangeInvalidation::invalidateForHasAfterMutation):
        (WebCore::Style::ChildChangeInvalidation::traverseRemovedElements):
        (WebCore::Style::ChildChangeInvalidation::traverseAddedElements):
        (WebCore::Style::ChildChangeInvalidation::ChildChangeInvalidation): Deleted.
        (WebCore::Style::ChildChangeInvalidation::~ChildChangeInvalidation): Deleted.
        (WebCore::Style::needsTraversal): Deleted.
        * style/ChildChangeInvalidation.h:
        (WebCore::Style::ChildChangeInvalidation::ChildChangeInvalidation):
        (WebCore::Style::ChildChangeInvalidation::~ChildChangeInvalidation):

        Inline the constructor and destructor.
        Compute the :has invalidation status only once.

        * style/RuleFeature.h:
        (WebCore::Style::RuleFeatureSet::usesHasPseudoClass const):
        * style/StyleScope.cpp:
        (WebCore::Style::Scope::resolver):
        (WebCore::Style::Scope::updateActiveStyleSheets):
        * style/StyleScope.h:
        (WebCore::Style::Scope::usesStyleBasedEditability const):
        (WebCore::Style::Scope::usesHasPseudoClass const):

        Add a Scope bit for this for faster testing.

        (WebCore::Style::Scope::usesStyleBasedEditability): Deleted.

2021-12-21  Sam Weinig  <weinig@apple.com>

        Gradient encode/decode does not validate that the serialized stops were sorted
        https://bugs.webkit.org/show_bug.cgi?id=234558

        Reviewed by Simon Fraser.

        Stop encoding and decoding the stopsSorted bit on Gradient for serialization as
        we still need to validate the stops are sorted on deserialization.

        While here, optimize things a bit by allowing one to pass all the necessary
        parameters to the Gradient create function, which allows us to avoid unnecessary
        extra invalidation. Now that the GradientSpreadMethod can be set on construction
        there is no need for its setter.

        * platform/graphics/Gradient.cpp:
        (WebCore::Gradient::create):
        (WebCore::Gradient::Gradient):
        (WebCore::Gradient::sortStops const):
        (WebCore::Gradient::setSpreadMethod): Deleted.
        * platform/graphics/Gradient.h:
        (WebCore::Gradient::create):
        (WebCore::Gradient::stops const):
        (WebCore::Gradient::encode const):
        (WebCore::Gradient::decode):
        * rendering/svg/RenderSVGResourceGradient.cpp:
        (WebCore::RenderSVGResourceGradient::stopsByApplyingColorFilter):
        (WebCore::RenderSVGResourceGradient::addStops): Deleted.
        * rendering/svg/RenderSVGResourceGradient.h:
        * rendering/svg/RenderSVGResourceLinearGradient.cpp:
        (WebCore::RenderSVGResourceLinearGradient::buildGradient const):
        * rendering/svg/RenderSVGResourceRadialGradient.cpp:
        (WebCore::RenderSVGResourceRadialGradient::buildGradient const):

2021-12-21  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add support for a UI delegate method to decide how to handle detected modal containers
        https://bugs.webkit.org/show_bug.cgi?id=234440
        rdar://77073735

        Reviewed by Darin Adler.

        Move ModalContainerControlType.h to ModalContainerTypes.h, and add a new enum flag to represent return values in
        the new UI delegate decision handler.

        * Headers.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/DocumentLoader.h:

        Additionally remove the unused Allow and Disallow values of ModalContainerObservationPolicy, now that we will
        always (effectively) "prompt" when detecting a modal container by calling into the client layer with the new
        delegate method.

        * loader/EmptyClients.cpp:
        (WebCore::EmptyChromeClient::decidePolicyForModalContainer):
        * loader/EmptyClients.h:
        * page/ChromeClient.h:

        Add the new async chrome client hook, `decidePolicyForModalContainer()`.

        * page/ModalContainerObserver.cpp:
        (WebCore::ModalContainerObserver::collectClickableElementsTimerFired):

        Call into the chrome client to decide how to handle the observed modal container.

        (WebCore::ModalContainerObserver::revealModalContainer:

        Add a helper method to reset the current `m_container` and invalidate its style (such that it will be displayed
        after the next style update).

        * page/ModalContainerTypes.h: Renamed from Source/WebCore/page/ModalContainerControlType.h.

        Also, tweak the `ModalContainerControlType` values so that they can be used as option flags when informing the
        WebKit client about which control types are present in the modal container.

2021-12-21  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Move enclosing line geometry computation to a dedicated function
        https://bugs.webkit.org/show_bug.cgi?id=234537

        Reviewed by Antti Koivisto.

        * layout/formattingContexts/inline/display/InlineDisplayContentBuilder.cpp:
        (WebCore::Layout::InlineDisplayContentBuilder::processBidiContent):
        * layout/formattingContexts/inline/display/InlineDisplayLineBuilder.cpp:
        (WebCore::Layout::InlineDisplayLineBuilder::collectEnclosingLineGeometry const):
        (WebCore::Layout::InlineDisplayLineBuilder::build const):
        (WebCore::Layout::InlineDisplayLineBuilder::build): Deleted.
        * layout/formattingContexts/inline/display/InlineDisplayLineBuilder.h:

2021-12-21  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Start using Display::Line geometry in InlineDisplayContentBuilder
        https://bugs.webkit.org/show_bug.cgi?id=234532

        Reviewed by Antti Koivisto.

        This is in preparation for using Display::Line geometry for things like contentStartInVisualOrder in InlineDisplayContentBuilder.

        * layout/formattingContexts/inline/display/InlineDisplayContentBuilder.cpp:
        (WebCore::Layout::InlineDisplayContentBuilder::build):
        (WebCore::Layout::InlineDisplayContentBuilder::processNonBidiContent):
        (WebCore::Layout::InlineDisplayContentBuilder::processBidiContent):
        * layout/formattingContexts/inline/display/InlineDisplayContentBuilder.h:

2021-12-21  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Display content builder should take Display::Line
        https://bugs.webkit.org/show_bug.cgi?id=234527

        Reviewed by Antti Koivisto.

        This is preparation for using Display::Line visual geometries when constructing Display::Boxes in InlineDisplayContentBuilder.

        * layout/formattingContexts/inline/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::computeGeometryForLineContent):
        * layout/formattingContexts/inline/display/InlineDisplayContentBuilder.cpp:
        (WebCore::Layout::InlineDisplayContentBuilder::build):
        (WebCore::Layout::InlineDisplayContentBuilder::processNonBidiContent):
        (WebCore::Layout::InlineDisplayContentBuilder::adjustVisualGeometryForDisplayBox):
        (WebCore::Layout::InlineDisplayContentBuilder::processBidiContent):
        (WebCore::Layout::InlineDisplayContentBuilder::processOverflownRunsForEllipsis):
        * layout/formattingContexts/inline/display/InlineDisplayContentBuilder.h:
        * layout/formattingContexts/inline/display/InlineDisplayLineBuilder.cpp:
        (WebCore::Layout::InlineDisplayLineBuilder::build):
        * layout/integration/LayoutIntegrationCoverage.cpp:
        (WebCore::LayoutIntegration::canUseForStyle):

2021-12-21  Sam Weinig  <weinig@apple.com>

        Add support for premultiplied alpha interpolated gradients and defaulted off option to use them for CSS Gradients
        https://bugs.webkit.org/show_bug.cgi?id=234492

        Reviewed by Simon Fraser.

        Tests: fast/gradients/alpha-premultiplied.html
               fast/gradients/conic-gradient-alpha-unpremultiplied.html

        Extracts use of CGGradientRef out of Gradient and into the new GradientRendererCG which also implements
        a CGShadingRef based gradient drawing path. The GradientRendererCG picks which strategy, CGGradientRef
        or CGShadingRef, based on the intepolation mode and capabilities of the underlying CoreGraphics. For 
        new enough CoreGraphics, both premultiplied and non-premultiplied alpha interpolation for sRGB output
        are supported in the more optimizable CGGradientRef path, but on older systems we will fallback to a 
        a newly implemented CGShadingRef based implementation.

        In addition to the platform level work in Gradient, this adds a new setting, CSSGradientPremultipliedAlphaInterpolationEnabled,
        which defaults to off for now and switches what type of interpolation we use for CSS gradients. It
        does not effect other gradient uses such as by canvas or SVG. Those will be enabled separately.

        * Headers.cmake:
        * PlatformAppleWin.cmake:
        * PlatformMac.cmake:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        Add new files.

        * css/CSSGradientValue.cpp:
        (WebCore::LinearGradientAdapter::normalizeStopsAndEndpointsOutsideRange):
        (WebCore::RadialGradientAdapter::normalizeStopsAndEndpointsOutsideRange):
        (WebCore::ConicGradientAdapter::normalizeStopsAndEndpointsOutsideRange):
        (WebCore::CSSGradientValue::computeStops):
        Switch to using the new interpolateColors() function from ColorInterpolation.h
        which accurately takes into account the current interpolation mode. These
        blends now match what the created gradient does.

        * css/parser/CSSParserContext.cpp:
        * css/parser/CSSParserContext.h:
        Add support for querying CSSGradientPremultipliedAlphaInterpolationEnabled from the CSS parser.

        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::gradientAlphaPremultiplication):
        (WebCore::CSSPropertyParserHelpers::consumeDeprecatedGradient):
        (WebCore::CSSPropertyParserHelpers::consumeDeprecatedRadialGradient):
        (WebCore::CSSPropertyParserHelpers::consumeRadialGradient):
        (WebCore::CSSPropertyParserHelpers::consumeLinearGradient):
        (WebCore::CSSPropertyParserHelpers::consumeConicGradient):
        Depending on how CSSGradientPremultipliedAlphaInterpolationEnabled is set, use either premultiplied
        or non-premultiplied interpolation for CSS gradients.

        * platform/graphics/ColorComponents.h:
        (WebCore::ColorComponents::size const):
        Add size() function for use by the shading strategy.

        * platform/graphics/ColorInterpolation.h:
        (WebCore::preInterpolationNormalizationForComponent):
        (WebCore::preInterpolationNormalization):
        (WebCore::postInterpolationNormalizationForComponent):
        (WebCore::postInterpolationNormalization):
        (WebCore::interpolateColorComponents):
        Update to use the name InterpolationMethodColorSpace consistenly for the color space part of the
        interpolation method.
  
        (WebCore::interpolateColors):
        Add helper which takes and returns Color objects rather than the strongly typed color types, 
        automatically converting to the appropriate interpolation color space based on the provided
        ColorInterpolationMethod object.

        * platform/graphics/Gradient.h:
        * platform/graphics/GradientColorStop.h: Added.
        Move ColorStop and ColorStopVector defintions to new GradientColorStop file, but keep the
        old nested names via using directives. This is needed to make using the ColorStopVector
        from GradientRendererCG (which we also want to use in Gradient.h) possible without redeclaration.
        Replace CGGradientRef member with GradientRendererCG which allows choosing between either
        a CGGradientRef based implementation or CGShadingRef based one.

        * platform/graphics/cg/GradientCG.cpp:
        Update to use the GradientRendererCG rathern than a CGGradientRef directly, calling into it
        to do the actual draw calls.

        * platform/graphics/cg/GradientRendererCG.h: Added.
        * platform/graphics/cg/GradientRendererCG.cpp: Added.
        (WebCore::GradientRendererCG::pickStrategy const):
        Central function to choose which strategy to use based on system capabilities and interpolation needs.

        (WebCore::GradientRendererCG::makeGradient const):
        Moved from GradientCG.cpp. Removed the CGGradientCreateWithColors() path, as we can always use the
        more efficient CGGradientCreateWithColorComponents() by doing the conversion to extended sRGB ourselves.
        Also adds use of the kCGGradientInterpolatesPremultiplied option on supported systems to tell CoreGraphics
        to use premulitplied interpolation.

        (WebCore::shadingFunction):
        Core function used by CGShadingRef to interpolate between color stops. Templatized to allow for optimized
        versions for every ColorInterpolationColorSpace / AlphaPremultiplication pair. 

        (WebCore::GradientRendererCG::makeShading const):
        Builds shading strategy by converting all color stops to the interpolation color space, adding stops at
        0 and 1 if necessary, and creating the CGFunctionRef that the shading will own. To avoid a circular 
        reference, the GradientRendererCG itself is not what the CGFunctionRef retains, but rather a subobject
        Data, which is a peer to the CGFunctionRef.

        (WebCore::GradientRendererCG::drawLinearGradient):
        (WebCore::GradientRendererCG::drawRadialGradient):
        (WebCore::GradientRendererCG::drawConicGradient):
        Draw the gradient or shading based on the strategy selected at construction.

2021-12-21  Tim Nguyen  <ntim@apple.com>

        <dialog> should generate implied end tags
        https://bugs.webkit.org/show_bug.cgi?id=234442

        Reviewed by Antti Koivisto.

        See references to dialog in: https://html.spec.whatwg.org/multipage/parsing.html#parsing-main-inbody

        Test: web-platform-tests/html/syntax/parsing/html5lib_blocks-expected.txt

        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTagForInBody):
        `<p>XXX<dialog></dialog>` turns into: `<p>XXX</p><dialog></dialog>`

        (WebCore::HTMLTreeBuilder::processEndTagForInBody):
        `<dialog><p>XXX</dialog>` turns into: `<dialog><p>XXX</p></dialog>`


2021-12-21  Yusuke Suzuki  <ysuzuki@apple.com>

        [WTF] Remove RefCountedArray and use RefCountedFixedVector
        https://bugs.webkit.org/show_bug.cgi?id=234484

        Reviewed by Dean Jackson.

        Use RefCountedFixedVector intead. No semantic change.

        * layout/integration/InlineIteratorBoxLegacyPath.h:
        * platform/graphics/FontCascadeDescription.cpp:
        (WebCore::FontCascadeDescription::FontCascadeDescription):
        * platform/graphics/FontCascadeDescription.h:
        (WebCore::FontCascadeDescription::familyCount const):
        (WebCore::FontCascadeDescription::familyAt const):
        (WebCore::FontCascadeDescription::families const):
        (WebCore::FontCascadeDescription::setOneFamily):
        (WebCore::FontCascadeDescription::setFamilies):
        (WebCore::FontCascadeDescription::operator== const):

2021-12-21  Youenn Fablet  <youenn@apple.com>

        REGRESSION (r287258): Flaky crash in WebCore::RTCRtpScriptTransformer::enqueueFrame
        https://bugs.webkit.org/show_bug.cgi?id=234522
        <rdar://problem/86736206>

        Reviewed by Darin Adler.

        Covered by tests no longer crashing.

        * Modules/mediastream/RTCRtpScriptTransformer.cpp:
        (WebCore::RTCRtpScriptTransformer::enqueueFrame):
        Add a null check in enqueueFrame since the transformer may be cleared during the time
        of hopping from webrtc frame thread to worker thread.

2021-12-21  Yoshiaki Jitsukawa  <yoshiaki.jitsukawa@sony.com>

        [LCMS] Use std::unqiue_ptr to retain LCMS objects
        https://bugs.webkit.org/show_bug.cgi?id=234506

        Reviewed by Michael Catanzaro.

        * platform/graphics/lcms/LCMSUniquePtr.h: Added.
        Add LCMSUniquePtr.h and specialize std::unique_ptr with deleters.
        LCMSProfilePtr is for cmsHPROFILE with cmsCloseProfile() as the deleter.
        LCMSTransformPtr is for cmsHTRANSFORM with cmsDeleteTransform() as the deleter.

        * CMakeLists.txt:
        Add WebCore/platform/graphics/lcms to WebCore_PRIVATE_INCLUDE_DIRECTORIES.
        Add LCMSUniquePtr.h to WebCore_PRIVATE_FRAMEWORK_HEADERS.

        * platform/graphics/PlatformDisplay.cpp:
        * platform/graphics/PlatformDisplay.h:
        * platform/graphics/x11/PlatformDisplayX11.cpp:
        Use LCMSProfilePtr to retain ICC Profile.

        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        * platform/image-decoders/jpeg/JPEGImageDecoder.h:
        * platform/image-decoders/jpegxl/JPEGXLImageDecoder.cpp:
        * platform/image-decoders/jpegxl/JPEGXLImageDecoder.h:
        * platform/image-decoders/png/PNGImageDecoder.cpp:
        * platform/image-decoders/png/PNGImageDecoder.h:
        Use LCMSProfilePtr to retain color transform.
        Remove the m_iccProfile class member because m_iccTransform also retains a
        reference to the LCMS's profile and m_iccProfile can be removed.

2021-12-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][a11y] Implement list markers when building with ATSPI
        https://bugs.webkit.org/show_bug.cgi?id=234485

        Reviewed by Adrian Perez de Castro.

        For list item markers in ATSPI we are following the chromium approach, exposing the markers as hyperlinks, so
        included in the list item text string as the object replacement character. This approach also allows to expose
        image markers. Since we don't have a list marker role in ATSPI, we use either text or image roles. New methods
        have been added to get the role, role name and localized role name for the cases in which there isn't a direct
        match between the webcore role and the atspi role.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::stringValue const): In ATSPI we want the text with suffix.
        * accessibility/atspi/AccessibilityObjectAtspi.cpp:
        (WebCore::AccessibilityObjectAtspi::interfacesForObject): Make item markers implement hyperlink interface and
        either text or image.
        (WebCore::atspiRole): Assert if ListMarker role is passed since that's no longer possible.
        (WebCore::AccessibilityObjectAtspi::effectiveRole const): Handle the ListMarker role as special case case.
        (WebCore::AccessibilityObjectAtspi::role const): Check if there's an effective role first.
        (WebCore::AccessibilityObjectAtspi::effectiveRoleName const): Handle effective role here.
        (WebCore::AccessibilityObjectAtspi::roleName const): Check if there's an effective role first.
        (WebCore::AccessibilityObjectAtspi::effectiveLocalizedRoleName const): Handle effective role here.
        (WebCore::AccessibilityObjectAtspi::localizedRoleName const): Check if there's an effective role first.
        * accessibility/atspi/AccessibilityObjectAtspi.h:
        * accessibility/atspi/AccessibilityObjectTextAtspi.cpp:
        (WebCore::AccessibilityObjectAtspi::text const): Remove the main thread micro-optimization to avoid more
        duplicated code and insert the object replacement character for list items having a marker.
        (WebCore::adjustInputOffset): Helper function to adjust the input offset in case of having a list item marker.
        (WebCore::adjustOutputOffset): Helper function to adjust the output offset in case of having a list item marker.
        (WebCore::AccessibilityObjectAtspi::textInserted): Use adjustOutputOffset().
        (WebCore::AccessibilityObjectAtspi::textDeleted): Ditto.
        (WebCore::AccessibilityObjectAtspi::boundaryOffset const): Adjust offsets and handle words as special case to
        always consider the list marker as a word.
        (WebCore::AccessibilityObjectAtspi::offsetAtPoint const): Use adjustOutputOffset().
        (WebCore::AccessibilityObjectAtspi::textAttributes const): Adjust offsets and handle list item marker as special
        case to always consider the marker as an independent text run.

2021-12-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        CSP: Include the sample in eval violation reports
        https://bugs.webkit.org/show_bug.cgi?id=234390

        Reviewed by Kate Cheney.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::reportViolationForUnsafeEval): Handle the source parameter and pass it to allowEval().
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSWorkerGlobalScopeBase.cpp:
        (WebCore::JSWorkerGlobalScopeBase::reportViolationForUnsafeEval): Handle the source parameter.
        * bindings/js/JSWorkerGlobalScopeBase.h:
        * bindings/js/JSWorkletGlobalScopeBase.cpp:
        (WebCore::JSWorkletGlobalScopeBase::reportViolationForUnsafeEval): Ditto.
        * bindings/js/JSWorkletGlobalScopeBase.h:
        * bindings/js/ScheduledAction.h:
        (WebCore::ScheduledAction::code const): Return the code.
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::setTimeout): Pass the code to allowEval().
        (WebCore::DOMWindow::setInterval): Ditto.
        * page/csp/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::allowEval const): Handle codeContent parameter and pass it to reportViolation().
        (WebCore::ContentSecurityPolicy::reportViolation const): Ditto.
        * page/csp/ContentSecurityPolicy.h:
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::setTimeout): Pass the code to allowEval().
        (WebCore::WorkerGlobalScope::setInterval): Ditto.

2021-12-21  Fujii Hironori  <Hironori.Fujii@sony.com>

        MSVC reports "SVGPropertyAnimator.h(94): error C2839: invalid return type 'T *' for overloaded 'operator ->'" with /std:c++20
        https://bugs.webkit.org/show_bug.cgi?id=234546

        Reviewed by Alex Christensen.

        * svg/properties/SVGPropertyAnimator.h:
        (WebCore::SVGPropertyAnimator::computeInheritedCSSPropertyValue const):
        computeCSSPropertyValue protects the first arguemnt SVGElement.
        computeInheritedCSSPropertyValue doesn't need to protect "parent".
        Use Element* instead of RefPtr for "parent".

2021-12-20  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] MSVC reports "DownloadBundleWin.cpp(87): error C2362: initialization of 'magic' is skipped by 'goto exit'" with /std:c++20
        https://bugs.webkit.org/show_bug.cgi?id=234504

        Reviewed by Alex Christensen.

        * platform/network/win/DownloadBundleWin.cpp:
        (WebCore::DownloadBundle::appendResumeData):
        (WebCore::DownloadBundle::extractResumeData):
        Removed goto statements. Use std::unique_ptr for FILE*.

2021-12-20  Alexey Shvayka  <ashvayka@apple.com>

        [WebIDL] convertVariadicArguments() should return a FixedVector
        https://bugs.webkit.org/show_bug.cgi?id=232639

        Reviewed by Yusuke Suzuki.

        Since it's highly unlikely (CSSNumericArray is immutable) that we would need to
        mutate variadic arguments before processing them or storing, and we know their size
        upfront, it makes the most sense to save some memory by utilizing a FixedVector.

        This patch reduces sizeof(ScheduledAction) by 8, enabling memory-neutral addition
        of a field like m_incumbentGlobalObject.

        No new tests, no behavior change.

        * Modules/mediastream/PeerConnectionBackend.cpp:
        (WebCore::PeerConnectionBackend::addTrack):
        * Modules/mediastream/PeerConnectionBackend.h:
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::addTrack):
        * Modules/mediastream/RTCPeerConnection.h:
        * Modules/mediastream/RTCRtpSender.cpp:
        (WebCore::RTCRtpSender::setStreams):
        (WebCore::RTCRtpSender::setMediaStreamIds):
        * Modules/mediastream/RTCRtpSender.h:
        * Modules/mediastream/RTCRtpSenderBackend.h:
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::addTrack):
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h:
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::LibWebRTCPeerConnectionBackend::addTrack):
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.h:
        * Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.cpp:
        (WebCore::LibWebRTCRtpSenderBackend::setMediaStreamIds):
        * Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.h:
        * bindings/js/JSDOMConvertVariadic.h:
        (WebCore::convertVariadicArguments):
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::addArguments):
        * bindings/js/ScheduledAction.h:
        * css/typedom/CSSNumericValue.cpp:
        (WebCore::CSSNumericValue::add):
        (WebCore::CSSNumericValue::sub):
        (WebCore::CSSNumericValue::mul):
        (WebCore::CSSNumericValue::div):
        (WebCore::CSSNumericValue::min):
        (WebCore::CSSNumericValue::max):
        (WebCore::CSSNumericValue::equals):
        (WebCore::CSSNumericValue::toSum):
        * css/typedom/CSSNumericValue.h:
        * css/typedom/numeric/CSSMathMax.cpp:
        (WebCore::CSSMathMax::create):
        (WebCore::CSSMathMax::CSSMathMax):
        * css/typedom/numeric/CSSMathMax.h:
        * css/typedom/numeric/CSSMathMin.cpp:
        (WebCore::CSSMathMin::create):
        (WebCore::CSSMathMin::CSSMathMin):
        * css/typedom/numeric/CSSMathMin.h:
        * css/typedom/numeric/CSSMathProduct.cpp:
        (WebCore::CSSMathProduct::create):
        (WebCore::CSSMathProduct::CSSMathProduct):
        * css/typedom/numeric/CSSMathProduct.h:
        * css/typedom/numeric/CSSMathSum.cpp:
        (WebCore::CSSMathSum::create):
        (WebCore::CSSMathSum::CSSMathSum):
        * css/typedom/numeric/CSSMathSum.h:
        * css/typedom/numeric/CSSNumericArray.cpp:
        (WebCore::CSSNumericArray::create):
        (WebCore::CSSNumericArray::CSSNumericArray):
        * css/typedom/numeric/CSSNumericArray.h:
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::append):
        (WebCore::ContainerNode::prepend):
        (WebCore::ContainerNode::replaceChildren):
        * dom/ContainerNode.h:
        * dom/Document.cpp:
        (WebCore::Document::write):
        (WebCore::Document::writeln):
        * dom/Document.h:
        * dom/DocumentTouch.cpp:
        (WebCore::DocumentTouch::createTouchList):
        * dom/DocumentTouch.h:
        * dom/Node.cpp:
        (WebCore::nodeSetPreTransformedFromNodeOrStringVector):
        (WebCore::Node::convertNodesOrStringsIntoNode):
        (WebCore::Node::before):
        (WebCore::Node::after):
        (WebCore::Node::replaceWith):
        * dom/Node.h:
        * dom/TouchList.h:
        (WebCore::TouchList::create):
        (WebCore::TouchList::TouchList):
        * html/DOMTokenList.cpp:
        (WebCore::DOMTokenList::add):
        (WebCore::DOMTokenList::remove):
        * html/DOMTokenList.h:
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext):
        * html/HTMLCanvasElement.h:
        * html/OffscreenCanvas.cpp:
        (WebCore::OffscreenCanvas::getContext):
        * html/OffscreenCanvas.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::setTimeout):
        (WebCore::DOMWindow::setInterval):
        * page/DOMWindow.h:
        * workers/DedicatedWorkerGlobalScope.cpp:
        (WebCore::DedicatedWorkerGlobalScope::importScripts):
        * workers/DedicatedWorkerGlobalScope.h:
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::setTimeout):
        (WebCore::WorkerGlobalScope::setInterval):
        (WebCore::WorkerGlobalScope::importScripts):
        * workers/WorkerGlobalScope.h:

2021-12-20  Alexey Shvayka  <ashvayka@apple.com>

        Introduce a fast path for replacing an attribute event listener
        https://bugs.webkit.org/show_bug.cgi?id=234441

        Reviewed by Chris Dumez.

        This patch makes replacing attribute event listener (via EventHandler IDL attribute)
        2.6x faster by avoiding creation of intermediate JSEventListener instance.

        Reusing is safe even for JSErrorHandler listeners as they can be replaced only with
        instances of the same class. Uninitialized JSLazyEventListener can also be "replaced"
        if m_isInitialized if set, which makes it behave like a regular JSEventListener.
        All this is caught by existing tests.

        Additionaly, this change slightly (about 3% according to a microbenchmark) speeds up
        lookup of attribute event listeners by removing virtual isAttribute() call and related
        downcasts from the hot path. Also, inlines event handler's getters / setters,
        and simplifies call forwarding.

        Altogether, this patch improves Speedometer2/Inferno-TodoMVC score by 4%.

        No new tests, no behavior change.

        * bindings/js/JSErrorHandler.h:
        (WebCore::createJSErrorHandler): Deleted.
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::create):
        (WebCore::JSEventListener::replaceJSFunctionForAttributeListener):
        (WebCore::eventHandlerAttribute):
        (WebCore::createEventListenerForEventHandlerAttribute): Deleted.
        (WebCore::setEventHandlerAttribute): Deleted.
        (WebCore::windowEventHandlerAttribute): Deleted.
        (WebCore::setWindowEventHandlerAttribute): Deleted.
        * bindings/js/JSEventListener.h:

        Although setWindowEventHandlerAttribute<JSErrorHandler> is currently unused, it's
        templatized to accommodate a follow-up patch that will fix a web-compat issue.
        This change carefully preserves current (slightly incorrect) `onerror` behavior.

        While we don't care about performance of `onerror`, using templates improves uniformity
        (aligns signatures of create() methods) and will simplify code generation in the follow-up.

        (WebCore::setEventHandlerAttribute):
        (WebCore::windowEventHandlerAttribute):
        (WebCore::setWindowEventHandlerAttribute):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateAttributeSetterBodyDefinition):
        * bindings/scripts/test/JS/*: Updated.
        * dom/Document.cpp:
        (WebCore::Document::setWindowAttributeEventListener):
        (WebCore::Document::getWindowAttributeEventListener): Deleted.
        * dom/Document.h:
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::setAttributeEventListener):
        (WebCore::EventTarget::attributeEventListener):
        * dom/EventTarget.h:

2021-12-19  Simon Fraser  <simon.fraser@apple.com>

        Remove EventHandler::scrollDistance()
        https://bugs.webkit.org/show_bug.cgi?id=234494

        Reviewed by Wenson Hsieh.

        This function is unused.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::scrollDistance): Deleted.
        * page/EventHandler.h:

2021-12-19  Simon Fraser  <simon.fraser@apple.com>

        Minor cleanup in aisle EventHandler::handleWheelEventInAppropriateEnclosingBox()
        https://bugs.webkit.org/show_bug.cgi?id=234493

        Reviewed by Wenson Hsieh.

        Remove a confusing RenderListBox special case, which simply existed because the loop
        below didn't know how to get a ScrollableArea for a RenderListBox.

        Also rename didScrollInScrollableArea() to scrollViaNonPlatformEvent() because
        the past tense in the name was inaccurate.

        * page/EventHandler.cpp:
        (WebCore::scrollViaNonPlatformEvent):
        (WebCore::EventHandler::handleWheelEventInAppropriateEnclosingBox):
        (WebCore::didScrollInScrollableArea): Deleted.

2021-12-20  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Decouple LineBox and InlineDisplay:Line construction
        https://bugs.webkit.org/show_bug.cgi?id=234519

        Reviewed by Antti Koivisto.

        Layout::LineBox has logical geometry while InlineDisplay::Line is all physical.
        This is also in preparation for supporting RTL lines.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * layout/formattingContexts/inline/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::computeGeometryForLineContent):
        * layout/formattingContexts/inline/InlineLevelBox.h:
        * layout/formattingContexts/inline/InlineLineBoxBuilder.cpp:
        (WebCore::Layout::LineBoxBuilder::build):
        * layout/formattingContexts/inline/InlineLineBoxBuilder.h:
        * layout/formattingContexts/inline/display/InlineDisplayLineBuilder.cpp: Added.
        (WebCore::Layout::InlineDisplayLineBuilder::InlineDisplayLineBuilder):
        (WebCore::Layout::InlineDisplayLineBuilder::build):
        * layout/formattingContexts/inline/display/InlineDisplayLineBuilder.h: Copied from Source/WebCore/layout/formattingContexts/inline/InlineLineBoxBuilder.h.
        (WebCore::Layout::InlineDisplayLineBuilder::formattingContext const):
        (WebCore::Layout::InlineDisplayLineBuilder::root const):
        (WebCore::Layout::InlineDisplayLineBuilder::layoutState const):

2021-12-20  Matt Woodrow  <mattwoodrow@apple.com>

        Don't include SVGImageForContainers in allCachedSVGImages
        https://bugs.webkit.org/show_bug.cgi?id=234364

        Reviewed by Dean Jackson.

        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::image const):
        (WebCore::CachedImage::hasSVGImage const):
        (WebCore::CachedImage::image): Deleted.
        * loader/cache/CachedImage.h:

2021-12-20  Wenson Hsieh  <wenson_hsieh@apple.com>

        Adopt ChromeClient::classifyModalContainerControls() in ModalContainerObserver
        https://bugs.webkit.org/show_bug.cgi?id=234323

        Reviewed by Devin Rousso.

        Hook into the new chrome client method introduced in bug #234320 in ModalContainerObserver, by propagating the
        identified strings through the client layer for classification, and then using the predicted class labels to
        fulfill the document loader's ModalContainerObservationPolicy.

        * page/ModalContainerObserver.cpp:
        (WebCore::ModalContainerObserver::updateModalContainerIfNeeded):
        (WebCore::ModalContainerObserver::collectClickableElementsTimerFired):

        Use the predicted class labels to find a suitable element on which we should dispatch a simulated click.

        * page/ModalContainerObserver.h:

2021-12-20  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Move display builder files under /display directory
        https://bugs.webkit.org/show_bug.cgi?id=234517

        Reviewed by Antti Koivisto.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * layout/formattingContexts/inline/display/InlineDisplayContentBuilder.cpp: Renamed from Source/WebCore/layout/formattingContexts/inline/InlineDisplayContentBuilder.cpp.
        * layout/formattingContexts/inline/display/InlineDisplayContentBuilder.h: Renamed from Source/WebCore/layout/formattingContexts/inline/InlineDisplayContentBuilder.h.

2021-12-20  Patrick Griffis  <pgriffis@igalia.com>

        CSP: Always use UTF-8 encoded content when checking hashes
        https://bugs.webkit.org/show_bug.cgi?id=234159

        Reviewed by Kate Cheney.

        As per the spec: https://www.w3.org/TR/CSP3/#match-element-to-source-list
        > Regardless of the encoding of the document, source will be converted to UTF-8
          before applying any hashing algorithms.

        StrictConversionReplacingUnpairedSurrogatesWithFFFD matches Chromiums behavior.

        * page/csp/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::findHashOfContentInPolicies const):

2021-12-20  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] MSVC reports "DragImageCairoWin.cpp(142): error C2362: initialization of 'cr' is skipped by 'goto exit'" with /std:c++20
        https://bugs.webkit.org/show_bug.cgi?id=234505

        Reviewed by Don Olmstead.

        * platform/win/DragImageCairoWin.cpp:
        (WebCore::scaleDragImage):
        Reimplemented without goto statements.

2021-12-14  Sergio Villar Senin  <svillar@igalia.com>

        [css-flexbox] Pre-layout orthogonal children to compute the preferred logical width
        https://bugs.webkit.org/show_bug.cgi?id=234300

        Reviewed by Javier Fernandez.

        In order to properly compute the flex container intrinsic width we must layout the orthogonal
        children so that we could use the children's block sizes (which are in the flex container
        inline axis).

        The very same solution was adopted long time ago by the RenderGrid code.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::computeIntrinsicLogicalWidths const): prelayout orthogonal children.

2021-12-20  Karl Dubost  <karl+github@la-grange.net>

        Fixes dead code in compareIcons()
        https://bugs.webkit.org/show_bug.cgi?id=234234

        Reviewed by Youenn Fablet.

        * html/LinkIconCollector.cpp:
        (WebCore::compareIcons):

2021-12-20  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Adjust the atomic/generic inline level boxes with marginLeft in RTL
        https://bugs.webkit.org/show_bug.cgi?id=234502

        Reviewed by Antti Koivisto.

        * layout/formattingContexts/inline/InlineDisplayContentBuilder.cpp:
        (WebCore::Layout::InlineDisplayContentBuilder::adjustVisualGeometryForDisplayBox):
        (WebCore::Layout::InlineDisplayContentBuilder::processBidiContent):

2021-12-20  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] InlineDisplay::Line has physical geometry
        https://bugs.webkit.org/show_bug.cgi?id=234490

        Reviewed by Antti Koivisto.

        Remove the term "logical" from function names and variables.

        * layout/formattingContexts/block/BlockFormattingGeometry.cpp:
        (WebCore::Layout::BlockFormattingGeometry::inFlowNonReplacedContentHeightAndMargin const):
        * layout/formattingContexts/inline/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::usedContentHeight const):
        (WebCore::Layout::InlineFormattingContext::computeStaticPositionForOutOfFlowContent):
        (WebCore::Layout::InlineFormattingContext::computeGeometryForLineContent):
        * layout/formattingContexts/inline/InlineLineBoxBuilder.cpp:
        (WebCore::Layout::LineBoxBuilder::build):
        (WebCore::Layout::LineBoxBuilder::constructAndAlignInlineLevelBoxes):
        * layout/formattingContexts/inline/display/InlineDisplayLine.h:
        (WebCore::InlineDisplay::Line::lineBoxRect const):
        (WebCore::InlineDisplay::Line::contentLeft const):
        (WebCore::InlineDisplay::Line::contentWidth const):
        (WebCore::InlineDisplay::Line::moveVertically):
        (WebCore::InlineDisplay::Line::Line):
        (WebCore::InlineDisplay::Line::lineBoxLogicalRect const): Deleted.
        (WebCore::InlineDisplay::Line::contentLogicalLeft const): Deleted.
        (WebCore::InlineDisplay::Line::contentLogicalWidth const): Deleted.
        * layout/integration/LayoutIntegrationInlineContentBuilder.cpp:
        (WebCore::LayoutIntegration::lineOverflowWidth):
        (WebCore::LayoutIntegration::InlineContentBuilder::createDisplayLines const):
        * layout/layouttree/LayoutTreeBuilder.cpp:
        (WebCore::Layout::showInlineTreeAndRuns):

2021-12-20  Youenn Fablet  <youenn@apple.com>

        Update RTCRtpScriptTransformer key frame API according latest spec proposal
        https://bugs.webkit.org/show_bug.cgi?id=234429

        Reviewed by Eric Carlson.

        Update implementation according https://github.com/w3c/webrtc-encoded-transform/pull/125.
        This means adding a specific method to send a FIR, a specific method to generate a key frame on sender side.
        This also means improving the error handling and the promise resolution timing.
        RID support is not yet available until we can properly pipe that information down to encoders.

        Test: http/wpt/webrtc/audiovideo-script-transform.html

        * Modules/mediastream/RTCRtpScriptTransformer.cpp:
        * Modules/mediastream/RTCRtpScriptTransformer.h:
        * Modules/mediastream/RTCRtpScriptTransformer.idl:

2021-12-19  Brady Eidson  <beidson@apple.com>

        Stub out NotificationEvent and related
        https://bugs.webkit.org/show_bug.cgi?id=234420

        Reviewed by Alex Christensen.

        No new tests (Disabled for now, no behavior change)
        
        This patch adds stubs for NotificationEvent and the related classes/functions that use it.
        
        Enabling just the stubs throws LayoutTests into a chaotic state that is not useful to manage with
        test expectations files. So this also puts the related changes behind a disabled-by-default runtime switch.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        
        * Modules/notifications/Notification.h:
        * Modules/notifications/Notification.idl:
        
        * Modules/notifications/NotificationDirection.idl: Copied from Source/WebCore/workers/service/ServiceWorkerGlobalScope.idl.
        
        * Modules/notifications/NotificationEvent.cpp: Copied from Source/WebCore/workers/service/ServiceWorkerGlobalScope.idl.
        (WebCore::NotificationEvent::~NotificationEvent):
        * Modules/notifications/NotificationEvent.h: Copied from Source/WebCore/workers/service/ServiceWorkerGlobalScope.idl.
        * Modules/notifications/NotificationEvent.idl: Copied from Source/WebCore/workers/service/ServiceWorkerGlobalScope.idl.
        
        * Modules/notifications/NotificationOptions.h: Copied from Source/WebCore/workers/service/ServiceWorkerGlobalScope.idl.
        * Modules/notifications/NotificationOptions.idl: Copied from Source/WebCore/workers/service/ServiceWorkerGlobalScope.idl.
        
        * bindings/js/WebCoreBuiltinNames.h:
        
        * dom/EventNames.h:
        * dom/EventNames.in:
        
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setNotificationEventEnabled):
        (WebCore::RuntimeEnabledFeatures::notificationEventEnabled const):
        
        * workers/service/ServiceWorkerGlobalScope.idl:
        
        * workers/service/ServiceWorkerRegistration.cpp:
        (WebCore::ServiceWorkerRegistration::showNotification):
        (WebCore::ServiceWorkerRegistration::getNotifications):
        * workers/service/ServiceWorkerRegistration.h:
        * workers/service/ServiceWorkerRegistration.idl:

2021-12-19  Simon Fraser  <simon.fraser@apple.com>

        Minor cleanup in aisle EventHandler::handleWheelEventInAppropriateEnclosingBox()
        https://bugs.webkit.org/show_bug.cgi?id=234493

        Reviewed by Wenson Hsieh.

        Remove a confusing RenderListBox special case, which simply existed because the loop
        below didn't know how to get a ScrollableArea for a RenderListBox.

        Also rename didScrollInScrollableArea() to scrollViaNonPlatformEvent() because
        the past tense in the name was inaccurate.

        * page/EventHandler.cpp:
        (WebCore::scrollViaNonPlatformEvent):
        (WebCore::EventHandler::handleWheelEventInAppropriateEnclosingBox):
        (WebCore::didScrollInScrollableArea): Deleted.

2021-12-19  Simon Fraser  <simon.fraser@apple.com>

        Remove EventHandler::scrollDistance()
        https://bugs.webkit.org/show_bug.cgi?id=234494

        Reviewed by Wenson Hsieh.

        This function is unused.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::scrollDistance): Deleted.
        * page/EventHandler.h:

2021-12-19  Myles C. Maxfield  <mmaxfield@apple.com>

        Use character names instead of hex codes in FontCascade.h
        https://bugs.webkit.org/show_bug.cgi?id=234451

        Reviewed by Dean Jackson.

        Saying something like "c == zeroWidthNonJoiner" is much more clear than "c == 0x200c".

        No new tests because there is no behavior change.

        * platform/graphics/FontCascade.h:
        (WebCore::FontCascade::treatAsSpace):
        (WebCore::FontCascade::treatAsZeroWidthSpace):
        (WebCore::FontCascade::treatAsZeroWidthSpaceInComplexScript):

2021-12-19  Jean-Yves Avenard  <jya@apple.com>

        Don't pack audio samples with discontinuity together
        https://bugs.webkit.org/show_bug.cgi?id=234458
        rdar://86659914

        Reviewed by Eric Carlson.

        Some webm content may have a data gap between frames. Normally audio frames
        are packed in 2s block. When we pack the samples with discontinuities, those
        discontinuities would all be accumulated at the 2s boundary which makes them
        much more audible.
        The CMSampleBufferCreateReady API should allow us to pack samples with
        discontinuities as we can give a vector of CMSampleTimingInfo with the
        exact information for all packets.
        However, this data appears to be ignored and the discontinuities is still
        heard at the 2s boundary.
        So we no longer pack samples with discontinuities so that the frame
        timestamps will be more accurate and no audible artefacts are heard on
        small gaps.

        Manually tested and verified manually. This is getting around an issue
        in CoreMedia that inserts very audible artifacts when there's a gap between
        samples.

        * platform/graphics/cocoa/SourceBufferParserWebM.cpp:
        (WebCore::SourceBufferParserWebM::AudioTrackData::resetCompleted):
        (WebCore::SourceBufferParserWebM::AudioTrackData::consumeFrameData):
        (WebCore::SourceBufferParserWebM::AudioTrackData::createSampleBuffer):
        * platform/graphics/cocoa/SourceBufferParserWebM.h:

2021-12-19  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add support for RTL text-indent
        https://bugs.webkit.org/show_bug.cgi?id=234461

        Reviewed by Antti Koivisto.

        See https://drafts.csswg.org/css-text/#text-indent-property

        * layout/formattingContexts/inline/InlineLineBoxBuilder.cpp:
        (WebCore::Layout::LineBoxBuilder::build):

2021-12-19  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add client layer plumbing for classifying modal container controls
        https://bugs.webkit.org/show_bug.cgi?id=234320

        Reviewed by Dean Jackson.

        Add a chrome client method to asynchronously classify text inside modal container controls as one of { Neutral,
        Positive, Negative or Other }. While currently unimplemented, the next patch will add support for a singleton
        ModalContainerControlClassifier in WebKit2, and use it to implement this client hook.

        * Headers.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/EmptyClients.cpp:
        (WebCore::EmptyChromeClient::classifyModalContainerControls):
        * loader/EmptyClients.h:
        * page/ChromeClient.h:
        * page/ModalContainerControlType.h: Added.

2021-12-19  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add a basic heuristic for collecting and extracting text from controls in ModalContainerObserver
        https://bugs.webkit.org/show_bug.cgi?id=234299

        Reviewed by Dean Jackson.

        Introduce a heuristic for extracting clickable controls from modal containers, that are unlikely to be links
        (i.e. trigger navigation when clicked). See below for more details.

        * page/ModalContainerObserver.cpp:
        (WebCore::ModalContainerObserver::ModalContainerObserver):
        (WebCore::ModalContainerObserver::updateModalContainerIfNeeded):

        Once a modal container has been detected, schedule a short timer to traverse the modal container's subtree in
        search for clickable controls. In a future patch, we may need to lengthen this delay or even introduce a
        mechanism for restarting the timer periodically if no clickable controls are discovered in the modal container.

        (WebCore::accessibilityRole):
        (WebCore::isClickableControl):
        (WebCore::removeParentOrChildElements):
        (WebCore::removeElementsWithEmptyBounds):
        (WebCore::textForControl):
        (WebCore::ModalContainerObserver::scheduleClickableElementCollection):
        (WebCore::ModalContainerObserver::collectClickableElementsTimerFired):
        (WebCore::ModalContainerObserver::collectClickableElements):

        This contains the main logic for collecting clickable elements inside modal containers. This heuristic consists
        mostly of three phases:

        1. We initially scan the modal container subtree in search of any elements that seem like they could be
        clickable buttons or links that don't trigger navigation, and build a list of `classifiableControls`.

        2. We then filter the list of `classifiableControls` by removing any elements in the list that either contain or
        are contained by other elements (using a heuristic to decide whether to remove each parent or child); in this
        filtering step, we additionally remove all elements that are effectively unclickable due to having an empty
        client bounding rect.

        3. In the final phase, we iterate over all of the controls in the filtered list, and attempt to extract text for
        each control (looking at attributes such as `title` and `aria-label`, `alt` text for images, and finally falling
        back to `outerText()`). If this raw text description is not empty and also not too long (exceeding an
        arbitrarily chosen threshold of 100 characters), we add it to the final list of controls and control text
        descriptions to send to the client layer for classification.

        (WebCore::ModalContainerObserver::shouldHide):

        Augment this to `return false` in the case where we're inside the scope of `m_collectingClickableElements`. This
        allows us to run heuristics over the modal container without an adjusted `display: none;` style on the container
        element.

        * page/ModalContainerObserver.h:

2021-12-19  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] text-indent is treated as a margin applied to the start edge of the line box.
        https://bugs.webkit.org/show_bug.cgi?id=234460

        Reviewed by Antti Koivisto.

        See https://drafts.csswg.org/css-text/#text-indent-property
        This is also in preparation for adjusting the display line geometry when the inline axis direction is rtl.

        * layout/formattingContexts/inline/InlineLineBuilder.cpp:
        (WebCore::Layout::LineBuilder::layoutInlineContent):
        (WebCore::Layout::LineBuilder::initialize):
        (WebCore::Layout::LineBuilder::initialConstraintsForLine const):
        * layout/formattingContexts/inline/InlineLineBuilder.h:
        * layout/formattingContexts/inline/InlineRect.h:
        (WebCore::Layout::InlineRect::moveLeftBy):

2021-12-19  Simon Fraser  <simon.fraser@apple.com>

        Keyboard shortcut to scroll to top when already at the top of the page moves to the bottom
        https://bugs.webkit.org/show_bug.cgi?id=234483
        <rdar://86628260>

        Reviewed by Dean Jackson.
        
        If the page was scrolled to the top and an "up" keyboard scroll happened,
        ScrollAnimator::singleAxisScroll() would trigger an unclamped scroll with a negative delta,
        which fed into ScrollAnimationSmooth::startAnimatedScrollToDestination() and would result in
        an animation with a zero duration, which resulted in NaNs in animateScroll().

        Fix by doing clamping in ScrollAnimator::singleAxisScroll() and protecting against
        animations with zero delay in ScrollAnimationSmooth.

        Test: fast/scrolling/keyboard-scrolling-home.html

        * platform/ScrollAnimationSmooth.cpp:
        (WebCore::ScrollAnimationSmooth::startAnimatedScrollToDestination):
        (WebCore::ScrollAnimationSmooth::retargetActiveAnimation):
        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::singleAxisScroll):

2021-12-19  David Kilzer  <ddkilzer@apple.com>

        Fix pointer to blob data in BlobResourceHandle::readDataSync()
        <https://webkit.org/b/234459>
        <rdar://86026618>

        Reviewed by Chris Dumez.

        * platform/network/BlobResourceHandle.cpp:
        (WebCore::BlobResourceHandle::readDataSync):

2021-12-19  Philippe Normand  <pnormand@igalia.com>

        [GTK][WPE][VTT] tests media/track/track-webvtt-* fail on GTK and WPE
        https://bugs.webkit.org/show_bug.cgi?id=234083

        Reviewed by Eric Carlson.

        Remove ENABLE(AVF_CAPTIONS) from cross-platform call sites. This is needed only in the
        AVFoundation player. The Adwaita media controls also now properly render
        -webkit-media-text-track-display-backdrop as required for media/track tests and as done in
        the Apple media controls.

        * Modules/mediacontrols/mediaControlsAdwaita.css:
        (video::-webkit-media-text-track-display-backdrop):
        (video::-webkit-media-text-track-container b):
        (video::-webkit-media-text-track-container u):
        (video::-webkit-media-text-track-container i):
        (video::-webkit-media-text-track-container .hidden,):
        * html/HTMLMediaElement.cpp:
        * html/HTMLMediaElement.h:
        * platform/graphics/MediaPlayer.cpp:
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayerClient::outOfBandTrackSources):
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::notifyTrackModeChanged):
        * platform/graphics/PlatformTextTrack.h:

2021-12-19  Yusuke Suzuki  <ysuzuki@apple.com>

        Lazily allocate HistoricUsageData
        https://bugs.webkit.org/show_bug.cgi?id=212878

        Reviewed by Saam Barati.

        This is only used when resource-overlay is enabled. We should allocate it lazily instead of putting this in __DATA.
        This also reduces binary size by 19KB.

        * page/cocoa/ResourceUsageOverlayCocoa.mm:
        (WebCore::historicUsageData):

2021-12-18  Darin Adler  <darin@apple.com>

        Hash tables, read/write, and heap memory are used unnecessarily, which may hurt performance
        https://bugs.webkit.org/show_bug.cgi?id=234438

        Reviewed by Anders Carlsson.

        * Modules/mediacapabilities/MediaCapabilities.cpp:
        (WebCore::bucketMIMETypes): Deleted.
        (WebCore::isValidMediaMIMEType): Moved the code from bucketMIMETypes in here.
        Use a SortedArraySet for bucketMIMETypes, which should be similar in performance
        and uses no heap or read/write memory.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::popupValue const): Use a loop to check the 5 valid
        values here instead of making a HashSet. Should be similar in performance and
        use no heap or read/write memory. Also removes call to convertToASCIILowercase,
        which will also help performance and memory use a tiny bit in some cases.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::inheritsPresentationalRole const): Use
        decltype to make this declaration simpler and shorter.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateForEachEventHandlerContentAttribute): Use decltype and references
        instead of pointers to make the function a little cleaner.

        * dom/Element.cpp:
        (WebCore::canAttachAuthorShadowRoot): Use constexpr so the tag list here does
        not use any read/write memory.

        * dom/make_names.pl:
        (printFactoryCppFile): Removed the unnecessary constructors for the MapEntry
        structs. Use decltype so we can make the tables constexpr so they do not use
        any read/write memory.
        (printWrapperFactoryCppFile): Ditto.

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::isProhibitedParagraphChild): Added a reserveInitialCapacity, which
        could make the hash table here use a little less memory.

        * html/Autofill.cpp:
        (WebCore::fieldNameMap): Deleted. Replaced with a SortedArrayMap, which is
        entirely made out of constexpr objcts so does not use heap or read/write memory.
        (WebCore::toAutofillFieldName): Updated to use SortedArrayMap functions.
        (WebCore::AutofillData::createFromHTMLFormControlElement): Ditto.

        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::isCaseSensitiveAttribute): Added a reserveInitialCapacity,
        which could make the hash table here use a little less memory.
        * html/HTMLObjectElement.cpp:
        (WebCore::preventsParentObjectFromExposure): Ditto.

        * page/DebugPageOverlays.cpp:
        (WebCore::touchEventRegionColors): Deleted.
        (WebCore::NonFastScrollableRegionOverlay::drawRect): Use SortedArrayMap and
        some lambdas to make this code tighter and easier to read.

        * page/PerformanceUserTiming.cpp:
        (WebCore::restrictedMarkNamesToNavigationTimingFunctionMap): Deleted. Use
        a SortedArrayMap instead, which should be similar in performance and uses no heap
        or read/write memory.
        (WebCore::restrictedMarkFunction): Deleted.
        (WebCore::isRestrictedMarkNameNonMainThread): Deleted. This is now safe to do on
        any thread.
        (WebCore::PerformanceUserTiming::isRestrictedMarkName): Use the SortedArrayMap,
        which has the benefit of relaxing the thread restrictions; this is now safe to
        call on any thread.
        (WebCore::PerformanceUserTiming::convertMarkToTimestamp const): Updated to use
        the SortedArrayMap. There may be some additional simplification possible now
        that the mark functions map can be used in any thread, but I wasn't sure.

        * platform/cocoa/RemoteCommandListenerCocoa.mm:
        (WebCore::mediaRemoteCommandForPlatformCommand): Use makeOptionalFromPointer.

        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::hasValidAverageCharWidth const): Use a SortedArraySet,
        which should be similar in performance and uses no heap or read/write memory

        * platform/graphics/FontPlatformData.cpp:
        (WebCore::makeOptionalFromPointer): Deleted. Moved to SortedArrayMap.h.
        * platform/graphics/HEVCUtilities.cpp:
        (WebCore::makeOptionalFromPointer): Deleted. Moved to SortedArrayMap.h.

        * platform/graphics/avfoundation/objc/AVAssetMIMETypeCache.mm:
        (WebCore::AVAssetMIMETypeCache::initializeCache): Updated for function name change.

        * platform/graphics/avfoundation/objc/CDMInstanceFairPlayStreamingAVFObjC.mm:
        Tweaked use of UNUSED_PARAM a bit across the file, relying on omitted names instead.

        * platform/graphics/cg/UTIRegistry.cpp:
        (WebCore::defaultSupportedImageTypes): Use a constexpr array rather than HashSet,
        on something just iterating this, not using it as a set.

        * platform/graphics/cocoa/SourceBufferParserWebM.cpp:
        (WebCore::SourceBufferParserWebM::supportedMIMETypes): Renamed from webmMIMETypes,
        changed to return a Span so we don't have to allocate a HashSet, since callers
        simply iterate this, and don't do set operations.
        (WebCore::SourceBufferParserWebM::isSupportedVideoCodec): Replaced the
        supportedVideoCodecs with this. We don't need a HashSet to check for two values,
        and this should be faster and use less memory.
        (WebCore::SourceBufferParserWebM::isSupportedAudioCodec): Ditto.
        * platform/graphics/cocoa/SourceBufferParserWebM.h: Updated for the changes above.

        * rendering/svg/SVGResources.cpp:
        (WebCore::tagSet): Added this helper to make the code in the functions below less
        repetitive.
        (WebCore::clipperFilterMaskerTags): Use a constexpr array instead of many separate
        calls to HashSet::add to construct the set.
        (WebCore::markerTags): Ditto.
        (WebCore::fillAndStrokeTags): Ditto.
        (WebCore::chainableResourceTags): Ditto.

2021-12-18  Alex Christensen  <achristensen@webkit.org>

        Use smart pointers for WebCoreNSURLSessionDataTask ObjC members
        https://bugs.webkit.org/show_bug.cgi?id=234477
        <rdar://79224869>

        Reviewed by Brady Eidson.

        Seems like a smart thing to do.

        * platform/network/cocoa/WebCoreNSURLSession.h:
        * platform/network/cocoa/WebCoreNSURLSession.mm:
        (-[WebCoreNSURLSessionDataTask originalRequest]):
        (-[WebCoreNSURLSessionDataTask setOriginalRequest:]):
        (-[WebCoreNSURLSessionDataTask currentRequest]):
        (-[WebCoreNSURLSessionDataTask setCurrentRequest:]):
        (-[WebCoreNSURLSessionDataTask error]):
        (-[WebCoreNSURLSessionDataTask setError:]):
        (-[WebCoreNSURLSessionDataTask taskDescription]):
        (-[WebCoreNSURLSessionDataTask setTaskDescription:]):
        (-[WebCoreNSURLSessionDataTask dealloc]):

2021-12-17  Simon Fraser  <simon.fraser@apple.com>

        Read the default value of the ScrollAnimatorEnabled setting from NSUserDefaults
        https://bugs.webkit.org/show_bug.cgi?id=234456

        Reviewed by Tim Horton.

        It's impossible for a test to run with an animated keyboard scroll because platformAllowsScrollAnimation(),
        which reads from NSUserDefaults, always trumps the Setting.

        Fix by initializing the setting from NSUserDefaults and removing the platformAllowsScrollAnimation()
        check. This allows for a WebKitTestRunner test override the setting. Remove the WTR code 
        that sets @"NSScrollAnimationEnabled" to @NO.

        Unfortunately in WebKitLegacy AppKit code consults the @"NSScrollAnimationEnabled" key, so
        DumpRenderTree has to continue to initialize this NSUserDefault to @NO and tests that
        try to change the Setting will fail.

        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::singleAxisScroll):
        (WebCore::ScrollAnimator::scrollAnimationEnabled const):
        * platform/ScrollAnimator.h:
        (WebCore::ScrollAnimator::platformAllowsScrollAnimation const): Deleted.
        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::platformAllowsScrollAnimation const): Deleted.

2021-12-17  Simon Fraser  <simon.fraser@apple.com>

        Rename MockScrollAnimatorEnabled to MockScrollbarsControllerEnabled
        https://bugs.webkit.org/show_bug.cgi?id=234452

        Reviewed by Anders Carlsson.

        The class formerly known as MockScrollAnimatorEnabled is used for logging when scrollbars
        get events, so fix the name. It's a subclass of ScrollbarsController.

        * page/FrameView.cpp:
        (WebCore::FrameView::mockScrollbarsControllerEnabled const):
        (WebCore::FrameView::logMockScrollbarsControllerMessage const):
        (WebCore::FrameView::mockScrollAnimatorEnabled const): Deleted.
        (WebCore::FrameView::logMockScrollAnimatorMessage const): Deleted.
        * page/FrameView.h:
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::scrollbarsController const):
        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::mockScrollbarsControllerEnabled const):
        (WebCore::ScrollableArea::logMockScrollbarsControllerMessage const):
        (WebCore::ScrollableArea::mockScrollAnimatorEnabled const): Deleted.
        (WebCore::ScrollableArea::logMockScrollAnimatorMessage const): Deleted.
        * platform/mock/ScrollbarsControllerMock.h:
        * rendering/RenderLayerScrollableArea.cpp:
        (WebCore::RenderLayerScrollableArea::mockScrollbarsControllerEnabled const):
        (WebCore::RenderLayerScrollableArea::logMockScrollbarsControllerMessage const):
        (WebCore::RenderLayerScrollableArea::mockScrollAnimatorEnabled const): Deleted.
        (WebCore::RenderLayerScrollableArea::logMockScrollAnimatorMessage const): Deleted.
        * rendering/RenderLayerScrollableArea.h:
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::mockScrollbarsControllerEnabled const):
        (WebCore::RenderListBox::logMockScrollbarsControllerMessage const):
        (WebCore::RenderListBox::mockScrollAnimatorEnabled const): Deleted.
        (WebCore::RenderListBox::logMockScrollAnimatorMessage const): Deleted.
        * rendering/RenderListBox.h:

2021-12-18  Chris Dumez  <cdumez@apple.com>

        Convert ProtectionSpace enums into enum classes
        https://bugs.webkit.org/show_bug.cgi?id=234455

        Reviewed by Alex Christensen.

        * platform/network/CredentialStorage.cpp:
        (WebCore::CredentialStorage::set):
        (WebCore::CredentialStorage::removeCredentialsWithOrigin):
        (WebCore::CredentialStorage::originsWithCredentials const):
        * platform/network/ProtectionSpace.h:
        (WebCore::ProtectionSpace::ProtectionSpace):
        * platform/network/ProtectionSpaceBase.cpp:
        (WebCore::ProtectionSpaceBase::ProtectionSpaceBase):
        (WebCore::ProtectionSpaceBase::isProxy const):
        (WebCore::ProtectionSpaceBase::receivesCredentialSecurely const):
        (WebCore::ProtectionSpaceBase::isPasswordBased const):
        * platform/network/ProtectionSpaceBase.h:
        (WebCore::ProtectionSpaceBase::serverType const):
        (WebCore::ProtectionSpaceBase::authenticationScheme const):
        * platform/network/cf/AuthenticationCF.cpp:
        (WebCore::createCF):
        (WebCore::core):
        * platform/network/cf/ProtectionSpaceCFNet.h:
        (WebCore::ProtectionSpace::ProtectionSpace):
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::receivedCredential):
        * platform/network/cf/SocketStreamHandleImplCFNet.cpp:
        (WebCore::authenticationSchemeFromAuthenticationMethod):
        * platform/network/cocoa/ProtectionSpaceCocoa.h:
        (WebCore::ProtectionSpace::ProtectionSpace):
        * platform/network/cocoa/ProtectionSpaceCocoa.mm:
        (WebCore::type):
        (WebCore::scheme):
        (WebCore::ProtectionSpace::nsSpace const):
        * platform/network/curl/AuthenticationChallenge.h:
        * platform/network/curl/AuthenticationChallengeCurl.cpp:
        (WebCore::AuthenticationChallenge::protectionSpaceServerTypeFromURI):
        (WebCore::AuthenticationChallenge::protectionSpaceForServerTrust):
        (WebCore::AuthenticationChallenge::authenticationSchemeFromCurlAuth):
        * platform/network/curl/CurlRequest.cpp:
        (WebCore::CurlRequest::setAuthenticationScheme):
        * platform/network/curl/CurlRequest.h:
        * platform/network/curl/ProtectionSpaceCurl.h:
        (WebCore::ProtectionSpace::ProtectionSpace):
        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::platformLoadResourceSynchronously):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::receivedCredential):
        * platform/network/soup/AuthenticationChallengeSoup.cpp:
        (WebCore::protectionSpaceServerTypeFromURL):
        (WebCore::protectionSpaceFromSoupAuthAndURL):
        (WebCore::protectionSpaceForClientCertificate):
        (WebCore::protectionSpaceForClientCertificatePassword):
        * platform/network/soup/NetworkStorageSessionSoup.cpp:
        (WebCore::schemeFromProtectionSpaceServerType):
        (WebCore::authTypeFromProtectionSpaceAuthenticationScheme):

2021-12-18  Antti Koivisto  <antti@apple.com>

        Remove unused :-internal-direct-focus pseudo-class
        https://bugs.webkit.org/show_bug.cgi?id=234431

        Reviewed by Alexey Shvayka.

        It was replaced by :focus-visible on the user-agent stylesheet.

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::selectorText const):
        * css/CSSSelector.h:
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne const):
        * css/SelectorCheckerTestFunctions.h:
        (WebCore::matchesLegacyDirectFocusPseudoClass):
        (WebCore::matchesFocusVisiblePseudoClass):
        (WebCore::matchesDirectFocusPseudoClass): Deleted.
        * css/SelectorPseudoClassAndCompatibilityElementMap.in:
        * css/parser/CSSSelectorParser.cpp:
        (WebCore::CSSSelectorParser::consumePseudo):
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::addPseudoClassType):
        * dom/Element.cpp:
        (WebCore::Element::setFocus):
        * style/RuleSet.cpp:
        (WebCore::Style::RuleSet::addRule):

2021-12-17  Wenson Hsieh  <wenson_hsieh@apple.com>

        Hide viewport-constrained elements that are detected by ModalContainerObserver
        https://bugs.webkit.org/show_bug.cgi?id=234216

        Reviewed by Tim Horton.

        Make a small Style::Adjuster tweak to hide (i.e. set `display: none;`) on an element that is tagged as the
        current "modal container" on ModalContainerObserver. See #234214 for more details.

        * page/ModalContainerObserver.cpp:
        (WebCore::ModalContainerObserver::updateModalContainerIfNeeded):

        Additionally invalidate style when setting `m_container` here, so that the style adjuster can kick in and set
        `display: none;` on a modal container after it is detected.

        (WebCore::ModalContainerObserver::shouldHide):
        * page/ModalContainerObserver.h:
        * style/StyleAdjuster.cpp:
        (WebCore::Style::Adjuster::adjust const):

2021-12-17  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add support for detecting modal containers that contain a given search term
        https://bugs.webkit.org/show_bug.cgi?id=234214

        Reviewed by Tim Horton and Devin Rousso.

        Introduce ModalContainerObserver (a helper class that searches for a substring vended by the client layer in
        text inside viewport-constrained renderers). If found, we keep track of the viewport-constrained container with
        the matching text for use in future patches.

        There is no change in behavior yet.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::modalContainerObserver):

        Returns the document's ModalContainerObserver, creating it only if needed (per the modal container observation
        policy vended by the client).

        (WebCore::Document::modalContainerObserverIfExists const):
        * dom/Document.h:
        * page/ChromeClient.h:
        (WebCore::ChromeClient::searchStringForModalContainerObserver const):
        * page/FrameView.cpp:
        (WebCore::FrameView::performPostLayoutTasks):

        Add a hook to create and call into ModalContainerObserver to search for a modal container (if necessary).

        * page/ModalContainerObserver.cpp: Added.
        (WebCore::ModalContainerObserver::isNeededFor):

        Add a helper method to determine whether this "modal container observer" should be created and used for the
        current document.

        (WebCore::matchesSearchTerm):
        (WebCore::ModalContainerObserver::updateModalContainerIfNeeded):

        Iterates through all viewport-constrained render objects in the FrameView, in search of one that matches the
        search term given by the client. This currently ensures that we only search any viewport-constrained element at
        most once by maintaining a weak `m_elementsToIgnoreWhenSearching` set, but we may need a mechanism in the future
        to remove elements from this set upon changing text content.

        * page/ModalContainerObserver.h: Added.

2021-12-17  Myles C. Maxfield  <mmaxfield@apple.com>

        Add comment to r287208.
        https://bugs.webkit.org/show_bug.cgi?id=234428

        Unreviewed.

        No new tests because there is no behavior change.

        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::applyCSSVisibilityRules):

2021-12-17  Myles C. Maxfield  <mmaxfield@apple.com>

        Refactor WidthIterator::applyCSSVisibilityRules() to be a little more elegant
        https://bugs.webkit.org/show_bug.cgi?id=234428

        Reviewed by Alan Bujtas.

        This adds a few lambda operations in this function:
        - adjustForSyntheticBold()
        - clobberGlyph()
        - clobberAdvance()
        - deleteGlyph()
        And then updates the rest of the function to use those operations. I think this makes
        the body of the function a little easier to understand, because the code uses a higher
        level of abstraction. It shoudln't be any slower, though, because the lambdas can all
        be inlined to the same code that was there before.

        No new tests because there is no behavior change.

        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::applyCSSVisibilityRules):
        (WebCore::WidthIterator::adjustForSyntheticBold): Deleted.
        * platform/graphics/WidthIterator.h:

2021-12-17  Sihui Liu  <sihui_liu@apple.com>

        Add custom copy() method for Ref<T> to CrossThreadCopier
        https://bugs.webkit.org/show_bug.cgi?id=234411

        Reviewed by Youenn Fablet.

        * Modules/filesystemaccess/FileSystemStorageConnection.h:
        * Modules/filesystemaccess/WorkerFileSystemStorageConnection.cpp:
        (WebCore::WorkerFileSystemStorageConnection::getFileHandle):
        (WebCore::WorkerFileSystemStorageConnection::getDirectoryHandle):
        (WebCore::WorkerFileSystemStorageConnection::getHandle):
        (WebCore::WorkerFileSystemStorageConnection::didGetHandleWithType): Deleted.
        * Modules/filesystemaccess/WorkerFileSystemStorageConnection.h:

2021-12-17  Myles C. Maxfield  <mmaxfield@apple.com>

        Deduplicate code in RenderText::computePreferredLogicalWidths()
        https://bugs.webkit.org/show_bug.cgi?id=234424

        Reviewed by Alan Bujtas.

        We have 3 places with code of this form:

        float result;
        std::optional<float> wordTrailingSpaceWidth;
        if (currentCharacterIsSpace)
            wordTrailingSpaceWidth = wordTrailingSpace.width(fallbackFonts);
        if (wordTrailingSpaceWidth)
            result = measureText(startingCharacterIndex, length + 1) - wordTrailingSpaceWidth.value();
        else
            result = measureText(startingCharacterIndex, length);

        This patch simply deduplicates this logic, and puts it into a single function:
        RenderText::measureTextConsideringPossibleTrailingSpace(). Because the different places which call it
        use different text measurement functions, this function accepts a "measure text" callback.

        No new tests because there is no behavior change.

        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderText.cpp:
        (WebCore::RenderText::widthFromCacheConsideringPossibleTrailingSpace const):
        (WebCore::RenderText::maxWordFragmentWidth):
        (WebCore::RenderText::computePreferredLogicalWidths):
        * rendering/RenderText.h:
        * rendering/RenderTextInlines.h: Added. This function needs to be able to see into WordTrailingSpace,
        but we shouldn't be adding any more #includes to RenderText.h because doing so will increase the build time.
        So, instead, we can move this templated function to a new Inlines header, and have callers include that
        header.
        (WebCore::RenderText::measureTextConsideringPossibleTrailingSpace):
        * rendering/line/BreakingContext.h:
        (WebCore::BreakingContext::textWidthConsideringPossibleTrailingSpace):
        (WebCore::BreakingContext::computeAdditionalBetweenWordsWidth):
        (WebCore::WordTrailingSpace::WordTrailingSpace): Deleted.
        (WebCore::WordTrailingSpace::width): Deleted.
        * rendering/line/WordTrailingSpace.h: Added. BreakingContext.h defines WordTrailingSpace, but it needs
        to be able to call measureTextConsideringPossibleTrailingSpace(), which needs to be able to see inside
        WordTrailingSpace. Avoid the circular dependency by splitting out WordTrailingSpace into its own file.
        (WebCore::WordTrailingSpace::WordTrailingSpace):
        (WebCore::WordTrailingSpace::width):

2021-12-17  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Use the inline box's direction to decide if start/end decorations should be applied on first/last box
        https://bugs.webkit.org/show_bug.cgi?id=234423

        Reviewed by Antti Koivisto.

        * layout/formattingContexts/inline/InlineDisplayContentBuilder.cpp:
        (WebCore::Layout::InlineDisplayContentBuilder::adjustVisualGeometryForDisplayBox):

2021-12-17  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Adjust the box geometry for atomic/generic inline level boxes in bidi content
        https://bugs.webkit.org/show_bug.cgi?id=234419

        Reviewed by Antti Koivisto.

        Both the display box and the BoxGeometry need to be updated while adjusting the content position with
        the inline box offsets.

        * layout/formattingContexts/inline/InlineDisplayContentBuilder.cpp:
        (WebCore::Layout::InlineDisplayContentBuilder::adjustVisualGeometryForDisplayBox):

2021-12-17  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Let computeIsFirstIsLastBoxForInlineContent update the IsFirstForLayoutBox on the display boxes
        https://bugs.webkit.org/show_bug.cgi?id=234422

        Reviewed by Antti Koivisto.

        Currently we pre-compute these values and cache them on the display boxes (for later use in adjustVisualGeometryForDisplayBox).

        * layout/formattingContexts/inline/InlineDisplayContentBuilder.cpp:
        (WebCore::Layout::InlineDisplayContentBuilder::adjustVisualGeometryForDisplayBox):
        (WebCore::Layout::InlineDisplayContentBuilder::processBidiContent):
        * layout/formattingContexts/inline/InlineDisplayContentBuilder.h:

2021-12-17  Myles C. Maxfield  <mmaxfield@apple.com>

        Refactor hyphenation logic in RenderText::computePreferredLogicalWidths()
        https://bugs.webkit.org/show_bug.cgi?id=234421

        Reviewed by Alan Bujtas.

        The hyphenation logic in RenderText::computePreferredLogicalWidths() was split across two functions.
        If you consider the word "ABC-DEF-GHI" (where the '-' characters are hyphenation opportunities), one
        function, maxWordFragmentWidth() was responsible for calculating the width of "ABC-" and "DEF-" but
        not "GHI". RenderText::computePreferredLogicalWidths() called that function, and after it returned,
        would then calculate the width of "GHI", and compare that to the width returned by
        maxWordFragmentWidth(). A much simpler design would be to have one function, maxWordFragmentWidth(),
        handle all the hyphenation logic, and do all the calculation necessary to just return a single value
        to RenderText::computePreferredLogicalWidths().

        No new tests because there is no behavior change.

        * rendering/RenderText.cpp:
        (WebCore::RenderText::maxWordFragmentWidth):
        (WebCore::RenderText::computePreferredLogicalWidths):
        (WebCore::maxWordFragmentWidth): Deleted.
        * rendering/RenderText.h:

2021-12-17  Gabriel Nava Marino  <gnavamarino@apple.com>

        null ptr deref in WebCore::findPlaceForCounter
        https://bugs.webkit.org/show_bug.cgi?id=234375

        Reviewed by Alan Bujtas.

        Test: fast/css/counters/findPlaceForCounter-parent-renderer-crash.html

        When the current renderer's element is an HTML document and root of the tree, parentOrPseudoHostElement can return a nullptr,
        so we need to check for nullptr before trying to access the renderer() of the Element pointer it returns.


        * rendering/RenderCounter.cpp:
        (WebCore::findPlaceForCounter):

2021-12-17  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Line spanning inline items should use InlineItem::opaqueBidiLevel
        https://bugs.webkit.org/show_bug.cgi?id=234417

        Reviewed by Antti Koivisto.

        The visual order of the non-empty inline boxes are driven by their content and not by
        their guessed bidi levels.

        * layout/formattingContexts/inline/InlineLineBuilder.cpp:
        (WebCore::Layout::LineBuilder::initialize):

2021-12-17  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Inline boxes set direction for both their content and their decoration unlike other inline level elements
        https://bugs.webkit.org/show_bug.cgi?id=234418

        Reviewed by Antti Koivisto.

        <div>
          <span dir=rtl style="border-inline-start: 10px solid yellow;">
            <span dir=ltr style="border-inline-start: 10px solid green;">
              <img style="border-inline-start: 10px solid blue;">
            </span>
          </span
        </div>

        produces a "green/blue/yellow" pattern in visual order.

        * layout/formattingContexts/inline/InlineDisplayContentBuilder.cpp:
        (WebCore::Layout::InlineDisplayContentBuilder::adjustVisualGeometryForDisplayBox):
        * layout/integration/LayoutIntegrationLineLayout.cpp:
        (WebCore::LayoutIntegration::LineLayout::updateLayoutBoxDimensions):
        (WebCore::LayoutIntegration::LineLayout::updateInlineBoxDimensions):

2021-12-17  Antoine Quint  <graouts@webkit.org>

        ActiveDOMObject::suspendIfNeeded() should not be called within constructors
        https://bugs.webkit.org/show_bug.cgi?id=233945

        Reviewed by Chris Dumez.

        Step 4 where we convert the only remaining call to suspendIfNeeded() in a constructor, AudioScheduledSourceNode,
        to be in create() methods, in this case AudioScheduledSourceNode subclasses. This was the final step, all 145
        calls to ActiveDOMObject::suspendIfNeeded() have been audited to not be made within a constructor.

        * Modules/webaudio/AudioBufferSourceNode.cpp:
        (WebCore::AudioBufferSourceNode::create):
        * Modules/webaudio/AudioBufferSourceNode.h:
        * Modules/webaudio/AudioScheduledSourceNode.cpp:
        (WebCore::AudioScheduledSourceNode::AudioScheduledSourceNode):
        * Modules/webaudio/AudioScheduledSourceNode.h:
        * Modules/webaudio/ConstantSourceNode.cpp:
        (WebCore::ConstantSourceNode::create):
        * Modules/webaudio/OscillatorNode.cpp:
        (WebCore::OscillatorNode::create):
        * Modules/webaudio/OscillatorNode.h:

2021-12-17  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Simple RTL content may need visual reordering
        https://bugs.webkit.org/show_bug.cgi?id=234380

        Reviewed by Darin Adler and Antti Koivisto.

        Addressing post-commit comment (r287142).

        * layout/formattingContexts/inline/InlineItemsBuilder.cpp:
        (WebCore::Layout::InlineItemsBuilder::breakAndComputeBidiLevels):

2021-12-17  Philippe Normand  <pnormand@igalia.com>

        [GStreamer][WebRTC] Huge memory leak
        https://bugs.webkit.org/show_bug.cgi?id=234134

        Reviewed by Xabier Rodriguez-Calvar.

        The main issue was RealtimeOutgoingVideoSourceLibWebRTC leaking GstSamples. Fixing this lead
        me to further clean-ups in the GstSample<->LibWebRTCVideoFrame handling. Native frames
        should not consume GstSamples, but reference them, otherwise there are crashes where the
        dangling GstSamples would be passed to the libwebrtc video decoder...

        Also the video decoders were not reporting their initialization status correctly,
        WEBRTC_VIDEO_CODEC_OK is 0 hence false...

        * platform/graphics/gstreamer/MediaSampleGStreamer.cpp:
        (WebCore::MediaSampleGStreamer::MediaSampleGStreamer):
        (WebCore::MediaSampleGStreamer::initializeFromBuffer):
        * platform/graphics/gstreamer/MediaSampleGStreamer.h:
        (WebCore::MediaSampleGStreamer::createWrappedSample):
        * platform/mediastream/libwebrtc/gstreamer/GStreamerVideoDecoderFactory.cpp:
        (WebCore::GStreamerVideoDecoder::pullSample):
        * platform/mediastream/libwebrtc/gstreamer/GStreamerVideoEncoderFactory.cpp:
        * platform/mediastream/libwebrtc/gstreamer/GStreamerVideoFrameLibWebRTC.cpp:
        (WebCore::convertLibWebRTCVideoFrameToGStreamerSample):
        (WebCore::convertGStreamerSampleToLibWebRTCVideoFrame):
        (WebCore::GStreamerVideoFrameLibWebRTC::create):
        (WebCore::GStreamerSampleFromLibWebRTCVideoFrame): Deleted.
        (WebCore::LibWebRTCVideoFrameFromGStreamerSample): Deleted.
        * platform/mediastream/libwebrtc/gstreamer/GStreamerVideoFrameLibWebRTC.h:
        (WebCore::GStreamerVideoFrameLibWebRTC::GStreamerVideoFrameLibWebRTC):
        (WebCore::GStreamerVideoFrameLibWebRTC::getSample const):
        (WebCore::GStreamerVideoFrameLibWebRTC::takeSample): Deleted.
        * platform/mediastream/libwebrtc/gstreamer/RealtimeIncomingVideoSourceLibWebRTC.cpp:
        (WebCore::RealtimeIncomingVideoSourceLibWebRTC::OnFrame):
        * platform/mediastream/libwebrtc/gstreamer/RealtimeOutgoingVideoSourceLibWebRTC.cpp:
        (WebCore::RealtimeOutgoingVideoSourceLibWebRTC::videoSampleAvailable):

2021-12-17  Antoine Quint  <graouts@webkit.org>

        ActiveDOMObject::suspendIfNeeded() should not be called within constructors
        https://bugs.webkit.org/show_bug.cgi?id=233945

        Reviewed by Darin Adler.

        Step 3 where we convert almost all remaining calls to suspendIfNeeded() in constructors to be in create() methods.
        This required adding such a method to ServiceWorkerContainer. The final call left is in the AudioScheduledSourceNode
        constructor, but an earlier version of this patch failed a lot of webaudio tests on EWS so I suspect my attempted fix
        was wrong.

        * Modules/entriesapi/FileSystemDirectoryEntry.cpp:
        (WebCore::FileSystemDirectoryEntry::create):
        * Modules/entriesapi/FileSystemDirectoryEntry.h:
        * Modules/entriesapi/FileSystemEntry.cpp:
        (WebCore::FileSystemEntry::FileSystemEntry):
        * Modules/entriesapi/FileSystemEntry.h:
        * Modules/entriesapi/FileSystemFileEntry.cpp:
        (WebCore::FileSystemFileEntry::create):
        * Modules/entriesapi/FileSystemFileEntry.h:
        * Modules/fetch/FetchBodyOwner.cpp:
        (WebCore::FetchBodyOwner::FetchBodyOwner):
        * Modules/fetch/FetchBodyOwner.h:
        * Modules/fetch/FetchRequest.cpp:
        (WebCore::FetchRequest::create):
        (WebCore::FetchRequest::clone):
        * Modules/fetch/FetchRequest.h:
        * Modules/fetch/FetchResponse.cpp:
        (WebCore::FetchResponse::create):
        (WebCore::FetchResponse::error):
        (WebCore::FetchResponse::redirect):
        (WebCore::FetchResponse::fetch):
        * Modules/filesystemaccess/FileSystemDirectoryHandle.cpp:
        (WebCore::FileSystemDirectoryHandle::create):
        * Modules/filesystemaccess/FileSystemFileHandle.cpp:
        (WebCore::FileSystemFileHandle::create):
        * Modules/filesystemaccess/FileSystemHandle.cpp:
        (WebCore::FileSystemHandle::FileSystemHandle):
        * Modules/filesystemaccess/FileSystemHandle.h:
        * Modules/mediasource/SourceBufferList.cpp:
        (WebCore::SourceBufferList::create):
        (WebCore::SourceBufferList::SourceBufferList):
        * Modules/mediasource/SourceBufferList.h:
        * Modules/mediastream/MediaDevices.cpp:
        (WebCore::MediaDevices::MediaDevices):
        (WebCore::MediaDevices::create):
        * Modules/mediastream/RTCDTMFSender.cpp:
        (WebCore::RTCDTMFSender::create):
        (WebCore::RTCDTMFSender::RTCDTMFSender):
        * Modules/mediastream/RTCDTMFSender.h:
        * Modules/mediastream/RTCDtlsTransport.cpp:
        (WebCore::RTCDtlsTransport::create):
        (WebCore::RTCDtlsTransport::RTCDtlsTransport):
        * Modules/mediastream/RTCDtlsTransport.h:
        * Modules/mediastream/RTCIceTransport.cpp:
        (WebCore::RTCIceTransport::create):
        (WebCore::RTCIceTransport::RTCIceTransport):
        * Modules/mediastream/RTCIceTransport.h:
        (WebCore::RTCIceTransport::create): Deleted.
        * Modules/mediastream/RTCRtpSFrameTransform.cpp:
        (WebCore::RTCRtpSFrameTransform::create):
        (WebCore::RTCRtpSFrameTransform::RTCRtpSFrameTransform):
        * Modules/mediastream/RTCRtpSFrameTransform.h:
        (WebCore::RTCRtpSFrameTransform::create): Deleted.
        * Modules/mediastream/RTCSctpTransport.cpp:
        (WebCore::RTCSctpTransport::create):
        (WebCore::RTCSctpTransport::RTCSctpTransport):
        * Modules/mediastream/RTCSctpTransport.h:
        * Modules/paymentrequest/PaymentResponse.cpp:
        (WebCore::PaymentResponse::finishConstruction):
        * Modules/webdatabase/DatabaseContext.cpp:
        (WebCore::DatabaseContext::DatabaseContext):
        * Modules/webdatabase/DatabaseManager.cpp:
        (WebCore::DatabaseManager::databaseContext):
        * html/ImageBitmap.cpp:
        * page/NavigatorBase.cpp:
        (WebCore::NavigatorBase::serviceWorker):
        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::create):
        (WebCore::ServiceWorkerContainer::ServiceWorkerContainer):
        * workers/service/ServiceWorkerContainer.h:

2021-12-16  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        REGRESSION(r287138) [GLIB] Build failure with GCC 8 and 9 in std::array to Span conversion
        https://bugs.webkit.org/show_bug.cgi?id=234412

        Reviewed by Darin Adler.

        GCC < 10 and Clang < 7 have problems doing the conversion of the value if its marked const.

        No new tests, is a build fix.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::inheritsPresentationalRole const):

2021-12-16  Alex Christensen  <achristensen@webkit.org>

        Remove more NPAPI plugin code
        https://bugs.webkit.org/show_bug.cgi?id=234379

        Reviewed by Anders Carlsson.

        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::appendFormData): Deleted.
        * html/HTMLObjectElement.h:
        * page/Page.cpp:
        (WebCore::Page::setSessionID):
        * plugins/PluginViewBase.h:
        (WebCore::PluginViewBase::storageBlockingStateChanged):
        (WebCore::PluginViewBase::privateBrowsingStateChanged): Deleted.
        (WebCore::PluginViewBase::getFormValue): Deleted.
        (WebCore::PluginViewBase::shouldNotAddLayer const): Deleted.
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateConfiguration):

2021-12-16  Jer Noble  <jer.noble@apple.com>

        Add an experimental VideoTrackConfiguration class and accessor on VideoTrack
        https://bugs.webkit.org/show_bug.cgi?id=230841
        <rdar://problem/83837876>

        Reviewed by Eric Carlson.

        Follow up patch to address post-review comments.

        Darin pointed out that CFStringCompare() is likely more expensive than
        CFEqual() as the former determines order as well as equality, and a 
        safeCFEqual() already exists. And while safeCFEqual() has different
        behavior than the safeCFStringEquals() lambda when passed two null values,
        in every case where safeCFStringEquals() is used, the first parameter has
        already been nil-checked. So safeCFStringEquals() is unnecessary and
        safeCFEqual() should be used instead.

        * platform/graphics/avfoundation/FormatDescriptionUtilities.cpp:
        (WebCore::colorSpaceFromFormatDescription):

2021-12-16  Youenn Fablet  <youenn@apple.com>

        Allow AudioSampleDataSource to increase/decrease buffered data progressively
        https://bugs.webkit.org/show_bug.cgi?id=233422

        Reviewed by Eric Carlson.

        AudioSampleDataSource does the link between push audio sources and pull audio sinks.
        As such, it needs to do buffering. If buffering is too small, data may be missing and audio glitches will be heard.
        If buffering is too large, latency will be added which might be undesirable, especially if audio is being played with video.
        We generally want buffered audio to stay within a certain range.

        To make this happen, when buffering is too high, we convert the data with a slightly lower sample rate to push less samples, until we are back to normal buffering.
        Conversely, when buffering is too low, we convert the data with a slightly higher sample rate to push more samples, until we are back to normal buffering.
        We do this with 3 converters that we select based on amount of buffered data.
        This behavior is encapsulated in AudioSampleDataConverter.

        We simplify AudioSampleDataSource implementation by always recomputing the sample offset when there is not enough data.
        In that case, we wait for 50ms of buffered data, which is the average buffer we expect, to restart pulling data.
        All values owned by AudioSampleDataSource (m_expectedNextPushedSampleTimeValue, m_converterInputOffset, m_converterInputOffset, m_outputSampleOffset, m_lastBufferedAmount)
        are all in the outgoing timeline/sampleRate.

        This adaptation is only enabled when AudioSampleDataSource::pullSamples is called.
        For pullAvailableSamplesAsChunks and pullAvailableSampleChunk, the puller is supposed to be in sync with the pusher.
        For that reason, we make sure to always write the expected number of audio frames when pullSamples is called, even if converter fails.

        We fix a potential busy loop in AudioSampleDataSource::pullAvailableSamplesAsChunks in case endFrame is lower than startFrame, which is computed from timeStamp input parameter.

        Update MockAudioSharedUnit to be closer to a real source by increasing the queue priority and schedule rendering tasks from the queue instead of relying on
        a main thread timer which can have hiccups.

        Manually tested.

        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/audio/cocoa/AudioSampleDataConverter.h: Added.
        * platform/audio/cocoa/AudioSampleDataConverter.mm: Added.
        * platform/audio/cocoa/AudioSampleDataSource.h:
        * platform/audio/cocoa/AudioSampleDataSource.mm:
        * platform/mediastream/mac/MockAudioSharedUnit.h:
        * platform/mediastream/mac/MockAudioSharedUnit.mm:

2021-12-16  Sihui Liu  <sihui_liu@apple.com>

        REGRESSION (r286601): storage/filesystemaccess/sync-access-handle-read-write-worker.html and file-system-access/sandboxed_FileSystemSyncAccessHandle-truncate.https.tentative.worker.html are consistently failing
        https://bugs.webkit.org/show_bug.cgi?id=234271
        <rdar://problem/86434111>

        Reviewed by Youenn Fablet.

        When context stops, FileSystemHandle sets its state to closed. A closed FileSystemHandle will return early on
        operations including closing sync access handle (asking backend to close handle and releasing lock). If backend 
        thinks existing access handle is not closed, it will prevent new access handle from being created, and this 
        leads to the test failure.

        The problem is that backend isn't notified about the close of a handle: we only set the close state in 
        FileSystemHandle. To fix the issue, let's make sure FileSystemStorageConnection::closeHandle is called when 
        context stops and when FileSystemHandle is detroyed.

        * Headers.cmake:
        * Modules/filesystemaccess/FileSystemDirectoryHandle.cpp:
        (WebCore::FileSystemDirectoryHandle::getFileHandle):
        (WebCore::FileSystemDirectoryHandle::getDirectoryHandle):
        (WebCore::FileSystemDirectoryHandle::getHandle):
        * Modules/filesystemaccess/FileSystemFileHandle.cpp:
        (WebCore::FileSystemFileHandle::createSyncAccessHandle):
        (WebCore::FileSystemFileHandle::closeSyncAccessHandle):
        (WebCore::FileSystemFileHandle::close): Deleted.
        * Modules/filesystemaccess/FileSystemFileHandle.h:
        * Modules/filesystemaccess/FileSystemHandle.cpp:
        (WebCore::FileSystemHandle::~FileSystemHandle):
        (WebCore::FileSystemHandle::close):
        (WebCore::FileSystemHandle::stop):
        * Modules/filesystemaccess/FileSystemHandle.h:
        * Modules/filesystemaccess/FileSystemHandleCloseScope.h: Added.
        (WebCore::FileSystemHandleCloseScope::create):
        (WebCore::FileSystemHandleCloseScope::~FileSystemHandleCloseScope):
        (WebCore::FileSystemHandleCloseScope::release):
        (WebCore::FileSystemHandleCloseScope::FileSystemHandleCloseScope):
        * Modules/filesystemaccess/FileSystemStorageConnection.h:
        * Modules/filesystemaccess/FileSystemSyncAccessHandle.cpp:
        (WebCore::FileSystemSyncAccessHandle::closeBackend):
        * Modules/filesystemaccess/WorkerFileSystemStorageConnection.cpp:
        (WebCore::WorkerFileSystemStorageConnection::getFileHandle):
        (WebCore::WorkerFileSystemStorageConnection::getDirectoryHandle):
        (WebCore::WorkerFileSystemStorageConnection::didGetHandle):
        (WebCore::WorkerFileSystemStorageConnection::closeSyncAccessHandle):
        (WebCore::WorkerFileSystemStorageConnection::getHandle):
        (WebCore::WorkerFileSystemStorageConnection::close): Deleted.
        * Modules/filesystemaccess/WorkerFileSystemStorageConnection.h:
        * WebCore.xcodeproj/project.pbxproj:

2021-12-16  Adrian Perez de Castro  <aperez@igalia.com>

        Non-unified build fixes, late-ish December 2021 edition
        https://bugs.webkit.org/show_bug.cgi?id=234392

        Unreviewed non-unified build fixes.

        No new tests needed.

        * Modules/notifications/NotificationData.h: Add missing wtf/text/WTFString.h and <optional>
        header inclusions.
        * style/HasSelectorFilter.cpp: Add missing StyleRule.h header inclusion.
        * style/HasSelectorFilter.h: Add missing forward declaration for WebCore::Element.
        * workers/WorkerConsoleClient.h: Add missing JSC:: namespace prefix to usage of
        JSC::MessageType.

2021-12-16  Brent Fulgham  <bfulgham@apple.com>

        Rename forEachFrameFromMainFrame to forEachFrame
        https://bugs.webkit.org/show_bug.cgi?id=234396
        <rdar://problem/86581926>

        Reviewed by Geoffrey Garen.

        Follow-up to r287110: Switch method naming to match 'forEachDocument'.

        * page/Page.cpp:
        (WebCore::Page::~Page):
        (WebCore::Page::notifyToInjectUserScripts):
        (WebCore::Page::forEachFrame):
        (WebCore::Page::forEachFrameFromMainFrame): Deleted.
        * page/Page.h:

2021-12-16  John Cunningham  <johncunningham@apple.com>

        [GPUP] Create WebGL context with task id token
        https://bugs.webkit.org/show_bug.cgi?id=234138

        Reviewed by Kimmo Kinnunen.

        No new tests.

        Use EGL_ANGLE_metal_create_context_ownership_identity to create
        a WebGL context when GPUP and WebGL in GPUP is enabled.

        * platform/graphics/angle/GraphicsContextGLANGLE.h:
        * platform/graphics/cocoa/GraphicsContextGLCocoa.mm:
        (WebCore::GraphicsContextGLCocoa::GraphicsContextGLCocoa):
        (WebCore::GraphicsContextGLANGLE::GraphicsContextGLANGLE):

2021-12-16  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Simple RTL content may need visual reordering
        https://bugs.webkit.org/show_bug.cgi?id=234380

        Reviewed by Antti Koivisto.

        It turns out that certain unicode categories (e.g. punctuation) could require reordering even when
        the content is "simple" (8bit).

        * layout/formattingContexts/inline/InlineItemsBuilder.cpp:
        (WebCore::Layout::InlineItemsBuilder::breakAndComputeBidiLevels):

2021-12-16  Antoine Quint  <graouts@webkit.org>

        Remove the declaration for an unimplemented AudioBufferSourceNode::create(BaseAudioContext&, float) method
        https://bugs.webkit.org/show_bug.cgi?id=234388

        Reviewed by Anders Carlsson.

        * Modules/webaudio/AudioBufferSourceNode.h:

2021-12-16  Andres Gonzalez  <andresg_22@apple.com>

        Clear AXObjectCache::m_notificationsToPost after moving in notificationPostTimerFired.
        https://bugs.webkit.org/show_bug.cgi?id=234355
        <rdar://problem/86532703>

        Reviewed by Chris Fleizach.

        Covered by existing tests.

        This memeber variable must be clear after moving its resources to a
        local variable, otherwise this may cause undefined behavior.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::notificationPostTimerFired):
        (WebCore::AXObjectCache::passwordNotificationPostTimerFired):
        Same problem here with m_passwordNotificationsToPost.

2021-12-15  Darin Adler  <darin@apple.com>

        Many call sites use makeNeverDestroyed, but could instead take advantage of the NeverDestroyed deduction guide
        https://bugs.webkit.org/show_bug.cgi?id=234350

        Reviewed by Sam Weinig.

        * Modules/encryptedmedia/legacy/LegacyCDM.cpp:
        (WebCore::installedCDMFactories): Use NeverDestroyed directly instead of via makeNeverDestroyed.

        * Modules/mediasession/MediaSession.cpp:
        (WebCore::platformCommandForMediaSessionAction): Use SortedArrayMap, obviating the need for
        any use of NeverDestroyed.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::inheritsPresentationalRole const): Use Span instead of
        Vector, allowing us to use constexpr arrays rather than allocating memory for a Vector.

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeNames]): Use deduction.
        * dom/make_names.pl:
        (printFactoryCppFile): Ditto.
        (printWrapperFactoryCppFile): Ditto.

        * editing/EditingStyle.cpp:
        (WebCore::htmlElementEquivalents): Return a Span instead of a Vector&,
        allowing us to use const arrays rather than allocating memory for a Vector.
        (WebCore::htmlAttributeEquivalents): Ditto.

        * editing/FormatBlockCommand.cpp:
        (WebCore::isElementForFormatBlock): Use deduction.
        * editing/RemoveFormatCommand.cpp:
        (WebCore::isElementForRemoveFormatCommand): Ditto.

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::isProhibitedParagraphChild): Use deduction, also change the tags array
        to be a constexpr array so we don't have to use read/write memory for it.

        * editing/cocoa/HTMLConverter.mm:
        (WebDefaultFont): Use deduction.
        (defaultParagraphStyle): Ditto.
        * html/Autofill.cpp:
        (WebCore::fieldNameMap): Ditto.

        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::isCaseSensitiveAttribute): Use deduction, also change
        the names array to be a constexpr array so we don't have to use read/write memory for it.

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::eventNameForEventHandlerAttribute): Use std::array deduction
        so we don't have to write out the LazyNeverDestroyed type here.

        * html/HTMLObjectElement.cpp:
        (WebCore::preventsParentObjectFromExposure): Use deduction.
        * html/InputType.cpp:
        (WebCore::InputType::create): Ditto.
        * loader/ContentFilter.cpp:
        (WebCore::blockedPageURL): Ditto.
        * page/DebugPageOverlays.cpp:
        (WebCore::touchEventRegionColors): Ditto.
        * page/PerformanceUserTiming.cpp:
        (WebCore::restrictedMarkNamesToNavigationTimingFunctionMap): Ditto.

        * platform/LegacySchemeRegistry.cpp:
        (WebCore::add): Use Span instead of Vector, allowing us to use constexpr arrays
        rather thna allocating memory for a Vector.
        (WebCore::makeNeverDestroyedSchemeSet): Ditto.
        (WebCore::allBuiltinSchemes): Ditto. Also use deduction.
        (WebCore::builtinLocalURLSchemes): Ditto.
        (WebCore::builtinSecureSchemes): Ditto.
        (WebCore::builtinSchemesWithUniqueOrigins): Ditto.
        (WebCore::builtinEmptyDocumentSchemes): Ditto.
        (WebCore::builtinCanDisplayOnlyIfCanRequestSchemes): Ditto.
        (WebCore::builtinCORSEnabledSchemes): Ditto.

        * platform/MIMETypeRegistry.cpp:
        (WebCore::MIMETypeRegistry::supportedNonImageMIMETypes): Use deduction.
        (WebCore::MIMETypeRegistry::supportedMediaMIMETypes): Ditto.

        * platform/cocoa/AGXCompilerService.cpp:
        (WebCore::agxCompilerServices): Use Span instead of a Vector&, allowing us
        to use a constexpr array rather than allocating memory for a vector.
        (WebCore::agxCompilerClasses): Ditto.
        * platform/cocoa/AGXCompilerService.h: Ditto.

        * platform/cocoa/MIMETypeRegistryCocoa.mm:
        (WebCore::extensionsForMIMETypeMap): Use deduction.

        * platform/cocoa/RemoteCommandListenerCocoa.mm:
        (WebCore::mediaRemoteCommandForPlatformCommand): Use SortedArrayMap, ovbviating the
        need for any use of NeverDestroyed.

        * platform/cocoa/VideoFullscreenModelVideoElement.h:
        * platform/cocoa/VideoFullscreenModelVideoElement.mm:
        (WebCore::VideoFullscreenModelVideoElement::observedEventNames): Return a Span
        instead of a Vector&, allowing us to use an array rather than allocating
        memory for a Vector.

        * platform/encryptedmedia/CDMProxy.cpp:
        (WebCore::CDMProxyFactory::registeredFactories): Use deduction.

        * platform/graphics/FontCascade.cpp:
        (WebCore::useBackslashAsYenSignForFamily): Use deduction.
        (WebCore::FontCascade::hasValidAverageCharWidth const): Ditto.

        * platform/graphics/ImageDecoder.cpp:
        (WebCore::installedFactories): Use NeverDestroyed directly, not makeNeverDestroyed.

        * platform/graphics/IntSize.h: Added constexpr so many operations can be done
        at compile time as needed; mainly this was so we can make a constexpr array of
        these sizes. This same enhancement can be applied to other types, but just did
        it here for now. Also fixed return values for min/maxDimension that were accidentally
        returning float, hurting performance because of the round trip int to float,
        also not cleanly round tripping very large and small values.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::staticMIMETypeList): Use deduction.
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::AVFWrapper::checkPlayability): Ditto.
        * platform/graphics/cg/ImageSourceCGWin.cpp:
        (WebCore::preferredExtensionForImageType): Ditto.
        * platform/graphics/cg/UTIRegistry.cpp:
        (WebCore::defaultSupportedImageTypes): Ditto.
        * platform/graphics/cocoa/FontDescriptionCocoa.cpp:
        (WebCore::matchSystemFontUse): Ditto.
        * platform/graphics/cocoa/SourceBufferParserWebM.cpp:
        (WebCore::SourceBufferParserWebM::webmMIMETypes): Ditto.
        (WebCore::SourceBufferParserWebM::supportedVideoCodecs): Ditto.
        (WebCore::SourceBufferParserWebM::supportedAudioCodecs): Ditto.
        * platform/ios/DragImageIOS.mm:
        (WebCore::createDragImageForLink): Ditto.
        * platform/mac/WebNSAttributedStringExtras.mm:
        (WebCore::attributedStringByStrippingAttachmentCharacters): Ditto.
        * platform/mediacapabilities/MediaEngineConfigurationFactory.cpp:
        (WebCore::factories): Ditto.

        * platform/mediastream/RealtimeVideoCaptureSource.cpp:
        (WebCore::RealtimeVideoCaptureSource::standardVideoSizes): Return a Span
        instead of a Vector& so we can use a constexpr array and don't need to
        allocate memory or use read/write storage.
        * platform/mediastream/RealtimeVideoCaptureSource.h: Ditto. Also make
        this a static member function.

        * platform/mock/MockRealtimeMediaSourceCenter.cpp:
        (WebCore::devices): Use deduction.
        (WebCore::deviceMap): Ditto.
        (WebCore::MockRealtimeMediaSourceCenter::microphoneDevices): Ditto.
        (WebCore::MockRealtimeMediaSourceCenter::speakerDevices): Ditto.
        (WebCore::MockRealtimeMediaSourceCenter::videoDevices): Ditto.
        (WebCore::MockRealtimeMediaSourceCenter::displayDevices): Ditto.
        * platform/mock/mediasource/MockMediaPlayerMediaSource.cpp:
        (WebCore::mimeTypeCache): Ditto.
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::operationQueueForAsyncClients): Ditto.
        * platform/text/mac/TextBoundaries.mm:
        (WebCore::tokenizerForString): Ditto.

        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::cachedSystemFontDescription const): Use
        NeverDestroyed directly instead of makeNeverDestroyed.
        * rendering/RenderThemeCocoa.mm:
        (WebCore::RenderThemeCocoa::cachedSystemFontDescription const): Ditto.

        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::isSupportedAttribute): Use deduction.

        * svg/SVGElement.cpp:
        (WebCore::createAttributeNameToCSSPropertyIDMap): Use a constexpr array
        instead of a const one that has to be initialized at runtime.
        (WebCore::SVGElement::animatableAttributeForName): Ditto, also use deduction.
        (WebCore::SVGElement::cssPropertyIdForSVGAttributeName): Use deduction.

        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::isSupportedAttribute): Use deduction.
        * xml/XPathFunctions.cpp:
        (WebCore::XPath::Function::create): Ditto.
        * xml/XPathParser.cpp:
        (WebCore::XPath::parseAxisName): Ditto.

2021-12-16  Michael Saboff  <msaboff@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=234173
        Update Install Paths for build system changes

        Reviewed by Filip Pizlo.

        Added build variables and build step to create symlinks pointing to the alternate
        build locations from the current framework install location.

        Covered by existing tests.

        * Configurations/WebCore.xcconfig:
        * Scripts/create-symlink-to-altroot.sh: Added.
        * WebCore.xcodeproj/project.pbxproj:

2021-12-16  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add support for mixed ltr/rtl content
        https://bugs.webkit.org/show_bug.cgi?id=234381

        Reviewed by Antti Koivisto.

        Inline boxes can also introduce RTL direction to their content which may initiate visual reordering
        (and thus requires bidi handling).
        In this patch hasSeenBidiContent (redundant at this point) is replaced with needsVisualReordering.

        * layout/formattingContexts/inline/InlineItemsBuilder.cpp:
        (WebCore::Layout::InlineItemsBuilder::InlineItemsBuilder):
        (WebCore::Layout::InlineItemsBuilder::handleTextContent):
        (WebCore::Layout::InlineItemsBuilder::handleInlineBoxStart):
        (WebCore::Layout::InlineItemsBuilder::handleInlineBoxEnd):
        * layout/formattingContexts/inline/InlineItemsBuilder.h:
        (WebCore::Layout::InlineItemsBuilder::needsVisualReordering const):
        (WebCore::Layout::InlineItemsBuilder::hasSeenBidiContent const): Deleted.

2021-12-16  Rob Buis  <rbuis@igalia.com>

        Mark range boundary point containers
        https://bugs.webkit.org/show_bug.cgi?id=233462

        Reviewed by Darin Adler.

        Mark range boundary point containers as unreachable for gc.

        Test: fast/dom/Range/delete-contents-crash.html

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSRangeCustom.cpp: Added.
        (WebCore::JSRange::visitAdditionalChildren):
        * dom/Range.cpp:
        (WebCore::Range::visitNodesConcurrently const):
        * dom/Range.h:
        * dom/Range.idl:

2021-12-16  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Do not use inlineItemOffsets for checking if an inline item is a "content" type.
        https://bugs.webkit.org/show_bug.cgi?id=234383

        Reviewed by Antti Koivisto.

        This patch removes some leftover logic from when we used the inlineItemOffsets to check for opaque inline items.
        Now in this loop we try to figure out if the inline box has content or not by
        looking at the nested inline item types.

        * layout/formattingContexts/inline/InlineDisplayContentBuilder.cpp:
        (WebCore::Layout::InlineDisplayContentBuilder::processBidiContent):
        * layout/formattingContexts/inline/InlineItemsBuilder.cpp:
        (WebCore::Layout::InlineItemsBuilder::breakAndComputeBidiLevels):

2021-12-15  Antoine Quint  <graouts@webkit.org>

        ActiveDOMObject::suspendIfNeeded() should not be called within constructors
        https://bugs.webkit.org/show_bug.cgi?id=233945

        Reviewed by Darin Adler.

        Step 2 where we convert the IDB code to use suspendIfNeeded() only within create() methods. This required
        adding such methods and making the constructor private for IDBIndex and IDBObjectStore.

        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::create):
        (WebCore::IDBDatabase::IDBDatabase):
        * Modules/indexeddb/IDBDatabaseNameAndVersionRequest.cpp:
        (WebCore::IDBDatabaseNameAndVersionRequest::create):
        (WebCore::IDBDatabaseNameAndVersionRequest::IDBDatabaseNameAndVersionRequest):
        * Modules/indexeddb/IDBIndex.cpp:
        (WebCore::IDBIndex::create):
        (WebCore::IDBIndex::IDBIndex):
        * Modules/indexeddb/IDBIndex.h:
        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::create):
        (WebCore::IDBObjectStore::IDBObjectStore):
        (WebCore::IDBObjectStore::index):
        * Modules/indexeddb/IDBObjectStore.h:
        * Modules/indexeddb/IDBOpenDBRequest.cpp:
        (WebCore::IDBOpenDBRequest::createDeleteRequest):
        (WebCore::IDBOpenDBRequest::createOpenRequest):
        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::create):
        (WebCore::IDBRequest::createObjectStoreGet):
        (WebCore::IDBRequest::createIndexGet):
        (WebCore::IDBRequest::IDBRequest):
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::create):
        (WebCore::IDBTransaction::IDBTransaction):
        (WebCore::IDBTransaction::objectStore):
        (WebCore::IDBTransaction::createObjectStore):
        (WebCore::IDBTransaction::createIndex):

2021-12-16  Vitaly Dyachkov  <obyknovenius@me.com>

        Flexbox ignores margins of absolute positioned children when `align-items: flex-end` or `justify-content: flex-end`
        https://bugs.webkit.org/show_bug.cgi?id=234143

        Reviewed by Sergio Villar Senin.

        When flexbox layouts its children every absolutely-positioned child is processed separately from regular flex items as it were the sole flex item.
        Absolutely-positioned can be both main- and cross-axis aligned. To correctly align it we first must calculate available space for it.
        To do that the code was correctly subtracting the size of the item from the size of the container but was not subtracting the margins.
        Fixed by including the margins into available size calculation.

        Test: imported/w3c/web-platform-tests/css/css-flexbox/abspos/flex-abspos-staticpos-margin-003.html

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::mainAxisMarginExtentForChild const):
        (WebCore::RenderFlexibleBox::staticMainAxisPositionForPositionedChild):

2021-12-15  Andres Gonzalez  <andresg_22@apple.com>

        Fix for crash in AXIsolatedObject::textMarkerRangeForNSRange.
        https://bugs.webkit.org/show_bug.cgi?id=234377
        <rdar://problem/86553198>

        Reviewed by Chris Fleizach.

        Covered by accessibility/mac/textmarker-range-for-range.html.

        AXIsolatedObject::textMarkerRangeForNSRange needs to autorelease the
        object retrieved from the main thread. This was causing intermittent
        crashes when accessing the return value off of the main thread.

        * accessibility/isolatedtree/mac/AXIsolatedObjectMac.mm:
        (WebCore::AXIsolatedObject::textMarkerRangeForNSRange const):

2021-12-15  Brady Eidson  <beidson@apple.com>

        Add a "NotificationData" object to encompass local Notification-related parameters, instead of passing tons of them around everywhere.
        https://bugs.webkit.org/show_bug.cgi?id=234370

        Reviewed by Tim Horton.

        No behavior change.

        * Modules/notifications/Notification.cpp:
        (WebCore::Notification::dataWithoutNotificationID const):
        * Modules/notifications/Notification.h:

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

2021-12-15  Alex Christensen  <achristensen@webkit.org>

        Remove unreachable code in Plugin and PluginController
        https://bugs.webkit.org/show_bug.cgi?id=234365

        Reviewed by Geoff Garen and Anders Carlsson.

        * bindings/js/ScriptController.h:
        * bindings/js/ScriptControllerMac.mm:
        * history/BackForwardCache.cpp:
        (WebCore::canCacheFrame):
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setExperimentalPlugInSandboxProfilesEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::experimentalPlugInSandboxProfilesEnabled const): Deleted.

2021-12-15  Chris Dumez  <cdumez@apple.com>

        Support passing an old-style enum to add(Hasher&, ...)
        https://bugs.webkit.org/show_bug.cgi?id=234368

        Reviewed by Darin Adler.

        Drop static_casts that should no longer be needed now that we can pass
        an enum to add(Hasher&, ...).

        * platform/network/ProtectionSpaceHash.h:
        (WebCore::ProtectionSpaceHash::hash):

2021-12-15  Alexey Shvayka  <ashvayka@apple.com>

        [WebIDL] Remove the now-unused "ExecState" value of [CallWith] extended attribute
        https://bugs.webkit.org/show_bug.cgi?id=234331

        Reviewed by Darin Adler.

        ExecState was removed in favor of JSGlobalObject in https://webkit.org/b/202392.
        This change removes leftovers from bindings generator, improving the condition for
        exception check in GenerateConstructorDefinition, and even renames WebIDL test cases.

        No new tests, no behavior change.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateCallWith):
        (GenerateConstructorDefinition):
        * bindings/scripts/IDLAttributes.json:
        * bindings/scripts/test/JS/*: Updated.
        * bindings/scripts/test/TestObj.idl:

2021-12-15  Gabriel Nava Marino  <gnavamarino@apple.com>

        null ptr deref in WebCore::ApplyStyleCommand::applyRelativeFontStyleChange
        https://bugs.webkit.org/show_bug.cgi?id=234312

        Reviewed by Chris Dumez.

        In some situations calling ApplyStyleCommand::nodeFullySelected forces layout in a
        way that disconnects the element. In this situation, we now break out of iteration.

        We also add an isOrphan() check in ApplyStyleCommand::applyInlineStyle given
        the possibility of this scenario.

        Test: fast/editing/apply-relative-font-style-change-crash-004.html

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyRelativeFontStyleChange):
        (WebCore::ApplyStyleCommand::applyInlineStyle):

2021-12-15  J Pascoe  <j_pascoe@apple.com>

        [WebAuthn] Allow same-site, cross-origin iframe get()
        https://bugs.webkit.org/show_bug.cgi?id=234309
        rdar://problem/86486313

        Reviewed by Brent Fulgham.

        The Web Authentication level 2 specifies a feature policy to allow get calls in
        cross-origin i-frames. This patch implements this feature policy partially. Only
        same-site, cross-origin i-frames are supported instead. This is for tracking prevention
        purposes. https://w3c.github.io/webauthn/#sctn-iframe-guidance

        This patch also starts passing ClientDataJSON hashes to ASC to avoid the situation
        where WebKit includes crossOrigin or other fields in ClientDataJSON that ASC is
        unaware of when generating ClientDataJSON.

        Added layout test cases for same-site, cross-origin get calls.

        * Modules/webauthn/AuthenticatorCoordinator.cpp:
        (WebCore::AuthenticatorCoordinator::create const):
        (WebCore::doesHaveSameSiteAsAncestors):
        (WebCore::AuthenticatorCoordinator::discoverFromExternalSource const):
        * Modules/webauthn/WebAuthenticationUtils.cpp:
        (WebCore::buildClientDataJson):
        * Modules/webauthn/WebAuthenticationUtils.h:
        * html/FeaturePolicy.cpp:
        (WebCore::policyTypeName):
        (WebCore::FeaturePolicy::parse):
        (WebCore::FeaturePolicy::allows const):
        * html/FeaturePolicy.h:

2021-12-15  Brent Fulgham  <bfulgham@apple.com>

        Clean-up: Adopt Page::forEachDocument in some missed spots
        https://bugs.webkit.org/show_bug.cgi?id=234324
        <rdar://problem/85443831>

        Reviewed by Darin Adler.

        Switch manual loops to our 'forEachDocument' style in a few places that were missed
        in earlier refactoring.

        No change in behavior.

        * history/BackForwardCache.cpp:
        (WebCore::setBackForwardCacheState)
        * page/EventHandler.cpp:
        (WebCore::removeDraggedContentDocumentMarkersFromAllFramesInPage):
        * page/Frame.cpp:
        (WebCore::Frame::orientationChanged):
        * page/Page.cpp:
        (WebCore::Page::~Page):
        (WebCore::Page::forEachDocumentFromMainFrame): Added.
        (WebCore::Page::forEachDocument): Use new method.
        (WebCore::Page::forEachFrameFromMainFrame): Added.
        (WebCore::Page::windowScreenDidChange):
        (WebCore::Page::userAgentChanged):
        * page/ios/FrameIOS.mm:
        (WebCore::Frame::dispatchPageHideEventBeforePause):
        (WebCore::Frame::dispatchPageShowEventBeforeResume):

2021-12-15  Alex Christensen  <achristensen@webkit.org>

        Fix Linux and windows build
        https://bugs.webkit.org/show_bug.cgi?id=234362

        * Headers.cmake:

2021-12-15  Chris Dumez  <cdumez@apple.com>

        Unreviewed build fix after r287077.

        * platform/network/ProtectionSpaceHash.h:
        (WebCore::ProtectionSpaceHash::hash):

2021-12-15  Alex Christensen  <achristensen@webkit.org>

        Remove ProxyServer
        https://bugs.webkit.org/show_bug.cgi?id=234362

        Reviewed by Geoffrey Garen.

        It was only used for NPAPI.

        * PlatformAppleWin.cmake:
        * PlatformMac.cmake:
        * Sources.txt:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/Curl.cmake:
        * platform/SourcesSoup.txt:
        * platform/network/ProxyServer.cpp: Removed.
        * platform/network/ProxyServer.h: Removed.
        * platform/network/cf/ProxyServerCFNet.cpp: Removed.
        * platform/network/curl/ProxyServerCurl.cpp: Removed.
        * platform/network/soup/ProxyServerSoup.cpp: Removed.

2021-12-15  Tyler Wilcock  <tyler_w@apple.com>

        AX: Move comment about accessibilityShouldUseUniqueId in WebAccessibilityObjectWrapperMac.mm to the right place
        https://bugs.webkit.org/show_bug.cgi?id=234334

        Reviewed by Chris Fleizach.

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        Move comment about accessibilityShouldUseUniqueId next to its
        defintion rather than its current location next to
        accessibilityIsIgnored.

2021-12-15  Alexey Shvayka  <ashvayka@apple.com>

        [WebIDL] Remove the now-unused [DocumentEventHandler] extended attribute
        https://bugs.webkit.org/show_bug.cgi?id=234047

        Reviewed by Darin Adler.

        [DocumentEventHandler] was originally introduced just to accommodate onselectionchange
        IDL attribute, which became unnecessary as of r287089. Also, HTML spec has no concept
        of reflecting event handlers to Document, only to Window [1].

        [1] https://html.spec.whatwg.org/multipage/webappapis.html#window-reflecting-body-element-event-handler-set

        No new tests, no behavior change.

        * bindings/js/JSEventListener.cpp:
        (WebCore::documentEventHandlerAttribute): Deleted.
        (WebCore::setDocumentEventHandlerAttribute): Deleted.
        * bindings/js/JSEventListener.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateAttributeGetterBodyDefinition):
        (GenerateAttributeSetterBodyDefinition):
        * bindings/scripts/IDLAttributes.json:

2021-12-15  Jer Noble  <jer.noble@apple.com>

        [Mac] Adopt -[NSScreen safeAreaInsets]
        https://bugs.webkit.org/show_bug.cgi?id=234291
        <rdar://85805895>

        Reviewed by Eric Carlson.

        Adopt -safeAreaInsets and rename screenRectAvoidingMenuBar() to safeScreenFrame().

        * platform/PlatformScreen.h:
        * platform/mac/PlatformScreenMac.mm:
        (WebCore::safeScreenFrame): Renamed from screenRectAvoidingMenuBar.
        
2021-12-15  Alex Christensen  <achristensen@webkit.org>

        More cleanup after PluginProcess removal
        https://bugs.webkit.org/show_bug.cgi?id=234354

        Reviewed by Tim Horton.

        * platform/network/ProxyServer.h:

2021-12-15  Antti Koivisto  <antti@apple.com>

        [:has() pseudo-class] Use Bloom filter to quickly reject :has() selectors
        https://bugs.webkit.org/show_bug.cgi?id=234341

        Reviewed by Dean Jackson.

        We can dramatically speed up cases where there are many :has rules, most of which don't match their argument
        by building a Bloom filter describing the features of the subtree.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::matchHasPseudoClass const):

        Build and cache HasSelectorFilter per element/filter type. It will be constructed only if multiple :has()
        selectors are tested for the same element (otherwise the regular match cache is more efficient).
        Use it to quickly reject selectors.
        Also add a basic inital optimization to bail out if there are no child/sibling elements that could match.

        * css/SelectorFilter.cpp:
        (WebCore::SelectorFilter::collectElementIdentifierHashes):
        (WebCore::SelectorFilter::collectSimpleSelectorHash):
        (WebCore::SelectorFilter::collectSelectorHashes):
        (WebCore::SelectorFilter::chooseSelectorHashesForFilter):
        (WebCore::collectElementIdentifierHashes): Deleted.
        (WebCore::collectSimpleSelectorHash): Deleted.
        (WebCore::collectSelectorHashes): Deleted.
        (WebCore::chooseSelectorHashesForFilter): Deleted.
        * css/SelectorFilter.h:
        * style/HasSelectorFilter.cpp: Added.
        (WebCore::Style::HasSelectorFilter::HasSelectorFilter):
        (WebCore::Style::HasSelectorFilter::typeForMatchElement):
        (WebCore::Style::HasSelectorFilter::makeKey):

        The key consists of the most specific string in the rightmost compound of the selector along with
        :hover pseudo class, if any.

        (WebCore::Style::HasSelectorFilter::add):

        Add an Element to the filter.
        The features collected are the same as for the regular selector filter, plus permutations with
        :hover pseudo-class if it would match.

        * style/HasSelectorFilter.h: Copied from Source/WebCore/style/SelectorMatchingState.h.
        (WebCore::Style::HasSelectorFilter::type const):
        (WebCore::Style::HasSelectorFilter::reject const):

        Add HasSelectorFilter which uses non-counting BloomFilter internally. The size of the filter is 512 bytes.

        * style/SelectorMatchingState.h:
        (WebCore::Style::makeHasPseudoClassSelectorFilterKey):

2021-12-15  Alexey Shvayka  <ashvayka@apple.com>

        [WebIDL] onselectionchange IDL attribute should not Document-reflect event listeners
        https://bugs.webkit.org/show_bug.cgi?id=234349

        Reviewed by Darin Adler.

        onselectionchange IDL attribute should not forward event listeners from <body> to Document because:
          a) the attribute is being standardized as a global event handler [1];
          b) "selectionchange" event should be emitted on Document only for selection changes of ranges [2],
             while it should bubble to <body> only when selection changes occur in <input> / <textarea> elements;
          c) HTML spec has no concept of reflecting event handlers to Document, only to Window [3].

        While this patch aligns WebKit with Blink and Gecko, event listener forwarding is preserved for
        "onselectionchange" content attribute in order to ensure web-compatibility in the following case:
          * a userland <body onselectionchange> listener that relies on `document.activeElement`
            to handle selection changes, including ones that occur in <input> / <textarea> elements.
        This is caught by the fast/events/selectionchange-user-initiated.html test as well.

        [1] https://w3c.github.io/selection-api/#extensions-to-globaleventhandlers-interface
        [2] https://w3c.github.io/selection-api/#selectionchange-event
        [3] https://html.spec.whatwg.org/multipage/webappapis.html#window-reflecting-body-element-event-handler-set

        Test: fast/dom/event-handler-attributes.html

        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::parseAttribute):
        * html/HTMLBodyElement.idl:

2021-12-15  Alex Christensen  <achristensen@webkit.org>

        Avoid unnecessary allocation and UTF-8 conversion when calling DFABytecodeInterpreter::interpret
        https://bugs.webkit.org/show_bug.cgi?id=234351

        Reviewed by Tim Hatcher.

        A valid URL, the only input into DFABytecodeInterpreter::interpret, contains only ASCII characters.
        In the overwhelming majority of cases, we have an 8-bit string.  There is no need to allocate, copy, and convert it.
        In the rare case that we somehow get a UTF-16 encoded ASCII string, just do what we did before and UTF-8 encode it.

        Regular expressions allow matching the end of the string, which we currently implement by checking for the
        null character, so I had to keep the parts that read the null character at the end of a string by checking
        to see if we are at the end of the string when reading a character and returning the null character if we are.

        Covered by many API tests.

        * contentextensions/ContentExtension.cpp:
        (WebCore::ContentExtensions::ContentExtension::populateTopURLActionCacheIfNeeded const):
        (WebCore::ContentExtensions::ContentExtension::populateFrameURLActionCacheIfNeeded const):
        * contentextensions/ContentExtensionsBackend.cpp:
        (WebCore::ContentExtensions::ContentExtensionsBackend::actionsFromContentRuleList const):
        (WebCore::ContentExtensions::ContentExtensionsBackend::actionsForResourceLoad const):
        * contentextensions/ContentExtensionsBackend.h:
        * contentextensions/DFABytecodeInterpreter.cpp:
        (WebCore::ContentExtensions::DFABytecodeInterpreter::interpetJumpTable):
        (WebCore::ContentExtensions::DFABytecodeInterpreter::interpret):
        * contentextensions/DFABytecodeInterpreter.h:

2021-12-15  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Use the physical margin/border/padding values for inline boxes when generating the display content
        https://bugs.webkit.org/show_bug.cgi?id=234346

        Reviewed by Antti Koivisto.

        Display content is always based on visual order. When we construct the display boxes
          - we visit the line runs in visual order
          - we make space for margin/border/padding by looking at the physical sides of the content 
        The visually first box may very well be logically the last and this first box's left side (again, visually)
        may refer to the logical start/end values depending on the inline axis direction. 

        E.g in case of right to left inline direction, the border-inline-end value of an inline box should be use as the
        "visually first" border on the left side of the inline box content.   

        It means that
         - physical values are used when creating the display boxes
         - and logical values are used throughout the layout
        which in practice means that isLeftToRightDirection check should only happen before and after layout
        (physical -> logical and logical -> physical respectively) but never during layout.

        * layout/formattingContexts/inline/InlineDisplayContentBuilder.cpp:
        (WebCore::Layout::marginLeft):
        (WebCore::Layout::marginRight):
        (WebCore::Layout::borderLeft):
        (WebCore::Layout::borderRight):
        (WebCore::Layout::paddingLeft):
        (WebCore::Layout::paddingRight):
        (WebCore::Layout::InlineDisplayContentBuilder::adjustVisualGeometryForDisplayBox):

2021-12-15  Yoshiaki Jitsukawa  <yoshiaki.jitsukawa@sony.com>

        JPEG XL decoder should support understand color profiles
        https://bugs.webkit.org/show_bug.cgi?id=233364
        <rdar://problem/85767076>

        Reviewed by Michael Catanzaro.

        Support color conversion by LCMS.

        We subscribe the JXL_DEC_COLOR_ENCODING event to know when the color profile
        that the image has is available, and try to get an ICC profile. After getting
        the profile, we create a color conversion transform with the display's color
        profile. When receiving decoded pixels, we convert the pixels with it.

        Test: fast/images/jpegxl-with-color-profile.html

        * platform/image-decoders/jpegxl/JPEGXLImageDecoder.cpp:
        (WebCore::eventsWanted):
        (WebCore::JPEGXLImageDecoder::~JPEGXLImageDecoder):
        (WebCore::JPEGXLImageDecoder::clear):
        (WebCore::JPEGXLImageDecoder::setFailed):
        (WebCore::JPEGXLImageDecoder::ensureDecoderInitialized):
        (WebCore::JPEGXLImageDecoder::rewind):
        (WebCore::JPEGXLImageDecoder::decode):
        (WebCore::JPEGXLImageDecoder::processInput):
        (WebCore::JPEGXLImageDecoder::imageOut):
        (WebCore::JPEGXLImageDecoder::clearColorTransform):
        (WebCore::JPEGXLImageDecoder::prepareColorTransform):
        (WebCore::JPEGXLImageDecoder::tryDecodeICCColorProfile):
        * platform/image-decoders/jpegxl/JPEGXLImageDecoder.h:

2021-12-15  Simon Fraser  <simon.fraser@apple.com>

        Twitter scroll stutter: ensure that CA backing store is always deallocated on the main thread
        https://bugs.webkit.org/show_bug.cgi?id=234328
        <rdar://85892959>

        Reviewed by Tim Horton.

        When scrolling pages like Twitter and Facebook we observed CoreAnimation commits on the
        scrolling thread taking longer than they should because CABackingStore objects were being
        released in those transactions.

        Work around this issue by extending the lifetime of CABackingStore objects if we detect that
        they might be entrained into a scrolling tree commit, by virtue of having overlapping main
        thread and scrolling thread commits.

        The logic is contained in PlatformCALayerContentsDelayedReleaser, which puts layer contents
        into a retaining vector when they are being cleared on the layer. They are released at the
        end of a main thread commit; if we detected overlapping commits, then we release on a
        dispatch to extend the lifetime slightly.

        The remaining changes are plumbing to get commit willBegin/didEnd messages to PlatformCALayerContentsDelayedReleaser
        for main and scrolling threads.

        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * page/scrolling/ScrollingTree.h:
        * page/scrolling/ThreadedScrollingTree.h:
        * page/scrolling/mac/ScrollingCoordinatorMac.h:
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::willStartPlatformRenderingUpdate):
        (WebCore::ScrollingCoordinatorMac::didCompletePlatformRenderingUpdate):
        * page/scrolling/mac/ScrollingTreeMac.h:
        * page/scrolling/mac/ScrollingTreeMac.mm:
        (ScrollingTreeMac::applyLayerPositionsInternal):
        (ScrollingTreeMac::registerForPlatformRenderingUpdateCallback):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::updateContentsVisibility):
        (WebCore::GraphicsLayerCA::updateDrawsContent):
        * platform/graphics/ca/PlatformCALayer.cpp:
        (WebCore::PlatformCALayer::clearContents):
        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.h:
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:
        (WebCore::PlatformCALayerCocoa::setBackingStoreAttached):
        (WebCore::PlatformCALayerCocoa::clearContents):
        * platform/graphics/ca/cocoa/PlatformCALayerContentsDelayedReleaser.h: Added.
        (WebCore::PlatformCALayerContentsDelayedReleaser::WTF_GUARDED_BY_LOCK):
        * platform/graphics/ca/cocoa/PlatformCALayerContentsDelayedReleaser.mm: Added.
        (WebCore::PlatformCALayerContentsDelayedReleaser::singleton):
        (WebCore::PlatformCALayerContentsDelayedReleaser::takeLayerContents):
        (WebCore::PlatformCALayerContentsDelayedReleaser::mainThreadCommitWillStart):
        (WebCore::PlatformCALayerContentsDelayedReleaser::mainThreadCommitDidEnd):
        (WebCore::PlatformCALayerContentsDelayedReleaser::scrollingThreadCommitWillStart):
        (WebCore::PlatformCALayerContentsDelayedReleaser::scrollingThreadCommitDidEnd):
        (WebCore::PlatformCALayerContentsDelayedReleaser::updateSawOverlappingCommit):
        (WebCore::PlatformCALayerContentsDelayedReleaser::clearRetainedContents):

2021-12-15  Chris Dumez  <cdumez@apple.com>

        http/tests/security/basic-auth-subresource.html and some other http auth tests are flaky
        https://bugs.webkit.org/show_bug.cgi?id=234314
        <rdar://85150486>

        Reviewed by Darin Adler.

        http/tests/security/basic-auth-subresource.html and some other http auth tests are flaky.

        No new tests, I will be able to unskip those layout tests in internal once this lands.

        * platform/network/ProtectionSpaceBase.cpp:
        (WebCore::ProtectionSpaceBase::ProtectionSpaceBase):
        (WebCore::ProtectionSpaceBase::host const): Deleted.
        (WebCore::ProtectionSpaceBase::port const): Deleted.
        (WebCore::ProtectionSpaceBase::serverType const): Deleted.
        (WebCore::ProtectionSpaceBase::realm const): Deleted.
        (WebCore::ProtectionSpaceBase::authenticationScheme const): Deleted.
        * platform/network/ProtectionSpaceBase.h:
        (WebCore::ProtectionSpaceBase::host const):
        (WebCore::ProtectionSpaceBase::port const):
        (WebCore::ProtectionSpaceBase::serverType const):
        (WebCore::ProtectionSpaceBase::realm const):
        (WebCore::ProtectionSpaceBase::authenticationScheme const):
        Clean up / modernise the ProtectionSpaceBase class.

        * platform/network/ProtectionSpaceHash.h:
        (WebCore::ProtectionSpaceHash::hash):
        - Use Hasher in ProtectionSpaceHash::hash() as it is less error-prone. I believe the
          previous implementation was wrong because it was calling
          `StringHasher::hashMemory(hashCodes, codeCount)` instead of
          `StringHasher::hashMemory(hashCodes, codeCount * sizeof(unsigned))`.
          This could have resulted in inefficiencies I believe since we were not hashing the
          whole array memory.
        - Fix ProtectionSpace<ProtectionSpace> so that emptyValueIsZero is false instead of
          true. This was a bug since the ProtectionSpaceBase constructor initializes data
          members to non-zero values.

2021-12-15  Gavin Phillips  <gavin.p@apple.com>

        Fix SVG resource invalidation logic causing incorrect layout state.
        https://bugs.webkit.org/show_bug.cgi?id=233190
        <rdar://82895369>

        When SVG resources perform parent layout/resource invalidation, we can incorrectly
        cross the SVG boundary when operating on a node which isn't an SVGRoot.
        This can cause us to exit layout() with elements that still needsLayout().

        Reviewed by Darin Adler.

        * rendering/svg/RenderSVGResource.cpp:
        (WebCore::RenderSVGResource::markForLayoutAndParentResourceInvalidation):

2021-12-15  Chris Lord  <clord@igalia.com>

        [GTK] Use libgbm and the ANGLE gbm backend to fix initialisation
        https://bugs.webkit.org/show_bug.cgi?id=234293

        Reviewed by Don Olmstead.

        Make ANGLE context non-TEXTURE_2D drawingBufferTextureTarget Cocoa-specific.

        * platform/graphics/angle/GraphicsContextGLANGLE.cpp:
        (WebCore::GraphicsContextGLANGLE::drawingBufferTextureTarget):

2021-12-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][a11y] Add support for loading events when building with ATSPI
        https://bugs.webkit.org/show_bug.cgi?id=234344

        Reviewed by Joanmarie Diggs.

        Emit document:load-complete, document:reload, document:load-stopped and object:state-changed:busy.

        * accessibility/atspi/AXObjectCacheAtspi.cpp:
        (WebCore::AXObjectCache::frameLoadingEventPlatformNotification):
        * accessibility/atspi/AccessibilityAtspi.cpp:
        (WebCore::AccessibilityAtspi::loadEvent):
        * accessibility/atspi/AccessibilityAtspi.h:
        * accessibility/atspi/AccessibilityObjectAtspi.cpp:
        (WebCore::AccessibilityObjectAtspi::loadEvent):
        * accessibility/atspi/AccessibilityObjectAtspi.h:

2021-12-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][a11y] Register the wrappers tree when there's an event listener registered
        https://bugs.webkit.org/show_bug.cgi?id=234338

        Reviewed by Joanmarie Diggs.

        Connect to the atspi registry to get the list of registered event listeners. If there's any listener, we register
        the tree to ensure we can emit signals, but we only emit the signals for which there's a listener registered,
        except for the ones required by the atspi cache.

        * accessibility/atspi/AccessibilityAtspi.cpp:
        (WebCore::AccessibilityAtspi::AccessibilityAtspi): Connect to the registry.
        (WebCore::AccessibilityAtspi::~AccessibilityAtspi): Disconnect registry signals.
        (WebCore::AccessibilityAtspi::registerTrees const): Register the trees of all root objects.
        (WebCore::AccessibilityAtspi::initializeRegistry): Get the list of listeners registered and connect to
        EventListenerRegistered signal.
        (WebCore::AccessibilityAtspi::addEventListener): Add an event listener to the list converting the detail to non
        camel case to be abel to compare it later on signal emission.
        (WebCore::eventIsSubtype): Helper to check if event type is subtype of another.
        (WebCore::AccessibilityAtspi::removeEventListener): Remove and events listener from the list.
        (WebCore::AccessibilityAtspi::shouldEmitSignal): Return whether the given signal should be emitted, checking the
        registered event listeners.
        (WebCore::AccessibilityAtspi::parentChanged): Do not emit the signal if the object hasn't been registered yet to
        avoid flooding during tree creation. We just register the object the object in that case which will update the
        cache because addAccessible is always called.
        (WebCore::AccessibilityAtspi::stateChanged): Return early if signal should not be emitted.
        (WebCore::AccessibilityAtspi::textChanged): Ditto.
        (WebCore::AccessibilityAtspi::textAttributesChanged): Ditto.
        (WebCore::AccessibilityAtspi::textCaretMoved): Ditto.
        (WebCore::AccessibilityAtspi::textSelectionChanged): Ditto.
        (WebCore::AccessibilityAtspi::valueChanged): Ditto.
        (WebCore::AccessibilityAtspi::selectionChanged): Ditto.
        * accessibility/atspi/AccessibilityAtspi.h:
        (WebCore::AccessibilityAtspi::hasEventListeners const):
        * accessibility/atspi/AccessibilityObjectAtspi.cpp:
        (WebCore::AccessibilityObjectAtspi::childAdded): Return early if object is already detached or ignored.
        (WebCore::AccessibilityObjectAtspi::childRemoved): Ditto.
        (WebCore::AccessibilityObjectAtspi::stateChanged): Do not return early if the object is not registered because
        we might end up emitting the signal.
        * accessibility/atspi/AccessibilityObjectSelectionAtspi.cpp:
        (WebCore::AccessibilityObjectAtspi::selectionChanged): Ditto.
        * accessibility/atspi/AccessibilityObjectTextAtspi.cpp:
        (WebCore::AccessibilityObjectAtspi::textInserted): Ditto.
        (WebCore::AccessibilityObjectAtspi::textDeleted): Ditto.
        (WebCore::AccessibilityObjectAtspi::selectionChanged): Ditto.
        (WebCore::AccessibilityObjectAtspi::textAttributesChanged): Ditto.
        * accessibility/atspi/AccessibilityObjectValueAtspi.cpp:
        (WebCore::AccessibilityObjectAtspi::valueChanged): Ditto.
        * accessibility/atspi/AccessibilityRootAtspi.cpp:
        (WebCore::AccessibilityRootAtspi::embedded): Register the tree if there are event listeners registered.

2021-12-15  Youenn Fablet  <youenn@apple.com>

        Make sure to start a realtime outgoing source in case it is taken to another sender
        https://bugs.webkit.org/show_bug.cgi?id=234296
        <rdar://86276497>

        Reviewed by Eric Carlson.

        We are asynchronously starting libwebrtc sources.
        When a sender is created first and is assigned a source later, we take the source and assign it to the sender.
        In that case, the source might not be started and we will not send any data.

        Test: webrtc/addTransceiver-then-addTrack.html

        * Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.cpp:

2021-12-15  Antoine Quint  <graouts@webkit.org>

        ActiveDOMObject::suspendIfNeeded() should not be called within constructors
        https://bugs.webkit.org/show_bug.cgi?id=233945

        Reviewed by Chris Dumez and Darin Adler.

        * Modules/applepay/ApplePaySession.cpp:
        (WebCore::ApplePaySession::create):
        * Modules/applepay/ApplePaySetup.cpp:
        (WebCore::ApplePaySetup::create):
        (WebCore::ApplePaySetup::ApplePaySetup):
        * Modules/applepay/ApplePaySetupWebCore.h:
        (WebCore::ApplePaySetup::create): Deleted.
        * Modules/cache/DOMCache.cpp:
        (WebCore::DOMCache::create):
        (WebCore::DOMCache::DOMCache):
        * Modules/cache/DOMCache.h:
        * Modules/cache/DOMCacheStorage.cpp:
        (WebCore::DOMCacheStorage::create):
        (WebCore::DOMCacheStorage::DOMCacheStorage):
        * Modules/cache/DOMCacheStorage.h:
        (WebCore::DOMCacheStorage::create): Deleted.
        * Modules/entriesapi/FileSystemDirectoryReader.cpp:
        (WebCore::FileSystemDirectoryReader::create):
        (WebCore::FileSystemDirectoryReader::FileSystemDirectoryReader):
        * Modules/entriesapi/FileSystemDirectoryReader.h:
        * Modules/filesystemaccess/FileSystemSyncAccessHandle.cpp:
        (WebCore::FileSystemSyncAccessHandle::create):
        (WebCore::FileSystemSyncAccessHandle::FileSystemSyncAccessHandle):
        * Modules/geolocation/Geolocation.cpp:
        (WebCore::Geolocation::create):
        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::create):
        (WebCore::MediaStream::MediaStream):
        * Modules/paymentrequest/PaymentRequest.cpp:
        (WebCore::PaymentRequest::create):
        * Modules/remoteplayback/RemotePlayback.cpp:
        (WebCore::RemotePlayback::create):
        (WebCore::RemotePlayback::RemotePlayback):
        * Modules/webaudio/ScriptProcessorNode.cpp:
        (WebCore::ScriptProcessorNode::create):
        (WebCore::ScriptProcessorNode::ScriptProcessorNode):
        * Modules/webxr/WebXRSession.cpp:
        (WebCore::WebXRSession::create):
        (WebCore::WebXRSession::WebXRSession):
        * Modules/webxr/WebXRSystem.cpp:
        (WebCore::WebXRSystem::create):
        (WebCore::WebXRSystem::WebXRSystem):
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::create):
        (WebCore::m_version):
        * css/CSSFontSelector.h:
        * dom/MessagePort.cpp:
        (WebCore::MessagePort::create):
        (WebCore::MessagePort::MessagePort):
        * workers/WorkerAnimationController.cpp:
        (WebCore::WorkerAnimationController::create):
        (WebCore::WorkerAnimationController::WorkerAnimationController):
        * workers/service/ServiceWorker.cpp:
        (WebCore::ServiceWorker::getOrCreate):
        (WebCore::ServiceWorker::ServiceWorker):
        * workers/service/ServiceWorkerRegistration.cpp:
        (WebCore::ServiceWorkerRegistration::getOrCreate):
        (WebCore::ServiceWorkerRegistration::ServiceWorkerRegistration):

2021-12-15  Diego Pino Garcia  <dpino@igalia.com>

        [GTK][WPE] Build fix for Debian Stable after r287015
        https://bugs.webkit.org/show_bug.cgi?id=234332

        Reviewed by Ryosuke Niwa.

        * Modules/push-api/PushMessageCrypto.cpp:
        (WebCore::PushCrypto::decryptAES128GCMPayload):
        (WebCore::PushCrypto::decryptAESGCMPayload):

2021-12-13  Sergio Villar Senin  <svillar@igalia.com>

        [css-flexbox] Absolutely positioned children should be aligned using the margin box
        https://bugs.webkit.org/show_bug.cgi?id=234244

        Reviewed by Darin Adler.

        When aligning absolutely positioned children we must use the child's margin box. We were
        using the border box instead, and thus ignoring margins when aligning absolutely positioned
        flexbox children.

        This fixes position-absolute-014.html from the WPT suite.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::availableAlignmentSpaceForChild): Removed the !isOutOfFlowPositioned()
        ASSERT. It's true that in the past it was called only from code dealing with flex items but the code
        implementing the function does not really have that restriction at all.
        (WebCore::RenderFlexibleBox::staticCrossAxisPositionForPositionedChild): Directly call
        availableAlignmentSpaceForChild() as it already uses the margin box.

2021-12-14  Joonghun Park  <jh718.park@samsung.com>

        Fix that height is calculated incorrectly when using display:table, box-sizing:border-box and padding.
        https://bugs.webkit.org/show_bug.cgi?id=196175

        Reviewed by Darin Adler.

        Currently, box sizing type check is missing, so the height of display:table element's percent height child
        is subtracted by its border and padding even when its 'box-sizing' is not 'content-box'.

        This patch adds the missing box sizing type check.

        Test: imported/w3c/web-platform-tests/css/css-sizing/table-child-percentage-height-with-border-box.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computePercentageLogicalHeight const):

2021-12-14  Alan Bujtas  <zalan@apple.com>

        [IFC][Integration] Use logical margin/border/padding values in layout
        https://bugs.webkit.org/show_bug.cgi?id=234305

        Reviewed by Antti Koivisto.

        Can't use RenderBoxModelObject::borderStart/End logical values as they return values based on the _renderer_'s
        direction and not the direction the renderer is aligned within.

        * layout/integration/LayoutIntegrationLineLayout.cpp:
        (WebCore::LayoutIntegration::LineLayout::updateLayoutBoxDimensions):
        (WebCore::LayoutIntegration::LineLayout::updateInlineBoxDimensions):

2021-12-14  Jean-Yves Avenard  <jya@apple.com>

        SourceBufferParser should be using contiguous SharedBuffer
        https://bugs.webkit.org/show_bug.cgi?id=233865
        rdar://problem/86085253

        Reviewed by Eric Carlson.

        The SharedBuffer sent to the SourceBufferParser can only ever contain one
        DataSegment and we had assertions to that effect. The SharedBuffer class
        type now guarantees how the data is structured and allow for more explicit
        code which improves readability.
        We also had some workarounds for the fact that SharedBuffer didn't use
        thread-safe refcounting and instead we referenced the inner DataSegment.
        This can be removed.

        Covered by existing tests, no observable differences.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::appendBufferTimerFired):
        * Modules/mediasource/SourceBuffer.h:
        * platform/audio/cocoa/AudioFileReaderCocoa.cpp:
        * platform/graphics/SourceBufferPrivate.cpp:
        (WebCore::SourceBufferPrivate::append):
        * platform/graphics/SourceBufferPrivate.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::append):
        * platform/graphics/cocoa/SourceBufferParser.cpp:
        (WebCore::SourceBufferParser::Segment::Segment):
        (WebCore::SourceBufferParser::Segment::size const):
        (WebCore::SourceBufferParser::Segment::read const):
        (WebCore::SourceBufferParser::Segment::takeSharedBuffer):
        (WebCore::SourceBufferParser::Segment::getSharedBuffer const):
        * platform/graphics/cocoa/SourceBufferParser.h:
        * platform/graphics/cocoa/SourceBufferParserWebM.cpp:

2021-12-14  Jean-Yves Avenard  <jya@apple.com>

        Make PreviewConverterProvider not modify the SharedBuffer once returned
        https://bugs.webkit.org/show_bug.cgi?id=233923
        rdar://problem/86149850

        Reviewed by Youenn Fablet.

        Covered by existing API tests.

        * loader/ios/LegacyPreviewLoader.h:
        * loader/ios/LegacyPreviewLoader.mm:
        (WebCore::LegacyPreviewLoader::previewConverterDidStartConverting):
        (WebCore::LegacyPreviewLoader::provideMainResourceForPreviewConverter):
        * platform/PreviewConverter.cpp:
        (WebCore::PreviewConverter::updateMainResource):
        * platform/PreviewConverterProvider.h:

2021-12-14  Basuke Suzuki  <basuke.suzuki@sony.com>

        [Playstation] Fix build break after r286908
        https://bugs.webkit.org/show_bug.cgi?id=234311

        Unreviewed, build fix for PlayStation platform after r286908.
        https://trac.webkit.org/changeset/286908/webkit

        * platform/graphics/PlatformVideoColorSpace.h:

2021-12-14  Alex Christensen  <achristensen@webkit.org>

        Revert r284816
        https://bugs.webkit.org/show_bug.cgi?id=234308
        <rdar://86294293>

        Reviewed by Eric Carlson.

        I made it so that resources without a Content-Length header wait until the whole resource finishes downloading
        then we deliver it to CoreMedia to play with a known length.  This works great, except it completely breaks
        live streaming, which would just wait forever.  Back to the status quo.  We need to convince CoreMedia to accept
        byte ranges with an unknown end to fix videos such as our test video when hosted by trac, which has no Content-Length at
        https://trac.webkit.org/export/284633/webkit/trunk/Tools/TestWebKitAPI/Tests/WebKit/test.mp4

        * platform/network/cocoa/RangeResponseGenerator.mm:
        (WebCore::synthesizedResponseForRange):
        (WebCore::RangeResponseGenerator::giveResponseToTaskIfBytesInRangeReceived):

2021-12-14  Gabriel Nava Marino  <gnavamarino@apple.com>

        Adhere to DisplayList iterator's API contract in MemoryDisplayList::~InMemoryDisplayList()
        https://bugs.webkit.org/show_bug.cgi?id=234264

        Reviewed by Myles C. Maxfield.

        The client is not adhearing to the DisplayList Iterator's API contract in MemoryDisplayList::~InMemoryDisplayList():
        "Part of the iterator's API contract is that if the item is nullopt, you're not allowed to keep
        iterating - doing this will lead to an infinite loop."

        Here we now do so by breaking out of iteration if the item is nullopt.

        * platform/graphics/displaylists/InMemoryDisplayList.cpp:
        (WebCore::DisplayList::InMemoryDisplayList::~InMemoryDisplayList):

2021-12-14  Alan Bujtas  <zalan@apple.com>

        [LFC] Let BoxGeometry have logical values only
        https://bugs.webkit.org/show_bug.cgi?id=234304

        Reviewed by Antti Koivisto.

        This helps when converting logical (layout) values to physical (display) values.

        * display/css/DisplayFillLayerImageGeometry.cpp:
        (WebCore::Display::geometryForLayer):
        * layout/formattingContexts/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::validateGeometryConstraintsAfterLayout const):
        * layout/formattingContexts/FormattingGeometry.cpp:
        (WebCore::Layout::FormattingGeometry::outOfFlowNonReplacedVerticalGeometry const):
        (WebCore::Layout::FormattingGeometry::outOfFlowNonReplacedHorizontalGeometry const):
        (WebCore::Layout::FormattingGeometry::outOfFlowReplacedVerticalGeometry const):
        (WebCore::Layout::FormattingGeometry::outOfFlowReplacedHorizontalGeometry const):
        (WebCore::Layout::FormattingGeometry::computedPadding const):
        * layout/formattingContexts/FormattingQuirks.cpp:
        (WebCore::Layout::FormattingQuirks::heightValueOfNearestContainingBlockWithFixedHeight const):
        * layout/formattingContexts/block/BlockFormattingGeometry.cpp:
        (WebCore::Layout::BlockFormattingGeometry::inFlowNonReplacedContentHeightAndMargin const):
        (WebCore::Layout::BlockFormattingGeometry::inFlowNonReplacedContentWidthAndMargin const):
        * layout/formattingContexts/inline/InlineLine.cpp:
        (WebCore::Layout::Line::initialize):
        (WebCore::Layout::Line::addBorderAndPaddingEndForInlineBoxDecorationClone):
        * layout/formattingContexts/inline/InlineLineBox.cpp:
        (WebCore::Layout::LineBox::logicalBorderBoxForInlineBox const):
        * layout/formattingContexts/inline/InlineLineBoxBuilder.cpp:
        (WebCore::Layout::LineBoxBuilder::constructAndAlignInlineLevelBoxes):
        * layout/formattingContexts/inline/InlineLineBuilder.cpp:
        (WebCore::Layout::LineBuilder::inlineItemWidth const):
        * layout/formattingContexts/table/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::setUsedGeometryForCells):
        * layout/layouttree/LayoutBoxGeometry.cpp:
        (WebCore::Layout::BoxGeometry::paddingBox const):
        * layout/layouttree/LayoutBoxGeometry.h:
        (WebCore::Layout::BoxGeometry::verticalBorder const):
        (WebCore::Layout::BoxGeometry::horizontalBorder const):
        (WebCore::Layout::BoxGeometry::borderAndPaddingStart const):
        (WebCore::Layout::BoxGeometry::borderAndPaddingEnd const):
        (WebCore::Layout::BoxGeometry::contentBoxTop const):
        (WebCore::Layout::BoxGeometry::contentBoxLeft const):
        (WebCore::Layout::BoxGeometry::paddingBoxTop const):
        (WebCore::Layout::BoxGeometry::paddingBoxLeft const):
        (WebCore::Layout::BoxGeometry::paddingBoxHeight const):
        (WebCore::Layout::BoxGeometry::paddingBoxWidth const):
        (WebCore::Layout::BoxGeometry::borderBoxHeight const):
        (WebCore::Layout::BoxGeometry::borderBoxWidth const):
        (WebCore::Layout::BoxGeometry::paddingBefore const):
        (WebCore::Layout::BoxGeometry::paddingStart const):
        (WebCore::Layout::BoxGeometry::paddingAfter const):
        (WebCore::Layout::BoxGeometry::paddingEnd const):
        (WebCore::Layout::BoxGeometry::verticalPadding const):
        (WebCore::Layout::BoxGeometry::horizontalPadding const):
        (WebCore::Layout::BoxGeometry::borderBefore const):
        (WebCore::Layout::BoxGeometry::borderStart const):
        (WebCore::Layout::BoxGeometry::borderAfter const):
        (WebCore::Layout::BoxGeometry::borderEnd const):
        (WebCore::Layout::BoxGeometry::paddingTop const): Deleted.
        (WebCore::Layout::BoxGeometry::paddingLeft const): Deleted.
        (WebCore::Layout::BoxGeometry::paddingBottom const): Deleted.
        (WebCore::Layout::BoxGeometry::paddingRight const): Deleted.
        (WebCore::Layout::BoxGeometry::borderTop const): Deleted.
        (WebCore::Layout::BoxGeometry::borderLeft const): Deleted.
        (WebCore::Layout::BoxGeometry::borderBottom const): Deleted.
        (WebCore::Layout::BoxGeometry::borderRight const): Deleted.

2021-12-14  Patrick Angle  <pangle@apple.com>

        Web Inspector: After r286657, anonymous layers are providing an empty string for their grouping text
        https://bugs.webkit.org/show_bug.cgi?id=234012

        Reviewed by Devin Rousso.

        Covered by existing test: LayoutTests/inspector/css/getMatchedStylesForNodeLayerGrouping.html

        For anonymous layers, we should not provide the `text` property to the frontend, as there is technically no
        text, not an empty string, provided by the author. This is effectively a minor optimization, as the frontend
        does correctly handle an empty string the same way it handles no string.

        * inspector/InspectorStyleSheet.cpp:
        (WebCore::buildArrayForGroupings):

2021-12-14  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Take text-align offset into account when computing the RTL display box geometry
        https://bugs.webkit.org/show_bug.cgi?id=234287

        Reviewed by Antti Koivisto.

        Use LineBox::rootInlineBoxAlignmentOffset to offset the visual start position for RTL display boxes.

        * layout/formattingContexts/inline/InlineDisplayContentBuilder.cpp:
        (WebCore::Layout::InlineDisplayContentBuilder::processNonBidiContent):
        (WebCore::Layout::InlineDisplayContentBuilder::processBidiContent):

2021-12-14  Alex Christensen  <achristensen@webkit.org>

        Add _WKContentRuleListAction.redirected and .modifiedHeaders
        https://bugs.webkit.org/show_bug.cgi?id=234289

        Reviewed by Tim Hatcher.

        These inform the UI process about new actions taken by the extension.

        * contentextensions/ContentExtensionsBackend.cpp:
        (WebCore::ContentExtensions::ContentExtensionsBackend::processContentRuleListsForLoad):
        (WebCore::ContentExtensions::applyResultsToRequest):
        * contentextensions/ContentRuleListResults.h:
        (WebCore::ContentRuleListResults::shouldNotifyApplication const):
        (WebCore::ContentRuleListResults::Result::encode const):
        (WebCore::ContentRuleListResults::Result::decode):
        (WebCore::ContentRuleListResults::Result::shouldNotifyApplication const): Deleted.

2021-12-14  Tyler Wilcock  <tyler_w@apple.com>

        Web Inspector: test webpage keeps reloading when Inspector is open
        https://bugs.webkit.org/show_bug.cgi?id=234076

        Reviewed by Chris Fleizach.

        https://trac.webkit.org/changeset/284335/webkit introduced the
        potential for infinite recursion in AccessibilityObjectMac::shouldIgnoreGroup:

        From accessibilityIsIgnored to computeAccessibilityIsIgnored to
        defaultObjectInclusion to accessibilityPlatformIncludesObject to
        shouldIgnoreGroup to accessibilityText to titleElementText to
        exposesTitleUIElement to accessibilityIsIgnored to ...

        shouldIgnoreGroup returns `true` if the group has one static text
        child with the same content as the group's AX text. We fix the
        recursion by making this check more conservative.

        Rather than checking all of the AX text (which includes title text, alt text, help text,
        visible text, placeholder text), only check the group's alt text and help text. This
        accomplishes the original problem statement laid out in
        https://bugs.webkit.org/show_bug.cgi?id=169924#c0 while avoiding
        infinite recursion, as nothing in AccessibilityNodeObject::alternativeText or
        AccessibilityNodeObject::helpText calls accessibilityIsIgnored.

        Test: accessibility/mac/ignore-redundant-groups-crash.html

        * accessibility/AccessibilityNodeObject.h:
        Move alternativeText and helpText method definitions from private to public
        so they can be called by the static shouldIgnoreGroup method in AccessibilityObjectMac.
        * accessibility/mac/AccessibilityObjectMac.mm:
        (WebCore::shouldIgnoreGroup):
        Check only alt text and help text rather than all
        AX text when deciding if a group should be ignored.

2021-12-14  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Take inline axis direction into account when computing horizontal alignment offset
        https://bugs.webkit.org/show_bug.cgi?id=234286

        Reviewed by Antti Koivisto.

        This is in preparation for computing the content visual start when text-align is non-initial.

        * layout/formattingContexts/inline/InlineLineBoxBuilder.cpp:
        (WebCore::Layout::horizontalAlignmentOffset):
        (WebCore::Layout::LineBoxBuilder::build):

2021-12-11  Dean Jackson  <dino@apple.com>

        Allow override of system's preferred color scheme
        https://bugs.webkit.org/show_bug.cgi?id=234199
        <rdar://problem/86366044>

        Reviewed by Tim Horton.

        Use a user-specified preference for color-scheme before reading
        the system value.

        * css/MediaQueryEvaluator.cpp:
        (WebCore::prefersColorSchemeEvaluate): If the document loader was given
        a preference, use that when evaluating the media query.
        * loader/DocumentLoader.cpp: New property - colorSchemePreference.
        (WebCore::DocumentLoader::colorSchemePreference const):
        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::setColorSchemePreference):
        * dom/Document.cpp:
        (WebCore::Document::useDarkAppearance const): Check the DocumentLoader here too.

2021-12-14  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Make the LineBox content (text runs and inline level boxes) relative to the root inline box.
        https://bugs.webkit.org/show_bug.cgi?id=234285

        Reviewed by Antti Koivisto.

        Let's decouple the root inline box's logical left and the text-align based horizontal offset and
        also make the content inside the root inline box relative to it.
        This is in preparation for handling text-align with non-RTL content.

        * layout/formattingContexts/inline/InlineDisplayContentBuilder.cpp:
        (WebCore::Layout::InlineDisplayContentBuilder::processNonBidiContent):
        (WebCore::Layout::InlineDisplayContentBuilder::processBidiContent):
        * layout/formattingContexts/inline/InlineLineBox.cpp:
        (WebCore::Layout::LineBox::LineBox):
        (WebCore::Layout::LineBox::logicalRectForTextRun const):
        * layout/formattingContexts/inline/InlineLineBox.h:
        (WebCore::Layout::LineBox::rootInlineBoxAlignmentOffset const):
        * layout/formattingContexts/inline/InlineLineBoxBuilder.cpp:
        (WebCore::Layout::LineBoxBuilder::build):

2021-12-14  Rob Buis  <rbuis@igalia.com>

        Incorrect aspect ratio size
        https://bugs.webkit.org/show_bug.cgi?id=234148

        Reviewed by Manuel Rego Casasnovas.

        We previously did a LayoutUnit conversion for the aspect ratio parameter, possibly because
        blockSizeFromAspectRatio/inlineSizeFromAspectRatio changed the parameter type over time.
        Since this conversion loses precision, just pass as double.

        Test: imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/block-aspect-ratio-036.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::constrainLogicalHeightByMinMax const):
        (WebCore::RenderBox::computeLogicalHeight const):
        (WebCore::RenderBox::availableLogicalHeightUsing const):
        (WebCore::RenderBox::computePositionedLogicalHeightUsing const):
        (WebCore::RenderBox::computeLogicalWidthFromAspectRatioInternal const):
        (WebCore::RenderBox::computeMinMaxLogicalWidthFromAspectRatio const):

2021-12-14  Jean-Yves Avenard  <jya@apple.com>

        Rename SharedBuffer classes.
        https://bugs.webkit.org/show_bug.cgi?id=233677
        rdar://problem/85963900

        Reviewed by Youenn Fablet.

        SharedBuffer are renamed FragmentedSharedBuffer and
        ContiguousSharedBuffer to SharedBuffer to better reflect their actual
        types.

        Rename only, no change in behaviour.

        * Modules/async-clipboard/ClipboardImageReader.cpp:
        * Modules/async-clipboard/ClipboardImageReader.h:
        * Modules/async-clipboard/ClipboardItemBindingsDataSource.cpp:
        * Modules/async-clipboard/ClipboardItemBindingsDataSource.h:
        * Modules/async-clipboard/ios/ClipboardImageReaderIOS.mm:
        * Modules/async-clipboard/mac/ClipboardImageReaderMac.mm:
        * Modules/cache/CacheStorageConnection.cpp:
        * Modules/cache/DOMCache.cpp:
        * Modules/cache/DOMCache.h:
        * Modules/cache/DOMCacheEngine.cpp:
        * Modules/cache/DOMCacheEngine.h:
        * Modules/encryptedmedia/CDM.cpp:
        * Modules/encryptedmedia/CDM.h:
        * Modules/encryptedmedia/CDMClient.h:
        * Modules/encryptedmedia/InitDataRegistry.cpp:
        * Modules/encryptedmedia/InitDataRegistry.h:
        * Modules/encryptedmedia/MediaKeySession.cpp:
        * Modules/encryptedmedia/MediaKeySession.h:
        * Modules/encryptedmedia/MediaKeyStatusMap.cpp:
        * Modules/encryptedmedia/MediaKeyStatusMap.h:
        * Modules/encryptedmedia/MediaKeys.cpp:
        * Modules/encryptedmedia/MediaKeys.h:
        * Modules/fetch/FetchBody.cpp:
        * Modules/fetch/FetchBody.h:
        * Modules/fetch/FetchBodyConsumer.cpp:
        * Modules/fetch/FetchBodyConsumer.h:
        * Modules/fetch/FetchLoader.cpp:
        * Modules/fetch/FetchLoader.h:
        * Modules/fetch/FetchResponse.cpp:
        * Modules/fetch/FetchResponse.h:
        * Modules/highlight/AppHighlight.h:
        * Modules/highlight/AppHighlightRangeData.cpp:
        * Modules/highlight/AppHighlightRangeData.h:
        * Modules/highlight/AppHighlightStorage.cpp:
        * Modules/highlight/AppHighlightStorage.h:
        * Modules/indexeddb/server/IDBSerialization.cpp:
        * Modules/indexeddb/server/IDBSerialization.h:
        * Modules/mediarecorder/MediaRecorder.cpp:
        * Modules/mediarecorder/MediaRecorder.h:
        * Modules/mediasession/MediaMetadata.cpp:
        * Modules/mediasource/SourceBuffer.cpp:
        * Modules/mediasource/SourceBuffer.h:
        * Modules/mediastream/RTCDataChannelRemoteHandler.h:
        * Modules/mediastream/libwebrtc/LibWebRTCDataChannelHandler.cpp:
        * Modules/mediastream/libwebrtc/LibWebRTCDataChannelHandler.h:
        * Modules/streams/ReadableStreamSink.h:
        * bindings/js/JSDOMGlobalObject.cpp:
        * bindings/js/ScriptBufferSourceProvider.h:
        * bindings/js/SerializedScriptValue.h:
        * css/CSSFontFaceSource.cpp:
        * css/CSSFontFaceSource.h:
        * dom/DataTransfer.cpp:
        * editing/Editor.cpp:
        * editing/Editor.h:
        * editing/SerializedAttachmentData.h:
        * editing/WebContentReader.h:
        * editing/WebCorePasteboardFileReader.cpp:
        * editing/WebCorePasteboardFileReader.h:
        * editing/cocoa/EditorCocoa.mm:
        * editing/cocoa/HTMLConverter.mm:
        * editing/cocoa/WebContentReaderCocoa.mm:
        * editing/gtk/WebContentReaderGtk.cpp:
        * editing/mac/EditorMac.mm:
        * fileapi/Blob.h:
        * fileapi/NetworkSendQueue.cpp:
        * fileapi/NetworkSendQueue.h:
        * html/FTPDirectoryDocument.cpp:
        * html/HTMLAttachmentElement.cpp:
        * html/HTMLAttachmentElement.h:
        * html/HTMLMediaElement.cpp:
        * html/HTMLMediaElement.h:
        * html/ImageDocument.cpp:
        * inspector/InspectorInstrumentation.cpp:
        * inspector/InspectorInstrumentation.h:
        * inspector/InspectorInstrumentationWebKit.cpp:
        * inspector/InspectorInstrumentationWebKit.h:
        * inspector/NetworkResourcesData.cpp:
        * inspector/NetworkResourcesData.h:
        * inspector/agents/InspectorNetworkAgent.cpp:
        * inspector/agents/InspectorNetworkAgent.h:
        * inspector/agents/InspectorPageAgent.cpp:
        * inspector/agents/InspectorPageAgent.h:
        * loader/ContentFilter.cpp:
        * loader/CrossOriginPreflightChecker.cpp:
        * loader/DocumentLoader.cpp:
        * loader/DocumentLoader.h:
        * loader/DocumentThreadableLoader.cpp:
        * loader/EmptyClients.cpp:
        * loader/FrameLoader.cpp:
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:
        * loader/LoaderStrategy.h:
        * loader/NetscapePlugInStreamLoader.cpp:
        * loader/NetscapePlugInStreamLoader.h:
        * loader/ResourceCryptographicDigest.cpp:
        * loader/ResourceCryptographicDigest.h:
        * loader/ResourceLoader.cpp:
        * loader/ResourceLoader.h:
        * loader/SubresourceLoader.cpp:
        * loader/SubresourceLoader.h:
        * loader/SubstituteData.h:
        * loader/SubstituteResource.h:
        * loader/appcache/ApplicationCacheHost.cpp:
        * loader/appcache/ApplicationCacheHost.h:
        * loader/appcache/ApplicationCacheResource.cpp:
        * loader/appcache/ApplicationCacheResource.h:
        * loader/appcache/ApplicationCacheStorage.cpp:
        * loader/appcache/ApplicationCacheStorage.h:
        * loader/archive/ArchiveFactory.cpp:
        * loader/archive/ArchiveFactory.h:
        * loader/archive/ArchiveResource.cpp:
        * loader/archive/ArchiveResource.h:
        * loader/archive/cf/LegacyWebArchive.cpp:
        * loader/archive/cf/LegacyWebArchive.h:
        * loader/archive/mhtml/MHTMLArchive.cpp:
        * loader/archive/mhtml/MHTMLArchive.h:
        * loader/archive/mhtml/MHTMLParser.cpp:
        * loader/archive/mhtml/MHTMLParser.h:
        * loader/cache/CachedApplicationManifest.cpp:
        * loader/cache/CachedApplicationManifest.h:
        * loader/cache/CachedCSSStyleSheet.cpp:
        * loader/cache/CachedCSSStyleSheet.h:
        * loader/cache/CachedFont.cpp:
        * loader/cache/CachedFont.h:
        * loader/cache/CachedImage.cpp:
        * loader/cache/CachedImage.h:
        * loader/cache/CachedRawResource.cpp:
        * loader/cache/CachedRawResource.h:
        * loader/cache/CachedResource.cpp:
        * loader/cache/CachedResource.h:
        * loader/cache/CachedSVGDocument.cpp:
        * loader/cache/CachedSVGDocument.h:
        * loader/cache/CachedSVGFont.cpp:
        * loader/cache/CachedSVGFont.h:
        * loader/cache/CachedScript.cpp:
        * loader/cache/CachedScript.h:
        * loader/cache/CachedTextTrack.cpp:
        * loader/cache/CachedTextTrack.h:
        * loader/cache/CachedXSLStyleSheet.cpp:
        * loader/cache/CachedXSLStyleSheet.h:
        * loader/cocoa/DiskCacheMonitorCocoa.h:
        * loader/cocoa/DiskCacheMonitorCocoa.mm:
        * loader/ios/LegacyPreviewLoader.h:
        * loader/ios/LegacyPreviewLoader.mm:
        * page/EditorClient.h:
        * page/Page.cpp:
        * page/PageSerializer.cpp:
        * page/PageSerializer.h:
        * page/ShareData.h:
        * page/ShareDataReader.cpp:
        * platform/KeyedCoding.h:
        * platform/NowPlayingManager.h:
        * platform/Pasteboard.cpp:
        * platform/Pasteboard.h:
        * platform/PasteboardCustomData.cpp:
        * platform/PasteboardCustomData.h:
        * platform/PasteboardStrategy.h:
        * platform/PasteboardWriterData.h:
        * platform/PlatformContentFilter.h:
        * platform/PlatformPasteboard.h:
        * platform/PreviewConverter.cpp:
        * platform/PreviewConverter.h:
        * platform/PreviewConverterClient.h:
        * platform/PreviewConverterProvider.h:
        * platform/PromisedAttachmentInfo.h:
        * platform/SharedBuffer.cpp:
        * platform/SharedBuffer.h:
        * platform/SharedBufferChunkReader.cpp:
        * platform/SharedBufferChunkReader.h:
        * platform/StaticPasteboard.cpp:
        * platform/StaticPasteboard.h:
        * platform/audio/NowPlayingInfo.h:
        * platform/audio/cocoa/AudioFileReaderCocoa.cpp:
        * platform/cf/KeyedEncoderCF.cpp:
        * platform/cf/KeyedEncoderCF.h:
        * platform/cf/SharedBufferCF.cpp:
        * platform/cocoa/NetworkExtensionContentFilter.h:
        * platform/cocoa/NetworkExtensionContentFilter.mm:
        * platform/cocoa/ParentalControlsContentFilter.h:
        * platform/cocoa/ParentalControlsContentFilter.mm:
        * platform/cocoa/PasteboardCocoa.mm:
        * platform/cocoa/SharedBufferCocoa.mm:
        * platform/encryptedmedia/CDMInstance.h:
        * platform/encryptedmedia/CDMInstanceSession.h:
        * platform/encryptedmedia/CDMPrivate.h:
        * platform/encryptedmedia/CDMProxy.cpp:
        * platform/encryptedmedia/CDMProxy.h:
        * platform/encryptedmedia/CDMUtilities.cpp:
        * platform/encryptedmedia/CDMUtilities.h:
        * platform/encryptedmedia/clearkey/CDMClearKey.cpp:
        * platform/encryptedmedia/clearkey/CDMClearKey.h:
        * platform/generic/KeyedEncoderGeneric.cpp:
        * platform/generic/KeyedEncoderGeneric.h:
        * platform/glib/KeyedEncoderGlib.cpp:
        * platform/glib/KeyedEncoderGlib.h:
        * platform/glib/SharedBufferGlib.cpp:
        * platform/graphics/Font.cpp:
        * platform/graphics/Font.h:
        * platform/graphics/FontPlatformData.h:
        * platform/graphics/Image.cpp:
        * platform/graphics/Image.h:
        * platform/graphics/ImageBackingStore.h:
        * platform/graphics/ImageDecoder.cpp:
        * platform/graphics/ImageDecoder.h:
        * platform/graphics/ImageSource.cpp:
        * platform/graphics/ImageSource.h:
        * platform/graphics/Model.cpp:
        * platform/graphics/Model.h:
        * platform/graphics/PlatformMediaResourceLoader.h:
        * platform/graphics/SourceBufferPrivate.cpp:
        * platform/graphics/SourceBufferPrivate.h:
        * platform/graphics/WOFFFileFormat.cpp:
        * platform/graphics/WOFFFileFormat.h:
        * platform/graphics/avfoundation/CDMFairPlayStreaming.cpp:
        * platform/graphics/avfoundation/CDMFairPlayStreaming.h:
        * platform/graphics/avfoundation/objc/CDMInstanceFairPlayStreamingAVFObjC.h:
        * platform/graphics/avfoundation/objc/CDMInstanceFairPlayStreamingAVFObjC.mm:
        * platform/graphics/avfoundation/objc/ImageDecoderAVFObjC.h:
        * platform/graphics/avfoundation/objc/ImageDecoderAVFObjC.mm:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.h:
        * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.mm:
        * platform/graphics/cairo/FontCustomPlatformData.h:
        * platform/graphics/cg/ImageDecoderCG.cpp:
        * platform/graphics/cg/ImageDecoderCG.h:
        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        * platform/graphics/cocoa/SourceBufferParser.cpp:
        * platform/graphics/cocoa/SourceBufferParser.h:
        * platform/graphics/cocoa/SourceBufferParserWebM.cpp:
        * platform/graphics/coretext/FontPlatformDataCoreText.cpp:
        * platform/graphics/displaylists/DisplayListItemBuffer.cpp:
        * platform/graphics/displaylists/DisplayListItemBuffer.h:
        * platform/graphics/freetype/FontCustomPlatformDataFreeType.cpp:
        * platform/graphics/freetype/FontPlatformDataFreeType.cpp:
        * platform/graphics/gstreamer/GStreamerCommon.cpp:
        * platform/graphics/gstreamer/GStreamerCommon.h:
        * platform/graphics/gstreamer/ImageDecoderGStreamer.cpp:
        * platform/graphics/gstreamer/ImageDecoderGStreamer.h:
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        * platform/graphics/gstreamer/eme/CDMProxyClearKey.h:
        * platform/graphics/gstreamer/eme/CDMThunder.cpp:
        * platform/graphics/gstreamer/eme/CDMThunder.h:
        * platform/graphics/gstreamer/eme/GStreamerEMEUtilities.cpp:
        * platform/graphics/gstreamer/eme/GStreamerEMEUtilities.h:
        * platform/graphics/mac/FontCustomPlatformData.cpp:
        * platform/graphics/mac/FontCustomPlatformData.h:
        * platform/graphics/opentype/OpenTypeMathData.cpp:
        * platform/graphics/opentype/OpenTypeMathData.h:
        * platform/graphics/opentype/OpenTypeTypes.h:
        * platform/graphics/opentype/OpenTypeUtilities.cpp:
        * platform/graphics/opentype/OpenTypeUtilities.h:
        * platform/graphics/opentype/OpenTypeVerticalData.cpp:
        * platform/graphics/win/DirectWriteUtilities.h:
        * platform/graphics/win/FontCustomPlatformData.cpp:
        * platform/graphics/win/FontCustomPlatformData.h:
        * platform/graphics/win/FontCustomPlatformDataCairo.cpp:
        * platform/graphics/win/FontPlatformDataCairoWin.cpp:
        * platform/graphics/win/FontPlatformDataWin.cpp:
        * platform/graphics/win/ImageDecoderDirect2D.cpp:
        * platform/graphics/win/ImageDecoderDirect2D.h:
        * platform/graphics/win/ImageWin.cpp:
        * platform/gtk/SelectionData.h:
        * platform/image-decoders/ScalableImageDecoder.cpp:
        * platform/image-decoders/ScalableImageDecoder.h:
        * platform/image-decoders/avif/AVIFImageReader.cpp:
        * platform/image-decoders/avif/AVIFImageReader.h:
        * platform/image-decoders/bmp/BMPImageDecoder.cpp:
        * platform/image-decoders/bmp/BMPImageDecoder.h:
        * platform/image-decoders/bmp/BMPImageReader.h:
        * platform/image-decoders/cairo/ImageBackingStoreCairo.cpp:
        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        * platform/image-decoders/gif/GIFImageDecoder.h:
        * platform/image-decoders/gif/GIFImageReader.h:
        * platform/image-decoders/ico/ICOImageDecoder.cpp:
        * platform/image-decoders/ico/ICOImageDecoder.h:
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        * platform/image-decoders/jpeg/JPEGImageDecoder.h:
        * platform/image-decoders/jpeg2000/JPEG2000ImageDecoder.cpp:
        * platform/image-decoders/png/PNGImageDecoder.cpp:
        * platform/image-decoders/webp/WEBPImageDecoder.cpp:
        * platform/image-decoders/webp/WEBPImageDecoder.h:
        * platform/ios/PasteboardIOS.mm:
        * platform/ios/PlatformPasteboardIOS.mm:
        * platform/mac/PasteboardMac.mm:
        * platform/mac/PlatformPasteboardMac.mm:
        * platform/mediarecorder/MediaRecorderPrivate.h:
        * platform/mediarecorder/MediaRecorderPrivateMock.cpp:
        * platform/mediarecorder/cocoa/MediaRecorderPrivateWriterCocoa.h:
        * platform/mediarecorder/cocoa/MediaRecorderPrivateWriterCocoa.mm:
        * platform/network/DataURLDecoder.h:
        * platform/network/FormData.cpp:
        * platform/network/FormData.h:
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleClient.cpp:
        * platform/network/ResourceHandleClient.h:
        * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:
        * platform/network/cocoa/RangeResponseGenerator.mm:
        * platform/network/cocoa/WebCoreNSURLSession.h:
        * platform/network/cocoa/WebCoreNSURLSession.mm:
        * platform/network/curl/CurlDownload.cpp:
        * platform/network/curl/CurlDownload.h:
        * platform/network/curl/CurlMultipartHandle.cpp:
        * platform/network/curl/CurlMultipartHandle.h:
        * platform/network/curl/CurlMultipartHandleClient.h:
        * platform/network/curl/CurlRequest.cpp:
        * platform/network/curl/CurlRequest.h:
        * platform/network/curl/CurlRequestClient.h:
        * platform/network/curl/CurlResourceHandleDelegate.cpp:
        * platform/network/curl/CurlResourceHandleDelegate.h:
        * platform/network/ios/LegacyPreviewLoaderClient.h:
        * platform/posix/SharedBufferPOSIX.cpp:
        * platform/win/PasteboardWin.cpp:
        * platform/win/SharedBufferWin.cpp:
        * testing/MockCDMFactory.cpp:
        * testing/MockCDMFactory.h:
        * testing/MockContentFilter.cpp:
        * testing/MockContentFilter.h:
        * workers/ScriptBuffer.h:
        * workers/WorkerFontLoadRequest.cpp:
        * workers/service/context/ServiceWorkerFetch.cpp:
        * workers/service/context/ServiceWorkerFetch.h:
        * workers/service/server/SWScriptStorage.cpp:
        * xml/XSLTProcessorLibxslt.cpp:
        * xml/parser/XMLDocumentParserLibxml2.cpp:

2021-12-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][a11y] Register the wrappers tree when org.a11y.atspi.Cache.GetItems() is called
        https://bugs.webkit.org/show_bug.cgi?id=234292

        Reviewed by Joanmarie Diggs.

        This ensures wrappers always have a reference before being added to the cache.

        * accessibility/AXObjectCache.h:
        * accessibility/atspi/AXObjectCacheAtspi.cpp:
        (WebCore::AXObjectCache::attachWrapper): Defer the set parent call to next cache update.
        (WebCore::AXObjectCache::platformPerformDeferredCacheUpdate): Do the set parent call here.
        * accessibility/atspi/AccessibilityAtspi.cpp:
        (WebCore::AccessibilityAtspi::registerObject): Do not call addAccessible from here, since it needs the path,
        it's now called from the caller of registerObject().
        (WebCore::AccessibilityAtspi::parentChanged): Notify about parent property change.
        (WebCore::AccessibilityAtspi::childrenChanged): Always emit ChildrenChanged when the tree is registered because
        the atspi cache always consumes it.
        (WebCore::AccessibilityAtspi::addAccessible): We no longer need to dispath addAccessible in the next run loop iteration.
        * accessibility/atspi/AccessibilityAtspi.h:
        * accessibility/atspi/AccessibilityObjectAtspi.cpp:
        (WebCore::AccessibilityObjectAtspi::registerObject): Helper to register the object when path is not needed. Also
        ensure the isolated tree is created before registering the object.
        (WebCore::AccessibilityObjectAtspi::path): Call registerObject().
        (WebCore::AccessibilityObjectAtspi::hyperlinkReference): Use registerObject() instead of path().
        (WebCore::AccessibilityObjectAtspi::setParent): Call AccessibilityAtspi::parentChanged() if the wrapper is still
        and attached and not ignored.
        (WebCore::AccessibilityObjectAtspi::parentReference const): Use the parent member instead of asking the main
        thread again.
        (WebCore::AccessibilityObjectAtspi::isDefunct const): Return true if wrapper has been detached.
        (WebCore::AccessibilityObjectAtspi::childAdded): We no longer need to dispatch childrenChanged in next run loop iteration.
        * accessibility/atspi/AccessibilityObjectAtspi.h:
        * accessibility/atspi/AccessibilityRootAtspi.cpp:
        (WebCore::registerSubtree): Helper to register the wrappers tree recursively.
        (WebCore::AccessibilityRootAtspi::registerTree): Register the wrappers tree.
        * accessibility/atspi/AccessibilityRootAtspi.h:

2021-12-14  Darin Adler  <darin@apple.com>

        Automatically generate event handler content attribute maps so they are easier to maintain
        https://bugs.webkit.org/show_bug.cgi?id=234254

        Reviewed by Alexey Shvayka.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader): Declare forEachEventHandlerContentAttribute
        and forEachWindowEventHandlerContentAttribute as needed.
        (GenerateImplementation): Call GenerateForEachEventHandlerContentAttribute
        as needed.
        (GenerateForEachEventHandlerContentAttribute): Define
        forEachEventHandlerContentAttribute or forEachWindowEventHandlerContentAttribute.

        * bindings/scripts/IDLAttributes.json: Added
        GenerateForEachEventHandlerContentAttribute and
        GenerateForEachWindowEventHandlerContentAttribute. Even though each
        is used in only one class, it's still better to not hard-code the class names.

        * html/HTMLAttributeNames.in: Added oncuechange, onrejectionhandled, and
        onunhandledrejection even though we are not yet implementing any of them in
        this behavior-preserving patch. They need to be present so the automatically
        generated code compiles. But added explicit exceptions as mentioned below to
        make sure no changes are implemented in this patch, and will take those exceptions
        out later in a patch intended to produce a progression, likely with new test cases.
        Re-sorted alphabetically, rather an arbitrary semi-sorted order.

        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::createWindowEventHandlerNameMap): Deleted.
        (WebCore::HTMLBodyElement::eventNameForWindowEventHandlerAttribute): Use
        JSHTMLBodyElement::forEachWindowEventHandlerContentAttribute to create the map.
        Use a lambda instead of a separate function and take advantage of the
        deduction guide for NeverDestroyed. Added exceptions for onrejectionhandled
        and onunhandledrejection, which are both in the IDL file but were not handled
        here, along with a FIXME suggesting we remove the exceptions.
        * html/HTMLElement.h: Removed createWindowEventHandlerNameMap.
        * html/HTMLBodyElement.idl: Added GenerateForEachWindowEventHandlerContentAttribute.

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::createEventHandlerNameMap): Deleted.
        (WebCore::HTMLElement::populateEventHandlerNameMap): Deleted.
        (WebCore::HTMLElement::eventNameForEventHandlerAttribute): Use
        JSHTMLElement::forEachEventHandlerContentAttribute to create the map.
        Use a lambda instead of a separate function and take advantage of the
        deduction guide for NeverDestroyed. Added exception for oncuechange,
        which is in the IDL file but was not handled here, and for 19 other attributes,
        which are not in the IDL file but were handled here, along with two FIXMEs
        suggesting we remove the exceptions.
        * html/HTMLElement.h: Removed populateEventHandlerNameMap and
        createEventHandlerNameMap.
        * html/HTMLElement.idl: Added GenerateForEachEventHandlerContentAttribute.

2021-12-14  Antti Koivisto  <antti@apple.com>

        [CSS Cascade Layers] revert-layer should revert style attribute to regular author style
        https://bugs.webkit.org/show_bug.cgi?id=234082

        Reviewed by Simon Fraser.

        If 'revert-layer' keyword is used in style attribute it should revert to regular author style
        on the default cascade level.

        * style/PropertyCascade.cpp:
        (WebCore::Style::PropertyCascade::PropertyCascade):

        Make the maximum level (used for revert cascades) an std::optional.

        (WebCore::Style::PropertyCascade::setPropertyInternal):
        (WebCore::Style::PropertyCascade::addMatch):

        Factor the revert test into a lambda.
        We can never revert to an attribute style so always skip them.

        * style/PropertyCascade.h:
        (WebCore::Style::PropertyCascade::PropertyCascade):
        (WebCore::Style::PropertyCascade::maximumCascadeLevel const): Deleted.
        (WebCore::Style::PropertyCascade::maximumCascadeLayerPriority const): Deleted.
        * style/RuleSet.h:
        * style/StyleBuilder.cpp:
        (WebCore::Style::Builder::applyCustomProperty):
        (WebCore::Style::Builder::applyCascadeProperty):
        (WebCore::Style::Builder::applyRollbackCascadeProperty):

        Keep a pointer to the current property being applied in state instead of individual priority values.

        (WebCore::Style::Builder::applyProperty):
        (WebCore::Style::Builder::ensureRollbackCascadeForRevert):
        (WebCore::Style::Builder::ensureRollbackCascadeForRevertLayer):

        If the current property is from attribute style it reverts to the same layer.

        * style/StyleBuilder.h:
        * style/StyleBuilderState.h:
        (WebCore::Style::BuilderState::styleScopeOrdinal const):

2021-12-14  Youenn Fablet  <youenn@apple.com>

        Null pointer crash in FetchResponse::clone
        https://bugs.webkit.org/show_bug.cgi?id=234236
        <rdar://86327601>

        Reviewed by Alex Christensen.

        From the log, we are most probably getting a null globalObject from a ScriptExecutionContext in FetchResponse::clone.
        This may happen in case the document is navigated away but we still execute some code for it.
        Add a null check to ensure we do not crash.

        * Modules/fetch/FetchResponse.cpp:
        (WebCore::FetchResponse::clone):

2021-12-14  Ben Nham  <nham@apple.com>

        Add web push message decryption routines
        https://bugs.webkit.org/show_bug.cgi?id=233903

        Reviewed by Brady Eidson.

        This adds routines to decrypt push payloads encoded with the aes128gcm and aesgcm schemes.
        The crypto primitives that we depend are implemented in PushCrypto, while the logic to use
        those primitives to decrypt message payloads is in PushMessageCrypto.

        Test: TestWebKitAPI.PushMessageCrypto

        * Headers.cmake:
        * Modules/push-api/PushCrypto.cpp: Added.
        (WebCore::PushCrypto::P256DHKeyPair::generate):
        (WebCore::PushCrypto::validateP256DHPublicKey):
        (WebCore::PushCrypto::computeP256DHSharedSecret):
        (WebCore::PushCrypto::hmacSHA256):
        (WebCore::PushCrypto::decryptAES128GCM):
        * Modules/push-api/PushCrypto.h: Added.
        * Modules/push-api/PushManager.cpp:
        (WebCore::PushManager::subscribe):
        * Modules/push-api/PushMessageCrypto.cpp: Added.
        (WebCore::PushCrypto::ClientKeys::generate):
        (WebCore::PushCrypto::areClientKeyLengthsValid):
        (WebCore::PushCrypto::computeAES128GCMPaddingLength):
        (WebCore::PushCrypto::decryptAES128GCMPayload):
        (WebCore::PushCrypto::computeAESGCMPaddingLength):
        (WebCore::PushCrypto::decryptAESGCMPayload):
        * Modules/push-api/PushMessageCrypto.h: Added.
        * Modules/push-api/cocoa/PushCryptoCocoa.cpp: Added.
        (WebCore::PushCrypto::P256DHKeyPair::generate):
        (WebCore::PushCrypto::validateP256DHPublicKey):
        (WebCore::PushCrypto::computeP256DHSharedSecret):
        (WebCore::PushCrypto::hmacSHA256):
        (WebCore::PushCrypto::decryptAES128GCM):
        * Sources.txt:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:

2021-12-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][a11y] Handle the Embedded method sent by AtkSocket from AccessibilityRootAtspi
        https://bugs.webkit.org/show_bug.cgi?id=234233

        Reviewed by Adrian Perez de Castro.

        * accessibility/atspi/AccessibilityAtspi.cpp:
        (WebCore::AccessibilityAtspi::registerRoot):
        * accessibility/atspi/AccessibilityRootAtspi.cpp:
        (WebCore::AccessibilityRootAtspi::registerObject):
        (WebCore::AccessibilityRootAtspi::embedded):
        (WebCore::AccessibilityRootAtspi::setParentPath): Deleted.
        * accessibility/atspi/AccessibilityRootAtspi.h:
        * accessibility/atspi/xml/Socket.xml:

2021-12-13  Kate Cheney  <katherine_cheney@apple.com>

        WebContent process crashes at ContentSecurityPolicySourceList::matchesAll
        https://bugs.webkit.org/show_bug.cgi?id=234288
        rdar://problem/86438924

        Reviewed by Simon Fraser.

        * page/csp/ContentSecurityPolicyDirectiveList.cpp:
        (WebCore::ContentSecurityPolicyDirectiveList::violatedDirectiveForScript const):

2021-12-13  Alex Christensen  <achristensen@webkit.org>

        Allow WKContentRuleList to run regexes on current frame's URL, not just top frame's URL
        https://bugs.webkit.org/show_bug.cgi?id=233889

        Reviewed by Timothy Hatcher.

        In 2015, my younger self implemented if-top-url and unless-top-url by running the current URL
        through multiple sets of regexes, those with and those without such conditions.  This wasn't
        really able to be expanded.  In order to implement if-frame-url, I moved the condition type to
        the set of flags stored in the bytecode itself.  Now, we only interpret the bytecode once on the
        currently-requested URL, up to once on the frame URL, and up to once on the top URL, and the latter
        two can be cached because they don't change as often.

        Covered by existing and additional API and layout tests.

        * contentextensions/CompiledContentExtension.h:
        * contentextensions/ContentExtension.cpp:
        (WebCore::ContentExtensions::ContentExtension::ContentExtension):
        (WebCore::ContentExtensions::ContentExtension::compileGlobalDisplayNoneStyleSheet):
        (WebCore::ContentExtensions::ContentExtension::populateTopURLActionCacheIfNeeded const):
        (WebCore::ContentExtensions::ContentExtension::populateFrameURLActionCacheIfNeeded const):
        (WebCore::ContentExtensions::ContentExtension::topURLActions const):
        (WebCore::ContentExtensions::ContentExtension::frameURLActions const):
        (WebCore::ContentExtensions::ContentExtension::populateConditionCacheIfNeeded): Deleted.
        (WebCore::ContentExtensions::ContentExtension::topURLActions): Deleted.
        (WebCore::ContentExtensions::ContentExtension::universalActionsWithConditions): Deleted.
        * contentextensions/ContentExtension.h:
        (WebCore::ContentExtensions::ContentExtension::universalActions const):
        (WebCore::ContentExtensions::ContentExtension::universalActionsWithoutConditions): Deleted.
        * contentextensions/ContentExtensionCompiler.cpp:
        (WebCore::ContentExtensions::serializeActions):
        (WebCore::ContentExtensions::compileRuleList):
        * contentextensions/ContentExtensionCompiler.h:
        * contentextensions/ContentExtensionParser.cpp:
        (WebCore::ContentExtensions::loadTrigger):
        * contentextensions/ContentExtensionRule.cpp:
        (WebCore::ContentExtensions::Trigger::isolatedCopy const):
        * contentextensions/ContentExtensionRule.h:
        (WebCore::ContentExtensions::Trigger::~Trigger):
        (WebCore::ContentExtensions::Trigger::isEmpty const):
        (WebCore::ContentExtensions::Trigger::operator== const):
        * contentextensions/ContentExtensionsBackend.cpp:
        (WebCore::ContentExtensions::ContentExtensionsBackend::actionsFromContentRuleList const):
        (WebCore::ContentExtensions::ContentExtensionsBackend::actionsForResourceLoad const):
        (WebCore::ContentExtensions::ContentExtensionsBackend::processContentRuleListsForLoad):
        (WebCore::ContentExtensions::ContentExtensionsBackend::processContentRuleListsForPingLoad):
        * contentextensions/ContentExtensionsBackend.h:
        * contentextensions/DFABytecode.h:
        * contentextensions/DFABytecodeCompiler.cpp:
        (WebCore::ContentExtensions::DFABytecodeCompiler::emitAppendAction):
        * contentextensions/DFABytecodeInterpreter.cpp:
        (WebCore::ContentExtensions::getBits):
        (WebCore::ContentExtensions::hasFlags):
        (WebCore::ContentExtensions::hasAction):
        (WebCore::ContentExtensions::DFABytecodeInterpreter::interpretAppendAction):
        (WebCore::ContentExtensions::DFABytecodeInterpreter::interpretTestFlagsAndAppendAction):
        (WebCore::ContentExtensions::DFABytecodeInterpreter::actionsMatchingEverything):
        (WebCore::ContentExtensions::DFABytecodeInterpreter::interpret):
        (WebCore::ContentExtensions::matchesCondition): Deleted.
        (WebCore::ContentExtensions::DFABytecodeInterpreter::interpretWithConditions): Deleted.
        * contentextensions/DFABytecodeInterpreter.h:
        (): Deleted.
        * loader/ResourceLoadInfo.cpp:
        * loader/ResourceLoadInfo.h:

2021-12-13  Brady Eidson  <beidson@apple.com>

        Teach webpushtool to register and "host" the daemon.
        https://bugs.webkit.org/show_bug.cgi?id=234265

        Reviewed by Tim Horton.

        * page/PageConsoleClient.h:

2021-12-13  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r286993.
        https://bugs.webkit.org/show_bug.cgi?id=234283


        Reverted changeset:

        "[WebAuthn] Allow same-site, cross-origin iframe get()"
        https://bugs.webkit.org/show_bug.cgi?id=234180
        https://commits.webkit.org/r286993

2021-12-13  Christopher Reid  <chris.reid@sony.com>

        [Curl] Improve curl's cookie conformance in WPT
        https://bugs.webkit.org/show_bug.cgi?id=232722

        Reviewed by Fujii Hironori.

        Fix some cases where CookieJarDB differs from WPT expectations.

        * platform/network/curl/CookieJarDB.cpp:
        __Secure and __Host prefixes are now stricter.
        Don't allow empty cookies to be set.
        * platform/network/curl/CookieUtil.cpp:
        Empty paths should override previous paths in the cookie list.
        * platform/network/curl/NetworkStorageSessionCurl.cpp:

2021-12-13  J Pascoe  <j_pascoe@apple.com>

        [WebAuthn] Allow same-site, cross-origin iframe get()
        https://bugs.webkit.org/show_bug.cgi?id=234180
        rdar://85161142

        Reviewed by Brent Fulgham.

        The Web Authentication level 2 specifies a feature policy to allow get calls in
        cross-origin i-frames. This patch implements this feature policy partially. Only
        same-site, cross-origin i-frames are supported instead. This is for tracking prevention
        purposes. https://w3c.github.io/webauthn/#sctn-iframe-guidance

        This patch also starts passing ClientDataJSON hashes to ASC to avoid the situation
        where WebKit includes crossOrigin or other fields in ClientDataJSON that ASC is
        unaware of when generating ClientDataJSON.

        Added layout test cases for same-site, cross-origin get calls.

        * Modules/webauthn/AuthenticatorCoordinator.cpp:
        (WebCore::AuthenticatorCoordinator::create const):
        (WebCore::doesHaveSameSiteAsAncestors):
        (WebCore::AuthenticatorCoordinator::discoverFromExternalSource const):
        * Modules/webauthn/WebAuthenticationUtils.cpp:
        (WebCore::buildClientDataJson):
        * Modules/webauthn/WebAuthenticationUtils.h:
        * html/FeaturePolicy.cpp:
        (WebCore::policyTypeName):
        (WebCore::FeaturePolicy::parse):
        (WebCore::FeaturePolicy::allows const):
        * html/FeaturePolicy.h:

2021-12-13  Andreu Botella  <andreu@andreubotella.com>

        A FormData constructed in the form's submit event listener shouldn't include the submitter
        https://bugs.webkit.org/show_bug.cgi?id=234069

        Reviewed by Chris Dumez.

        In the HTML spec, the "construct the entry list" algorithm takes an optional `submitter`
        argument which it uses to determine whether a button should be included in the entry list.
        The FormData constructor calls it with no optional arguments, so `new FormData(form)` should
        never contain any buttons.

        In WebKit, however, if a `FormData` object is constructed in the form's `submit` event
        listener, it will contain the submitter button, if the form submission wasn't implicit. This
        is because whether a form control is the submitter is tracked on the control, and activating
        it sets that state for the duration of the form submission algorithm.

        However, the form submission algorithm also sets a submitter's state, to deal with implicit
        submissions. This is set only for the duration of the "construct the entry list" call, and
        so there is no need to set the state when activating the button.

        Tests: imported/w3c/web-platform-tests/html/semantics/forms/form-submission-0/constructing-form-data-set.html

        * html/HTMLButtonElement.cpp:
        (WebCore::HTMLButtonElement::defaultEventHandler):
        * html/ImageInputType.cpp:
        (WebCore::ImageInputType::handleDOMActivateEvent):
        * html/SubmitInputType.cpp:
        (WebCore::SubmitInputType::handleDOMActivateEvent):

2021-12-13  Jean-Yves Avenard  <jya@apple.com>

        Add SharedBufferBuilder class
        https://bugs.webkit.org/show_bug.cgi?id=233442
        rdar://85693939

        Reviewed by Youenn Fablet.

        Similar to StringBuilder, a SharedBuffer can now only be modified through
        a SharedBufferBuilder. A SharedBuffer becomes immutable once created.

        A SharedBufferBuilder is a replacement to RefPtr<SharedBuffer>.
        There exists a difference between a null and empty state.
        Following a call to reset(), SharedBufferBuilder::isNull()
        will return true as opposed to empty() which will create the underlying
        SharedBuffer but with a size of 0.
        A null SharedBufferBuilder indicates that append was never called on it
        (even with an empty SharedBuffer).
        It is not necessary to check if the SharedBufferBuilder is null before
        calling copy() or take() as an empty SharedBuffer will be created if
        none exists.
        These design decisions were made due to how SharedBuffer are currently used
        and to minimise the logic change as some places would distinguish between
        the two states or would always create an empty SharedBuffer and only check
        its size.
        In the future, removing the distinction between null and pty would be
        preferable.

        While the aim was to guarantee that a SharedBuffer once built was immutable.
        This goal wasn't entirely achieved as it is still possible to retrieve a RefPtr
        to a SharedBuffer and continue to append to it through its SharedBufferBuilder
        owner. Full immutability could be fully achieved with having get() return a
        shallow copy which is a relatively cheap operation.

        Fly-By fixes: Pass SharedBuffer via const references or pointers where it's easy
        to do so.
        No change in observable behaviour; covered by existing tests.

        * Modules/cache/DOMCache.cpp:
        (WebCore::DOMCache::addAll):
        (WebCore::DOMCache::put):
        * Modules/fetch/FetchBodyConsumer.cpp:
        (WebCore::FetchBodyConsumer::clean):
        (WebCore::FetchBodyConsumer::resolve):
        (WebCore::FetchBodyConsumer::append):
        (WebCore::FetchBodyConsumer::setData):
        (WebCore::FetchBodyConsumer::takeData):
        (WebCore::FetchBodyConsumer::takeAsArrayBuffer):
        (WebCore::FetchBodyConsumer::takeAsBlob):
        (WebCore::FetchBodyConsumer::takeAsText):
        (WebCore::FetchBodyConsumer::setSource):
        * Modules/fetch/FetchBodyConsumer.h:
        (WebCore::FetchBodyConsumer::data const):
        (WebCore::FetchBodyConsumer::setData): Deleted.
        * Modules/model-element/HTMLModelElement.cpp:
        (WebCore::HTMLModelElement::setSourceURL):
        (WebCore::HTMLModelElement::dataReceived):
        (WebCore::HTMLModelElement::notifyFinished):
        * Modules/model-element/HTMLModelElement.h:
        * inspector/NetworkResourcesData.cpp:
        (WebCore::NetworkResourcesData::ResourceData::ResourceData):
        (WebCore::NetworkResourcesData::ResourceData::removeContent):
        (WebCore::NetworkResourcesData::ResourceData::hasData const):
        (WebCore::NetworkResourcesData::ResourceData::dataLength const):
        (WebCore::NetworkResourcesData::ResourceData::appendData):
        (WebCore::NetworkResourcesData::ResourceData::decodeDataToContent):
        * inspector/NetworkResourcesData.h:
        (WebCore::NetworkResourcesData::ResourceData::hasBufferedData const):
        (WebCore::NetworkResourcesData::ResourceData::hasData const): Deleted.
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::releaseResources):
        (WebCore::ResourceLoader::setDataBufferingPolicy):
        (WebCore::ResourceLoader::addDataOrBuffer):
        (WebCore::ResourceLoader::resourceData const):
        (WebCore::ResourceLoader::clearResourceData):
        * loader/ResourceLoader.h:
        (WebCore::ResourceLoader::resourceData const): Deleted.
        * loader/SubstituteResource.h:
        (WebCore::SubstituteResource::data const):
        (WebCore::SubstituteResource::append):
        (WebCore::SubstituteResource::clear):
        (WebCore::SubstituteResource::deliver):
        * loader/appcache/ApplicationCacheResourceLoader.cpp:
        (WebCore::ApplicationCacheResourceLoader::dataReceived):
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::store):
        * loader/archive/mhtml/MHTMLParser.cpp:
        (WebCore::MHTMLParser::parseNextPart):
        * loader/cache/CachedApplicationManifest.cpp:
        (WebCore::CachedApplicationManifest::finishLoading):
        * loader/cache/CachedApplicationManifest.h:
        * loader/cache/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::finishLoading):
        * loader/cache/CachedCSSStyleSheet.h:
        * loader/cache/CachedFont.cpp:
        (WebCore::CachedFont::finishLoading):
        * loader/cache/CachedFont.h:
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::updateBufferInternal):
        (WebCore::CachedImage::convertedDataIfNeeded const):
        (WebCore::CachedImage::updateBuffer):
        (WebCore::CachedImage::finishLoading):
        * loader/cache/CachedImage.h:
        * loader/cache/CachedRawResource.cpp:
        (WebCore::CachedRawResource::updateBuffer):
        (WebCore::CachedRawResource::finishLoading):
        * loader/cache/CachedRawResource.h:
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::updateBuffer):
        (WebCore::CachedResource::finishLoading):
        * loader/cache/CachedResource.h:
        * loader/cache/CachedSVGDocument.cpp:
        (WebCore::CachedSVGDocument::finishLoading):
        * loader/cache/CachedSVGDocument.h:
        * loader/cache/CachedScript.cpp:
        (WebCore::CachedScript::finishLoading):
        * loader/cache/CachedScript.h:
        * loader/cache/CachedTextTrack.cpp:
        (WebCore::CachedTextTrack::doUpdateBuffer):
        (WebCore::CachedTextTrack::updateBuffer):
        (WebCore::CachedTextTrack::finishLoading):
        * loader/cache/CachedTextTrack.h:
        * loader/cache/CachedXSLStyleSheet.cpp:
        (WebCore::CachedXSLStyleSheet::finishLoading):
        * loader/cache/CachedXSLStyleSheet.h:
        * loader/ios/LegacyPreviewLoader.h:
        * loader/ios/LegacyPreviewLoader.mm:
        (WebCore::LegacyPreviewLoader::previewConverterDidStartConverting):
        (WebCore::LegacyPreviewLoader::provideMainResourceForPreviewConverter):
        * platform/PreviewConverter.cpp:
        (WebCore::PreviewConverter::previewData const):
        (WebCore::PreviewConverter::replayToClient):
        * platform/PreviewConverter.h:
        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::append):
        * platform/SharedBuffer.h:
        (WebCore::SharedBufferBuilder::SharedBufferBuilder):
        (WebCore::SharedBufferBuilder::append):
        (WebCore::SharedBufferBuilder::operator bool const):
        (WebCore::SharedBufferBuilder::isNull const):
        (WebCore::SharedBufferBuilder::isEmpty const):
        (WebCore::SharedBufferBuilder::size const):
        (WebCore::SharedBufferBuilder::reset):
        (WebCore::SharedBufferBuilder::empty):
        (WebCore::SharedBufferBuilder::get const):
        (WebCore::SharedBufferBuilder::copy const):
        (WebCore::SharedBufferBuilder::take):
        (WebCore::SharedBufferBuilder::ensureBuffer):
        * platform/encryptedmedia/clearkey/CDMClearKey.cpp:
        (WebCore::extractKeyidsFromCencInitData):
        (WebCore::extractKeyIdFromWebMInitData):
        * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.h:
        * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.mm:
        (WebCore::PlatformResourceMediaLoader::dataReceived):
        (WebCore::WebCoreAVFResourceLoader::newDataStoredInSharedBuffer):
        * platform/graphics/gstreamer/eme/GStreamerEMEUtilities.h:
        (WebCore::InitData::InitData):
        (WebCore::InitData::append):
        (WebCore::InitData::payload const):
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore::readICCProfile):
        * platform/ios/PreviewConverterIOS.mm:
        (WebCore::PreviewConverter::PreviewConverter):
        * platform/mediarecorder/cocoa/MediaRecorderPrivateWriterCocoa.h:
        * platform/mediarecorder/cocoa/MediaRecorderPrivateWriterCocoa.mm:
        (WebCore::MediaRecorderPrivateWriter::~MediaRecorderPrivateWriter):
        (WebCore::MediaRecorderPrivateWriter::appendData):
        (WebCore::MediaRecorderPrivateWriter::takeData):
        * platform/network/cocoa/RangeResponseGenerator.mm:
        (WebCore::RangeResponseGenerator::Data::Data):
        (WebCore::RangeResponseGenerator::giveResponseToTaskIfBytesInRangeReceived):
        (WebCore::RangeResponseGenerator::expectedContentLengthFromData):
        * workers/ScriptBuffer.cpp:
        (WebCore::ScriptBuffer::ScriptBuffer):
        (WebCore::ScriptBuffer::toString const):
        (WebCore::ScriptBuffer::containsSingleFileMappedSegment const):
        (WebCore::ScriptBuffer::append):
        * workers/ScriptBuffer.h:
        (WebCore::ScriptBuffer::buffer const):
        (WebCore::ScriptBuffer::isolatedCopy const):
        (WebCore::ScriptBuffer::isEmpty const):
        * workers/WorkerFontLoadRequest.cpp:
        (WebCore::WorkerFontLoadRequest::WorkerFontLoadRequest):
        (WebCore::WorkerFontLoadRequest::isPending const):
        (WebCore::WorkerFontLoadRequest::ensureCustomFontData):
        (WebCore::WorkerFontLoadRequest::didReceiveData):
        * workers/WorkerFontLoadRequest.h:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::XMLHttpRequest):
        (WebCore::XMLHttpRequest::createResponseBlob):
        (WebCore::XMLHttpRequest::createResponseArrayBuffer):
        (WebCore::XMLHttpRequest::clearResponseBuffers):
        (WebCore::XMLHttpRequest::didReceiveData):
        * xml/XMLHttpRequest.h:

2021-12-13  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r283354.
        https://bugs.webkit.org/show_bug.cgi?id=234273

        causes missing content with clip-path

        Reverted changeset:

        "[Performance] Optimize
        RenderLayer::clipCrossesPaintingBoundary"
        https://bugs.webkit.org/show_bug.cgi?id=230885
        https://commits.webkit.org/r283354

2021-12-13  Alejandro G. Castro  <alex@igalia.com>

        [GTK] Fix ANGLE compilation
        https://bugs.webkit.org/show_bug.cgi?id=233327

        Reviewed by Kenneth Russell.

        No tests required.

        Fixed the issues to make the engine work with -DUSE_ANGLE_WEBGL=ON
        defined.

        * platform/graphics/GLContext.cpp:
        (WebCore::initializeOpenGLShimsIfNeeded): In case of GTK and WPE
        initially we are going to keep TextureMapper using system GL
        libraries, even when we are using ANGLE for WebGL, so we need the
        shims definitions.
        * platform/graphics/nicosia/texmap/NicosiaGCGLLayer.cpp:
        (Nicosia::GCGLLayer::swapBuffersIfNeeded): We need to allocate and
        update the layer buffer in the compositor thread to make sure it
        is handled in just one thread.

2021-12-13  Antti Koivisto  <antti@apple.com>

        [CSS Cascade Layers] Layers specified in import rules can not be reordered on media query evaluation
        https://bugs.webkit.org/show_bug.cgi?id=234158

        Reviewed by Simon Fraser.

        * style/RuleSetBuilder.cpp:
        (WebCore::Style::RuleSetBuilder::addChildRules):
        (WebCore::Style::RuleSetBuilder::addRulesFromSheetContents):

        @import rules can introduce new layers so need to alse be considered for reordering by media queries
        (which requires static evaluation).

        (WebCore::Style::RuleSetBuilder::disallowDynamicMediaQueryEvaluationIfNeeded):

        Factor into a function.

        * style/RuleSetBuilder.h:

2021-12-13  Chris Dumez  <cdumez@apple.com>

        Regression(r283565) Unable to report private messages as Spam in Twitter app
        https://bugs.webkit.org/show_bug.cgi?id=234253
        <rdar://86043227>

        Reviewed by Alex Christensen.

        Add macro for new linkedOnOrAfter check for sending the Authorization header
        on same origin redirects.

        * platform/cocoa/VersionChecks.h:

2021-12-13  Youenn Fablet  <youenn@apple.com>

        FetchResponse::clone should use the relevant realm for the cloned response
        https://bugs.webkit.org/show_bug.cgi?id=234238

        Reviewed by Alexey Shvayka.

        Reuse the relevant realm for cloning as per https://fetch.spec.whatwg.org/#dom-response-clone step 3.
        If context is stopped, throw an InvalidStateError exception, like done in Chrome.

        Test: http/wpt/fetch/clone-realm.html

        * Modules/fetch/FetchResponse.cpp:
        * Modules/fetch/FetchResponse.h:
        * Modules/fetch/FetchResponse.idl:

2021-12-13  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Simple RTL content does not need visual reordering
        https://bugs.webkit.org/show_bug.cgi?id=234252

        Reviewed by Antti Koivisto.

        * layout/formattingContexts/inline/InlineItemsBuilder.cpp:
        (WebCore::Layout::InlineItemsBuilder::build):
        (WebCore::Layout::InlineItemsBuilder::breakAndComputeBidiLevels):
        * layout/formattingContexts/inline/InlineItemsBuilder.h:
        (WebCore::Layout::InlineItemsBuilder::needsVisualReordering const):
        (WebCore::Layout::InlineItemsBuilder::needsVisualReordeering const): Deleted.

2021-12-13  Youenn Fablet  <youenn@apple.com>

        Fix buggy assert in CoreAudioSharedUnit::setupAudioUnit
        https://bugs.webkit.org/show_bug.cgi?id=234151

        Reviewed by Eric Carlson.

        Add the source as a client to the unit before reconfiguring the unit,
        this makes the ASSERT(hasClients()) actually valid.
        Manually tested.

        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:

2021-12-13  Nikolas Zimmermann  <nzimmermann@igalia.com>

        [LBSE] Rename RenderSVGModelObject -> LegacyRenderSVGModelObject
        https://bugs.webkit.org/show_bug.cgi?id=234235

        Reviewed by Rob Buis.

        RenderSVGModelObject will inherit from RenderLayerModelObject in LBSE,
        therefore rename the current implementation to LegacyRenderSVGRoot and
        adapt all callsites.

        Covered by existing tests, no change in behaviour.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::isLayoutDependent):
        (WebCore::ComputedStyleExtractor::valueForPropertyInStyle):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::computedFragmentedFlowState):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isLegacyRenderSVGModelObject const):
        (WebCore::RenderObject::isRenderOrLegacyRenderSVGModelObject const):
        * rendering/svg/LegacyRenderSVGModelObject.cpp: Renamed from Source/WebCore/rendering/svg/RenderSVGModelObject.cpp.
        (WebCore::LegacyRenderSVGModelObject::LegacyRenderSVGModelObject):
        (WebCore::LegacyRenderSVGModelObject::clippedOverflowRect const):
        (WebCore::LegacyRenderSVGModelObject::computeFloatVisibleRectInContainer const):
        (WebCore::LegacyRenderSVGModelObject::mapLocalToContainer const):
        (WebCore::LegacyRenderSVGModelObject::pushMappingToContainer const):
        (WebCore::LegacyRenderSVGModelObject::outlineBoundsForRepaint const):
        (WebCore::LegacyRenderSVGModelObject::absoluteRects const):
        (WebCore::LegacyRenderSVGModelObject::absoluteQuads const):
        (WebCore::LegacyRenderSVGModelObject::willBeDestroyed):
        (WebCore::LegacyRenderSVGModelObject::styleDidChange):
        (WebCore::LegacyRenderSVGModelObject::nodeAtPoint):
        (WebCore::LegacyRenderSVGModelObject::absoluteFocusRingQuads):
        (WebCore::LegacyRenderSVGModelObject::checkIntersection):
        (WebCore::LegacyRenderSVGModelObject::checkEnclosure):
        * rendering/svg/LegacyRenderSVGModelObject.h: Renamed from Source/WebCore/rendering/svg/RenderSVGModelObject.h.
        * rendering/svg/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::RenderSVGContainer):
        (WebCore::RenderSVGContainer::layout):
        * rendering/svg/RenderSVGContainer.h:
        * rendering/svg/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::RenderSVGImage):
        (WebCore::RenderSVGImage::willBeDestroyed):
        (WebCore::RenderSVGImage::imageElement const):
        (WebCore::RenderSVGImage::layout):
        * rendering/svg/RenderSVGImage.h:
        * rendering/svg/RenderSVGShape.cpp:
        (WebCore::RenderSVGShape::RenderSVGShape):
        (WebCore::RenderSVGShape::layout):
        * rendering/svg/RenderSVGShape.h:
        * rendering/svg/RenderSVGShapeInlines.h:
        (WebCore::RenderSVGShape::graphicsElement const):
        * svg/SVGSVGElement.cpp:
        (WebCore::checkIntersectionWithoutUpdatingLayout):
        (WebCore::checkEnclosureWithoutUpdatingLayout):

2021-12-13  Elliott Williams  <emw@apple.com>

        Deployment target for macOS 11+ does not follow minor version bumps
        https://bugs.webkit.org/show_bug.cgi?id=233906

        Reviewed by Alexey Proskuryakov.
        
        Changes the deployment target for macOS 11 and above to use the default SDK version, instead
        of looking up a version using TARGET_MAC_OS_X_VERSION_MAJOR.
        
        Prior to macOS 11, the deployment target did NOT change between minor versions (e.g.
        "10.15" was the deployment target for all builds of 10.15.x). Now, minor releases may
        change the deployment target, so we cannot rely solely on the MAC_OS_X_VERSION_MAJOR to
        determine what deployment target to build for.
        
        Since the deployment target may change within different versions of a major release,
        TARGET_MAC_OS_X_VERSION_MAJOR is no longer useful for selecting a deployment target. It
        should be considered read-only. To build for a non-default macOS version, set the
        deployment target directly.
        
        Reverts changes made in https://commits.webkit.org/230363@main, now that Xcode has been
        fixed in rdar://problem/70185899.

        * Configurations/DebugRelease.xcconfig:
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::variationAxes): Removes a defensive unguarded-availability pragma, now that the
        underlying issue is fixed.
        
2021-12-13  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Display boxes have physical geometry.
        https://bugs.webkit.org/show_bug.cgi?id=234248

        Reviewed by Antti Koivisto.

        logicalRect -> rect.

        * display/css/DisplayBoxFactory.cpp:
        (WebCore::Display::BoxFactory::displayBoxForTextRun const):
        * layout/Verification.cpp:
        (WebCore::Layout::checkForMatchingNonTextRuns):
        (WebCore::Layout::checkForMatchingTextRuns):
        (WebCore::Layout::outputMismatchingComplexLineInformationIfNeeded):
        * layout/formattingContexts/inline/InlineDisplayContentBuilder.cpp:
        (WebCore::Layout::InlineDisplayContentBuilder::adjustVisualGeometryForDisplayBox):
        (WebCore::Layout::InlineDisplayContentBuilder::processOverflownRunsForEllipsis):
        * layout/formattingContexts/inline/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::computeStaticPositionForOutOfFlowContent):
        * layout/formattingContexts/inline/display/InlineDisplayBox.h:
        (WebCore::InlineDisplay::Box::rect const):
        (WebCore::InlineDisplay::Box::top const):
        (WebCore::InlineDisplay::Box::bottom const):
        (WebCore::InlineDisplay::Box::left const):
        (WebCore::InlineDisplay::Box::right const):
        (WebCore::InlineDisplay::Box::width const):
        (WebCore::InlineDisplay::Box::height const):
        (WebCore::InlineDisplay::Box::moveVertically):
        (WebCore::InlineDisplay::Box::moveHorizontally):
        (WebCore::InlineDisplay::Box::setLeft):
        (WebCore::InlineDisplay::Box::setRight):
        (WebCore::InlineDisplay::Box::setRect):
        (WebCore::InlineDisplay::Box::Box):
        (WebCore::InlineDisplay::Box::truncate):
        (WebCore::InlineDisplay::Box::logicalRect const): Deleted.
        (WebCore::InlineDisplay::Box::logicalTop const): Deleted.
        (WebCore::InlineDisplay::Box::logicalBottom const): Deleted.
        (WebCore::InlineDisplay::Box::logicalLeft const): Deleted.
        (WebCore::InlineDisplay::Box::logicalRight const): Deleted.
        (WebCore::InlineDisplay::Box::logicalWidth const): Deleted.
        (WebCore::InlineDisplay::Box::logicalHeight const): Deleted.
        (WebCore::InlineDisplay::Box::setLogicalLeft): Deleted.
        (WebCore::InlineDisplay::Box::setLogicalRight): Deleted.
        (WebCore::InlineDisplay::Box::setLogicalRect): Deleted.
        * layout/integration/InlineIteratorBoxModernPath.h:
        (WebCore::InlineIterator::BoxModernPath::rect const):
        * layout/integration/LayoutIntegrationBoxTree.cpp:
        (WebCore::LayoutIntegration::showInlineContent):
        * layout/integration/LayoutIntegrationInlineContentBuilder.cpp:
        (WebCore::LayoutIntegration::InlineContentBuilder::createDisplayLines const):
        * layout/integration/LayoutIntegrationLineLayout.cpp:
        (WebCore::LayoutIntegration::LineLayout::firstInlineBoxRect const):
        (WebCore::LayoutIntegration::LineLayout::collectInlineBoxRects const):
        (WebCore::LayoutIntegration::LineLayout::hitTest):
        * layout/layouttree/LayoutTreeBuilder.cpp:
        (WebCore::Layout::showInlineTreeAndRuns):

2021-12-13  Tim Nguyen  <ntim@apple.com>

        Fix paint order of CSS text decorations
        https://bugs.webkit.org/show_bug.cgi?id=227445

        Reviewed by Simon Fraser.

        * rendering/TextBoxPainter.cpp:
        (WebCore::TextBoxPainter::paintForegroundAndDecorations):
        (WebCore::TextBoxPainter::createDecorationPainter):
        (WebCore::TextBoxPainter::paintBackgroundDecorations):
        (WebCore::TextBoxPainter::paintForegroundDecorations):
        (WebCore::TextBoxPainter::paintDecoration): Deleted.
        * rendering/TextBoxPainter.h:
        * rendering/TextDecorationPainter.cpp:
        (WebCore::TextDecorationPainter::paintBackgroundDecorations):
        (WebCore::TextDecorationPainter::paintForegroundDecorations):
        (WebCore::TextDecorationPainter::paintLineThrough):
        (WebCore::TextDecorationPainter::paintTextDecoration): Deleted.
        * rendering/TextDecorationPainter.h:

2021-12-13  Jer Noble  <jer.noble@apple.com>

        Unreviewed build fix; add a convenience function to safely compare possibly null CFStringRefs.

        * platform/graphics/avfoundation/FormatDescriptionUtilities.cpp:
        (WebCore::presentationSizeFromFormatDescription):
        (WebCore::colorSpaceFromFormatDescription):

2021-12-13  Sergio Villar Senin  <svillar@igalia.com>

        [css-writing-modes] Use the correct margins in computeInlinePreferredLogicalWidths in orthogonal flows
        https://bugs.webkit.org/show_bug.cgi?id=233562
        <rdar://problem/86105904>

        Reviewed by Rob Buis.

        In order to compute the preferred logical width of an inline element we must compute the preferred widths of
        its children. More precisely we should compute the intrinsic size of the children in the inline direction of the
        inline element. For parallel flows this means indeed computing the preferred logical width. Translated to
        the margins, we should compute the margin-start and margin-end of each child.

        However for orthogonal writing modes we should not use the margin-start & margin-end but margin-after and
        margin-before. That's why in order to support orthogonal flows we should replace marginStart() usage by
        marginStartUsing(parentStyle) (same for marginEnd).

        Test: imported/w3c/web-platform-tests/css/css-writing-modes/inline-box-orthogonal-child-with-margins.html

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::computeInlinePreferredLogicalWidths const):

2021-12-13  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Non-bidi content with RTL inline base direction may need visual reordering
        https://bugs.webkit.org/show_bug.cgi?id=234242

        Reviewed by Antti Koivisto.

        This is in preparation for enabling content with RTL base direction.

        * layout/formattingContexts/inline/InlineItemsBuilder.cpp:
        (WebCore::Layout::InlineItemsBuilder::build):
        (WebCore::Layout::InlineItemsBuilder::breakAndComputeBidiLevels):
        * layout/formattingContexts/inline/InlineItemsBuilder.h:
        (WebCore::Layout::InlineItemsBuilder::needsVisualReordeering const):

2021-12-13  Antti Koivisto  <antti@apple.com>

        [CSS Cascade Layers] Unflake and fix web-platform-tests/css/css-cascade/layer-statement-before-import.html
        https://bugs.webkit.org/show_bug.cgi?id=233944

        Reviewed by Simon Fraser.

        Inserting rules before early layer statements may be legal if they are moved to the regular rule list.

        * css/StyleSheetContents.cpp:
        (WebCore::StyleSheetContents::wrapperInsertRule):

2021-12-13  Adrian Perez de Castro  <aperez@igalia.com>

        Fix non-unified builds after r286853

        Unreviewed build fix.

        No new tests needed.

        * loader/SubresourceIntegrity.h: Add missing <optional> header inclusion, forward-declare
        EncodedResourceCryptographicDigest type.

2021-12-13  Youenn Fablet  <youenn@apple.com>

        Fix ServiceWorker downloads
        https://bugs.webkit.org/show_bug.cgi?id=202142
        <rdar://problem/55721934>

        Reviewed by Alex Christensen.

        Add API to ask the fetch task to become a download.

        Tests: http/tests/workers/service/service-worker-download-body.https.html
               http/tests/workers/service/service-worker-download-stream.https.html
               http/wpt/service-workers/fetch-service-worker-preload-download-through-direct-preload.https.html
               http/wpt/service-workers/fetch-service-worker-preload-download.https.html

        * workers/service/context/ServiceWorkerFetch.h:
        * workers/service/context/ServiceWorkerThreadProxy.cpp:
        * workers/service/context/ServiceWorkerThreadProxy.h:

2021-12-13  Kimmo Kinnunen  <kkinnunen@apple.com>

        Cocoa WebGL should support UI side compositing
        https://bugs.webkit.org/show_bug.cgi?id=231009
        <rdar://83437059>

        Reviewed by Simon Fraser.

        Second try, previous was reverted due to a test failure.
        See WebKit side for the description.

        Implement Cocoa UI-side compositing for WebGL.

        Make CanvasRenderingContext draw via GraphicsLayerContentsDisplayDelegate
        instead of PlatformLayer. On Cocoa the GraphicsLayer contents can be
        three different objects: CGImage, CALayer or content in "backing store"
        of the underlying compositor layer.
        For UI-side compositing for WebGL, we want it to be the latter.
        As such, the object CanvasRenderingContext draws to cannot be a platform
        layer (CALayer). So conceptually, WebGL does not draw into a platform
        layer, it draws into backing store that can be put to (possibly many)
        platform layers.

        Add GraphicsLayerContentsDisplayDelegate interface, which can be
        used to run client specific code during compositor layer contents update
        phase (i.e. layer display phase).

        WebGL will use new overloads of PlatformCALayer::setContents to set the
        contents during delegated display. The contents is IOSurface for
        in-process mode and MachSendRight of IOSurface in GPUP mode.
        The IOSurface is set as the contents of the WebSimpleLayer instead
        of the running the draw via display().
        The MachSendRight is set as the contents of PlatformCALayerRemote
        and be serialized to the UI process.

        For non-Cocoa ports, add a simple GraphicsLayerContentsDisplayDelegate
        that returns the platform layer to the GraphicsLayer inside the compositor.

        No new tests, a refactor.

        * Headers.cmake:
        * PlatformMac.cmake:
        * Sources.txt:
        * SourcesCocoa.txt:
        * WebCore.order:
        * WebCore.xcodeproj/project.pbxproj:
        * html/canvas/CanvasRenderingContext.cpp:
        (WebCore::CanvasRenderingContext::layerContentsDisplayDelegate):
        * html/canvas/CanvasRenderingContext.h:
        (WebCore::CanvasRenderingContext::platformLayer const): Deleted.
        * html/canvas/PlaceholderRenderingContext.cpp:
        (WebCore::PlaceholderRenderingContext::layerContentsDisplayDelegate):
        (WebCore::PlaceholderRenderingContext::platformLayer const): Deleted.
        * html/canvas/PlaceholderRenderingContext.h:
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::layerContentsDisplayDelegate):
        (WebCore::WebGLRenderingContextBase::platformLayer const): Deleted.
        * html/canvas/WebGLRenderingContextBase.h:
        * platform/graphics/GraphicsContextGL.h:
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::setContentsDisplayDelegate):
        * platform/graphics/GraphicsLayer.h:
        * platform/graphics/GraphicsLayerContentsDisplayDelegate.cpp: Added.
        (WebCore::GraphicsLayerContentsDisplayDelegate::prepareToDelegateDisplay):
        (WebCore::GraphicsLayerContentsDisplayDelegate::orientation const):
        * platform/graphics/GraphicsLayerContentsDisplayDelegate.h: Added.
        * platform/graphics/ImageBufferPipe.h:
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::setContentsDisplayDelegate):
        (WebCore::GraphicsLayerCA::layerDisplay):
        (WebCore::GraphicsLayerCA::updateContentsPlatformLayer):
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/PlatformCALayerClient.h:
        (WebCore::PlatformCALayerClient::platformCALayerLayerDisplay):
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.h:
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:
        (WebCore::PlatformCALayerCocoa::layerTypeForPlatformLayer):
        (WebCore::PlatformCALayerCocoa::PlatformCALayerCocoa):
        (WebCore::PlatformCALayerCocoa::commonInit):
        (WebCore::PlatformCALayerCocoa::setContents):
        * platform/graphics/cocoa/GraphicsContextGLOpenGLCocoa.mm:
        (WebCore::GraphicsContextGLOpenGL::displayBuffer):
        (WebCore::GraphicsContextGLOpenGL::markDisplayBufferInUse):
        (WebCore::GraphicsContextGLOpenGL::platformLayer const): Deleted.
        * platform/graphics/cocoa/WebGLLayer.mm: Removed.
        (-[WebGLLayer initWithDevicePixelRatio:contentsOpaque:]): Deleted.
        (-[WebGLLayer setTransform:]): Deleted.
        (-[WebGLLayer setAnchorPoint:]): Deleted.
        (-[WebGLLayer display]): Deleted.
        * platform/graphics/cocoa/WebProcessGraphicsContextGLOpenGLCocoa.mm:
        * platform/graphics/cv/CVUtilities.mm:
        * platform/graphics/mac/WebLayer.mm:
        (-[WebSimpleLayer display]):
        * platform/graphics/nicosia/NicosiaImageBufferPipe.cpp:
        (Nicosia::WebCore::NicosiaImageBufferPipeSource::layerContentsDisplayDelegate):
        (Nicosia::WebCore::NicosiaImageBufferPipe::layerContentsDisplayDelegate):
        (Nicosia::NicosiaImageBufferPipeSource::NicosiaImageBufferPipeSource): Deleted.
        (Nicosia::NicosiaImageBufferPipeSource::~NicosiaImageBufferPipeSource): Deleted.
        (Nicosia::NicosiaImageBufferPipeSource::handle): Deleted.
        (Nicosia::NicosiaImageBufferPipeSource::platformLayer const): Deleted.
        (Nicosia::NicosiaImageBufferPipeSource::swapBuffersIfNeeded): Deleted.
        (Nicosia::NicosiaImageBufferPipe::NicosiaImageBufferPipe): Deleted.
        (Nicosia::NicosiaImageBufferPipe::source const): Deleted.
        (Nicosia::NicosiaImageBufferPipe::platformLayer const): Deleted.
        * platform/graphics/opengl/GraphicsContextGLOpenGL.h:
        * platform/graphics/texmap/GraphicsContextGLTextureMapper.cpp:
        (WebCore::GraphicsContextGLOpenGL::create):
        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::GraphicsLayerTextureMapper::setContentsDisplayDelegate):
        * platform/graphics/texmap/GraphicsLayerTextureMapper.h:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::setContentsDisplayDelegate):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateConfiguration):

2021-12-13  Martin Robinson  <mrobinson@webkit.org>

        `transform-origin` on SVG elements does not take into account the transform reference box origin
        https://bugs.webkit.org/show_bug.cgi?id=234078

        Reviewed by Rob Buis.

        No new tests. This is covered by existing WPT tests.

        * svg/SVGGraphicsElement.cpp:
        (WebCore::SVGGraphicsElement::animatedLocalTransform const): Add the reference box origin
        to the calculated reference box offset when calculating the transform origin for SVG.

2021-12-13  Youenn Fablet  <youenn@apple.com>

        Implement step 17 of main fetch algorithm
        https://bugs.webkit.org/show_bug.cgi?id=234140

        Reviewed by Brent Fulgham.

        The step was implemented for non DocumentThreadableLoader resources, we need to also do the same step within DocumentThreadableLoader.

        Covered by existing updated tests.

        * loader/DocumentThreadableLoader.cpp:
        * loader/DocumentThreadableLoader.h:

2021-12-13  Youenn Fablet  <youenn@apple.com>

        Rename startCallback to resetCallback in AudioMediaStreamTrackRendererUnit createInternalUnit
        https://bugs.webkit.org/show_bug.cgi?id=234142

        Reviewed by Eric Carlson.

        No change of behavior, just a renaming.

        * platform/mediastream/cocoa/AudioMediaStreamTrackRendererUnit.cpp:

2021-12-13  Jean-Yves Avenard  <jya@apple.com>

        Distinguish contiguous SharedBuffer from non-contiguous one and guarantee immutability
        https://bugs.webkit.org/show_bug.cgi?id=233030
        rdar://85333814

        Reviewed by Darin Adler.

        When calling SharedBuffer::data() the underlying data was flattened,
        and so could be mutated while being shared. This was an undesirable
        behaviour.
        We introduce ContiguousSharedBuffer which guarantee that its content is made
        of contiguous data.
        All methods that would have mutated a SharedBuffer when being flattened are
        moved to ContiguousSharedBuffer.

        Area where SharedBuffers were always created with a single segment where
        converted to a ContiguousSharedBuffer.
        Previously, a SharedBuffer would have been flattened only if it needed to be
        and only when the data was going to be accessed; following this change
        the conversion is now explictly done through a call to makeContiguous.
        This conversion is a no-op if the SharedBuffer being converted was already
        a ContiguousSharedBuffer.
        With the nature of a SharedBuffer being shared by potentially multiple
        users it was necessary to limit the number of conversions being performed
        on demand to avoid redundancy.
        When the flattening could have occured, the SharedBuffer creation points were
        traced back and identified to make the buffer contiguous then.
        In the end, there's no more SharedBuffer flattening operations than there
        would have been before this change.
        There's a potential increase of temporary memory usage with the
        ScriptBufferSourceProvider class; bug 233511 is tracking it.

        While the change is extensive, code coverage of the modified areas is thorough
        which makes undetected regressions unlikely.

        In bug 233442, a SharedBuffer will be made completely immutable once created.

        No observable change.
        Covered by all existing tests. New API tests creatded.

        * Modules/async-clipboard/ClipboardItemBindingsDataSource.cpp:
        (WebCore::ClipboardItemBindingsDataSource::ClipboardItemTypeLoader::sanitizeDataIfNeeded):
        * Modules/async-clipboard/ios/ClipboardImageReaderIOS.mm:
        (WebCore::ClipboardImageReader::readBuffer):
        * Modules/async-clipboard/mac/ClipboardImageReaderMac.mm:
        (WebCore::ClipboardImageReader::readBuffer):
        * Modules/cache/CacheStorageConnection.cpp:
        (WebCore::CacheStorageConnection::computeRealBodySize):
        * Modules/cache/DOMCache.cpp:
        (WebCore::DOMCache::addAll):
        (WebCore::DOMCache::putWithResponseData):
        (WebCore::DOMCache::put):
        * Modules/cache/DOMCache.h:
        * Modules/cache/DOMCacheEngine.cpp:
        (WebCore::DOMCacheEngine::isolatedResponseBody):
        (WebCore::DOMCacheEngine::copyResponseBody):
        * Modules/cache/DOMCacheEngine.h:
        * Modules/encryptedmedia/InitDataRegistry.cpp:
        (WebCore::extractKeyIDsKeyids):
        (WebCore::sanitizeKeyids):
        * Modules/encryptedmedia/MediaKeyStatusMap.cpp:
        (WebCore::keyIdsMatch):
        (WebCore::MediaKeyStatusMap::Iterator::next):
        * Modules/fetch/FetchBody.cpp:
        (WebCore::FetchBody::consumeFormData):
        (WebCore::FetchBody::bodyAsFormData const):
        (WebCore::FetchBody::take):
        * Modules/fetch/FetchBody.h:
        * Modules/fetch/FetchBodyConsumer.cpp:
        (WebCore::FetchBodyConsumer::resolve):
        (WebCore::FetchBodyConsumer::takeAsText):
        * Modules/fetch/FetchResponse.cpp:
        (WebCore::FetchResponse::BodyLoader::consumeDataByChunk):
        (WebCore::FetchResponse::setBodyData):
        * Modules/fetch/FetchResponse.h:
        * Modules/highlight/AppHighlight.h:
        (WebCore::AppHighlight::encode const):
        * Modules/highlight/AppHighlightRangeData.cpp:
        (WebCore::AppHighlightRangeData::create):
        * Modules/indexeddb/server/IDBSerialization.cpp:
        (WebCore::serializeIDBKeyPath):
        (WebCore::serializeIDBKeyData):
        * Modules/indexeddb/server/IDBSerialization.h:
        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
        (WebCore::IDBServer::SQLiteIDBBackingStore::addExistingIndex):
        (WebCore::IDBServer::SQLiteIDBBackingStore::createObjectStore):
        (WebCore::IDBServer::SQLiteIDBBackingStore::createIndex):
        (WebCore::IDBServer::SQLiteIDBBackingStore::uncheckedHasIndexRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::uncheckedPutIndexRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::keyExistsInObjectStore):
        (WebCore::IDBServer::SQLiteIDBBackingStore::deleteRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::addRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::getRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::uncheckedGetIndexRecordForOneKey):
        (WebCore::IDBServer::SQLiteIDBBackingStore::getCount):
        * Modules/indexeddb/server/SQLiteIDBCursor.cpp:
        (WebCore::IDBServer::SQLiteIDBCursor::bindArguments):
        (WebCore::IDBServer::SQLiteIDBCursor::resetAndRebindPreIndexStatementIfNecessary):
        * Modules/mediastream/RTCDataChannelRemoteHandler.cpp:
        (WebCore::RTCDataChannelRemoteHandler::readyToSend):
        * Modules/mediastream/libwebrtc/LibWebRTCDataChannelHandler.cpp:
        (WebCore::LibWebRTCDataChannelHandler::setClient):
        * Modules/model-element/HTMLModelElement.cpp:
        (WebCore::HTMLModelElement::notifyFinished):
        * Modules/model-element/scenekit/SceneKitModelLoaderUSD.mm:
        (WebCore::writeToTemporaryFile):
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::handleResponseOnStreamingAction):
        * bindings/js/ScriptBufferSourceProvider.h:
        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::load):
        * css/CSSFontFaceSource.h:
        * editing/Editor.cpp:
        (WebCore::Editor::promisedAttachmentInfo):
        * editing/Editor.h:
        * editing/SerializedAttachmentData.h:
        * editing/cocoa/EditorCocoa.mm:
        (WebCore::archivedDataForAttributedString):
        (WebCore::Editor::getPasteboardTypesAndDataForAttachment):
        (WebCore::Editor::selectionInWebArchiveFormat):
        (WebCore::Editor::dataInRTFDFormat):
        (WebCore::Editor::dataInRTFFormat):
        * editing/cocoa/HTMLConverter.mm:
        (HTMLConverter::_addAttachmentForElement):
        (fileWrapperForURL):
        (fileWrapperForElement):
        * editing/cocoa/WebContentReaderCocoa.mm:
        (WebCore::replaceRichContentWithAttachments):
        (WebCore::extractMarkupAndArchive):
        (WebCore::sanitizeMarkupWithArchive):
        (WebCore::WebContentReader::readRTFD):
        (WebCore::WebContentMarkupReader::readRTFD):
        (WebCore::WebContentReader::readRTF):
        (WebCore::WebContentMarkupReader::readRTF):
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::imageInWebArchiveFormat):
        (WebCore::Editor::dataSelectionForPasteboard):
        * html/FTPDirectoryDocument.cpp:
        (WebCore::createTemplateDocumentData):
        (WebCore::FTPDirectoryDocumentParser::loadDocumentTemplate):
        * inspector/NetworkResourcesData.cpp:
        (WebCore::NetworkResourcesData::ResourceData::decodeDataToContent):
        * inspector/agents/InspectorNetworkAgent.cpp:
        (WebCore::InspectorNetworkAgent::cachedResourceContent):
        * inspector/agents/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::mainResourceContent):
        (WebCore::InspectorPageAgent::sharedBufferContent):
        * loader/ContentFilter.cpp:
        (WebCore::ContentFilter::deliverResourceData):
        * loader/CrossOriginPreflightChecker.cpp:
        (WebCore::CrossOriginPreflightChecker::doPreflight):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::maybeCreateArchive):
        (WebCore::DocumentLoader::parsedArchiveData const):
        (WebCore::DocumentLoader::maybeFinishLoadingMultipartContent):
        * loader/DocumentLoader.h:
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::loadRequest):
        * loader/EmptyClients.cpp:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadResourceSynchronously):
        * loader/FrameLoader.h:
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::didReceiveDataOrBuffer):
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didReceiveDataOrBuffer):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::didFinishLoadingManifest):
        * loader/appcache/ApplicationCacheHost.cpp:
        (WebCore::bufferFromResource):
        (WebCore::ApplicationCacheHost::maybeLoadSynchronously):
        (WebCore::ApplicationCacheHost::maybeLoadFallbackSynchronously):
        * loader/appcache/ApplicationCacheHost.h:
        * loader/appcache/ApplicationCacheResource.cpp:
        (WebCore::ApplicationCacheResource::deliver):
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::store):
        (WebCore::ApplicationCacheStorage::loadCache):
        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::createPropertyListRepresentation):
        (WebCore::LegacyWebArchive::createResource):
        (WebCore::LegacyWebArchive::create):
        (WebCore::LegacyWebArchive::extract):
        (WebCore::LegacyWebArchive::createFromSelection):
        * loader/archive/mhtml/MHTMLParser.cpp:
        (WebCore::MHTMLParser::parseNextPart):
        * loader/cache/CachedApplicationManifest.cpp:
        (WebCore::CachedApplicationManifest::finishLoading):
        * loader/cache/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::sheetText const):
        (WebCore::CachedCSSStyleSheet::finishLoading):
        * loader/cache/CachedFont.cpp:
        (WebCore::CachedFont::finishLoading):
        (WebCore::CachedFont::ensureCustomFontData):
        (WebCore::CachedFont::createCustomFontData):
        (WebCore::CachedFont::checkNotify):
        * loader/cache/CachedFont.h:
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::updateBufferInternal):
        (WebCore::CachedImage::convertedDataIfNeeded const):
        * loader/cache/CachedImage.h:
        * loader/cache/CachedRawResource.cpp:
        (WebCore::CachedRawResource::updateBuffer):
        (WebCore::CachedRawResource::finishLoading):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::tryReplaceEncodedData):
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::resourceBuffer const):
        * loader/cache/CachedSVGDocument.cpp:
        (WebCore::CachedSVGDocument::finishLoading):
        * loader/cache/CachedSVGFont.cpp:
        (WebCore::CachedSVGFont::ensureCustomFontData):
        * loader/cache/CachedSVGFont.h:
        * loader/cache/CachedScript.cpp:
        (WebCore::CachedScript::finishLoading):
        * loader/cache/CachedTextTrack.cpp:
        (WebCore::CachedTextTrack::doUpdateBuffer):
        * loader/cache/CachedXSLStyleSheet.cpp:
        (WebCore::CachedXSLStyleSheet::finishLoading):
        * loader/cocoa/DiskCacheMonitorCocoa.h:
        * loader/cocoa/DiskCacheMonitorCocoa.mm:
        (WebCore::DiskCacheMonitor::tryGetFileBackedSharedBufferFromCFURLCachedResponse):
        (WebCore::DiskCacheMonitor::resourceBecameFileBacked):
        * page/EditorClient.h:
        * page/Page.cpp:
        (WebCore::Page::userStyleSheet const):
        * page/PageSerializer.cpp:
        (WebCore::PageSerializer::serializeFrame):
        (WebCore::PageSerializer::serializeCSSStyleSheet):
        (WebCore::PageSerializer::addImageToResources):
        * page/PageSerializer.h:
        * page/ShareData.h:
        * page/ShareDataReader.cpp:
        (WebCore::ShareDataReader::ShareDataReader):
        (WebCore::ShareDataReader::didFinishLoading):
        * platform/KeyedCoding.h:
        * platform/Pasteboard.h:
        * platform/PasteboardCustomData.cpp:
        (WebCore::PasteboardCustomData::createSharedBuffer const):
        (WebCore::PasteboardCustomData::fromSharedBuffer):
        * platform/PasteboardCustomData.h:
        * platform/PasteboardStrategy.h:
        * platform/PasteboardWriterData.h:
        * platform/PlatformPasteboard.h:
        * platform/PromisedAttachmentInfo.h:
        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::SharedBuffer):
        (WebCore::SharedBuffer::makeContiguous const):
        (WebCore::SharedBuffer::size const):
        (WebCore::SharedBuffer::isEmpty const):
        (WebCore::SharedBuffer::isContiguous const):
        (WebCore::SharedBuffer::append):
        (WebCore::SharedBuffer::copy const):
        (WebCore::SharedBuffer::hasOneSegment const):
        (WebCore::ContiguousSharedBuffer::ContiguousSharedBuffer):
        (WebCore::ContiguousSharedBuffer::createWithContentsOfFile):
        (WebCore::ContiguousSharedBuffer::data const):
        (WebCore::ContiguousSharedBuffer::dataAsCharPtr const):
        (WebCore::DataSegment::data const):
        (WebCore::DataSegment::containsMappedFileData const):
        (WebCore::ContiguousSharedBuffer::decoder const):
        (WebCore::DataSegment::size const):
        (WebCore::SharedBufferDataView::SharedBufferDataView):
        (WebCore::SharedBufferDataView::dataAsCharPtr const):
        (WebCore::SharedBufferDataView::createSharedBuffer const):
        (WebCore::utf8Buffer):
        * platform/SharedBuffer.h:
        (WebCore::DataSegment::create):
        (WebCore::DataSegment::DataSegment):
        (WebCore::SharedBuffer::create):
        (WebCore::ContiguousSharedBuffer::create):
        * platform/audio/cocoa/MediaSessionManagerCocoa.mm:
        (WebCore::MediaSessionManagerCocoa::setNowPlayingInfo):
        * platform/cf/KeyedEncoderCF.cpp:
        (WebCore::KeyedEncoderCF::finishEncoding):
        * platform/cf/KeyedEncoderCF.h:
        * platform/cf/SharedBufferCF.cpp:
        (WebCore::ContiguousSharedBuffer::createCFData const):
        (WebCore::SharedBuffer::append):
        * platform/cocoa/PasteboardCocoa.mm:
        (WebCore::convertTIFFToPNG):
        (WebCore::Pasteboard::readBufferForTypeWithSecurityCheck):
        * platform/cocoa/SharedBufferCocoa.mm:
        (-[WebCoreSharedBufferData initWithDataSegment:position:size:]):
        (WebCore::ContiguousSharedBuffer::createNSData const):
        (WebCore::ContiguousSharedBuffer::createCFData const):
        (WebCore::ContiguousSharedBuffer::createFromReadingFile):
        (WebCore::DataSegment::createNSData const):
        * platform/encryptedmedia/CDMUtilities.cpp:
        (WebCore::CDMUtilities::parseJSONObject):
        * platform/encryptedmedia/clearkey/CDMClearKey.cpp:
        (WebCore::extractKeyidsLocationFromCencInitData):
        (WebCore::extractKeyidsFromCencInitData):
        (WebCore::extractKeyIdFromWebMInitData):
        * platform/generic/KeyedEncoderGeneric.cpp:
        (WebCore::KeyedEncoderGeneric::finishEncoding):
        * platform/generic/KeyedEncoderGeneric.h:
        * platform/glib/KeyedEncoderGlib.cpp:
        (WebCore::KeyedEncoderGlib::finishEncoding):
        * platform/glib/KeyedEncoderGlib.h:
        * platform/glib/SharedBufferGlib.cpp:
        (WebCore::ContiguousSharedBuffer::createGBytes const):
        (WebCore::ContiguousSharedBuffer::createFromReadingFile):
        * platform/graphics/Font.cpp:
        (WebCore::Font::create):
        * platform/graphics/Font.h:
        * platform/graphics/FontPlatformData.h:
        * platform/graphics/Model.cpp:
        (WebCore::Model::create):
        (WebCore::Model::Model):
        * platform/graphics/Model.h:
        (WebCore::Model::encode const):
        (WebCore::Model::decode):
        * platform/graphics/WOFFFileFormat.cpp:
        (WebCore::readUInt32):
        (WebCore::readUInt16):
        (WebCore::isWOFF):
        (WebCore::convertWOFFToSfnt):
        (WebCore::convertWOFFToSfntIfNecessary):
        * platform/graphics/WOFFFileFormat.h:
        * platform/graphics/avfoundation/CDMFairPlayStreaming.cpp:
        (WebCore::extractSinfData):
        * platform/graphics/avfoundation/objc/CDMInstanceFairPlayStreamingAVFObjC.mm:
        (WebCore::parseJSONValue):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::requestLicense):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::updateLicense):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::loadSession):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::removeSessionData):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::didProvideRequest):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::didProvideRequests):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::didProvideRenewingRequest):
        * platform/graphics/avfoundation/objc/ImageDecoderAVFObjC.mm:
        (WebCore::ImageDecoderAVFObjC::ImageDecoderAVFObjC):
        (WebCore::ImageDecoderAVFObjC::setData):
        * platform/graphics/avfoundation/objc/SourceBufferParserAVFObjC.mm:
        (WebCore::SourceBufferParserAVFObjC::appendData):
        * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.mm:
        (WebCore::PlatformResourceMediaLoader::dataReceived):
        (WebCore::DataURLResourceMediaLoader::DataURLResourceMediaLoader):
        * platform/graphics/cairo/FontCustomPlatformData.h:
        * platform/graphics/cg/ImageDecoderCG.cpp:
        (WebCore::sharedBufferGetBytesAtPosition):
        (WebCore::ImageDecoderCG::ImageDecoderCG):
        (WebCore::ImageDecoderCG::setData):
        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::PDFDocumentImage::createPDFDocument):
        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        (WebCore::FontPlatformData::platformOpenTypeTable const):
        * platform/graphics/cocoa/SourceBufferParserWebM.cpp:
        * platform/graphics/coretext/FontPlatformDataCoreText.cpp:
        (WebCore::FontPlatformData::openTypeTable const):
        * platform/graphics/freetype/FontCustomPlatformDataFreeType.cpp:
        (WebCore::createFontCustomPlatformData):
        * platform/graphics/freetype/FontPlatformDataFreeType.cpp:
        (WebCore::FontPlatformData::openTypeTable const):
        * platform/graphics/gstreamer/GStreamerCommon.cpp:
        (WebCore::GstMappedOwnedBuffer::createSharedBuffer):
        * platform/graphics/gstreamer/GStreamerCommon.h:
        * platform/graphics/gstreamer/ImageDecoderGStreamer.cpp:
        (WebCore::ImageDecoderGStreamer::pushEncodedData):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::initializationDataEncountered):
        * platform/graphics/gstreamer/eme/GStreamerEMEUtilities.cpp:
        (WebCore::markupText):
        (WebCore::InitData::extractCencIfNeeded):
        * platform/graphics/gstreamer/eme/GStreamerEMEUtilities.h:
        (WebCore::InitData::InitData):
        * platform/graphics/mac/FontCustomPlatformData.cpp:
        (WebCore::createFontCustomPlatformData):
        * platform/graphics/mac/FontCustomPlatformData.h:
        * platform/graphics/mac/PDFDocumentImageMac.mm:
        (WebCore::PDFDocumentImage::createPDFDocument):
        * platform/graphics/opentype/OpenTypeMathData.cpp:
        (WebCore::OpenType::MathItalicsCorrectionInfo::getItalicCorrection const):
        (WebCore::OpenType::MathGlyphInfo::mathItalicsCorrectionInfo const):
        (WebCore::OpenType::GlyphAssembly::getAssemblyParts const):
        (WebCore::OpenType::MathGlyphConstruction::getSizeVariants const):
        (WebCore::OpenType::MathGlyphConstruction::getAssemblyParts const):
        (WebCore::OpenType::MathVariants::mathGlyphConstruction const):
        (WebCore::OpenType::MATHTable::mathConstants const):
        (WebCore::OpenType::MATHTable::mathGlyphInfo const):
        (WebCore::OpenType::MATHTable::mathVariants const):
        * platform/graphics/opentype/OpenTypeMathData.h:
        * platform/graphics/opentype/OpenTypeTypes.h:
        (WebCore::OpenType::validateTable):
        (WebCore::OpenType::TableBase::isValidEnd):
        (WebCore::OpenType::TableBase::validatePtr):
        (WebCore::OpenType::TableBase::validateOffset const):
        (WebCore::OpenType::TableWithCoverage::getCoverageIndex const):
        * platform/graphics/opentype/OpenTypeUtilities.cpp:
        (WebCore::renameFont):
        (WebCore::renameAndActivateFont):
        * platform/graphics/opentype/OpenTypeUtilities.h:
        * platform/graphics/opentype/OpenTypeVerticalData.cpp:
        (WebCore::OpenType::SubstitutionSubTable::coverage const):
        (WebCore::OpenType::LookupTable::getSubstitutions const):
        (WebCore::OpenType::LookupList::lookup const):
        (WebCore::OpenType::FeatureTable::getGlyphSubstitutions const):
        (WebCore::OpenType::FeatureList::feature const):
        (WebCore::OpenType::FeatureList::findFeature const):
        (WebCore::OpenType::LangSysTable::feature const):
        (WebCore::OpenType::ScriptTable::defaultLangSys const):
        (WebCore::OpenType::ScriptList::script const):
        (WebCore::OpenType::ScriptList::defaultScript const):
        (WebCore::OpenType::ScriptList::defaultLangSys const):
        (WebCore::OpenType::GSUBTable::scriptList const):
        (WebCore::OpenType::GSUBTable::featureList const):
        (WebCore::OpenType::GSUBTable::lookupList const):
        (WebCore::OpenType::GSUBTable::defaultLangSys const):
        (WebCore::OpenType::GSUBTable::feature const):
        (WebCore::OpenType::GSUBTable::getVerticalGlyphSubstitutions const):
        (WebCore::loadHmtxTable):
        (WebCore::OpenTypeVerticalData::loadMetrics):
        (WebCore::OpenTypeVerticalData::loadVerticalGlyphSubstitutions):
        * platform/graphics/win/FontCustomPlatformData.cpp:
        (WebCore::createFontCustomPlatformData):
        * platform/graphics/win/FontCustomPlatformData.h:
        * platform/graphics/win/FontCustomPlatformDataCairo.cpp:
        (WebCore::createFontCustomPlatformData):
        * platform/graphics/win/FontPlatformDataCairoWin.cpp:
        (WebCore::FontPlatformData::openTypeTable const):
        * platform/graphics/win/FontPlatformDataWin.cpp:
        (WebCore::FontPlatformData::platformOpenTypeTable const):
        * platform/gtk/SelectionData.h:
        (WebCore::SelectionData::setCustomData):
        (WebCore::SelectionData::customData const):
        * platform/image-decoders/ScalableImageDecoder.h:
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore::readICCProfile):
        (WebCore::JPEGImageDecoder::setICCProfile):
        * platform/image-decoders/jpeg/JPEGImageDecoder.h:
        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::PlatformPasteboard::bufferForType):
        (WebCore::PlatformPasteboard::write):
        (WebCore::PlatformPasteboard::typesSafeForDOMToReadAndWrite const):
        (WebCore::createItemProviderRegistrationList):
        (WebCore::PlatformPasteboard::readBuffer const):
        * platform/mac/PasteboardMac.mm:
        (WebCore::fileWrapper):
        (WebCore::readBufferAtPreferredItemIndex):
        (WebCore::Pasteboard::read):
        * platform/mac/PasteboardWriter.mm:
        (WebCore::createPasteboardWriter):
        * platform/mac/PlatformPasteboardMac.mm:
        (WebCore::PlatformPasteboard::bufferForType):
        (WebCore::PlatformPasteboard::typesSafeForDOMToReadAndWrite const):
        (WebCore::PlatformPasteboard::write):
        (WebCore::PlatformPasteboard::setBufferForType):
        (WebCore::PlatformPasteboard::readBuffer const):
        (WebCore::createPasteboardItem):
        * platform/network/FormData.cpp:
        (WebCore::FormData::asSharedBuffer const):
        * platform/network/FormData.h:
        * platform/network/ResourceHandleClient.cpp:
        (WebCore::ResourceHandleClient::didReceiveBuffer):
        * platform/network/cocoa/WebCoreNSURLSession.mm:
        (-[WebCoreNSURLSessionDataTask resource:receivedData:]):
        * platform/network/curl/CurlMultipartHandle.cpp:
        (WebCore::CurlMultipartHandle::didReceiveData):
        (WebCore::CurlMultipartHandle::didComplete):
        (WebCore::CurlMultipartHandle::processContent):
        * platform/network/curl/CurlRequest.cpp:
        (WebCore::CurlRequest::writeDataToDownloadFileIfEnabled):
        * platform/network/curl/CurlResourceHandleDelegate.cpp:
        (WebCore::CurlResourceHandleDelegate::curlDidReceiveBuffer):
        * platform/win/PasteboardWin.cpp:
        (WebCore::createGlobalImageFileContent):
        (WebCore::createGlobalHDropContent):
        * platform/win/SharedBufferWin.cpp:
        (WebCore::ContiguousSharedBuffer::createFromReadingFile):
        * testing/MockCDMFactory.cpp:
        (WebCore::MockCDM::sanitizeResponse const):
        (WebCore::MockCDMInstance::setServerCertificate):
        (WebCore::MockCDMInstanceSession::updateLicense):
        * workers/WorkerFontLoadRequest.cpp:
        (WebCore::WorkerFontLoadRequest::ensureCustomFontData):
        * workers/service/context/ServiceWorkerFetch.cpp:
        (WebCore::ServiceWorkerFetch::processResponse):
        * workers/service/server/SWScriptStorage.cpp:
        (WebCore::SWScriptStorage::retrieve):
        * xml/XSLTProcessorLibxslt.cpp:
        (WebCore::docLoaderFunc):
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::openFunc):

2021-12-12  Sihui Liu  <sihui_liu@apple.com>

        Merge StorageManager with NetworkStorageManager to manage WebStorage by origin
        https://bugs.webkit.org/show_bug.cgi?id=234087

        Reviewed by Chris Dumez.

        * platform/sql/SQLiteFileSystem.cpp:
        (WebCore::SQLiteFileSystem::deleteDatabaseFile):
        (WebCore::SQLiteFileSystem::moveDatabaseFile):
        (WebCore::SQLiteFileSystem::databaseFileSize):
        * platform/sql/SQLiteFileSystem.h:

2021-12-12  Alan Bujtas  <zalan@apple.com>

        [IFC][Integration] Enable isolate-override for inline boxes
        https://bugs.webkit.org/show_bug.cgi?id=234203

        Reviewed by Antti Koivisto.

        * layout/integration/LayoutIntegrationCoverage.cpp: The only reason why plaintext is not enabled yet
        is becuase it may change the inline axis direction to RTL. It is going to be enabled together with the RTL support.
        (WebCore::LayoutIntegration::canUseForStyle):

2021-12-12  Simon Fraser  <simon.fraser@apple.com>

        Ensure that the scrolling thread always commits layer position changes to reduce scrolling stutters
        https://bugs.webkit.org/show_bug.cgi?id=234213

        Reviewed by Tim Horton.

        On a page where CA commits on the main thread take a long time (e.g. because of expensive
        painting), it's possible that the main thread has updated the scrolling layer position, and
        then the scrolling thread detects that the commit is taking a long time and attempts to
        trigger its own commit, but because the layer position property doesn't change, no commit
        occurs.

        Work around this by setting the layer position to 0,0 and back when we're on the scrolling
        thread. Only do this if the scroll position changed since the last display refresh to avoid
        triggering redundant commits.

        Ideally we'd traverse the scrolling tree and do this for every scrolling node, but scrolling
        trees can get large so for now just apply this to the root node.

        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::updateScrollPositionAtLastDisplayRefresh):
        * page/scrolling/ScrollingTreeScrollingNode.h:
        * page/scrolling/ThreadedScrollingTree.cpp:
        (WebCore::ThreadedScrollingTree::displayDidRefreshOnScrollingThread):
        (WebCore::ThreadedScrollingTree::storeScrollPositionsAtLastDisplayRefresh):
        * page/scrolling/ThreadedScrollingTree.h:
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeMac::repositionScrollingLayers):

2021-12-12  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add partial unicode-bidi support on inline level boxes
        https://bugs.webkit.org/show_bug.cgi?id=234196

        Reviewed by Antti Koivisto.

        This patch enables partial unicode-bidi processing on all elements (block and inline). 

        * layout/formattingContexts/inline/InlineDisplayContentBuilder.cpp:
        (WebCore::Layout::InlineDisplayContentBuilder::processBidiContent): The paragraph builder now may
        produce valid bidi levels for inline box end type of inline items (see popDirectionalFormatting).

        * layout/integration/LayoutIntegrationCoverage.cpp:
        (WebCore::LayoutIntegration::canUseForStyle):

2021-12-12  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add partial unicode-bidi support on the block container
        https://bugs.webkit.org/show_bug.cgi?id=234195

        Reviewed by Antti Koivisto.

        'unicode-bidi: plaintext' on the block container may change the base directionality of
        the container itself. We only support LTR inline axis direction.

        * layout/formattingContexts/inline/InlineItemsBuilder.cpp:
        (WebCore::Layout::handleEnterExitBidiContext):
        (WebCore::Layout::buildBidiParagraph): Add control character for the unicode-bidi property on the block container.
        (WebCore::Layout::InlineItemsBuilder::breakAndComputeBidiLevels):
        * layout/integration/LayoutIntegrationCoverage.cpp:
        (WebCore::LayoutIntegration::canUseForStyle):
        (WebCore::LayoutIntegration::canUseForRenderInlineChild):
        (WebCore::LayoutIntegration::canUseForLineLayoutWithReason):
        (WebCore::LayoutIntegration::canUseForLineLayoutAfterStyleChange):

2021-12-12  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Ignore zero width glyphs while collecting fallback fonts
        https://bugs.webkit.org/show_bug.cgi?id=234210

        Reviewed by Antti Koivisto.

        Taking zero width glyphs (e.g. control characters) into consideration while collecting
        fallback font information may result in incorrect line height and baseline positioning.

        The logic in this patch matches with WidthIterator::commitCurrentFontRange (used by legacy line layout).
        It is measured to have only a slight perf impact on layout microbenchmarks (~1%).
        Alternatively we could check against unicode ranges to omit certain glyphs.

        Test: fast/text/fallback-font-and-zero-width-glyph.html

        * layout/formattingContexts/inline/text/TextUtil.cpp:
        (WebCore::Layout::fallbackFontsForRunWithIterator):

2021-12-12  Sam Weinig  <weinig@apple.com>

        Pipe ColorInterpolationMethod into Gradient
        https://bugs.webkit.org/show_bug.cgi?id=234205

        Reviewed by Antti Koivisto.

        There is no functional change yet, this just adds a required ColorInterpolationMethod parameter to
        Gradient, which for the moment has to be SRGB and non-premultiplied alpha. Subsequent changes will
        support for specifying an interpolation method via CSS gradients as well as implementing support
        for that in the platform gradient backends.

        Also moves the ColorInterpolationMethod struct into its own file as it was getting quite long.

        * Headers.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSGradientValue.cpp:
        (WebCore::CSSGradientValue::equals const):
        (WebCore::CSSLinearGradientValue::createGradient):
        (WebCore::CSSRadialGradientValue::createGradient):
        (WebCore::CSSConicGradientValue::createGradient):
        * css/CSSGradientValue.h:
        (WebCore::CSSGradientValue::CSSGradientValue):
        (WebCore::CSSGradientValue::colorInterpolationMethod const):
        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::consumeDeprecatedGradient):
        (WebCore::CSSPropertyParserHelpers::consumeDeprecatedRadialGradient):
        (WebCore::CSSPropertyParserHelpers::consumeRadialGradient):
        (WebCore::CSSPropertyParserHelpers::consumeLinearGradient):
        (WebCore::CSSPropertyParserHelpers::consumeConicGradient):
        * html/HTMLInputElement.cpp:
        (WebCore::autoFillStrongPasswordMaskImage):
        * html/canvas/CanvasGradient.cpp:
        (WebCore::CanvasGradient::CanvasGradient):
        * platform/graphics/ColorInterpolation.h:
        (WebCore::interpolateColorComponents):
        (WebCore::ColorInterpolationMethod::encode const): Deleted.
        (WebCore::ColorInterpolationMethod::decode): Deleted.
        * platform/graphics/ColorInterpolationMethod.h: Added.
        (WebCore::ColorInterpolationMethod::encode const):
        (WebCore::ColorInterpolationMethod::decode):
        (WebCore::add):
        (WebCore::operator==):
        * platform/graphics/Gradient.cpp:
        (WebCore::Gradient::create):
        (WebCore::Gradient::Gradient):
        (WebCore::Gradient::hash const):
        * platform/graphics/Gradient.h:
        (WebCore::Gradient::encode const):
        (WebCore::Gradient::decode):
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::paintProgressBar):
        (WebCore::RenderThemeIOS::checkboxRadioBackgroundGradient):
        (WebCore::RenderThemeIOS::paintColorWellDecorations):
        * rendering/svg/RenderSVGResourceLinearGradient.cpp:
        (WebCore::RenderSVGResourceLinearGradient::buildGradient const):
        * rendering/svg/RenderSVGResourceRadialGradient.cpp:
        (WebCore::RenderSVGResourceRadialGradient::buildGradient const):

2021-12-11  Don Olmstead  <don.olmstead@sony.com>

        SharedBuffer should use WTF::FileSystem when creating from a file
        https://bugs.webkit.org/show_bug.cgi?id=233598
        <rdar://problem/86123732>

        Reviewed by Chris Dumez.

        Remove platform specific implementations of SharedBuffer::createFromReadingFile and use
        FileSystem::readEntireFile instead when creating a SharedBuffer from a file. The function
        was only used within SharedBuffer::createWithContentsOfFile so the implementation is just
        moved into that function.

        * PlatformFTW.cmake:
        * PlatformPlayStation.cmake:
        * PlatformWin.cmake:
        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::createWithContentsOfFile):
        * platform/SharedBuffer.h:
        * platform/cocoa/SharedBufferCocoa.mm:
        (WebCore::SharedBuffer::createFromReadingFile): Deleted.
        * platform/glib/SharedBufferGlib.cpp:
        (WebCore::SharedBuffer::createFromReadingFile): Deleted.
        * platform/posix/SharedBufferPOSIX.cpp: Removed.
        * platform/win/SharedBufferWin.cpp: Removed.

2021-12-11  Chris Dumez  <cdumez@apple.com>

        ContextDestructionObserver::m_scriptExecutionContext should be private
        https://bugs.webkit.org/show_bug.cgi?id=234184

        Reviewed by Youenn Fablet.

        ContextDestructionObserver::m_scriptExecutionContext should be private. It is poor encapsulation
        to have protected data members.

        * Modules/encryptedmedia/CDM.cpp:
        (WebCore::CDM::getSupportedConfiguration):
        * Modules/encryptedmedia/MediaKeySystemRequest.cpp:
        (WebCore::MediaKeySystemRequest::topLevelDocumentOrigin const):
        (WebCore::MediaKeySystemRequest::start):
        (WebCore::MediaKeySystemRequest::deny):
        (WebCore::MediaKeySystemRequest::stop):
        (WebCore::MediaKeySystemRequest::document const):
        * Modules/geolocation/Geolocation.cpp:
        (WebCore::Geolocation::watchPosition):
        * Modules/mediastream/RTCDataChannel.h:
        * Modules/mediastream/RTCDtlsTransport.h:
        * Modules/mediastream/RTCIceTransport.h:
        * Modules/mediastream/RTCSctpTransport.h:
        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::userMediaDocumentOrigin const):
        (WebCore::UserMediaRequest::topLevelDocumentOrigin const):
        (WebCore::UserMediaRequest::start):
        (WebCore::UserMediaRequest::allow):
        (WebCore::UserMediaRequest::deny):
        (WebCore::UserMediaRequest::stop):
        (WebCore::UserMediaRequest::document const):
        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::mediaSessionGroupIdentifier const):
        * Modules/webaudio/BaseAudioContext.cpp:
        (WebCore::BaseAudioContext::document const):
        (WebCore::BaseAudioContext::origin const):
        (WebCore::BaseAudioContext::addConsoleMessage):
        * Modules/webdatabase/DatabaseContext.cpp:
        (WebCore::DatabaseContext::allowDatabaseAccess const):
        (WebCore::DatabaseContext::databaseExceededQuota):
        (WebCore::DatabaseContext::securityOrigin const):
        (WebCore::DatabaseContext::isContextThread const):
        * Modules/webxr/WebXRSystem.cpp:
        (WebCore::WebXRSystem::DummyInlineDevice::requestFrame):
        * dom/ActiveDOMObject.cpp:
        (WebCore::ActiveDOMObject::~ActiveDOMObject):
        (WebCore::ActiveDOMObject::suspendIfNeeded):
        * dom/ContextDestructionObserver.h:
        * dom/MessagePort.cpp:
        (WebCore::MessagePort::MessagePort):
        (WebCore::MessagePort::~MessagePort):
        (WebCore::MessagePort::entangle):
        (WebCore::MessagePort::postMessage):
        (WebCore::MessagePort::disentangle):
        (WebCore::MessagePort::messageAvailable):
        (WebCore::MessagePort::start):
        (WebCore::MessagePort::contextDestroyed):
        (WebCore::MessagePort::dispatchMessages):
        (WebCore::MessagePort::dispatchEvent):
        (WebCore::MessagePort::virtualHasPendingActivity const):
        * html/track/VTTRegion.cpp:
        (WebCore::VTTRegion::getDisplayTree):
        (WebCore::VTTRegion::prepareRegionDisplayTree):

2021-12-11  Don Olmstead  <don.olmstead@sony.com>

        Add a std::nullptr_t constructor for RefPtr
        https://bugs.webkit.org/show_bug.cgi?id=234192

        Reviewed by Yusuke Suzuki.

        Remove uses of `0` when creating an empty RefPtr.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::Accessibility::findMatchingObjects):
        * platform/graphics/cairo/CairoUtilities.cpp:
        (WebCore::drawPatternToCairoContext):
        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGL::drawTexture):
        (WebCore::TextureMapperGL::drawTexturePlanarYUV):
        (WebCore::TextureMapperGL::drawTextureSemiPlanarYUV):
        (WebCore::TextureMapperGL::drawTexturePackedYUV):
        * platform/graphics/win/IconWin.cpp:
        (WebCore::Icon::createIconForFiles):
        * platform/graphics/win/ImageCGWin.cpp:
        (WebCore::BitmapImage::create):
        * platform/graphics/win/ImageCairoWin.cpp:
        (WebCore::BitmapImage::create):
        * platform/win/DragImageWin.cpp:
        (WebCore::dragLabelFont):

2021-12-11  Antti Koivisto  <antti@apple.com>

        Remove redundant StyleRule::Type enum
        https://bugs.webkit.org/show_bug.cgi?id=234156

        Reviewed by Alan Bujtas.

        Remove redundant CSSRule::STYLE_RULE etc enum values and just use StyleRuleType enum class.

        * bindings/js/JSCSSRuleCustom.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/CodeGenerator.pm:
        (GenerateCompileTimeCheckForEnumsIfNeeded):

        Add 'ConstantsEnum' attribute to generate static_asserts for constants that match an enum class.

        * bindings/scripts/IDLAttributes.json:
        * css/CSSCounterStyleRule.h:
        * css/CSSFontFaceRule.h:
        * css/CSSFontPaletteValuesRule.h:
        * css/CSSImportRule.h:
        * css/CSSKeyframeRule.h:
        * css/CSSKeyframesRule.h:
        * css/CSSLayerBlockRule.h:
        * css/CSSLayerStatementRule.h:
        * css/CSSMediaRule.h:
        * css/CSSNamespaceRule.h:
        * css/CSSPageRule.h:
        * css/CSSRule.cpp:
        * css/CSSRule.h:
        (WebCore::CSSRule::typeForBindings const):
        * css/CSSRule.idl:
        * css/CSSStyleRule.h:
        * css/CSSSupportsRule.h:
        * css/CSSUnknownRule.h:
        * css/StyleRuleType.h:
        * style/InspectorCSSOMWrappers.cpp:
        (WebCore::Style::InspectorCSSOMWrappers::collect):

2021-12-11  Antoine Quint  <graouts@webkit.org>

        Expose a frameRate property to Web Animations
        https://bugs.webkit.org/show_bug.cgi?id=234174
        rdar://86338983

        Reviewed by Dean Jackson.

        Expose a new frameRate property to the Animation interface. This property
        accepts either a value from the new AnimationFrameRatePreset enum (auto,
        low, high or highest) or a FramesPerSecond explicit value. This property
        is governed by an off-by-default runtime setting.

        When we obtain the frame rate from the IDL bindings, we record an "effective"
        frame rate which is either a null value for the default frame rate, or an
        explicit FramesPerSecond value for any value above or below it.

        Test: webanimations/frame-rate/animation-frame-rate.html

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Headers.cmake:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * animation/AnimationFrameRatePreset.h: Added.
        * animation/AnimationFrameRatePreset.idl: Added.
        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::setBindingsFrameRate):
        (WebCore::WebAnimation::setEffectiveFrameRate):
        * animation/WebAnimation.h:
        (WebCore::WebAnimation::bindingsFrameRate const):
        (WebCore::WebAnimation::frameRate const):
        * animation/WebAnimation.idl:

2021-12-11  Lauro Moura  <lmoura@igalia.com>

        Non-unified build fixes, mid mid December 2021 edition
        https://bugs.webkit.org/show_bug.cgi?id=234191

        Unreviewed build fix.

        A few more fixes already a couple of days after the last fix.

        Full build still failing due to the issue discussed on bug226088.

        All changes are inclusion of missing headers.

        * html/shadow/DateTimeEditElement.cpp:
        * platform/graphics/displaylists/DisplayListRecorder.cpp:
        * workers/WorkerDebuggerProxy.h:
        * workers/shared/SharedWorkerManager.cpp:
        * workers/shared/SharedWorkerProxy.cpp:
        * workers/shared/SharedWorkerScriptLoader.cpp:
        * workers/shared/SharedWorkerScriptLoader.h:
        * workers/shared/SharedWorkerThread.cpp:

2021-12-11  Mark Lam  <mark.lam@apple.com>

        Automatically forbid JS execution when we throw a TerminationException.
        https://bugs.webkit.org/show_bug.cgi?id=234188

        Reviewed by Yusuke Suzuki.

        Enable "execution forbidden on termination" behavior for workers.

        * workers/WorkerOrWorkletScriptController.cpp:
        (WebCore::WorkerOrWorkletScriptController::WorkerOrWorkletScriptController):

2021-12-11  Mark Lam  <mark.lam@apple.com>

        WebCore::createDOMException() should abort early if termination is pending.
        https://bugs.webkit.org/show_bug.cgi?id=234190

        Reviewed by Darin Adler.

        Attempting to create Error objects may re-enter the VM, which we should not do
        when termination is pending.

        This issue manifested as an ASSERT failure, and was discovered while running
        http/wpt/fetch/ layout tests with a Debug build on an M1 Mac.  It also manifested
        on some testing bots.

        * bindings/js/JSDOMExceptionHandling.cpp:
        (WebCore::createDOMException):

2021-12-11  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r286893.
        https://bugs.webkit.org/show_bug.cgi?id=234197

        Breaks the build

        Reverted changeset:

        "[macOS] Add new screen and window capture backend"
        https://bugs.webkit.org/show_bug.cgi?id=234029
        https://commits.webkit.org/r286893

2021-12-11  Joonghun Park  <jh718.park@samsung.com>

        Unreviewed. CSSCalcOperationNode::allowsNegativePercentageReference() should be const member function.

        In r286897, the above method's const keyword was missed out, so add it.

        No new tests, no new behaviours.

        * css/calc/CSSCalcOperationNode.h:

2021-12-11  Jer Noble  <jer.noble@apple.com>

        Add an experimental trackConfiguration accessor on AudioTrack & VideoTrack.
        https://bugs.webkit.org/show_bug.cgi?id=230841

        Reviewed by Eric Carlson.

        Add an experimental property on AudioTrack VideoTrack which contains information about the
        underlying media track's configuration. The AudioTrackConfiguration is based on
        AudioConfiguration from MediaCapabilities. The VideoTrackConfiguration is based on a
        combination of the VideoConfiguration from MediaCapabilities and the VideoColorSpace from
        WebCodecs. 

        The AVFoundation implementation of AVTrackPrivateAVFObjCImpl will extract a NAL unit for the
        video codec from the CMFormatDescription containing information about the underlying media,
        and pass that NAL unit to utility methods in HEVCUtilities (which should probably be
        renamed to CodecUntilities) to extract and create codec configuration strings. It will
        extract colorspace information from CMFormatDescriptionExtensions found in the format
        description. It will extract framerate, bitrate, width and height, sample rate and channel
        count information from the underlying AVAssetTrack. There are shortcomings here, as HLS
        streams and MSE streams do not generate framerate or bitrate information in the
        AVAssetTrack.

        Tests: media/track/audio-track-configuration.html
               media/track/video-track-configuration.html

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/webcodecs/VideoColorPrimaries.h:
        * Modules/webcodecs/VideoColorPrimaries.idl:
        * Modules/webcodecs/VideoColorSpace.h:
        (WebCore::VideoColorSpace::create):
        (WebCore::VideoColorSpace::primaries const):
        (WebCore::VideoColorSpace::setPrimaries):
        (WebCore::VideoColorSpace::transfer const):
        (WebCore::VideoColorSpace::setTransfer):
        (WebCore::VideoColorSpace::matrix const):
        (WebCore::VideoColorSpace::setMatrix):
        (WebCore::VideoColorSpace::fullRange const):
        (WebCore::VideoColorSpace::setfFullRange):
        (WebCore::VideoColorSpace::VideoColorSpace):
        * Modules/webcodecs/VideoColorSpace.idl:
        * Modules/webcodecs/VideoColorSpaceInit.h:
        * Modules/webcodecs/VideoColorSpaceInit.idl:
        * Modules/webcodecs/VideoMatrixCoefficients.h:
        * Modules/webcodecs/VideoMatrixCoefficients.idl:
        * Modules/webcodecs/VideoTransferCharacteristics.h:
        * Modules/webcodecs/VideoTransferCharacteristics.idl:
        * Sources.txt:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * html/track/AudioTrack.cpp:
        (WebCore::AudioTrack::AudioTrack):
        (WebCore::AudioTrack::setPrivate):
        (WebCore::AudioTrack::updateConfigurationFromPrivate):
        * html/track/AudioTrack.h:
        * html/track/AudioTrack.idl:
        * html/track/AudioTrackConfiguration.h:
        (WebCore::AudioTrackConfiguration::create):
        (WebCore::AudioTrackConfiguration::codec const):
        (WebCore::AudioTrackConfiguration::setCodec):
        (WebCore::AudioTrackConfiguration::sampleRate const):
        (WebCore::AudioTrackConfiguration::setSampleRate):
        (WebCore::AudioTrackConfiguration::numberOfChannels const):
        (WebCore::AudioTrackConfiguration::setNumberOfChannels):
        (WebCore::AudioTrackConfiguration::bitrate const):
        (WebCore::AudioTrackConfiguration::setBitrate):
        (WebCore::AudioTrackConfiguration::AudioTrackConfiguration):
        * html/track/AudioTrackConfiguration.idl:
        * html/track/VideoTrack.cpp:
        (WebCore::VideoTrack::VideoTrack):
        (WebCore::VideoTrack::setPrivate):
        (WebCore::VideoTrack::updateConfigurationFromPrivate):
        * html/track/VideoTrack.h:
        * html/track/VideoTrack.idl:
        * html/track/VideoTrackConfiguration.h: Added.
        (WebCore::VideoTrackConfiguration::create):
        (WebCore::VideoTrackConfiguration::codec const):
        (WebCore::VideoTrackConfiguration::setCodec):
        (WebCore::VideoTrackConfiguration::width const):
        (WebCore::VideoTrackConfiguration::setWidth):
        (WebCore::VideoTrackConfiguration::height const):
        (WebCore::VideoTrackConfiguration::setHeight):
        (WebCore::VideoTrackConfiguration::colorSpace const):
        (WebCore::VideoTrackConfiguration::setColorSpace):
        (WebCore::VideoTrackConfiguration::framerate const):
        (WebCore::VideoTrackConfiguration::setFramerate):
        (WebCore::VideoTrackConfiguration::bitrate const):
        (WebCore::VideoTrackConfiguration::setBitrate):
        (WebCore::VideoTrackConfiguration::VideoTrackConfiguration):
        * html/track/VideoTrackConfiguration.idl:
        * platform/graphics/AudioTrackPrivate.h:
        (WebCore::AudioTrackPrivate::codec const):
        (WebCore::AudioTrackPrivate::setCodec):
        (WebCore::AudioTrackPrivate::sampleRate const):
        (WebCore::AudioTrackPrivate::setSampleRate):
        (WebCore::AudioTrackPrivate::numberOfChannels const):
        (WebCore::AudioTrackPrivate::setNumberOfChannels):
        (WebCore::AudioTrackPrivate::bitrate const):
        (WebCore::AudioTrackPrivate::setBitrate):
        * platform/graphics/HEVCUtilities.cpp:
        (WebCore::parseAVCCodecParameters):
        (WebCore::createAVCCodecParametersString):
        (WebCore::parseAVCDecoderConfigurationRecord):
        (WebCore::parseHEVCCodecParameters):
        (WebCore::createHEVCCodecParametersString):
        (WebCore::parseHEVCDecoderConfigurationRecord):
        (WebCore::parseDoViDecoderConfigurationRecord):
        (WebCore::createDoViCodecParametersString):
        * platform/graphics/HEVCUtilities.h:
        * platform/graphics/PlatformVideoColorPrimaries.h:
        * platform/graphics/PlatformVideoColorSpace.h:
        (WebCore::PlatformVideoColorSpace::encode const):
        (WebCore::PlatformVideoColorSpace::decode):
        * platform/graphics/PlatformVideoMatrixCoefficients.h:
        * platform/graphics/PlatformVideoTransferCharacteristics.h:
        * platform/graphics/VideoTrackPrivate.h:
        (WebCore::VideoTrackPrivate::codec const):
        (WebCore::VideoTrackPrivate::setCodec):
        (WebCore::VideoTrackPrivate::width const):
        (WebCore::VideoTrackPrivate::setWidth):
        (WebCore::VideoTrackPrivate::height const):
        (WebCore::VideoTrackPrivate::setHeight):
        (WebCore::VideoTrackPrivate::colorSpace const):
        (WebCore::VideoTrackPrivate::setColorSpace):
        (WebCore::VideoTrackPrivate::framerate const):
        (WebCore::VideoTrackPrivate::setFramerate):
        (WebCore::VideoTrackPrivate::bitrate const):
        (WebCore::VideoTrackPrivate::setBitrate):
        * platform/graphics/VideoTrackPrivateClient.h:
        * platform/graphics/avfoundation/AVTrackPrivateAVFObjCImpl.h:
        * platform/graphics/avfoundation/AVTrackPrivateAVFObjCImpl.mm:
        (WebCore::assetTrackFor):
        (WebCore::formatDescriptionFor):
        (WebCore::AVTrackPrivateAVFObjCImpl::codec const):
        (WebCore::AVTrackPrivateAVFObjCImpl::width const):
        (WebCore::AVTrackPrivateAVFObjCImpl::height const):
        (WebCore::AVTrackPrivateAVFObjCImpl::colorSpace const):
        (WebCore::AVTrackPrivateAVFObjCImpl::framerate const):
        (WebCore::AVTrackPrivateAVFObjCImpl::sampleRate const):
        (WebCore::AVTrackPrivateAVFObjCImpl::numberOfChannels const):
        (WebCore::AVTrackPrivateAVFObjCImpl::bitrate const):
        * platform/graphics/avfoundation/AudioTrackPrivateAVF.h:
        (WebCore::AudioTrackPrivateAVF::kind const): Deleted.
        (WebCore::AudioTrackPrivateAVF::id const): Deleted.
        (WebCore::AudioTrackPrivateAVF::label const): Deleted.
        (WebCore::AudioTrackPrivateAVF::language const): Deleted.
        (WebCore::AudioTrackPrivateAVF::trackIndex const): Deleted.
        * platform/graphics/avfoundation/FormatDescriptionUtilities.cpp: Added.
        (WebCore::presentationSizeFromFormatDescription):
        (WebCore::colorSpaceFromFormatDescription):
        (WebCore::codecFromFormatDescription):
        * platform/graphics/avfoundation/FormatDescriptionUtilities.h:
        * platform/graphics/avfoundation/MediaSelectionGroupAVFObjC.h:
        * platform/graphics/avfoundation/MediaSelectionGroupAVFObjC.mm:
        (WebCore::MediaSelectionOptionAVFObjC::assetTrack const):
        * platform/graphics/avfoundation/VideoTrackPrivateAVF.h:
        * platform/graphics/avfoundation/objc/AudioTrackPrivateAVFObjC.mm:
        (WebCore::AudioTrackPrivateAVFObjC::resetPropertiesFromTrack):
        * platform/graphics/avfoundation/objc/VideoTrackPrivateAVFObjC.cpp:
        (WebCore::VideoTrackPrivateAVFObjC::resetPropertiesFromTrack):
        * platform/graphics/avfoundation/objc/VideoTrackPrivateMediaSourceAVFObjC.mm:
        (WebCore::VideoTrackPrivateMediaSourceAVFObjC::resetPropertiesFromTrack):
        * platform/graphics/cocoa/VideoTrackPrivateWebM.cpp:
        (WebCore::VideoTrackPrivateWebM::codec const):
        (WebCore::VideoTrackPrivateWebM::width const):
        (WebCore::VideoTrackPrivateWebM::height const):
        (WebCore::VideoTrackPrivateWebM::framerate const):
        * platform/graphics/cocoa/VideoTrackPrivateWebM.h:

2021-12-11  Jer Noble  <jer.noble@apple.com>

        [Cocoa] -[AVPlayerItem liveUpdateInterval] can hang the main thread for ~60ms
        https://bugs.webkit.org/show_bug.cgi?id=234131

        Reviewed by Eric Carlson.

        Direct property access of AVFoundation objects can take tens of milliseconds to return
        a value, even for simple properties. This impacts scrolling responsiveness.

        -liveUpdateInterval is not KVO-observable, but only changes when -seekableTimeRanges does
        as well. Query and cache that property during KVO of -seekableTimeRanges.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::seekableTimeRangesLastModifiedTime const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::liveUpdateInterval const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::seekableTimeRangesDidChange):
        (-[WebCoreAVFMovieObserver observeValueForKeyPath:ofObject:change:context:]):

2021-12-10  Simon Fraser  <simon.fraser@apple.com>

        Scrolling can drop frames when CoreAnimation commits take a long time
        https://bugs.webkit.org/show_bug.cgi?id=234160
        <rdar://86235740>

        Reviewed by Tim Horton.

        In r261985 I added a mechanism that has the scrolling thread wait for the main thread to
        finish a rendering update, and, if the main thread fails to complete in time, then the
        scrolling thread commits. This allows for scrolling synchronization when the main thread is
        responsive, but smooth scrolling when the main thread is busy.

        However, r261985 only waits for WebKit work to finish; what we really care about is whether
        the main thread completes its CA commit in time (because that determines whether the scroll
        shows on the screen).

        So plumb through pre-/post-commit hooks from TiledCoreAnimationDrawingArea, which already
        had them for inspector instrumentation. Then have ThreadedScrollingTree notify
        m_stateCondition in didCompletePlatformRenderingUpdate(), instead of
        didCompleteRenderingUpdate().
        
        Also, now we can call the inspector hooks from Page, rather than out in TiledCoreAnimationDrawingArea.

        * page/Page.cpp:
        (WebCore::Page::willStartPlatformRenderingUpdate):
        (WebCore::Page::didCompletePlatformRenderingUpdate):
        * page/Page.h:
        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollingCoordinator::willStartPlatformRenderingUpdate):
        (WebCore::ScrollingCoordinator::didCompletePlatformRenderingUpdate):
        * page/scrolling/ThreadedScrollingTree.cpp:
        (WebCore::ThreadedScrollingTree::didCompletePlatformRenderingUpdate):
        (WebCore::ThreadedScrollingTree::didCompleteRenderingUpdate): Deleted.
        * page/scrolling/ThreadedScrollingTree.h:
        * page/scrolling/mac/ScrollingCoordinatorMac.h:
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::didCompletePlatformRenderingUpdate):

2021-12-10  Chris Dumez  <cdumez@apple.com>

        Implement AbortSignal.throwIfAborted
        https://bugs.webkit.org/show_bug.cgi?id=234127

        Reviewed by Darin Adler.

        Implement AbortSignal.throwIfAborted as per:
        - https://dom.spec.whatwg.org/#dom-abortsignal-throwifaborted

        No new tests, updated / rebaselined existing test.

        * dom/AbortSignal.cpp:
        (WebCore::AbortSignal::throwIfAborted):
        * dom/AbortSignal.h:
        * dom/AbortSignal.idl:

2021-12-10  Alexey Shvayka  <ashvayka@apple.com>

        Setting "onselectionchange" content attribute should add an event listener
        https://bugs.webkit.org/show_bug.cgi?id=234167

        Reviewed by Darin Adler.

        This patch implements full support for "onselectionchange" content attribute,
        enabling it to add an event listener on any element, which fixes regression
        introduced in r268745 and aligns "onselectionchange" with "onselectstart".

        Aligns WebKit with Gecko and the spec [1].

        [1] https://w3c.github.io/selection-api/#extensions-to-globaleventhandlers-interface

        Tests: fast/dom/event-handler-attributes.html
               imported/w3c/web-platform-tests/selection/textcontrols/onselectionchange-content-attribute.html

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::createEventHandlerNameMap):

2021-12-10  Joonghun Park  <jh718.park@samsung.com>

        Don't do simplification for percentage comparison resolution against negative reference values.
        https://bugs.webkit.org/show_bug.cgi?id=233987

        Reviewed by Darin Adler.

        A percentage may be resolved against a negative value, which is allowed only in 'background-position' property.

        Currently in CSSCalcExpressionNodeParser::parseCalc,
        it creates CSSCalcExpressionNode tree result and does simplification for it.
        But during it, e.g. min(50%, 10%) is simplified to min(10%) and max(50%, 10%) is simplified to max(50%),
        which is the opposite result what should be done against negative basis.

        With this patch, the percentage comparison resolution against nagative basis is done correctly.

        The corresponding spec is step 4's note described below in
        https://drafts.csswg.org/css-values-4/#simplify-a-calculation-tree.

        'If a percentage is left at this point, it will usually block simplification of the node,
        since it needs to be resolved against another value using information not currently available.
        (Otherwise, it would have been converted to a different value in an earlier step.)
        This includes operations such as "min", since percentages might resolve against a negative basis,
        and thus end up with an opposite comparative relationship than the raw percentage value would seem to indicate.'

        * css/calc/CSSCalcExpressionNodeParser.cpp:
        (WebCore::CSSCalcExpressionNodeParser::parseCalc):
        * css/calc/CSSCalcExpressionNodeParser.h:
        * css/calc/CSSCalcOperationNode.cpp:
        (WebCore::CSSCalcOperationNode::combineChildren):
        * css/calc/CSSCalcOperationNode.h:
        * css/calc/CSSCalcValue.cpp:
        (WebCore::CSSCalcValue::create):
        * css/calc/CSSCalcValue.h:
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeBackgroundPosition):
        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::CalcParser::CalcParser):
        (WebCore::CSSPropertyParserHelpers::consumeLengthOrPercent):
        (WebCore::CSSPropertyParserHelpers::consumePositionComponent):
        (WebCore::CSSPropertyParserHelpers::consumePositionCoordinates):
        * css/parser/CSSPropertyParserHelpers.h:

2021-12-10  Michael Saboff  <msaboff@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=234173
        Update Install Paths for build system changes

        Reviewed by Yusuke Suzuki.

        Updated install paths for changes in the build system that use a system path prefix.

        Covered by existing tests.

        * Configurations/WebCore.xcconfig:

2021-12-10  Alexey Shvayka  <ashvayka@apple.com>

        Some WebIDL operations / attributes incorrectly use _current_ realm instead of _relevant_
        https://bugs.webkit.org/show_bug.cgi?id=230941

        Reviewed by Sam Weinig.

        This patch replaces _current_ global object with _relevant_, as per recommendation
        for spec authors [1], for select WebIDL operations / attributes that satisfy all
        the following conditions:

          1) it's an instance member: static ones and constructors can't use _relevant_;
          2) it's on standards track (not deprecated / WebKit-only / internal);
          3) the change is directly observable: global object is used for something
             beyond lifecycle / event loop / parsing CSS etc;
          4) the change either aligns WebKit with both Blink and Gecko,
             or the spec explicitly requires _relevant_ realm / settings object.

        Most of the remaining [CallWith=GlobalObject] instances are correctly used for
        converting JS arguments to WebIDL values; the rest, along with _current_ Document
        and ScriptExecutionContext, either match the spec or replacing them with _relevant_
        global object is not directly observable (see condition #3).

        This change is aimed at fixing web-exposed APIs rather than performing a global cleanup.

        [1] https://html.spec.whatwg.org/multipage/webappapis.html#concept-current-everything

        Tests: imported/w3c/web-platform-tests/dom/events/Event-timestamp-cross-realm-getter.html
               imported/w3c/web-platform-tests/html/browsers/history/the-history-interface/history_back_cross_realm_method.html
               imported/w3c/web-platform-tests/html/browsers/history/the-history-interface/history_forward_cross_realm_method.html
               imported/w3c/web-platform-tests/html/browsers/history/the-history-interface/history_go_cross_realm_method.html
               imported/w3c/web-platform-tests/html/webappapis/scripting/reporterror-cross-realm-method.html
               imported/w3c/web-platform-tests/html/webappapis/structured-clone/structured-clone-cross-realm-method.html
               imported/w3c/web-platform-tests/requestidlecallback/callback-timeRemaining-cross-realm-method.html

        * Modules/indexeddb/IDBFactory.idl:
        https://www.w3.org/TR/IndexedDB/#dom-idbfactory-open (step 2)
        https://www.w3.org/TR/IndexedDB/#dom-idbfactory-deletedatabase (step 1)
        https://www.w3.org/TR/IndexedDB/#dom-idbfactory-databases (step 1)

        * Modules/paymentrequest/PaymentRequest.idl:
        https://www.w3.org/TR/payment-request/#show-method (steps 2-4)
        https://www.w3.org/TR/payment-request/#can-make-payment-algorithm (before step 1)

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateCallWith):
        * bindings/scripts/IDLAttributes.json:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/TestObj.idl:
        * dom/Event.idl:
        https://dom.spec.whatwg.org/#inner-event-creation-steps (step 3)

        * dom/IdleDeadline.idl:
        https://w3c.github.io/requestidlecallback/#the-requestidlecallback-method (step 1)

        * page/History.idl:
        https://html.spec.whatwg.org/multipage/history.html#dom-history-go (step 1)
        https://html.spec.whatwg.org/multipage/history.html#dom-history-back (step 1)
        https://html.spec.whatwg.org/multipage/history.html#dom-history-forward (step 1)

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::setTimeout):
        (WebCore::DOMWindow::setInterval):
        * page/DOMWindow.h:
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::setTimeout):
        (WebCore::WorkerGlobalScope::setInterval):
        * workers/WorkerGlobalScope.h:
        Although condition #4 isn't satisfied for setTimeout() / setInterval() because
        _current_ global object is used only for logging, replacing it with _relevant_
        nicely cleans up method signatures.

        * page/WindowOrWorkerGlobalScope.cpp:
        (WebCore::WindowOrWorkerGlobalScope::structuredClone):
        * page/WindowOrWorkerGlobalScope.h:
        * page/WindowOrWorkerGlobalScope.idl:
        https://html.spec.whatwg.org/multipage/webappapis.html#report-the-exception
        https://html.spec.whatwg.org/multipage/structured-data.html#structured-cloning (step 2)

2021-12-10  Devin Rousso  <drousso@apple.com>

        WKWebView doesn’t respond to -copyFont: and -pasteFont:
        https://bugs.webkit.org/show_bug.cgi?id=191379
        <rdar://problem/45878659>

        Reviewed by Wenson Hsieh.

        Test: editing/execCommand/mac/copyFont-pasteFont.html

        * dom/DOMPasteAccess.h:
        Add `DOMPasteAccessCategory::Fonts` (which corresponds to `NSPasteboardNameFont` on macOS).

        * editing/Editor.h:
        * editing/Editor.cpp:
        (WebCore::eventNameForClipboardEvent):
        (WebCore::createDataTransferForClipboardEvent):
        (WebCore::Editor::copyFont): Added.
        (WebCore::Editor::pasteFont): Added.
        Add platform-agnostic handling for `"CopyFont"` and `"PasteFont"` editor commands.

        * editing/mac/EditorMac.mm:
        (WebCore::Editor::platformCopyFont): Added.
        (WebCore::Editor::platformPasteFont): Added.
        Mimic the logic in `-[WebHTMLView copyFont:]`/`-[WebHTMLView pasteFont:]` to be compatible
        with WK1 (i.e. to make it easier for clients to switch to WK2).

        * editing/gtk/EditorGtk.cpp:
        (WebCore::Editor::platformCopyFont): Added.
        (WebCore::Editor::platformPasteFont): Added.
        * editing/ios/EditorIOS.mm:
        (WebCore::Editor::platformCopyFont): Added.
        (WebCore::Editor::platformPasteFont): Added.
        * editing/libwpe/EditorLibWPE.cpp:
        (WebCore::Editor::platformCopyFont): Added.
        (WebCore::Editor::platformPasteFont): Added.
        * editing/win/EditorWin.cpp:
        (WebCore::Editor::platformCopyFont): Added.
        (WebCore::Editor::platformPasteFont): Added.
        Add stubs for other platforms.

        * editing/EditorCommand.cpp:
        (WebCore::executeCopyFont): Added.
        (WebCore::executePasteFont): Added.
        (WebCore::createCommandMap):
        Hook `"CopyFont"` and `"PasteFont"` editor commands up to `document.execCommand`.

2021-12-10  Eric Carlson  <eric.carlson@apple.com>

        [macOS] Add new screen and window capture backend
        https://bugs.webkit.org/show_bug.cgi?id=234029

        Reviewed by Jer Noble and Youenn Fablet.

        New API test: GetDisplayMediaWindowAndScreen.mm

        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * en.lproj/Localizable.strings: Add strings for window and screen prompts.

        * platform/mediastream/MediaConstraints.h:
        (WebCore::StringConstraint::getExact const): Drive-by: fix logic inversion bug.
        (WebCore::StringConstraint::getIdeal const): Ditto.

        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::fitnessDistance): Assert if device ID constraint is
        not a string.

        * platform/mediastream/RealtimeMediaSourceCenter.h:
        (WebCore::RealtimeMediaSourceCenter::useScreenCaptureKit const):
        (WebCore::RealtimeMediaSourceCenter::setUseScreenCaptureKit):
        (WebCore::RealtimeMediaSourceCenter::useMockCaptureDevices const):
        (WebCore::RealtimeMediaSourceCenter::setUseMockCaptureDevices):

        * platform/mediastream/cocoa/DisplayCaptureSourceCocoa.cpp:
        (WebCore::DisplayCaptureSourceCocoa::create):
        (WebCore::DisplayCaptureSourceCocoa::DisplayCaptureSourceCocoa):
        (WebCore::DisplayCaptureSourceCocoa::Capturer::setObserver):
        (WebCore::DisplayCaptureSourceCocoa::Capturer::capturerIsRunningChanged): Deleted.
        * platform/mediastream/cocoa/DisplayCaptureSourceCocoa.h:
        (WebCore::CapturerObserver::capturerIsRunningChanged):
        (WebCore::CapturerObserver::capturerFailed):

        * platform/mediastream/ios/ReplayKitCaptureSource.mm:
        (WebCore::ReplayKitCaptureSource::captureStateDidChange):

        * platform/mediastream/mac/DisplayCaptureManagerCocoa.cpp:
        (WebCore::DisplayCaptureManagerCocoa::updateDisplayCaptureDevices): Use
        ScreenCaptureKitCaptureSource when available.
        (WebCore::DisplayCaptureManagerCocoa::updateWindowCaptureDevices): Ditto.
        (WebCore::DisplayCaptureManagerCocoa::screenCaptureDeviceWithPersistentID): Ditto.
        (WebCore::DisplayCaptureManagerCocoa::windowCaptureDeviceWithPersistentID): Ditto.

        * platform/mediastream/mac/ScreenCaptureKitCaptureSource.h: Added.
        * platform/mediastream/mac/ScreenCaptureKitCaptureSource.mm: Added.
        (-[WebCoreScreenCaptureKitHelper initWithCallback:]):
        (-[WebCoreScreenCaptureKitHelper disconnect]):
        (-[WebCoreScreenCaptureKitHelper stream:didStopWithError:]):
        (WebCore::usingOldAPI):
        (WebCore::ScreenCaptureKitCaptureSource::isAvailable):
        (WebCore::ScreenCaptureKitCaptureSource::create):
        (WebCore::ScreenCaptureKitCaptureSource::ScreenCaptureKitCaptureSource):
        (WebCore::ScreenCaptureKitCaptureSource::~ScreenCaptureKitCaptureSource):
        (WebCore::ScreenCaptureKitCaptureSource::start):
        (WebCore::ScreenCaptureKitCaptureSource::stop):
        (WebCore::ScreenCaptureKitCaptureSource::streamFailedWithError):
        (WebCore::ScreenCaptureKitCaptureSource::generateFrame):
        (WebCore::ScreenCaptureKitCaptureSource::processSharableContent):
        (WebCore::ScreenCaptureKitCaptureSource::findShareableContent):
        (WebCore::ScreenCaptureKitCaptureSource::streamConfiguration):
        (WebCore::ScreenCaptureKitCaptureSource::startContentStream):
        (WebCore::ScreenCaptureKitCaptureSource::intrinsicSize const):
        (WebCore::ScreenCaptureKitCaptureSource::updateStreamConfiguration):
        (WebCore::ScreenCaptureKitCaptureSource::commitConfiguration):
        (WebCore::ScreenCaptureKitCaptureSource::captureQueue):
        (WebCore::ScreenCaptureKitCaptureSource::frameAvailableHandler):
        (WebCore::ScreenCaptureKitCaptureSource::deviceType const):
        (WebCore::ScreenCaptureKitCaptureSource::surfaceType const):
        (WebCore::ScreenCaptureKitCaptureSource::screenCaptureDeviceWithPersistentID):
        (WebCore::ScreenCaptureKitCaptureSource::screenCaptureDevices):
        (WebCore::ScreenCaptureKitCaptureSource::windowCaptureDeviceWithPersistentID):
        (WebCore::ScreenCaptureKitCaptureSource::windowCaptureDevices):
        (WebCore::ScreenCaptureKitCaptureSource::forEachNSWindow):

        * platform/mock/MockMediaDevice.h:
        (WebCore::MockMediaDevice::captureDevice const): Make devices enabled by default. 
        Initialize screen and window devices with the correct type.

        * platform/mock/MockRealtimeMediaSourceCenter.cpp:
        (WebCore::defaultDevices): Fix window device types.
        (WebCore::MockRealtimeMediaSourceCenter::displayDevices):
        * platform/mock/MockRealtimeMediaSourceCenter.h:

2021-12-10  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] OT-SVG glyphs don't draw into canvases (because of the GPU process)
        https://bugs.webkit.org/show_bug.cgi?id=234171
        <rdar://problem/70166552>

        Reviewed by Devin Rousso.

        Drawing OT-SVG glyphs into canvas was intentionally disabled in https://trac.webkit.org/changeset/269211/webkit.
        This patch enables it again. Rather than doing anything complicated like supporting all of SVG in DrawGlyphsRecorder,
        we can simply support this by drawing the glyphs into a ImageBuffer and sending the ImageBuffer to the GPU process.

        For text, it's pretty important that the pixel grid of the ImageBuffer matches the pixel grid of the destination,
        rather than being offset by half a pixel or something. This patch adds a new creation function to ImageBuffer which
        accepts a FloatRect (instead of the previous FloatSize which it used to accept). The FloatRect is necessary because
        inflating the geometry has to happen on both the left and the right if we want the pixel grids to match.

        Test: fast/text/otsvg-canvas.html

        * platform/graphics/DrawGlyphsRecorder.h:
        * platform/graphics/ImageBuffer.cpp:
        (WebCore::ImageBuffer::createCompatibleBuffer):
        (WebCore::ImageBuffer::compatibleBufferInfo):
        * platform/graphics/ImageBuffer.h:
        * platform/graphics/coretext/DrawGlyphsRecorderCoreText.cpp:
        (WebCore::DrawGlyphsRecorder::drawOTSVGRun):
        (WebCore::DrawGlyphsRecorder::drawNonOTSVGRun):
        (WebCore::DrawGlyphsRecorder::drawBySplittingIntoOTSVGAndNonOTSVGRuns):
        (WebCore::DrawGlyphsRecorder::drawGlyphs):
        (WebCore::filterOutOTSVGGlyphs): Deleted.

2021-12-10  Megan Gardner  <megan_gardner@apple.com>

        Image does not update after Markup Pane is dismissed.
        https://bugs.webkit.org/show_bug.cgi?id=234162

        Reviewed by Devin Rousso.

        Once the item is retured from the Sharing Service, we need to pipe the information
        back to the attachement element so that it can be properly updated.
        This includes holding onto the attachment ID of the controlled image so that it 
        can later be found and updated.

        * dom/mac/ImageControlsMac.cpp:
        (WebCore::ImageControlsMac::handleEvent):
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::setAttachmentElement):
        * page/ChromeClient.h:
        (WebCore::ChromeClient::handleImageServiceClick):

2021-12-10  Don Olmstead  <don.olmstead@sony.com>

        Add FileSystem function to read a file at a path
        https://bugs.webkit.org/show_bug.cgi?id=234103

        Reviewed by Alex Christensen.

        Use FileSystem::readEntireFile.

        * platform/network/curl/CurlCacheEntry.cpp:
        (WebCore::CurlCacheEntry::readCachedData):
        (WebCore::CurlCacheEntry::loadResponseHeaders):
        (WebCore::CurlCacheEntry::loadFileToBuffer): Deleted.
        * platform/network/curl/CurlCacheEntry.h:
        * platform/network/curl/CurlCacheManager.cpp:
        (WebCore::CurlCacheManager::loadIndex):
        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::stringWithContentsOfFile):
        (WebCore::fillBufferWithContentsOfFile): Deleted.

2021-12-10  Antoine Quint  <graouts@webkit.org>

        Expose the maximum device frame rate to the Web Animations model
        https://bugs.webkit.org/show_bug.cgi?id=234161
        rdar://85983792

        Reviewed by Simon Fraser.

        Expose a new property on DocumentTimeline, governed by an off-by-default runtime flag,
        that exposes the maximum frame rate supported by the device. This will allow authors
        to use this information to make informed decision on appropriate frame rates to set
        on animations.

        * animation/DocumentTimeline.cpp:
        (WebCore::DocumentTimeline::maximumFrameRate const):
        * animation/DocumentTimeline.h:
        * animation/DocumentTimeline.idl:

2021-12-10  Alexey Shvayka  <ashvayka@apple.com>

        Extend the scope where the Window's current event is set
        https://bugs.webkit.org/show_bug.cgi?id=233833

        Reviewed by Ryosuke Niwa.

        Inner invoke algorithm [1] sets window.event from step 8.2 until step 12 (inclusive).
        That includes calling a callback interface [2], which performs "handleEvent" lookup
        (step 10.1) and coerces return value of "beforeunload" handler (step 14).

        Before this patch, window.event was not set during these user-observable operations.
        Now WebKit is aligned with Blink and Gecko.

        JSErrorHandler is correct: although reportException() may call userland "error" handler,
        it will have window.event on its own.

        [1] https://dom.spec.whatwg.org/#concept-event-listener-inner-invoke
        [2] https://webidl.spec.whatwg.org/#call-a-user-objects-operation

        Tests: imported/w3c/web-platform-tests/dom/events/event-global-is-still-set-when-coercing-beforeunload-result.html
               imported/w3c/web-platform-tests/dom/events/event-global-set-before-handleEvent-lookup.any.html

        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent):
        ScopeExit is used since the method has so many exit points.

2021-12-10  Alexey Shvayka  <ashvayka@apple.com>

        JSErrorHandler should not set window.event if invocation target is in shadow tree
        https://bugs.webkit.org/show_bug.cgi?id=233834

        Reviewed by Ryosuke Niwa.

        This patch brings r233489 for JSErrorHandler (window.onerror handler for ErrorEvent),
        implementing the spec [1] and aligning WebKit with Blink and Gecko.

        [1] https://dom.spec.whatwg.org/#ref-for-window-current-event%E2%91%A1

        Test: imported/w3c/web-platform-tests/dom/events/event-global.html

        * bindings/js/JSErrorHandler.cpp:
        (WebCore::JSErrorHandler::handleEvent):

2021-12-10  Devin Rousso  <drousso@apple.com>

        Allow `Pasteboard::readBuffer` to read from the pasteboard as a whole instead of a specific item
        https://bugs.webkit.org/show_bug.cgi?id=233940

        Reviewed by Wenson Hsieh.

        In order to match the WK1 implementation of `-pasteFont:` <https://webkit.org/b/191379>, we
        need to read from the font pasteboard as a whole, not a specific item. Make the `index` into
        an `std::optional` so that we can have this behavior without needing to have a new method.

        No change in behavior.

        * platform/Pasteboard.h:
        * platform/Pasteboard.cpp:
        (WebCore::Pasteboard::readBuffer):
        * platform/PasteboardStrategy.h:
        * platform/PlatformPasteboard.h:
        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::PlatformPasteboard::getTypes const):
        (WebCore::PlatformPasteboard::bufferForType const):
        (WebCore::PlatformPasteboard::readBuffer const):
        (WebCore::PlatformPasteboard::getTypes): Deleted.
        (WebCore::PlatformPasteboard::bufferForType): Deleted.
        * platform/libwpe/PlatformPasteboardLibWPE.cpp:
        (WebCore::PlatformPasteboard::getTypes const):
        (WebCore::PlatformPasteboard::getTypes): Deleted.
        * platform/mac/PlatformPasteboardMac.mm:
        (WebCore::PlatformPasteboard::getTypes const):
        (WebCore::PlatformPasteboard::bufferForType const):
        (WebCore::PlatformPasteboard::readBuffer const):
        (WebCore::PlatformPasteboard::getTypes): Deleted.
        (WebCore::PlatformPasteboard::bufferForType): Deleted.

2021-12-10  Chris Dumez  <cdumez@apple.com>

        Improve <type="datetime-local"> value parsing and sanitization
        https://bugs.webkit.org/show_bug.cgi?id=234039

        Reviewed by Darin Adler.

        Improve <type="datetime-local"> value parsing and sanitization.

        Test: fast/forms/datetimelocal/datetime-local-value-sanitization.html

        * html/BaseDateAndTimeInputType.h:
        * html/DateTimeLocalInputType.cpp:
        (WebCore::DateTimeLocalInputType::sanitizeValue const):
        Implement value sanitization for <type="datetime-local"> so that:
        - if the input uses a space as date / time separator, the sanitized value will use a 'T' instead.
        - The output will use the shortest possible string, omitting seconds or milliseconds when 0, as per
          https://html.spec.whatwg.org/multipage/common-microsyntaxes.html#valid-normalised-local-date-and-time-string

        * html/DateTimeLocalInputType.h:
        * platform/DateComponents.cpp:
        (WebCore::DateComponents::parseTime):
        Fix bug where we would allow more than 3 digits for the millisecond part of the time (we
        would silently ignore follow-up digits instead of failing parsing). This is as per:
        - https://html.spec.whatwg.org/multipage/common-microsyntaxes.html#valid-time-string
        This was covered by one of the subtests in imported/w3c/web-platform-tests/html/semantics/forms/the-input-element/datetime-local.html

        (WebCore::isDateTimeLocalSeparator):
        (WebCore::DateComponents::parseDateTimeLocal):
        Allow using a space as date / time separator in <type="datetime-local">, instead of simply allowing a 'T'.
        This would align our behavior with Gecko and the specification:
        - https://html.spec.whatwg.org/multipage/common-microsyntaxes.html#valid-local-date-and-time-string
        Note that Blink still seems to only allow 'T' as separator.


        (WebCore::DateComponents::toStringForTime const):
        The output will use the shortest possible string, omitting seconds or milliseconds when 0, as per
        https://html.spec.whatwg.org/multipage/common-microsyntaxes.html#valid-normalised-local-date-and-time-string

2021-12-10  Alex Christensen  <achristensen@webkit.org>

        Move if-domain and unless-domain conversion to WKContentRuleList parsing
        https://bugs.webkit.org/show_bug.cgi?id=234126

        Reviewed by Tim Hatcher.

        This simplifies a part of the compiler that is about to get more complicated.
        if-domain and unless-domain were the predecessors of if-top-url and unless-top-url,
        which are strictly more powerful because they run regexes on the whole top URL.
        This just translates *-domain into a *-top-url regex.  This also makes it so there
        is no reason not to have *-domain and *-top-url conditions in the same rule list.

        Covered by existing tests.

        * contentextensions/CombinedURLFilters.cpp:
        (WebCore::ContentExtensions::CombinedURLFilters::addDomain): Deleted.
        * contentextensions/CombinedURLFilters.h:
        * contentextensions/CompiledContentExtension.h:
        * contentextensions/ContentExtension.cpp:
        (WebCore::ContentExtensions::ContentExtension::populateConditionCacheIfNeeded):
        * contentextensions/ContentExtensionCompiler.cpp:
        (WebCore::ContentExtensions::compileRuleList):
        * contentextensions/ContentExtensionCompiler.h:
        * contentextensions/ContentExtensionError.cpp:
        (WebCore::ContentExtensions::contentExtensionErrorCategory):
        * contentextensions/ContentExtensionError.h:
        * contentextensions/ContentExtensionParser.cpp:
        (WebCore::ContentExtensions::getDomainList):
        (WebCore::ContentExtensions::loadTrigger):
        * contentextensions/ContentExtensionRule.h:

2021-12-10  Said Abou-Hallawa  <said@apple.com>

        [GPU Process] [Filters] Address review comments after r285597
        https://bugs.webkit.org/show_bug.cgi?id=234130

        Reviewed by Darin Adler.

        Most of the comments in https://bugs.webkit.org/show_bug.cgi?id=232457
        have already been addressed. This patch covers the unaddressed ones.

        * platform/graphics/filters/software/FEMorphologySoftwareApplier.cpp:
        (WebCore::FEMorphologySoftwareApplier::apply const):
        Remove wasteful ceilf() calls

        * rendering/RenderLayerFilters.cpp:
        (WebCore::RenderLayerFilters::buildFilter):
        Capitalize the sentence in the FIXME comments.

        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::applyResource):
        Use 'auto' in a few places where the type can be deduced.

2021-12-10  Gabriel Nava Marino  <gnavamarino@apple.com>

        nullptr deref in ComputeFloatOffsetForLineLayoutAdapter<FloatingObject::FloatLeft>::updateOffsetIfNeeded
        https://bugs.webkit.org/show_bug.cgi?id=234018

        Reviewed by Alan Bujtas.

        Test: fast/rendering/floating-object-renderer-crash.html

        When destroying a given renderer, we first remove floats and out-of-flow positioned objects
        from their containing block before detaching the renderer from the tree. We do this by obtaining
        the renderer’s outermost block containing a floating object and recursively marking all siblings
        and descendants for layout.

        The criteria for continuing down the list of children require the current block to contain floats
        or be able to shrink to avoid floats. However, we can have a scenario where the current child block
        doesn’t have a float, but one of its descendants does. In this case, although we should continue to
        that descendant and remove the float, we do not.

        The proposal in this patch will instead check whether the child block contains a float, or any of its descendants do.
        If so we should continue traversing towards that descendant.

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::subtreeContainsFloat const):
        (WebCore::RenderBlockFlow::subtreeContainsFloats const):
        (WebCore::RenderBlockFlow::markAllDescendantsWithFloatsForLayout):
        * rendering/RenderBlockFlow.h:

2021-12-10  Said Abou-Hallawa  <said@apple.com>

        [GPU Process] [Filters] Make FilterEffectVector a Vector of Ref<FilterEffect>
        https://bugs.webkit.org/show_bug.cgi?id=234108

        Reviewed by Cameron McCormack.

        There is no case that would require inserting a nullptr in FilterEffectVector.

        * platform/graphics/displaylists/DisplayListRecorder.cpp:
        (WebCore::DisplayList::Recorder::drawFilteredImageBuffer):
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::inputEffect const):
        * platform/graphics/filters/FilterEffect.h:
        * platform/graphics/filters/FilterEffectVector.h:
        * platform/graphics/filters/SourceAlpha.cpp:
        (WebCore::SourceAlpha::SourceAlpha):
        * rendering/CSSFilter.cpp:
        (WebCore::CSSFilter::buildFilterFunctions):
        (WebCore::CSSFilter::effectsOfType const):
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::primitiveAttributeChanged):
        * svg/SVGFEBlendElement.cpp:
        (WebCore::SVGFEBlendElement::build const):
        * svg/SVGFEColorMatrixElement.cpp:
        (WebCore::SVGFEColorMatrixElement::build const):
        * svg/SVGFEComponentTransferElement.cpp:
        (WebCore::SVGFEComponentTransferElement::build const):
        * svg/SVGFECompositeElement.cpp:
        (WebCore::SVGFECompositeElement::build const):
        * svg/SVGFEConvolveMatrixElement.cpp:
        (WebCore::SVGFEConvolveMatrixElement::build const):
        * svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::build const):
        * svg/SVGFEDisplacementMapElement.cpp:
        (WebCore::SVGFEDisplacementMapElement::build const):
        * svg/SVGFEDropShadowElement.cpp:
        (WebCore::SVGFEDropShadowElement::build const):
        * svg/SVGFEGaussianBlurElement.cpp:
        (WebCore::SVGFEGaussianBlurElement::build const):
        * svg/SVGFEMergeElement.cpp:
        (WebCore::SVGFEMergeElement::build const):
        * svg/SVGFEMorphologyElement.cpp:
        (WebCore::SVGFEMorphologyElement::build const):
        * svg/SVGFEOffsetElement.cpp:
        (WebCore::SVGFEOffsetElement::build const):
        * svg/SVGFESpecularLightingElement.cpp:
        (WebCore::SVGFESpecularLightingElement::build const):
        * svg/SVGFETileElement.cpp:
        (WebCore::SVGFETileElement::build const):
        * svg/graphics/filters/SVGFilter.cpp:
        (WebCore::SVGFilter::effectsOfType const):
        * svg/graphics/filters/SVGFilterBuilder.cpp:
        (WebCore::SVGFilterBuilder::clearResultsRecursive):
        (WebCore::SVGFilterBuilder::buildEffectExpression const):
        (WebCore::SVGFilterBuilder::buildExpression const):
        * svg/graphics/filters/SVGFilterBuilder.h:
        (WebCore::SVGFilterBuilder::effectReferences):

2021-12-10  Devin Rousso  <drousso@apple.com>

        Add a way to write a `SharedBuffer` to the Pasteboard
        https://bugs.webkit.org/show_bug.cgi?id=234065

        Reviewed by Wenson Hsieh.

        In order to match the WK1 implementation of `-pasteFont:` <https://webkit.org/b/191379>, we
        need to be able to write a `SharedBuffer` (with an associated type) to the font pasteboard.

        Create a `struct PasteboardBuffer` to wrap the `SharedBuffer` and `String type` (and a
        `String contentOrigin` on Cocoa platforms, which is used to decide whether to show a "Paste"
        callout to the user as a gate on crossorigin content sharing) in a single object.

        Though it isn't used in this patch, `-pasteFont:` <https://webkit.org/b/191379> will use
        this to write RTF data (which contains the necessary font data).

        No change in behavior.

        * platform/Pasteboard.h:
        * platform/Pasteboard.cpp:
        * platform/libwpe/PasteboardLibWPE.cpp:
        (WebCore::Pasteboard::write):
        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::Pasteboard::write):
        * platform/ios/PasteboardIOS.mm:
        (WebCore::Pasteboard::write):
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::write):
        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::write):

2021-12-10  Patrick Griffis  <pgriffis@igalia.com>

        CSP: Prevent nonce-hijacking
        https://bugs.webkit.org/show_bug.cgi?id=233087

        Reviewed by Brent Fulgham.

        Implement protections against nonce-hijacking as described in this spec:
          https://www.w3.org/TR/CSP3/#security-nonce-hijacking

        * dom/Element.cpp:
        (WebCore::Element::isNonceable const):
        (WebCore::Element::nonce const):
        * dom/Element.h:
        (WebCore::Element::hasDuplicateAttribute const):
        (WebCore::Element::setHasDuplicateAttribute):
        * html/parser/AtomHTMLToken.h:
        (WebCore::AtomHTMLToken::hasDuplicateAttribute const):
        (WebCore::AtomHTMLToken::initializeAttributes):
        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::setAttributes):
        (WebCore::HTMLConstructionSite::insertCustomElement):

2021-12-09  Darin Adler  <darin@apple.com>

        Use simpler idioms for std::less and std::greater possible in modern C++
        https://bugs.webkit.org/show_bug.cgi?id=234117

        Reviewed by Anders Carlsson.

        * testing/InternalsMapLike.cpp:
        (WebCore::InternalsMapLike::inspectValues const): Remove unneeded explicit
        use of std:less, because this is what std::sort by default.

2021-12-10  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r286836.
        https://bugs.webkit.org/show_bug.cgi?id=234153

        some tests are flaky on iOS and some are crashing on macOS

        Reverted changeset:

        "[Model] Add load and error events to distinguish resource
        load from model readiness"
        https://bugs.webkit.org/show_bug.cgi?id=233706
        https://commits.webkit.org/r286836

2021-12-10  Chris Dumez  <cdumez@apple.com>

        Radio buttons with no form owner are not grouped
        https://bugs.webkit.org/show_bug.cgi?id=220502
        <rdar://problem/73300895>

        Reviewed by Darin Adler.

        Per the HTML specification and to match the behavior of both Gecko and Blink,
        radio buttons should still be grouped, even if they are disconnected and not
        owned by a form.

        This patch aligns our behavior with Gecko and Blink and is based on the following
        Blink commit:
        - https://chromium-review.googlesource.com/c/chromium/src/+/1988087

        No new tests, rebaselined existing tests.

        * dom/ContainerNode.h:
        (WebCore::ContainerNode::rootNode const):
        * dom/ElementTraversal.h:
        (WebCore::Traversal<ElementType>::inclusiveFirstWithin):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setChecked):
        (WebCore::HTMLInputElement::didChangeForm):
        (WebCore::HTMLInputElement::insertedIntoAncestor):
        (WebCore::HTMLInputElement::removedFromAncestor):
        (WebCore::HTMLInputElement::checkedRadioButtonForGroup const):
        * html/InputType.h:
        (WebCore::InputType::willUpdateCheckedness):
        * html/RadioInputType.cpp:
        (WebCore::RadioInputType::valueMissing const):
        (WebCore::RadioInputType::willUpdateCheckedness):
        * html/RadioInputType.h:

2021-12-10  Patrick Griffis  <pgriffis@igalia.com>

        CSP: Allow external scripts with SRI hashes matching CSP
        https://bugs.webkit.org/show_bug.cgi?id=233911

        Reviewed by Kate Cheney.

        This is a change in CSP3 that allows loading external
        scripts that have SRI hashes matching CSP hashes.
        https://www.w3.org/TR/CSP3/#external-hash

        ResourceCryptographicDigest was changed to not validate padding
        during base64 decoding which is harmless and fixes parsing the
        hashes used in WPT's script-src-sri_hash.sub.html.

        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::isAllowedByContentSecurityPolicy):
        * loader/ResourceCryptographicDigest.cpp:
        (WebCore::parseCryptographicDigestImpl):
        (WebCore::decodeEncodedResourceCryptographicDigest):
        * loader/SubresourceIntegrity.cpp:
        (WebCore::parseIntegrityMetadata):
        * loader/SubresourceIntegrity.h:
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::allowedByContentSecurityPolicy const):
        * page/csp/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::allScriptPoliciesAllow const):
        (WebCore::parseSubResourceIntegrityIntoDigests):
        (WebCore::ContentSecurityPolicy::allowResourceFromSource const):
        (WebCore::ContentSecurityPolicy::allowScriptFromSource const):
        * page/csp/ContentSecurityPolicy.h:
        * page/csp/ContentSecurityPolicyDirectiveList.cpp:
        (WebCore::ContentSecurityPolicyDirectiveList::violatedDirectiveForScript const):
        * page/csp/ContentSecurityPolicyDirectiveList.h:
        * page/csp/ContentSecurityPolicySourceList.cpp:
        (WebCore::ContentSecurityPolicySourceList::matchesAll const):
        * page/csp/ContentSecurityPolicySourceList.h:
        * page/csp/ContentSecurityPolicySourceListDirective.cpp:
        (WebCore::ContentSecurityPolicySourceListDirective::containsAllHashes const):
        * page/csp/ContentSecurityPolicySourceListDirective.h:

2021-12-10  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Replace Vector<std::unique_ptr<DisplayBoxNode> with Vector<DisplayBoxTree::Node>
        https://bugs.webkit.org/show_bug.cgi?id=234110

        Reviewed by Antti Koivisto.

        This patch switches over from using DisplayBoxNode* in AncestorStack to simple indexes to contain heap allocations.

        * layout/formattingContexts/inline/InlineDisplayContentBuilder.cpp:
        (WebCore::Layout::DisplayBoxTree::DisplayBoxTree):
        (WebCore::Layout::DisplayBoxTree::hasInlineBox const):
        (WebCore::Layout::DisplayBoxTree::root const):
        (WebCore::Layout::DisplayBoxTree::at):
        (WebCore::Layout::DisplayBoxTree::at const):
        (WebCore::Layout::DisplayBoxTree::append):
        (WebCore::Layout::AncestorStack::unwind):
        (WebCore::Layout::AncestorStack::push):
        (WebCore::Layout::createdDisplayBoxNodeForContainerBoxAndPushToAncestorStack):
        (WebCore::Layout::InlineDisplayContentBuilder::ensureDisplayBoxForContainer):
        (WebCore::Layout::InlineDisplayContentBuilder::adjustVisualGeometryForDisplayBox):
        (WebCore::Layout::InlineDisplayContentBuilder::processBidiContent):
        (WebCore::Layout::DisplayBoxNode::DisplayBoxNode): Deleted.
        (WebCore::Layout::DisplayBoxNode::appendChild): Deleted.
        (WebCore::Layout::InlineDisplayContentBuilder::adjustVisualGeometryForChildNode): Deleted.
        * layout/formattingContexts/inline/InlineDisplayContentBuilder.h:

2021-12-10  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Enable bidi handling for content with inline boxes
        https://bugs.webkit.org/show_bug.cgi?id=234055

        Reviewed by Antti Koivisto.

        * layout/integration/LayoutIntegrationCoverage.cpp:

2021-12-10  Nikolas Zimmermann  <nzimmermann@igalia.com>

        [LBSE] Create RenderSVGRoot renderer for outermost <svg> and allow direct <rect> children
        https://bugs.webkit.org/show_bug.cgi?id=233873

        Reviewed by Rob Buis.

        Construct RenderSVGRoot renderers for the outermost <svg> element when LBSE is enabled.
        An 'allowlist' approach is used to only create renderers for those SVG elements that
        are aware of LBSE: outermost <svg> element + <rect> element. For all other elements
        no renderers will be created in LBSE for now.

        This patch leaves the legacy engine unchanged (probed by EWS & local test runs),
        and also LBSE shows no assertions/crashes/hangs in release/debug builds - tested
        with "run-webkit-tests --internal-feature=LayerBasedSVGEngineEnabled".

        Note that many layout tests will either timeout or show a different result,
        due to the small capabilities of LBSE at present. Therefore it's beneficial to
        decrease timeouts / use more workers when running layout tests. Otherwise they
        will take a long time to complete. On my macOS Monterey M1 MacBook, following
        parameters lead to a reasonable test execution time:

        run-webkit-tests --internal-feature=LayerBasedSVGEngineEnabled --timeout=5000 \
        --no-sample-on-timeout --no-retry-failures --child-processes=15 \
        [--release / --debug] svg

        Covered by existing tests.

        * rendering/svg/RenderSVGModelObject.cpp:
        (WebCore::RenderSVGModelObject::clippedOverflowRect const):
        (WebCore::RenderSVGModelObject::nodeAtPoint):
        * rendering/svg/RenderSVGModelObject.h:
        (WebCore::RenderSVGModelObject::visualOverflowRectEquivalent const):
        * svg/SVGElement.cpp:
        (WebCore::createSVGLayerAwareElementSet):
        (WebCore::isSVGLayerAwareElement):
        (WebCore::SVGElement::childShouldCreateRenderer const):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::createElementRenderer):

2021-12-10  Antti Koivisto  <antti@apple.com>

        [CSS Container Queries] Basic @container at-rule parsing support
        https://bugs.webkit.org/show_bug.cgi?id=234135

        Reviewed by Antoine Quint.

        Implement basic support for parsing @container at-rules.
        This patch doesn't yet parse the queries themselves.

        Disabled by default.

        * css/StyleRule.cpp:
        (WebCore::StyleRuleBase::destroy):
        (WebCore::StyleRuleBase::copy const):
        (WebCore::StyleRuleBase::createCSSOMWrapper const):
        (WebCore::StyleRuleContainer::StyleRuleContainer):
        (WebCore::StyleRuleContainer::create):
        * css/StyleRule.h:
        (WebCore::StyleRuleBase::isContainerRule const):
        (isType):
        * css/StyleRuleType.h:
        * css/StyleSheetContents.cpp:
        (WebCore::traverseRulesInVector):
        (WebCore::StyleSheetContents::traverseSubresources const):
        * css/parser/CSSAtRuleID.cpp:
        (WebCore::cssAtRuleID):
        * css/parser/CSSAtRuleID.h:
        * css/parser/CSSParserContext.cpp:
        (WebCore::operator==):
        (WebCore::add):
        * css/parser/CSSParserContext.h:
        * css/parser/CSSParserImpl.cpp:
        (WebCore::CSSParserImpl::consumeAtRule):
        (WebCore::CSSParserImpl::consumeContainerRule):
        * css/parser/CSSParserImpl.h:

2021-12-10  Nikolas Zimmermann  <nzimmermann@igalia.com>

        [LBSE] Handle RenderSVGRoot in all places that handle LegacyRenderSVGRoot
        https://bugs.webkit.org/show_bug.cgi?id=233872

        Reviewed by Rob Buis.

        Various places that handle LegacyRenderSVGRoot, also need to handle the
        LBSE RenderSVGRoot renderer -- this patch plumbs in support for
        RenderSVGRoot where necessary.

        Covered by existing tests, no change in behaviour.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::elementPath const):
        * page/FrameView.cpp:
        (WebCore::FrameView::applyOverflowToViewport):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::write):
        * rendering/svg/RenderSVGResource.cpp:
        (WebCore::RenderSVGResource::markForLayoutAndParentResourceInvalidation):
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::layoutSizeOfNearestViewportChanged):
        * rendering/svg/SVGRenderTreeAsText.cpp:
        (WebCore::write):
        * rendering/svg/SVGRenderTreeAsText.h:
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::attachInternal):
        (WebCore::RenderTreeBuilder::detach):
        * rendering/updating/RenderTreeBuilderSVG.cpp:
        (WebCore::RenderTreeBuilder::SVG::attach):
        (WebCore::RenderTreeBuilder::SVG::detach):
        * rendering/updating/RenderTreeBuilderSVG.h:
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::childShouldCreateRenderer const):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::svgAttributeChanged):
        (WebCore::SVGSVGElement::currentViewBoxRect const):
        (WebCore::SVGSVGElement::currentViewportSize const):

2021-12-10  Nikolas Zimmermann  <nzimmermann@igalia.com>

        [LBSE] Begin layer-aware RenderSVGRoot implementation
        https://bugs.webkit.org/show_bug.cgi?id=233863

        Reviewed by Rob Buis.

        Begin implementing RenderSVGRoot - the renderer for the outermost <svg> element -
        for the layer-based SVG engine (LBSE). Starting with the downstream implementation,
        all parts were removed that can be upstreamed separated (SVGBoundingBoxComputation,
        SVGContainerLayout, etc.). This only creates the renderer and integrates it with
        the build systems.

        Covered by existing tests, no change in behaviour.

        * Sources.txt: Add RenderSVGRoot.* to build.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * platform/graphics/transforms/TransformState.h:
        (WebCore::TransformState::direction const): Make direction() public.
        * rendering/svg/RenderSVGRoot.cpp: Added.
        (WebCore::RenderSVGRoot::RenderSVGRoot):
        (WebCore::RenderSVGRoot::svgSVGElement const):
        (WebCore::RenderSVGRoot::computeIntrinsicRatioInformation const):
        (WebCore::RenderSVGRoot::isEmbeddedThroughSVGImage const):
        (WebCore::RenderSVGRoot::isEmbeddedThroughFrameContainingSVGDocument const):
        (WebCore::RenderSVGRoot::computeReplacedLogicalWidth const):
        (WebCore::RenderSVGRoot::computeReplacedLogicalHeight const):
        (WebCore::RenderSVGRoot::layout):
        (WebCore::RenderSVGRoot::shouldApplyViewportClip const):
        (WebCore::RenderSVGRoot::paint):
        (WebCore::RenderSVGRoot::paintObject):
        (WebCore::RenderSVGRoot::paintContents):
        (WebCore::RenderSVGRoot::willBeDestroyed):
        (WebCore::RenderSVGRoot::insertedIntoTree):
        (WebCore::RenderSVGRoot::willBeRemovedFromTree):
        (WebCore::RenderSVGRoot::styleDidChange):
        (WebCore::RenderSVGRoot::updateLayerInformation):
        (WebCore::RenderSVGRoot::updateFromStyle):
        (WebCore::RenderSVGRoot::clippedOverflowRect const):
        (WebCore::RenderSVGRoot::computeTransformationMatrices):
        (WebCore::RenderSVGRoot::nodeAtPoint):
        (WebCore::RenderSVGRoot::hasRelativeDimensions const):
        (WebCore::RenderSVGRoot::addResourceForClientInvalidation):
        (WebCore::RenderSVGRoot::currentViewportSize const):
        (WebCore::RenderSVGRoot::mapLocalToContainer const):
        (WebCore::RenderSVGRoot::overflowClipRect const):
        (WebCore::RenderSVGRoot::applyTransform const):
        (WebCore::RenderSVGRoot::absoluteRects const):
        (WebCore::RenderSVGRoot::absoluteQuads const):
        * rendering/svg/RenderSVGRoot.h: Added.

2021-12-10  Frederic Wang  <fwang@igalia.com>

        Handle TerminationException in WebCore::ReadableStream::create()
        https://bugs.webkit.org/show_bug.cgi?id=233061

        Reviewed by Darin Adler.

        Test: streams/readable-stream-create-after-worker-terminates-crash.html

        * bindings/js/ReadableStream.cpp:
        (WebCore::ReadableStream::create): Do not try immediately casting the constructor value to an
        object, since it is undefined when a termination exception is thrown.

2021-12-10  Kimmo Kinnunen  <kkinnunen@apple.com>

        IOSurface memory attribution is hard to use in constructors
        https://bugs.webkit.org/show_bug.cgi?id=232988
        <rdar://problem/85541918>

        Reviewed by Chris Dumez.

        Add WebCore::ProcessIdentity type that can be used to communicate memory attribution.
        For non-Cocoa ports, this is nullptr.
        This is used in WebCore to set the memory attribution of IOSurface and objects
        that hold IOSurfaces.
        This is instantiated in WebKit.
        Currently the only useful way to instantiate ProcessIdentity is by receiving
        the ProcessIdentity as a message and create it this way for the
        sender process.

        No new tests, refactor.

        * Headers.cmake:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/Logging.h:
        Add WebCore Process log tag since the code moved from WebKit to ProcessIdentity
        used that tag to log.
        * platform/ProcessIdentity.cpp: Added.
        (WebCore::ProcessIdentity::ProcessIdentity):
        (WebCore::ProcessIdentity::taskIdToken const):
        (WebCore::ProcessIdentity::sendRight const):
        (WebCore::ProcessIdentity::operator bool const):
        * platform/ProcessIdentity.h: Added.
        Add the ProcessIdentity type that can be used to communicate memory attribution.
        * platform/graphics/RemoteVideoSample.h:
        (WebCore::RemoteVideoSample::setOwnershipIdentity):
        * platform/graphics/angle/GraphicsContextGLANGLE.h:
        * platform/graphics/cocoa/GraphicsContextGLCocoa.h:
        * platform/graphics/cocoa/GraphicsContextGLCocoa.mm:
        (WebCore::GraphicsContextGLCocoa::create):
        (WebCore::GraphicsContextGLCocoa::GraphicsContextGLCocoa):
        (WebCore::GraphicsContextGLANGLE::allocateAndBindDisplayBufferBacking):
        Add an example use where the constructor takes the memory attribution token.
        This may be needed in the future when the token is used as a parameter in
        the ANGLE context creation.
        Use the token in creating the IOSurface. This fixes a bug where WebGL
        back buffers would not be attributed until they were sent to WP.
        * platform/graphics/cocoa/IOSurface.h:
        * platform/graphics/cocoa/IOSurface.mm:
        (WebCore::IOSurface::setOwnershipIdentity):
        * platform/graphics/cocoa/WebProcessGraphicsContextGLCocoa.mm:

2021-12-10  Adrian Perez de Castro  <aperez@igalia.com>

        Non-unified build fixes, mid December 2021 edition
        https://bugs.webkit.org/show_bug.cgi?id=234106

        Unreviewed non-unified build fixes.

        No new tests needed.

        * bindings/js/JSDOMConvertCallbacks.h: Add missing JSDOMGlobalObject.h header.
        * css/CSSImportRule.cpp: Add missing CSSMarkup.h header.
        * css/CSSLayerStatementRule.cpp: Add missinig CSSLayerBlockRule.h header.
        * platform/graphics/ColorInterpolation.cpp: Remove unneeded #pragma once.
        * platform/graphics/ColorInterpolation.h: Add missing <optional> header.
        * platform/graphics/displaylists/DisplayListItemBuffer.cpp: Add missing Filter.h header.
        * platform/graphics/displaylists/DisplayListRecorderImpl.cpp: Ditto.
        * platform/graphics/filters/FilterFunction.cpp: Add missing ImageBuffer.h header.
        * platform/graphics/filters/FilterOperation.cpp: Ditto.
        * platform/graphics/filters/FilterOperations.cpp: Ditto.
        * platform/graphics/filters/SourceAlpha.cpp: Ditto.
        * platform/graphics/filters/software/FEGaussianBlurSoftwareApplier.cpp: Ditto.
        * platform/graphics/filters/software/SourceGraphicSoftwareApplier.cpp: Add missing
        FilterImage.h header.
        * svg/SVGFEFuncAElement.cpp: Add missing ImageBuffer.h header.
        * svg/SVGFEFuncBElement.cpp: Ditto.
        * svg/SVGFEFuncGElement.cpp: Ditto.
        * svg/SVGFEFuncRElement.cpp: Ditto.
        * svg/SVGFEPointLightElement.cpp: Ditto.
        * svg/SVGFESpotLightElement.cpp: Ditto.

2021-12-09  Antoine Quint  <graouts@webkit.org>

        [Model] Add load and error events to distinguish resource load from model readiness
        https://bugs.webkit.org/show_bug.cgi?id=233706
        rdar://85922697

        Reviewed by Chris Dumez and Dean Jackson.

        Test: model-element/model-element-error-and-load-events.html

        Prior to this patch, <model> elements had a "ready" promise which resolved once the resource had been loaded.
        However, this promise should be used when the <model> is fully ready, and this is done on macOS and iOS asynchronously
        after the resource has been loaded by the supporting ARQL framework. So we need a way to monitor success or failure of
        the resource load specifically.

        To that end, and matching the <img> element, we dispatch "load" and "error" events on <model> elements and add a
        "complete" property to indicate whether the resource is loaded.

        Meanwhile, the "ready" promise is now resolved when the model is fully loaded by the supporting framework, indicating
        that further APIs are safe to use.

        Since creating the support ARQL object for macOS and iOS also requires the <model> element's renderer being available,
        we opt into "custom style resolve callbacks" so that we may implement didAttachRenderers() on HTMLModelElement and keep
        track of renderer availability before attempting to create the ModelPlayer.

        * Modules/model-element/HTMLModelElement.cpp:
        (WebCore::HTMLModelElement::HTMLModelElement):
        (WebCore::HTMLModelElement::create):
        (WebCore::HTMLModelElement::setSourceURL):
        (WebCore::HTMLModelElement::didAttachRenderers):
        (WebCore::HTMLModelElement::notifyFinished):
        (WebCore::HTMLModelElement::modelDidChange):
        (WebCore::HTMLModelElement::createModelPlayer):
        (WebCore::HTMLModelElement::didFinishLoading):
        (WebCore::HTMLModelElement::didFailLoading):
        (WebCore::HTMLModelElement::activeDOMObjectName const):
        (WebCore::HTMLModelElement::virtualHasPendingActivity const):
        * Modules/model-element/HTMLModelElement.h:
        * Modules/model-element/HTMLModelElement.idl:

2021-12-10  Said Abou-Hallawa  <said@apple.com>

        [GPU Process] [Filters] Enable Filter rendering in GPU Process
        https://bugs.webkit.org/show_bug.cgi?id=233989

        Reviewed by Cameron McCormack.

        This will move applying the CSSFilterImageValue, the CSSFilter and the
        SVGFilter to GPUProcess.

        * css/CSSFilterImageValue.cpp:
        (WebCore::CSSFilterImageValue::image):
        * rendering/RenderLayerFilters.cpp:
        (WebCore::RenderLayerFilters::allocateBackingStoreIfNeeded):
        * rendering/RenderMenuList.cpp:
        (RenderMenuList::hostWindow const):
        Change the implementation to call RenderObject::hostWindow() since it is
        now defined to be virtual in the two base classes.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::hostWindow const):
        * rendering/RenderObject.h:
        Add the helper function RenderObject::hostWindow() since it is being 
        requested in many places because of creating ImageBuffer for GPUProcess.

        * rendering/RenderSearchField.cpp:
        (WebCore::RenderSearchField::hostWindow const):
        Change the implementation to call RenderObject::hostWindow() since it is
        now defined to be virtual in the two base classes.

        * rendering/svg/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::applyClippingToContext):
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::applyResource):
        (WebCore::RenderSVGResourceFilter::postApplyResource):
        * rendering/svg/RenderSVGResourceMasker.cpp:
        (WebCore::RenderSVGResourceMasker::applyResource):
        filterData.sourceGraphicBuffer will have to stay around because caching
        the filter result has not been implemented yet.

        * rendering/svg/SVGRenderingContext.cpp:
        (WebCore::SVGRenderingContext::createImageBuffer):
        * rendering/svg/SVGRenderingContext.h:

2021-12-09  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add a new WKWebpagePreferences SPI for modal container observation policies
        https://bugs.webkit.org/show_bug.cgi?id=234013
        rdar://86219613

        Reviewed by Brent Fulgham.

        Add a new website policy flag `ModalContainerObservationPolicy`. Refer to rdar://86219613 for more info.

        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::modalContainerObservationPolicy const):
        (WebCore::DocumentLoader::setModalContainerObservationPolicy):

2021-12-09  Cathie Chen  <cathiechen@igalia.com>

        Stack-overflow crash in WebCore::RenderBox::computeLogicalHeight()
        https://bugs.webkit.org/show_bug.cgi?id=233460

        Reviewed by Sergio Villar Senin and Darin Adler.

        Like flexibleBox item, deprecatedFlexibleBox item should call clearOverridingContentSize if
        it is positioned. Otherwise, RenderReplaced::computeAspectRatioInformationForRenderBox might call
        itself recursively.

        Test: fast/css/deprecated-flex-box-with-min-content-crashes.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::styleDidChange):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::isDisplayFlexibleOrGridBoxIncludingDeprecated const):
        (WebCore::RenderStyle::isDisplayDeprecatedFlexibleBox):

2021-12-09  Devin Rousso  <drousso@apple.com>

        Add a `DOMPasteAccessCategory` to control which pasteboard the WebProcess is granted access to when pasting
        https://bugs.webkit.org/show_bug.cgi?id=233939

        Reviewed by Wenson Hsieh.

        Implementing `-pasteFont:` <https://webkit.org/b/191379> requires that we read from the font
        pasteboard instead of the general pasteboard. In order to allow web content to trigger this
        (e.g. `document.execCommand("PasteFont"))`) we must have a way for the WebProcess to signal
        that it wishes to read from the font pasteboard instead of the general pasteboard. As such,
        create and pass along a `DOMPasteAccessCategory` to `requestDOMPasteAccess`.

        No change in behavior.

        * dom/DOMPasteAccess.h:
        Create `DOMPasteAccessCategory`.

        * page/EditorClient.h:
        * page/Frame.h:
        * page/Frame.cpp:
        (WebCore::Frame::requestDOMPasteAccess):
        * loader/EmptyClients.cpp:
        (WebCore::EmptyEditorClient::requestDOMPasteAccess):
        Pass along the `DOMPasteAccessCategory`.

2021-12-09  Said Abou-Hallawa  <said@apple.com>

        [GPU Process] [Filters] Add the encoding and decoding for FEImage
        https://bugs.webkit.org/show_bug.cgi?id=234099

        Reviewed by Wenson Hsieh.

        FEImage needs to encode and decode the RenderingResourceIdentifier of the
        Image or the ImageBuffer of its SourceImage.

        A new type 'RenderingResourceIdentifier' is added to FEImage::SourceImage
        variant. This going to be used while transferring the FEImage from 
        WebProcess to GPUProcess. 

        Record-using the Image or ImageBuffer of FEImage::SourceImage has to
        happen in Recorder::drawFilteredImageBuffer() since this is the place we
        can send messages to GPUProcess.

        Resolving RenderingResourceIdentifier of FEImage::SourceImage back to an
        Image or an ImageBuffer has to happen in RemoteDisplayListRecorder::
        drawFilteredImageBuffer before handling the item DrawFilteredImageBuffer.

        Because of the two restrictions above we have to provide the virtual
        function Filter::effectsOfType() which is overridden by CSSFilter and 
        SVGFilter.

        * Headers.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/displaylists/DisplayListRecorder.cpp:
        (WebCore::DisplayList::Recorder::drawFilteredImageBuffer):
        * platform/graphics/filters/Filter.h:
        * rendering/CSSFilter.cpp:
        (WebCore::CSSFilter::effectsOfType const):
        * rendering/CSSFilter.h:
        * svg/SVGPreserveAspectRatioValue.cpp:
        (WebCore::SVGPreserveAspectRatioValue::SVGPreserveAspectRatioValue):
        * svg/SVGPreserveAspectRatioValue.h:
        (WebCore::SVGPreserveAspectRatioValue::encode const):
        (WebCore::SVGPreserveAspectRatioValue::decode):
        * svg/graphics/filters/SVGFEImage.cpp:
        (WebCore::FEImage::calculateImageRect const):
        (WebCore::FEImageSoftwareApplier::apply const):
        * svg/graphics/filters/SVGFEImage.h:
        (WebCore::FEImage::encode const):
        (WebCore::FEImage::decode):
        * svg/graphics/filters/SVGFilter.cpp:
        (WebCore::SVGFilter::effectsOfType const):
        * svg/graphics/filters/SVGFilter.h:

2021-12-09  Chris Dumez  <cdumez@apple.com>

        Add basic support for launching a SharedWorker
        https://bugs.webkit.org/show_bug.cgi?id=233895

        Reviewed by Alex Christensen.

        Add basic support for launching a SharedWorker. For now, it mostly behaves as lauching
        a dedicated worker (except that the worker has a SharedWorkerGlobalScope). The shared
        workers are currently not shared in any way, not even within the same process. This
        will need to be implemented in a follow-up.

        This patch is based on Alex Christensen's initial patch from Bug 230382.

        No new tests, rebaselined existing tests.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * page/SecurityOrigin.h:
        (WebCore::SecurityOrigin::canAccessSharedWorkers const):
        * workers/AbstractWorker.cpp:
        (WebCore::AbstractWorker::workerFetchOptions):
        * workers/AbstractWorker.h:
        * workers/Worker.cpp:
        (WebCore::Worker::create):
        * workers/WorkerOrWorkletScriptController.cpp:
        (WebCore::WorkerOrWorkletScriptController::initScript):
        * workers/WorkerThread.cpp:
        (WebCore::WorkerParameters::isolatedCopy const):
        * workers/WorkerThreadType.h:
        * workers/shared/SharedWorker.cpp:
        (WebCore::SharedWorker::create):
        (WebCore::SharedWorker::SharedWorker):
        (WebCore::SharedWorker::~SharedWorker):
        (WebCore::SharedWorker::scriptExecutionContext const):
        (WebCore::SharedWorker::activeDOMObjectName const):
        (WebCore::SharedWorker::stop):
        (WebCore::SharedWorker::virtualHasPendingActivity const):
        (WebCore::SharedWorker::terminate):
        (WebCore::SharedWorker::port const): Deleted.
        * workers/shared/SharedWorker.h:
        * workers/shared/SharedWorker.idl:
        * workers/shared/SharedWorkerGlobalScope.cpp:
        (WebCore::SharedWorkerGlobalScope::SharedWorkerGlobalScope):
        (WebCore::SharedWorkerGlobalScope::close):
        (WebCore::SharedWorkerGlobalScope::name const): Deleted.
        * workers/shared/SharedWorkerGlobalScope.h:
        (isType):
        * workers/shared/SharedWorkerManager.cpp: Added.
        (WebCore::SharedWorkerManager::singleton):
        (WebCore::SharedWorkerManager::connect):
        (WebCore::SharedWorkerManager::scriptLoadFailed):
        (WebCore::SharedWorkerManager::scriptLoadedSuccessfully):
        * workers/shared/SharedWorkerManager.h: Copied from Source/WebCore/workers/shared/SharedWorker.h.
        * workers/shared/SharedWorkerProxy.cpp: Added.
        (WebCore::SharedWorkerProxy::SharedWorkerProxy):
        (WebCore::SharedWorkerProxy::startWorkerGlobalScope):
        (WebCore::SharedWorkerProxy::terminateWorkerGlobalScope):
        (WebCore::SharedWorkerProxy::postMessageToWorkerGlobalScope):
        (WebCore::SharedWorkerProxy::postTaskToWorkerGlobalScope):
        (WebCore::SharedWorkerProxy::hasPendingActivity const):
        (WebCore::SharedWorkerProxy::workerObjectDestroyed):
        (WebCore::SharedWorkerProxy::notifyNetworkStateChange):
        (WebCore::SharedWorkerProxy::suspendForBackForwardCache):
        (WebCore::SharedWorkerProxy::resumeForBackForwardCache):
        (WebCore::SharedWorkerProxy::postExceptionToWorkerObject):
        (WebCore::SharedWorkerProxy::workerGlobalScopeDestroyed):
        (WebCore::SharedWorkerProxy::postMessageToWorkerObject):
        (WebCore::SharedWorkerProxy::confirmMessageFromWorkerObject):
        (WebCore::SharedWorkerProxy::reportPendingActivity):
        (WebCore::SharedWorkerProxy::createCacheStorageConnection):
        (WebCore::SharedWorkerProxy::createRTCDataChannelRemoteHandlerConnection):
        (WebCore::SharedWorkerProxy::postTaskToLoader):
        (WebCore::SharedWorkerProxy::postTaskForModeToWorkerOrWorkletGlobalScope):
        (WebCore::SharedWorkerProxy::postMessageToDebugger):
        (WebCore::SharedWorkerProxy::setResourceCachingDisabledByWebInspector):
        (WebCore::SharedWorkerProxy::workerGlobalScopeDestroyedInternal):
        * workers/shared/SharedWorkerProxy.h: Added.
        (WebCore::SharedWorkerProxy::create):
        (WebCore::SharedWorkerProxy::thread):
        * workers/shared/SharedWorkerScriptLoader.cpp: Added.
        (WebCore::SharedWorkerScriptLoader::SharedWorkerScriptLoader):
        (WebCore::SharedWorkerScriptLoader::didReceiveResponse):
        (WebCore::SharedWorkerScriptLoader::notifyFinished):
        * workers/shared/SharedWorkerScriptLoader.h: Copied from Source/WebCore/workers/shared/SharedWorker.h.
        (WebCore::SharedWorkerScriptLoader::identifier const):
        (WebCore::SharedWorkerScriptLoader::url const):
        (WebCore::SharedWorkerScriptLoader::worker):
        (WebCore::SharedWorkerScriptLoader::options):
        * workers/shared/SharedWorkerThread.cpp: Copied from Source/WebCore/workers/shared/SharedWorkerGlobalScope.cpp.
        (WebCore::SharedWorkerThread::SharedWorkerThread):
        (WebCore::SharedWorkerThread::createWorkerGlobalScope):
        * workers/shared/SharedWorkerThread.h: Copied from Source/WebCore/workers/shared/SharedWorker.h.
        (WebCore::SharedWorkerThread::create):
        * xml/XMLHttpRequest.idl:

2021-12-09  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Stop using the last-bidi value for opaque inline items
        https://bugs.webkit.org/show_bug.cgi?id=234043

        Reviewed by Antti Koivisto.

        Now that we only need to guess the bidi level for empty inline boxes, let's stop applying the "keep tracking
        the last bidi level from the end" logic. It may work for non-empty inline boxes (when the last bidi value
        comes from an actual content run), but it is somewhat incorrect for empty inline boxes.

          e.g. <span id=visually-second>&#8238;END OF CONTENT</span><span id=visually-first></span>

        The "visually-first" inline box's "guessed" bidi level comes from the root direction (since it's the very list run)
        making it LTR while the RTL override character (&#8238;) makes it RTL. It produces incorrect visual ordering for
        these inline boxes.

        * layout/formattingContexts/inline/InlineItemsBuilder.cpp:
        (WebCore::Layout::InlineItemsBuilder::breakAndComputeBidiLevels):

2021-12-09  Alex Christensen  <achristensen@webkit.org>

        Prepare for transition to C++20
        https://bugs.webkit.org/show_bug.cgi?id=234022

        Reviewed by Yusuke Suzuki.

        * contentextensions/ContentExtensionActions.h:
        (WebCore::ContentExtensions::ActionWithoutMetadata::operator== const):
        (WebCore::ContentExtensions::ActionWithStringMetadata::operator== const):
        * contentextensions/ImmutableNFANodeBuilder.h:
        (WebCore::ContentExtensions::ImmutableNFANodeBuilder::FakeRangeIterator::operator== const):
        (WebCore::ContentExtensions::ImmutableNFANodeBuilder::FakeRangeIterator::operator!= const):
        (WebCore::ContentExtensions::ImmutableNFANodeBuilder::FakeRangeIterator::operator==): Deleted.
        (WebCore::ContentExtensions::ImmutableNFANodeBuilder::FakeRangeIterator::operator!=): Deleted.
        * loader/cache/CachedResourceHandle.h:
        (WebCore::CachedResourceHandle::operator== const):
        * page/mac/ImageOverlayControllerMac.mm:
        (WebCore::ImageOverlayController::updateDataDetectorHighlights):
        * page/mac/ServicesOverlayController.mm:
        (WebCore::ServicesOverlayController::buildPhoneNumberHighlights):
        (WebCore::ServicesOverlayController::buildSelectionHighlight):
        * platform/audio/cocoa/AudioDestinationCocoa.cpp:
        (WebCore::AudioDestinationCocoa::getAudioStreamBasicDescription):
        * platform/audio/cocoa/AudioFileReaderCocoa.cpp:
        (WebCore::AudioFileReader::clientDataFormat const):
        * platform/audio/cocoa/CAAudioStreamDescription.cpp:
        (WebCore::CAAudioStreamDescription::CAAudioStreamDescription):
        * platform/audio/cocoa/CAAudioStreamDescription.h:
        * platform/audio/ios/AudioOutputUnitAdaptorIOS.cpp:
        (WebCore::AudioOutputUnitAdaptor::configure):
        * platform/audio/mac/AudioOutputUnitAdaptorMac.cpp:
        (WebCore::AudioOutputUnitAdaptor::configure):
        * platform/graphics/DisplayRefreshMonitorManager.cpp:
        (WebCore::DisplayRefreshMonitorManager::ensureMonitorForDisplayID):
        * platform/graphics/DisplayRefreshMonitorManager.h:
        * platform/graphics/FontSelectionAlgorithm.h:
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::TextBoxIterator::operator== const):
        (WebCore::TextBoxIterator::operator!= const):
        (WebCore::TextBoxIterator::operator==): Deleted.
        (WebCore::TextBoxIterator::operator!=): Deleted.
        * platform/graphics/PixelBufferConversion.cpp:
        (WebCore::makeVImageCGImageFormat):
        * platform/graphics/cg/GraphicsContextGLCG.cpp:
        (WebCore::GraphicsContextGLImageExtractor::extractImage):
        * platform/graphics/cg/ImageBufferCGBackend.cpp:
        (WebCore::createBitmapImageAfterScalingIfNeeded):
        (WebCore::ImageBufferCGBackend::copyCGImageForEncoding const):
        * platform/graphics/cg/ImageBufferCGBitmapBackend.cpp:
        (WebCore::ImageBufferCGBitmapBackend::create):
        (WebCore::ImageBufferCGBitmapBackend::copyNativeImage const):
        * platform/graphics/cg/ImageBufferUtilitiesCG.cpp:
        (WebCore::encode):
        * platform/graphics/cg/NativeImageCG.cpp:
        (WebCore::NativeImage::singlePixelSolidColor const):
        * platform/graphics/cocoa/IOSurface.mm:
        (WebCore::IOSurface::ensurePlatformContext):
        * platform/graphics/cv/PixelBufferConformerCV.cpp:
        (WebCore::PixelBufferConformerCV::createImageFromPixelBuffer):
        * platform/graphics/displaylists/DisplayListIterator.h:
        (WebCore::DisplayList::DisplayList::Iterator::operator== const):
        (WebCore::DisplayList::DisplayList::Iterator::operator!= const):
        (WebCore::DisplayList::DisplayList::Iterator::operator==): Deleted.
        (WebCore::DisplayList::DisplayList::Iterator::operator!=): Deleted.
        * platform/graphics/filters/FEComponentTransfer.h:
        * platform/graphics/transforms/Matrix3DTransformOperation.h:
        * platform/graphics/transforms/MatrixTransformOperation.h:
        * platform/graphics/transforms/PerspectiveTransformOperation.h:
        * platform/graphics/transforms/RotateTransformOperation.h:
        * platform/graphics/transforms/ScaleTransformOperation.h:
        * platform/graphics/transforms/SkewTransformOperation.h:
        * platform/graphics/transforms/TranslateTransformOperation.h:
        * platform/network/mac/ResourceErrorMac.mm:
        (WebCore::ResourceError::mapPlatformError):
        * rendering/GapRects.h:
        (WebCore::GapRects::operator== const):
        (WebCore::GapRects::operator!= const):
        (WebCore::GapRects::operator==): Deleted.
        (WebCore::GapRects::operator!=): Deleted.
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::setShouldMockBoldSystemFontForAccessibility):

2021-12-09  Devin Rousso  <drousso@apple.com>

        An `<input>` that's been autofilled with obscured content should still be editable
        https://bugs.webkit.org/show_bug.cgi?id=234046
        <rdar://problem/86226960>

        Reviewed by Wenson Hsieh.

        It should be possible to delete the value in the `<input>` even if it's been obscured.

        * css/html.css:
        (input:-webkit-autofill-and-obscured):

2021-12-09  Robert Jenner  <Jenner@apple.com>

        Unreviewed, reverting r286754.

        Broke 2 tests on all mac an iOS

        Reverted changeset:

        "Add an experimental trackConfiguration accessor on AudioTrack
        & VideoTrack."
        https://bugs.webkit.org/show_bug.cgi?id=230841
        https://commits.webkit.org/r286754

2021-12-09  Megan Gardner  <megan_gardner@apple.com>

        Markup Pane not displaying.
        https://bugs.webkit.org/show_bug.cgi?id=234089

        Reviewed by Tim Horton.

        Vend the image location so that the Markup Pane knows where to
        present from.

        * dom/mac/ImageControlsMac.cpp:
        (WebCore::ImageControlsMac::handleEvent):
        * page/ChromeClient.h:
        (WebCore::ChromeClient::handleImageServiceClick):

2021-12-09  Tyler Wilcock  <tyler_w@apple.com>

        AX: Improve ASSERT while processing tree appends in AXIsolatedTree::applyPendingChanges
        https://bugs.webkit.org/show_bug.cgi?id=234085

        Reviewed by Chris Fleizach.

        When processing m_pendingAppends in AXIsolatedTree::applyPendingChanges,
        we ASSERT to verify the refcount is what we expect:

        ASSERT_UNUSED(addResult, addResult.iterator->value->refCount() == 2
            || (addResult.iterator->value.ptr() == m_rootNode.get() && m_rootNode->refCount() == 3));

        But this doesn't include the actual refcount in the ASSERT message,
        making it harder to debug.

        This patch uses ASSERT_WITH_MESSAGE to display the actual refcount.

        * accessibility/isolatedtree/AXIsolatedTree.cpp:
        (WebCore::AXIsolatedTree::applyPendingChanges):

2021-12-09  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Stop including inline box start/end inline items in the visual reordering unless they are completely empty
        https://bugs.webkit.org/show_bug.cgi?id=234035

        Reviewed by Antti Koivisto.

        When the visual order == logical order, we use the inline box start/end markers to
        construct/finalize the inline box type of display boxes.
        e.g <span>content</span> when we see the "<span>" run, we construct the inline box type of display box
        and later when we come across the "</span>" run, we finalize its geometry.
        Now with visual reordering, those explicit markers may be out of order. In such cases (bidi in general) we
        switch over to relying solely on the content type of runs to create/finalize the required inline box type of display boxes (see InlineDisplayContentBuilder::ensureDisplayBoxForContainer).

        This implicit way of constructing the inline box type of display boxes allows us to include only the minimum set of inline
        items for visual reordering:
        <span><span><span>content</span></span></span>
        should produce only one entry for visual reordering.
        It is essential to minimize the "noise" to limit the potential confusion introduced by non-content bidi runs (with their guessed levels).

        * layout/formattingContexts/inline/InlineItemsBuilder.cpp:
        (WebCore::Layout::InlineItemsBuilder::breakAndComputeBidiLevels): Reserve the guess bidi level for empty inline boxes only.

2021-12-09  Brent Fulgham  <bfulgham@apple.com>

        Unprefix CSS value text-align: -webkit-match-parent
        https://bugs.webkit.org/show_bug.cgi?id=229496
        <rdar://problem/82628618>

        Reviewed by Darin Adler.

        Tested by web-platform-tests: css/css-text/parsing/text-align-computed.html,
            css/css-text/parsing/text-align-valid.html 

        SSIA.

        * css/CSSProperties.json: Add the unprefixed version.
        * css/CSSValueKeywords.in: Ditto.
        * css/html.css:
        (li): Use the unprefixed version.
        * style/StyleBuilderConverter.h:
        (WebCore::Style::BuilderConverter::convertTextAlign): Handle the new unprefixed version.

2021-12-09  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Try not to include non-content type of inline boxes in the visual reordering
        https://bugs.webkit.org/show_bug.cgi?id=234033

        Reviewed by Antti Koivisto.

        In InlineItemsBuilder::setBidiLevelForOpaqueInlineItems we try to figure out the bidi
        level for inline box markers (<span> and </span>) mostly to be able to position
        empty inline boxes (specifically with decorations). In some cases though the guessed
        bidi level breaks the continuation between the content before and after the marker (e.g.  before</span>after)
        In this patch we try to limit the number of items associated with this guessed bidi level.

        * layout/formattingContexts/inline/InlineDisplayContentBuilder.cpp:
        (WebCore::Layout::InlineDisplayContentBuilder::processBidiContent):
        * layout/formattingContexts/inline/InlineItem.h:
        * layout/formattingContexts/inline/InlineItemsBuilder.cpp:
        (WebCore::Layout::InlineItemsBuilder::breakAndComputeBidiLevels):
        * layout/formattingContexts/inline/InlineLineBuilder.cpp:
        (WebCore::Layout::LineBuilder::layoutInlineContent): we may only submit a subset of runs to the reordering
        algorithm. It also means we may end up with gaps between the visual index values and the real run item indexes.
        The runIndexOffsetMap ensures that the indexes are always consistent with the content in the lineRuns vector.

2021-12-08  BJ Burg  <bburg@apple.com>

        [Cocoa] Web Inspector: provide a way for _WKInspectorExtension clients to be to notified when an extension tab navigates
        https://bugs.webkit.org/show_bug.cgi?id=233935
        <rdar://86123899>

        Reviewed by Patrick Angle.

        Add new InspectorFrontendHost hooks to notify the client about didNavigateExtensionTab().

        * inspector/InspectorFrontendClient.h:
        (WebCore::InspectorFrontendClient::didNavigateExtensionTab):
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::didNavigateExtensionTab):
        * inspector/InspectorFrontendHost.h:
        * inspector/InspectorFrontendHost.idl:

2021-12-09  Said Abou-Hallawa  <said@apple.com>

        [GPU Process] [Filters] Add the encoding and decoding for LightSource
        https://bugs.webkit.org/show_bug.cgi?id=234086

        Reviewed by Wenson Hsieh.

        This will allow encoding and decoding FEDiffuseLighting and FESpecularLighting.

        The create() and the constructor of the LightSource super classes have
        to be non-inline to overcome a "missing vtable" linking issue.

        New constructors are added to FEDiffuseLighting and FESpecularLighting
        to allow creating these super classes from the combined data members of
        FELighting.

        m_bufferPosition of PointLightSource and SpotLightSource are used to cache
        the absolute value of m_userSpacePosition relative to the result FilterImage.
        So it does not need to be encoded/decoded since it is initialized by
        FELightingSoftwareApplier.

        * Headers.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/filters/DistantLightSource.cpp:
        (WebCore::DistantLightSource::create):
        (WebCore::DistantLightSource::DistantLightSource):
        * platform/graphics/filters/DistantLightSource.h:
        (WebCore::DistantLightSource::encode const):
        (WebCore::DistantLightSource::decode):
        (WebCore::DistantLightSource::create): Deleted.
        (WebCore::DistantLightSource::DistantLightSource): Deleted.
        * platform/graphics/filters/FEDiffuseLighting.cpp:
        (WebCore::FEDiffuseLighting::create):
        * platform/graphics/filters/FEDiffuseLighting.h:
        * platform/graphics/filters/FELighting.h:
        (WebCore::FELighting::encode const):
        (WebCore::FELighting::decode):
        * platform/graphics/filters/FESpecularLighting.cpp:
        (WebCore::FESpecularLighting::create):
        * platform/graphics/filters/FESpecularLighting.h:
        * platform/graphics/filters/LightSource.h:
        * platform/graphics/filters/PointLightSource.cpp:
        (WebCore::PointLightSource::create):
        (WebCore::PointLightSource::PointLightSource):
        * platform/graphics/filters/PointLightSource.h:
        (WebCore::PointLightSource::encode const):
        (WebCore::PointLightSource::decode):
        (WebCore::PointLightSource::create): Deleted.
        (WebCore::PointLightSource::PointLightSource): Deleted.
        * platform/graphics/filters/SpotLightSource.cpp:
        (WebCore::SpotLightSource::create):
        (WebCore::SpotLightSource::SpotLightSource):
        * platform/graphics/filters/SpotLightSource.h:
        (WebCore::SpotLightSource::encode const):
        (WebCore::SpotLightSource::decode):
        (WebCore::SpotLightSource::create): Deleted.
        (WebCore::SpotLightSource::SpotLightSource): Deleted.

2021-12-09  Matt Woodrow  <matt.woodrow@gmail.com>

        Unprefix -webkit-mask
        https://bugs.webkit.org/show_bug.cgi?id=229082

        Reviewed by Antti Koivisto.

        Tests: fast/masking/parsing-webkit-mask.html
               imported/w3c/web-platform-tests/css/css-masking/clip-path/animations/clip-path-animation-filter.html
               imported/w3c/web-platform-tests/css/css-masking/clip-path/animations/clip-path-animation-incompatible-shapes1.html
               imported/w3c/web-platform-tests/css/css-masking/clip-path/animations/clip-path-animation-incompatible-shapes2.html
               imported/w3c/web-platform-tests/css/css-masking/clip-path/animations/clip-path-animation-overflow.html
               imported/w3c/web-platform-tests/css/css-masking/clip-path/animations/clip-path-animation-three-keyframes1.html
               imported/w3c/web-platform-tests/css/css-masking/clip-path/animations/clip-path-animation-three-keyframes2.html
               imported/w3c/web-platform-tests/css/css-masking/clip-path/animations/clip-path-transition.html
               imported/w3c/web-platform-tests/css/css-masking/clip-path/clip-path-fixed-scroll.html
               svg/masking/mask-external-reference-expected.svg
               svg/masking/mask-external-reference.svg

        * animation/CSSPropertyAnimation.cpp:
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::createPositionListForLayer):
        (WebCore::ComputedStyleExtractor::valueForPropertyInStyle):
        * css/CSSImageValue.cpp:
        (WebCore::ResolvedURL::isLocalURL const):
        (WebCore::CSSImageValue::reresolvedURL const):
        * css/CSSImageValue.h:
        * css/CSSPrimitiveValue.h:
        (WebCore::CSSPrimitiveValue::create):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator CompositeOperator const):
        (WebCore::CSSPrimitiveValue::operator FillBox const):
        * css/CSSProperties.json:
        * css/CSSToStyleMap.cpp:
        (WebCore::CSSToStyleMap::mapFillMaskMode):
        * css/CSSValueKeywords.in:
        * css/CSSValuePool.h:
        (WebCore::CSSValuePool::createValue):
        * css/SVGCSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::svgPropertyValue):
        * css/StyleProperties.cpp:
        (WebCore::StyleProperties::getPropertyValue const):
        (WebCore::resolvedClipValue):
        (WebCore::isSameAsInitialClipValue):
        (WebCore::StyleProperties::getLayeredShorthandValue const):
        (WebCore::StyleProperties::asText const):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeMaskClip):
        (WebCore::consumePrefixedBackgroundComposite):
        (WebCore::consumeBackgroundComposite):
        (WebCore::consumeBackgroundComponent):
        (WebCore::CSSPropertyParser::parseSingleValue):
        (WebCore::consumeBackgroundPosition):
        (WebCore::CSSPropertyParser::consumeBackgroundShorthand):
        (WebCore::CSSPropertyParser::parseShorthand):
        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::consumePositionCoordinates):
        * display/css/DisplayBoxDecorationPainter.cpp:
        (WebCore::Display::BoxDecorationPainter::paintFillLayer const):
        * rendering/style/FillLayer.cpp:
        (WebCore::clipMax):
        (WebCore::FillLayer::computeClipMax const):
        * rendering/style/FillLayer.h:
        * rendering/style/RenderStyle.cpp:
        (WebCore::rareNonInheritedDataChangeRequiresLayerRepaint):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::hasPositionedMask const):
        * rendering/style/RenderStyleConstants.cpp:
        (WebCore::operator<<):
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/SVGRenderStyle.cpp:
        (WebCore::SVGRenderStyle::SVGRenderStyle):
        (WebCore::SVGRenderStyle::operator== const):
        (WebCore::SVGRenderStyle::copyNonInheritedFrom):
        (WebCore::SVGRenderStyle::diff const):
        * rendering/style/SVGRenderStyle.h:
        (WebCore::SVGRenderStyle::initialLightingColor):
        (WebCore::SVGRenderStyle::y const):
        (WebCore::SVGRenderStyle::hasFill const):
        (WebCore::SVGRenderStyle::initialMaskerResource): Deleted.
        (WebCore::SVGRenderStyle::maskerResource const): Deleted.
        (WebCore::SVGRenderStyle::hasMasker const): Deleted.
        (WebCore::SVGRenderStyle::isolatesBlending const): Deleted.
        (WebCore::SVGRenderStyle::setMaskerResource): Deleted.
        * rendering/style/SVGRenderStyleDefs.cpp:
        (WebCore::StyleResourceData::StyleResourceData): Deleted.
        (WebCore::StyleResourceData::copy const): Deleted.
        (WebCore::StyleResourceData::operator== const): Deleted.
        * rendering/style/SVGRenderStyleDefs.h:
        (WebCore::StyleResourceData::create): Deleted.
        (WebCore::StyleResourceData::operator!= const): Deleted.
        * rendering/style/StyleCachedImage.cpp:
        (WebCore::StyleCachedImage::imageURL const):
        (WebCore::StyleCachedImage::reresolvedURL const):
        (WebCore::StyleCachedImage::imageURL): Deleted.
        * rendering/style/StyleCachedImage.h:
        * rendering/style/WillChangeData.cpp:
        (WebCore::WillChangeData::propertyCreatesStackingContext):
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::isolatesBlending):
        (WebCore::SVGRenderSupport::updateMaskedAncestorShouldIsolateBlending):
        * rendering/svg/SVGRenderTreeAsText.cpp:
        (WebCore::writeResources):
        * rendering/svg/SVGRenderingContext.cpp:
        (WebCore::SVGRenderingContext::prepareToRenderSVGContent):
        * rendering/svg/SVGResources.cpp:
        (WebCore::SVGResources::buildCachedResources):

2021-12-09  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add support for ink overflow on bidi inline boxes
        https://bugs.webkit.org/show_bug.cgi?id=233968

        Reviewed by Antti Koivisto.

        * layout/formattingContexts/inline/InlineDisplayContentBuilder.cpp:
        (WebCore::Layout::InlineDisplayContentBuilder::appendInlineDisplayBoxAtBidiBoundary):
        (WebCore::Layout::InlineDisplayContentBuilder::ensureDisplayBoxForContainer):
        (WebCore::Layout::InlineDisplayContentBuilder::adjustVisualGeometryForChildNode):
        (WebCore::Layout::InlineDisplayContentBuilder::processBidiContent):
        * layout/formattingContexts/inline/InlineDisplayContentBuilder.h:

2021-12-09  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add support for empty bidi inline boxes
        https://bugs.webkit.org/show_bug.cgi?id=233896

        Reviewed by Antti Koivisto.

        Inline boxes with decoration only should also produce associated display boxes.

        * layout/formattingContexts/inline/InlineDisplayContentBuilder.cpp:
        (WebCore::Layout::createdDisplayBoxNodeForContainerBoxAndPushToAncestorStack):
        (WebCore::Layout::InlineDisplayContentBuilder::ensureDisplayBoxForContainer):
        (WebCore::Layout::InlineDisplayContentBuilder::processBidiContent):

2021-12-09  J Pascoe  <j_pascoe@apple.com>

        [WebAuthn] Remove user gesture requirement for using platform authenticator on the web
        https://bugs.webkit.org/show_bug.cgi?id=230893
        <rdar://problem/79781342>

        Reviewed by Brent Fulgham.

        Remove web authentication user gesture bypass quirk as it's no longer used.

        * page/Quirks.cpp:
        (WebCore::Quirks::shouldBypassUserGestureRequirementForWebAuthn const): Deleted.
        * page/Quirks.h:

2021-12-09  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Refactor bidi inline box boundary handling
        https://bugs.webkit.org/show_bug.cgi?id=233880

        Reviewed by Antti Koivisto.

        This patch remove some code complexity by introducing more suitable data types to handle
        content ranges for inline boxes.

        1. The final output of the InlineDisplayContentBuilder is a list of display boxes.
          It's a simple "one box right after the other" type of setup with continuous geometry (ie next box starts where
          the previous ends +-horizontal margins) unless the content is embedded in an inline box (e.g. <span>embedded content</span>)
          Inline box type of display boxes enclose all their descendant content.
          Normally when the logical order == visual order (unidirectional content), the
          descendant content ends right before the "inline box end" mark (</span>). 
          It makes it easy to compute the right edge/enclosing width for the inline box type of display boxes.
        2. However the visual order of the bidi content makes the "let's use the inline box end mark" logic unusable as
          we may see the "inline box end" mark even before we come across any descendant content
          (there are other types of confusions with random ordering).
        3. Working with a list when the content comes in a nested flavor may introduce some complexity (e.g. need to keep content ranges around).

        This patch introduces a very simple DisplayBoxNode type which keeps track of the display boxes in a tree fashion.
        The display boxes are still stored in a list, while this newly introduced DisplayBoxNode tree helps traversing
        the nested content.
        It helps finding out the insertion point at unexpected bidi boundaries (e.g. when nested content from other inline boxes
        show up in a logically unrelated inline box) and it is also very valuable when computing visual geometries for those enclosing display boxes. 

        * layout/formattingContexts/inline/InlineDisplayContentBuilder.cpp:
        (WebCore::Layout::DisplayBoxNode::DisplayBoxNode):
        (WebCore::Layout::DisplayBoxNode::appendChild):
        (WebCore::Layout::AncestorStack::unwind):
        (WebCore::Layout::AncestorStack::push):
        (WebCore::Layout::InlineDisplayContentBuilder::ensureDisplayBoxForContainer):
        (WebCore::Layout::InlineDisplayContentBuilder::adjustVisualGeometryForChildNode):
        (WebCore::Layout::InlineDisplayContentBuilder::insertInlineBoxDisplayBoxForBidiBoundary): Deleted.
        (WebCore::Layout::InlineDisplayContentBuilder::adjustInlineBoxDisplayBoxForBidiBoundary): Deleted.
        (WebCore::Layout::InlineDisplayContentBuilder::processBidiContent): Deleted.
        (WebCore::Layout::InlineDisplayContentBuilder::processOverflownRunsForEllipsis): Deleted.
        (WebCore::Layout::InlineDisplayContentBuilder::collectInkOverflowForInlineBoxes): Deleted.
        (WebCore::Layout::InlineDisplayContentBuilder::computeIsFirstIsLastBoxForInlineContent): Deleted.
        * layout/formattingContexts/inline/InlineDisplayContentBuilder.h:
        * layout/formattingContexts/inline/display/InlineDisplayBox.h:
        (WebCore::InlineDisplay::Box::setLogicalLeft):
        (WebCore::InlineDisplay::Box::setLogicalRight):
        (WebCore::InlineDisplay::Box::setLogicalRect):
        (WebCore::InlineDisplay::Box::setHasContent):

2021-12-09  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Make collectInkOverflowForInlineBoxes propagate ink overflow using the display box list
        https://bugs.webkit.org/show_bug.cgi?id=233950

        Reviewed by Antti Koivisto.

        This is in preparation for supporting ink overflow across bidi boundaries.

        The current HashMap<const Box*, size_t> approach does not work when a layout box could
        produce multiple inline box type of display boxes on the same line (at bidi boundaries).
        Instead let's propagate ink overflow by traversing the display box list starting
        at the end and bubble up the inflated ink overflow rect to the parent inline boxes.

        * layout/formattingContexts/inline/InlineDisplayContentBuilder.cpp:
        (WebCore::Layout::InlineDisplayContentBuilder::build):
        (WebCore::Layout::computeBoxShadowInkOverflow):
        (WebCore::Layout::InlineDisplayContentBuilder::appendAtomicInlineLevelDisplayBox):
        (WebCore::Layout::InlineDisplayContentBuilder::appendInlineBoxDisplayBox):
        (WebCore::Layout::InlineDisplayContentBuilder::appendSpanningInlineBoxDisplayBox):
        (WebCore::Layout::InlineDisplayContentBuilder::collectInkOverflowForInlineBoxes):
        (WebCore::Layout::addBoxShadowInkOverflow): Deleted.
        * layout/formattingContexts/inline/InlineDisplayContentBuilder.h:

2021-12-09  Tyler Wilcock  <tyler_w@apple.com>

        AX: Use RefPtr<AXCoreObject> instead of raw AXCoreObject* pointers in Accessibility::findMatchingObjects and downstream functions
        https://bugs.webkit.org/show_bug.cgi?id=233888

        Reviewed by Chris Fleizach.

        Move usages of raw AXCoreObject* pointers to RefPtr<AXCoreObject> in
        Accessibility::findMatchingObjects and downstream functions.

        This fixes isolated tree mode only crashes for tests:
          - accessibility/mac/search-predicate-element-count.html
          - accessibility/mac/search-predicate-visible-button.html

        These crashed because:

          1. The secondary thread starts a search and stores raw pointers on
             its stack.
          2. The main thread performs some operation to queue isolated tree
             changes.
          3. The search continues on the secondary thread, eventually calling
             AXIsolatedObject::children. This in turns calls AXIsolatedTree::pendingChanges.
          4. The object(s) which we held pointers to are destroyed.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::appendAccessibilityObject):
        (WebCore::Accessibility::isRadioButtonInDifferentAdhocGroup):
        (WebCore::Accessibility::isAccessibilityObjectSearchMatchAtIndex):
        (WebCore::Accessibility::isAccessibilityObjectSearchMatch):
        (WebCore::Accessibility::isAccessibilityTextSearchMatch):
        (WebCore::Accessibility::objectMatchesSearchCriteriaWithResultLimit):
        (WebCore::Accessibility::appendChildrenToArray):
        (WebCore::Accessibility::findMatchingObjects):
        Use RefPtr<AXCoreObject> instead of raw AXCoreObject* pointers.

2021-12-09  Manuel Rego Casasnovas  <rego@igalia.com>

        [selectors] Match :focus-visible on <select> elements
        https://bugs.webkit.org/show_bug.cgi?id=233924

        Reviewed by Antti Koivisto.

        Test: fast/forms/select-listbox-focusring.html

        * dom/Element.cpp:
        (WebCore::shouldAlwaysHaveFocusVisibleWhenFocused):

2021-12-09  Antti Koivisto  <antti@apple.com>

        [selectors] Use :focus-visible in the user agent style sheet
        https://bugs.webkit.org/show_bug.cgi?id=221925
        <rdar://problem/74613552>

        Reviewed by Manuel Rego Casasnovas.

        Replace :-internal-direct-focus with :focus-visible for the default focus outline styling in the user agent style sheet.

        When enabled, this will change focus drawing behavior in two cases:

        - <div tabindex> (or any element with 'tabindex' attribute that is not focusable otherwise) will not show focus
          indicator when focused via click/tap/script.
        - <details> will not show focus indicator when focused via click/tap/script.

        Both still show focus indicator when focused via keyboard (tab) navigation.

        With the feature disabled UA sheet :focus-visible behaves like :-internal-direct-focus.

        This patch does not enable the feature yet.

        * css/SelectorCheckerTestFunctions.h:
        (WebCore::matchesFocusVisiblePseudoClass):

        Check the feature flag. If it is not enabled :focus-visible matches like :-internal-direct-focus.

        * css/html.css:
        (:focus-visible):
        (:-internal-direct-focus): Deleted.

        Replace :-internal-direct-focus.

        * css/parser/CSSParserContext.cpp:
        (WebCore::CSSParserContext::CSSParserContext):

        Always allow :focus-visible when parsing UA sheet.

2021-12-09  Myles C. Maxfield  <mmaxfield@apple.com> and Don Olmstead  <don.olmstead@sony.com>

        Move TextCodec files from WebCore/platform/text to WebCore/PAL/text
        https://bugs.webkit.org/show_bug.cgi?id=233683

        Reviewed by Yusuke Suzuki.

        This is a purely mechanical move. The TextCodec files don't have any dependencies
        except for ICU, so they're good candidates to move.

        They do have a thread-local cache, so I split ThreadGlobalData into a PAL part and
        a WebCore part.

        No new tests because there is no behavior change.

        * Headers.cmake:
        * Modules/encryptedmedia/legacy/LegacyCDMSessionClearKey.cpp:
        (WebCore::CDMSessionClearKey::generateKeyRequest):
        * Modules/fetch/FetchBody.cpp:
        (WebCore::FetchBody::consumeAsStream):
        (WebCore::FetchBody::consumeText):
        (WebCore::FetchBody::bodyAsFormData const):
        (WebCore::FetchBody::take):
        * Modules/fetch/FetchBodyConsumer.cpp:
        (WebCore::FetchBodyConsumer::packageFormData):
        * Sources.txt:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * accessibility/atk/WebKitAccessibleInterfaceText.cpp:
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::executeJavaScriptURL):
        * css/parser/CSSParserContext.cpp:
        (WebCore::CSSParserContext::completeURL const):
        * css/parser/CSSParserContext.h:
        * dom/Document.cpp:
        (WebCore::Document::characterSetWithUTF8Fallback const):
        (WebCore::Document::defaultCharsetForLegacyBindings const):
        * dom/Document.h:
        * dom/DocumentInlines.h:
        (WebCore::Document::textEncoding const):
        * dom/TextDecoder.cpp:
        * dom/TextDecoder.h:
        * fileapi/BlobBuilder.cpp:
        (WebCore::BlobBuilder::append):
        * fileapi/FileReaderLoader.cpp:
        (WebCore::FileReaderLoader::convertToText):
        (WebCore::FileReaderLoader::setEncoding):
        * fileapi/FileReaderLoader.h:
        * html/DOMFormData.cpp:
        (WebCore::DOMFormData::DOMFormData):
        (WebCore::DOMFormData::create):
        * html/DOMFormData.h:
        (WebCore::DOMFormData::encoding const):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::process):
        * html/ImageDocument.cpp:
        (WebCore::ImageDocument::finishedParsing):
        * html/MediaFragmentURIParser.cpp:
        (WebCore::MediaFragmentURIParser::parseFragments):
        * html/parser/HTMLMetaCharsetParser.cpp:
        (WebCore::HTMLMetaCharsetParser::HTMLMetaCharsetParser):
        (WebCore::HTMLMetaCharsetParser::encodingFromMetaAttributes):
        * html/parser/HTMLMetaCharsetParser.h:
        (WebCore::HTMLMetaCharsetParser::encoding):
        * html/track/WebVTTParser.cpp:
        (WebCore::WebVTTParser::WebVTTParser):
        * inspector/agents/InspectorDOMAgent.cpp:
        (WebCore::computeContentSecurityPolicySHA256Hash):
        * inspector/agents/InspectorNetworkAgent.cpp:
        * inspector/agents/InspectorPageAgent.cpp:
        (WebCore::decodeBuffer):
        * loader/FormSubmission.cpp:
        (WebCore::appendMailtoPostFormDataToURL):
        (WebCore::encodingFromAcceptCharset):
        (WebCore::FormSubmission::create):
        * loader/TextResourceDecoder.cpp:
        (WebCore::findTextEncoding):
        (WebCore::TextResourceDecoder::defaultEncoding):
        (WebCore::TextResourceDecoder::TextResourceDecoder):
        (WebCore::TextResourceDecoder::create):
        (WebCore::TextResourceDecoder::setEncoding):
        (WebCore::TextResourceDecoder::checkForBOM):
        (WebCore::TextResourceDecoder::checkForHeadCharset):
        (WebCore::TextResourceDecoder::decode):
        (WebCore::TextResourceDecoder::flush):
        (WebCore::TextResourceDecoder::encodingForURLParsing):
        * loader/TextResourceDecoder.h:
        (WebCore::TextResourceDecoder::create):
        (WebCore::TextResourceDecoder::encoding const):
        * loader/cache/CachedApplicationManifest.cpp:
        (WebCore::CachedApplicationManifest::CachedApplicationManifest):
        * loader/cache/CachedScript.cpp:
        (WebCore::CachedScript::script):
        * page/FrameView.cpp:
        (WebCore::FrameView::scrollToFragment):
        * page/Page.cpp:
        (WebCore::Page::userStyleSheetLocationChanged):
        * page/PageSerializer.cpp:
        (WebCore::PageSerializer::serializeFrame):
        (WebCore::PageSerializer::serializeCSSStyleSheet):
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::extractInnerURL):
        (WebCore::SecurityOrigin::create):
        * page/csp/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::findHashOfContentInPolicies const):
        * page/csp/ContentSecurityPolicy.h:
        * page/csp/ContentSecurityPolicySource.cpp:
        (WebCore::ContentSecurityPolicySource::pathMatches const):
        * page/csp/ContentSecurityPolicySourceList.cpp:
        (WebCore::ContentSecurityPolicySourceList::parsePath):
        * platform/ThreadGlobalData.cpp:
        (WebCore::ThreadGlobalData::ThreadGlobalData):
        (WebCore::ThreadGlobalData::destroy):
        (PAL::threadGlobalData):
        * platform/ThreadGlobalData.h:
        (WebCore::ThreadGlobalData::threadTimers):
        (WebCore::ThreadGlobalData::ThreadGlobalData::cachedResourceRequestInitiators): Deleted.
        (WebCore::ThreadGlobalData::ThreadGlobalData::eventNames): Deleted.
        (WebCore::ThreadGlobalData::ThreadGlobalData::qualifiedNameCache): Deleted.
        (WebCore::ThreadGlobalData::ThreadGlobalData::mimeTypeRegistryThreadGlobalData): Deleted.
        (WebCore::ThreadGlobalData::ThreadGlobalData::threadTimers): Deleted.
        (WebCore::ThreadGlobalData::ThreadGlobalData::cachedConverterICU): Deleted.
        (WebCore::ThreadGlobalData::ThreadGlobalData::currentState const): Deleted.
        (WebCore::ThreadGlobalData::ThreadGlobalData::setCurrentState): Deleted.
        (WebCore::ThreadGlobalData::ThreadGlobalData::isInRemoveAllEventListeners const): Deleted.
        (WebCore::ThreadGlobalData::ThreadGlobalData::setIsInRemoveAllEventListeners): Deleted.
        (WebCore::ThreadGlobalData::ThreadGlobalData::fontCache): Deleted.
        (WebCore::ThreadGlobalData::ThreadGlobalData::fontCacheIfNotDestroyed): Deleted.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::shouldWaitForLoadingOfResource):
        * platform/gtk/PlatformKeyboardEventGtk.cpp:
        * platform/network/DataURLDecoder.cpp:
        (WebCore::DataURLDecoder::decodeBase64):
        (WebCore::DataURLDecoder::decodeEscaped):
        * platform/network/FormData.cpp:
        (WebCore::normalizeStringData):
        (WebCore::FormData::appendMultiPartFileValue):
        (WebCore::FormData::appendMultiPartStringValue):
        (WebCore::FormData::flattenToString const):
        * platform/network/FormData.h:
        * platform/network/FormDataBuilder.cpp:
        (WebCore::FormDataBuilder::addFilenameToMultiPartHeader):
        * platform/network/FormDataBuilder.h:
        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::handleDataURL):
        * platform/network/soup/ResourceHandleSoup.cpp:
        * platform/win/ClipboardUtilitiesWin.cpp:
        (WebCore::getFullCFHTML):
        (WebCore::getUtf8Data):
        * platform/win/DragDataWin.cpp:
        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::documentFragment):
        (WebCore::createGlobalHDropContent):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::computeUseBackslashAsYenSymbol const):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::send):
        (WebCore::XMLHttpRequest::finalResponseCharset const):
        (WebCore::XMLHttpRequest::createDecoder const):
        * xml/XMLHttpRequest.h:
        * xml/XSLTProcessor.cpp:
        (WebCore::XSLTProcessor::createDocumentFromSource):

2021-12-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][a11y] Ensure atspi wrappers have root set at construction time
        https://bugs.webkit.org/show_bug.cgi?id=233804

        Reviewed by Joanmarie Diggs.

        Pass the AccessibilityRootAtspi as a parameter to AccessibilityObjectAtspi constructor and store it as a
        reference. A pointer to the AccessibilityRootAtspi object is now set in Page so that it can be accessed from the
        AXObjectCache. Also remove setRoot() and use m_root directly instead of root() accessor.

        * accessibility/atspi/AXObjectCacheAtspi.cpp:
        (WebCore::AXObjectCache::attachWrapper): Get the AccessibilityRootAtspi from the page and pass it to the wrapper
        constructor. Also set the parent of the dom root element wrapper to the atspi root element.
        * accessibility/atspi/AccessibilityAtspi.cpp:
        (WebCore::AccessibilityAtspi::childrenChanged):
        * accessibility/atspi/AccessibilityObjectAtspi.cpp:
        (WebCore::AccessibilityObjectAtspi::create):
        (WebCore::AccessibilityObjectAtspi::AccessibilityObjectAtspi):
        (WebCore::AccessibilityObjectAtspi::cacheDestroyed):
        (WebCore::AccessibilityObjectAtspi::elementDestroyed):
        (WebCore::AccessibilityObjectAtspi::path):
        (WebCore::AccessibilityObjectAtspi::reference):
        (WebCore::AccessibilityObjectAtspi::hyperlinkReference):
        (WebCore::AccessibilityObjectAtspi::parentReference const):
        (WebCore::AccessibilityObjectAtspi::childAt const):
        (WebCore::AccessibilityObjectAtspi::wrapperVector const):
        (WebCore::AccessibilityObjectAtspi::buildRelationSet const):
        (WebCore::AccessibilityObjectAtspi::serialize const):
        (WebCore::AccessibilityObjectAtspi::childAdded):
        (WebCore::AccessibilityObjectAtspi::childRemoved):
        (WebCore::AccessibilityObjectAtspi::stateChanged):
        (WebCore::AccessibilityObjectAtspi::setRoot): Deleted.
        (WebCore::AccessibilityObjectAtspi::root const): Deleted.
        * accessibility/atspi/AccessibilityObjectAtspi.h:
        * accessibility/atspi/AccessibilityObjectComponentAtspi.cpp:
        * accessibility/atspi/AccessibilityObjectHyperlinkAtspi.cpp:
        * accessibility/atspi/AccessibilityObjectHypertextAtspi.cpp:
        (WebCore::AccessibilityObjectAtspi::hyperlink const):
        * accessibility/atspi/AccessibilityObjectSelectionAtspi.cpp:
        (WebCore::AccessibilityObjectAtspi::selectedChild const):
        (WebCore::AccessibilityObjectAtspi::selectionChanged):
        * accessibility/atspi/AccessibilityObjectTableAtspi.cpp:
        (WebCore::AccessibilityObjectAtspi::cell const):
        (WebCore::AccessibilityObjectAtspi::tableCaption const):
        (WebCore::AccessibilityObjectAtspi::rowHeader const):
        (WebCore::AccessibilityObjectAtspi::columnHeader const):
        * accessibility/atspi/AccessibilityObjectTableCellAtspi.cpp:
        (WebCore::AccessibilityObjectAtspi::cellRowHeaders const):
        (WebCore::AccessibilityObjectAtspi::cellColumnHeaders const):
        * accessibility/atspi/AccessibilityObjectTextAtspi.cpp:
        (WebCore::AccessibilityObjectAtspi::textInserted):
        (WebCore::AccessibilityObjectAtspi::textDeleted):
        (WebCore::AccessibilityObjectAtspi::selectionChanged):
        (WebCore::AccessibilityObjectAtspi::textAttributesChanged):
        * accessibility/atspi/AccessibilityObjectValueAtspi.cpp:
        (WebCore::AccessibilityObjectAtspi::valueChanged):
        * accessibility/atspi/AccessibilityRootAtspi.cpp:
        (WebCore::AccessibilityRootAtspi::registerObject):
        (WebCore::AccessibilityRootAtspi::unregisterObject):
        (WebCore::AccessibilityRootAtspi::child const):
        (WebCore::AccessibilityRootAtspi::focusedObject const): Deleted.
        * accessibility/atspi/AccessibilityRootAtspi.h:
        * page/Page.h:
        (WebCore::Page::accessibilityRootObject const):
        (WebCore::Page::setAccessibilityRootObject):

2021-12-08  Myles C. Maxfield  <mmaxfield@apple.com>

        Fix build after r286759
        https://bugs.webkit.org/show_bug.cgi?id=234067

        Unreviewed.

        No new tests because there is no behavior change.

        * platform/audio/ios/AudioSessionIOS.mm:
        (WebCore::AudioSessionIOS::setPresentingProcesses):

2021-12-08  Said Abou-Hallawa  <said@apple.com>

        [GPU Process] [Filters] Make Filter::apply() and FilterEffect:apply() take FilterImageVector for the inputs
        https://bugs.webkit.org/show_bug.cgi?id=233973
        rdar://86248999

        Reviewed by Cameron McCormack.

        This is a step towards removing the dependency on the input effects. This 
        step is required to make encoding/decoding the FilterEffect just be
        sending or receiving its primitive data.

        In this patch:

        -- The sourceImage and sourceImageRect arguments to Filter::apply() are
           used to create a FilterImage. This will be the input to the SourceGraphic.

        -- The members m_sourceImage and m_sourceImageRect of Filter are removed.

        -- CSSFilter::apply() loops through its functions and uses the result
           of every function as the input to the next one. The initial input is
           the sourceImage. And the result of the last function is the returned
           FilterImage.

        -- SVGFilter::apply() loops through its expression. It uses a stack of
           FilterImageVector to keep track of the inputs while applying each
           FilterEffect. Every FilterEffect is asked to takeInputs() from this 
           stack. The result of applying the FilterEffect is pushed on this stack.
           The stack should have a single FilterImage when finishing the loop.
           This item is the result of applying the Filter.

        -- FilterEffect::transformInputsColorSpace() was added to transform the
           input FilterImageVector to the operating color space of FilterEffect.
           It is overridden by FEDisplacementMap which does not transform the
           color space of the first input FilterImage.

        -- FilterEffect::correctPremultipliedInputs() was added to correct the
           premultiplied pixels of the inputs FilterImageVector. We do not need
           to do this correction if the FilterEffect we apply is arithmetic
           composite filter. Otherwise we need to correct the FilterImage of any
           arithmetic composite filter in the FilterImageVector.

        -- No need for totalNumberFilterEffects(). This count is the size of the
           SVGFilter expression.

        * platform/graphics/coreimage/SourceGraphicCoreImageApplier.mm:
        (WebCore::SourceGraphicCoreImageApplier::apply const):
        * platform/graphics/filters/FEBlend.h:
        * platform/graphics/filters/FEComposite.h:
        * platform/graphics/filters/FEDisplacementMap.cpp:
        (WebCore::FEDisplacementMap::calculateImageRect const):
        (WebCore::FEDisplacementMap::transformInputsColorSpace const):
        (WebCore::FEDisplacementMap::transformResultColorSpace): Deleted.
        * platform/graphics/filters/FEDisplacementMap.h:
        * platform/graphics/filters/FEFlood.h:
        * platform/graphics/filters/FEMerge.h:
        * platform/graphics/filters/FETurbulence.h:
        * platform/graphics/filters/Filter.cpp:
        (WebCore::Filter::apply):
        * platform/graphics/filters/Filter.h:
        (WebCore::Filter::sourceImageRect const): Deleted.
        (WebCore::Filter::setSourceImageRect): Deleted.
        (WebCore::Filter::sourceImage const): Deleted.
        (WebCore::Filter::setSourceImage): Deleted.
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::takeImageInputs const):
        (WebCore::FilterEffect::calculateImageRect const):
        (WebCore::FilterEffect::transformInputsColorSpace const):
        (WebCore::FilterEffect::correctPremultipliedInputs const):
        (WebCore::FilterEffect::apply):
        (WebCore::FilterEffect::inputEffect const):
        (WebCore::FilterEffect::inputFilterImages const): Deleted.
        (WebCore::FilterEffect::correctPremultipliedResultIfNeeded): Deleted.
        (WebCore::FilterEffect::transformResultColorSpace): Deleted.
        * platform/graphics/filters/FilterEffect.h:
        (WebCore::FilterEffect::filterImage const):
        (WebCore::FilterEffect::numberOfEffectInputs const):
        (WebCore::FilterEffect::numberOfImageInputs const):
        (WebCore::FilterEffect::resultIsValidPremultiplied const):
        (WebCore::FilterEffect::mayProduceInvalidPremultipliedPixels const): Deleted.
        (WebCore::FilterEffect::correctFilterResultIfNeeded): Deleted.
        (WebCore::FilterEffect::transformResultColorSpace): Deleted.
        * platform/graphics/filters/FilterFunction.h:
        (WebCore::FilterFunction::apply):
        * platform/graphics/filters/FilterImage.cpp:
        (WebCore::FilterImage::create):
        (WebCore::FilterImage::FilterImage):
        (WebCore::FilterImage::correctPremultipliedPixelBuffer):
        * platform/graphics/filters/FilterImage.h:
        * platform/graphics/filters/SourceAlpha.cpp:
        (WebCore::SourceAlpha::calculateImageRect const): Deleted.
        * platform/graphics/filters/SourceAlpha.h:
        * platform/graphics/filters/SourceGraphic.cpp:
        (WebCore::SourceGraphic::calculateImageRect const): Deleted.
        * platform/graphics/filters/SourceGraphic.h:
        * platform/graphics/filters/software/SourceGraphicSoftwareApplier.cpp:
        (WebCore::SourceGraphicSoftwareApplier::apply const):
        * rendering/CSSFilter.cpp:
        (WebCore::CSSFilter::apply):
        * rendering/CSSFilter.h:
        * svg/graphics/filters/SVGFEImage.h:
        * svg/graphics/filters/SVGFilter.cpp:
        (WebCore::SVGFilter::apply):
        * svg/graphics/filters/SVGFilter.h:
        * svg/graphics/filters/SVGFilterBuilder.cpp:
        (WebCore::SVGFilterBuilder::buildFilterEffects):
        (WebCore::SVGFilterBuilder::buildExpression const):
        (WebCore::collectEffects): Deleted.
        (WebCore::totalNumberFilterEffects): Deleted.

2021-12-08  Patrick Griffis  <pgriffis@igalia.com>

        CSP: Skip whitespace at beginning of policy header
        https://bugs.webkit.org/show_bug.cgi?id=233951

        Reviewed by Kate Cheney.

        This should have no practical effect but it fixes matching
        the originalPolicy property in WPT results.

        * page/csp/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::didReceiveHeader):

2021-12-08  Megan Gardner  <megan_gardner@apple.com>

        Show correct content menu for images services chevron.
        https://bugs.webkit.org/show_bug.cgi?id=233970

        Reviewed by Tim Horton.

        Add support for showing the correct context menu for image services.
        Since this is internal only and can never be affected by web content, we bypass
        the web content round trip and directly message the UIProcess about showing 
        a context menu for images. And because it would be bizarre if the web content 
        could prevent a menu from popping up on a button they have no control over.

        * dom/mac/ImageControlsMac.cpp:
        (WebCore::ImageControlsMac::isImageControlsButtonElement):
        (WebCore::ImageControlsMac::imageFromImageElementNode):
        (WebCore::ImageControlsMac::handleEvent):
        (WebCore::ImageControlsMac::imageControlHost): Deleted.
        * dom/mac/ImageControlsMac.h:
        * html/HTMLButtonElement.cpp:
        (WebCore::HTMLButtonElement::defaultEventHandler):
        * page/ChromeClient.h:
        (WebCore::ChromeClient::handleImageServiceClick):
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::maybeCreateContextMenu):
        (WebCore::imageFromImageElementNode): Deleted.

2021-12-08  Myles C. Maxfield  <mmaxfield@apple.com>

        [MacCatalyst] Fix Mac Catalyst build
        https://bugs.webkit.org/show_bug.cgi?id=234067

        Unreviewed.

        There's a compile error:

        Source/WebCore/platform/audio/ios/AudioSessionIOS.mm:247:5: error: 'auto' deduced as 'id' in declaration of 'session' [-Werror,-Wauto-var-id]
        auto *session = [PAL::getAVAudioSessionClass() sharedInstance];
        ^~~~~~~~~~~~~

        No new tests because there is no behavior change.

        * platform/audio/ios/AudioSessionIOS.mm:
        (WebCore::setEligibleForSmartRouting):
        (WebCore::AudioSessionIOS::setPresentingProcesses):
        (WebCore::AudioSessionIOS::setCategory):

2021-12-08  Jer Noble  <jer.noble@apple.com>

        Add an experimental trackConfiguration accessor on AudioTrack & VideoTrack.
        https://bugs.webkit.org/show_bug.cgi?id=230841

        Reviewed by Eric Carlson.

        Add an experimental property on AudioTrack VideoTrack which contains information about the
        underlying media track's configuration. The AudioTrackConfiguration is based on
        AudioConfiguration from MediaCapabilities. The VideoTrackConfiguration is based on a
        combination of the VideoConfiguration from MediaCapabilities and the VideoColorSpace from
        WebCodecs. 

        The AVFoundation implementation of AVTrackPrivateAVFObjCImpl will extract a NAL unit for the
        video codec from the CMFormatDescription containing information about the underlying media,
        and pass that NAL unit to utility methods in HEVCUtilities (which should probably be
        renamed to CodecUntilities) to extract and create codec configuration strings. It will
        extract colorspace information from CMFormatDescriptionExtensions found in the format
        description. It will extract framerate, bitrate, width and height, sample rate and channel
        count information from the underlying AVAssetTrack. There are shortcomings here, as HLS
        streams and MSE streams do not generate framerate or bitrate information in the
        AVAssetTrack.

        Tests: media/track/audio-track-configuration.html
               media/track/video-track-configuration.html

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/webcodecs/VideoColorPrimaries.h:
        * Modules/webcodecs/VideoColorPrimaries.idl:
        * Modules/webcodecs/VideoColorSpace.h:
        (WebCore::VideoColorSpace::create):
        (WebCore::VideoColorSpace::primaries const):
        (WebCore::VideoColorSpace::setPrimaries):
        (WebCore::VideoColorSpace::transfer const):
        (WebCore::VideoColorSpace::setTransfer):
        (WebCore::VideoColorSpace::matrix const):
        (WebCore::VideoColorSpace::setMatrix):
        (WebCore::VideoColorSpace::fullRange const):
        (WebCore::VideoColorSpace::setfFullRange):
        (WebCore::VideoColorSpace::VideoColorSpace):
        * Modules/webcodecs/VideoColorSpace.idl:
        * Modules/webcodecs/VideoColorSpaceInit.h:
        * Modules/webcodecs/VideoColorSpaceInit.idl:
        * Modules/webcodecs/VideoMatrixCoefficients.h:
        * Modules/webcodecs/VideoMatrixCoefficients.idl:
        * Modules/webcodecs/VideoTransferCharacteristics.h:
        * Modules/webcodecs/VideoTransferCharacteristics.idl:
        * Sources.txt:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * html/track/AudioTrack.cpp:
        (WebCore::AudioTrack::AudioTrack):
        (WebCore::AudioTrack::setPrivate):
        (WebCore::AudioTrack::updateConfigurationFromPrivate):
        * html/track/AudioTrack.h:
        * html/track/AudioTrack.idl:
        * html/track/AudioTrackConfiguration.h:
        (WebCore::AudioTrackConfiguration::create):
        (WebCore::AudioTrackConfiguration::codec const):
        (WebCore::AudioTrackConfiguration::setCodec):
        (WebCore::AudioTrackConfiguration::sampleRate const):
        (WebCore::AudioTrackConfiguration::setSampleRate):
        (WebCore::AudioTrackConfiguration::numberOfChannels const):
        (WebCore::AudioTrackConfiguration::setNumberOfChannels):
        (WebCore::AudioTrackConfiguration::bitrate const):
        (WebCore::AudioTrackConfiguration::setBitrate):
        (WebCore::AudioTrackConfiguration::AudioTrackConfiguration):
        * html/track/AudioTrackConfiguration.idl:
        * html/track/VideoTrack.cpp:
        (WebCore::VideoTrack::VideoTrack):
        (WebCore::VideoTrack::setPrivate):
        (WebCore::VideoTrack::updateConfigurationFromPrivate):
        * html/track/VideoTrack.h:
        * html/track/VideoTrack.idl:
        * html/track/VideoTrackConfiguration.h: Added.
        (WebCore::VideoTrackConfiguration::create):
        (WebCore::VideoTrackConfiguration::codec const):
        (WebCore::VideoTrackConfiguration::setCodec):
        (WebCore::VideoTrackConfiguration::width const):
        (WebCore::VideoTrackConfiguration::setWidth):
        (WebCore::VideoTrackConfiguration::height const):
        (WebCore::VideoTrackConfiguration::setHeight):
        (WebCore::VideoTrackConfiguration::colorSpace const):
        (WebCore::VideoTrackConfiguration::setColorSpace):
        (WebCore::VideoTrackConfiguration::framerate const):
        (WebCore::VideoTrackConfiguration::setFramerate):
        (WebCore::VideoTrackConfiguration::bitrate const):
        (WebCore::VideoTrackConfiguration::setBitrate):
        (WebCore::VideoTrackConfiguration::VideoTrackConfiguration):
        * html/track/VideoTrackConfiguration.idl:
        * platform/graphics/AudioTrackPrivate.h:
        (WebCore::AudioTrackPrivate::codec const):
        (WebCore::AudioTrackPrivate::setCodec):
        (WebCore::AudioTrackPrivate::sampleRate const):
        (WebCore::AudioTrackPrivate::setSampleRate):
        (WebCore::AudioTrackPrivate::numberOfChannels const):
        (WebCore::AudioTrackPrivate::setNumberOfChannels):
        (WebCore::AudioTrackPrivate::bitrate const):
        (WebCore::AudioTrackPrivate::setBitrate):
        * platform/graphics/HEVCUtilities.cpp:
        (WebCore::parseAVCCodecParameters):
        (WebCore::createAVCCodecParametersString):
        (WebCore::parseAVCDecoderConfigurationRecord):
        (WebCore::parseHEVCCodecParameters):
        (WebCore::createHEVCCodecParametersString):
        (WebCore::parseHEVCDecoderConfigurationRecord):
        (WebCore::parseDoViDecoderConfigurationRecord):
        (WebCore::createDoViCodecParametersString):
        * platform/graphics/HEVCUtilities.h:
        * platform/graphics/PlatformVideoColorPrimaries.h:
        * platform/graphics/PlatformVideoColorSpace.h:
        (WebCore::PlatformVideoColorSpace::encode const):
        (WebCore::PlatformVideoColorSpace::decode):
        * platform/graphics/PlatformVideoMatrixCoefficients.h:
        * platform/graphics/PlatformVideoTransferCharacteristics.h:
        * platform/graphics/VideoTrackPrivate.h:
        (WebCore::VideoTrackPrivate::codec const):
        (WebCore::VideoTrackPrivate::setCodec):
        (WebCore::VideoTrackPrivate::width const):
        (WebCore::VideoTrackPrivate::setWidth):
        (WebCore::VideoTrackPrivate::height const):
        (WebCore::VideoTrackPrivate::setHeight):
        (WebCore::VideoTrackPrivate::colorSpace const):
        (WebCore::VideoTrackPrivate::setColorSpace):
        (WebCore::VideoTrackPrivate::framerate const):
        (WebCore::VideoTrackPrivate::setFramerate):
        (WebCore::VideoTrackPrivate::bitrate const):
        (WebCore::VideoTrackPrivate::setBitrate):
        * platform/graphics/VideoTrackPrivateClient.h:
        * platform/graphics/avfoundation/AVTrackPrivateAVFObjCImpl.h:
        * platform/graphics/avfoundation/AVTrackPrivateAVFObjCImpl.mm:
        (WebCore::assetTrackFor):
        (WebCore::formatDescriptionFor):
        (WebCore::AVTrackPrivateAVFObjCImpl::codec const):
        (WebCore::AVTrackPrivateAVFObjCImpl::width const):
        (WebCore::AVTrackPrivateAVFObjCImpl::height const):
        (WebCore::AVTrackPrivateAVFObjCImpl::colorSpace const):
        (WebCore::AVTrackPrivateAVFObjCImpl::framerate const):
        (WebCore::AVTrackPrivateAVFObjCImpl::sampleRate const):
        (WebCore::AVTrackPrivateAVFObjCImpl::numberOfChannels const):
        (WebCore::AVTrackPrivateAVFObjCImpl::bitrate const):
        * platform/graphics/avfoundation/AudioTrackPrivateAVF.h:
        (WebCore::AudioTrackPrivateAVF::kind const): Deleted.
        (WebCore::AudioTrackPrivateAVF::id const): Deleted.
        (WebCore::AudioTrackPrivateAVF::label const): Deleted.
        (WebCore::AudioTrackPrivateAVF::language const): Deleted.
        (WebCore::AudioTrackPrivateAVF::trackIndex const): Deleted.
        * platform/graphics/avfoundation/FormatDescriptionUtilities.cpp: Added.
        (WebCore::presentationSizeFromFormatDescription):
        (WebCore::colorSpaceFromFormatDescription):
        (WebCore::codecFromFormatDescription):
        * platform/graphics/avfoundation/FormatDescriptionUtilities.h:
        * platform/graphics/avfoundation/MediaSelectionGroupAVFObjC.h:
        * platform/graphics/avfoundation/MediaSelectionGroupAVFObjC.mm:
        (WebCore::MediaSelectionOptionAVFObjC::assetTrack const):
        * platform/graphics/avfoundation/VideoTrackPrivateAVF.h:
        * platform/graphics/avfoundation/objc/AudioTrackPrivateAVFObjC.mm:
        (WebCore::AudioTrackPrivateAVFObjC::resetPropertiesFromTrack):
        * platform/graphics/avfoundation/objc/VideoTrackPrivateAVFObjC.cpp:
        (WebCore::VideoTrackPrivateAVFObjC::resetPropertiesFromTrack):
        * platform/graphics/avfoundation/objc/VideoTrackPrivateMediaSourceAVFObjC.mm:
        (WebCore::VideoTrackPrivateMediaSourceAVFObjC::resetPropertiesFromTrack):
        * platform/graphics/cocoa/VideoTrackPrivateWebM.cpp:
        (WebCore::VideoTrackPrivateWebM::codec const):
        (WebCore::VideoTrackPrivateWebM::width const):
        (WebCore::VideoTrackPrivateWebM::height const):
        (WebCore::VideoTrackPrivateWebM::framerate const):
        * platform/graphics/cocoa/VideoTrackPrivateWebM.h:

2021-12-08  Said Abou-Hallawa  <said@apple.com>

        [GPU Process] [Filters] Add the encoding and decoding for SVGFilter
        https://bugs.webkit.org/show_bug.cgi?id=234024

        Reviewed by Wenson Hsieh.

        Add new methods to help encoding and decoding SVGFilter members. Also
        add a new constructor for SVGFilter which is going to be called from
        FilterReference.

        * Headers.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/filters/FilterEffectGeometry.h:
        (WebCore::FilterEffectGeometry::encode const):
        (WebCore::FilterEffectGeometry::decode):

        * platform/graphics/filters/SourceAlpha.cpp:
        (WebCore::SourceAlpha::create):
        (WebCore::SourceAlpha::SourceAlpha):
        * platform/graphics/filters/SourceAlpha.h:
        The plan is to remove the input effects from FilterEffect. Currently it
        is still used but not through FilterEffect::apply(). So it is okay for 
        now for GPUProcess to create SourceAlpha without input since the input
        will not used inside GPUProcess.

        * svg/SVGUnitTypes.h:
        * svg/graphics/filters/SVGFilter.cpp:
        (WebCore::SVGFilter::create):
        (WebCore::SVGFilter::SVGFilter):
        * svg/graphics/filters/SVGFilter.h:

2021-12-08  Don Olmstead  <don.olmstead@sony.com>

        [Win] Remove CF when using Windows clipboard
        https://bugs.webkit.org/show_bug.cgi?id=194876

        Reviewed by Brent Fulgham.

        Remove any CF code from ClipboardUtilitiesWin and replace it with WTF code. The
        urlFromPath function is deleted since it is no longer relevant.

        * platform/win/ClipboardUtilitiesWin.cpp:
        (WebCore::getURL):
        (WebCore::urlFromPath): Deleted.

2021-12-08  Jer Noble  <jer.noble@apple.com>

        [VTT] Fix various issues with complicated rendering of VTT cues
        https://bugs.webkit.org/show_bug.cgi?id=233901

        Reviewed by Eric Carlson.

        Tests: media/track/track-webvtt-no-snap-to-lines-overlap.html
               media/track/track-webvtt-snap-to-lines-inline-style.html
               media/track/track-webvtt-snap-to-lines-left-right.html

        When positioning VTT cues, the spec requires UAs to avoid collisions between cues
        by detecting that two cues overlap each other. However, WebKit's implementation
        looks for collisions between non-displaying portions of the cues; namely the 
        ::-webkit-media-text-track-display element, which is used to position the displaying
        portion of the cue. Instead, the UA should look for collisions between the 
        ::-webkit-media-text-track-display-backdrop element, which holds the background
        of the cue, if present.

        Add a convenience function to retrieve the backdrop element, and another to retrieve
        the cue itself.

        Add cast macros for RenderVTTCue to allow downcast<>ing. Use this macro to retrieve
        other cues's backdrop elements for collision avoidance.

        VTTCueBox::applyCSSProperties() had a section for moving cues into place that is entirely
        unneeded if VTTCue::getCSSPosition() returns the pre-calculated m_displayPosition.

        RenderVTTCue::initializeLayoutParameters() is a careful implementation of the specification,
        accurately layout out cues' initial position so that the text run is exactly at the
        bottom of the content box. However, if the cue has a border, padding, or extra height,
        this will result in the cue being pushed outside the content box. To account for this,
        adjust the inital layout parameter by the difference between the cue text size and the
        backdrop element size.

        RenderVTTCue::layout() will create a LayoutStateMaintainer, which modifies the behavior of
        layout machinery during the layout itself. However, certain child renderers get dramatically
        incorrect results for absoluteBoundingRect() unless the maintainer explicitly sets disableState.

        * html/track/VTTCue.cpp:
        (WebCore::VTTCueBox::applyCSSProperties):
        (WebCore::VTTCue::getCSSPosition const):
        * html/track/VTTCue.h:
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isRenderVTTCue const):
        * rendering/RenderVTTCue.cpp:
        (WebCore::RenderVTTCue::layout):
        (WebCore::RenderVTTCue::initializeLayoutParameters):
        (WebCore::RenderVTTCue::isOutside const):
        (WebCore::RenderVTTCue::overlappingObject const):
        (WebCore::RenderVTTCue::overlappingObjectForRect const):
        (WebCore::RenderVTTCue::moveIfNecessaryToKeepWithinContainer):
        (WebCore::RenderVTTCue::findNonOverlappingPosition const):
        (WebCore::RenderVTTCue::repositionGenericCue):
        (WebCore::RenderVTTCue::backdropBox const):
        (WebCore::RenderVTTCue::cueBox const):

2021-12-08  Jer Noble  <jer.noble@apple.com>

        [MSE] Add a Modules/mediasource/README.md file
        https://bugs.webkit.org/show_bug.cgi?id=234026
        <rdar://problem/86227732>

        Reviewed by Eric Carlson.

        Follow-up to address review comments.

        * Modules/mediasource/README.md:

2021-12-08  Jer Noble  <jer.noble@apple.com>

        [MSE] Add a Modules/mediasource/README.md file
        https://bugs.webkit.org/show_bug.cgi?id=234026

        Reviewed by Eric Carlson.

        * Modules/mediasource/README.md: Added.

2021-12-08  Truitt Savell  <tsavell@apple.com>

        Unreviewed, reverting r286596.

        broke 2 tests on iOS

        Reverted changeset:

        "Cocoa WebGL should support UI side compositing"
        https://bugs.webkit.org/show_bug.cgi?id=231009
        https://commits.webkit.org/r286596

2021-12-08  Don Olmstead  <don.olmstead@sony.com>

        [Win] WebCore::cfHDropFormat implementation is not CF specific
        https://bugs.webkit.org/show_bug.cgi?id=234021

        Reviewed by Alex Christensen.

        The implementation of cfHDropFormat was guarded by USE(CF) but there is nothing CF specific
        about the implementation. Drop the guards around it and any of its callers.

        Renaming CFData functions to HDropData to better represent the underlying Windows type for
        the clipboard and make sure its not mistaken for CoreFoundation functionality.

        * platform/win/ClipboardUtilitiesWin.cpp:
        (WebCore::getWebLocData):
        (WebCore::getHDropData):
        (WebCore::setHDropData):
        (WebCore::getClipboardMap):
        (WebCore::getCFData): Deleted.
        (WebCore::setCFData): Deleted.
        * platform/win/DragDataWin.cpp:
        (WebCore::DragData::containsFiles const):
        (WebCore::DragData::numberOfFiles const):
        (WebCore::DragData::asFilenames const):
        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::read):
        (WebCore::writeFileToDataObject):

2021-12-08  Truitt Savell  <tsavell@apple.com>

        Unreviewed, reverting r286632.

        Broke 3 tests on iOS

        Reverted changeset:

        "Add a `DOMPasteAccessCategory` to control which pasteboard
        the WebProcess is granted access to when pasting"
        https://bugs.webkit.org/show_bug.cgi?id=233939
        https://commits.webkit.org/r286632

2021-12-08  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Fill in client-name property on audio sinks
        https://bugs.webkit.org/show_bug.cgi?id=233826

        Reviewed by Xabier Rodriguez-Calvar.

        The audio sink client-name property is now set on sinks that support this property, such as
        pulsesink and pipewiresink. This is picked-up by GNOME settings and the corresponding audio
        streams now appear as owned by the WebKit application (MiniBrowser, ephy, etc) instead of
        "WebKitWebProcess".

        When the audio mixer is enabled, no media.role property is set, because the mixer can accept
        music and/or video roles simultaneously, so it doesn't make sense in this context.

        * platform/audio/gstreamer/AudioDestinationGStreamer.cpp:
        (WebCore::AudioDestinationGStreamer::AudioDestinationGStreamer): Drive-by refactoring, using
        a lambda instead of a static callback function.
        (WebCore::autoAudioSinkChildAddedCallback): Deleted.
        * platform/graphics/gstreamer/GStreamerAudioMixer.cpp:
        (WebCore::GStreamerAudioMixer::GStreamerAudioMixer):
        * platform/graphics/gstreamer/GStreamerCommon.cpp:
        (WebCore::createAutoAudioSink):
        (WebCore::createPlatformAudioSink):
        * platform/graphics/gstreamer/GStreamerCommon.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::~MediaPlayerPrivateGStreamer):
        (WebCore::MediaPlayerPrivateGStreamer::createAudioSink):
        (WebCore::MediaPlayerPrivateGStreamer::setAudioStreamPropertiesCallback): Deleted.
        (WebCore::MediaPlayerPrivateGStreamer::setAudioStreamProperties): Deleted.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:

2021-12-08  Rob Buis  <rbuis@igalia.com>

        [css-contain] Prevent various kinds of propagation to RenderView
        https://bugs.webkit.org/show_bug.cgi?id=233535

        Reviewed by Alan Bujtas.

        Prevent direction/background/writing-mode propagation to RenderView
        in cases where contain is used. The reason is in the github issue
        and latest draft specification has been updated [1, 2].

        [1] https://github.com/w3c/csswg-drafts/issues/5913
        [2] https://drafts.csswg.org/css-contain-2/

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::styleDidChange):
        (WebCore::RenderBox::updateFromStyle):
        * rendering/RenderObject.cpp:
        (WebCore::shouldApplyAnyContainment):
        * rendering/RenderObject.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::rendererForRootBackground const):

2021-12-08  Eric Carlson  <eric.carlson@apple.com>

        [iOS] Always set audio session preferred input after changing the category
        https://bugs.webkit.org/show_bug.cgi?id=232626
        rdar://81618758

        Reviewed by Youenn Fablet.

        * platform/audio/PlatformMediaSessionManager.cpp:
        (WebCore::PlatformMediaSessionManager::sessionCaptureConfigurationChanged): Schedule
        a session update so the category and/or preferred input is setup.
        * platform/audio/PlatformMediaSessionManager.h:

        * platform/audio/ios/AudioSessionIOS.h:
        * platform/audio/ios/AudioSessionIOS.mm:
        (WebCore::AudioSessionIOS::setCategory): Don't set the audio session category unless
        something has changed. Ask the AVAudioSessionCaptureDeviceManager to set the preferred
        capture device if that has changed.

        * platform/mediastream/ios/AVAudioSessionCaptureDeviceManager.h:
        * platform/mediastream/ios/AVAudioSessionCaptureDeviceManager.mm:
        (WebCore::AVAudioSessionCaptureDeviceManager::setPreferredAudioSessionDeviceUID):
        Remember the device UID if the configuration is successful.
        (WebCore::AVAudioSessionCaptureDeviceManager::configurePreferredAudioCaptureDevice):
        Reset the preferred device if necessary.
        (WebCore::AVAudioSessionCaptureDeviceManager::setPreferredAudioSessionDeviceUIDInternal):
        Refactored from setPreferredAudioSessionDeviceUID.

        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
        (WebCore::CoreAudioSharedUnit::captureDeviceChanged):

2021-12-08  Antti Koivisto  <antti@apple.com>

        [CSS Cascade Layers] CSSImportRule.cssText doesn't include layer parameter
        https://bugs.webkit.org/show_bug.cgi?id=234010

        Reviewed by Simon Fraser.

        Fix serialization of import rules than include layer, like

        @import url(foo.css) layer(A);

        Also make the parsing of the layer() argument stricter.

        * css/CSSImportRule.cpp:
        (WebCore::CSSImportRule::cssText const):

        Serialize the layer.

        * css/CSSLayerBlockRule.cpp:
        (WebCore::stringFromCascadeLayerName):

        Serialize layer name segments as identifiers.

        * css/parser/CSSParserImpl.cpp:
        (WebCore::CSSParserImpl::consumeImportRule):

        Fail parsing if there is anything left in the function argument after consuming the layer name.
        If the parsing fails, revert and try the full string as media query.

2021-12-08  Antti Koivisto  <antti@apple.com>

        [CSS Cascade Layers] Update CSSOM to the spec
        https://bugs.webkit.org/show_bug.cgi?id=231340
        <rdar://problem/83958697>

        Reviewed by Simon Fraser.

        Add CSSLayerBlockRule and CSSLayerStatementRule interfaces.
        Also add support for layerName property of CSSImportRule.

        https://www.w3.org/TR/css-cascade-5/#layer-apis

        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCSSRuleCustom.cpp:
        (WebCore::toJSNewlyCreated):
        * css/CSSImportRule+Layer.idl: Copied from Source/WebCore/css/CSSLayerRule.idl.
        * css/CSSImportRule.cpp:
        (WebCore::CSSImportRule::layerName const):
        (WebCore::CSSImportRule::cascadeLayerName const): Deleted.
        * css/CSSImportRule.h:
        * css/CSSLayerBlockRule.cpp: Renamed from Source/WebCore/css/CSSLayerRule.cpp.
        (WebCore::CSSLayerBlockRule::CSSLayerBlockRule):
        (WebCore::CSSLayerBlockRule::create):
        (WebCore::CSSLayerBlockRule::cssText const):
        (WebCore::CSSLayerBlockRule::name const):
        (WebCore::stringFromCascadeLayerName):
        * css/CSSLayerBlockRule.h: Copied from Source/WebCore/css/CSSLayerRule.h.
        * css/CSSLayerBlockRule.idl: Copied from Source/WebCore/css/CSSLayerRule.idl.
        * css/CSSLayerStatementRule.cpp: Copied from Source/WebCore/css/CSSLayerRule.h.
        (WebCore::CSSLayerStatementRule::CSSLayerStatementRule):
        (WebCore::CSSLayerStatementRule::create):
        (WebCore::CSSLayerStatementRule::cssText const):
        (WebCore::CSSLayerStatementRule::nameList const):
        (WebCore::CSSLayerStatementRule::reattach):
        * css/CSSLayerStatementRule.h: Renamed from Source/WebCore/css/CSSLayerRule.h.
        * css/CSSLayerStatementRule.idl: Renamed from Source/WebCore/css/CSSLayerRule.idl.
        * css/CSSRule.h:
        * css/StyleRule.cpp:
        (WebCore::StyleRuleBase::destroy):
        (WebCore::StyleRuleBase::copy const):
        (WebCore::StyleRuleBase::createCSSOMWrapper const):
        (WebCore::StyleRuleLayer::StyleRuleLayer):
        * css/StyleRule.h:
        (WebCore::StyleRuleBase::isGroupRule const):
        (WebCore::StyleRuleBase::isLayerRule const):
        * css/StyleRuleType.h:
        * css/StyleSheetContents.cpp:
        (WebCore::traverseRulesInVector):
        (WebCore::StyleSheetContents::traverseSubresources const):
        * css/parser/CSSParserImpl.cpp:
        (WebCore::CSSParserImpl::consumeLayerRule):
        * inspector/InspectorStyleSheet.cpp:
        (flattenSourceData):
        (WebCore::asCSSRuleList):
        (WebCore::buildArrayForGroupings):
        * style/InspectorCSSOMWrappers.cpp:
        (WebCore::Style::InspectorCSSOMWrappers::collect):

2021-12-08  Youenn Fablet  <youenn@apple.com>

        Same-site lax cookies not sent by fetch event handler after page reload
        https://bugs.webkit.org/show_bug.cgi?id=226386
        <rdar://problem/78878853>

        Reviewed by Chris Dumez.

        When a service worker fetches a navigation request exposed from the fetch event, we need to keep isTopSite intact as
        the service worker does not really have the information of which frame is actually loaded and whether it is a main frame or not.

        Tests: http/wpt/service-workers/cross-site-navigation-same-cookie-lax.https.html
               http/wpt/service-workers/same-cookie-lax.https.html

        * loader/cache/CachedResource.cpp:

2021-12-08  Youenn Fablet  <youenn@apple.com>

        Safari Bug "no-cache" network error
        https://bugs.webkit.org/show_bug.cgi?id=233916

        Reviewed by Chris Dumez.

        Test: http/wpt/service-workers/cache-control-request.html

        Remove Cache-Control header when going the service worker road if it is added by the network code path and not the application.

        * loader/CrossOriginAccessControl.cpp:
        (WebCore::httpHeadersToKeepFromCleaning):
        (WebCore::cleanHTTPRequestHeadersForAccessControl):
        * loader/CrossOriginAccessControl.h:
        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::removeHTTPHeaderField):
        * platform/network/ResourceRequestBase.h:

2021-12-08  Vitaly Dyachkov  <obyknovenius@me.com>

        [css-flexbox] `gap` does not work correctly when `flex-direction: column-reverse` is applied
        https://bugs.webkit.org/show_bug.cgi?id=225278
        rdar://problem/77708991

        Reviewed by Sergio Villar Senin.

        Whenever flex-direction: column-reverse is specified flexbox does always compute the flex item sizes and positions
        ignoring the -reverse direction until the very end. After completing the computations we just need to swap offsets
        to get the reversed positions. The code was properly considering space between items added by content justification
        but it was not adding gaps. Fixed it by adding the gap size to the flex items' offsets.

        Test: imported/w3c/web-platform-tests/css/css-flexbox/column-reverse-gap.html

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutAndPlaceChildren):
        (WebCore::RenderFlexibleBox::layoutColumnReverse):
        * rendering/RenderFlexibleBox.h:

2021-12-08  Lauro Moura  <lmoura@igalia.com>

        REGRESSION(r286603) [GTK][WPE] WebGL broken after the ANGLE update.
        https://bugs.webkit.org/show_bug.cgi?id=233965

        Reviewed by Adrian Perez de Castro.

        Covered by existing tests.

        * platform/graphics/opengl/ExtensionsGLOpenGLCommon.cpp:
        (WebCore::ExtensionsGLOpenGLCommon::getTranslatedShaderSourceANGLE):
        Remove usage of SH_UNFOLD_SHORT_CIRCUIT after last ANGLE update as
        suggested by Kimmo.

2021-12-08  Antoine Quint  <graouts@webkit.org>

        'border-radius shorthand is getting expanded in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=233960

        Reviewed by Antti Koivisto.

        Test: imported/w3c/web-platform-tests/css/css-backgrounds/border-radius-css-text.html

        Use the border-radius shorthand property instead of individual longhands when serializing.

        * css/StyleProperties.cpp:
        (WebCore::StyleProperties::asText const):

2021-12-08  Youenn Fablet  <youenn@apple.com>

        Let RemoteAudioMediaStreamTrackRendererInternalUnitManager::Unit switch to VPIO unit if VPIO is running
        https://bugs.webkit.org/show_bug.cgi?id=233316

        Reviewed by Eric Carlson.

        Add support for an external provider of speaker data to the audio capture unit.
        We use this in WebKit to render the MediaStreamTracks of the process doing capture through VPIO when running.
        In case the audio capture unit speaker format is not matching the producer format, we have to reconfigure and align with the producer format.
        In case, audio is being rendered by the audio capture unit but capture is stopped, we continue running the audio capture unit.
        This allows to mute/unmute microphone without any audio glitch.
        We make sure to stop the audio capture unit when it is no longer used for rendering or capture.

        In case the unit is suspended and we restart an audio source, we will unsuspend the unit, which will unmute sources.
        We do not want to start audio sources within the start of an audio source.
        For that reason, we unmute the sources asynchronously.

        Manually tested.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/mediastream/mac/BaseAudioSharedUnit.cpp:
        * platform/mediastream/mac/BaseAudioSharedUnit.h:
        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
        * platform/mediastream/mac/CoreAudioCaptureSource.h:

2021-12-08  Myles C. Maxfield  <mmaxfield@apple.com>

        [MacCatalyst] Various build fixes
        https://bugs.webkit.org/show_bug.cgi?id=233995

        Unreviewed.

        No new tests because there is no behavior change.

        * Modules/speech/cocoa/SpeechRecognizerCocoa.mm:
        (WebCore::SpeechRecognizer::dataCaptured):
        * platform/mediarecorder/cocoa/AudioSampleBufferCompressor.mm:
        (WebCore::AudioSampleBufferCompressor::processSampleBuffersUntilLowWaterTime):

2021-12-08  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Enable mediaSourceInlinePainting
        https://bugs.webkit.org/show_bug.cgi?id=233813

        Reviewed by Xabier Rodriguez-Calvar.

        Covered by http/tests/media/media-source/mediasource-rvfc.html

        * page/RuntimeEnabledFeatures.cpp:
        (WebCore::RuntimeEnabledFeatures::setMediaSourceInlinePaintingEnabled):
        * page/RuntimeEnabledFeatures.h:
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::mediaSourceInlinePaintingEnabled const):

2021-12-08  Diego Pino Garcia  <dpino@igalia.com>

        REGRESSION(r286556): DeviceOrientationUpdateProvider.h is only available in iOS
        https://bugs.webkit.org/show_bug.cgi?id=233991

        Unreviewed build fix.

        * page/PageConfiguration.h:

2021-12-07  Youenn Fablet  <youenn@apple.com>

        Add logging to RealtimeOutgoingVideoSource creation
        https://bugs.webkit.org/show_bug.cgi?id=233929

        Reviewed by Eric Carlson.

        This will allow to identify when trying to start sending video.
        No change of behavior.

        * platform/mediastream/RealtimeOutgoingVideoSource.cpp:
        (WebCore::RealtimeOutgoingVideoSource::RealtimeOutgoingVideoSource):
        (WebCore::RealtimeOutgoingVideoSource::setSource):

2021-12-07  Antoine Quint  <graouts@webkit.org>

        [Model] Only expose APIs on the IDL interface when the feature is enabled
        https://bugs.webkit.org/show_bug.cgi?id=233942

        Reviewed by Dean Jackson.

        * Modules/model-element/HTMLModelElement.idl:

2021-12-07  Antoine Quint  <graouts@webkit.org>

        ActiveDOMObject::suspendIfNeeded() should not be called in the WebAnimation constructor
        https://bugs.webkit.org/show_bug.cgi?id=233932

        Reviewed by Chris Dumez.

        It is not safe to call ActiveDOMObject::suspendIfNeeded() in a constructor. Since WebAnimation has several subclasses
        (DeclarativeAnimation, and then CSSTransition and CSSAnimation deriving from DeclarativeAnimation) each with their own
        create() methods, we add a new protected initialize() method which refactors code from the WebAnimation constructor
        and is called from the two WebAnimation::create() methods.

        DeclarativeAnimation already had an initialize method for common setup for the create() methods in CSSTransition and
        CSS Animation, so we can simply call WebAnimation::initialize() from DeclarativeAnimation::initialize() and this guarantees
        all create() methods for WebAnimation and all of its subclasses are correctly calling ActiveDOMObject::suspendIfNeeded().

        * animation/DeclarativeAnimation.cpp:
        (WebCore::DeclarativeAnimation::initialize):
        * animation/DeclarativeAnimation.h:
        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::create):
        (WebCore::WebAnimation::initialize):
        (WebCore::WebAnimation::WebAnimation):
        * animation/WebAnimation.h:

2021-12-07  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add support for `navigator.requestCookieConsent()` behind a disabled feature flag
        https://bugs.webkit.org/show_bug.cgi?id=233890
        rdar://86117718

        Reviewed by Darin Adler.

        Add plumbing to support a new (internal-for-the-time-being) navigator API, `requestCookieConsent()`. This
        returns a promise indicating whether or not the user (or the UA, on behalf of the user) consents to usage of
        cookies that are not strictly necessary for page performance.

        Paired with this web-facing API, we also introduce corresponding private WKUIDelegate methods that are invoked
        as a result of calling `navigator.requestCookieConsent();`, which a WebKit embedder may implement in order to
        present UI or otherwise respond appropriately to the request. See WebKit ChangeLog for more details.

        Tests:  CookieConsent.BasicDecisionHandler
                CookieConsent.NotEnabled
                CookieConsent.ThrowsExceptionWithoutDelegate

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Headers.cmake:
        * Modules/cookie-consent/CookieConsentDecisionResult.h: Added.
        * Modules/cookie-consent/Navigator+CookieConsent.idl: Added.
        * Modules/cookie-consent/NavigatorCookieConsent.cpp: Added.

        Add a new partial interface on Navigator that implements the new API by calling into the chrome client hook (see
        WebKit changes for more details). Note that in the case where the consent delegate method is not implemented by
        the client, we will reject the promise with a `NotSupportedError`.

        (WebCore::NavigatorCookieConsent::requestCookieConsent):
        (WebCore::NavigatorCookieConsent::from):
        * Modules/cookie-consent/NavigatorCookieConsent.h: Added.
        (WebCore::RequestCookieConsentOptions::RequestCookieConsentOptions):
        * Modules/cookie-consent/RequestCookieConsentOptions.h: Added.
        * Modules/cookie-consent/RequestCookieConsentOptions.idl: Added.
        * Modules/filesystemaccess/WorkerFileSystemStorageConnection.cpp:
        * Modules/filesystemaccess/WorkerFileSystemStorageConnection.h:

        Add some missing includes to fix the unified source build on Windows.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/EmptyClients.cpp:
        (WebCore::EmptyChromeClient::requestCookieConsent):
        * loader/EmptyClients.h:
        * page/ChromeClient.h:

2021-12-07  Cameron McCormack  <heycam@apple.com>

        Remove expandAroundIdeographs static variables
        https://bugs.webkit.org/show_bug.cgi?id=233750

        Reviewed by Myles Maxfield.

        With OffscreenCanvas, we can call into
        ComplexTextController::adjustGlyphsAndAdvances,
        FontCascade::expansionOpportunityCountInternal, and
        WidthIterator::calculateAdditionalWidth from worker threads.
        These all have a static variable variable with an initializer
        that calls FontCascade::canExpandAroundIdeographsInComplexText,
        and such initializers are not safe under -fno-threadsafe-statics.

        canExpandAroundIdeographsInComplexText is a simple enough function in
        all ports (it just returns a constant bool) that it's not worth caching
        the result in a static.

        * platform/graphics/ComplexTextController.cpp:
        (WebCore::ComplexTextController::adjustGlyphsAndAdvances):
        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::expansionOpportunityCountInternal):
        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::calculateAdditionalWidth const):

2021-12-07  Cameron McCormack  <heycam@apple.com>

        Move shouldAutoActivateFontIfNeeded knownFamilies cache to FontCache
        https://bugs.webkit.org/show_bug.cgi?id=233749

        Reviewed by Myles Maxfield.

        With OffscreenCanvas, we can call shouldAutoActivateFontIfNeeded on a
        worker thread, and the knownFamilies HashSet is not thread safe. Also,
        the AtomStrings it stores are thread-specific. Move it to FontCache, so
        each thread has its own set.

        * platform/graphics/FontCache.h:
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::FontCache::shouldAutoActivateFontIfNeeded):
        (WebCore::shouldAutoActivateFontIfNeeded): Deleted.

2021-12-07  Devin Rousso  <drousso@apple.com>

        Add a `DOMPasteAccessCategory` to control which pasteboard the WebProcess is granted access to when pasting
        https://bugs.webkit.org/show_bug.cgi?id=233939

        Reviewed by Wenson Hsieh.

        Implementing `-pasteFont:` <https://webkit.org/b/191379> requires that we read from the font
        pasteboard instead of the general pasteboard. In order to allow web content to trigger this
        (e.g. `document.execCommand("PasteFont"))`) we must have a way for the WebProcess to signal
        that it wishes to read from the font pasteboard instead of the general pasteboard. As such,
        create and pass along a `DOMPasteAccessCategory` to `requestDOMPasteAccess`.

        No change in behavior.

        * dom/DOMPasteAccess.h:
        Create `DOMPasteAccessCategory`.

        * page/EditorClient.h:
        * page/Frame.h:
        * page/Frame.cpp:
        (WebCore::Frame::requestDOMPasteAccess):
        * loader/EmptyClients.cpp:
        (WebCore::EmptyEditorClient::requestDOMPasteAccess):
        Pass along the `DOMPasteAccessCategory`.

2021-12-07  Devin Rousso  <drousso@apple.com>

        Add helper methods to `WebCore::FontShadow` for serializing to CSS and converting to `NSShadow`
        https://bugs.webkit.org/show_bug.cgi?id=233938

        Implementing `-pasteFont:` <https://webkit.org/b/191379> requires that we convert native
        font attribute data into objects understandable by WebCore, one of which is a `NSShadow`.
        These helpers will make it easier to parse the `NSShadow` and convert it to a CSS value that
        we will use to override the selection's CSS `text-shadow`.

        No change in behavior.

        Reviewed by Wenson Hsieh.

        Tests: FontShadow.InvalidColor
               FontShadow.NoOffsetOrBlurRadius
               FontShadow.NoOffset
               FontShadow.NegativeOffset
               FontShadow.NoBlurRadius
               FontShadow.NegativeBlurRadius
               FontShadow.AllNegative

        * editing/FontShadow.h:
        * editing/FontShadow.cpp: Added.
        (WebCore::serializationForCSS):
        * editing/cocoa/FontShadowCocoa.mm:
        (WebCore::fontShadowFromNSShadow): Added.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

2021-12-07  Yoshiaki Jitsukawa  <yoshiaki.jitsukawa@sony.com>

        Support Animated JPEG-XL images
        https://bugs.webkit.org/show_bug.cgi?id=233545
        <rdar://problem/86077143>

        Reviewed by Don Olmstead.

        Implement relevant API, such as frameCount() and support a positive
        frame index for frameBufferAtIndex().

        Introduce a query to count frames because JPEG XL code stream itself doesn't have frame
        count metadata and we need to scan the code stream to the last frame.

        Also introduce the Size query instead of the onlySize parameter of the decode() function.

        With the DecodeImage query, the decoder decodes a single frame. To
        specify which frame to decode, we make use of the JxlDecoderRewind()
        and JxlDecoderSkipFrames() functions of libjxl.

        To omit rewind and skip as much as possible, we record the query to
        m_lastQuery and use it in shouldRewind().

        Test: fast/images/animated-jpegxl-loop-count.html

        * platform/image-decoders/jpegxl/JPEGXLImageDecoder.cpp:
        (WebCore::JPEGXLImageDecoder::~JPEGXLImageDecoder):
        (WebCore::JPEGXLImageDecoder::frameCount const):
        (WebCore::JPEGXLImageDecoder::repetitionCount const):
        (WebCore::JPEGXLImageDecoder::frameBufferAtIndex):
        (WebCore::JPEGXLImageDecoder::clearFrameBufferCache):
        (WebCore::JPEGXLImageDecoder::setFailed):
        (WebCore::JPEGXLImageDecoder::tryDecodeSize):
        (WebCore::JPEGXLImageDecoder::hasAlpha const):
        (WebCore::JPEGXLImageDecoder::hasAnimation const):
        (WebCore::JPEGXLImageDecoder::ensureDecoderInitialized):
        (WebCore::JPEGXLImageDecoder::shouldRewind const):
        (WebCore::JPEGXLImageDecoder::rewind):
        (WebCore::JPEGXLImageDecoder::updateFrameCount):
        (WebCore::JPEGXLImageDecoder::decode):
        (WebCore::JPEGXLImageDecoder::processInput):
        (WebCore::JPEGXLImageDecoder::imageOut):
        (WebCore::JPEGXLImageDecoder::clear): Deleted.
        * platform/image-decoders/jpegxl/JPEGXLImageDecoder.h:

2021-12-07  Cameron McCormack  <heycam@apple.com>

        Move FontCache singleton and instance on WorkerGlobalScope to ThreadGlobalData
        https://bugs.webkit.org/show_bug.cgi?id=233747

        Reviewed by Darin Adler.

        There are various places in font code where we need access to a
        FontCache instance. Currently we:

        - assume that we're on the main thread and call
          FontCache::singleton(), or
        - get a FontCache off WorkerGlobalScope and pass it down (or store it)
          where it's needed, then pass it to fontCacheFallingBackToSingleton.

        Having to thread through, or store, the FontCache pointer is
        inconvenient, and there are some places where we don't have access to
        a FontCache pointer, but we're on a worker, and we call
        fontCacheFallingBackToSingleton and incorrectly get back the main
        thread's instance.

        I think it would be cleaner if we moved both the main thread FontCache
        singleton, and the one stored on a WorkerGlobalScope, to
        ThreadGlobalData, which is easily globally accessible. Performing a
        TLS lookup is cheap these days.

        * css/CSSFontFace.h:
        * css/CSSFontFace.cpp:
        (WebCore::CSSFontFace::font):
        (WebCore::CSSFontFace::fontCacheFallingBackToSingleton):
        Remove fontCacheFallingBackToSingleton and replace calls to it with
        FontCache::forCurrentThread.

        * css/CSSFontFaceSet.cpp:
        (WebCore::CSSFontFaceSet::ensureLocalFontFacesForFamilyRegistered):
        Replace getting the FontCache from the ScriptExecutionContext with a
        call to FontCache::forCurrentThread.

        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::load):
        (WebCore::CSSFontFaceSource::font):
        * editing/cocoa/FontAttributeChangesCocoa.mm:
        (WebCore::FontChanges::platformFontFamilyNameForCSS const):
        * inspector/agents/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::getSupportedSystemFontFamilyNames):
        * page/MemoryRelease.cpp:
        (WebCore::releaseNoncriticalMemory):
        * page/ProcessWarming.cpp:
        (WebCore::ProcessWarming::prewarmGlobally):
        (WebCore::ProcessWarming::collectPrewarmInformation):
        (WebCore::ProcessWarming::prewarmWithInformation):
        * page/SettingsBase.cpp:
        (WebCore::invalidateAfterGenericFamilyChange):
        Replace calls to FontCache::singleton with calls to
        FontCache::forCurrentThread.

        * css/CSSFontSelector.h:
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::CSSFontSelector):
        (WebCore::CSSFontSelector::~CSSFontSelector):
        (WebCore::CSSFontSelector::fontRangesForFamily):
        (WebCore::CSSFontSelector::fallbackFontAt):
        Remove CSSFontSelector::m_fontCache and use
        FontCache::forCurrentThread instead. For the CSSFontSelector
        destructor, we call forCurrentThreadIfNotDestroyed since it
        can run after ThreadGlobalData::destroy has been called for
        a worker, and we don't want to cause a fresh FontCache object to be
        created at this point.

        * dom/ScriptExecutionContext.h:
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::fontCache):
        Remove the FontCache member.

        * platform/ThreadGlobalData.h:
        (WebCore::ThreadGlobalData::ThreadGlobalData::cachedResourceRequestInitiators):
        (WebCore::ThreadGlobalData::ThreadGlobalData::eventNames):
        (WebCore::ThreadGlobalData::ThreadGlobalData::qualifiedNameCache):
        (WebCore::ThreadGlobalData::ThreadGlobalData::mimeTypeRegistryThreadGlobalData):
        (WebCore::ThreadGlobalData::ThreadGlobalData::fontCache):
        (WebCore::ThreadGlobalData::ThreadGlobalData::fontCacheIfNotDestroyed):
        * platform/ThreadGlobalData.cpp:
        (WebCore::ThreadGlobalData::destroy):
        (WebCore::ThreadGlobalData::initializeFontCache):
        Add accessors for a lazily created FontCache. Also record whether
        destroy has been called on the ThreadGlobalData so that
        fontCacheIfNotDestroyed can check it, and the other lazy object
        creation methods can assert destroy hasn't been called yet.

        * platform/graphics/Font.h:
        * platform/graphics/Font.cpp:
        (WebCore::Font::create):
        (WebCore::Font::Font):
        (WebCore::Font::systemFallbackFontForCharacter const):
        * platform/graphics/FontCache.cpp:
        (WebCore::FontCache::fontForPlatformData):
        * workers/WorkerFontLoadRequest.cpp:
        (WebCore::WorkerFontLoadRequest::createFont):
        Remove FontCache arguments and use FontCache::forCurrentThread in
        their place.

        * platform/graphics/FontCache.cpp:
        (WebCore::FontCache::create): Removed.
        (WebCore::FontCache::singleton):
        (WebCore::FontCache::forCurrentThread):
        Replace FontCache::singleton with FontCache::forCurrentThread, which
        looks up the FontCache on ThreadGlobalData.
        (WebCore::FontCache::invalidateAllFontCaches):
        New function that will in the future invalidate the main thread and
        all worker thread FontCaches.

        * platform/graphics/FontCache.h:
        Remove refcounting from FontCache since we no longer need to store a
        strong reference to it on other objects.
        (WebCore::FontCache::fontCacheFallingBackToSingleton): Deleted.

        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::isCurrent const):
        (WebCore::FontCascade::update const):
        Call FontCache::forCurrentThread instead of getting it from the
        FontSelector.

        * platform/graphics/FontCascadeFonts.cpp:
        (WebCore::FontCascadeFonts::FontCascadeFonts):
        (WebCore::realizeNextFallback):
        (WebCore::FontCascadeFonts::realizeFallbackRangesAt):
        (WebCore::FontCascadeFonts::glyphDataForSystemFallback):
        * platform/graphics/cairo/FontCairoHarfbuzzNG.cpp:
        (WebCore::FontCascade::fontForCombiningCharacterSequence const):
        Use FontCache::forCurrentThread.

        * platform/graphics/FontSelector.h:
        Remove fontCache method.

        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::fontCacheRegisteredFontsChangedNotificationCallback):
        (WebCore::fontWithFamilySpecialCase):
        (WebCore::FontCache::prewarmGlobally):
        * platform/graphics/cocoa/FontFamilySpecificationCoreText.cpp:
        (WebCore::FontFamilySpecificationCoreText::fontRanges const):
        * platform/graphics/cocoa/SystemFontDatabaseCoreText.cpp:
        (WebCore::SystemFontDatabaseCoreText::systemFontParameters):
        * platform/graphics/mac/ComplexTextControllerCoreText.mm:
        (WebCore::ComplexTextController::collectComplexTextRunsForCharacters):
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::Backup::restoreTo):
        (WebCore::InternalSettings::setShouldMockBoldSystemFontForAccessibility):
        Use FontCache::forCurrentThread.

        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::invalidateFontCache):
        * testing/Internals.cpp:
        (WebCore::Internals::invalidateFontCache):
        Call the new FontCache::invalidateAllFontCaches.

        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::getCJKCodePageMasks):
        (WebCore::FontCache::systemFallbackForCharacters):
        Use the FontCache instance we have access to rather than call
        FontCache::singleton.

        * workers/WorkerGlobalScope.h:
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::fontCache):
        Remove the FontCache member and accessor.

2021-12-07  Kyle Piddington  <kpiddington@apple.com>
        Roll ANGLE to include upstreamed Metal backend
        https://bugs.webkit.org/show_bug.cgi?id=220896
        <rdar://problem/73539682>

        Reviewed by Ken Russell and Dean Jackson.

        Update ANGLE to ce854632690e505551414f80d01d864df6118882

        Update OpenGL callsites to use the new
        method names. Ideally, we should replace this with
        a more robust function loader. For now, we call directly
        into ANGLE's methods.

        Fix exports and includes for egl_autogen.h files. 

        * platform/graphics/angle/ANGLEHeaders.h:
        * platform/graphics/angle/ANGLEUtilities.h:
        (WebCore::ScopedRestoreTextureBinding::ScopedRestoreTextureBinding):
        (WebCore::ScopedRestoreTextureBinding::~ScopedRestoreTextureBinding):
        (WebCore::ScopedBufferBinding::ScopedBufferBinding):
        (WebCore::ScopedBufferBinding::~ScopedBufferBinding):
        (WebCore::ScopedRestoreReadFramebufferBinding::bindFramebuffer):
        (WebCore::ScopedRestoreReadFramebufferBinding::~ScopedRestoreReadFramebufferBinding):
        (WebCore::ScopedPixelStorageMode::ScopedPixelStorageMode):
        (WebCore::ScopedPixelStorageMode::~ScopedPixelStorageMode):
        (WebCore::ScopedPixelStorageMode::pixelStore):
        (WebCore::ScopedTexture::ScopedTexture):
        (WebCore::ScopedTexture::~ScopedTexture):
        (WebCore::ScopedFramebuffer::ScopedFramebuffer):
        (WebCore::ScopedFramebuffer::~ScopedFramebuffer):
        (WebCore::ScopedGLFence::reset):
        (WebCore::ScopedGLFence::fenceSync):
        * platform/graphics/angle/ExtensionsGLANGLE.cpp:
        (WebCore::ExtensionsGLANGLE::ensureEnabled):
        (WebCore::ExtensionsGLANGLE::getTranslatedShaderSourceANGLE):
        (WebCore::ExtensionsGLANGLE::initializeAvailableExtensions):
        (WebCore::ExtensionsGLANGLE::drawBuffersEXT):
        (WebCore::ExtensionsGLANGLE::getExtensions):
        * platform/graphics/angle/GraphicsContextGLANGLE.cpp:
        (WebCore::GraphicsContextGLANGLE::releaseThreadResources):
        (WebCore::GraphicsContextGLANGLE::readPixelsForPaintResults):
        (WebCore::GraphicsContextGLANGLE::reshapeFBOs):
        (WebCore::GraphicsContextGLANGLE::attachDepthAndStencilBufferIfNeeded):
        (WebCore::GraphicsContextGLANGLE::resolveMultisamplingIfNecessary):
        (WebCore::GraphicsContextGLANGLE::renderbufferStorage):
        (WebCore::GraphicsContextGLANGLE::getIntegerv):
        (WebCore::GraphicsContextGLANGLE::getShaderPrecisionFormat):
        (WebCore::GraphicsContextGLANGLE::texImage2D):
        (WebCore::GraphicsContextGLANGLE::texSubImage2D):
        (WebCore::GraphicsContextGLANGLE::compressedTexImage2D):
        (WebCore::GraphicsContextGLANGLE::compressedTexSubImage2D):
        (WebCore::GraphicsContextGLANGLE::depthRange):
        (WebCore::GraphicsContextGLANGLE::clearDepth):
        (WebCore::GraphicsContextGLANGLE::readnPixelsImpl):
        (WebCore::GraphicsContextGLANGLE::prepareTextureImpl):
        (WebCore::GraphicsContextGLANGLE::reshape):
        (WebCore::GraphicsContextGLANGLE::activeTexture):
        (WebCore::GraphicsContextGLANGLE::attachShader):
        (WebCore::GraphicsContextGLANGLE::bindAttribLocation):
        (WebCore::GraphicsContextGLANGLE::bindBuffer):
        (WebCore::GraphicsContextGLANGLE::bindFramebuffer):
        (WebCore::GraphicsContextGLANGLE::bindRenderbuffer):
        (WebCore::GraphicsContextGLANGLE::bindTexture):
        (WebCore::GraphicsContextGLANGLE::blendColor):
        (WebCore::GraphicsContextGLANGLE::blendEquation):
        (WebCore::GraphicsContextGLANGLE::blendEquationSeparate):
        (WebCore::GraphicsContextGLANGLE::blendFunc):
        (WebCore::GraphicsContextGLANGLE::blendFuncSeparate):
        (WebCore::GraphicsContextGLANGLE::bufferData):
        (WebCore::GraphicsContextGLANGLE::bufferSubData):
        (WebCore::GraphicsContextGLANGLE::getBufferSubData):
        (WebCore::GraphicsContextGLANGLE::copyBufferSubData):
        (WebCore::GraphicsContextGLANGLE::getInternalformativ):
        (WebCore::GraphicsContextGLANGLE::renderbufferStorageMultisample):
        (WebCore::GraphicsContextGLANGLE::texStorage2D):
        (WebCore::GraphicsContextGLANGLE::texStorage3D):
        (WebCore::GraphicsContextGLANGLE::texImage3D):
        (WebCore::GraphicsContextGLANGLE::texSubImage3D):
        (WebCore::GraphicsContextGLANGLE::compressedTexImage3D):
        (WebCore::GraphicsContextGLANGLE::compressedTexSubImage3D):
        (WebCore::GraphicsContextGLANGLE::getActiveUniforms):
        (WebCore::GraphicsContextGLANGLE::checkFramebufferStatus):
        (WebCore::GraphicsContextGLANGLE::clearColor):
        (WebCore::GraphicsContextGLANGLE::clear):
        (WebCore::GraphicsContextGLANGLE::clearStencil):
        (WebCore::GraphicsContextGLANGLE::colorMask):
        (WebCore::GraphicsContextGLANGLE::compileShader):
        (WebCore::GraphicsContextGLANGLE::compileShaderDirect):
        (WebCore::GraphicsContextGLANGLE::texImage2DDirect):
        (WebCore::GraphicsContextGLANGLE::copyTexImage2D):
        (WebCore::GraphicsContextGLANGLE::copyTexSubImage2D):
        (WebCore::GraphicsContextGLANGLE::cullFace):
        (WebCore::GraphicsContextGLANGLE::depthFunc):
        (WebCore::GraphicsContextGLANGLE::depthMask):
        (WebCore::GraphicsContextGLANGLE::detachShader):
        (WebCore::GraphicsContextGLANGLE::disable):
        (WebCore::GraphicsContextGLANGLE::disableVertexAttribArray):
        (WebCore::GraphicsContextGLANGLE::drawArrays):
        (WebCore::GraphicsContextGLANGLE::drawElements):
        (WebCore::GraphicsContextGLANGLE::enable):
        (WebCore::GraphicsContextGLANGLE::enableVertexAttribArray):
        (WebCore::GraphicsContextGLANGLE::finish):
        (WebCore::GraphicsContextGLANGLE::flush):
        (WebCore::GraphicsContextGLANGLE::framebufferRenderbuffer):
        (WebCore::GraphicsContextGLANGLE::framebufferTexture2D):
        (WebCore::GraphicsContextGLANGLE::frontFace):
        (WebCore::GraphicsContextGLANGLE::generateMipmap):
        (WebCore::GraphicsContextGLANGLE::getActiveAttribImpl):
        (WebCore::GraphicsContextGLANGLE::getActiveUniformImpl):
        (WebCore::GraphicsContextGLANGLE::getAttachedShaders):
        (WebCore::GraphicsContextGLANGLE::getAttribLocation):
        (WebCore::GraphicsContextGLANGLE::moveErrorsToSyntheticErrorList):
        (WebCore::GraphicsContextGLANGLE::getError):
        (WebCore::GraphicsContextGLANGLE::getString):
        (WebCore::GraphicsContextGLANGLE::hint):
        (WebCore::GraphicsContextGLANGLE::isBuffer):
        (WebCore::GraphicsContextGLANGLE::isEnabled):
        (WebCore::GraphicsContextGLANGLE::isFramebuffer):
        (WebCore::GraphicsContextGLANGLE::isProgram):
        (WebCore::GraphicsContextGLANGLE::isRenderbuffer):
        (WebCore::GraphicsContextGLANGLE::isShader):
        (WebCore::GraphicsContextGLANGLE::isTexture):
        (WebCore::GraphicsContextGLANGLE::lineWidth):
        (WebCore::GraphicsContextGLANGLE::linkProgram):
        (WebCore::GraphicsContextGLANGLE::pixelStorei):
        (WebCore::GraphicsContextGLANGLE::polygonOffset):
        (WebCore::GraphicsContextGLANGLE::sampleCoverage):
        (WebCore::GraphicsContextGLANGLE::scissor):
        (WebCore::GraphicsContextGLANGLE::shaderSource):
        (WebCore::GraphicsContextGLANGLE::stencilFunc):
        (WebCore::GraphicsContextGLANGLE::stencilFuncSeparate):
        (WebCore::GraphicsContextGLANGLE::stencilMask):
        (WebCore::GraphicsContextGLANGLE::stencilMaskSeparate):
        (WebCore::GraphicsContextGLANGLE::stencilOp):
        (WebCore::GraphicsContextGLANGLE::stencilOpSeparate):
        (WebCore::GraphicsContextGLANGLE::texParameterf):
        (WebCore::GraphicsContextGLANGLE::texParameteri):
        (WebCore::GraphicsContextGLANGLE::uniform1f):
        (WebCore::GraphicsContextGLANGLE::uniform1fv):
        (WebCore::GraphicsContextGLANGLE::uniform2f):
        (WebCore::GraphicsContextGLANGLE::uniform2fv):
        (WebCore::GraphicsContextGLANGLE::uniform3f):
        (WebCore::GraphicsContextGLANGLE::uniform3fv):
        (WebCore::GraphicsContextGLANGLE::uniform4f):
        (WebCore::GraphicsContextGLANGLE::uniform4fv):
        (WebCore::GraphicsContextGLANGLE::uniform1i):
        (WebCore::GraphicsContextGLANGLE::uniform1iv):
        (WebCore::GraphicsContextGLANGLE::uniform2i):
        (WebCore::GraphicsContextGLANGLE::uniform2iv):
        (WebCore::GraphicsContextGLANGLE::uniform3i):
        (WebCore::GraphicsContextGLANGLE::uniform3iv):
        (WebCore::GraphicsContextGLANGLE::uniform4i):
        (WebCore::GraphicsContextGLANGLE::uniform4iv):
        (WebCore::GraphicsContextGLANGLE::uniformMatrix2fv):
        (WebCore::GraphicsContextGLANGLE::uniformMatrix3fv):
        (WebCore::GraphicsContextGLANGLE::uniformMatrix4fv):
        (WebCore::GraphicsContextGLANGLE::useProgram):
        (WebCore::GraphicsContextGLANGLE::validateProgram):
        (WebCore::GraphicsContextGLANGLE::vertexAttrib1f):
        (WebCore::GraphicsContextGLANGLE::vertexAttrib1fv):
        (WebCore::GraphicsContextGLANGLE::vertexAttrib2f):
        (WebCore::GraphicsContextGLANGLE::vertexAttrib2fv):
        (WebCore::GraphicsContextGLANGLE::vertexAttrib3f):
        (WebCore::GraphicsContextGLANGLE::vertexAttrib3fv):
        (WebCore::GraphicsContextGLANGLE::vertexAttrib4f):
        (WebCore::GraphicsContextGLANGLE::vertexAttrib4fv):
        (WebCore::GraphicsContextGLANGLE::vertexAttribPointer):
        (WebCore::GraphicsContextGLANGLE::vertexAttribIPointer):
        (WebCore::GraphicsContextGLANGLE::viewport):
        (WebCore::GraphicsContextGLANGLE::createVertexArray):
        (WebCore::GraphicsContextGLANGLE::deleteVertexArray):
        (WebCore::GraphicsContextGLANGLE::isVertexArray):
        (WebCore::GraphicsContextGLANGLE::bindVertexArray):
        (WebCore::GraphicsContextGLANGLE::getBooleanv):
        (WebCore::GraphicsContextGLANGLE::getBufferParameteri):
        (WebCore::GraphicsContextGLANGLE::getFloatv):
        (WebCore::GraphicsContextGLANGLE::getInteger64):
        (WebCore::GraphicsContextGLANGLE::getInteger64i):
        (WebCore::GraphicsContextGLANGLE::getFramebufferAttachmentParameteri):
        (WebCore::GraphicsContextGLANGLE::getProgrami):
        (WebCore::GraphicsContextGLANGLE::getProgramInfoLog):
        (WebCore::GraphicsContextGLANGLE::getRenderbufferParameteri):
        (WebCore::GraphicsContextGLANGLE::getShaderi):
        (WebCore::GraphicsContextGLANGLE::getShaderInfoLog):
        (WebCore::GraphicsContextGLANGLE::getTexParameterf):
        (WebCore::GraphicsContextGLANGLE::getTexParameteri):
        (WebCore::GraphicsContextGLANGLE::getUniformfv):
        (WebCore::GraphicsContextGLANGLE::getUniformiv):
        (WebCore::GraphicsContextGLANGLE::getUniformuiv):
        (WebCore::GraphicsContextGLANGLE::getUniformLocation):
        (WebCore::GraphicsContextGLANGLE::getVertexAttribOffset):
        (WebCore::GraphicsContextGLANGLE::createBuffer):
        (WebCore::GraphicsContextGLANGLE::createFramebuffer):
        (WebCore::GraphicsContextGLANGLE::createProgram):
        (WebCore::GraphicsContextGLANGLE::createRenderbuffer):
        (WebCore::GraphicsContextGLANGLE::createShader):
        (WebCore::GraphicsContextGLANGLE::createTexture):
        (WebCore::GraphicsContextGLANGLE::deleteBuffer):
        (WebCore::GraphicsContextGLANGLE::deleteFramebuffer):
        (WebCore::GraphicsContextGLANGLE::deleteProgram):
        (WebCore::GraphicsContextGLANGLE::deleteRenderbuffer):
        (WebCore::GraphicsContextGLANGLE::deleteShader):
        (WebCore::GraphicsContextGLANGLE::deleteTexture):
        (WebCore::GraphicsContextGLANGLE::synthesizeGLError):
        (WebCore::GraphicsContextGLANGLE::drawArraysInstanced):
        (WebCore::GraphicsContextGLANGLE::drawElementsInstanced):
        (WebCore::GraphicsContextGLANGLE::vertexAttribDivisor):
        (WebCore::GraphicsContextGLANGLE::getUniformBlockIndex):
        (WebCore::GraphicsContextGLANGLE::getActiveUniformBlockName):
        (WebCore::GraphicsContextGLANGLE::uniformBlockBinding):
        (WebCore::GraphicsContextGLANGLE::createQuery):
        (WebCore::GraphicsContextGLANGLE::beginQuery):
        (WebCore::GraphicsContextGLANGLE::endQuery):
        (WebCore::GraphicsContextGLANGLE::getQueryObjectui):
        (WebCore::GraphicsContextGLANGLE::createTransformFeedback):
        (WebCore::GraphicsContextGLANGLE::deleteTransformFeedback):
        (WebCore::GraphicsContextGLANGLE::isTransformFeedback):
        (WebCore::GraphicsContextGLANGLE::bindTransformFeedback):
        (WebCore::GraphicsContextGLANGLE::beginTransformFeedback):
        (WebCore::GraphicsContextGLANGLE::endTransformFeedback):
        (WebCore::GraphicsContextGLANGLE::transformFeedbackVaryings):
        (WebCore::GraphicsContextGLANGLE::getTransformFeedbackVarying):
        (WebCore::GraphicsContextGLANGLE::bindBufferBase):
        (WebCore::GraphicsContextGLANGLE::blitFramebuffer):
        (WebCore::GraphicsContextGLANGLE::framebufferTextureLayer):
        (WebCore::GraphicsContextGLANGLE::invalidateFramebuffer):
        (WebCore::GraphicsContextGLANGLE::invalidateSubFramebuffer):
        (WebCore::GraphicsContextGLANGLE::readBuffer):
        (WebCore::GraphicsContextGLANGLE::copyTexSubImage3D):
        (WebCore::GraphicsContextGLANGLE::getFragDataLocation):
        (WebCore::GraphicsContextGLANGLE::uniform1ui):
        (WebCore::GraphicsContextGLANGLE::uniform2ui):
        (WebCore::GraphicsContextGLANGLE::uniform3ui):
        (WebCore::GraphicsContextGLANGLE::uniform4ui):
        (WebCore::GraphicsContextGLANGLE::uniform1uiv):
        (WebCore::GraphicsContextGLANGLE::uniform2uiv):
        (WebCore::GraphicsContextGLANGLE::uniform3uiv):
        (WebCore::GraphicsContextGLANGLE::uniform4uiv):
        (WebCore::GraphicsContextGLANGLE::uniformMatrix2x3fv):
        (WebCore::GraphicsContextGLANGLE::uniformMatrix3x2fv):
        (WebCore::GraphicsContextGLANGLE::uniformMatrix2x4fv):
        (WebCore::GraphicsContextGLANGLE::uniformMatrix4x2fv):
        (WebCore::GraphicsContextGLANGLE::uniformMatrix3x4fv):
        (WebCore::GraphicsContextGLANGLE::uniformMatrix4x3fv):
        (WebCore::GraphicsContextGLANGLE::vertexAttribI4i):
        (WebCore::GraphicsContextGLANGLE::vertexAttribI4iv):
        (WebCore::GraphicsContextGLANGLE::vertexAttribI4ui):
        (WebCore::GraphicsContextGLANGLE::vertexAttribI4uiv):
        (WebCore::GraphicsContextGLANGLE::drawRangeElements):
        (WebCore::GraphicsContextGLANGLE::drawBuffers):
        (WebCore::GraphicsContextGLANGLE::clearBufferiv):
        (WebCore::GraphicsContextGLANGLE::clearBufferuiv):
        (WebCore::GraphicsContextGLANGLE::clearBufferfv):
        (WebCore::GraphicsContextGLANGLE::clearBufferfi):
        (WebCore::GraphicsContextGLANGLE::deleteQuery):
        (WebCore::GraphicsContextGLANGLE::isQuery):
        (WebCore::GraphicsContextGLANGLE::getQuery):
        (WebCore::GraphicsContextGLANGLE::createSampler):
        (WebCore::GraphicsContextGLANGLE::deleteSampler):
        (WebCore::GraphicsContextGLANGLE::isSampler):
        (WebCore::GraphicsContextGLANGLE::bindSampler):
        (WebCore::GraphicsContextGLANGLE::samplerParameteri):
        (WebCore::GraphicsContextGLANGLE::samplerParameterf):
        (WebCore::GraphicsContextGLANGLE::getSamplerParameterf):
        (WebCore::GraphicsContextGLANGLE::getSamplerParameteri):
        (WebCore::GraphicsContextGLANGLE::fenceSync):
        (WebCore::GraphicsContextGLANGLE::isSync):
        (WebCore::GraphicsContextGLANGLE::deleteSync):
        (WebCore::GraphicsContextGLANGLE::clientWaitSync):
        (WebCore::GraphicsContextGLANGLE::waitSync):
        (WebCore::GraphicsContextGLANGLE::getSynci):
        (WebCore::GraphicsContextGLANGLE::pauseTransformFeedback):
        (WebCore::GraphicsContextGLANGLE::resumeTransformFeedback):
        (WebCore::GraphicsContextGLANGLE::bindBufferRange):
        (WebCore::GraphicsContextGLANGLE::getUniformIndices):
        (WebCore::GraphicsContextGLANGLE::getActiveUniformBlockiv):
        (WebCore::GraphicsContextGLANGLE::multiDrawArraysANGLE):
        (WebCore::GraphicsContextGLANGLE::multiDrawArraysInstancedANGLE):
        (WebCore::GraphicsContextGLANGLE::multiDrawElementsANGLE):
        (WebCore::GraphicsContextGLANGLE::multiDrawElementsInstancedANGLE):
        (WebCore::GraphicsContextGLANGLE::waitAndUpdateOldestFrame):
        * platform/graphics/angle/TemporaryANGLESetting.cpp:
        (WebCore::TemporaryANGLESetting::TemporaryANGLESetting):
        (WebCore::TemporaryANGLESetting::~TemporaryANGLESetting):
        * platform/graphics/cocoa/GraphicsContextGLCocoa.mm:
        (WebCore::GraphicsContextGLANGLE::GraphicsContextGLANGLE):
        (WebCore::GraphicsContextGLANGLE::~GraphicsContextGLANGLE):
        (WebCore::GraphicsContextGLANGLE::bindDisplayBufferBacking):
        (WebCore::GraphicsContextGLCocoa::attachIOSurfaceToSharedTexture):
        (WebCore::GraphicsContextGLANGLE::prepareForDisplay):
        (WebCore::GraphicsContextGLANGLE::readCompositedResults):
        * platform/graphics/cv/GraphicsContextGLCVCocoa.cpp:
        (WebCore::GraphicsContextGLCVCocoa::~GraphicsContextGLCVCocoa):
        (WebCore::GraphicsContextGLCVCocoa::GraphicsContextGLCVCocoa):
        (WebCore::GraphicsContextGLCVCocoa::copyPixelBufferToTexture):

2021-12-07  Sihui Liu  <sihui_liu@apple.com>

        Fetch and remove file system data via WKWebsiteDataStore
        https://bugs.webkit.org/show_bug.cgi?id=233567
        <rdar://problem/86029185>

        Reviewed by Youenn Fablet.

        * Modules/filesystemaccess/FileSystemStorageConnection.h:

2021-12-07  Antti Koivisto  <antti@apple.com>

        Assertion after removing stylesheet with loading @import rule
        https://bugs.webkit.org/show_bug.cgi?id=233928

        Reviewed by Alan Bujtas.

        Tests: fast/css/import-and-remove-assert.html

        * dom/InlineStyleSheetOwner.cpp:
        (WebCore::InlineStyleSheetOwner::removedFromDocument):

        Ensure we notify Style::Scope

2021-12-07  Antti Koivisto  <antti@apple.com>

        Use more specific keys for pseudo-class invalidation
        https://bugs.webkit.org/show_bug.cgi?id=233883

        Reviewed by Simon Fraser.

        Currently pseudo-class invalidation is keyed with pseudo-class type only. If we have rule like

        .foo:hover { ... }

        we end up considering this rule for every element whenever :hover state changes, whether the element has class 'foo' or not.

        We can improve this by keying pseudo-class invalidation more narrowly with type/class, type/id or type/tag pairs.

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::CSSSelector):
        (WebCore::CSSSelector::firstInCompound const):

        Add a function to find the start of a compound selector.

        * css/CSSSelector.h:
        (WebCore::CSSSelector::tagHistory const):
        (WebCore::CSSSelector::isFirstInTagHistory const):
        (WebCore::CSSSelector::setNotFirstInTagHistory):

        Add isFirstInTagHistory bit, similar to the isLastInTagHistory bit, to enable firstInCompound.

        (WebCore::CSSSelector::CSSSelector):
        * css/CSSSelectorList.cpp:
        (WebCore::CSSSelectorList::CSSSelectorList):

        Set the bit.

        * style/PseudoClassChangeInvalidation.cpp:
        (WebCore::Style::makePseudoClassInvalidationKeys):

        Collect the id, tag and classes from the element and make keys out of them.

        (WebCore::Style::PseudoClassChangeInvalidation::computeInvalidation):
        (WebCore::Style::PseudoClassChangeInvalidation::collectRuleSets):

        Use the keys to look up for matching invalidation rulesets.

        * style/PseudoClassChangeInvalidation.h:
        * style/RuleFeature.cpp:
        (WebCore::Style::RuleFeatureSet::recursivelyCollectFeaturesFromSelector):
        (WebCore::Style::makePseudoClassInvalidationKey):

        Make a key out of a selector.
        Search the compound for id, classes or tag.

        (WebCore::Style::RuleFeatureSet::collectFeatures):
        (WebCore::Style::RuleFeatureSet::add):
        (WebCore::Style::RuleFeatureSet::clear):
        * style/RuleFeature.h:
        * style/StyleScopeRuleSets.cpp:
        (WebCore::Style::ScopeRuleSets::pseudoClassInvalidationRuleSets const):
        * style/StyleScopeRuleSets.h:

2021-12-07  Kimmo Kinnunen  <kkinnunen@apple.com>

        Cocoa WebGL should support UI side compositing
        https://bugs.webkit.org/show_bug.cgi?id=231009
        <rdar://83437059>

        Reviewed by Simon Fraser.

        Implement Cocoa UI-side compositing for WebGL.

        Make CanvasRenderingContext draw via GraphicsLayerContentsDisplayDelegate
        instead of PlatformLayer. On Cocoa the GraphicsLayer contents can be
        three different objects: CGImage, CALayer or content in "backing store"
        of the underlying compositor layer.
        For UI-side compositing for WebGL, we want it to be the latter.
        As such, the object CanvasRenderingContext draws to cannot be a platform
        layer (CALayer). So conceptually, WebGL does not draw into a platform
        layer, it draws into backing store that can be put to (possibly many)
        platform layers.

        Add GraphicsLayerContentsDisplayDelegate interface, which can be
        used to run client specific code during compositor layer contents update
        phase (i.e. layer display phase).

        WebGL will use new overloads of PlatformCALayer::setContents to set the
        contents during delegated display. The contents is IOSurface for
        in-process mode and MachSendRight of IOSurface in GPUP mode.
        The IOSurface is set as the contents of the WebSimpleLayer instead
        of the running the draw via display().
        The MachSendRight is set as the contents of PlatformCALayerRemote
        and be serialized to the UI process.

        For non-Cocoa ports, add a simple GraphicsLayerContentsDisplayDelegate
        that returns the platform layer to the GraphicsLayer inside the compositor.

        No new tests, a refactor.

        * Headers.cmake:
        * PlatformMac.cmake:
        * Sources.txt:
        * SourcesCocoa.txt:
        * WebCore.order:
        * WebCore.xcodeproj/project.pbxproj:
        * html/canvas/CanvasRenderingContext.cpp:
        (WebCore::CanvasRenderingContext::layerContentsDisplayDelegate):
        * html/canvas/CanvasRenderingContext.h:
        (WebCore::CanvasRenderingContext::platformLayer const): Deleted.
        * html/canvas/PlaceholderRenderingContext.cpp:
        (WebCore::PlaceholderRenderingContext::layerContentsDisplayDelegate):
        (WebCore::PlaceholderRenderingContext::platformLayer const): Deleted.
        * html/canvas/PlaceholderRenderingContext.h:
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::layerContentsDisplayDelegate):
        (WebCore::WebGLRenderingContextBase::platformLayer const): Deleted.
        * html/canvas/WebGLRenderingContextBase.h:
        * platform/graphics/GraphicsContextGL.h:
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::setContentsDisplayDelegate):
        * platform/graphics/GraphicsLayer.h:
        * platform/graphics/GraphicsLayerContentsDisplayDelegate.cpp: Added.
        (WebCore::GraphicsLayerContentsDisplayDelegate::prepareToDelegateDisplay):
        (WebCore::GraphicsLayerContentsDisplayDelegate::orientation const):
        * platform/graphics/GraphicsLayerContentsDisplayDelegate.h: Added.
        * platform/graphics/ImageBufferPipe.h:
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::setContentsDisplayDelegate):
        (WebCore::GraphicsLayerCA::layerDisplay):
        (WebCore::GraphicsLayerCA::updateContentsPlatformLayer):
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/PlatformCALayerClient.h:
        (WebCore::PlatformCALayerClient::platformCALayerLayerDisplay):
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.h:
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:
        (WebCore::PlatformCALayerCocoa::layerTypeForPlatformLayer):
        (WebCore::PlatformCALayerCocoa::PlatformCALayerCocoa):
        (WebCore::PlatformCALayerCocoa::commonInit):
        (WebCore::PlatformCALayerCocoa::setContents):
        * platform/graphics/cocoa/GraphicsContextGLOpenGLCocoa.mm:
        (WebCore::GraphicsContextGLOpenGL::displayBuffer):
        (WebCore::GraphicsContextGLOpenGL::markDisplayBufferInUse):
        (WebCore::GraphicsContextGLOpenGL::platformLayer const): Deleted.
        * platform/graphics/cocoa/WebGLLayer.mm: Removed.
        (-[WebGLLayer initWithDevicePixelRatio:contentsOpaque:]): Deleted.
        (-[WebGLLayer setTransform:]): Deleted.
        (-[WebGLLayer setAnchorPoint:]): Deleted.
        (-[WebGLLayer display]): Deleted.
        * platform/graphics/cocoa/WebProcessGraphicsContextGLOpenGLCocoa.mm:
        * platform/graphics/cv/CVUtilities.mm:
        * platform/graphics/mac/WebLayer.mm:
        (-[WebSimpleLayer display]):
        * platform/graphics/nicosia/NicosiaImageBufferPipe.cpp:
        (Nicosia::WebCore::NicosiaImageBufferPipeSource::layerContentsDisplayDelegate):
        (Nicosia::WebCore::NicosiaImageBufferPipe::layerContentsDisplayDelegate):
        (Nicosia::NicosiaImageBufferPipeSource::NicosiaImageBufferPipeSource): Deleted.
        (Nicosia::NicosiaImageBufferPipeSource::~NicosiaImageBufferPipeSource): Deleted.
        (Nicosia::NicosiaImageBufferPipeSource::handle): Deleted.
        (Nicosia::NicosiaImageBufferPipeSource::platformLayer const): Deleted.
        (Nicosia::NicosiaImageBufferPipeSource::swapBuffersIfNeeded): Deleted.
        (Nicosia::NicosiaImageBufferPipe::NicosiaImageBufferPipe): Deleted.
        (Nicosia::NicosiaImageBufferPipe::source const): Deleted.
        (Nicosia::NicosiaImageBufferPipe::platformLayer const): Deleted.
        * platform/graphics/opengl/GraphicsContextGLOpenGL.h:
        * platform/graphics/texmap/GraphicsContextGLTextureMapper.cpp:
        (WebCore::GraphicsContextGLOpenGL::create):
        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::GraphicsLayerTextureMapper::setContentsDisplayDelegate):
        * platform/graphics/texmap/GraphicsLayerTextureMapper.h:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::setContentsDisplayDelegate):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateConfiguration):

2021-12-03  Sergio Villar Senin  <svillar@igalia.com>

        [css-flexbox] Account for captions when flexing tables with specified sizes
        https://bugs.webkit.org/show_bug.cgi?id=233814

        Reviewed by Darin Adler.

        Flexing tables is complex because of the specifics of the table layout algorithms. There are
        two interrelated issues that were causing some failures in flexbox WPT tests.

        The first one is that tables interpret overriding sizes (flexed sizes) as the sizes of rows + captions.
        However the specified height of a table only accounts for the heights of the rows, not the captions. That's
        why when setting the flexed height of a table we must add up the specified height of the table and the height
        of the captions. The table algorithm will properly substract the captions' size in order to compute the
        available height for rows.

        The second issue is that the table layout algorithm adds the size of the bottom border at the very end
        of its execution after performing all the computations and it does it unconditionally. The thing is that
        the flexbox code already takes into account the borders and paddings so we basically have to substract that
        border when setting the height of the table, because the table layout will add it later.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::computeMainAxisExtentForChild):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::computeCaptionsLogicalHeight const): New method refactored from current code.
        (WebCore::RenderTable::layout):
        * rendering/RenderTable.h: Expose computeCaptionsLogicalHeight.

2021-12-07  Martin Robinson  <mrobinson@webkit.org>

        perspective() <= 1px should be clamped to 1px
        https://bugs.webkit.org/show_bug.cgi?id=232619
        <rdar://problem/85197362>

        Reviewed by Simon Fraser.

        No new tests. This is covered by the newly passing WPT tests
        in this change.

        When the CSS 3D transform interoperability experimental feature is turned on,
        round perspectives that are < 1 pixel to 1 pixel. This behavior is described
        in the specification, but breaks backward compatibility. The reasoning provided
        by the specification is:

            As very small <length> values can produce bizarre rendering results and
            stress the numerical accuracy of transform calculations, values less than
            1px must be treated as 1px for rendering purposes.

        * platform/graphics/transforms/PerspectiveTransformOperation.h: When getting
        the floating point perspective value, round to 1px.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::perspectiveTransform const): Use usedPerspective from
        RenderSTyle.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::getTransformFromContainer const): Ditto.
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::usedPerspective const): Added this method which rounds
        to 1px.
        * rendering/style/RenderStyle.h:

2021-12-06  Said Abou-Hallawa  <said@apple.com>

        [GPU Process]  [Filters] Make FilterEffect::externalRepresentation() and its overridable functions work iteratively
        https://bugs.webkit.org/show_bug.cgi?id=233893

        Reviewed by Cameron McCormack.

        This is a step towards removing the inputEffect() from FilterEffect.

        -- The enum FliterEffect::RepresentationType is replaced by
           FilterRepresentation.

        -- CSSFilter calls its functions from left to right to dump their
           externalRepresentation.

        -- SVGFilter uses its expression to dump its graph of FilterEffects.

        -- Since SourceAlpha is a built-in effect it does not need to dump
           SourceGraphic as its input.

        * platform/graphics/filters/FEBlend.cpp:
        (WebCore::FEBlend::externalRepresentation const):
        * platform/graphics/filters/FEBlend.h:
        * platform/graphics/filters/FEColorMatrix.cpp:
        (WebCore::FEColorMatrix::externalRepresentation const):
        * platform/graphics/filters/FEColorMatrix.h:
        * platform/graphics/filters/FEComponentTransfer.cpp:
        (WebCore::FEComponentTransfer::externalRepresentation const):
        * platform/graphics/filters/FEComponentTransfer.h:
        * platform/graphics/filters/FEComposite.cpp:
        (WebCore::FEComposite::externalRepresentation const):
        * platform/graphics/filters/FEComposite.h:
        * platform/graphics/filters/FEConvolveMatrix.cpp:
        (WebCore::FEConvolveMatrix::externalRepresentation const):
        * platform/graphics/filters/FEConvolveMatrix.h:
        * platform/graphics/filters/FEDiffuseLighting.cpp:
        (WebCore::FEDiffuseLighting::externalRepresentation const):
        * platform/graphics/filters/FEDiffuseLighting.h:
        * platform/graphics/filters/FEDisplacementMap.cpp:
        (WebCore::FEDisplacementMap::externalRepresentation const):
        * platform/graphics/filters/FEDisplacementMap.h:
        * platform/graphics/filters/FEDropShadow.cpp:
        (WebCore::FEDropShadow::externalRepresentation const):
        * platform/graphics/filters/FEDropShadow.h:
        * platform/graphics/filters/FEFlood.cpp:
        (WebCore::FEFlood::externalRepresentation const):
        * platform/graphics/filters/FEFlood.h:
        * platform/graphics/filters/FEGaussianBlur.cpp:
        (WebCore::FEGaussianBlur::externalRepresentation const):
        * platform/graphics/filters/FEGaussianBlur.h:
        * platform/graphics/filters/FEMerge.cpp:
        (WebCore::FEMerge::externalRepresentation const):
        * platform/graphics/filters/FEMerge.h:
        * platform/graphics/filters/FEMorphology.cpp:
        (WebCore::FEMorphology::externalRepresentation const):
        * platform/graphics/filters/FEMorphology.h:
        * platform/graphics/filters/FEOffset.cpp:
        (WebCore::FEOffset::externalRepresentation const):
        * platform/graphics/filters/FEOffset.h:
        * platform/graphics/filters/FESpecularLighting.cpp:
        (WebCore::FESpecularLighting::externalRepresentation const):
        * platform/graphics/filters/FESpecularLighting.h:
        * platform/graphics/filters/FETile.cpp:
        (WebCore::FETile::externalRepresentation const):
        * platform/graphics/filters/FETile.h:
        * platform/graphics/filters/FETurbulence.cpp:
        (WebCore::FETurbulence::externalRepresentation const):
        * platform/graphics/filters/FETurbulence.h:
        * platform/graphics/filters/Filter.h:
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::externalRepresentation const):
        (WebCore::operator<<):
        * platform/graphics/filters/FilterEffect.h:
        * platform/graphics/filters/FilterFunction.h:
        * platform/graphics/filters/SourceAlpha.cpp:
        (WebCore::SourceAlpha::externalRepresentation const):
        * platform/graphics/filters/SourceAlpha.h:
        * platform/graphics/filters/SourceGraphic.cpp:
        (WebCore::SourceGraphic::externalRepresentation const):
        * platform/graphics/filters/SourceGraphic.h:
        * rendering/CSSFilter.cpp:
        (WebCore::CSSFilter::externalRepresentation const):
        * rendering/CSSFilter.h:
        * rendering/svg/SVGRenderTreeAsText.cpp:
        (WebCore::writeSVGResourceContainer):
        * svg/graphics/filters/SVGFEImage.cpp:
        (WebCore::FEImage::externalRepresentation const):
        * svg/graphics/filters/SVGFEImage.h:
        * svg/graphics/filters/SVGFilter.cpp:
        (WebCore::SVGFilter::externalRepresentation const):
        * svg/graphics/filters/SVGFilter.h:
        * svg/graphics/filters/SVGFilterBuilder.cpp:
        (WebCore::effectGeometryFlagsForElement):
        (WebCore::SVGFilterBuilder::buildFilterEffects):
        (WebCore::SVGFilterBuilder::buildEffectExpression const):
        (WebCore::SVGFilterBuilder::buildExpression const):
        (WebCore::boundarySetFlagsForElement): Deleted.
        * svg/graphics/filters/SVGFilterBuilder.h:
        * svg/graphics/filters/SVGFilterExpression.h:

2021-12-06  Patrick Angle  <pangle@apple.com>

        [Cocoa] Web Inspector: Unify Grid overlay drawing code
        https://bugs.webkit.org/show_bug.cgi?id=233773

        Reviewed by Devin Rousso.

        Expose InspectorOverlay::drawGridOverlay as a static method so that it can be used for iOS overlay drawing and
        clean up other related drawing methods to be private static instead of instance methods or public static methods.

        * inspector/InspectorOverlay.cpp:
        (WebCore::drawLayoutHatching):
        (WebCore::fontForLayoutLabel):
        (WebCore::backgroundPathForLayoutLabel):
        (WebCore::expectedSizeForLayoutLabel):
        (WebCore::drawLayoutLabel):
        (WebCore::InspectorOverlay::drawLayoutHatching): Deleted.
        (WebCore::InspectorOverlay::fontForLayoutLabel): Deleted.
        (WebCore::InspectorOverlay::backgroundPathForLayoutLabel): Deleted.
        (WebCore::InspectorOverlay::drawLayoutLabel): Deleted.
        * inspector/InspectorOverlay.h:

2021-12-06  Chris Dumez  <cdumez@apple.com>

        <input type="time">'s range should be reversible
        https://bugs.webkit.org/show_bug.cgi?id=233835

        Reviewed by Darin Adler.

        <input type="time">'s range should be reversible when checking for overflow / underflow:
        - https://html.spec.whatwg.org/#has-a-periodic-domain

        No new tests, rebaselined existing tests.

        * html/InputType.cpp:
        (WebCore::InputType::rangeUnderflow const):
        (WebCore::InputType::rangeOverflow const):
        * html/StepRange.cpp:
        (WebCore::StepRange::StepRange):
        * html/StepRange.h:
        (WebCore::StepRange::isReversible const):
        * html/TimeInputType.cpp:
        (WebCore::TimeInputType::createStepRange const):

2021-12-06  Said Abou-Hallawa  <said@apple.com>

        [GPU Process] Make FilterEffect calculate the primitive subregion only when needed
        https://bugs.webkit.org/show_bug.cgi?id=232705
        rdar://85290142

        Reviewed by Cameron McCormack.

        In this patch:

        1. resultColorSpace() will return colorSpace() from a FilterImageVector
           instead of returning the resultColorSpace() of the FilterEffect.

        2. Filter::clampFilterRegionIfNeeded() will clamp the filterRegion() 
           instead of clamping the maxEffectRect of the lastEffect() since all
           the primitiveSubregions and the imageRects have to clipped to the
           filterRegion().

        3. determineFilterPrimitiveSubregion() is replaced by calculatePrimitiveSubregion()
           which will calculate the primitiveSubregion from a FilterImageVector
           and an optional FilterEffectGeometry.

        4. Many of FilterEffects are made protected instead of having them public.

        5. SVGFilterExpression will be defined as a Vector of SVGFilterExpressionTerm
           which is a struct of FilterEffect and optional FilterEffectGeometry.

        6. SVGFilter will replace the members whose types are FilterEffectVector
           and FilterEffectGeometryMap with a single member of type SVGFilterExpression.

        * Headers.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/filters/FEDisplacementMap.cpp:
        (WebCore::FEDisplacementMap::resultColorSpace const):
        * platform/graphics/filters/FEDisplacementMap.h:
        * platform/graphics/filters/Filter.cpp:
        (WebCore::Filter::clampFilterRegionIfNeeded):
        * platform/graphics/filters/Filter.h:
        (WebCore::Filter::effectGeometry const): Deleted.
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::calculatePrimitiveSubregion const):
        (WebCore::FilterEffect::apply):
        (WebCore::FilterEffect::externalRepresentation const):
        (WebCore::FilterEffect::determineFilterPrimitiveSubregion): Deleted.
        * platform/graphics/filters/FilterEffect.h:
        (WebCore::FilterEffect::resultColorSpace const):
        (WebCore::FilterEffect::filterPrimitiveSubregion const): Deleted.
        (WebCore::FilterEffect::setFilterPrimitiveSubregion): Deleted.
        * platform/graphics/filters/FilterFunction.h:
        (WebCore::FilterFunction::apply):
        * svg/graphics/filters/SVGFilter.cpp:
        (WebCore::SVGFilter::create):
        (WebCore::SVGFilter::supportsCoreImageRendering const):
        (WebCore::SVGFilter::lastEffect const):
        (WebCore::SVGFilter::apply):
        (WebCore::SVGFilter::clearResult):
        (WebCore::SVGFilter::effectGeometry const): Deleted.
        * svg/graphics/filters/SVGFilter.h:
        * svg/graphics/filters/SVGFilterBuilder.cpp:
        (WebCore::SVGFilterBuilder::effectGeometry const):
        (WebCore::SVGFilterBuilder::buildEffectExpression const):
        (WebCore::SVGFilterBuilder::buildExpression const):
        (WebCore::buildEffectExpression): Deleted.
        * svg/graphics/filters/SVGFilterBuilder.h:
        (WebCore::SVGFilterBuilder::takeEffectGeometryMap): Deleted.
        * svg/graphics/filters/SVGFilterExpression.h: Added.

2021-12-06  Ryan Haddad  <ryanhaddad@apple.com>

        REGRESSION (r286507): [macOS] Many file system access layout tests became flaky failures
        https://bugs.webkit.org/show_bug.cgi?id=233892

        Unreviewed, revert r286507.

        * Modules/filesystemaccess/FileSystemStorageConnection.h:

2021-12-06  Sam Weinig  <weinig@apple.com>

        [CSS Color 5] Update color-mix() to support srgb-linear and alpha premultiplication
        https://bugs.webkit.org/show_bug.cgi?id=233862

        Reviewed by Cameron McCormack.

        - Updates color-mix() to support srgb-linear interpolation.
        - Updates color-mix() to interpolate using alpha premultiplied colors.
        - Moves interpolation normalization to ColorInterpolation.h so that it
          can be shared in the future. Adds AlphaPremulitplied parameter to
          ColorInterpolationMethod to allow specifying the behavior desired.
          Also adds encoding/decoding of ColorInterpolationMethod which will
          be needed shortly.

        * Headers.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        Add new files.

        * css/CSSValueKeywords.in:
        Add reference (commented out, since it is also defined above) for srgb-linear in the color-mix section.

        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::consumeColorInterpolationMethod):
        Add support for parsing srgb-linear as a color-interpolation-method color space.

        (WebCore::CSSPropertyParserHelpers::makeCanonicalColor):
        (WebCore::CSSPropertyParserHelpers::makeCanonicalColor<HWBA<float>>):
        (WebCore::CSSPropertyParserHelpers::makeCanonicalColor<HSLA<float>>):
        With much of makeColorTypeByNormalizingComponentsAfterMix moving to ColorNormalization,
        the CSS specific parts are still needed here, which just convert HWBA and HSLA colors
        to SRGBA<uint8_t> to match parsing.

        (WebCore::CSSPropertyParserHelpers::mixColorComponentsUsingColorInterpolationMethod):
        Utilize new interpolateColorComponents<> function to do the interpolation.

        (WebCore::CSSPropertyParserHelpers::normalizeHue): Deleted.
        (WebCore::CSSPropertyParserHelpers::normalizeWhitenessBlackness): Deleted.
        (WebCore::CSSPropertyParserHelpers::makeColorTypeByNormalizingComponentsAfterMix): Deleted.
        (WebCore::CSSPropertyParserHelpers::makeColorTypeByNormalizingComponentsAfterMix<HWBA<float>>): Deleted.
        (WebCore::CSSPropertyParserHelpers::makeColorTypeByNormalizingComponentsAfterMix<HSLA<float>>): Deleted.
        (WebCore::CSSPropertyParserHelpers::makeColorTypeByNormalizingComponentsAfterMix<LCHA<float>>): Deleted.
        (WebCore::CSSPropertyParserHelpers::makeColorTypeByNormalizingComponentsAfterMix<OKLCHA<float>>): Deleted.
        Moved to ColorNormalization.h

        * platform/graphics/ColorInterpolation.h:
        (WebCore::preInterpolationNormalizationForComponent):
        (WebCore::preInterpolationNormalization):
        (WebCore::postInterpolationNormalizationForComponent):
        (WebCore::postInterpolationNormalization):
        (WebCore::interpolateColorComponents):
        Move complete interpolation here from CSSPropertyParserHelpers and add support for optionally
        interpolating using alpha premultiplied colors.

        (WebCore::ColorInterpolationMethod::encode const):
        (WebCore::ColorInterpolationMethod::decode):
        Add encode/decode for ColorInterpolationMethod so it can be used over IPC. Not currently needed
        but will be needed soon for use with Gradient.

        * platform/graphics/ColorModels.h:
        Add coordinateSystem constexpr property to each model. Used mostly to identify which color models have
        special behavior due to a hue component.

        * platform/graphics/ColorNormalization.h: Added.
        (WebCore::normalizeWhitenessBlackness):
        (WebCore::normalizeHue):
        (WebCore::makeColorTypeByNormalizingComponents):
        (WebCore::makeColorTypeByNormalizingComponents<HWBA<float>>):
        (WebCore::makeColorTypeByNormalizingComponents<HSLA<float>>):
        (WebCore::makeColorTypeByNormalizingComponents<LCHA<float>>):
        (WebCore::makeColorTypeByNormalizingComponents<OKLCHA<float>>):
        Split out of CSSPropertyParserHelpers so it can be used by the interpolation code.

2021-12-06  Simon Fraser  <simon.fraser@apple.com>

        Add a call to os_signpost to tag a momentum scroll animation
        https://bugs.webkit.org/show_bug.cgi?id=233885

        Reviewed by Tim Horton.

        Use the momentum "Began" and "Ended" events to mark the start/end of a momentum scroll
        as an animation via os_signost.

        Put the code in ScrollingEffectsController rather than MomentumEventDispatcher so that
        non-generated momentum gets marked too.

        * platform/mac/ScrollingEffectsController.mm:
        (WebCore::ScrollingEffectsController::handleWheelEvent):

2021-12-06  Devin Rousso  <drousso@apple.com>

        Change IDL `Date` to be backed by `WallTime` to avoid confusion when converting to native dates
        https://bugs.webkit.org/show_bug.cgi?id=233781

        Reviewed by Darin Adler.

        JS `Date` is milliseconds-based, but some native dates (e.g. `NSDate`) are seconds-based.
        `WallTime` will help avoid confusion since not a generic type (e.g. `double`) and instead
        has explicitly defined conversion methods to seconds, milliseconds, etc..

        * bindings/IDLTypes.h:
        (WebCore::IDLDate::nullValue):
        (WebCore::IDLDate::isNullValue):
        (WebCore::IDLDate::extractValueFromNullable):
        * bindings/js/JSDOMConvertDate.h:
        (WebCore::Converter<IDLDate>::convert):
        (WebCore::JSConverter<IDLDate>::convert):
        * bindings/js/JSDOMConvertDate.cpp:
        (WebCore::jsDate):
        (WebCore::valueToDate):

        * Modules/applepay/ApplePayLineItem.h:
        (WebCore::ApplePayLineItem::decode):
        * Modules/applepay/cocoa/PaymentSummaryItemsCocoa.mm:
        (WebCore::toDate):
        * bindings/js/IDBBindingUtilities.cpp:
        (WebCore::get):
        (WebCore::toJS):
        (WebCore::createIDBKeyFromValue):
        * html/BaseDateAndTimeInputType.h:
        * html/DateTimeLocalInputType.cpp:
        (WebCore::DateTimeLocalInputType::valueAsDate const):
        (WebCore::DateTimeLocalInputType::setValueAsDate const):
        * html/BaseDateAndTimeInputType.cpp:
        (WebCore::BaseDateAndTimeInputType::valueAsDate const):
        (WebCore::BaseDateAndTimeInputType::setValueAsDate const):
        * html/DateTimeLocalInputType.h:
        * html/HTMLInputElement.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::valueAsDate const):
        (WebCore::HTMLInputElement::setValueAsDate):
        * html/InputType.h:
        * html/InputType.cpp:
        (WebCore::InputType::valueAsDate const):
        (WebCore::InputType::setValueAsDate const):
        * html/MonthInputType.h:
        * html/MonthInputType.cpp:
        (WebCore::MonthInputType::valueAsDate const):

        * html/HTMLMediaElement.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::getStartDate const):
        This also fixes an apparently longstanding bug in that `MediaTime::toDouble` is apparently a
        seconds-based value, so this is the one case that doesn't need `Seconds::fromMilliseconds`.

2021-12-06  Patrick Angle  <pangle@apple.com>

        Web Inspector: Support Cascade Layers in the Styles sidebar
        https://bugs.webkit.org/show_bug.cgi?id=233208

        Reviewed by Devin Rousso.

        Test: inspector/css/getMatchedStylesForNodeLayerGrouping.html

        Add support for parsing and grouping CSS `@layer` rules in `InspectorStyleSheet` to the existing paths for
        handling other groupings so that the frontend is made aware of rules wrapped inside a layer or multiple layers.

        * Headers.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        - CompiledSelector.h needs to be exported as a private header to include in WebKitLegacy's build, since it is
        imported by StyleRule.h, which is now imported by CSSImportRule.h, which is imported in WebKitLegacy.

        * css/CSSImportRule.cpp:
        (WebCore::CSSImportRule::cascadeLayerName const):
        * css/CSSImportRule.h:
        * css/CSSLayerRule.cpp:
        (WebCore::CSSLayerRule::cssText const):
        (WebCore::CSSLayerRule::layerName const):
        (WebCore::CSSLayerRule::stringFromCascadeLayerName):
        * css/CSSLayerRule.h:
        * inspector/InspectorStyleSheet.cpp:
        (flattenSourceData):
        (WebCore::asCSSRuleList):
        (WebCore::buildArrayForGroupings):
        * style/InspectorCSSOMWrappers.cpp:
        (WebCore::Style::InspectorCSSOMWrappers::collect):

2021-12-06  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, add some missing #includes in WebCore

        Add several missing `#include`-s, which currently aren't causing any issues due to unified sources (but will
        once I introduce several new source files in `WebCore/Modules` in a future patch).

        * Modules/web-locks/WebLockRegistry.cpp:
        * page/Page.cpp:
        * page/PageConfiguration.h:

2021-12-06  Antoine Quint  <graouts@webkit.org>

        [Web Animations] Add a way to run scripted animations
        https://bugs.webkit.org/show_bug.cgi?id=233869
        rdar://85983542

        Reviewed by Dean Jackson.

        Tests: webanimations/custom-effect/custom-effect.html
               webanimations/custom-effect/document-timeline-animate.html

        This patch adds two new Web-exposed features to allow authors to write callback-based animations
        leveraging the full power of the Web Animations model.

        First, we add a new AnimationEffect subclass which wraps a callback to be executed on every tick
        of the associated animation's timeline: CustomEffect. It can be constructed by providing a JS function
        as its first parameter, and either a number or a dictionary to provide timing properties for the effect.
        This is similar to how KeyframeEffect will accept a keyframes object and then timing data. The callback
        is provided the effect progress as its sole parameter. Web authors can use this new interface as follows:

            const animation = new Animation;
            animation.effect = new CustomEffect(progress => { … }, 1000);
            animation.play();

        Second, to make starting callback-based animations more straightforward and in a very similar fashion
        to how keyframe animations can be initiated on an element using Element.animate(), we introduce a new
        animate() method on DocumentTimeline, allowing the previous exmaple to be written as:

            const animation = document.timeline.animate(progress => { … }, 1000);

        This simple approach allows Web authors to move past the simple use of requestAnimationFrame() and harness
        the Web Animations timing model which will let them pause and resume animations, seek them, control their
        playback rate, apply easing, respond to the "finished" promise, etc.

        The code itself is very simple, CustomEffect is simply an AnimationEffect subclass that indicates that it's
        always interested in scheduling updates while active using the ticksContinouslyWhileActive() method. This
        means that all the scheduling logic contained in WebAnimation and AnimationEffect applies, allowing callbacks
        to not be fired when the animation is paused or when the page is suspended, or fired sparingly when a steps()
        timing function is specified.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Headers.cmake:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * animation/AnimationEffect.h:
        (WebCore::AnimationEffect::isCustomEffect const):
        * animation/CustomAnimationOptions.h: Added.
        * animation/CustomAnimationOptions.idl: Added.
        * animation/CustomEffect.cpp: Added.
        (WebCore::CustomEffect::create):
        (WebCore::CustomEffect::CustomEffect):
        (WebCore::CustomEffect::animationDidTick):
        * animation/CustomEffect.h: Added.
        (WebCore::CustomEffect::~CustomEffect):
        * animation/CustomEffect.idl: Added.
        * animation/CustomEffectCallback.h: Added.
        * animation/CustomEffectCallback.idl: Added.
        * animation/DocumentTimeline.cpp:
        (WebCore::DocumentTimeline::animate):
        * animation/DocumentTimeline.h:
        * animation/DocumentTimeline.idl:
        * bindings/js/WebCoreBuiltinNames.h:

2021-12-06  Rob Buis  <rbuis@igalia.com>

        Null check in shouldUseBreakElement
        https://bugs.webkit.org/show_bug.cgi?id=229275

        Reviewed by Ryosuke Niwa.

        Need to null check node in shouldUseBreakElement.
        Also bail out early in InsertLineBreakCommand::doApply
        in case position is not editable.

        Test: editing/execCommand/insert-line-break-crash.html

        * editing/InsertLineBreakCommand.cpp:
        (WebCore::InsertLineBreakCommand::shouldUseBreakElement):
        (WebCore::InsertLineBreakCommand::doApply):

2021-12-06  Tadeu Zagallo  <tzagallo@apple.com>

        Restore navigator.hardwareConcurrency
        https://bugs.webkit.org/show_bug.cgi?id=233381
        <rdar://85023911>

        Reviewed by Saam Barati.

        Navigator.hardwareConcurrency was removed in r219379, but it is now used
        by emscripten to implement std::thread::hardware_concurrency()

        Test: fast/dom/navigator-hardwareConcurrency.html

        * page/Navigator.idl:
        * page/NavigatorBase.cpp:
        (WebCore::NavigatorBase::hardwareConcurrency):
        * page/NavigatorBase.h:
        * page/WorkerNavigator.idl:

2021-12-06  Said Abou-Hallawa  <said@apple.com>
        [GPU Process] (REGRESSION r285597): Set the filterRegion of the CSSFilter after it is created
        https://bugs.webkit.org/show_bug.cgi?id=233849

        Reviewed by Cameron McCormack.

        In this patch:

        1. sourceImageRect is no longer passed as an argument to SVGFilter. It
           should be passed only when SVGFilter::apply() is called.

        2. CSSFilter::create() will create and build the FilterFunctions from the
           FilterOperations. So we have to pass the targetBoundingBox since the
           FilterEffects will need it when calculating the outsets.

        3. The steps in RenderLayerFilters::beginFilterEffect() are:
           a) Recreate the CSSFilter if the targetBoundingBox changes.
           b) Calculate the filterRegion = targetBoundingBox + outsets
           c) Clamp the filterRegion if needed. This will change the filterScale.
           d) Set sourceImageRect = filterRegion.
           e) Recreate the sourceImage if needed.
           f) setup the context for drawing the target renderer.

        4. Managing the targetBoundingBox and the filterRegion is moved from 
           CSSFilter to RenderLayerFilters.

        * css/CSSFilterImageValue.cpp:
        (WebCore::CSSFilterImageValue::image):
        * platform/graphics/filters/Filter.cpp:
        (WebCore::Filter::Filter):
        * platform/graphics/filters/Filter.h:
        (WebCore::Filter::Filter):
        * rendering/CSSFilter.cpp:
        (WebCore::CSSFilter::create):
        (WebCore::CSSFilter::CSSFilter):
        (WebCore::createSVGFilter):
        (WebCore::CSSFilter::buildFilterFunctions):
        (WebCore::CSSFilter::apply):
        (WebCore::CSSFilter::setFilterRegion):
        (WebCore::m_hasFilterThatShouldBeRestrictedBySecurityOrigin): Deleted.
        (WebCore::CSSFilter::updateBackingStoreRect): Deleted.
        (WebCore::CSSFilter::computeSourceImageRectForDirtyRect): Deleted.
        (WebCore::CSSFilter::setSourceImageRect): Deleted.
        * rendering/CSSFilter.h:
        * rendering/RenderLayerFilters.cpp:
        (WebCore::RenderLayerFilters::buildFilter):
        (WebCore::RenderLayerFilters::allocateBackingStoreIfNeeded):
        (WebCore::RenderLayerFilters::beginFilterEffect):
        (WebCore::RenderLayerFilters::applyFilterEffect):
        (WebCore::RenderLayerFilters::allocateBackingStore): Deleted.
        * rendering/RenderLayerFilters.h:
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::applyResource):
        * rendering/svg/SVGRenderTreeAsText.cpp:
        (WebCore::writeSVGResourceContainer):
        * svg/graphics/filters/SVGFilter.cpp:
        (WebCore::SVGFilter::create):
        (WebCore::SVGFilter::SVGFilter):
        * svg/graphics/filters/SVGFilter.h:

2021-12-06  Alex Christensen  <achristensen@webkit.org>

        WKWebpagePreferences._activeContentRuleListActionPatterns should be an NSDictionary of identifier to allowed patterns
        https://bugs.webkit.org/show_bug.cgi?id=233842

        Reviewed by Timothy Hatcher.

        There's no need for nil to match everything because a pattern can be written to quickly match everything.
        There is a need for different extensions (with different identifiers) to have different active action permissions, though.

        * contentextensions/ContentExtensionsBackend.cpp:
        (WebCore::ContentExtensions::ContentExtensionsBackend::processContentRuleListsForLoad):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::DocumentLoader):
        (WebCore::DocumentLoader::setActiveContentRuleListActionPatterns):
        (WebCore::DocumentLoader::allowsActiveContentRuleListActionsForURL const):
        * loader/DocumentLoader.h:

2021-12-06  Antoine Quint  <graouts@webkit.org>

        Clean up virtual methods on AnimationEffect
        https://bugs.webkit.org/show_bug.cgi?id=233868

        Reviewed by Simon Fraser.

        To this day, the only concrete subclass of AnimationEffect has been KeyframeEffect. Soon, we'll introduce
        another concrete subclass for callback-based animations leveraging the Web Animations mode: CustomEffect. 
        To prepare for this new class, we clean up the virtual methods on AnimationEffect such that they make a
        bit more sense:

        - much of the implementation of timeToNextTick() is brought from KeyframeEffect to AnimationEffect to
        account for the cases which are purely based on timing properties shared by any potential AnimationEffect
        subclass,

        - we add a new ticksContinouslyWhileActive() method which allows subclasses to indicate whether they require
        continuous scheduling while active, which is true for KeyframeEffect unless it has no keyframes, no CSS
        properties set on its keyframes or is running fully accelerated,

        - much of the implementation of setAnimation() is brought from KeyframeEffect to AnimationEffect since
        updating the relevance of the animation based on a change of effect should apply to any AnimationEffect,

        - the apply() and invalidate() methods are moved from AnimationEffect to KeyframeEffect alone since they
        really are specific to KeyframeEffect's interaction with style resolution,

        - all the other virtual methods on AnimationEffect have stub implementations such that new subclasses
        only need to override them as required: animationDidTick(), animationDidPlay(),
        animationDidChangeTimingProperties(), animationWasCanceled(), animationSuspensionStateDidChange(bool)
        and animationTimelineDidChange(AnimationTimeline*).

        * animation/AnimationEffect.cpp:
        (WebCore::AnimationEffect::setAnimation):
        (WebCore::AnimationEffect::timeToNextTick const):
        * animation/AnimationEffect.h:
        (WebCore::AnimationEffect::animationDidTick):
        (WebCore::AnimationEffect::animationDidPlay):
        (WebCore::AnimationEffect::animationDidChangeTimingProperties):
        (WebCore::AnimationEffect::animationWasCanceled):
        (WebCore::AnimationEffect::animationSuspensionStateDidChange):
        (WebCore::AnimationEffect::animationTimelineDidChange):
        (WebCore::AnimationEffect::ticksContinouslyWhileActive const):
        (WebCore::AnimationEffect::setAnimation): Deleted.
        (WebCore::AnimationEffect::timeToNextTick const): Deleted.
        * animation/KeyframeEffect.cpp:
        (WebCore::KeyframeEffect::setAnimation):
        (WebCore::KeyframeEffect::ticksContinouslyWhileActive const):
        (WebCore::KeyframeEffect::timeToNextTick const):
        * animation/KeyframeEffect.h:
        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::invalidateEffect):
        (WebCore::WebAnimation::resolve):
        (WebCore::WebAnimation::timeToNextTick const):

2021-12-06  Nikolas Zimmermann  <nzimmermann@igalia.com>

        [LBSE] Toggling the Settings -> Enabled LBSE flag has no immediate effect
        https://bugs.webkit.org/show_bug.cgi?id=233871

        Reviewed by Rob Buis.

        Toggling "Enable layer-based SVG engine" in e.g. MiniBrowser or from JS has no immediate effect.
        A relayout is not enough: a full style / render tree rebuild is needed.

        Covered by existing tests.

        * page/SettingsBase.cpp:
        (WebCore::SettingsBase::layerBasedSVGEngineEnabledChanged): Rebuild style / renderers upon changes.
        * page/SettingsBase.h:

2021-12-06  Nikolas Zimmermann  <nzimmermann@igalia.com>

        [LBSE] Add RenderObject::isSVGRootOrLegacySVGRoot() helper
        https://bugs.webkit.org/show_bug.cgi?id=233870

        Reviewed by Rob Buis.

        Preparations to begin a new RenderSVGRoot implementation for the
        layer-based SVG engine (LBSE).

        Add a helper function to identify either legacy SVG or LBSE root
        render objects (LegacyRenderSVGRoot and the upcoming RenderSVGRoot).

        Covered by existing tests, no change in behavior.

        * accessibility/AXObjectCache.cpp:
        (WebCore::createFromRenderer):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::boundingBoxRect const):
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):
        * dom/Element.cpp:
        (WebCore::Element::boundingAbsoluteRectWithoutLayout):
        * inspector/InspectorOverlay.cpp:
        (WebCore::buildRendererHighlight):
        * layout/integration/LayoutIntegrationCoverage.cpp:
        (WebCore::LayoutIntegration::canUseForChild):
        * rendering/RenderGeometryMap.cpp:
        (WebCore::canMapBetweenRenderersViaLayers):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::beginTransparencyLayers):
        (WebCore::RenderLayer::calculateClipRects const):
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::canUseOffsetFromAncestor const):
        * rendering/RenderObject.cpp:
        (WebCore::objectIsRelayoutBoundary):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isLegacySVGRoot const):
        (WebCore::RenderObject::isSVGRootOrLegacySVGRoot const):
        * rendering/RenderReplaced.cpp:
        (WebCore::hasIntrinsicSize):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::layout):
        * rendering/svg/LegacyRenderSVGRoot.h:
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::layoutSizeOfNearestViewportChanged):
        * rendering/svg/SVGRenderingContext.cpp:
        (WebCore::SVGRenderingContext::prepareToRenderSVGContent):
        (WebCore::SVGRenderingContext::calculateTransformationToOutermostCoordinateSystem):
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::reportVisuallyNonEmptyContent):

2021-12-06  Antti Koivisto  <antti@apple.com>

        [LFC][Integration] Use end bits in text box iterator
        https://bugs.webkit.org/show_bug.cgi?id=233858

        Reviewed by Alan Bujtas.

        Make text box traversal work correctly in bidi context where encountering a different
        layout box does not necessarily mean there are no further text boxes for the layout box.

        * layout/formattingContexts/inline/InlineDisplayContentBuilder.cpp:
        (WebCore::Layout::InlineDisplayContentBuilder::processBidiContent):
        (WebCore::Layout::InlineDisplayContentBuilder::computeIsFirstIsLastBoxForInlineContent):

        Set the bits for all box types.

        * layout/formattingContexts/inline/display/InlineDisplayBox.h:
        (WebCore::InlineDisplay::Box::Box):
        (WebCore::InlineDisplay::Box::isTextOrSoftLineBreak const):
        (WebCore::InlineDisplay::Box::isFirstForLayoutBox const):
        (WebCore::InlineDisplay::Box::isLastForLayoutBox const):
        (WebCore::InlineDisplay::Box::setIsFirstForLayoutBox):
        (WebCore::InlineDisplay::Box::setIsLastForLayoutBox):
        (WebCore::InlineDisplay::Box::isFirstBox const): Deleted.
        (WebCore::InlineDisplay::Box::isLastBox const): Deleted.
        (WebCore::InlineDisplay::Box::setIsLastBox): Deleted.
        (WebCore::InlineDisplay::Box::setIsFirstBox): Deleted.

        Renamed for clarity and correctness.

        * layout/integration/InlineIteratorBoxModernPath.h:
        (WebCore::InlineIterator::BoxModernPath::isText const):
        (WebCore::InlineIterator::BoxModernPath::traverseNextTextBox):

        Use the isLastForLayoutBox bit to end the traversal.

        (WebCore::InlineIterator::BoxModernPath::traverseNextInlineBox):
        (WebCore::InlineIterator::BoxModernPath::traversePreviousInlineBox):
        (WebCore::InlineIterator::BoxModernPath::traverseNextWithSameLayoutBox):
        (WebCore::InlineIterator::BoxModernPath::traversePreviousWithSameLayoutBox):

        Factor into helpers.

        * layout/integration/InlineIteratorTextBox.h:

2021-12-05  Said Abou-Hallawa  <said@apple.com>

        [GPU Process] Add the encoding/decoding for Filter and FilterEffect
        https://bugs.webkit.org/show_bug.cgi?id=232844

        Reviewed by Wenson Hsieh.

        This patch adds the encoding and decoding for the FilterEffect and the
        Filter objects. Because these objects have super-classes, we are going
        to do the encoding and decoding through a new IPC class called
        FilterReference.

        The encoding and decoding of these classes will be needed in two cases:

        1) DisplayList::Recorder::drawFilteredImageBuffer()
        2) RemoteImageBufferProxy::filteredImage()

        A few things have not be done this patch yet:

        1) LightSource has not been encoded/decoded
        2) FELighting classes have not been encoded/decoded
        3) FEImage has not been encoded/decoded
        4) SVGFilter has not been encoded/decoded

        This patch does not change any behavior even if the GPU Process for DOM
        rendering is enabled. The sourceImage for the filter and the filter image
        need to be of type of RemoteImageBufferProxy to this code to be called.

        * Headers.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/ConcreteImageBuffer.h:
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawFilteredImageBuffer):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/displaylists/DisplayList.cpp:
        (WebCore::DisplayList::DisplayList::append):
        * platform/graphics/displaylists/DisplayListItemBuffer.cpp:
        (WebCore::DisplayList::ItemHandle::apply):
        (WebCore::DisplayList::ItemHandle::destroy):
        (WebCore::DisplayList::ItemHandle::safeCopy const):
        * platform/graphics/displaylists/DisplayListItemType.cpp:
        (WebCore::DisplayList::sizeOfItemInBytes):
        (WebCore::DisplayList::isDrawingItem):
        (WebCore::DisplayList::isInlineItem):
        * platform/graphics/displaylists/DisplayListItemType.h:
        * platform/graphics/displaylists/DisplayListItems.cpp:
        (WebCore::DisplayList::DrawFilteredImageBuffer::DrawFilteredImageBuffer):
        (WebCore::DisplayList::DrawFilteredImageBuffer::apply const):
        (WebCore::DisplayList::DrawFilteredImageBuffer::apply):
        (WebCore::DisplayList::operator<<):
        * platform/graphics/displaylists/DisplayListItems.h:
        (WebCore::DisplayList::DrawFilteredImageBuffer::sourceImageIdentifier const):
        (WebCore::DisplayList::DrawFilteredImageBuffer::sourceImageRect const):
        (WebCore::DisplayList::DrawFilteredImageBuffer::globalBounds const):
        (WebCore::DisplayList::DrawFilteredImageBuffer::localBounds const):
        * platform/graphics/displaylists/DisplayListRecorder.cpp:
        (WebCore::DisplayList::Recorder::drawFilteredImageBuffer):
        * platform/graphics/displaylists/DisplayListRecorder.h:
        * platform/graphics/displaylists/DisplayListRecorderImpl.cpp:
        (WebCore::DisplayList::RecorderImpl::recordDrawFilteredImageBuffer):
        * platform/graphics/displaylists/DisplayListRecorderImpl.h:
        * platform/graphics/filters/FEBlend.h:
        (WebCore::FEBlend::encode const):
        (WebCore::FEBlend::decode):
        * platform/graphics/filters/FEColorMatrix.h:
        (WebCore::FEColorMatrix::encode const):
        (WebCore::FEColorMatrix::decode):
        * platform/graphics/filters/FEComponentTransfer.h:
        (WebCore::ComponentTransferFunction::encode const):
        (WebCore::ComponentTransferFunction::decode):
        (WebCore::FEComponentTransfer::encode const):
        (WebCore::FEComponentTransfer::decode):
        * platform/graphics/filters/FEComposite.h:
        (WebCore::FEComposite::encode const):
        (WebCore::FEComposite::decode):
        * platform/graphics/filters/FEConvolveMatrix.h:
        (WebCore::FEConvolveMatrix::encode const):
        (WebCore::FEConvolveMatrix::decode):
        * platform/graphics/filters/FEDiffuseLighting.h:
        (WebCore::FEDiffuseLighting::decode):
        * platform/graphics/filters/FEDisplacementMap.h:
        (WebCore::FEDisplacementMap::encode const):
        (WebCore::FEDisplacementMap::decode):
        * platform/graphics/filters/FEDropShadow.h:
        (WebCore::FEDropShadow::encode const):
        (WebCore::FEDropShadow::decode):
        * platform/graphics/filters/FEFlood.h:
        (WebCore::FEFlood::encode const):
        (WebCore::FEFlood::decode):
        * platform/graphics/filters/FEGaussianBlur.h:
        (WebCore::FEGaussianBlur::encode const):
        (WebCore::FEGaussianBlur::decode):
        * platform/graphics/filters/FELighting.h:
        (WebCore::FELighting::encode const):
        (WebCore::FELighting::decode):
        * platform/graphics/filters/FEMerge.cpp:
        (WebCore::FEMerge::create):
        (WebCore::FEMerge::FEMerge):
        * platform/graphics/filters/FEMerge.h:
        (WebCore::FEMerge::encode const):
        (WebCore::FEMerge::decode):
        * platform/graphics/filters/FEMorphology.h:
        (WebCore::FEMorphology::encode const):
        (WebCore::FEMorphology::decode):
        * platform/graphics/filters/FEOffset.h:
        (WebCore::FEOffset::encode const):
        (WebCore::FEOffset::decode):
        * platform/graphics/filters/FESpecularLighting.h:
        (WebCore::FESpecularLighting::decode):
        * platform/graphics/filters/FETile.h:
        * platform/graphics/filters/FETurbulence.h:
        (WebCore::FETurbulence::encode const):
        (WebCore::FETurbulence::decode):
        * platform/graphics/filters/Filter.cpp:
        (WebCore::Filter::apply):
        * platform/graphics/filters/Filter.h:
        (WebCore::Filter::setClipOperation):
        * platform/graphics/filters/SourceGraphic.h:
        * rendering/CSSFilter.cpp:
        (WebCore::CSSFilter::create):
        (WebCore::CSSFilter::CSSFilter):
        * rendering/CSSFilter.h:
        * rendering/RenderLayerFilters.cpp:
        (WebCore::RenderLayerFilters::applyFilterEffect):
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::postApplyResource):
        * svg/SVGFEMergeElement.cpp:
        (WebCore::SVGFEMergeElement::build const):

2021-12-04  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Compute isFirstBox/isLastBox for text content
        https://bugs.webkit.org/show_bug.cgi?id=233850

        Reviewed by Antti Koivisto.

        This is in preparation for helping the iterator interface to compute renderer (layout box) boundaries for text content.

        * layout/formattingContexts/inline/InlineDisplayContentBuilder.cpp:
        (WebCore::Layout::InlineDisplayContentBuilder::appendTextDisplayBox):
        (WebCore::Layout::InlineDisplayContentBuilder::computeIsFirstIsLastBoxForInlineContent):
        * layout/formattingContexts/inline/InlineDisplayContentBuilder.h:
        * layout/formattingContexts/inline/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::layoutInFlowContent):
        (WebCore::Layout::InlineFormattingContext::lineLayoutForIntergration):
        * layout/formattingContexts/inline/display/InlineDisplayBox.h:
        (WebCore::InlineDisplay::Box::setIsFirstBox):

2021-12-04  Antoine Quint  <graouts@webkit.org>

        CSS animation sorting may crash due to AnimationList copy upon CSS Animation removal
        https://bugs.webkit.org/show_bug.cgi?id=233819
        rdar://85596065

        Reviewed by Dean Jackson and Darin Adler.

        Test: webanimations/css-animation-sorting-crash-2.html

        When resolving animations during style resolution, we sort them to ensure they're in the right
        composite order as defined by the Web Animations and related specifications, in this case the
        CSS Animations specification defining how CSS Animations set on a given element are sorted.

        Indeed, a given element may have multiple animations specified on it, and in fact it may have
        multiple instances of the same animation. For instance, setting `animation-name: anim, anim, anim`
        would create three separate CSS Animations all with the same keyframes and timing properties.

        The CSS machinery within WebKit creates an AnimationList to reference the animations parsed from
        CSS. Each animation is an Animation object. These Animation objects are ref-counted.

        When we update animations, using Styleable::updateCSSAnimations(), we compare the current AnimationList
        for this style resolution, with the previous AnimationList specified when this method was last called
        for this element. The outcome of this comparison will yield new CSSAnimation objects, the removal of
        such objects or the update of existing objects by setting the Animation object as its "backing animation".

        When we're done we keep a reference to the current AnimationList on the element's KeyframeEffectStack.

        Later, when we resolve animations during style resolution and we get to sort the animations, we will
        use the AnimationList which contains the Animation objects in the order they were specified in the
        `animation-list` property to establish the order in which the CSSAnimation objects should be ordered
        relative to one another, based on their "backing animation" which must be an Animation object found
        in the AnimationList.

        If we fail to find matching Animation objects, we crash due to a call to RELEASE_ASSERT_NOT_REACHED()
        in compareCSSAnimations(const CSSAnimation&, const CSSAnimation&).

        So, why would we ever get in a situation where we reach this RELEASE_ASSERT_NOT_REACHED? Well, there is
        a situation where we manipulate the AnimationList set on the KeyframeEffectStack in Styleable::updateCSSAnimations().
        That case is when Styleable::cancelDeclarativeAnimations() is called, and we call the static function
        removeCSSAnimationCreatedByMarkup(). In this function, we actually make a copy of the previously recorded
        AnimationList because that list is `const` so we can't manipulate it directly. To make this copy we call
        AnimationList::copy() which creates a new AnimationList object, which itself is not the issue, but also
        makes copies of each Animation object within. Now, that's the problem, because at this point our pointer
        comparisons in compareCSSAnimations() will fail since the Animation objects we recorded in
        Styleable::updateCSSAnimations() will no longer be the same instances as those in the manipulated AnimationList.

        To fix this, we add a new AnimationList::shallowCopy() method to specify whether we want clones or references
        of the Animation members, and when calling removeCSSAnimationCreatedByMarkup(), we use this new method such
        that we get references and not clones. This ensures that removing an animation from the list will indeed
        create a new AnimationList, but the two lists will have references to the same Animation objects.

        * platform/animation/AnimationList.cpp:
        (WebCore::AnimationList::AnimationList):
        * platform/animation/AnimationList.h:
        (WebCore::AnimationList::copy const):
        (WebCore::AnimationList::shallowCopy const):
        * style/Styleable.cpp:
        (WebCore::removeCSSAnimationCreatedByMarkup):

2021-12-04  Rob Buis  <rbuis@igalia.com>

        Fix parentNode in CompositeEditCommand::splitTreeToNode
        https://bugs.webkit.org/show_bug.cgi?id=230710

        Reviewed by Ryosuke Niwa.

        Fix parentNode handling in CompositeEditCommand::splitTreeToNode and
        also a few more IndentOutdentCommand methods to support the test case.

        Test: editing/execCommand/outdent-cut-crash.html

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::moveParagraphs):
        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::indentIntoBlockquote): do not call positionInParentAfterNode
        if insertNodeBefore failed.
        (WebCore::IndentOutdentCommand::outdentParagraph): need to check for null positions
        before calling moveParagraphs.

2021-12-04  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Set BoxGeometry for bidi inline boxes
        https://bugs.webkit.org/show_bug.cgi?id=233616

        Reviewed by Antti Koivisto.

        In this patch we compute the BoxGeometry values for the bidi inline boxes.
        BoxGeometry is mostly used for boundingClientRect/offsetWidth(left etc).

        * layout/formattingContexts/inline/InlineDisplayContentBuilder.cpp:
        (WebCore::Layout::InlineDisplayContentBuilder::processBidiContent):

2021-12-04  Alex Christensen  <achristensen@webkit.org>

        Prepare for SharedWorker implementation
        https://bugs.webkit.org/show_bug.cgi?id=233848

        Reviewed by Chris Dumez.

        This splits off the parts of bug 230382 that don't change behavior.

        * workers/AbstractWorker.cpp:
        (WebCore::AbstractWorker::workerFetchOptions):
        * workers/AbstractWorker.h:
        * workers/DedicatedWorkerThread.h:
        * workers/Worker.cpp:
        (WebCore::Worker::Worker):
        (WebCore::Worker::create):
        (WebCore::Worker::notifyFinished):
        * workers/Worker.h:
        * workers/WorkerOptions.h:
        * workers/WorkerOrWorkletScriptController.cpp:
        * workers/WorkerOrWorkletScriptController.h:
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::createThread):
        * workers/WorkerThread.h:
        (WebCore::WorkerThread::isServiceWorkerThread const): Deleted.
        * workers/service/context/ServiceWorkerThread.h:

2021-12-03  Said Abou-Hallawa  <said@apple.com>

        [GPU Process] (REGRESSION r285597): Fix SVGFilter clamping calculation
        https://bugs.webkit.org/show_bug.cgi?id=233843

        Reviewed by Simon Fraser.

        In this patch:

        1. lastEffect() is made virtual function of Filter and it's already 
           implemented as non-virtual function in both CSSFilter and SVGFilter.

        2. The clamping calculations for SVGFilter and CSSFilter are merged in
           one function called Filter::clampFilterRegionIfNeeded(). This merge
           makes the new function is the only caller to FilterEffect::maxEffectRect().

        3. Remove FilterEffect::maxEffectRect() . It can be calculated by clipping
           the FilterEffect::filterPrimitiveSubregion() to filterRegion() and then
           scaling the result by filterScale().

        4. In RenderSVGResourceFilter::applyResource() we need to pass the non-
           scaled drawingRegion to ImageBuffer::sizeNeedsClamping() because this
           function starts by scaling the argument 'size' by the argument 'scale'.
           So we were doubling the scaling by passing 'absoluteDrawingRegion'

        5. SVGRenderingContext::createImageBuffer() needs to use ImageBuffer::
           sizeNeedsClamping() instead of using ImageBuffer::clampedSize(). The
           former function clamps the size to the MaxClampedArea. But the later
           function shrinks the size to { MaxClampedLength, MaxClampedLength }.
           When calling createImageBuffer() from RenderSVGResourceFilter::
           applyResource() we do not expect any further clamping. But if we pass
           a size with a side  greater than MaxClampedLength to clampedSize(),
           it  will be clamped even if the area is less than MaxClampedArea. And
           for filters we clamp to the area.

        * platform/graphics/filters/Filter.cpp:
        (WebCore::Filter::clampFilterRegionIfNeeded):
        * platform/graphics/filters/Filter.h:
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::determineFilterPrimitiveSubregion):
        (WebCore::FilterEffect::apply):
        * platform/graphics/filters/FilterEffect.h:
        (WebCore::FilterEffect::maxEffectRect const): Deleted.
        (WebCore::FilterEffect::setMaxEffectRect): Deleted.
        * rendering/CSSFilter.cpp:
        (WebCore::CSSFilter::lastEffect const):
        (WebCore::CSSFilter::lastEffect): Deleted.
        (WebCore::CSSFilter::determineFilterPrimitiveSubregion): Deleted.
        * rendering/CSSFilter.h:
        * rendering/RenderLayerFilters.cpp:
        (WebCore::RenderLayerFilters::beginFilterEffect):
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::applyResource):
        * rendering/svg/SVGRenderingContext.cpp:
        (WebCore::SVGRenderingContext::createImageBuffer):
        * svg/graphics/filters/SVGFilter.h:

2021-12-03  Chris Dumez  <cdumez@apple.com>

        Add BroadcastChannel, COOP, COEP and Web Locks to features.json
        https://bugs.webkit.org/show_bug.cgi?id=233839

        Reviewed by Alex Christensen.

        * features.json:

2021-12-03  John Wilander  <wilander@apple.com>

        PCM: Unlinkable tokens for triggering event to prevent fraud
        https://bugs.webkit.org/show_bug.cgi?id=233673
        <rdar://79426347>

        Reviewed by Alex Christensen.

        This patch allows triggering events to have an optional query parameter like this:
        https://destination.example/.well-known/private-click-measurement/trigger-attribution/11?attributionDestinationNonce=ABCDEFabcdef0123456789

        The presence of an attributionDestinationNonce triggers PrivateClickMeasurementManager to
        ask the server to sign an unlinkable token for the triggering event and then stores the
        corresponding secret token plus the signature for later inclusion in the attribution report.

        The WebCore changes introduce these new structs and data fields in
        WebCore::PrivateClickMeasurement:
        - EphemeralDestinationNonce
        - UnlinkableToken (base class for the specific ones for source and destination)
        - SourceUnlinkableToken
        - DestinationUnlinkableToken
        - SecretToken (base class for the specific ones for source and destination)
        - SourceSecretToken
        - DestinationSecretToken

        WebCore::PrivateClickMeasurement::AttributionTriggerData now has these optional fields:
        - ephemeralDestinationNonce
        - destinationUnlinkableToken
        - destinationSecretToken
        - destinationSite

        The remaining changes are setters/getters and creator functions for those data fields.

        New API/unit test PrivateClickMeasurement.DestinationClickFraudPrevention.

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::parsePrivateClickMeasurement const):
        * loader/PrivateClickMeasurement.cpp:
        (WebCore::PrivateClickMeasurement::SecretToken::isolatedCopy const):
        (WebCore::PrivateClickMeasurement::SourceSecretToken::isolatedCopy const):
        (WebCore::PrivateClickMeasurement::DestinationSecretToken::isolatedCopy const):
        (WebCore::PrivateClickMeasurement::EphemeralNonce::isolatedCopy const):
        (WebCore::PrivateClickMeasurement::UnlinkableToken::isolatedCopy const):
        (WebCore::PrivateClickMeasurement::SourceUnlinkableToken::isolatedCopy const):
        (WebCore::PrivateClickMeasurement::DestinationUnlinkableToken::isolatedCopy const):
        (WebCore::PrivateClickMeasurement::parseAttributionRequestQuery):
        (WebCore::PrivateClickMeasurement::parseAttributionRequest):
        (WebCore::PrivateClickMeasurement::attributionReportJSON const):
        (WebCore::PrivateClickMeasurement::EphemeralNonce::isValid const):
        (WebCore::PrivateClickMeasurement::setEphemeralSourceNonce):
        (WebCore::PrivateClickMeasurement::tokenPublicKeyURL):
        (WebCore::PrivateClickMeasurement::tokenPublicKeyURL const):
        (WebCore::PrivateClickMeasurement::tokenSignatureURL):
        (WebCore::PrivateClickMeasurement::tokenSignatureURL const):
        (WebCore::PrivateClickMeasurement::AttributionTriggerData::tokenSignatureJSON const):
        (WebCore::PrivateClickMeasurement::SecretToken::isValid const):
        (WebCore::PrivateClickMeasurement::setDestinationSecretToken):
        (WebCore::PrivateClickMeasurement::EphemeralSourceNonce::isolatedCopy const): Deleted.
        (WebCore::PrivateClickMeasurement::EphemeralSourceNonce::isValid const): Deleted.
        (WebCore::PrivateClickMeasurement::SourceSecretToken::isValid const): Deleted.
        * loader/PrivateClickMeasurement.h:
        (WebCore::PrivateClickMeasurement::AttributionTriggerData::AttributionTriggerData):
        (WebCore::PrivateClickMeasurement::AttributionTriggerData::setDestinationUnlinkableTokenValue):
        (WebCore::PrivateClickMeasurement::AttributionTriggerData::setDestinationSecretToken):
        (WebCore::PrivateClickMeasurement::AttributionTriggerData::tokenPublicKeyURL const):
        (WebCore::PrivateClickMeasurement::AttributionTriggerData::tokenSignatureURL const):
        (WebCore::PrivateClickMeasurement::ephemeralSourceNonce const):
        (WebCore::PrivateClickMeasurement::sourceUnlinkableToken):
        (WebCore::PrivateClickMeasurement::decode):
        (WebCore::PrivateClickMeasurement::EphemeralNonce::encode const):
        (WebCore::PrivateClickMeasurement::EphemeralNonce::decode):
        (WebCore::PrivateClickMeasurement::AttributionTriggerData::encode const):
        (WebCore::PrivateClickMeasurement::AttributionTriggerData::decode):
        (WebCore::PrivateClickMeasurement::EphemeralSourceNonce::encode const): Deleted.
        (WebCore::PrivateClickMeasurement::EphemeralSourceNonce::decode): Deleted.
        * loader/cocoa/PrivateClickMeasurementCocoa.mm:
        (WebCore::PrivateClickMeasurement::calculateAndUpdateSourceUnlinkableToken):
        (WebCore::PrivateClickMeasurement::calculateAndUpdateDestinationUnlinkableToken):
        (WebCore::PrivateClickMeasurement::calculateAndUpdateUnlinkableToken):
        (WebCore::PrivateClickMeasurement::calculateAndUpdateSourceSecretToken):
        (WebCore::PrivateClickMeasurement::calculateAndUpdateDestinationSecretToken):
        (WebCore::PrivateClickMeasurement::calculateAndUpdateSecretToken):

2021-12-03  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Move the (bidi)display boxes horizontally by the inline box margin, border and padding end as needed
        https://bugs.webkit.org/show_bug.cgi?id=233744

        Reviewed by Antti Koivisto.

        Keep track of the inline box range in the context of display boxes so that we can adjust the content horizontally
        with the margin/border/padding end of the "last" inline box.
        We also set the width of the (fragmented inline box type of) display boxes here based on their content right position.

        * layout/formattingContexts/inline/InlineDisplayContentBuilder.cpp:
        (WebCore::Layout::InlineDisplayContentBuilder::processBidiContent):
        * layout/formattingContexts/inline/display/InlineDisplayBox.h:
        (WebCore::InlineDisplay::Box::setLogicalRight):
        * layout/layouttree/LayoutBoxGeometry.h:
        (WebCore::Layout::BoxGeometry::borderAndPaddingEnd const):

2021-12-03  Myles C. Maxfield  <mmaxfield@apple.com>

        Fix internal Apple builds

        Unreviewed.

        Turns out -weak_framework works if the framework isn't present at runtime, but
        still requires the framework to be present at build time.

        No new tests because there is no behavior change.

        * Configurations/WebCore.xcconfig:

2021-12-03  Sihui Liu  <sihui_liu@apple.com>

        Fetch and remove file system data via WKWebsiteDataStore
        https://bugs.webkit.org/show_bug.cgi?id=233567

        Reviewed by Youenn Fablet.

        * Modules/filesystemaccess/FileSystemStorageConnection.h:

2021-12-03  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Set the first/last box flag on the (bidi fragmented) inline box type of display boxes
        https://bugs.webkit.org/show_bug.cgi?id=233743

        Reviewed by Antti Koivisto.

        Keep track of the last constructed inline box type of display box position so that when we
        happen to create another fragment for this same inline box, we can change the 'isLastBox' box to false.

        * layout/formattingContexts/inline/InlineDisplayContentBuilder.cpp:
        (WebCore::Layout::InlineDisplayContentBuilder::insertInlineBoxDisplayBoxForBidiBoundary):
        (WebCore::Layout::InlineDisplayContentBuilder::processBidiContent):
        * layout/formattingContexts/inline/InlineDisplayContentBuilder.h:

2021-12-03  Chris Dumez  <cdumez@apple.com>

        Introduce WorkerGlobalScope::type() function
        https://bugs.webkit.org/show_bug.cgi?id=233793

        Reviewed by Alex Christensen.

        Introduce WorkerGlobalScope::type() function to replace isDedicatedWorkerGlobalScope() / isServiceWorkerGlobalScope()
        / isSharedWorkerGlobalScope(). This is extracted from Alex's large patch at Bug 230382.

        * workers/shared/SharedWorkerGlobalScope.h:
        (isType):

2021-12-03  Youenn Fablet  <youenn@apple.com>

        Improve dictionary-based DOMPromiseDeferred::settle
        https://bugs.webkit.org/show_bug.cgi?id=233751

        Reviewed by Chris Dumez.

        Make settle a templated function so that it can adapt to any ExceptionOr based type.
        Update call sites that use settle for non ExceptionOr types as they should either use reject or resolve directly.
        Covered by existing tests.

        * Modules/applepay/ApplePaySetup.cpp:
        (WebCore::ApplePaySetup::getSetupFeatures):
        (WebCore::ApplePaySetup::begin):
        (WebCore::ApplePaySetup::stop):
        * Modules/filesystemaccess/FileSystemDirectoryHandle.cpp:
        (WebCore::FileSystemDirectoryHandle::getFileHandle):
        (WebCore::FileSystemDirectoryHandle::getDirectoryHandle):
        (WebCore::FileSystemDirectoryHandle::resolve):
        * Modules/filesystemaccess/FileSystemFileHandle.cpp:
        (WebCore::FileSystemFileHandle::createSyncAccessHandle):
        * bindings/js/JSDOMPromiseDeferred.h:
        (WebCore::DOMPromiseDeferred::settle):
        (WebCore::DOMPromiseDeferred<IDLDictionary<T>>::resolve): Deleted.
        (WebCore::DOMPromiseDeferred<IDLDictionary<T>>::settle): Deleted.
        (WebCore::DOMPromiseDeferred<IDLInterface<T>>::resolve): Deleted.
        (WebCore::DOMPromiseDeferred<IDLInterface<T>>::settle): Deleted.
        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::getNavigationPreloadState):

2021-12-03  Antti Koivisto  <antti@apple.com>

        [:has() pseudo-class] Improve result caching
        https://bugs.webkit.org/show_bug.cgi?id=233806

        Reviewed by Simon Fraser.

        Improve caching to to avoid O(n^2) cases during invalidation and style resolution.

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::matchHasPseudoClass const):

        Cache matches as well as failures.
        Cache failures that don't apply to subtrees.
        Check cached matches and failures for all :has() match element types.

        * style/SelectorMatchingState.h:

2021-12-03  Alex Christensen  <achristensen@webkit.org>

        Add room for more bytecode in WKContentRuleList file format
        https://bugs.webkit.org/show_bug.cgi?id=233780

        Reviewed by Tim Hatcher.

        For rdar://72203352 we will need more bytecode.  This adds room for it without putting anything there yet.
        As long as we are updating the version number and forcing a recompile, I'm making the string serialization
        more like the other action serializations to be able to simplify the interpreter later.  I'm also shifting
        around a few bits in the bytecode to be more organized and reasonable.

        * contentextensions/CompiledContentExtension.h:
        * contentextensions/ContentExtensionStringSerialization.cpp:
        (WebCore::ContentExtensions::deserializeString):
        (WebCore::ContentExtensions::serializeString):
        (WebCore::ContentExtensions::stringSerializedLength):
        * contentextensions/DFABytecode.h:
        (WebCore::ContentExtensions::smallestPossibleJumpSize): Deleted.
        * contentextensions/DFABytecodeCompiler.cpp:
        (WebCore::ContentExtensions::smallestPossibleJumpSize):

2021-12-03  Eric Carlson  <eric.carlson@apple.com>

        DisplayCaptureSource doesn't initialize base class correctly
        https://bugs.webkit.org/show_bug.cgi?id=233722

        Reviewed by Youenn Fablet.

        Test: fast/mediastream/get-display-media-settings.html

        * platform/mediastream/RealtimeMediaSourceCenter.cpp:
        (WebCore::RealtimeMediaSourceCenter::createMediaStream): Pass hashSalt through.
        (WebCore::RealtimeMediaSourceCenter::getDisplayMediaDevices): Ditto.
        (WebCore::RealtimeMediaSourceCenter::validateRequestConstraintsAfterEnumeration): Ditto.
        * platform/mediastream/RealtimeMediaSourceCenter.h:

        * platform/mediastream/RealtimeMediaSourceFactory.h:
        * platform/mediastream/cocoa/DisplayCaptureSourceCocoa.cpp:
        (WebCore::DisplayCaptureSourceCocoa::create): Ditto.
        (WebCore::DisplayCaptureSourceCocoa::DisplayCaptureSourceCocoa): Ditto.
        * platform/mediastream/cocoa/DisplayCaptureSourceCocoa.h:

        * platform/mediastream/gstreamer/GStreamerCaptureDeviceManager.h:
        * platform/mediastream/gstreamer/GStreamerDisplayCaptureDeviceManager.cpp:
        (WebCore::GStreamerDisplayCaptureDeviceManager::createDisplayCaptureSource): Ditto.
        * platform/mediastream/gstreamer/GStreamerVideoCaptureSource.cpp:
        * platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp:
        * platform/mock/MockRealtimeMediaSourceCenter.cpp:
        * platform/mock/MockRealtimeMediaSourceCenter.cpp:
        * platform/mock/MockRealtimeVideoSource.cpp:
        (WebCore::MockRealtimeVideoSource::settings):

2021-12-03  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Move the (bidi)display boxes horizontally by the inline box margin, border and padding start as needed
        https://bugs.webkit.org/show_bug.cgi?id=233742

        Reviewed by Antti Koivisto.

        Re-visit the newly constructed display boxes and move them horizontally using the inline box margin, border and padding start values.
        Note that in this patch we don't yet handle the end side of the inline boxes.

        * layout/formattingContexts/inline/InlineDisplayContentBuilder.cpp:
        (WebCore::Layout::InlineDisplayContentBuilder::processBidiContent):

2021-12-03  Youenn Fablet  <youenn@apple.com>

        Persist NavigationPreloadState in service worker registration database
        https://bugs.webkit.org/show_bug.cgi?id=233698

        Reviewed by Chris Dumez.

        Whenever changing a service worker registration navigation state, trigger storing of the changes in the database.
        To do so, we add this state to ServiceWorkerContextData.
        When creating a SWServerRegistration, we set default values to false and "true"
        as per https://w3c.github.io/ServiceWorker/#service-worker-registration-navigation-preload-header-value.

        Covered by updated test.

        * workers/service/ServiceWorkerContextData.cpp:
        * workers/service/ServiceWorkerContextData.h:
        * workers/service/server/RegistrationDatabase.cpp:
        * workers/service/server/RegistrationStore.h:
        * workers/service/server/SWServer.cpp:
        * workers/service/server/SWServer.h:
        * workers/service/server/SWServerJobQueue.cpp:
        * workers/service/server/SWServerRegistration.cpp:
        * workers/service/server/SWServerRegistration.h:
        * workers/service/server/SWServerWorker.cpp:

2021-12-03  Alicia Boya García  <aboya@igalia.com>

        [MSE] Fix erase range to prevent accidental deletion in files with changing durations
        https://bugs.webkit.org/show_bug.cgi?id=233528

        Reviewed by Xabier Rodriguez-Calvar.

        In didReceiveSample(), eraseBeginTime was being set to
        highestPresentationTimestamp minus a tolerance. The tolerance is not
        needed since highestPresentationTimestamp is loaded from exact frame
        timestamps, and can cause accidental frame erasure in situations where
        there are frames with frames smaller than the tolerance, which is the
        case for certain MP4 files.

        Test: media/media-source/media-source-append-tiny-durations.html

        * platform/graphics/SourceBufferPrivate.cpp:
        (WebCore::SourceBufferPrivate::didReceiveSample):

2021-12-03  Kimmo Kinnunen  <kkinnunen@apple.com>

        Network process does not seem to initialize logging
        https://bugs.webkit.org/show_bug.cgi?id=233360
        <rdar://problem/85765854>

        Reviewed by Fujii Hironori.

        Export WebCore::logLevelString(), it's the canonical
        method to obtain WebCore log configuration string.
        It's already used in WebKit, but not on Cocoa platform
        where the export matters.

        * platform/LogInitialization.h:

2021-12-02  Chris Dumez  <cdumez@apple.com>

        html/semantics/forms/constraints/form-validation-validity-valid.html WPT test is failing
        https://bugs.webkit.org/show_bug.cgi?id=233778

        Reviewed by Darin Adler.

        html/semantics/forms/constraints/form-validation-validity-valid.html WPT test is failing in WebKit
        but passing in Blink & Gecko. The issue was caused by incorrect willValidate() checks inside
        HTMLInputElement::isValid() & HTMLSelectElement::valueMissing().

        No new tests, rebaselined existing tests.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::isValid const):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::valueMissing const):

2021-12-02  Simon Fraser  <simon.fraser@apple.com>

        A Safari tab can rarely get stuck in a state where rendering updates stop happening
        https://bugs.webkit.org/show_bug.cgi?id=233784
        rdar://85445072

        Reviewed by Chris Dumez.

        Sometimes a Safari tab can get into a state where rendering updates cease to happen,
        which manifests as partially broken scrolling, blank tiles revealed when scrolling,
        and somewhat broken page updates. I was able to sometimes reproduce this by clicking
        on links in eBay emails from Mail on a system with two displays.

        From the one time I reproduce with logging, the output indicated that DisplayRefreshMonitor::displayLinkFired()
        would early return because isPreviousFrameDone() was false. The only way for that to occur,
        barring memory corruption, is if DisplayRefreshMonitorMac::dispatchDisplayDidRefresh() returned early,
        which it does if the callback comes twice in a single event loop; this may explain the rarity.

        So fix DisplayRefreshMonitorMac::dispatchDisplayDidRefresh() call setIsPreviousFrameDone(true)
        so the next callback can make progress

        Also add some locking annotations and fix one missing lock, and some release logging.

        * platform/graphics/DisplayRefreshMonitor.cpp:
        (WebCore::DisplayRefreshMonitor::stop):
        (WebCore::DisplayRefreshMonitor::firedAndReachedMaxUnscheduledFireCount):
        (WebCore::DisplayRefreshMonitor::displayLinkFired):
        * platform/graphics/DisplayRefreshMonitor.h:
        (WebCore::DisplayRefreshMonitor::WTF_REQUIRES_LOCK):
        (WebCore::DisplayRefreshMonitor::WTF_GUARDED_BY_LOCK):
        (WebCore::DisplayRefreshMonitor::setMaxUnscheduledFireCount): Deleted.
        (WebCore::DisplayRefreshMonitor::isScheduled const): Deleted.
        (WebCore::DisplayRefreshMonitor::setIsScheduled): Deleted.
        (WebCore::DisplayRefreshMonitor::isPreviousFrameDone const): Deleted.
        (WebCore::DisplayRefreshMonitor::setIsPreviousFrameDone): Deleted.

2021-12-02  Tyler Wilcock  <tyler_w@apple.com>

        AX: In AccessibilityRenderObject::documentLinks, use existing image-map document links instead of always creating new ones
        https://bugs.webkit.org/show_bug.cgi?id=233767

        Reviewed by Chris Fleizach.

        The current implementation of AccessibilityRenderObject::documentLinks always
        creates new image-map links rather than using the existing ones created via
        AccessibilityRenderObject::addImageMapChildren. This is problematic for two reasons:

          1. It is wasteful in terms of memory usage as we will endlessly accumulate
             AccessibilityImageMapLink objects in the cache each time
             AccessibilityRenderObject::documentLinks is called.

          2. It breaks `<area>` document links in isolated tree mode, since the objects created
             this way aren't a child of any other object, and thus don't have any representation
             in the isolated tree. Concretely, this means AXIsolatedTree::nodeForID never returns
             anything for these objects.

        In this patch, we try to find the existing image-map link children
        in AccessibilityRenderObject::documentLinks before falling back to creating new ones.

        Fixes test accessibility/mac/document-links.html in isolated tree mode.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::documentLinks):
        Try to find the existing image-map link children before falling back to creating new ones.

2021-12-02  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Create display boxes for fragmented inline boxes on bidi boundaries
        https://bugs.webkit.org/show_bug.cgi?id=233736

        Reviewed by Antti Koivisto.

        In this patch we insert inline box type of display boxes in-between bidi display boxes as needed.
        We don't yet compute visual geometry and/or offset the rest of the content with the injected margins, borders and padding. 

        * layout/formattingContexts/inline/InlineDisplayContentBuilder.cpp:
        (WebCore::Layout::InlineDisplayContentBuilder::insertInlineBoxDisplayBoxForBidiBoundary):
        (WebCore::Layout::InlineDisplayContentBuilder::processBidiContent):
        (WebCore::Layout::InlineDisplayContentBuilder::appendInlineBoxDisplayBoxForBidiBoundary): Deleted.
        * layout/formattingContexts/inline/InlineDisplayContentBuilder.h:

2021-12-02  Chris Dumez  <cdumez@apple.com>

        Introduce a MainThreadBridge class inside WebLockManager
        https://bugs.webkit.org/show_bug.cgi?id=233789

        Reviewed by Darin Adler.

        Extract all the logic to hop to and back from the main thread out of the WebLockManager and into a MainThreadBridge
        internal class. This is similar to what was done for BroadcastChannel already. It provides better structuring and
        slightly better performance by calling isolatedCopy() on the ClientOrigin only once instead of on every call.

        No new tests, no web-facing behavior change.

        * Modules/web-locks/WebLockManager.cpp:
        (WebCore::WebLockManager::MainThreadBridge::create):
        (WebCore::WebLockManager::MainThreadBridge::MainThreadBridge):
        (WebCore::WebLockManager::MainThreadBridge::requestLock):
        (WebCore::WebLockManager::MainThreadBridge::releaseLock):
        (WebCore::WebLockManager::MainThreadBridge::abortLockRequest):
        (WebCore::WebLockManager::MainThreadBridge::query):
        (WebCore::WebLockManager::MainThreadBridge::clientIsGoingAway):
        (WebCore::WebLockManager::MainThreadBridge::ensureOnMainThread):
        (WebCore::WebLockManager::WebLockManager):
        (WebCore::WebLockManager::request):
        (WebCore::WebLockManager::didCompleteLockRequest):
        (WebCore::WebLockManager::query):
        (WebCore::WebLockManager::signalToAbortTheRequest):
        (WebCore::WebLockManager::clientIsGoingAway):
        (WebCore::WebLockManager::requestLockOnMainThread): Deleted.
        (WebCore::WebLockManager::releaseLockOnMainThread): Deleted.
        (WebCore::WebLockManager::abortLockRequestOnMainThread): Deleted.
        (WebCore::WebLockManager::queryOnMainThread): Deleted.
        (WebCore::WebLockManager::ensureOnMainThread): Deleted.
        * Modules/web-locks/WebLockManager.h:

2021-12-02  Said Abou-Hallawa  <said@apple.com>

        [GPU Process] Move the FilterEffect boundaries to a new class FilterEffectGeometry
        https://bugs.webkit.org/show_bug.cgi?id=233618
        rdar://85881969

        Reviewed by Cameron McCormack.

        The plan is to have Filter own its geometry and the geometry of the
        FilterEffects. So move the boundaries and their flags from FilterEffect 
        to a new class called FilterEffectGeometry. 

        SVGFilterBuilder will calculate the FilterEffectGeometry for each FilterEffect
        and store it in map { key: FilterEffect, value: FilterEffectGeometry }.
        Eventually this map is moved to SVGFilter which will be used in the
        virtual function effectGeometry(). determineFilterPrimitiveSubregion()
        will call this virtual function to calculate the primitive subregion.

        * Headers.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/filters/Filter.h:
        (WebCore::Filter::effectGeometry const):
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::determineFilterPrimitiveSubregion):
        (WebCore::FilterEffect::apply):
        * platform/graphics/filters/FilterEffect.h:
        (WebCore::FilterEffect::hasX const): Deleted.
        (WebCore::FilterEffect::setHasX): Deleted.
        (WebCore::FilterEffect::hasY const): Deleted.
        (WebCore::FilterEffect::setHasY): Deleted.
        (WebCore::FilterEffect::hasWidth const): Deleted.
        (WebCore::FilterEffect::setHasWidth): Deleted.
        (WebCore::FilterEffect::hasHeight const): Deleted.
        (WebCore::FilterEffect::setHasHeight): Deleted.
        (WebCore::FilterEffect::effectBoundaries const): Deleted.
        (WebCore::FilterEffect::setEffectBoundaries): Deleted.
        * platform/graphics/filters/FilterEffectGeometry.h: Added.
        (WebCore::FilterEffectGeometry::FilterEffectGeometry):
        (WebCore::FilterEffectGeometry::x const):
        (WebCore::FilterEffectGeometry::y const):
        (WebCore::FilterEffectGeometry::width const):
        (WebCore::FilterEffectGeometry::height const):
        * svg/SVGFilterPrimitiveStandardAttributes.cpp:
        (WebCore::SVGFilterPrimitiveStandardAttributes::setStandardAttributes const): Deleted.
        * svg/SVGFilterPrimitiveStandardAttributes.h:
        * svg/graphics/filters/SVGFilter.cpp:
        (WebCore::SVGFilter::create):
        (WebCore::SVGFilter::effectGeometry const):
        * svg/graphics/filters/SVGFilter.h:
        * svg/graphics/filters/SVGFilterBuilder.cpp:
        (WebCore::boundarySetFlagsForElement):
        (WebCore::SVGFilterBuilder::buildFilterEffects):
        * svg/graphics/filters/SVGFilterBuilder.h:
        (WebCore::SVGFilterBuilder::takeEffectGeometryMap):

2021-12-02  Chris Dumez  <cdumez@apple.com>

        Move Shared Worker classes to WebCore/workers/shared
        https://bugs.webkit.org/show_bug.cgi?id=233769

        Reviewed by Alex Christensen.

        Move Shared Worker classes to WebCore/workers/shared, for better structuring and consistency
        with WebCore/workers/service.

        * CMakeLists.txt:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * workers/shared/SharedWorker.cpp: Renamed from Source/WebCore/workers/SharedWorker.cpp.
        * workers/shared/SharedWorker.h: Renamed from Source/WebCore/workers/SharedWorker.h.
        * workers/shared/SharedWorker.idl: Renamed from Source/WebCore/workers/SharedWorker.idl.
        * workers/shared/SharedWorkerGlobalScope.cpp: Renamed from Source/WebCore/workers/SharedWorkerGlobalScope.cpp.
        * workers/shared/SharedWorkerGlobalScope.h: Renamed from Source/WebCore/workers/SharedWorkerGlobalScope.h.
        * workers/shared/SharedWorkerGlobalScope.idl: Renamed from Source/WebCore/workers/SharedWorkerGlobalScope.idl.

2021-12-02  Megan Gardner  <megan_gardner@apple.com>

        Re-add support of image control menus.
        https://bugs.webkit.org/show_bug.cgi?id=233305

        Reviewed by Tim Horton.

        Test: fast/images/image-controls-basic.html

        Image control menus are needed for mail transition to modern WebKit, so re-add them
        after the removal in https://trac.webkit.org/changeset/272117/webkit

        * DerivedSources-input.xcfilelist:
        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        * css/CSSProperties.json:
        * css/CSSValueKeywords.in:
        * css/parser/CSSParserIdioms.cpp:
        (WebCore::isValueAllowedInMode):
        * dom/mac/ImageControlsMac.cpp: Added.
        (WebCore::ImageControlsMac::imageControlsElementIdentifier):
        (WebCore::ImageControlsMac::imageControlsButtonIdentifier):
        (WebCore::ImageControlsMac::hasControls):
        (WebCore::ImageControlsMac::imageControlHost):
        (WebCore::ImageControlsMac::isImageControlsButtonElement):
        (WebCore::ImageControlsMac::containerRect):
        (WebCore::ImageControlsMac::createImageControls):
        * dom/mac/ImageControlsMac.h: Added.
        * html/HTMLAttributeNames.in:
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::HTMLImageElement):
        (WebCore::HTMLImageElement::parseAttribute):
        (WebCore::HTMLImageElement::didAttachRenderers):
        (WebCore::HTMLImageElement::updateImageControls):
        (WebCore::HTMLImageElement::tryCreateImageControls):
        (WebCore::HTMLImageElement::destroyImageControls):
        (WebCore::HTMLImageElement::hasImageControls const):
        (WebCore::HTMLImageElement::childShouldCreateRenderer const):
        * html/HTMLImageElement.h:
        (WebCore::HTMLImageElement::hasShadowControls const):
        * html/shadow/mac/ImageControlsMac.css: Added.
        (#if defined(ENABLE_SERVICE_CONTROLS) && ENABLE_SERVICE_CONTROLS):
        (button#image-controls-button):
        (div#image-controls:hover button#image-controls-button):
        * html/shadow/mac/ImageControlsRootElementMac.cpp: Added.
        (WebCore::xWebkitImageControlsElementIdentifier):
        (WebCore::RenderImageControls::RenderImageControls):
        (WebCore::RenderImageControls::updateLogicalWidth):
        (WebCore::RenderImageControls::computeLogicalHeight const):
        (WebCore::hasControl):
        (WebCore::imageControlHost):
        (WebCore::isImageControls):
        (WebCore::ImageControlsRootElement::tryCreate):
        (WebCore::ImageControlsRootElementMac::ImageControlsRootElementMac):
        (WebCore::ImageControlsRootElementMac::createElementRenderer):
        * html/shadow/mac/ImageControlsRootElementMac.h: Added.
        * page/ContextMenuController.cpp:
        (WebCore::imageFromImageElementNode):
        (WebCore::ContextMenuController::maybeCreateContextMenu):
        (WebCore::ContextMenuController::showImageControlsMenu):
        * page/ContextMenuController.h:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::textRecognitionCandidateElement const):
        * platform/ThemeTypes.cpp:
        (WebCore::operator<<):
        * platform/ThemeTypes.h:
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::RenderImage):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::adjustStyle):
        (WebCore::RenderTheme::paint):
        (WebCore::RenderTheme::paintBorderOnly):
        (WebCore::RenderTheme::paintDecorations):
        (WebCore::RenderTheme::adjustImageControlsButtonStyle const):
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::imageControlsButtonSize const):
        (WebCore::RenderTheme::imageControlsButtonPositionOffset const):
        (WebCore::RenderTheme::paintImageControlsButton):
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::documentViewFor const):
        (WebCore::RenderThemeMac::adjustImageControlsButtonStyle const):
        (WebCore::RenderThemeMac::servicesRolloverButtonCell const):
        (WebCore::RenderThemeMac::paintImageControlsButton):
        (WebCore::RenderThemeMac::imageControlsButtonSize const):
        (WebCore::RenderThemeMac::imageControlsButtonPositionOffset const):
        * style/UserAgentStyle.cpp:
        * style/UserAgentStyle.h:

2021-12-02  Myles C. Maxfield  <mmaxfield@apple.com>

        [WebGPU] Hook up navigator.gpu.requestAdapter()
        https://bugs.webkit.org/show_bug.cgi?id=233619

        Reviewed by Dean Jackson.

        Hook up Navigator.GPU to WebKitLegacy/WebKit (via ChromeClient) so WebKit can provide a
        RemoteGPUProxy "backing" object.

        I have a test for this! But unfortunately I can't commit it yet because HAVE(WEBGPU_IMPLEMENTATION)
        has to be off until Apple configures its internal build system. As soon as that's done, I'll add
        the test for this!!! (The test passes when run locally.)

        * Configurations/WebCore.xcconfig: Weak link with WebGPU.framework. This will
        succeed even if WebGPU.framework doesn't exist.
        * Modules/WebGPU/GPU.cpp:
        (WebCore::GPU::setBacking): This is for WorkerNavigator. To create a GPU object, we have to
        go through ChromeClient, which means we have to use the main thread. This means that creating
        the GPU object has to be asynchronous on workers. We handle this by having
        WorkerNavigator::gpu() return a shell object with no "backing," and asynchronously kick off a
        task to construct a backing object and connect it to the shell object. If content calls
        requestAdapter() on the shell, that function is already async, so we just fold in the wait for
        the backing into the already-existing wait we have to do as a matter of course. This implements
        that.
        (WebCore::GPU::requestAdapter):
        * Modules/WebGPU/GPU.h:
        (WebCore::GPU::create):
        (WebCore::GPU::backing): Deleted.
        (WebCore::GPU::backing const): Deleted.
        (WebCore::GPU::GPU): Deleted.
        * Modules/WebGPU/GPUDevice.cpp:
        (WebCore::GPUDevice::popErrorScope):
        * page/Chrome.cpp:
        (WebCore::Chrome::createGPUForWebGPU const): Ask WebKit / WebKitLegacy what kind of backing we
        should be using.
        * page/Chrome.h:
        * page/ChromeClient.h:
        (WebCore::ChromeClient::createGPUForWebGPU const):
        * page/Navigator.cpp:
        (WebCore::Navigator::gpu):
        * page/Navigator.h:
        * page/NavigatorBase.h:
        (WebCore::NavigatorBase::gpu): Deleted.
        * page/WorkerNavigator.cpp:
        (WebCore::WorkerNavigator::gpu):
        * page/WorkerNavigator.h:

2021-12-02  Devin Rousso  <drousso@apple.com>

        [css-values-4] Support `*vi` (inline) and `*vb` (block) viewport units
        https://bugs.webkit.org/show_bug.cgi?id=232895
        <rdar://problem/85179134>

        Reviewed by Simon Fraser.

        `*vi` is equal to 1% of the size of the UA-default/large/small/dynamic viewport size in the direction of the root element’s inline axis.
        `*vb` is equal to 1% of the size of the initial containing block UA-default/small/large/dynamic viewport size in the direction of the root element’s block axis.
        As an example, on `about:blank`:
        - `vi` would be equal to `vw`
        - `vb` would be equal to `vh`
        - `svi` would be equal to `svw`
        - `svb` would be equal to `svh`
        - `lvi` would be equal to `lvw`
        - `lvb` would be equal to `lvh`
        - `dvi` would be equal to `dvw`
        - `dvb` would be equal to `dvh`

        Spec: <https://drafts.csswg.org/css-values-4/#viewport-variants>

        Tests: CSSViewportUnits.AllSame
               CSSViewportUnits.EmptyUnobscuredSizeOverrides
               CSSViewportUnits.SameUnobscuredSizeOverrides
               CSSViewportUnits.DifferentUnobscuredSizeOverrides
               CSSViewportUnits.SVGDocument

        * css/CSSUnits.h:
        * css/CSSUnits.cpp:
        (WebCore::operator<<):
        * css/CSSPrimitiveValue.h:
        (WebCore::CSSPrimitiveValue::isViewportPercentageLength):
        * css/CSSPrimitiveValue.cpp:
        (WebCore::isValidCSSUnitTypeForDoubleConversion):
        (WebCore::isStringType):
        (WebCore::CSSPrimitiveValue::cleanup):
        (WebCore::lengthOfViewportPhysicalAxisForLogicalAxis): Added.
        (WebCore::CSSPrimitiveValue::computeUnzoomedNonCalcLengthDouble):
        (WebCore::CSSPrimitiveValue::computeNonCalcLengthDouble):
        (WebCore::CSSPrimitiveValue::unitTypeString):
        (WebCore::CSSPrimitiveValue::formatNumberForCustomCSSText const):
        (WebCore::CSSPrimitiveValue::equals const):
        * css/parser/CSSParserToken.cpp:
        (WebCore::cssPrimitiveValueUnitFromTrie):
        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::consumeLengthRawWithKnownTokenTypeDimension):
        * css/calc/CSSCalcCategoryMapping.cpp:
        (WebCore::calcUnitCategory):
        (WebCore::calculationCategoryForCombination):
        (WebCore::hasDoubleValue):

2021-12-02  Chris Dumez  <cdumez@apple.com>

        Unreviewed follow-up to r286453 to address comments from Darin.

        * dom/MessageChannel.h:
        (WebCore::MessageChannel::port1 const):
        (WebCore::MessageChannel::port2 const):

2021-12-02  Chris Dumez  <cdumez@apple.com>

        [WK2] Make Web Lock API work across multiple WebProcesses
        https://bugs.webkit.org/show_bug.cgi?id=233719

        Reviewed by Alex Christensen.

        Make Web Lock API work across multiple WebProcesses. To achieve this, WebLockRegistry is now
        an interface with 2 concrete subclasses:
        - LocalWebLockRegistry: In charge of the actual storage of the lock registrations. This is
          basically a rename of the class that used to be named WebLockRegistry. In the WebKitLegacy
          case, we use a global LocalWebLockRegistry for regular browsing views and another global
          LocalWebLockRegistry for private browsing views. In the modern WebKit case, the
          LocalWebLockRegistry is held in the UIProcess by the WebsiteDataStore. It is held by the
          WebsiteDataStore because we don't want different sessions to share locks. It lives in the
          UIProcess because it needs to be shared by several WebProcesses. The NetworkProcess may
          have been suitable too but it would have meant dealing with crash recovery.
        - RemoteWebLockRegistry: It has the same interface has LocalWebLockRegistry but merely proxies
          calls to the UIProcess via IPC.

        In the UIProcess, each WebProcessProxy has a WebLockRegistryProxy instance which listens for
        IPC from the RemoteWebLockRegistry in the WebProcess. Upon receiving IPC, it validates the
        parameters (since the WebProcesses are not trusted) and calls the corresponding functions on
        the LocalWebLockRegistry held by the WebProcessProxy's WebsiteDataStore. The WebLockRegistryProxy
        is also in charge of notifying the RemoteWebLockRegistry in the WebProcess whenever a lock
        request completes and whenever a held lock gets stolen.

        * Modules/web-locks/WebLockManager.cpp:
        (WebCore::WebLockManager::request):
        (WebCore::WebLockManager::didCompleteLockRequest):
        (WebCore::WebLockManager::requestLockOnMainThread):
        (WebCore::WebLockManager::releaseLockOnMainThread):
        (WebCore::WebLockManager::abortLockRequestOnMainThread):
        (WebCore::WebLockManager::queryOnMainThread):
        (WebCore::WebLockManager::clientIsGoingAway):
        (WebCore::WebLockManager::ensureOnMainThread):
        * Modules/web-locks/WebLockManager.h:
        * Modules/web-locks/WebLockManagerSnapshot.h:
        (WebCore::WebLockManagerSnapshot::Info::encode const):
        (WebCore::WebLockManagerSnapshot::encode const):
        (WebCore::WebLockManagerSnapshot::Info::decode):
        (WebCore::WebLockManagerSnapshot::decode):
        * Modules/web-locks/WebLockMode.h:
        * Modules/web-locks/WebLockRegistry.cpp:
        (WebCore::LocalWebLockRegistry::ensureRegistryForOrigin):
        (WebCore::LocalWebLockRegistry::existingRegistryForOrigin const):
        (WebCore::LocalWebLockRegistry::PerOriginRegistry::create):
        (WebCore::LocalWebLockRegistry::PerOriginRegistry::PerOriginRegistry):
        (WebCore::LocalWebLockRegistry::PerOriginRegistry::~PerOriginRegistry):
        (WebCore::LocalWebLockRegistry::requestLock):
        (WebCore::LocalWebLockRegistry::PerOriginRegistry::requestLock):
        (WebCore::LocalWebLockRegistry::releaseLock):
        (WebCore::LocalWebLockRegistry::PerOriginRegistry::releaseLock):
        (WebCore::LocalWebLockRegistry::abortLockRequest):
        (WebCore::LocalWebLockRegistry::PerOriginRegistry::abortLockRequest):
        (WebCore::LocalWebLockRegistry::PerOriginRegistry::isGrantable const):
        (WebCore::LocalWebLockRegistry::PerOriginRegistry::processLockRequestQueue):
        (WebCore::LocalWebLockRegistry::snapshot):
        (WebCore::LocalWebLockRegistry::PerOriginRegistry::snapshot):
        (WebCore::LocalWebLockRegistry::clientIsGoingAway):
        (WebCore::LocalWebLockRegistry::PerOriginRegistry::clientsAreGoingAway):
        (WebCore::LocalWebLockRegistry::clientsAreGoingAway):
        (): Deleted.
        (WebCore::WebLockRegistry::registryForOrigin): Deleted.
        (WebCore::WebLockRegistry::WebLockRegistry): Deleted.
        (WebCore::WebLockRegistry::~WebLockRegistry): Deleted.
        (WebCore::WebLockRegistry::requestLock): Deleted.
        (WebCore::WebLockRegistry::releaseLock): Deleted.
        (WebCore::WebLockRegistry::abortLockRequest): Deleted.
        (WebCore::WebLockRegistry::isGrantable const): Deleted.
        (WebCore::WebLockRegistry::processLockRequestQueue): Deleted.
        (WebCore::WebLockRegistry::snapshot): Deleted.
        (WebCore::WebLockRegistry::clientIsGoingAway): Deleted.
        * Modules/web-locks/WebLockRegistry.h:
        (WebCore::WebLockRegistry::~WebLockRegistry):
        * WebCore.xcodeproj/project.pbxproj:
        * loader/EmptyClients.cpp:
        (WebCore::pageConfigurationWithEmptyClients):
        * page/Page.cpp:
        (WebCore::Page::Page):
        * page/Page.h:
        (WebCore::Page::webLockRegistry):
        * page/PageConfiguration.cpp:
        (WebCore::PageConfiguration::PageConfiguration):
        * page/PageConfiguration.h:

2021-12-02  Devin Rousso  <drousso@apple.com>

        [Apple Pay] recurring line items appear way in the future
        https://bugs.webkit.org/show_bug.cgi?id=233779
        <rdar://problem/85976407>

        Reviewed by Wenson Hsieh.

        JavaScript `Date` uses a milliseconds-based value, whereas native `NSDate` is seconds-based.

        * Modules/applepay/cocoa/PaymentSummaryItemsCocoa.mm:
        (WebCore::toDate):

2021-12-02  Chris Dumez  <cdumez@apple.com>

        MessageChannel::port1() / port2() should return references instead of pointers
        https://bugs.webkit.org/show_bug.cgi?id=233772

        Reviewed by Alex Christensen.

        This was extracted from Alex Christensen's large patch at Bug 230382.

        * Modules/webaudio/AudioWorkletNode.cpp:
        (WebCore::AudioWorkletNode::create):
        * bindings/js/JSMessageChannelCustom.cpp:
        (WebCore::JSMessageChannel::visitAdditionalChildren):
        * dom/MessageChannel.cpp:
        (WebCore::generateMessagePorts):
        (WebCore::MessageChannel::MessageChannel):
        * dom/MessageChannel.h:
        (WebCore::MessageChannel::port1 const):
        (WebCore::MessageChannel::port2 const):

2021-12-02  Devin Rousso  <drousso@apple.com>

        [Payment Request] Validate payment method data on construction
        https://bugs.webkit.org/show_bug.cgi?id=233292
        <rdar://problem/85736007>

        Reviewed by Andy Estes.

        This will allow developers to replace any `ApplePaySession.supportsVersion` check(s) by
        attempting to create a `PaymentRequest` object with data specific to Apple Pay. This is
        actually an improvement, because it'll also allow developers to catch most errors in that
        data earlier, as previously any errors would only be thrown when `show()` is called.

        Spec: <https://github.com/w3c/payment-request/pull/976>

        Test: http/tests/ssl/applepay/PaymentRequest.https.html

        * Modules/paymentrequest/PaymentRequest.cpp:
        (WebCore::PaymentRequest::show):
        * Modules/paymentrequest/PaymentHandler.h:
        Adjust `PaymentHandler::convertData` to take a `Document` so that additional validation
        can be performed on the provided payment method(s) (e.g. check the Apple Pay version).

        * Modules/applepay/PaymentRequestValidator.h:
        * Modules/applepay/PaymentRequestValidator.mm:
        (WebCore::PaymentRequestValidator::validate):
        Allow callers to choose what fields to validate. This is needed because when the
        `ApplePaySessionPaymentRequest` created/converted when validating the payment method data in
        the `PaymentRequest` constructor isn't able to get fields from the `PaymentRequest` as it
        hasn't been created yet.

        * Modules/applepay/ApplePaySession.cpp:
        (WebCore::convertAndValidate):
        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.h:
        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp:
        (WebCore::convertAndValidateApplePayRequest):
        (WebCore::ApplePayPaymentHandler::convertData):
        (WebCore::ApplePayPaymentHandler::show):
        * Modules/applepay-ams-ui/ApplePayAMSUIPaymentHandler.h:
        * Modules/applepay-ams-ui/ApplePayAMSUIPaymentHandler.cpp:
        (WebCore::convertAndValidateApplePayAMSUIRequest):
        (WebCore::ApplePayAMSUIPaymentHandler::convertData):

2021-12-02  Brandon Stewart  <brandonstewart@apple.com>

        Verify borderRect is Renderable
        https://bugs.webkit.org/show_bug.cgi?id=232650

        Reviewed by Alan Bujtas.

        Verify that borderRect is renderable.
        Align isRenderable() implementations in RoundedRect and FloatRoundedRect.

        * platform/graphics/RoundedRect.cpp:
        (WebCore::RoundedRect::isRenderable const):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintBoxShadow):

2021-12-02  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Redundant line run type checking in InlineDisplayContentBuilder::processNonBidiContent
        https://bugs.webkit.org/show_bug.cgi?id=233597

        Reviewed by Antti Koivisto.

        * layout/formattingContexts/inline/InlineDisplayContentBuilder.cpp:
        (WebCore::Layout::InlineDisplayContentBuilder::processNonBidiContent):

2021-12-02  Andreu Botella  <andreu@andreubotella.com>

        Remove the multipart parameter to FormAssociatedElement::appendFormData, InputType::appendFormData and HTMLFormElement::constructEntryList
        https://bugs.webkit.org/show_bug.cgi?id=233774

        Reviewed by Chris Dumez.

        These parameters were only needed because of an optimization where file inputs were being
        added to the DOMFormData as string values containing their filenames if the entry list was
        being constructed to be used in a urlencoded or text/plain form submission. This
        optimization was removed in r286427 and those parameters can now be dropped.

        No behavior change.

        * html/BaseButtonInputType.cpp:
        (WebCore::BaseButtonInputType::appendFormData const):
        * html/BaseButtonInputType.h:
        * html/BaseCheckableInputType.cpp:
        (WebCore::BaseCheckableInputType::appendFormData const):
        * html/BaseCheckableInputType.h:
        * html/DOMFormData.cpp:
        (WebCore::DOMFormData::create):
        * html/FileInputType.cpp:
        (WebCore::FileInputType::appendFormData const):
        * html/FileInputType.h:
        * html/FormAssociatedElement.h:
        (WebCore::FormAssociatedElement::appendFormData):
        * html/HTMLButtonElement.cpp:
        (WebCore::HTMLButtonElement::appendFormData):
        * html/HTMLButtonElement.h:
        * html/HTMLFormControlElement.h:
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::constructEntryList):
        * html/HTMLFormElement.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::appendFormData):
        * html/HTMLInputElement.h:
        * html/HTMLKeygenElement.cpp:
        (WebCore::HTMLKeygenElement::appendFormData):
        * html/HTMLKeygenElement.h:
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::appendFormData):
        * html/HTMLObjectElement.h:
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::appendFormData):
        * html/HTMLSelectElement.h:
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::appendFormData):
        * html/HTMLTextAreaElement.h:
        * html/HiddenInputType.cpp:
        (WebCore::HiddenInputType::appendFormData const):
        * html/HiddenInputType.h:
        * html/ImageInputType.cpp:
        (WebCore::ImageInputType::appendFormData const):
        * html/ImageInputType.h:
        * html/InputType.cpp:
        (WebCore::InputType::appendFormData const):
        * html/InputType.h:
        * html/SubmitInputType.cpp:
        (WebCore::SubmitInputType::appendFormData const):
        * html/SubmitInputType.h:
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::appendFormData const):
        * html/TextFieldInputType.h:
        * loader/FormSubmission.cpp:
        (WebCore::FormSubmission::create):

2021-12-02  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Introduce createDisplayBoxesInVisualOrderForContentRuns
        https://bugs.webkit.org/show_bug.cgi?id=233733

        Reviewed by Antti Koivisto.

        Revert some of the inline box related bidi changes and start with
        a very simple "let's create the display boxes for all _content_ runs in visual order".
        This is very similar to InlineDisplayContentBuilder::processNonBidiContent() where we just
        loop through the content and construct display boxes.
        This is also in preparation for advancing with the inline box case.

        * layout/formattingContexts/inline/InlineDisplayContentBuilder.cpp:
        (WebCore::Layout::InlineDisplayContentBuilder::processNonBidiContent):
        (WebCore::Layout::InlineDisplayContentBuilder::processBidiContent):

2021-12-02  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Move inline box geometry (BoxGeometry) update logic to a dedicated function
        https://bugs.webkit.org/show_bug.cgi?id=233615

        Reviewed by Antti Koivisto.

        This is also in preparation for computing the BoxGeometry for bidi inline boxes.

        * layout/formattingContexts/inline/InlineDisplayContentBuilder.cpp:
        (WebCore::Layout::InlineDisplayContentBuilder::setInlineBoxGeometry):
        (WebCore::Layout::InlineDisplayContentBuilder::appendInlineBoxDisplayBox):
        (WebCore::Layout::InlineDisplayContentBuilder::appendSpanningInlineBoxDisplayBox):
        * layout/formattingContexts/inline/InlineDisplayContentBuilder.h:

2021-12-02  Chris Dumez  <cdumez@apple.com>

        html/semantics/forms/constraints/input-number-validity-dynamic-value-no-change.html WPT test is failing
        https://bugs.webkit.org/show_bug.cgi?id=233765

        Reviewed by Darin Adler.

        Per https://html.spec.whatwg.org/#concept-input-min-zero, step base needs to be computed based on
        the 'min' attribute, then fallback to the 'value' attribute and finally fallback to the default
        step base. WebKit was missing the "fallback to the 'value' attribute logic.

        No new tests, rebaselined existing test.

        * html/NumberInputType.cpp:
        (WebCore::NumberInputType::createStepRange const):

2021-12-02  Tim Nguyen  <ntim@apple.com>

        Fix crash in GraphicsContextCG::endTransparencyLayer
        https://bugs.webkit.org/show_bug.cgi?id=230230

        Reviewed by Myles C. Maxfield.

        The crash was due to unbalanced calls to begin and end transparency layers.

        A branch handling ancestors of transparent layers that are transform root needed to be
        aware of the top layer. Opacity on ancestors don't affect top layer elements so calling
        `beginTransparencyLayers` on `parent()` is incorrect.

        Also fix `transparentPaintingAncestor()` to be top layer aware to avoid flickering layers
        while scrolling.

        Test: fast/layers/top-layer-ancestor-opacity-and-transform-crash.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::transparentPaintingAncestor):
        (WebCore::RenderLayer::paintLayerWithEffects):

2021-12-02  Robert Jenner  <Jenner@apple.com>

        Unreviewed, reverting r285570.

        Broke StarD build

        Reverted changeset:

        "Fix crash in GraphicsContextCG::endTransparencyLayer"
        https://bugs.webkit.org/show_bug.cgi?id=230230
        https://commits.webkit.org/r285570

2021-12-02  Antti Koivisto  <antti@apple.com>

        [:has() pseudo-class] Invalidation in non-subject position
        https://bugs.webkit.org/show_bug.cgi?id=233758

        Reviewed by Simon Fraser.

        Invalidation for selectors like '.ancestor:has(.foo) #target'.

        Tests: imported/w3c/web-platform-tests/css/selectors/invalidation/has-in-adjacent-position.html
               imported/w3c/web-platform-tests/css/selectors/invalidation/has-in-ancestor-position.html
               imported/w3c/web-platform-tests/css/selectors/invalidation/has-in-parent-position.html
               imported/w3c/web-platform-tests/css/selectors/invalidation/has-in-sibling-position.html

        * style/ChildChangeInvalidation.cpp:
        (WebCore::Style::ChildChangeInvalidation::invalidateForChangedElement):
        (WebCore::Style::needsTraversal):
        (WebCore::Style::needsDescendantTraversal):
        * style/RuleFeature.cpp:
        (WebCore::Style::isSiblingOrSubject):
        (WebCore::Style::isHasPseudoClassMatchElement):
        (WebCore::Style::computeHasPseudoClassMatchElement):
        (WebCore::Style::computeSubSelectorMatchElement):

        Use new MatchElement::HasNonSubject as a catch-all for cases where :has() is in a non-subject position.
        In the future this can be optimized better by computing both the :has match element and the overall
        match element separately.

        * style/RuleFeature.h:
        * style/StyleInvalidator.cpp:
        (WebCore::Style::Invalidator::invalidateStyleWithMatchElement):

        Worst-case invalidation.

2021-12-02  Andreu Botella  <andreu@andreubotella.com>

        File inputs in non-multipart form submissions show up as string values in the formdata event
        https://bugs.webkit.org/show_bug.cgi?id=233725

        Reviewed by Chris Dumez.

        When a form's entry list was constructed form a non-multipart/form-data form submission,
        file inputs were added to the DOMFormData object as string values consisting of the file's
        filename. Before r280310, this optimization was unobservable, since the DOMFormData object
        was never exposed to the user halfway through a form submission.

        r280310 changed this by adding the formdata event, which fires at the end of the "construct
        the entry list" algorithm and can be used to both inspect and modify the DOMFormData object.
        This means that it is now observable that file inputs in urlencoded and text/plain form
        submissions are encoded as their filenames, and that any new File entries added to the
        DOMFormData object the event listeners will be skipped when building the form payload.

        This change fixes that by always adding file inputs to DOMFormData as File entries, and
        using a File's filename as the string value in FormData::appendNonMultipartKeyValuePairItems

        Tests: imported/w3c/web-platform-tests/html/semantics/forms/form-submission-0/constructing-form-data-set.html
               imported/w3c/web-platform-tests/html/semantics/forms/form-submission-0/text-plain.window.html
               imported/w3c/web-platform-tests/html/semantics/forms/form-submission-0/urlencoded2.window.html

        * html/FileInputType.cpp:
        (WebCore::FileInputType::appendFormData const): Changed to always add File entries to the 
        DOMFormData object, rather than adding the filenames as string values when `multipart` is
        false.
        * platform/network/FormData.cpp:
        (WebCore::FormData::appendNonMultiPartKeyValuePairItems): Changed to encode File entry
        values as their filenames, rather than skipping them.

2021-12-02  Tyler Wilcock  <tyler_w@apple.com>

        AX Isolated Tree: Document links should be stored in web areas, not the root
        https://bugs.webkit.org/show_bug.cgi?id=233728

        Reviewed by Chris Fleizach.

        In WebAccessibilityObjectWrapperMac.mm, we expose the document links attribute (AXLinkUIElements)
        on web areas. However, in AXIsolatedObject::initializeAttributeData we currently only store
        AXPropertyName::DocumentLinks for the root element, which is not a web area.

        In this patch, we store document links for web area elements instead
        of the root element.

        This patch fixes accessibility/visible-elements.html, which tests document links.

        https://github.com/WebKit/WebKit/blob/109c8234854a0fa28955d81994bb98daa1fa14fe/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm#L2235#L2237

        * accessibility/isolatedtree/AXIsolatedObject.cpp:
        (WebCore::AXIsolatedObject::initializeAttributeData):

2021-12-02  Alexey Shvayka  <ashvayka@apple.com>

        Add a fast path for empty string to setInnerHTML()
        https://bugs.webkit.org/show_bug.cgi?id=233647

        Reviewed by Geoff Garen.

        This patch adds a fast path for `element.innerHTML = ""`, which is a common idiom for
        removing all children from an element, while ensuring <template> contents is modified
        rather than its children [1], and that mutation records are enqueued.

        Although there are quite a few insertion modes [1], parsing empty string creates
        additional elements only inside <html> container (please see "Anything else" clauses).

        Bypassing parser instantiation results in 3.2x progression of the attached microbenchmark.
        Both Gecko and Blink has this optimization, which was reported to progress Speedometer2
        score (especially Vanilla / jQuery / Preact subtests).

        Our `textContent` and `innerText` setters are already fast enough for empty strings.

        [1] https://w3c.github.io/DOM-Parsing/#dom-innerhtml-innerhtml (setting, step 3)
        [2] https://html.spec.whatwg.org/multipage/parsing.html#parsing-main-inhtml

        No behavior change.

        * dom/Element.cpp:
        (WebCore::Element::setInnerHTML):
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::setInnerHTML):

2021-12-02  Kimmo Kinnunen  <kkinnunen@apple.com>

        GraphicsContextGLANGLE should not have Cocoa Mac specific display reconfiguration code
        https://bugs.webkit.org/show_bug.cgi?id=233695

        Reviewed by Antti Koivisto.

        Move code to observe Mac display reconfiguration
        away from GraphicsContextGLANGLE to GraphicsContextGLCocoa.
        Apply the display reconfiguration listener only for
        WebProcessGraphicsContextGLCocoa, it is not needed for the
        GPU process contexts.

        Move the listener notification code away from GraphicsContextGLOpenGLManager
        into its own class. This way GraphicsContextGLOpenGLManager does not need
        to know Mac specific interfaces. Later on, GraphicsContextGLOpenGLManager can
        be removed altogether.

        Changes behavior so that simulateEventForTesting invokes the simulated context
        change only for the context being tested. This simplifies the implementation.

        No new tests, refactor.

        * PlatformMac.cmake:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/GraphicsContextGLAttributes.h:
        (WebCore::GraphicsContextGLAttributes::effectivePowerPreference const):
        * platform/graphics/angle/GraphicsContextGLANGLE.cpp:
        (WebCore::GraphicsContextGLANGLE::simulateEventForTesting):
        * platform/graphics/angle/GraphicsContextGLANGLE.h:
        * platform/graphics/cocoa/GraphicsContextGLCocoa.h:
        * platform/graphics/cocoa/GraphicsContextGLCocoa.mm:
        (WebCore::initializeEGLDisplay):
        (WebCore::GraphicsContextGLCocoa::create):
        (WebCore::GraphicsContextGLCocoa::GraphicsContextGLCocoa):
        (WebCore::GraphicsContextGLCocoa::~GraphicsContextGLCocoa):
        (WebCore::GraphicsContextGLANGLE::GraphicsContextGLANGLE):
        (WebCore::GraphicsContextGLCocoa::setContextVisibility):
        (WebCore::GraphicsContextGLCocoa::updateContextOnDisplayReconfiguration):
        (WebCore::GraphicsContextGLANGLE::setContextVisibility): Deleted.
        (WebCore::GraphicsContextGLANGLE::displayWasReconfigured): Deleted.
        * platform/graphics/cocoa/WebProcessGraphicsContextGLCocoa.mm:
        * platform/graphics/mac/DisplayConfigurationMonitor.cpp: Copied from Source/WebCore/platform/graphics/opengl/GraphicsContextGLOpenGLManager.h.
        (WebCore::DisplayConfigurationMonitor::singleton):
        (WebCore::DisplayConfigurationMonitor::addClient):
        (WebCore::DisplayConfigurationMonitor::removeClient):
        (WebCore::DisplayConfigurationMonitor::dispatchDisplayWasReconfigured):
        * platform/graphics/mac/DisplayConfigurationMonitor.h: Copied from Source/WebCore/platform/graphics/opengl/GraphicsContextGLOpenGLManager.h.
        * platform/graphics/opengl/GraphicsContextGLOpenGLManager.cpp:
        (WebCore::GraphicsContextGLOpenGLManager::displayWasReconfigured): Deleted.
        * platform/graphics/opengl/GraphicsContextGLOpenGLManager.h:

2021-12-02  Kimmo Kinnunen  <kkinnunen@apple.com>

        REGRESSION(r286209) [GTK][WPE] crashes in offscreen canvas tests that try to create a GL context
        https://bugs.webkit.org/show_bug.cgi?id=233712

        Reviewed by Antti Koivisto.

        Fix a crash for ports that use offscreen canvas WebGL.
        Currently we do not have code to navigate from offscreen canvas
        CanvasBase to ChromeClient. For this case it doesn't matter, as
        GPUP does not support offscreen canvas in meaningful way
        anyway.

        No new tests, tested by existing test.

        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::create):

2021-11-25  Sergio Villar Senin  <svillar@igalia.com>

        Reset height definiteness when constructing flex items
        https://bugs.webkit.org/show_bug.cgi?id=233458

        Reviewed by Alan Bujtas.

        Flexbox renderer uses an attribute called m_hasDefiniteHeight in order to properly
        consider as definite some sizes that are normally considered as indefinite. For example,
        a percentage of an intrinsic size is normally indefinite unless the containing block has
        an overriding size in which case can be considered as definite.

        The value of m_hasDefiniteHeight is properly reset every time we construct a flex item or
        just after finishing the layout. However we should do it as well just before computing
        the flex basis if the flex item is also a flex container. In that case it might happen that
        we try to compute the flex basis value with a value for m_hasDefiniteHeight which can
        be potentially outdated.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock): Use resetHasDefiniteHeight().
        (WebCore::RenderFlexibleBox::layoutFlexItems): Ditto.
        (WebCore::RenderFlexibleBox::constructFlexItem): Call resetHasDefiniteHeight() if the
        flex item is also a flex container.
        * rendering/RenderFlexibleBox.h:
        (WebCore::RenderFlexibleBox::resetHasDefiniteHeight): Added.

2021-12-02  Youenn Fablet  <youenn@apple.com>

        Add support for NavigationPreloadManager
        https://bugs.webkit.org/show_bug.cgi?id=233523

        Reviewed by Chris Dumez.

        Add service worker navigation preload IDL and implementation.
        This includes in particular state management (read and write) on API side and SWServer side.
        This state is used in WK2 network code path to enable or not preloads.
        We are not yet persisting preload registration state on disk, this will be done as a follow-up.

        The FetchEvent preloadResponse returns a promise which has either undefined or a response as resolved value.
        In case there is a preloader for that FetchEvent, we start the load when preloadResponse is retrieved by JS.

        To implement the retrieval of the preload response, we use FetchResponse::fetch.
        To do so, we add an initiator parameter as this preload initiator is the navigation task and not a fetch call.

        Covered by enabled tests.

        Tests: http/wpt/service-workers/service-worker-iframe-preload.https.html.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/cache/DOMCache.cpp:
        * Modules/fetch/FetchLoader.cpp:
        * Modules/fetch/FetchLoader.h:
        * Modules/fetch/FetchResponse.cpp:
        * Modules/fetch/FetchResponse.h:
        * Modules/fetch/WindowOrWorkerGlobalScopeFetch.cpp:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/DOMPromiseProxy.h:
        * bindings/js/WebCoreBuiltinNames.h:
        * loader/cache/CachedResource.cpp:
        * loader/cache/CachedResourceRequestInitiators.cpp:
        (WebCore::CachedResourceRequestInitiators::CachedResourceRequestInitiators):
        * loader/cache/CachedResourceRequestInitiators.h:
        * platform/network/HTTPHeaderNames.in:
        * workers/service/FetchEvent.cpp:
        * workers/service/FetchEvent.h:
        * workers/service/FetchEvent.idl:
        * workers/service/NavigationPreloadManager.cpp: Added.
        * workers/service/NavigationPreloadManager.h: Added.
        * workers/service/NavigationPreloadManager.idl: Added.
        * workers/service/NavigationPreloadState.h: Added.
        * workers/service/NavigationPreloadState.idl: Added.
        * workers/service/SWClientConnection.h:
        * workers/service/ServiceWorkerContainer.cpp:
        * workers/service/ServiceWorkerContainer.h:
        * workers/service/ServiceWorkerRegistration.cpp:
        * workers/service/ServiceWorkerRegistration.h:
        * workers/service/ServiceWorkerRegistration.idl:
        * workers/service/WorkerSWClientConnection.cpp:
        * workers/service/WorkerSWClientConnection.h:
        * workers/service/context/ServiceWorkerFetch.cpp:
        * workers/service/context/ServiceWorkerFetch.h:
        * workers/service/context/ServiceWorkerThread.cpp:
        * workers/service/context/ServiceWorkerThread.h:
        * workers/service/context/ServiceWorkerThreadProxy.cpp:
        * workers/service/context/ServiceWorkerThreadProxy.h:
        * workers/service/server/SWServerRegistration.cpp:
        * workers/service/server/SWServerRegistration.h:

2021-12-02  Martin Robinson  <mrobinson@webkit.org>

        sticky th or td in table does not stops at specified top
        https://bugs.webkit.org/show_bug.cgi?id=232431
        <rdar://problem/85011818>

        Reviewed by Simon Fraser.

        Tests: imported/w3c/web-platform-tests/css/css-position/sticky/position-sticky-table-td-bottom.html
               imported/w3c/web-platform-tests/css/css-position/sticky/position-sticky-table-td-left.html
               imported/w3c/web-platform-tests/css/css-position/sticky/position-sticky-table-td-right.html
               imported/w3c/web-platform-tests/css/css-position/sticky/position-sticky-table-td-top.html

        * rendering/RenderBox.h: Make frameRectForStickyPositioning not final.
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::frameRectForStickyPositioning const): Added this implementation
        that takes into account that RenderTableCell is positioned relatively to the RenderTableSection.
        * rendering/RenderTableCell.h: Added method declaration.

2021-12-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][a11y] Add implementation of table and table cell interfaces when building with ATSPI
        https://bugs.webkit.org/show_bug.cgi?id=233694

        Reviewed by Adrian Perez de Castro.

        * SourcesGTK.txt:
        * accessibility/AccessibilityTableColumn.cpp:
        (WebCore::AccessibilityTableColumn::computeAccessibilityIsIgnored const): Do not expose column for ATSPI.
        * accessibility/AccessibilityTableHeaderContainer.cpp:
        (WebCore::AccessibilityTableHeaderContainer::computeAccessibilityIsIgnored const): Do not expose header container either.
        * accessibility/atspi/AccessibilityObjectAtspi.cpp:
        (WebCore::AccessibilityObjectAtspi::interfacesForObject):
        (WebCore::AccessibilityObjectAtspi::path):
        (WebCore::AccessibilityObjectAtspi::wrapperVector const):
        (WebCore::AccessibilityObjectAtspi::children const):
        (WebCore::AccessibilityObjectAtspi::buildInterfaces const):
        * accessibility/atspi/AccessibilityObjectAtspi.h:
        * accessibility/atspi/AccessibilityObjectTableAtspi.cpp: Added.
        (WebCore::AccessibilityObjectAtspi::rowCount const):
        (WebCore::AccessibilityObjectAtspi::columnCount const):
        (WebCore::AccessibilityObjectAtspi::cell const):
        (WebCore::AccessibilityObjectAtspi::tableCaption const):
        (WebCore::AccessibilityObjectAtspi::cellIndex const):
        (WebCore::AccessibilityObjectAtspi::rowAtIndex const):
        (WebCore::AccessibilityObjectAtspi::columnAtIndex const):
        (WebCore::AccessibilityObjectAtspi::rowHeader const):
        (WebCore::AccessibilityObjectAtspi::columnHeader const):
        (WebCore::AccessibilityObjectAtspi::rowDescription const):
        (WebCore::AccessibilityObjectAtspi::columnDescription const):
        (WebCore::AccessibilityObjectAtspi::rowExtent const):
        (WebCore::AccessibilityObjectAtspi::columnExtent const):
        (WebCore::AccessibilityObjectAtspi::cells const):
        (WebCore::AccessibilityObjectAtspi::rows const):
        (WebCore::AccessibilityObjectAtspi::rowHeaders const):
        (WebCore::AccessibilityObjectAtspi::columnHeaders const):
        * accessibility/atspi/AccessibilityObjectTableCellAtspi.cpp: Added.
        (WebCore::AccessibilityObjectAtspi::cellRowHeaders const):
        (WebCore::AccessibilityObjectAtspi::cellColumnHeaders const):
        (WebCore::AccessibilityObjectAtspi::rowSpan const):
        (WebCore::AccessibilityObjectAtspi::columnSpan const):
        (WebCore::AccessibilityObjectAtspi::cellPosition const):
        * accessibility/atspi/xml/TableCell.xml:

2021-12-02  Manuel Rego Casasnovas  <rego@igalia.com>

        [selectors] :focus-visible should stop matching after blur
        https://bugs.webkit.org/show_bug.cgi?id=233688

        Reviewed by Antti Koivisto.

        Move PseudoClassChangeInvalidation for :focus-visible together with the one for :focus,
        as we need to keep both flags in sync when computing the invalidations
        (it's not possible to have an element that matches :focus-visible but not :focus,
        and that was happening before this change).

        Test: imported/w3c/web-platform-tests/css/selectors/focus-visible-023.html

        * dom/Element.cpp:
        (WebCore::Element::setFocus): Add PseudoClassChangeInvalidation for :focus-visible change,
        and put it in the same scope as the flags changes.
        (WebCore::Element::setHasFocusVisible): Remove PseudoClassChangeInvalidation from this method.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::internalKeyEvent): Use PseudoClassChangeInvalidation for :focus-visible change.

2021-12-01  Sihui Liu  <sihui_liu@apple.com>

        FileSystemSyncAccessHandle should be invalidated when network process crashes
        https://bugs.webkit.org/show_bug.cgi?id=232605
        <rdar://problem/85187706>

        Reviewed by Youenn Fablet.

        Make FileSystemStorageConnection keep track of FileSystemSyncAccessHandle. When connection is closed, or access 
        handle is explicitly invalidated (for example, due to file deletion in the backend), FileSystemStorageConnection
        will invalidate FileSystemSyncAccessHandle.

        Normally, to close a FileSystemSyncAccessHandle (when close() is called or context stops), we need to: 
        1. close file descriptor (FileSystemSyncAccessHandle::closeFile)
        2. notify backend about close (FileSystemSyncAccessHandle::closeBackend)
        3. get close result and complete callbacks (FileSystemSyncAccessHandle::didCloseBackend)
        For invalidation case, we only need to perform step 1 and 3 because connection to backend is lost or backend
        initiates the close.

        API test: FileSystemAccess.NetworkProcessCrashDuringWrite

        * Headers.cmake:
        * Modules/cache/WindowOrWorkerGlobalScopeCaches.cpp:
        * Modules/filesystemaccess/FileSystemFileHandle.cpp:
        (WebCore::FileSystemFileHandle::registerSyncAccessHandle):
        (WebCore::FileSystemFileHandle::unregisterSyncAccessHandle):
        * Modules/filesystemaccess/FileSystemFileHandle.h:
        * Modules/filesystemaccess/FileSystemStorageConnection.h:
        (WebCore::FileSystemStorageConnection::isWorker const):
        * Modules/filesystemaccess/FileSystemSyncAccessHandle.cpp:
        (WebCore::FileSystemSyncAccessHandle::FileSystemSyncAccessHandle):
        (WebCore::FileSystemSyncAccessHandle::~FileSystemSyncAccessHandle):
        (WebCore::FileSystemSyncAccessHandle::closeInternal):
        (WebCore::FileSystemSyncAccessHandle::closeFile):
        (WebCore::FileSystemSyncAccessHandle::didCloseFile):
        (WebCore::FileSystemSyncAccessHandle::closeBackend):
        (WebCore::FileSystemSyncAccessHandle::didCloseBackend):
        (WebCore::FileSystemSyncAccessHandle::invalidate):
        (WebCore::FileSystemSyncAccessHandle::didClose): Deleted.
        * Modules/filesystemaccess/FileSystemSyncAccessHandle.h:
        * Modules/filesystemaccess/WorkerFileSystemStorageConnection.cpp:
        (WebCore::WorkerFileSystemStorageConnection::connectionClosed):
        (WebCore::WorkerFileSystemStorageConnection::registerSyncAccessHandle):
        (WebCore::WorkerFileSystemStorageConnection::unregisterSyncAccessHandle):
        (WebCore::WorkerFileSystemStorageConnection::invalidateAccessHandle):
        * Modules/filesystemaccess/WorkerFileSystemStorageConnection.h:
        (isType):
        * Modules/mediastream/RTCRtpScriptTransformer.cpp:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/BroadcastChannel.cpp:
        * workers/WorkerGlobalScope.cpp:
        * workers/WorkerGlobalScope.h:
        * workers/WorkerOrWorkletScriptController.cpp:

2021-12-01  Chris Dumez  <cdumez@apple.com>

        validity.valueMissing should not rely on element's disabled state for inputs of type radio/file/checkbox
        https://bugs.webkit.org/show_bug.cgi?id=233735

        Reviewed by Darin Adler.

        validity.valueMissing should not rely on element's disabled state for inputs of type radio/file/checkbox:
        - https://html.spec.whatwg.org/multipage/input.html#radio-button-state-(type=radio):suffering-from-being-missing
        - https://html.spec.whatwg.org/multipage/input.html#file-upload-state-(type=file):suffering-from-being-missing
        - https://html.spec.whatwg.org/multipage/input.html#checkbox-state-(type=checkbox):suffering-from-being-missing

        This was causing us to fail a few WPT tests that are passing in both Blink and Gecko.

        * html/BaseDateAndTimeInputType.cpp:
        (WebCore::BaseDateAndTimeInputType::valueMissing const):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::valueMissing const):
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::valueMissing const):

2021-12-01  Simon Fraser  <simon.fraser@apple.com>

        Scrolling complex websites can stutter: scrolling thread frame can fail to process wheel events
        https://bugs.webkit.org/show_bug.cgi?id=233739
        rdar://85946176

        Reviewed by Tim Horton.

        While the scrolling thread is chilling in
        ThreadedScrollingTree::waitForRenderingUpdateCompletionOrTimeout(), waiting up to half a
        frame to allow the main thread to handle the commit (for scroll synchronization), wheel
        events may have been dispatched to the scrolling thread.

        If we blow the timeout and commit anyway, we need to make sure we've handled these wheel
        events first, so that the current frame can commit some layer movement. We can achieve this
        by dispatching the applyLayerPositions(), which will enqueue it behind any waiting wheel
        event dispatch from EventDispatcher::internalWheelEvent().

        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::applyLayerPositions):
        * page/scrolling/ThreadedScrollingTree.cpp:
        (WebCore::ThreadedScrollingTree::waitForRenderingUpdateCompletionOrTimeout):

2021-12-01  Simon Fraser  <simon.fraser@apple.com>

        Scrolling complex websites can stutter: scrolling thread commit can get blocked on scroll synchronization
        https://bugs.webkit.org/show_bug.cgi?id=233738
        rdar://85880147

        Reviewed by Tim Horton.
        
        The scroll synchronization added in r261985 can cause dropped frames while scrolling. This
        occurs when ThreadedScrollingTree::waitForRenderingUpdateCompletionOrTimeout(), which is
        called at the start of a rendering update on the main thread, starts at a time when it will
        delay the handling of displayDidRefreshOnScrollingThread(). This can result in delaying the
        CA commit for that frame on the scrolling thread.

        The solution is to clamp the duration that waitForRenderingUpdateCompletionOrTimeout() waits
        on the condition, so that it doesn't exceed the next expected display refresh time.

        * page/scrolling/ThreadedScrollingTree.cpp:
        (WebCore::ThreadedScrollingTree::waitForRenderingUpdateCompletionOrTimeout):
        (WebCore::ThreadedScrollingTree::displayDidRefreshOnScrollingThread):
        * page/scrolling/ThreadedScrollingTree.h:

2021-12-01  Chris Fleizach  <cfleizach@apple.com>

        AX: Support accessibility attributes for <model>
        https://bugs.webkit.org/show_bug.cgi?id=233620
        <rdar://problem/85852073>

        Reviewed by Dean Jackson, Andres Gonzalez.

        Support accessible names on <model> tag and plumb through ability for the 
        platform rendered model framework to return accessibility elements.

        Test: accessibility/model-element-attributes.html

        * Modules/model-element/HTMLModelElement.cpp:
        (WebCore::HTMLModelElement::accessibilityChildren):
        * Modules/model-element/HTMLModelElement.h:
        * Modules/model-element/ModelPlayer.h:
        * Modules/model-element/dummy/DummyModelPlayer.cpp:
        (WebCore::DummyModelPlayer::accessibilityChildren):
        * Modules/model-element/dummy/DummyModelPlayer.h:
        * Modules/model-element/scenekit/SceneKitModelPlayer.h:
        * Modules/model-element/scenekit/SceneKitModelPlayer.mm:
        (WebCore::SceneKitModelPlayer::accessibilityChildren):
        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::usesAltTagForTextComputation const):
        (WebCore::shouldUseAccessibilityObjectInnerText):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::modelElementChildren):
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityObjectInterface.h:
        (WebCore::accessibilityRoleToString):
        (WebCore::AXCoreObject::isModel const):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):
        (WebCore::AccessibilityRenderObject::addChildren):
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilityElements]):
        (-[WebAccessibilityObjectWrapper determineIsAccessibilityElement]):
        * accessibility/isolatedtree/AXIsolatedObject.cpp:
        (WebCore::AXIsolatedObject::modelElementChildren):
        * accessibility/isolatedtree/AXIsolatedObject.h:
        * accessibility/mac/AccessibilityObjectMac.mm:
        (WebCore::Accessibility::createPlatformRoleMap):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper subrole]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
        (-[WebAccessibilityObjectWrapper accessibilityIndexOfChild:]):
        (-[WebAccessibilityObjectWrapper accessibilityArrayAttributeCount:]):
        (-[WebAccessibilityObjectWrapper accessibilityArrayAttributeValues:index:maxCount:]):

2021-12-01  Myles C. Maxfield  <mmaxfield@apple.com>

        [WebGPU] Add missing files to CMake
        https://bugs.webkit.org/show_bug.cgi?id=233687

        Reviewed by Sam Weinig.

        I forgot to list some files.

        No new tests because there is no behavior change.

        * Headers.cmake:

2021-12-01  Myles C. Maxfield  <mmaxfield@apple.com>

        [WebGPU] Add default values to structs in WebCore/Modules/WebGPU
        https://bugs.webkit.org/show_bug.cgi?id=233691

        Reviewed by Alex Christensen.

        Our bindings code expects that the structs backing dictionaries
        have default values for their members.

        No new tests because there is no behavior change.

        * Modules/WebGPU/GPUBindGroupDescriptor.h:
        * Modules/WebGPU/GPUBindGroupEntry.h:
        * Modules/WebGPU/GPUBindGroupLayoutEntry.h:
        * Modules/WebGPU/GPUBlendComponent.h:
        * Modules/WebGPU/GPUBufferBinding.h:
        * Modules/WebGPU/GPUBufferBindingLayout.h:
        * Modules/WebGPU/GPUBufferDescriptor.h:
        * Modules/WebGPU/GPUCanvasConfiguration.h:
        * Modules/WebGPU/GPUColorDict.h:
        * Modules/WebGPU/GPUColorTargetState.h:
        * Modules/WebGPU/GPUComputePassTimestampWrite.h:
        * Modules/WebGPU/GPUDepthStencilState.h:
        * Modules/WebGPU/GPUExtent3DDict.h:
        * Modules/WebGPU/GPUExternalTextureDescriptor.h:
        * Modules/WebGPU/GPUImageCopyBuffer.h:
        * Modules/WebGPU/GPUImageCopyTexture.h:
        * Modules/WebGPU/GPUImageCopyTextureTagged.h:
        * Modules/WebGPU/GPUImageDataLayout.h:
        * Modules/WebGPU/GPUMultisampleState.h:
        * Modules/WebGPU/GPUOrigin2DDict.h:
        * Modules/WebGPU/GPUOrigin3DDict.h:
        * Modules/WebGPU/GPUPipelineDescriptorBase.h:
        * Modules/WebGPU/GPUPrimitiveState.h:
        * Modules/WebGPU/GPUProgrammableStage.h:
        * Modules/WebGPU/GPUQuerySetDescriptor.h:
        * Modules/WebGPU/GPURenderBundleEncoderDescriptor.h:
        * Modules/WebGPU/GPURenderPassColorAttachment.h:
        * Modules/WebGPU/GPURenderPassDepthStencilAttachment.h:
        * Modules/WebGPU/GPURenderPassDescriptor.h:
        * Modules/WebGPU/GPURenderPassLayout.h:
        * Modules/WebGPU/GPURenderPassTimestampWrite.h:
        * Modules/WebGPU/GPURequestAdapterOptions.h:
        * Modules/WebGPU/GPUSamplerBindingLayout.h:
        * Modules/WebGPU/GPUSamplerDescriptor.h:
        * Modules/WebGPU/GPUStencilFaceState.h:
        * Modules/WebGPU/GPUStorageTextureBindingLayout.h:
        * Modules/WebGPU/GPUTextureBindingLayout.h:
        * Modules/WebGPU/GPUTextureDescriptor.h:
        * Modules/WebGPU/GPUTextureViewDescriptor.h:
        * Modules/WebGPU/GPUVertexAttribute.h:
        * Modules/WebGPU/GPUVertexBufferLayout.h:

2021-12-01  Alex Christensen  <achristensen@webkit.org>

        Use Span instead of pointer/length in CompiledContentExtension
        https://bugs.webkit.org/show_bug.cgi?id=233727

        Reviewed by Tim Hatcher.

        No change in behavior.  Just simplifying the interface a bit.

        * contentextensions/CompiledContentExtension.h:
        * contentextensions/ContentExtension.cpp:
        (WebCore::ContentExtensions::ContentExtension::ContentExtension):
        (WebCore::ContentExtensions::ContentExtension::findFirstIgnorePreviousRules const):
        (WebCore::ContentExtensions::ContentExtension::compileGlobalDisplayNoneStyleSheet):
        (WebCore::ContentExtensions::ContentExtension::populateConditionCacheIfNeeded):
        * contentextensions/ContentExtensionRule.cpp:
        (WebCore::ContentExtensions::DeserializedAction::deserialize):
        (WebCore::ContentExtensions::DeserializedAction::serializedLength):
        * contentextensions/ContentExtensionRule.h:
        * contentextensions/ContentExtensionsBackend.cpp:
        (WebCore::ContentExtensions::ContentExtensionsBackend::actionsForResourceLoad const):

2021-12-01  Nikolas Zimmermann  <nzimmermann@igalia.com>

        [LBSE] Rename RenderSVGRoot -> LegacyRenderSVGRoot
        https://bugs.webkit.org/show_bug.cgi?id=233666

        Reviewed by Rob Buis.

        RenderSVGRoot looks rather different in the layer-based SVG engine, therefore
        it makes most sense, to rename RenderSVGRoot -> LegacyRenderSVGRoot, and bring back
        RenderSVGRoot by a new implementation, in small patches that implement the different
        pieces layout / painting / etc.

        This patches renames RenderSVGRoot -> LegacyRenderSVGRoot and adapts all callsites.

        Should not affect any layout tests, as the renderName() stayed 'RenderSVGRoot' after
        the rename, to avoid having to rebaseline all SVG layout test expectations.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * accessibility/AXObjectCache.cpp:
        (WebCore::createFromRenderer):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::elementPath const):
        * inspector/InspectorOverlay.cpp:
        (WebCore::buildRendererHighlight):
        * page/FrameView.cpp:
        (WebCore::FrameView::applyOverflowToViewport):
        (WebCore::FrameView::forceLayoutParentViewIfNeeded):
        (WebCore::FrameView::embeddedContentBox const):
        * rendering/RenderFlexibleBox.cpp:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::setupClipPath):
        * rendering/RenderObject.cpp:
        * rendering/RenderTreeAsText.cpp:
        (WebCore::write):
        * rendering/svg/LegacyRenderSVGRoot.cpp: Renamed from Source/WebCore/rendering/svg/RenderSVGRoot.cpp.
        (WebCore::LegacyRenderSVGRoot::LegacyRenderSVGRoot):
        (WebCore::LegacyRenderSVGRoot::svgSVGElement const):
        (WebCore::LegacyRenderSVGRoot::computeIntrinsicRatioInformation const):
        (WebCore::LegacyRenderSVGRoot::isEmbeddedThroughSVGImage const):
        (WebCore::LegacyRenderSVGRoot::isEmbeddedThroughFrameContainingSVGDocument const):
        (WebCore::LegacyRenderSVGRoot::computeReplacedLogicalWidth const):
        (WebCore::LegacyRenderSVGRoot::computeReplacedLogicalHeight const):
        (WebCore::LegacyRenderSVGRoot::layout):
        (WebCore::LegacyRenderSVGRoot::shouldApplyViewportClip const):
        (WebCore::LegacyRenderSVGRoot::paintReplaced):
        (WebCore::LegacyRenderSVGRoot::willBeDestroyed):
        (WebCore::LegacyRenderSVGRoot::insertedIntoTree):
        (WebCore::LegacyRenderSVGRoot::willBeRemovedFromTree):
        (WebCore::LegacyRenderSVGRoot::styleDidChange):
        (WebCore::LegacyRenderSVGRoot::buildLocalToBorderBoxTransform):
        (WebCore::LegacyRenderSVGRoot::localToParentTransform const):
        (WebCore::LegacyRenderSVGRoot::clippedOverflowRect const):
        (WebCore::LegacyRenderSVGRoot::computeFloatVisibleRectInContainer const):
        (WebCore::LegacyRenderSVGRoot::mapLocalToContainer const):
        (WebCore::LegacyRenderSVGRoot::pushMappingToContainer const):
        (WebCore::LegacyRenderSVGRoot::updateCachedBoundaries):
        (WebCore::LegacyRenderSVGRoot::nodeAtPoint):
        (WebCore::LegacyRenderSVGRoot::hasRelativeDimensions const):
        (WebCore::LegacyRenderSVGRoot::addResourceForClientInvalidation):
        * rendering/svg/LegacyRenderSVGRoot.h: Renamed from Source/WebCore/rendering/svg/RenderSVGRoot.h.
        * rendering/svg/RenderSVGBlock.cpp:
        (WebCore::RenderSVGBlock::updateFromStyle):
        * rendering/svg/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::layout):
        * rendering/svg/RenderSVGForeignObject.cpp:
        (WebCore::RenderSVGForeignObject::layout):
        * rendering/svg/RenderSVGInlineText.cpp:
        * rendering/svg/RenderSVGResource.cpp:
        (WebCore::RenderSVGResource::markForLayoutAndParentResourceInvalidation):
        * rendering/svg/RenderSVGResourceContainer.cpp:
        (WebCore::RenderSVGResourceContainer::layout):
        * rendering/svg/RenderSVGResourceMarker.cpp:
        (WebCore::RenderSVGResourceMarker::layout):
        * rendering/svg/RenderSVGResourcePattern.cpp:
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::layout):
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::localToParentTransform):
        (WebCore::SVGRenderSupport::findTreeRootObject):
        (WebCore::layoutSizeOfNearestViewportChanged):
        (WebCore::SVGRenderSupport::transformToRootChanged):
        (WebCore::SVGRenderSupport::isOverflowHidden):
        * rendering/svg/SVGRenderSupport.h:
        * rendering/svg/SVGRenderTreeAsText.cpp:
        (WebCore::write):
        * rendering/svg/SVGRenderTreeAsText.h:
        * rendering/svg/SVGResources.cpp:
        (WebCore::SVGResources::layoutDifferentRootIfNeeded):
        * rendering/svg/SVGResources.h:
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::attachInternal):
        (WebCore::RenderTreeBuilder::detach):
        (WebCore::RenderTreeBuilder::reportVisuallyNonEmptyContent):
        * rendering/updating/RenderTreeBuilderSVG.cpp:
        (WebCore::RenderTreeBuilder::SVG::attach):
        (WebCore::RenderTreeBuilder::SVG::detach):
        * rendering/updating/RenderTreeBuilderSVG.h:
        * style/StyleAdjuster.cpp:
        (WebCore::Style::Adjuster::adjustSVGElementStyle):
        * style/StyleBuilderState.cpp:
        * svg/SVGLengthContext.cpp:
        (WebCore::renderStyleForLengthResolving):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::svgAttributeChanged):
        (WebCore::SVGSVGElement::localCoordinateSpaceTransform const):
        (WebCore::SVGSVGElement::rendererIsNeeded):
        (WebCore::SVGSVGElement::createElementRenderer):
        (WebCore::SVGSVGElement::currentViewBoxRect const):
        (WebCore::SVGSVGElement::currentViewportSize const):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::setContainerSize):
        (WebCore::SVGImage::containerSize const):
        * svg/graphics/SVGImageCache.cpp:

2021-12-01  Adrian Perez de Castro  <aperez@igalia.com>

        Non-unified build fixes, early December 2021 edition
        https://bugs.webkit.org/show_bug.cgi?id=233699

        Unreviewed non-unified build fixes.

        No new tests needed.

        * Modules/web-locks/WebLockManager.cpp: Add missing WebLock.h header.
        * Modules/web-locks/WebLockRegistry.cpp: Add missing wtf/CompletionHandler.h header.
        * platform/graphics/filters/FEBlend.cpp: Add missing ImageBuffer.h header.
        * platform/graphics/filters/FEMerge.cpp: Ditto.
        * platform/graphics/filters/FilterImage.h: Add missing FloatRect.h header.
        * workers/service/context/ServiceWorkerFetch.h: Add missing FetchIdentifier.h header.

2021-12-01  Alex Christensen  <achristensen@webkit.org>

        Add csp-report resource type to WKContentRuleList
        https://bugs.webkit.org/show_bug.cgi?id=233675
        <rdar://71869893>

        Reviewed by Tim Hatcher.

        This feature is trivial to implement and test except for one small thing: we use a uint16_t to represent the
        resource type and context and first party flags, and we already have 16 of them.  So we needed to get another
        bit from somewhere.  What I did was make the flags have a variable length from 1-3 bytes instead of just 2 bytes.
        I used the unused upper bits in the instruction to indicate the length of the flags, and if the upper bits were 0,
        then I assume it was 2 bytes, which is binary compatible with existing compiled WKContentRuleLists, so no need
        to increment the version number and force a recompile.  It worked so well that I did the same thing with the actions,
        which were 4 bytes but are now 1-4 bytes.  This reduced the compiled binary size of one of the tests from 313 bytes
        to 288 bytes, a reduction of about 8% of the binary size of the compiled WKContentRuleLists.  Larger lists will see
        slightly less binary size reduction, but still an improvement.

        * contentextensions/ContentExtension.cpp:
        (WebCore::ContentExtensions::ContentExtension::ContentExtension):
        (WebCore::ContentExtensions::ContentExtension::populateConditionCacheIfNeeded):
        * contentextensions/ContentExtensionsBackend.cpp:
        (WebCore::ContentExtensions::ContentExtensionsBackend::actionsForResourceLoad const):
        * contentextensions/DFABytecode.h:
        (WebCore::ContentExtensions::smallestPossibleJumpSize):
        (): Deleted.
        (WebCore::ContentExtensions::instructionSizeWithArguments): Deleted.
        * contentextensions/DFABytecodeCompiler.cpp:
        (WebCore::ContentExtensions::append):
        (WebCore::ContentExtensions::append24BitInteger):
        (WebCore::ContentExtensions::appendZeroes):
        (WebCore::ContentExtensions::setBits):
        (WebCore::ContentExtensions::bytecodeFlagsSize):
        (WebCore::ContentExtensions::bytecodeActionSize):
        (WebCore::ContentExtensions::appendVariableLengthInteger):
        (WebCore::ContentExtensions::DFABytecodeCompiler::emitAppendAction):
        (WebCore::ContentExtensions::DFABytecodeCompiler::emitJump):
        (WebCore::ContentExtensions::DFABytecodeCompiler::emitCheckValue):
        (WebCore::ContentExtensions::DFABytecodeCompiler::emitCheckValueRange):
        (WebCore::ContentExtensions::DFABytecodeCompiler::transitions):
        (WebCore::ContentExtensions::DFABytecodeCompiler::compileJumpTable):
        (WebCore::ContentExtensions::DFABytecodeCompiler::nodeTransitionsMaxBytecodeSize):
        (WebCore::ContentExtensions::DFABytecodeCompiler::compile):
        * contentextensions/DFABytecodeInterpreter.cpp:
        (WebCore::ContentExtensions::getBits):
        (WebCore::ContentExtensions::get24Bits):
        (WebCore::ContentExtensions::getInstruction):
        (WebCore::ContentExtensions::jumpSizeInBytes):
        (WebCore::ContentExtensions::consumeInteger):
        (WebCore::ContentExtensions::consume24BitInteger):
        (WebCore::ContentExtensions::hasFlags):
        (WebCore::ContentExtensions::hasAction):
        (WebCore::ContentExtensions::consumeResourceFlagsAndInstruction):
        (WebCore::ContentExtensions::consumeAction):
        (WebCore::ContentExtensions::getJumpSize):
        (WebCore::ContentExtensions::getJumpDistance):
        (WebCore::ContentExtensions::matchesCondition):
        (WebCore::ContentExtensions::DFABytecodeInterpreter::interpretAppendAction):
        (WebCore::ContentExtensions::DFABytecodeInterpreter::interpretTestFlagsAndAppendAction):
        (WebCore::ContentExtensions::DFABytecodeInterpreter::interpetJumpTable):
        (WebCore::ContentExtensions::DFABytecodeInterpreter::actionsMatchingEverything):
        (WebCore::ContentExtensions::DFABytecodeInterpreter::interpretWithConditions):
        (WebCore::ContentExtensions::DFABytecodeInterpreter::interpret):
        * contentextensions/DFABytecodeInterpreter.h:
        (WebCore::ContentExtensions::DFABytecodeInterpreter::DFABytecodeInterpreter):
        * loader/PingLoader.cpp:
        (WebCore::PingLoader::sendViolationReport):
        * loader/ResourceLoadInfo.cpp:
        (WebCore::ContentExtensions::readResourceType):
        * loader/ResourceLoadInfo.h:

2021-12-01  Rob Buis  <rbuis@igalia.com>

        Remove virtual from RenderWidget::paintContents
        https://bugs.webkit.org/show_bug.cgi?id=233709

        Reviewed by Simon Fraser.

        Remove virtual from RenderWidget:: paintContents since it is not overridden.

        * rendering/RenderWidget.h:

2021-12-01  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] requestVideoFrameCallback support
        https://bugs.webkit.org/show_bug.cgi?id=233541

        Reviewed by Xabier Rodriguez-Calvar.

        Video frames metadata reported by the player is stored in GstBuffers as a new GstMeta.
        Processing times is tracked in converters and decoders using pad probes. The GStreamer
        mediastream video capturer is now inserting metadata that includes the capture timestamp in
        the buffers. The WebRTC incoming and mock sources are wrapping the metadata in the
        MediaSamples they create.

        * platform/GStreamer.cmake:
        * platform/VideoFrameMetadata.h:
        * platform/graphics/gstreamer/GStreamerCommon.h:
        (WebCore::fromGstClockTime):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin):
        (WebCore::MediaPlayerPrivateGStreamer::configureVideoDecoder):
        (WebCore::MediaPlayerPrivateGStreamer::pushTextureToCompositor):
        (WebCore::MediaPlayerPrivateGStreamer::flushCurrentBuffer):
        (WebCore::MediaPlayerPrivateGStreamer::videoFrameMetadata):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        * platform/graphics/gstreamer/MediaSampleGStreamer.cpp:
        (WebCore::MediaSampleGStreamer::MediaSampleGStreamer):
        (WebCore::MediaSampleGStreamer::createImageSample):
        * platform/graphics/gstreamer/MediaSampleGStreamer.h:
        (WebCore::MediaSampleGStreamer::create):
        (WebCore::MediaSampleGStreamer::createImageSample):
        (WebCore::MediaSampleGStreamer::MediaSampleGStreamer):
        * platform/graphics/gstreamer/VideoFrameMetadataGStreamer.cpp: Added.
        (videoFrameMetadataAPIGetType):
        (videoFrameMetadataGetInfo):
        (webkitGstBufferSetVideoSampleMetadata):
        (webkitGstTraceProcessingTimeForElement):
        (webkitGstBufferGetVideoFrameMetadata):
        * platform/graphics/gstreamer/VideoFrameMetadataGStreamer.h: Added.
        * platform/mediastream/gstreamer/GStreamerCapturer.cpp:
        (WebCore::GStreamerCapturer::createSource):
        * platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:
        (mediaStreamTrackPrivateGetTags):
        * platform/mediastream/gstreamer/MockRealtimeVideoSourceGStreamer.cpp:
        (WebCore::MockRealtimeVideoSourceGStreamer::updateSampleBuffer):
        * platform/mediastream/libwebrtc/gstreamer/RealtimeIncomingVideoSourceLibWebRTC.cpp:
        (WebCore::RealtimeIncomingVideoSourceLibWebRTC::OnFrame):
        * platform/mediastream/libwebrtc/gstreamer/RealtimeIncomingVideoSourceLibWebRTC.h:

2021-12-01  Wenson Hsieh  <wenson_hsieh@apple.com>

        Adjust a Live Text quirk so that it applies to YouTube image thumbnails
        https://bugs.webkit.org/show_bug.cgi?id=233670

        Reviewed by Devin Rousso.

        Augment this existing quirk so that it (1) applies to YouTube as well, and (2) also forces `-webkit-user-drag`
        to be `auto`.

        * dom/ImageOverlay.cpp:
        (WebCore::ImageOverlay::updateSubtree):
        * page/Quirks.cpp:
        (WebCore::Quirks::needsToForceUserSelectAndUserDragWhenInstallingImageOverlay const):
        (WebCore::Quirks::needsToForceUserSelectWhenInstallingImageOverlay const): Deleted.
        * page/Quirks.h:

2021-12-01  Antti Koivisto  <antti@apple.com>

        [:has() pseudo-class] Sibling combinator invalidation
        https://bugs.webkit.org/show_bug.cgi?id=233696

        Reviewed by Simon Fraser.

        Invalidate style correctly for sibling combinators in :has() arguments.

        Also add new MatchElement::HasSiblingDescendant value used for :has() arguments that
        match the subject elements siblings descendants, like ':has(~ div .descendant)'.
        Use it to avoid unnecessary big tree traversals in simple cases.

        Test: imported/w3c/web-platform-tests/css/selectors/invalidation/has-sibling.html

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::matchHasPseudoClass const):

        Minimal traversals for HasSibling and HasSiblingDescendant.

        * style/ChildChangeInvalidation.cpp:
        (WebCore::Style::needsTraversal):
        (WebCore::Style::needsDescendantTraversal):
        * style/RuleFeature.cpp:
        (WebCore::Style::isSiblingOrSubject):
        (WebCore::Style::isHasPseudoClassMatchElement):
        (WebCore::Style::computeHasPseudoClassMatchElement):
        * style/RuleFeature.h:
        * style/StyleInvalidator.cpp:
        (WebCore::Style::Invalidator::invalidateStyleWithMatchElement):

        Invalidation traversal.

2021-12-01  Youenn Fablet  <youenn@apple.com>

        Add a features.json entry to requestVideoFrameCallback
        https://bugs.webkit.org/show_bug.cgi?id=233690

        Reviewed by Eric Carlson.

        No change of behavior.

        * features.json:

2021-12-01  Patrick Griffis  <pgriffis@igalia.com>

        CSP: Update URL stripping in reports to match other implementations
        https://bugs.webkit.org/show_bug.cgi?id=233135

        Reviewed by Kate Cheney.

        * page/csp/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::createURLForReporting const):
        (WebCore::ContentSecurityPolicy::reportViolation const):
        (WebCore::ContentSecurityPolicy::deprecatedURLForReporting const): Deleted.
        * page/csp/ContentSecurityPolicy.h:

2021-12-01  Youenn Fablet  <youenn@apple.com>

        Reuse navigation preload if service worker is fetching the corresponding navigation request
        https://bugs.webkit.org/show_bug.cgi?id=233490

        Reviewed by Chris Dumez.

        Store the fetch identifier in FetchRequest as this might be used as the navigation preload identifier.
        We set it when creating a FetchRequest for firing a fetch event.
        This identifier is kept in case of request cloning or when creating a request as part of calling fetch.
        It is used to set the navigationPreloadIdentifier in ResourceLoaderOptions that is piped to WebLoaderStrategy.

        Test: http/wpt/service-workers/fetch-service-worker-preload.https.html

        * Modules/fetch/FetchLoader.cpp:
        * Modules/fetch/FetchRequest.cpp:
        * Modules/fetch/FetchRequest.h:
        * loader/ResourceLoaderOptions.h:
        * loader/ThreadableLoader.cpp:
        * workers/service/context/ServiceWorkerFetch.cpp:
        * workers/service/context/ServiceWorkerFetch.h:
        * workers/service/context/ServiceWorkerThread.cpp:
        * workers/service/context/ServiceWorkerThread.h:
        * workers/service/context/ServiceWorkerThreadProxy.cpp:

2021-12-01  Enrique Ocaña González  <eocanha@igalia.com>

        [MSE][WPE] Parameterize maximum buffer size using the MSE_MAX_BUFFER_SIZE env var
        https://bugs.webkit.org/show_bug.cgi?id=233495

        Reviewed by Xabier Rodriguez-Calvar.

        The current MSE policy of SourceBuffers taking all the available system memory until the MemoryPressureHandler
        complains may work fine for a typical desktop system, when caching is preferred over memory footprint. However,
        memory is scarce on embedded systems and WebKit may compete with other software for memory resources. In that
        scenario, the embedder may prefer to restrict the amount of memory available for each kind of SourceBuffer
        (audio, video, text).

        For that purpose, the MSE_MAX_BUFFER_SIZE environment variable is honored. It has the following syntax: Case
        insensitive, full type (audio, video, text), compact type (a, v, t), wildcard (*), unit multipliers (M=Mb,
        K=Kb, <empty>=bytes). Examples:

          MSE_MAX_BUFFER_SIZE='V:50M,audio:12k,TeXT:500K'
          MSE_MAX_BUFFER_SIZE='*:100M'
          MSE_MAX_BUFFER_SIZE='video:90M,T:100000'

        * Modules/mediasource/SourceBuffer.cpp: Honor platform imposed buffer size restrictions with higher priority (if present) than the element ones.
        * platform/graphics/SourceBufferPrivate.h: Added platformMaximumBufferSize() default implementation that sets no buffer size restrictions.
        * platform/graphics/gstreamer/mse/SourceBufferPrivateGStreamer.cpp: Read the MSE_MAX_BUFFER_SIZE environment variable and compute the maximum buffer
        size if the size is specified in the variable for all the track types present in the SourceBufferPrivate. Otherwise, use the default size.
        * platform/graphics/gstreamer/mse/SourceBufferPrivateGStreamer.h: Override default platformMaximumBufferSize() implementation.

2021-11-30  Simon Fraser  <simon.fraser@apple.com>

        Pass the timestamp for scrolling thread animations through all the serviceScrollAnimation() calls
        https://bugs.webkit.org/show_bug.cgi?id=233678

        Reviewed by Tim Horton.

        All scroll animations serviced at the same time should use a common timestamp, and
        avoid multiple calls to MonotonicTime::now() by passing the time down through from
        ThreadedScrollingTree::displayDidRefreshOnScrollingThread().

        Also minor refactoring in ThreadedScrollingTree to prepare for a future patch.

        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::nominalFramesPerSecond):
        * page/scrolling/ScrollingTreeScrollingNode.h:
        * page/scrolling/ScrollingTreeScrollingNodeDelegate.h:
        * page/scrolling/ThreadedScrollingTree.cpp:
        (WebCore::ThreadedScrollingTree::frameDuration):
        (WebCore::ThreadedScrollingTree::maxAllowableRenderingUpdateDurationForSynchronization):
        (WebCore::ThreadedScrollingTree::serviceScrollAnimations):
        (WebCore::ThreadedScrollingTree::displayDidRefreshOnScrollingThread):
        * page/scrolling/ThreadedScrollingTree.h:
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h:
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeMac::serviceScrollAnimation):
        * page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.h:
        * page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.mm:
        (WebCore::ScrollingTreeOverflowScrollingNodeMac::serviceScrollAnimation):
        * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.h:
        * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.mm:
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::serviceScrollAnimation):
        * page/scrolling/nicosia/ScrollingTreeFrameScrollingNodeNicosia.cpp:
        (WebCore::ScrollingTreeFrameScrollingNodeNicosia::serviceScrollAnimation):
        * page/scrolling/nicosia/ScrollingTreeFrameScrollingNodeNicosia.h:
        * page/scrolling/nicosia/ScrollingTreeOverflowScrollingNodeNicosia.cpp:
        (WebCore::ScrollingTreeOverflowScrollingNodeNicosia::serviceScrollAnimation):
        * page/scrolling/nicosia/ScrollingTreeOverflowScrollingNodeNicosia.h:
        * page/scrolling/nicosia/ScrollingTreeScrollingNodeDelegateNicosia.cpp:
        (WebCore::ScrollingTreeScrollingNodeDelegateNicosia::serviceScrollAnimation):
        * page/scrolling/nicosia/ScrollingTreeScrollingNodeDelegateNicosia.h:

2021-11-30  Simon Fraser  <simon.fraser@apple.com>

        Remove the scrolling tree plumbing of the momentumScrollingAnimatorEnabled() setting, which is no longer needed
        https://bugs.webkit.org/show_bug.cgi?id=233680

        Reviewed by Tim Horton.

        We no longer consult the momentumScrollingAnimatorEnabled setting in the scrolling tree, so remove
        the plumbing.

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::setFrameScrollingNodeState):
        * page/scrolling/ScrollingStateFrameScrollingNode.cpp:
        (WebCore::ScrollingStateFrameScrollingNode::ScrollingStateFrameScrollingNode):
        (WebCore::ScrollingStateFrameScrollingNode::applicableProperties const):
        (WebCore::ScrollingStateFrameScrollingNode::setMomentumScrollingAnimatorEnabled): Deleted.
        * page/scrolling/ScrollingStateFrameScrollingNode.h:
        * page/scrolling/ScrollingStateNode.h:
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::commitTreeState):
        * page/scrolling/ScrollingTree.h:
        (WebCore::ScrollingTree::momentumScrollingAnimatorEnabled const): Deleted.
        (WebCore::ScrollingTree::setMomentumScrollingAnimatorEnabled): Deleted.
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::momentumScrollingAnimatorEnabled const): Deleted.
        * page/scrolling/ScrollingTreeScrollingNode.h:
        * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.h:
        * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.mm:
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::momentumScrollingAnimatorEnabled const): Deleted.
        * platform/ScrollingEffectsController.cpp:
        (WebCore::ScrollingEffectsController::ScrollingEffectsController):
        * platform/ScrollingEffectsController.h:
        (WebCore::ScrollingEffectsControllerClient::scrollAnimationEnabled const):
        (WebCore::ScrollingEffectsControllerClient::momentumScrollingAnimatorEnabled const): Deleted.
        (WebCore::ScrollingEffectsController::momentumScrollingAnimatorEnabled const): Deleted.

2021-11-30  Devin Rousso  <drousso@apple.com>

        [css-values-4] Dynamic `dv*` viewport units should not respect the page scale
        https://bugs.webkit.org/show_bug.cgi?id=233291

        Reviewed by Simon Fraser.

        According to the spec (<https://drafts.csswg.org/css-values-4/#viewport-relative-lengths>):
        > The viewport-percentage lengths are relative to the size of the initial containing block.
        As such, we should really be using the layout viewport, not the visual viewport.

        Tests: CSSViewportUnits.AllSame
               CSSViewportUnits.EmptyUnobscuredSizeOverrides
               CSSViewportUnits.SameUnobscuredSizeOverrides
               CSSViewportUnits.DifferentUnobscuredSizeOverrides

        * page/FrameView.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::availableContentSizeChanged):
        (WebCore::FrameView::layoutOrVisualViewportChanged):
        (WebCore::FrameView::unobscuredContentSizeChanged):
        (WebCore::FrameView::sizeForCSSDynamicViewportUnits() const):
        Make sure to notify elements using CSS viewport units of changes to the layout viewport.

2021-11-30  Chris Dumez  <cdumez@apple.com>

        Null check value returned by WorkerOrWorkletGlobalScope::script()
        https://bugs.webkit.org/show_bug.cgi?id=233655

        Reviewed by Darin Adler.

        Null check value returned by WorkerOrWorkletGlobalScope::script() since it can in theory be null
        (it gets cleared in prepareForDestruction()).

        * bindings/js/JSDOMConvertPromise.h:
        (WebCore::Converter<IDLPromise<T>>::convert):
        * bindings/js/JSDOMPromiseDeferred.cpp:
        (WebCore::DeferredPromise::handleTerminationExceptionIfNeeded):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent):

2021-11-30  Mark Lam  <mark.lam@apple.com>

        Move Subspaces from VM to Heap.
        https://bugs.webkit.org/show_bug.cgi?id=233648
        rdar://85875751

        Reviewed by Saam Barati.

        1. Embed IsoHeapCellType instances in JSVMClientData directly instead of
           malloc'ing them separately and referencing them via unique_ptrs.  These
           instances are always instantiated unconditionally anyway.  This change
           eliminates the unneeded busy work to allocate them separately.

        2. Add missing initialization of JSVMClientData::m_heapCellTypeForJSSharedWorkerGlobalScope.
           This hasn't been an issue so far because we don't currently allow shared workers.

        3. Rebase bindings test results.

        * bindings/js/JSDOMAsyncIterator.h:
        * bindings/js/JSDOMIterator.h:
        * bindings/js/JSFileSystemDirectoryHandleIterator.cpp:
        (WebCore::JSFileSystemDirectoryHandleIterator::subspaceForImpl):
        * bindings/js/WebCoreJSClientData.cpp:
        (WebCore::JSVMClientData::JSVMClientData):
        * bindings/js/WebCoreJSClientData.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        (GenerateIterableDefinition):
        (GeneratePrototypeDeclaration):
        * bindings/scripts/test/JS/JSDOMWindow.cpp:
        (WebCore::JSDOMWindow::subspaceForImpl):
        * bindings/scripts/test/JS/JSDOMWindow.h:
        * bindings/scripts/test/JS/JSDedicatedWorkerGlobalScope.cpp:
        (WebCore::JSDedicatedWorkerGlobalScope::subspaceForImpl):
        * bindings/scripts/test/JS/JSDedicatedWorkerGlobalScope.h:
        * bindings/scripts/test/JS/JSExposedStar.cpp:
        (WebCore::JSExposedStarDOMConstructor::prototypeForStructure):
        (WebCore::JSExposedStar::subspaceForImpl):
        * bindings/scripts/test/JS/JSExposedToWorkerAndWindow.cpp:
        (WebCore::JSExposedToWorkerAndWindow::subspaceForImpl):
        * bindings/scripts/test/JS/JSPaintWorkletGlobalScope.cpp:
        (WebCore::JSPaintWorkletGlobalScope::subspaceForImpl):
        * bindings/scripts/test/JS/JSPaintWorkletGlobalScope.h:
        * bindings/scripts/test/JS/JSServiceWorkerGlobalScope.cpp:
        (WebCore::JSServiceWorkerGlobalScope::subspaceForImpl):
        * bindings/scripts/test/JS/JSServiceWorkerGlobalScope.h:
        * bindings/scripts/test/JS/JSSharedWorkerGlobalScope.cpp:
        (WebCore::JSSharedWorkerGlobalScope::subspaceForImpl):
        * bindings/scripts/test/JS/JSSharedWorkerGlobalScope.h:
        * bindings/scripts/test/JS/JSTestCEReactions.cpp:
        (WebCore::JSTestCEReactionsDOMConstructor::prototypeForStructure):
        (WebCore::JSTestCEReactions::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestCEReactionsStringifier.cpp:
        (WebCore::JSTestCEReactionsStringifierDOMConstructor::prototypeForStructure):
        (WebCore::JSTestCEReactionsStringifier::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestCallTracer.cpp:
        (WebCore::JSTestCallTracerDOMConstructor::prototypeForStructure):
        (WebCore::JSTestCallTracer::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.cpp:
        (WebCore::JSTestClassWithJSBuiltinConstructorDOMConstructor::prototypeForStructure):
        (WebCore::JSTestClassWithJSBuiltinConstructor::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestConditionalIncludes.cpp:
        (WebCore::JSTestConditionalIncludesDOMConstructor::prototypeForStructure):
        (WebCore::JSTestConditionalIncludes::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestConditionallyReadWrite.cpp:
        (WebCore::JSTestConditionallyReadWriteDOMConstructor::prototypeForStructure):
        (WebCore::JSTestConditionallyReadWrite::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestDOMJIT.cpp:
        (WebCore::JSTestDOMJITDOMConstructor::prototypeForStructure):
        (WebCore::JSTestDOMJIT::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestDefaultToJSON.cpp:
        (WebCore::JSTestDefaultToJSONDOMConstructor::prototypeForStructure):
        (WebCore::JSTestDefaultToJSON::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestDefaultToJSONFilteredByExposed.cpp:
        (WebCore::JSTestDefaultToJSONFilteredByExposedDOMConstructor::prototypeForStructure):
        (WebCore::JSTestDefaultToJSONFilteredByExposed::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestDefaultToJSONIndirectInheritance.cpp:
        (WebCore::JSTestDefaultToJSONIndirectInheritanceDOMConstructor::prototypeForStructure):
        (WebCore::JSTestDefaultToJSONIndirectInheritance::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestDefaultToJSONInherit.cpp:
        (WebCore::JSTestDefaultToJSONInheritDOMConstructor::prototypeForStructure):
        (WebCore::JSTestDefaultToJSONInherit::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestDefaultToJSONInheritFinal.cpp:
        (WebCore::JSTestDefaultToJSONInheritFinalDOMConstructor::prototypeForStructure):
        (WebCore::JSTestDefaultToJSONInheritFinal::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestDelegateToSharedSyntheticAttribute.cpp:
        (WebCore::JSTestDelegateToSharedSyntheticAttributeDOMConstructor::prototypeForStructure):
        (WebCore::JSTestDelegateToSharedSyntheticAttribute::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestDomainSecurity.cpp:
        (WebCore::JSTestDomainSecurityDOMConstructor::prototypeForStructure):
        (WebCore::JSTestDomainSecurity::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestEnabledBySetting.cpp:
        (WebCore::JSTestEnabledBySettingDOMConstructor::prototypeForStructure):
        (WebCore::JSTestEnabledBySetting::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestEnabledForContext.cpp:
        (WebCore::JSTestEnabledForContextDOMConstructor::prototypeForStructure):
        (WebCore::JSTestEnabledForContext::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore::JSTestEventConstructor::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::JSTestEventTargetDOMConstructor::prototypeForStructure):
        (WebCore::JSTestEventTarget::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestException.cpp:
        (WebCore::JSTestExceptionDOMConstructor::prototypeForStructure):
        (WebCore::JSTestException::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestGenerateAddOpaqueRoot.cpp:
        (WebCore::JSTestGenerateAddOpaqueRootDOMConstructor::prototypeForStructure):
        (WebCore::JSTestGenerateAddOpaqueRoot::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        (WebCore::JSTestGenerateIsReachableDOMConstructor::prototypeForStructure):
        (WebCore::JSTestGenerateIsReachable::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestGlobalObject.cpp:
        (WebCore::JSTestGlobalObject::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestGlobalObject.h:
        * bindings/scripts/test/JS/JSTestIndexedSetterNoIdentifier.cpp:
        (WebCore::JSTestIndexedSetterNoIdentifierDOMConstructor::prototypeForStructure):
        (WebCore::JSTestIndexedSetterNoIdentifier::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestIndexedSetterThrowingException.cpp:
        (WebCore::JSTestIndexedSetterThrowingExceptionDOMConstructor::prototypeForStructure):
        (WebCore::JSTestIndexedSetterThrowingException::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestIndexedSetterWithIdentifier.cpp:
        (WebCore::JSTestIndexedSetterWithIdentifierDOMConstructor::prototypeForStructure):
        (WebCore::JSTestIndexedSetterWithIdentifier::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterfaceDOMConstructor::construct):
        (WebCore::jsTestInterfacePrototypeFunction_entriesCaller):
        (WebCore::JSTestInterface::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestInterfaceLeadingUnderscore.cpp:
        (WebCore::JSTestInterfaceLeadingUnderscoreDOMConstructor::prototypeForStructure):
        (WebCore::JSTestInterfaceLeadingUnderscore::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestIterable.cpp:
        (WebCore::JSTestIterableDOMConstructor::prototypeForStructure):
        (WebCore::jsTestIterablePrototypeFunction_entriesCaller):
        (WebCore::JSTestIterable::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp:
        (WebCore::JSTestJSBuiltinConstructorDOMConstructor::prototypeForStructure):
        (WebCore::JSTestJSBuiltinConstructor::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestLegacyFactoryFunction.cpp:
        (WebCore::JSTestLegacyFactoryFunctionDOMConstructor::prototypeForStructure):
        (WebCore::JSTestLegacyFactoryFunction::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestLegacyNoInterfaceObject.cpp:
        (WebCore::JSTestLegacyNoInterfaceObjectPrototype::finishCreation):
        (WebCore::JSTestLegacyNoInterfaceObject::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestLegacyOverrideBuiltIns.cpp:
        (WebCore::JSTestLegacyOverrideBuiltInsDOMConstructor::prototypeForStructure):
        (WebCore::JSTestLegacyOverrideBuiltIns::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestMapLike.cpp:
        (WebCore::JSTestMapLikeDOMConstructor::prototypeForStructure):
        (WebCore::JSTestMapLike::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestMapLikeWithOverriddenOperations.cpp:
        (WebCore::JSTestMapLikeWithOverriddenOperationsDOMConstructor::prototypeForStructure):
        (WebCore::JSTestMapLikeWithOverriddenOperations::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterNoIdentifier.cpp:
        (WebCore::JSTestNamedAndIndexedSetterNoIdentifierDOMConstructor::prototypeForStructure):
        (WebCore::JSTestNamedAndIndexedSetterNoIdentifier::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterThrowingException.cpp:
        (WebCore::JSTestNamedAndIndexedSetterThrowingExceptionDOMConstructor::prototypeForStructure):
        (WebCore::JSTestNamedAndIndexedSetterThrowingException::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterWithIdentifier.cpp:
        (WebCore::JSTestNamedAndIndexedSetterWithIdentifierDOMConstructor::prototypeForStructure):
        (WebCore::JSTestNamedAndIndexedSetterWithIdentifier::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestNamedDeleterNoIdentifier.cpp:
        (WebCore::JSTestNamedDeleterNoIdentifierDOMConstructor::prototypeForStructure):
        (WebCore::JSTestNamedDeleterNoIdentifier::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestNamedDeleterThrowingException.cpp:
        (WebCore::JSTestNamedDeleterThrowingExceptionDOMConstructor::prototypeForStructure):
        (WebCore::JSTestNamedDeleterThrowingException::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestNamedDeleterWithIdentifier.cpp:
        (WebCore::JSTestNamedDeleterWithIdentifierDOMConstructor::prototypeForStructure):
        (WebCore::JSTestNamedDeleterWithIdentifier::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestNamedDeleterWithIndexedGetter.cpp:
        (WebCore::JSTestNamedDeleterWithIndexedGetterDOMConstructor::prototypeForStructure):
        (WebCore::JSTestNamedDeleterWithIndexedGetter::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestNamedGetterCallWith.cpp:
        (WebCore::JSTestNamedGetterCallWithDOMConstructor::prototypeForStructure):
        (WebCore::JSTestNamedGetterCallWith::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestNamedGetterNoIdentifier.cpp:
        (WebCore::JSTestNamedGetterNoIdentifierDOMConstructor::prototypeForStructure):
        (WebCore::JSTestNamedGetterNoIdentifier::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestNamedGetterWithIdentifier.cpp:
        (WebCore::JSTestNamedGetterWithIdentifierDOMConstructor::prototypeForStructure):
        (WebCore::JSTestNamedGetterWithIdentifier::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestNamedSetterNoIdentifier.cpp:
        (WebCore::JSTestNamedSetterNoIdentifierDOMConstructor::prototypeForStructure):
        (WebCore::JSTestNamedSetterNoIdentifier::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestNamedSetterThrowingException.cpp:
        (WebCore::JSTestNamedSetterThrowingExceptionDOMConstructor::prototypeForStructure):
        (WebCore::JSTestNamedSetterThrowingException::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestNamedSetterWithIdentifier.cpp:
        (WebCore::JSTestNamedSetterWithIdentifierDOMConstructor::prototypeForStructure):
        (WebCore::JSTestNamedSetterWithIdentifier::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetter.cpp:
        (WebCore::JSTestNamedSetterWithIndexedGetterDOMConstructor::prototypeForStructure):
        (WebCore::JSTestNamedSetterWithIndexedGetter::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetterAndSetter.cpp:
        (WebCore::JSTestNamedSetterWithIndexedGetterAndSetterDOMConstructor::prototypeForStructure):
        (WebCore::JSTestNamedSetterWithIndexedGetterAndSetter::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestNamedSetterWithLegacyOverrideBuiltIns.cpp:
        (WebCore::JSTestNamedSetterWithLegacyOverrideBuiltInsDOMConstructor::prototypeForStructure):
        (WebCore::JSTestNamedSetterWithLegacyOverrideBuiltIns::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestNamedSetterWithLegacyUnforgeableProperties.cpp:
        (WebCore::JSTestNamedSetterWithLegacyUnforgeablePropertiesDOMConstructor::prototypeForStructure):
        (WebCore::JSTestNamedSetterWithLegacyUnforgeableProperties::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestNamedSetterWithLegacyUnforgeablePropertiesAndLegacyOverrideBuiltIns.cpp:
        (WebCore::JSTestNamedSetterWithLegacyUnforgeablePropertiesAndLegacyOverrideBuiltInsDOMConstructor::prototypeForStructure):
        (WebCore::JSTestNamedSetterWithLegacyUnforgeablePropertiesAndLegacyOverrideBuiltIns::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestNamespaceObject.cpp:
        (WebCore::JSTestNamespaceObject::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestNode.cpp:
        (WebCore::jsTestNodePrototypeFunction_entriesCaller):
        (WebCore::JSTestNode::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::JSTestObjDOMConstructor::construct):
        (WebCore::JSTestObj::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestOperationConditional.cpp:
        (WebCore::JSTestOperationConditionalDOMConstructor::prototypeForStructure):
        (WebCore::JSTestOperationConditional::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        (WebCore::JSTestOverloadedConstructors::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestOverloadedConstructorsWithSequence.cpp:
        (WebCore::JSTestOverloadedConstructorsWithSequence::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestPluginInterface.cpp:
        (WebCore::JSTestPluginInterfaceDOMConstructor::prototypeForStructure):
        (WebCore::JSTestPluginInterface::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestPromiseRejectionEvent.cpp:
        (WebCore::JSTestPromiseRejectionEvent::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestReadOnlyMapLike.cpp:
        (WebCore::JSTestReadOnlyMapLikeDOMConstructor::prototypeForStructure):
        (WebCore::JSTestReadOnlyMapLike::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestReadOnlySetLike.cpp:
        (WebCore::JSTestReadOnlySetLikeDOMConstructor::prototypeForStructure):
        (WebCore::JSTestReadOnlySetLike::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestReportExtraMemoryCost.cpp:
        (WebCore::JSTestReportExtraMemoryCostDOMConstructor::prototypeForStructure):
        (WebCore::JSTestReportExtraMemoryCost::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::JSTestSerializedScriptValueInterfaceDOMConstructor::prototypeForStructure):
        (WebCore::JSTestSerializedScriptValueInterface::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestSetLike.cpp:
        (WebCore::JSTestSetLikeDOMConstructor::prototypeForStructure):
        (WebCore::JSTestSetLike::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestSetLikeWithOverriddenOperations.cpp:
        (WebCore::JSTestSetLikeWithOverriddenOperationsDOMConstructor::prototypeForStructure):
        (WebCore::JSTestSetLikeWithOverriddenOperations::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestStringifier.cpp:
        (WebCore::JSTestStringifierDOMConstructor::prototypeForStructure):
        (WebCore::JSTestStringifier::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestStringifierAnonymousOperation.cpp:
        (WebCore::JSTestStringifierAnonymousOperationDOMConstructor::prototypeForStructure):
        (WebCore::JSTestStringifierAnonymousOperation::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestStringifierNamedOperation.cpp:
        (WebCore::JSTestStringifierNamedOperationDOMConstructor::prototypeForStructure):
        (WebCore::JSTestStringifierNamedOperation::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestStringifierOperationImplementedAs.cpp:
        (WebCore::JSTestStringifierOperationImplementedAsDOMConstructor::prototypeForStructure):
        (WebCore::JSTestStringifierOperationImplementedAs::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestStringifierOperationNamedToString.cpp:
        (WebCore::JSTestStringifierOperationNamedToStringDOMConstructor::prototypeForStructure):
        (WebCore::JSTestStringifierOperationNamedToString::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestStringifierReadOnlyAttribute.cpp:
        (WebCore::JSTestStringifierReadOnlyAttributeDOMConstructor::prototypeForStructure):
        (WebCore::JSTestStringifierReadOnlyAttribute::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestStringifierReadWriteAttribute.cpp:
        (WebCore::JSTestStringifierReadWriteAttributeDOMConstructor::prototypeForStructure):
        (WebCore::JSTestStringifierReadWriteAttribute::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::JSTestTypedefsDOMConstructor::construct):
        (WebCore::JSTestTypedefs::subspaceForImpl):
        * bindings/scripts/test/JS/JSWorkerGlobalScope.cpp:
        (WebCore::JSWorkerGlobalScope::subspaceForImpl):
        * bindings/scripts/test/JS/JSWorkerGlobalScope.h:
        * bindings/scripts/test/JS/JSWorkletGlobalScope.cpp:
        (WebCore::JSWorkletGlobalScope::subspaceForImpl):
        * bindings/scripts/test/JS/JSWorkletGlobalScope.h:
        * bridge/objc/objc_runtime.mm:
        (JSC::Bindings::ObjcFallbackObjectImp::subspaceForImpl):
        * workers/WorkerOrWorkletScriptController.h:

2021-11-30  Devin Rousso  <drousso@apple.com>

        [Apple Pay] use `#if` inside `ApplePayPaymentTiming` instead of guarding the entire `enum`
        https://bugs.webkit.org/show_bug.cgi?id=232696
        <rdar://problem/83097245>

        Reviewed by Tim Horton.

        * Modules/applepay/ApplePayPaymentTiming.idl:
        * Modules/applepay/ApplePayPaymentTiming.h:
        * Modules/applepay/ApplePayLineItem.idl:
        * Modules/applepay/ApplePayLineItem.h:
        (WebCore::ApplePayLineItem::encode const):
        (WebCore::ApplePayLineItem::decode):
        Rather than have the entire `ApplePayPaymentTiming` be guarded, have it always exist and
        just guard `Recurring` and `Deferred` since those are really the things that need guarding.

        * Modules/applepay/PaymentSummaryItems.h:
        * Modules/applepay/cocoa/PaymentSummaryItemsCocoa.mm:
        (WebCore::platformSummaryItem):
        Add WKA hooks.

2021-11-30  ujwal koneru  <ujwal.koneru@sony.com>

        Fix Playstation build after r286171
        https://bugs.webkit.org/show_bug.cgi?id=233581

        unreviewed build fix.

        * platform/posix/SharedBufferPOSIX.cpp:
        (WebCore::SharedBuffer::createFromReadingFile):

2021-11-30  Gabriel Nava Marino  <gnavamarino@apple.com>

        nullptr deref in InbandChapterTrackPrivateAVFObjC::processChapters
        https://bugs.webkit.org/show_bug.cgi?id=233605

        Reviewed by Eric Carlson.

        The createChapterCue lambda gets dispatched onto the main thread. When it executes,
        the client might no longer be valid, so we are adding a nullptr check at the start
        of the lambda, as is done at the start of the method.

        Test: media/track/track-in-band-chapters-invalid-client-crash.html

        * platform/graphics/avfoundation/objc/InbandChapterTrackPrivateAVFObjC.mm:
        (WebCore::InbandChapterTrackPrivateAVFObjC::processChapters):

2021-11-30  Chris Dumez  <cdumez@apple.com>

        [Hardening] Early return in JSLazyEventListener::initializeJSFunction() if !settings().scriptMarkupEnabled()
        https://bugs.webkit.org/show_bug.cgi?id=233646

        Reviewed by Geoff Garen.

        Early return in JSLazyEventListener::initializeJSFunction() if !settings().scriptMarkupEnabled() as a
        hardening measure.

        * bindings/js/JSLazyEventListener.cpp:
        (WebCore::JSLazyEventListener::initializeJSFunction const):

2021-11-30  Chris Dumez  <cdumez@apple.com>

        html/semantics/forms/constraints/form-validation-validity-customError.html WPT test is failing
        https://bugs.webkit.org/show_bug.cgi?id=233599

        Reviewed by Darin Adler.

        No new tests, rebaselined existing test.

        * html/FormAssociatedElement.cpp:
        (WebCore::FormAssociatedElement::customError const):
        Per https://html.spec.whatwg.org/#dom-validitystate-customerror, customError() should return true
        if the control is suffering from a custom error. Per https://html.spec.whatwg.org/#custom-validity-error-message,
        when setCustomValidity() is called with a non-empty message, the element suffers from a custom error, no
        matter if the element is a candidate for constraint validation or not.

        (WebCore::FormAssociatedElement::validationMessage const):
        Per https://html.spec.whatwg.org/#dom-cva-validationmessage, the validationMessage getter
        should return the empty string if "the element is not a candidate for constraint validation".

2021-11-30  Ada Chan  <adachan@apple.com>

        [WebXR] Implement ChromeClient API to allow getting explicit consent from user on session features
        https://bugs.webkit.org/show_bug.cgi?id=233617

        Reviewed by Dean Jackson.

        Before this change, we just collect the features supported by the device/mode
        and return them as resolved features. With this change, we introduce a ChromeClient
        API that WebXRSystem::resolveFeaturePermissions() can call that allows clients to
        implement a mechanism to ask user for explicit consent on session features.

        * Modules/webxr/WebXRSystem.cpp:
        (WebCore::WebXRSystem::resolveFeaturePermissions const):
        Updated to call the new ChromeClient method requestPermissionOnXRSessionFeatures()
        to get the resolved and user permitted XR session features. The feature list is
        now returned via a CompletionHandler.
        (WebCore::WebXRSystem::requestSession):
        Updated now that WebXRSystem::resolveFeaturePermissions() is no longer synchronous.
        * Modules/webxr/WebXRSystem.h:
        * page/ChromeClient.h:
        (WebCore::ChromeClient::requestPermissionOnXRSessionFeatures):
        Default implementation preserves current behavior by returning the initial list
        of granted features (based on what the device can support).
        * platform/xr/PlatformXR.h:
        Define EnumTraits for PlatformXR::SessionMode.

2021-11-30  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r286227.
        https://bugs.webkit.org/show_bug.cgi?id=233652

        Broke some Apple-internal builds

        Reverted changeset:

        "[Model] clean up compile-time flags and condition IDL methods
        behind them"
        https://bugs.webkit.org/show_bug.cgi?id=233407
        https://commits.webkit.org/r286227

2021-11-30  Chris Dumez  <cdumez@apple.com>

        Several WPT tests under html/semantics/forms/constraints are failing due to extraneous willValidate() checks
        https://bugs.webkit.org/show_bug.cgi?id=233604

        Reviewed by Darin Adler.

        Several WPT tests under html/semantics/forms/constraints are failing due to extraneous willValidate() checks.
        Per the specification and to match the behavior of Blink & Gecko, ValidityState properties such as
        `validity.typeMismatch` should return true in case of mismatch even if the control is disabled (and thus
        willValidate() returns false).

        No new tests, rebaselined existing tests.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::tooShort const):
        (WebCore::HTMLInputElement::tooLong const):
        (WebCore::HTMLInputElement::typeMismatch const):
        (WebCore::HTMLInputElement::hasBadInput const):
        (WebCore::HTMLInputElement::rangeUnderflow const):
        (WebCore::HTMLInputElement::rangeOverflow const):
        (WebCore::HTMLInputElement::stepMismatch const):

2021-11-30  Chris Dumez  <cdumez@apple.com>

        html/semantics/forms/constraints/form-validation-validity-patternMismatch.html WPT test is failing
        https://bugs.webkit.org/show_bug.cgi?id=233601

        Reviewed by Darin Adler.

        No new tests, rebaselined existing test.

        * html/BaseTextInputType.cpp:
        (WebCore::BaseTextInputType::patternMismatch const):
        Per https://html.spec.whatwg.org/#attr-input-pattern, when the multiple attribute is present and it
        applies to the control, then we should check if the pattern applies to each comma-separated value
        in the input (rather than applying the pattern to the whole input).

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::patternMismatch const):
        Per https://html.spec.whatwg.org/#dom-validitystate-patternmismatch, patternMismatch should be true
        when a control has a value that doesn't satisfy the pattern attribute. We had a bug where we would
        only return true if the control was eligible for validation (i.e. not disabled).

2021-11-30  Andreu Botella  <andreu@andreubotella.com>

        Constructing a FormData from a form can lead to entries with lone surrogates
        https://bugs.webkit.org/show_bug.cgi?id=225299

        Reviewed by Chris Dumez.

        According to the HTML specification, names and non-file values in a form's entry list are
        scalar value strings. While this is enforced through WebIDL when the entries are added
        through the FormData web API, entries that come directly from form controls can contain lone
        surrogates. What's more, when a form payload is created from such an entry list, those lone
        surrogates can end up encoded as invalid UTF-8.

        Since names and non-file values being scalar value strings is an invariant of entry lists,
        this change modifies the createFileEntry function in DOMFormData.cpp to replace lone
        surrogates in the entry name, and adds a corresponding createStringEntry function, in order
        to ensure that every item of the entry list fulfills this invariant.

        Tests: imported/w3c/web-platform-tests/html/semantics/forms/form-submission-0/form-data-set-usv.html

        * html/DOMFormData.cpp:
        (WebCore::createStringEntry): Added to mirror createFileEntry. Replaces lone surrogates in
        the name and value.
        (WebCore::createFileEntry): Moved from DOMFormData::createFileEntry, and changed to replace
        lone surrogates in the entry name.
        (WebCore::DOMFormData::append): Changed to use createStringEntry.
        (WebCore::DOMFormData::createFileEntry): Moved to createFileEntry.
        * html/DOMFormData.h:

2021-11-30  Gabriel Nava Marino  <gnavamarino@apple.com>

        Use scriptDisallowedScope in FrameSelection::updateAppearance
        https://bugs.webkit.org/show_bug.cgi?id=233644

        Reviewed by Ryosuke Niwa.

        Use scriptDisallowedScope in FrameSelection::updateAppearance to avoid re-entrancy
        RenderView problems when a downstream function executes a JS callback.

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::validateSelection const):
        (WebCore::FrameSelection::updateAppearance):
        * editing/FrameSelection.h:

2021-11-30  Chris Dumez  <cdumez@apple.com>

        Scripting attributes are sometimes not properly stripped from elements when JS is disabled
        https://bugs.webkit.org/show_bug.cgi?id=233642
        <rdar://63180952>

        Reviewed by Geoffrey Garen.

        HTMLConstructionSite::mergeAttributesFromTokenIntoElement() was not properly stripping scripting
        Element attributes when scripting is disabled, unlike other code paths in HTMLConstructionSite().

        Covered by new API tests.

        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::mergeAttributesFromTokenIntoElement):

2021-11-30  Youenn Fablet  <youenn@apple.com>

        Add support for rvfc to MediaPlayerPrivateMediaSourceAVFObjC
        https://bugs.webkit.org/show_bug.cgi?id=233186

        Reviewed by Eric Carlson.

        Implement rvfc support using canvas painting code path infrastructure.
        We check 60 times per second whether a new frame is being displayed.
        If so, we update the metadata.
        We only enable the test if mediaSourceInlinePaintingEnabled is true since canvas painting does not work otherwise.

        Test: http/tests/media/media-source/mediasource-rvfc.html

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        * testing/InternalSettings.cpp:
        * testing/InternalSettings.h:
        * testing/InternalSettings.idl:

2021-11-30  Antti Koivisto  <antti@apple.com>

        [:has() pseudo-class] Cache :has() failures for subtrees
        https://bugs.webkit.org/show_bug.cgi?id=233631

        Reviewed by Simon Fraser.

        Add a temporary (single style resolution/invalidation scoped) cache that remembers whether
        a given :has() argument has any matches in a subtree. This avoids repeated tree walks in
        presence of very generic descendant matching :has() selectors.

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne const):

        This optimization can be used if the :has() not matching wasn't about the scope.

        (WebCore::SelectorChecker::matchHasPseudoClass const):

        When we traverse a subtree and find no matches for a has selector add a cache entry saying so.
        Before traversing test if any of the ancestors elements already have a cache entry saying there
        are no matches in this subtree for this selector.

        * css/SelectorChecker.h:
        * style/ElementRuleCollector.cpp:
        (WebCore::Style::ElementRuleCollector::ruleMatches):
        * style/SelectorMatchingState.h:
        (WebCore::Style::makeHasPseudoClassCacheKey):

        Add the cache to SelectorMatchingState. It is available when selector filter is.

2021-11-30  Youenn Fablet  <youenn@apple.com>

        Migrate some WebSWClientConnection messages to async replies
        https://bugs.webkit.org/show_bug.cgi?id=233627

        Reviewed by Chris Dumez.

        Migrate whenRegistrationReady to use a callback.
        Use completion handler for whenRegistrationReady as AsyncReply uses CompletionHandler
        and use optional to mark that the registration will never be resolved.
        Covered by existing tests.

        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::Connection::whenRegistrationReady):
        (WebCore::SWServer::Connection::resolveRegistrationReadyRequests):
        * workers/service/server/SWServer.h:

2021-11-30  Youenn Fablet  <youenn@apple.com>

        Move TransformStreamAPIEnabled flag to Settings
        https://bugs.webkit.org/show_bug.cgi?id=233524

        Reviewed by Chris Dumez.

        Covered by existing tests.

        * Modules/streams/TransformStream.idl:
        * Modules/streams/TransformStreamDefaultController.idl:
        * dom/TextDecoderStream.idl:
        * dom/TextDecoderStreamDecoder.idl:
        * dom/TextEncoderStream.idl:
        * dom/TextEncoderStreamEncoder.idl:
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::readableByteStreamAPIEnabled const):
        (WebCore::RuntimeEnabledFeatures::setTransformStreamAPIEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::transformStreamAPIEnabled const): Deleted.

2021-11-30  Youenn Fablet  <youenn@apple.com>

        ServiceWorkerContainer does not respond well to network process crash
        https://bugs.webkit.org/show_bug.cgi?id=233626

        Reviewed by Chris Dumez.

        Add a boolean to SWClientConnection to identify whether connection is closed.
        ServiceWorkerContainer will retrieve a new connection if its existing connection is closed.
        Covered by updated test.

        * workers/service/SWClientConnection.h:
        (WebCore::SWClientConnection::isClosed const):
        (WebCore::SWClientConnection::setIsClosed):
        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::ensureSWClientConnection):

2021-11-30  Rob Buis  <rbuis@igalia.com>

        Null check in previousLinePosition
        https://bugs.webkit.org/show_bug.cgi?id=233067

        Reviewed by Antti Koivisto.

        Null check the iterator closestRunForPoint returns since
        it can be null.

        Test: editing/selection/move-by-line-crash.html

        * editing/VisibleUnits.cpp:
        (WebCore::previousLinePosition):
        (WebCore::nextLinePosition):

2021-11-30  Kimmo Kinnunen  <kkinnunen@apple.com>

        GraphicsContextGL should have ANGLE-specific subclass
        https://bugs.webkit.org/show_bug.cgi?id=233522

        Reviewed by Antti Koivisto.

        Add GraphicsContextGLANGLE, rename all relevant GraphicsContextGLOpenGL symbols to this.
        Leave the implementations in their respective files for ease of review. Also,
        some of the symbols might be moved to GraphicsContextGLANGLE subclasses (GraphicsContextGLCocoa
        and GraphicsContextGLTextureMapper ANGLE flavor).

        GraphicsContextGLOpenGL now means "GraphicsContextGL implemented with OpenGL and OpenGLES".

        GraphicsContextGLANGLE means "GraphicsContextGL implemented with ANGLE".

        Move GraphicsContextGLOpenGLCommon.cpp into GraphicsContextGLOpenGL.cpp, these now refer to
        just the OpenGL implemetation.

        Duplicate "rendering result" and "compositing result" functions from GraphicsContextGLOpenGL.cpp
        into GraphicsContextGLANGLE.cpp. These are fairly repetitive functions that most likely will
        change in the future for ANGLE backend, so the interim duplicated code should not be a big issue.

        This is part of work trying to reduce the ifdef use in GraphicsContextGLOpenGL, in order to make
        WebGL easier to maintain correctly.

        No new tests, a refactor.

        * CMakeLists.txt:
        * Headers.cmake:
        * PlatformMac.cmake:
        * Sources.txt:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/GraphicsContextGL.cpp:
        (WebCore::GraphicsContextGL::create): Deleted.
        * platform/graphics/GraphicsContextGL.h:
        * platform/graphics/GraphicsContextGLState.h: Added.
        (WebCore::GraphicsContextGLState::currentBoundTexture const):
        (WebCore::GraphicsContextGLState::boundTexture const):
        (WebCore::GraphicsContextGLState::currentBoundTarget const):
        (WebCore::GraphicsContextGLState::boundTarget const):
        (WebCore::GraphicsContextGLState::setBoundTexture):
        * platform/graphics/angle/ExtensionsGLANGLE.cpp:
        (WebCore::ExtensionsGLANGLE::ExtensionsGLANGLE):
        * platform/graphics/angle/ExtensionsGLANGLE.h:
        * platform/graphics/angle/GraphicsContextGLANGLE.cpp:
        (WebCore::GraphicsContextGLANGLE::drawingBufferTextureTarget):
        (WebCore::GraphicsContextGLANGLE::drawingBufferTextureTargetQueryForDrawingTarget):
        (WebCore::GraphicsContextGLANGLE::EGLDrawingBufferTextureTargetForDrawingTarget):
        (WebCore::GraphicsContextGLANGLE::releaseThreadResources):
        (WebCore::GraphicsContextGLANGLE::readPixelsForPaintResults):
        (WebCore::GraphicsContextGLANGLE::validateAttributes):
        (WebCore::GraphicsContextGLANGLE::reshapeFBOs):
        (WebCore::GraphicsContextGLANGLE::attachDepthAndStencilBufferIfNeeded):
        (WebCore::GraphicsContextGLANGLE::resolveMultisamplingIfNecessary):
        (WebCore::GraphicsContextGLANGLE::renderbufferStorage):
        (WebCore::GraphicsContextGLANGLE::getIntegerv):
        (WebCore::GraphicsContextGLANGLE::getShaderPrecisionFormat):
        (WebCore::GraphicsContextGLANGLE::texImage2D):
        (WebCore::GraphicsContextGLANGLE::texSubImage2D):
        (WebCore::GraphicsContextGLANGLE::compressedTexImage2D):
        (WebCore::GraphicsContextGLANGLE::compressedTexSubImage2D):
        (WebCore::GraphicsContextGLANGLE::depthRange):
        (WebCore::GraphicsContextGLANGLE::clearDepth):
        (WebCore::GraphicsContextGLANGLE::getExtensions):
        (WebCore::GraphicsContextGLANGLE::readnPixels):
        (WebCore::GraphicsContextGLANGLE::readnPixelsImpl):
        (WebCore::GraphicsContextGLANGLE::validateDepthStencil):
        (WebCore::GraphicsContextGLANGLE::prepareTexture):
        (WebCore::GraphicsContextGLANGLE::prepareTextureImpl):
        (WebCore::GraphicsContextGLANGLE::readRenderingResults):
        (WebCore::GraphicsContextGLANGLE::reshape):
        (WebCore::GraphicsContextGLANGLE::activeTexture):
        (WebCore::GraphicsContextGLANGLE::attachShader):
        (WebCore::GraphicsContextGLANGLE::bindAttribLocation):
        (WebCore::GraphicsContextGLANGLE::bindBuffer):
        (WebCore::GraphicsContextGLANGLE::bindFramebuffer):
        (WebCore::GraphicsContextGLANGLE::bindRenderbuffer):
        (WebCore::GraphicsContextGLANGLE::bindTexture):
        (WebCore::GraphicsContextGLANGLE::blendColor):
        (WebCore::GraphicsContextGLANGLE::blendEquation):
        (WebCore::GraphicsContextGLANGLE::blendEquationSeparate):
        (WebCore::GraphicsContextGLANGLE::blendFunc):
        (WebCore::GraphicsContextGLANGLE::blendFuncSeparate):
        (WebCore::GraphicsContextGLANGLE::bufferData):
        (WebCore::GraphicsContextGLANGLE::bufferSubData):
        (WebCore::GraphicsContextGLANGLE::getBufferSubData):
        (WebCore::GraphicsContextGLANGLE::copyBufferSubData):
        (WebCore::GraphicsContextGLANGLE::getInternalformativ):
        (WebCore::GraphicsContextGLANGLE::renderbufferStorageMultisample):
        (WebCore::GraphicsContextGLANGLE::texStorage2D):
        (WebCore::GraphicsContextGLANGLE::texStorage3D):
        (WebCore::GraphicsContextGLANGLE::texImage3D):
        (WebCore::GraphicsContextGLANGLE::texSubImage3D):
        (WebCore::GraphicsContextGLANGLE::compressedTexImage3D):
        (WebCore::GraphicsContextGLANGLE::compressedTexSubImage3D):
        (WebCore::GraphicsContextGLANGLE::getActiveUniforms):
        (WebCore::GraphicsContextGLANGLE::checkFramebufferStatus):
        (WebCore::GraphicsContextGLANGLE::clearColor):
        (WebCore::GraphicsContextGLANGLE::clear):
        (WebCore::GraphicsContextGLANGLE::clearStencil):
        (WebCore::GraphicsContextGLANGLE::colorMask):
        (WebCore::GraphicsContextGLANGLE::compileShader):
        (WebCore::GraphicsContextGLANGLE::compileShaderDirect):
        (WebCore::GraphicsContextGLANGLE::texImage2DDirect):
        (WebCore::GraphicsContextGLANGLE::copyTexImage2D):
        (WebCore::GraphicsContextGLANGLE::copyTexSubImage2D):
        (WebCore::GraphicsContextGLANGLE::cullFace):
        (WebCore::GraphicsContextGLANGLE::depthFunc):
        (WebCore::GraphicsContextGLANGLE::depthMask):
        (WebCore::GraphicsContextGLANGLE::detachShader):
        (WebCore::GraphicsContextGLANGLE::disable):
        (WebCore::GraphicsContextGLANGLE::disableVertexAttribArray):
        (WebCore::GraphicsContextGLANGLE::drawArrays):
        (WebCore::GraphicsContextGLANGLE::drawElements):
        (WebCore::GraphicsContextGLANGLE::enable):
        (WebCore::GraphicsContextGLANGLE::enableVertexAttribArray):
        (WebCore::GraphicsContextGLANGLE::finish):
        (WebCore::GraphicsContextGLANGLE::flush):
        (WebCore::GraphicsContextGLANGLE::framebufferRenderbuffer):
        (WebCore::GraphicsContextGLANGLE::framebufferTexture2D):
        (WebCore::GraphicsContextGLANGLE::frontFace):
        (WebCore::GraphicsContextGLANGLE::generateMipmap):
        (WebCore::GraphicsContextGLANGLE::getActiveAttribImpl):
        (WebCore::GraphicsContextGLANGLE::getActiveAttrib):
        (WebCore::GraphicsContextGLANGLE::getActiveUniformImpl):
        (WebCore::GraphicsContextGLANGLE::getActiveUniform):
        (WebCore::GraphicsContextGLANGLE::getAttachedShaders):
        (WebCore::GraphicsContextGLANGLE::getAttribLocation):
        (WebCore::GraphicsContextGLANGLE::getAttribLocationDirect):
        (WebCore::GraphicsContextGLANGLE::moveErrorsToSyntheticErrorList):
        (WebCore::GraphicsContextGLANGLE::getError):
        (WebCore::GraphicsContextGLANGLE::getString):
        (WebCore::GraphicsContextGLANGLE::hint):
        (WebCore::GraphicsContextGLANGLE::isBuffer):
        (WebCore::GraphicsContextGLANGLE::isEnabled):
        (WebCore::GraphicsContextGLANGLE::isFramebuffer):
        (WebCore::GraphicsContextGLANGLE::isProgram):
        (WebCore::GraphicsContextGLANGLE::isRenderbuffer):
        (WebCore::GraphicsContextGLANGLE::isShader):
        (WebCore::GraphicsContextGLANGLE::isTexture):
        (WebCore::GraphicsContextGLANGLE::lineWidth):
        (WebCore::GraphicsContextGLANGLE::linkProgram):
        (WebCore::GraphicsContextGLANGLE::pixelStorei):
        (WebCore::GraphicsContextGLANGLE::polygonOffset):
        (WebCore::GraphicsContextGLANGLE::sampleCoverage):
        (WebCore::GraphicsContextGLANGLE::scissor):
        (WebCore::GraphicsContextGLANGLE::shaderSource):
        (WebCore::GraphicsContextGLANGLE::stencilFunc):
        (WebCore::GraphicsContextGLANGLE::stencilFuncSeparate):
        (WebCore::GraphicsContextGLANGLE::stencilMask):
        (WebCore::GraphicsContextGLANGLE::stencilMaskSeparate):
        (WebCore::GraphicsContextGLANGLE::stencilOp):
        (WebCore::GraphicsContextGLANGLE::stencilOpSeparate):
        (WebCore::GraphicsContextGLANGLE::texParameterf):
        (WebCore::GraphicsContextGLANGLE::texParameteri):
        (WebCore::GraphicsContextGLANGLE::uniform1f):
        (WebCore::GraphicsContextGLANGLE::uniform1fv):
        (WebCore::GraphicsContextGLANGLE::uniform2f):
        (WebCore::GraphicsContextGLANGLE::uniform2fv):
        (WebCore::GraphicsContextGLANGLE::uniform3f):
        (WebCore::GraphicsContextGLANGLE::uniform3fv):
        (WebCore::GraphicsContextGLANGLE::uniform4f):
        (WebCore::GraphicsContextGLANGLE::uniform4fv):
        (WebCore::GraphicsContextGLANGLE::uniform1i):
        (WebCore::GraphicsContextGLANGLE::uniform1iv):
        (WebCore::GraphicsContextGLANGLE::uniform2i):
        (WebCore::GraphicsContextGLANGLE::uniform2iv):
        (WebCore::GraphicsContextGLANGLE::uniform3i):
        (WebCore::GraphicsContextGLANGLE::uniform3iv):
        (WebCore::GraphicsContextGLANGLE::uniform4i):
        (WebCore::GraphicsContextGLANGLE::uniform4iv):
        (WebCore::GraphicsContextGLANGLE::uniformMatrix2fv):
        (WebCore::GraphicsContextGLANGLE::uniformMatrix3fv):
        (WebCore::GraphicsContextGLANGLE::uniformMatrix4fv):
        (WebCore::GraphicsContextGLANGLE::useProgram):
        (WebCore::GraphicsContextGLANGLE::validateProgram):
        (WebCore::GraphicsContextGLANGLE::vertexAttrib1f):
        (WebCore::GraphicsContextGLANGLE::vertexAttrib1fv):
        (WebCore::GraphicsContextGLANGLE::vertexAttrib2f):
        (WebCore::GraphicsContextGLANGLE::vertexAttrib2fv):
        (WebCore::GraphicsContextGLANGLE::vertexAttrib3f):
        (WebCore::GraphicsContextGLANGLE::vertexAttrib3fv):
        (WebCore::GraphicsContextGLANGLE::vertexAttrib4f):
        (WebCore::GraphicsContextGLANGLE::vertexAttrib4fv):
        (WebCore::GraphicsContextGLANGLE::vertexAttribPointer):
        (WebCore::GraphicsContextGLANGLE::vertexAttribIPointer):
        (WebCore::GraphicsContextGLANGLE::viewport):
        (WebCore::GraphicsContextGLANGLE::createVertexArray):
        (WebCore::GraphicsContextGLANGLE::deleteVertexArray):
        (WebCore::GraphicsContextGLANGLE::isVertexArray):
        (WebCore::GraphicsContextGLANGLE::bindVertexArray):
        (WebCore::GraphicsContextGLANGLE::getBooleanv):
        (WebCore::GraphicsContextGLANGLE::getBufferParameteri):
        (WebCore::GraphicsContextGLANGLE::getFloatv):
        (WebCore::GraphicsContextGLANGLE::getInteger64):
        (WebCore::GraphicsContextGLANGLE::getInteger64i):
        (WebCore::GraphicsContextGLANGLE::getFramebufferAttachmentParameteri):
        (WebCore::GraphicsContextGLANGLE::getProgrami):
        (WebCore::GraphicsContextGLANGLE::getUnmangledInfoLog):
        (WebCore::GraphicsContextGLANGLE::getProgramInfoLog):
        (WebCore::GraphicsContextGLANGLE::getRenderbufferParameteri):
        (WebCore::GraphicsContextGLANGLE::getShaderi):
        (WebCore::GraphicsContextGLANGLE::getShaderInfoLog):
        (WebCore::GraphicsContextGLANGLE::getShaderSource):
        (WebCore::GraphicsContextGLANGLE::getTexParameterf):
        (WebCore::GraphicsContextGLANGLE::getTexParameteri):
        (WebCore::GraphicsContextGLANGLE::getUniformfv):
        (WebCore::GraphicsContextGLANGLE::getUniformiv):
        (WebCore::GraphicsContextGLANGLE::getUniformuiv):
        (WebCore::GraphicsContextGLANGLE::getUniformLocation):
        (WebCore::GraphicsContextGLANGLE::getVertexAttribOffset):
        (WebCore::GraphicsContextGLANGLE::createBuffer):
        (WebCore::GraphicsContextGLANGLE::createFramebuffer):
        (WebCore::GraphicsContextGLANGLE::createProgram):
        (WebCore::GraphicsContextGLANGLE::createRenderbuffer):
        (WebCore::GraphicsContextGLANGLE::createShader):
        (WebCore::GraphicsContextGLANGLE::createTexture):
        (WebCore::GraphicsContextGLANGLE::deleteBuffer):
        (WebCore::GraphicsContextGLANGLE::deleteFramebuffer):
        (WebCore::GraphicsContextGLANGLE::deleteProgram):
        (WebCore::GraphicsContextGLANGLE::deleteRenderbuffer):
        (WebCore::GraphicsContextGLANGLE::deleteShader):
        (WebCore::GraphicsContextGLANGLE::deleteTexture):
        (WebCore::GraphicsContextGLANGLE::synthesizeGLError):
        (WebCore::GraphicsContextGLANGLE::forceContextLost):
        (WebCore::GraphicsContextGLANGLE::recycleContext):
        (WebCore::GraphicsContextGLANGLE::dispatchContextChangedNotification):
        (WebCore::GraphicsContextGLANGLE::drawArraysInstanced):
        (WebCore::GraphicsContextGLANGLE::drawElementsInstanced):
        (WebCore::GraphicsContextGLANGLE::vertexAttribDivisor):
        (WebCore::GraphicsContextGLANGLE::getUniformBlockIndex):
        (WebCore::GraphicsContextGLANGLE::getActiveUniformBlockName):
        (WebCore::GraphicsContextGLANGLE::uniformBlockBinding):
        (WebCore::GraphicsContextGLANGLE::createQuery):
        (WebCore::GraphicsContextGLANGLE::beginQuery):
        (WebCore::GraphicsContextGLANGLE::endQuery):
        (WebCore::GraphicsContextGLANGLE::getQueryObjectui):
        (WebCore::GraphicsContextGLANGLE::createTransformFeedback):
        (WebCore::GraphicsContextGLANGLE::deleteTransformFeedback):
        (WebCore::GraphicsContextGLANGLE::isTransformFeedback):
        (WebCore::GraphicsContextGLANGLE::bindTransformFeedback):
        (WebCore::GraphicsContextGLANGLE::beginTransformFeedback):
        (WebCore::GraphicsContextGLANGLE::endTransformFeedback):
        (WebCore::GraphicsContextGLANGLE::transformFeedbackVaryings):
        (WebCore::GraphicsContextGLANGLE::getTransformFeedbackVarying):
        (WebCore::GraphicsContextGLANGLE::bindBufferBase):
        (WebCore::GraphicsContextGLANGLE::blitFramebuffer):
        (WebCore::GraphicsContextGLANGLE::framebufferTextureLayer):
        (WebCore::GraphicsContextGLANGLE::invalidateFramebuffer):
        (WebCore::GraphicsContextGLANGLE::invalidateSubFramebuffer):
        (WebCore::GraphicsContextGLANGLE::readBuffer):
        (WebCore::GraphicsContextGLANGLE::copyTexSubImage3D):
        (WebCore::GraphicsContextGLANGLE::getFragDataLocation):
        (WebCore::GraphicsContextGLANGLE::uniform1ui):
        (WebCore::GraphicsContextGLANGLE::uniform2ui):
        (WebCore::GraphicsContextGLANGLE::uniform3ui):
        (WebCore::GraphicsContextGLANGLE::uniform4ui):
        (WebCore::GraphicsContextGLANGLE::uniform1uiv):
        (WebCore::GraphicsContextGLANGLE::uniform2uiv):
        (WebCore::GraphicsContextGLANGLE::uniform3uiv):
        (WebCore::GraphicsContextGLANGLE::uniform4uiv):
        (WebCore::GraphicsContextGLANGLE::uniformMatrix2x3fv):
        (WebCore::GraphicsContextGLANGLE::uniformMatrix3x2fv):
        (WebCore::GraphicsContextGLANGLE::uniformMatrix2x4fv):
        (WebCore::GraphicsContextGLANGLE::uniformMatrix4x2fv):
        (WebCore::GraphicsContextGLANGLE::uniformMatrix3x4fv):
        (WebCore::GraphicsContextGLANGLE::uniformMatrix4x3fv):
        (WebCore::GraphicsContextGLANGLE::vertexAttribI4i):
        (WebCore::GraphicsContextGLANGLE::vertexAttribI4iv):
        (WebCore::GraphicsContextGLANGLE::vertexAttribI4ui):
        (WebCore::GraphicsContextGLANGLE::vertexAttribI4uiv):
        (WebCore::GraphicsContextGLANGLE::drawRangeElements):
        (WebCore::GraphicsContextGLANGLE::drawBuffers):
        (WebCore::GraphicsContextGLANGLE::clearBufferiv):
        (WebCore::GraphicsContextGLANGLE::clearBufferuiv):
        (WebCore::GraphicsContextGLANGLE::clearBufferfv):
        (WebCore::GraphicsContextGLANGLE::clearBufferfi):
        (WebCore::GraphicsContextGLANGLE::deleteQuery):
        (WebCore::GraphicsContextGLANGLE::isQuery):
        (WebCore::GraphicsContextGLANGLE::getQuery):
        (WebCore::GraphicsContextGLANGLE::createSampler):
        (WebCore::GraphicsContextGLANGLE::deleteSampler):
        (WebCore::GraphicsContextGLANGLE::isSampler):
        (WebCore::GraphicsContextGLANGLE::bindSampler):
        (WebCore::GraphicsContextGLANGLE::samplerParameteri):
        (WebCore::GraphicsContextGLANGLE::samplerParameterf):
        (WebCore::GraphicsContextGLANGLE::getSamplerParameterf):
        (WebCore::GraphicsContextGLANGLE::getSamplerParameteri):
        (WebCore::GraphicsContextGLANGLE::fenceSync):
        (WebCore::GraphicsContextGLANGLE::isSync):
        (WebCore::GraphicsContextGLANGLE::deleteSync):
        (WebCore::GraphicsContextGLANGLE::clientWaitSync):
        (WebCore::GraphicsContextGLANGLE::waitSync):
        (WebCore::GraphicsContextGLANGLE::getSynci):
        (WebCore::GraphicsContextGLANGLE::pauseTransformFeedback):
        (WebCore::GraphicsContextGLANGLE::resumeTransformFeedback):
        (WebCore::GraphicsContextGLANGLE::bindBufferRange):
        (WebCore::GraphicsContextGLANGLE::getUniformIndices):
        (WebCore::GraphicsContextGLANGLE::getActiveUniformBlockiv):
        (WebCore::GraphicsContextGLANGLE::multiDrawArraysANGLE):
        (WebCore::GraphicsContextGLANGLE::multiDrawArraysInstancedANGLE):
        (WebCore::GraphicsContextGLANGLE::multiDrawElementsANGLE):
        (WebCore::GraphicsContextGLANGLE::multiDrawElementsInstancedANGLE):
        (WebCore::GraphicsContextGLANGLE::waitAndUpdateOldestFrame):
        (WebCore::GraphicsContextGLANGLE::simulateEventForTesting):
        (WebCore::GraphicsContextGLANGLE::isGLES2Compliant const):
        (WebCore::GraphicsContextGLANGLE::paintRenderingResultsToCanvas):
        (WebCore::GraphicsContextGLANGLE::paintCompositedResultsToCanvas):
        (WebCore::GraphicsContextGLANGLE::paintRenderingResultsToPixelBuffer):
        (WebCore::GraphicsContextGLANGLE::readRenderingResultsForPainting):
        (WebCore::GraphicsContextGLANGLE::readCompositedResultsForPainting):
        (WebCore::GraphicsContextGLOpenGL::drawingBufferTextureTarget): Deleted.
        (WebCore::GraphicsContextGLOpenGL::drawingBufferTextureTargetQueryForDrawingTarget): Deleted.
        (WebCore::GraphicsContextGLOpenGL::EGLDrawingBufferTextureTargetForDrawingTarget): Deleted.
        (WebCore::GraphicsContextGLOpenGL::releaseThreadResources): Deleted.
        (WebCore::GraphicsContextGLOpenGL::readPixelsForPaintResults): Deleted.
        (WebCore::GraphicsContextGLOpenGL::validateAttributes): Deleted.
        (WebCore::GraphicsContextGLOpenGL::reshapeFBOs): Deleted.
        (WebCore::GraphicsContextGLOpenGL::attachDepthAndStencilBufferIfNeeded): Deleted.
        (WebCore::GraphicsContextGLOpenGL::resolveMultisamplingIfNecessary): Deleted.
        (WebCore::GraphicsContextGLOpenGL::renderbufferStorage): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getIntegerv): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getShaderPrecisionFormat): Deleted.
        (WebCore::GraphicsContextGLOpenGL::texImage2D): Deleted.
        (WebCore::GraphicsContextGLOpenGL::texSubImage2D): Deleted.
        (WebCore::GraphicsContextGLOpenGL::compressedTexImage2D): Deleted.
        (WebCore::GraphicsContextGLOpenGL::compressedTexSubImage2D): Deleted.
        (WebCore::GraphicsContextGLOpenGL::depthRange): Deleted.
        (WebCore::GraphicsContextGLOpenGL::clearDepth): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getExtensions): Deleted.
        (WebCore::GraphicsContextGLOpenGL::readnPixels): Deleted.
        (WebCore::GraphicsContextGLOpenGL::readnPixelsImpl): Deleted.
        (WebCore::GraphicsContextGLOpenGL::validateDepthStencil): Deleted.
        (WebCore::GraphicsContextGLOpenGL::prepareTexture): Deleted.
        (WebCore::GraphicsContextGLOpenGL::prepareTextureImpl): Deleted.
        (WebCore::GraphicsContextGLOpenGL::readRenderingResults): Deleted.
        (WebCore::GraphicsContextGLOpenGL::reshape): Deleted.
        (WebCore::GraphicsContextGLOpenGL::activeTexture): Deleted.
        (WebCore::GraphicsContextGLOpenGL::attachShader): Deleted.
        (WebCore::GraphicsContextGLOpenGL::bindAttribLocation): Deleted.
        (WebCore::GraphicsContextGLOpenGL::bindBuffer): Deleted.
        (WebCore::GraphicsContextGLOpenGL::bindFramebuffer): Deleted.
        (WebCore::GraphicsContextGLOpenGL::bindRenderbuffer): Deleted.
        (WebCore::GraphicsContextGLOpenGL::bindTexture): Deleted.
        (WebCore::GraphicsContextGLOpenGL::blendColor): Deleted.
        (WebCore::GraphicsContextGLOpenGL::blendEquation): Deleted.
        (WebCore::GraphicsContextGLOpenGL::blendEquationSeparate): Deleted.
        (WebCore::GraphicsContextGLOpenGL::blendFunc): Deleted.
        (WebCore::GraphicsContextGLOpenGL::blendFuncSeparate): Deleted.
        (WebCore::GraphicsContextGLOpenGL::bufferData): Deleted.
        (WebCore::GraphicsContextGLOpenGL::bufferSubData): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getBufferSubData): Deleted.
        (WebCore::GraphicsContextGLOpenGL::copyBufferSubData): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getInternalformativ): Deleted.
        (WebCore::GraphicsContextGLOpenGL::renderbufferStorageMultisample): Deleted.
        (WebCore::GraphicsContextGLOpenGL::texStorage2D): Deleted.
        (WebCore::GraphicsContextGLOpenGL::texStorage3D): Deleted.
        (WebCore::GraphicsContextGLOpenGL::texImage3D): Deleted.
        (WebCore::GraphicsContextGLOpenGL::texSubImage3D): Deleted.
        (WebCore::GraphicsContextGLOpenGL::compressedTexImage3D): Deleted.
        (WebCore::GraphicsContextGLOpenGL::compressedTexSubImage3D): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getActiveUniforms): Deleted.
        (WebCore::GraphicsContextGLOpenGL::checkFramebufferStatus): Deleted.
        (WebCore::GraphicsContextGLOpenGL::clearColor): Deleted.
        (WebCore::GraphicsContextGLOpenGL::clear): Deleted.
        (WebCore::GraphicsContextGLOpenGL::clearStencil): Deleted.
        (WebCore::GraphicsContextGLOpenGL::colorMask): Deleted.
        (WebCore::GraphicsContextGLOpenGL::compileShader): Deleted.
        (WebCore::GraphicsContextGLOpenGL::compileShaderDirect): Deleted.
        (WebCore::GraphicsContextGLOpenGL::texImage2DDirect): Deleted.
        (WebCore::GraphicsContextGLOpenGL::copyTexImage2D): Deleted.
        (WebCore::GraphicsContextGLOpenGL::copyTexSubImage2D): Deleted.
        (WebCore::GraphicsContextGLOpenGL::cullFace): Deleted.
        (WebCore::GraphicsContextGLOpenGL::depthFunc): Deleted.
        (WebCore::GraphicsContextGLOpenGL::depthMask): Deleted.
        (WebCore::GraphicsContextGLOpenGL::detachShader): Deleted.
        (WebCore::GraphicsContextGLOpenGL::disable): Deleted.
        (WebCore::GraphicsContextGLOpenGL::disableVertexAttribArray): Deleted.
        (WebCore::GraphicsContextGLOpenGL::drawArrays): Deleted.
        (WebCore::GraphicsContextGLOpenGL::drawElements): Deleted.
        (WebCore::GraphicsContextGLOpenGL::enable): Deleted.
        (WebCore::GraphicsContextGLOpenGL::enableVertexAttribArray): Deleted.
        (WebCore::GraphicsContextGLOpenGL::finish): Deleted.
        (WebCore::GraphicsContextGLOpenGL::flush): Deleted.
        (WebCore::GraphicsContextGLOpenGL::framebufferRenderbuffer): Deleted.
        (WebCore::GraphicsContextGLOpenGL::framebufferTexture2D): Deleted.
        (WebCore::GraphicsContextGLOpenGL::frontFace): Deleted.
        (WebCore::GraphicsContextGLOpenGL::generateMipmap): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getActiveAttribImpl): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getActiveAttrib): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getActiveUniformImpl): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getActiveUniform): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getAttachedShaders): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getAttribLocation): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getAttribLocationDirect): Deleted.
        (WebCore::GraphicsContextGLOpenGL::moveErrorsToSyntheticErrorList): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getError): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getString): Deleted.
        (WebCore::GraphicsContextGLOpenGL::hint): Deleted.
        (WebCore::GraphicsContextGLOpenGL::isBuffer): Deleted.
        (WebCore::GraphicsContextGLOpenGL::isEnabled): Deleted.
        (WebCore::GraphicsContextGLOpenGL::isFramebuffer): Deleted.
        (WebCore::GraphicsContextGLOpenGL::isProgram): Deleted.
        (WebCore::GraphicsContextGLOpenGL::isRenderbuffer): Deleted.
        (WebCore::GraphicsContextGLOpenGL::isShader): Deleted.
        (WebCore::GraphicsContextGLOpenGL::isTexture): Deleted.
        (WebCore::GraphicsContextGLOpenGL::lineWidth): Deleted.
        (WebCore::GraphicsContextGLOpenGL::linkProgram): Deleted.
        (WebCore::GraphicsContextGLOpenGL::pixelStorei): Deleted.
        (WebCore::GraphicsContextGLOpenGL::polygonOffset): Deleted.
        (WebCore::GraphicsContextGLOpenGL::sampleCoverage): Deleted.
        (WebCore::GraphicsContextGLOpenGL::scissor): Deleted.
        (WebCore::GraphicsContextGLOpenGL::shaderSource): Deleted.
        (WebCore::GraphicsContextGLOpenGL::stencilFunc): Deleted.
        (WebCore::GraphicsContextGLOpenGL::stencilFuncSeparate): Deleted.
        (WebCore::GraphicsContextGLOpenGL::stencilMask): Deleted.
        (WebCore::GraphicsContextGLOpenGL::stencilMaskSeparate): Deleted.
        (WebCore::GraphicsContextGLOpenGL::stencilOp): Deleted.
        (WebCore::GraphicsContextGLOpenGL::stencilOpSeparate): Deleted.
        (WebCore::GraphicsContextGLOpenGL::texParameterf): Deleted.
        (WebCore::GraphicsContextGLOpenGL::texParameteri): Deleted.
        (WebCore::GraphicsContextGLOpenGL::uniform1f): Deleted.
        (WebCore::GraphicsContextGLOpenGL::uniform1fv): Deleted.
        (WebCore::GraphicsContextGLOpenGL::uniform2f): Deleted.
        (WebCore::GraphicsContextGLOpenGL::uniform2fv): Deleted.
        (WebCore::GraphicsContextGLOpenGL::uniform3f): Deleted.
        (WebCore::GraphicsContextGLOpenGL::uniform3fv): Deleted.
        (WebCore::GraphicsContextGLOpenGL::uniform4f): Deleted.
        (WebCore::GraphicsContextGLOpenGL::uniform4fv): Deleted.
        (WebCore::GraphicsContextGLOpenGL::uniform1i): Deleted.
        (WebCore::GraphicsContextGLOpenGL::uniform1iv): Deleted.
        (WebCore::GraphicsContextGLOpenGL::uniform2i): Deleted.
        (WebCore::GraphicsContextGLOpenGL::uniform2iv): Deleted.
        (WebCore::GraphicsContextGLOpenGL::uniform3i): Deleted.
        (WebCore::GraphicsContextGLOpenGL::uniform3iv): Deleted.
        (WebCore::GraphicsContextGLOpenGL::uniform4i): Deleted.
        (WebCore::GraphicsContextGLOpenGL::uniform4iv): Deleted.
        (WebCore::GraphicsContextGLOpenGL::uniformMatrix2fv): Deleted.
        (WebCore::GraphicsContextGLOpenGL::uniformMatrix3fv): Deleted.
        (WebCore::GraphicsContextGLOpenGL::uniformMatrix4fv): Deleted.
        (WebCore::GraphicsContextGLOpenGL::useProgram): Deleted.
        (WebCore::GraphicsContextGLOpenGL::validateProgram): Deleted.
        (WebCore::GraphicsContextGLOpenGL::vertexAttrib1f): Deleted.
        (WebCore::GraphicsContextGLOpenGL::vertexAttrib1fv): Deleted.
        (WebCore::GraphicsContextGLOpenGL::vertexAttrib2f): Deleted.
        (WebCore::GraphicsContextGLOpenGL::vertexAttrib2fv): Deleted.
        (WebCore::GraphicsContextGLOpenGL::vertexAttrib3f): Deleted.
        (WebCore::GraphicsContextGLOpenGL::vertexAttrib3fv): Deleted.
        (WebCore::GraphicsContextGLOpenGL::vertexAttrib4f): Deleted.
        (WebCore::GraphicsContextGLOpenGL::vertexAttrib4fv): Deleted.
        (WebCore::GraphicsContextGLOpenGL::vertexAttribPointer): Deleted.
        (WebCore::GraphicsContextGLOpenGL::vertexAttribIPointer): Deleted.
        (WebCore::GraphicsContextGLOpenGL::viewport): Deleted.
        (WebCore::GraphicsContextGLOpenGL::createVertexArray): Deleted.
        (WebCore::GraphicsContextGLOpenGL::deleteVertexArray): Deleted.
        (WebCore::GraphicsContextGLOpenGL::isVertexArray): Deleted.
        (WebCore::GraphicsContextGLOpenGL::bindVertexArray): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getBooleanv): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getBufferParameteri): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getFloatv): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getInteger64): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getInteger64i): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getFramebufferAttachmentParameteri): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getProgrami): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getUnmangledInfoLog): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getProgramInfoLog): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getRenderbufferParameteri): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getShaderi): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getShaderInfoLog): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getShaderSource): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getTexParameterf): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getTexParameteri): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getUniformfv): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getUniformiv): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getUniformuiv): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getUniformLocation): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getVertexAttribOffset): Deleted.
        (WebCore::GraphicsContextGLOpenGL::createBuffer): Deleted.
        (WebCore::GraphicsContextGLOpenGL::createFramebuffer): Deleted.
        (WebCore::GraphicsContextGLOpenGL::createProgram): Deleted.
        (WebCore::GraphicsContextGLOpenGL::createRenderbuffer): Deleted.
        (WebCore::GraphicsContextGLOpenGL::createShader): Deleted.
        (WebCore::GraphicsContextGLOpenGL::createTexture): Deleted.
        (WebCore::GraphicsContextGLOpenGL::deleteBuffer): Deleted.
        (WebCore::GraphicsContextGLOpenGL::deleteFramebuffer): Deleted.
        (WebCore::GraphicsContextGLOpenGL::deleteProgram): Deleted.
        (WebCore::GraphicsContextGLOpenGL::deleteRenderbuffer): Deleted.
        (WebCore::GraphicsContextGLOpenGL::deleteShader): Deleted.
        (WebCore::GraphicsContextGLOpenGL::deleteTexture): Deleted.
        (WebCore::GraphicsContextGLOpenGL::synthesizeGLError): Deleted.
        (WebCore::GraphicsContextGLOpenGL::forceContextLost): Deleted.
        (WebCore::GraphicsContextGLOpenGL::recycleContext): Deleted.
        (WebCore::GraphicsContextGLOpenGL::dispatchContextChangedNotification): Deleted.
        (WebCore::GraphicsContextGLOpenGL::drawArraysInstanced): Deleted.
        (WebCore::GraphicsContextGLOpenGL::drawElementsInstanced): Deleted.
        (WebCore::GraphicsContextGLOpenGL::vertexAttribDivisor): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getUniformBlockIndex): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getActiveUniformBlockName): Deleted.
        (WebCore::GraphicsContextGLOpenGL::uniformBlockBinding): Deleted.
        (WebCore::GraphicsContextGLOpenGL::createQuery): Deleted.
        (WebCore::GraphicsContextGLOpenGL::beginQuery): Deleted.
        (WebCore::GraphicsContextGLOpenGL::endQuery): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getQueryObjectui): Deleted.
        (WebCore::GraphicsContextGLOpenGL::createTransformFeedback): Deleted.
        (WebCore::GraphicsContextGLOpenGL::deleteTransformFeedback): Deleted.
        (WebCore::GraphicsContextGLOpenGL::isTransformFeedback): Deleted.
        (WebCore::GraphicsContextGLOpenGL::bindTransformFeedback): Deleted.
        (WebCore::GraphicsContextGLOpenGL::beginTransformFeedback): Deleted.
        (WebCore::GraphicsContextGLOpenGL::endTransformFeedback): Deleted.
        (WebCore::GraphicsContextGLOpenGL::transformFeedbackVaryings): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getTransformFeedbackVarying): Deleted.
        (WebCore::GraphicsContextGLOpenGL::bindBufferBase): Deleted.
        (WebCore::GraphicsContextGLOpenGL::blitFramebuffer): Deleted.
        (WebCore::GraphicsContextGLOpenGL::framebufferTextureLayer): Deleted.
        (WebCore::GraphicsContextGLOpenGL::invalidateFramebuffer): Deleted.
        (WebCore::GraphicsContextGLOpenGL::invalidateSubFramebuffer): Deleted.
        (WebCore::GraphicsContextGLOpenGL::readBuffer): Deleted.
        (WebCore::GraphicsContextGLOpenGL::copyTexSubImage3D): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getFragDataLocation): Deleted.
        (WebCore::GraphicsContextGLOpenGL::uniform1ui): Deleted.
        (WebCore::GraphicsContextGLOpenGL::uniform2ui): Deleted.
        (WebCore::GraphicsContextGLOpenGL::uniform3ui): Deleted.
        (WebCore::GraphicsContextGLOpenGL::uniform4ui): Deleted.
        (WebCore::GraphicsContextGLOpenGL::uniform1uiv): Deleted.
        (WebCore::GraphicsContextGLOpenGL::uniform2uiv): Deleted.
        (WebCore::GraphicsContextGLOpenGL::uniform3uiv): Deleted.
        (WebCore::GraphicsContextGLOpenGL::uniform4uiv): Deleted.
        (WebCore::GraphicsContextGLOpenGL::uniformMatrix2x3fv): Deleted.
        (WebCore::GraphicsContextGLOpenGL::uniformMatrix3x2fv): Deleted.
        (WebCore::GraphicsContextGLOpenGL::uniformMatrix2x4fv): Deleted.
        (WebCore::GraphicsContextGLOpenGL::uniformMatrix4x2fv): Deleted.
        (WebCore::GraphicsContextGLOpenGL::uniformMatrix3x4fv): Deleted.
        (WebCore::GraphicsContextGLOpenGL::uniformMatrix4x3fv): Deleted.
        (WebCore::GraphicsContextGLOpenGL::vertexAttribI4i): Deleted.
        (WebCore::GraphicsContextGLOpenGL::vertexAttribI4iv): Deleted.
        (WebCore::GraphicsContextGLOpenGL::vertexAttribI4ui): Deleted.
        (WebCore::GraphicsContextGLOpenGL::vertexAttribI4uiv): Deleted.
        (WebCore::GraphicsContextGLOpenGL::drawRangeElements): Deleted.
        (WebCore::GraphicsContextGLOpenGL::drawBuffers): Deleted.
        (WebCore::GraphicsContextGLOpenGL::clearBufferiv): Deleted.
        (WebCore::GraphicsContextGLOpenGL::clearBufferuiv): Deleted.
        (WebCore::GraphicsContextGLOpenGL::clearBufferfv): Deleted.
        (WebCore::GraphicsContextGLOpenGL::clearBufferfi): Deleted.
        (WebCore::GraphicsContextGLOpenGL::deleteQuery): Deleted.
        (WebCore::GraphicsContextGLOpenGL::isQuery): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getQuery): Deleted.
        (WebCore::GraphicsContextGLOpenGL::createSampler): Deleted.
        (WebCore::GraphicsContextGLOpenGL::deleteSampler): Deleted.
        (WebCore::GraphicsContextGLOpenGL::isSampler): Deleted.
        (WebCore::GraphicsContextGLOpenGL::bindSampler): Deleted.
        (WebCore::GraphicsContextGLOpenGL::samplerParameteri): Deleted.
        (WebCore::GraphicsContextGLOpenGL::samplerParameterf): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getSamplerParameterf): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getSamplerParameteri): Deleted.
        (WebCore::GraphicsContextGLOpenGL::fenceSync): Deleted.
        (WebCore::GraphicsContextGLOpenGL::isSync): Deleted.
        (WebCore::GraphicsContextGLOpenGL::deleteSync): Deleted.
        (WebCore::GraphicsContextGLOpenGL::clientWaitSync): Deleted.
        (WebCore::GraphicsContextGLOpenGL::waitSync): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getSynci): Deleted.
        (WebCore::GraphicsContextGLOpenGL::pauseTransformFeedback): Deleted.
        (WebCore::GraphicsContextGLOpenGL::resumeTransformFeedback): Deleted.
        (WebCore::GraphicsContextGLOpenGL::bindBufferRange): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getUniformIndices): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getActiveUniformBlockiv): Deleted.
        (WebCore::GraphicsContextGLOpenGL::multiDrawArraysANGLE): Deleted.
        (WebCore::GraphicsContextGLOpenGL::multiDrawArraysInstancedANGLE): Deleted.
        (WebCore::GraphicsContextGLOpenGL::multiDrawElementsANGLE): Deleted.
        (WebCore::GraphicsContextGLOpenGL::multiDrawElementsInstancedANGLE): Deleted.
        (WebCore::GraphicsContextGLOpenGL::waitAndUpdateOldestFrame): Deleted.
        * platform/graphics/angle/GraphicsContextGLANGLE.h: Copied from Source/WebCore/platform/graphics/opengl/GraphicsContextGLOpenGL.h.
        * platform/graphics/cairo/GraphicsContextGLCairo.cpp:
        (WebCore::GraphicsContextGL::paintToCanvas):
        (WebCore::GraphicsContextGLOpenGL::paintToCanvas): Deleted.
        * platform/graphics/cg/GraphicsContextGLCG.cpp:
        (WebCore::GraphicsContextGL::paintToCanvas):
        (WebCore::GraphicsContextGLOpenGL::paintToCanvas): Deleted.
        Move paintToCanvas from GraphicsContextGLOpenGL to
        GraphicsContextGL. It was a generic static function and did not
        have any dependency to the GraphicsContextGLOpenGL.

        * platform/graphics/cocoa/GraphicsContextGLCocoa.h:
        * platform/graphics/cocoa/GraphicsContextGLCocoa.mm:
        (WebCore::initializeEGLDisplay):
        (WebCore::GraphicsContextGLCocoa::GraphicsContextGLCocoa):
        (WebCore::GraphicsContextGLANGLE::GraphicsContextGLANGLE):
        (WebCore::GraphicsContextGLANGLE::~GraphicsContextGLANGLE):
        (WebCore::GraphicsContextGLANGLE::platformLayer const):
        (WebCore::GraphicsContextGLANGLE::makeContextCurrent):
        (WebCore::GraphicsContextGLANGLE::checkGPUStatus):
        (WebCore::GraphicsContextGLANGLE::setContextVisibility):
        (WebCore::GraphicsContextGLANGLE::displayWasReconfigured):
        (WebCore::GraphicsContextGLANGLE::reshapeDisplayBufferBacking):
        (WebCore::GraphicsContextGLANGLE::allocateAndBindDisplayBufferBacking):
        (WebCore::GraphicsContextGLANGLE::bindDisplayBufferBacking):
        (WebCore::GraphicsContextGLANGLE::makeCurrent):
        (WebCore::GraphicsContextGLCocoa::createPbufferAndAttachIOSurface):
        (WebCore::GraphicsContextGLANGLE::prepareForDisplay):
        (WebCore::GraphicsContextGLCocoa::asCV):
        (WebCore::GraphicsContextGLANGLE::readCompositedResults):
        (WebCore::GraphicsContextGLANGLE::paintCompositedResultsToMediaSample):
        (WebCore::GraphicsContextGLANGLE::platformReleaseThreadResources):
        (WebCore::GraphicsContextGLOpenGL::GraphicsContextGLOpenGL): Deleted.
        (WebCore::GraphicsContextGLOpenGL::~GraphicsContextGLOpenGL): Deleted.
        (WebCore::GraphicsContextGLOpenGL::platformLayer const): Deleted.
        (WebCore::GraphicsContextGLOpenGL::makeContextCurrent): Deleted.
        (WebCore::GraphicsContextGLOpenGL::checkGPUStatus): Deleted.
        (WebCore::GraphicsContextGLOpenGL::setContextVisibility): Deleted.
        (WebCore::GraphicsContextGLOpenGL::displayWasReconfigured): Deleted.
        (WebCore::GraphicsContextGLOpenGL::reshapeDisplayBufferBacking): Deleted.
        (WebCore::GraphicsContextGLOpenGL::allocateAndBindDisplayBufferBacking): Deleted.
        (WebCore::GraphicsContextGLOpenGL::bindDisplayBufferBacking): Deleted.
        (WebCore::GraphicsContextGLOpenGL::makeCurrent): Deleted.
        (WebCore::GraphicsContextGLOpenGL::isGLES2Compliant const): Deleted.
        (WebCore::GraphicsContextGLOpenGL::simulateEventForTesting): Deleted.
        (WebCore::GraphicsContextGLOpenGL::prepareForDisplay): Deleted.
        (WebCore::GraphicsContextGLOpenGL::asCV): Deleted.
        (WebCore::GraphicsContextGLOpenGL::readCompositedResults): Deleted.
        (WebCore::GraphicsContextGLOpenGL::paintCompositedResultsToMediaSample): Deleted.
        (WebCore::GraphicsContextGLOpenGL::platformReleaseThreadResources): Deleted.
        * platform/graphics/cv/GraphicsContextGLCVCocoa.cpp: Renamed from Source/WebCore/platform/graphics/cv/GraphicsContextGLCVANGLE.cpp.
        (WebCore::GraphicsContextGLCVCocoa::create):
        (WebCore::GraphicsContextGLCVCocoa::~GraphicsContextGLCVCocoa):
        (WebCore::GraphicsContextGLCVCocoa::GraphicsContextGLCVCocoa):
        (WebCore::GraphicsContextGLCVCocoa::copyPixelBufferToTexture):
        * platform/graphics/cv/GraphicsContextGLCVCocoa.h: Renamed from Source/WebCore/platform/graphics/cv/GraphicsContextGLCVANGLE.h.
        * platform/graphics/opengl/GraphicsContextGLOpenGL.cpp:
        (WebCore::setCurrentNameHashMapForShader):
        (WebCore::nameHashForShader):
        (WebCore::GraphicsContextGLOpenGL::validateDepthStencil):
        (WebCore::GraphicsContextGLOpenGL::prepareTexture):
        (WebCore::GraphicsContextGLOpenGL::readRenderingResults):
        (WebCore::GraphicsContextGLOpenGL::reshape):
        (WebCore::GraphicsContextGLOpenGL::checkVaryingsPacking const):
        (WebCore::GraphicsContextGLOpenGL::precisionsMatch const):
        (WebCore::GraphicsContextGLOpenGL::activeTexture):
        (WebCore::GraphicsContextGLOpenGL::attachShader):
        (WebCore::GraphicsContextGLOpenGL::bindAttribLocation):
        (WebCore::GraphicsContextGLOpenGL::bindBuffer):
        (WebCore::GraphicsContextGLOpenGL::bindFramebuffer):
        (WebCore::GraphicsContextGLOpenGL::bindRenderbuffer):
        (WebCore::GraphicsContextGLOpenGL::bindTexture):
        (WebCore::GraphicsContextGLOpenGL::blendColor):
        (WebCore::GraphicsContextGLOpenGL::blendEquation):
        (WebCore::GraphicsContextGLOpenGL::blendEquationSeparate):
        (WebCore::GraphicsContextGLOpenGL::blendFunc):
        (WebCore::GraphicsContextGLOpenGL::blendFuncSeparate):
        (WebCore::GraphicsContextGLOpenGL::bufferData):
        (WebCore::GraphicsContextGLOpenGL::bufferSubData):
        (WebCore::GraphicsContextGLOpenGL::checkFramebufferStatus):
        (WebCore::GraphicsContextGLOpenGL::clearColor):
        (WebCore::GraphicsContextGLOpenGL::clear):
        (WebCore::GraphicsContextGLOpenGL::clearStencil):
        (WebCore::GraphicsContextGLOpenGL::colorMask):
        (WebCore::GraphicsContextGLOpenGL::compileShader):
        (WebCore::GraphicsContextGLOpenGL::compileShaderDirect):
        (WebCore::GraphicsContextGLOpenGL::copyTexImage2D):
        (WebCore::GraphicsContextGLOpenGL::copyTexSubImage2D):
        (WebCore::GraphicsContextGLOpenGL::cullFace):
        (WebCore::GraphicsContextGLOpenGL::depthFunc):
        (WebCore::GraphicsContextGLOpenGL::depthMask):
        (WebCore::GraphicsContextGLOpenGL::detachShader):
        (WebCore::GraphicsContextGLOpenGL::disable):
        (WebCore::GraphicsContextGLOpenGL::disableVertexAttribArray):
        (WebCore::GraphicsContextGLOpenGL::drawArrays):
        (WebCore::GraphicsContextGLOpenGL::drawElements):
        (WebCore::GraphicsContextGLOpenGL::enable):
        (WebCore::GraphicsContextGLOpenGL::enableVertexAttribArray):
        (WebCore::GraphicsContextGLOpenGL::finish):
        (WebCore::GraphicsContextGLOpenGL::flush):
        (WebCore::GraphicsContextGLOpenGL::framebufferRenderbuffer):
        (WebCore::GraphicsContextGLOpenGL::framebufferTexture2D):
        (WebCore::GraphicsContextGLOpenGL::frontFace):
        (WebCore::GraphicsContextGLOpenGL::generateMipmap):
        (WebCore::GraphicsContextGLOpenGL::getActiveAttribImpl):
        (WebCore::GraphicsContextGLOpenGL::getActiveAttrib):
        (WebCore::GraphicsContextGLOpenGL::getActiveUniformImpl):
        (WebCore::GraphicsContextGLOpenGL::getActiveUniform):
        (WebCore::GraphicsContextGLOpenGL::getAttachedShaders):
        (WebCore::generateHashedName):
        (WebCore::GraphicsContextGLOpenGL::mappedSymbolInShaderSourceMap):
        (WebCore::GraphicsContextGLOpenGL::mappedSymbolName):
        (WebCore::GraphicsContextGLOpenGL::originalSymbolInShaderSourceMap):
        (WebCore::GraphicsContextGLOpenGL::originalSymbolName):
        (WebCore::GraphicsContextGLOpenGL::getAttribLocation):
        (WebCore::GraphicsContextGLOpenGL::getAttribLocationDirect):
        (WebCore::GraphicsContextGLOpenGL::moveErrorsToSyntheticErrorList):
        (WebCore::GraphicsContextGLOpenGL::getError):
        (WebCore::GraphicsContextGLOpenGL::getString):
        (WebCore::GraphicsContextGLOpenGL::hint):
        (WebCore::GraphicsContextGLOpenGL::isBuffer):
        (WebCore::GraphicsContextGLOpenGL::isEnabled):
        (WebCore::GraphicsContextGLOpenGL::isFramebuffer):
        (WebCore::GraphicsContextGLOpenGL::isProgram):
        (WebCore::GraphicsContextGLOpenGL::isRenderbuffer):
        (WebCore::GraphicsContextGLOpenGL::isShader):
        (WebCore::GraphicsContextGLOpenGL::isTexture):
        (WebCore::GraphicsContextGLOpenGL::lineWidth):
        (WebCore::GraphicsContextGLOpenGL::linkProgram):
        (WebCore::GraphicsContextGLOpenGL::pixelStorei):
        (WebCore::GraphicsContextGLOpenGL::polygonOffset):
        (WebCore::GraphicsContextGLOpenGL::sampleCoverage):
        (WebCore::GraphicsContextGLOpenGL::scissor):
        (WebCore::GraphicsContextGLOpenGL::shaderSource):
        (WebCore::GraphicsContextGLOpenGL::stencilFunc):
        (WebCore::GraphicsContextGLOpenGL::stencilFuncSeparate):
        (WebCore::GraphicsContextGLOpenGL::stencilMask):
        (WebCore::GraphicsContextGLOpenGL::stencilMaskSeparate):
        (WebCore::GraphicsContextGLOpenGL::stencilOp):
        (WebCore::GraphicsContextGLOpenGL::stencilOpSeparate):
        (WebCore::GraphicsContextGLOpenGL::texParameterf):
        (WebCore::GraphicsContextGLOpenGL::texParameteri):
        (WebCore::GraphicsContextGLOpenGL::uniform1f):
        (WebCore::GraphicsContextGLOpenGL::uniform1fv):
        (WebCore::GraphicsContextGLOpenGL::uniform2f):
        (WebCore::GraphicsContextGLOpenGL::uniform2fv):
        (WebCore::GraphicsContextGLOpenGL::uniform3f):
        (WebCore::GraphicsContextGLOpenGL::uniform3fv):
        (WebCore::GraphicsContextGLOpenGL::uniform4f):
        (WebCore::GraphicsContextGLOpenGL::uniform4fv):
        (WebCore::GraphicsContextGLOpenGL::uniform1i):
        (WebCore::GraphicsContextGLOpenGL::uniform1iv):
        (WebCore::GraphicsContextGLOpenGL::uniform2i):
        (WebCore::GraphicsContextGLOpenGL::uniform2iv):
        (WebCore::GraphicsContextGLOpenGL::uniform3i):
        (WebCore::GraphicsContextGLOpenGL::uniform3iv):
        (WebCore::GraphicsContextGLOpenGL::uniform4i):
        (WebCore::GraphicsContextGLOpenGL::uniform4iv):
        (WebCore::GraphicsContextGLOpenGL::uniformMatrix2fv):
        (WebCore::GraphicsContextGLOpenGL::uniformMatrix3fv):
        (WebCore::GraphicsContextGLOpenGL::uniformMatrix4fv):
        (WebCore::GraphicsContextGLOpenGL::useProgram):
        (WebCore::GraphicsContextGLOpenGL::validateProgram):
        (WebCore::GraphicsContextGLOpenGL::vertexAttrib1f):
        (WebCore::GraphicsContextGLOpenGL::vertexAttrib1fv):
        (WebCore::GraphicsContextGLOpenGL::vertexAttrib2f):
        (WebCore::GraphicsContextGLOpenGL::vertexAttrib2fv):
        (WebCore::GraphicsContextGLOpenGL::vertexAttrib3f):
        (WebCore::GraphicsContextGLOpenGL::vertexAttrib3fv):
        (WebCore::GraphicsContextGLOpenGL::vertexAttrib4f):
        (WebCore::GraphicsContextGLOpenGL::vertexAttrib4fv):
        (WebCore::GraphicsContextGLOpenGL::vertexAttribPointer):
        (WebCore::GraphicsContextGLOpenGL::viewport):
        (WebCore::GraphicsContextGLOpenGL::createVertexArray):
        (WebCore::GraphicsContextGLOpenGL::deleteVertexArray):
        (WebCore::GraphicsContextGLOpenGL::isVertexArray):
        (WebCore::GraphicsContextGLOpenGL::bindVertexArray):
        (WebCore::GraphicsContextGLOpenGL::getBooleanv):
        (WebCore::GraphicsContextGLOpenGL::getBufferParameteri):
        (WebCore::GraphicsContextGLOpenGL::getFloatv):
        (WebCore::GraphicsContextGLOpenGL::getInteger64):
        (WebCore::GraphicsContextGLOpenGL::getInteger64i):
        (WebCore::GraphicsContextGLOpenGL::getFramebufferAttachmentParameteri):
        (WebCore::GraphicsContextGLOpenGL::getProgrami):
        (WebCore::GraphicsContextGLOpenGL::getNonBuiltInActiveSymbolCount):
        (WebCore::GraphicsContextGLOpenGL::getUnmangledInfoLog):
        (WebCore::GraphicsContextGLOpenGL::getProgramInfoLog):
        (WebCore::GraphicsContextGLOpenGL::getRenderbufferParameteri):
        (WebCore::GraphicsContextGLOpenGL::getShaderi):
        (WebCore::GraphicsContextGLOpenGL::getShaderInfoLog):
        (WebCore::GraphicsContextGLOpenGL::getShaderSource):
        (WebCore::GraphicsContextGLOpenGL::getTexParameterf):
        (WebCore::GraphicsContextGLOpenGL::getTexParameteri):
        (WebCore::GraphicsContextGLOpenGL::getUniformfv):
        (WebCore::GraphicsContextGLOpenGL::getUniformiv):
        (WebCore::GraphicsContextGLOpenGL::getUniformuiv):
        (WebCore::GraphicsContextGLOpenGL::getUniformLocation):
        (WebCore::GraphicsContextGLOpenGL::getVertexAttribOffset):
        (WebCore::GraphicsContextGLOpenGL::texSubImage2D):
        (WebCore::GraphicsContextGLOpenGL::compressedTexImage2D):
        (WebCore::GraphicsContextGLOpenGL::compressedTexSubImage2D):
        (WebCore::GraphicsContextGLOpenGL::createBuffer):
        (WebCore::GraphicsContextGLOpenGL::createFramebuffer):
        (WebCore::GraphicsContextGLOpenGL::createProgram):
        (WebCore::GraphicsContextGLOpenGL::createRenderbuffer):
        (WebCore::GraphicsContextGLOpenGL::createShader):
        (WebCore::GraphicsContextGLOpenGL::createTexture):
        (WebCore::GraphicsContextGLOpenGL::deleteBuffer):
        (WebCore::GraphicsContextGLOpenGL::deleteFramebuffer):
        (WebCore::GraphicsContextGLOpenGL::deleteProgram):
        (WebCore::GraphicsContextGLOpenGL::deleteRenderbuffer):
        (WebCore::GraphicsContextGLOpenGL::deleteShader):
        (WebCore::GraphicsContextGLOpenGL::deleteTexture):
        (WebCore::GraphicsContextGLOpenGL::synthesizeGLError):
        (WebCore::GraphicsContextGLOpenGL::forceContextLost):
        (WebCore::GraphicsContextGLOpenGL::recycleContext):
        (WebCore::GraphicsContextGLOpenGL::dispatchContextChangedNotification):
        (WebCore::GraphicsContextGLOpenGL::texImage2DDirect):
        (WebCore::GraphicsContextGLOpenGL::drawArraysInstanced):
        (WebCore::GraphicsContextGLOpenGL::drawElementsInstanced):
        (WebCore::GraphicsContextGLOpenGL::vertexAttribDivisor):
        (WebCore::GraphicsContextGLOpenGL::primitiveRestartIndex):
        (WebCore::GraphicsContextGLOpenGL::copyBufferSubData):
        (WebCore::GraphicsContextGLOpenGL::getBufferSubData):
        (WebCore::GraphicsContextGLOpenGL::blitFramebuffer):
        (WebCore::GraphicsContextGLOpenGL::framebufferTextureLayer):
        (WebCore::GraphicsContextGLOpenGL::invalidateFramebuffer):
        (WebCore::GraphicsContextGLOpenGL::invalidateSubFramebuffer):
        (WebCore::GraphicsContextGLOpenGL::readBuffer):
        (WebCore::GraphicsContextGLOpenGL::getInternalformativ):
        (WebCore::GraphicsContextGLOpenGL::renderbufferStorageMultisample):
        (WebCore::GraphicsContextGLOpenGL::texStorage2D):
        (WebCore::GraphicsContextGLOpenGL::texStorage3D):
        (WebCore::GraphicsContextGLOpenGL::copyTexSubImage3D):
        (WebCore::GraphicsContextGLOpenGL::getFragDataLocation):
        (WebCore::GraphicsContextGLOpenGL::uniform1ui):
        (WebCore::GraphicsContextGLOpenGL::uniform2ui):
        (WebCore::GraphicsContextGLOpenGL::uniform3ui):
        (WebCore::GraphicsContextGLOpenGL::uniform4ui):
        (WebCore::GraphicsContextGLOpenGL::uniform1uiv):
        (WebCore::GraphicsContextGLOpenGL::uniform2uiv):
        (WebCore::GraphicsContextGLOpenGL::uniform3uiv):
        (WebCore::GraphicsContextGLOpenGL::uniform4uiv):
        (WebCore::GraphicsContextGLOpenGL::uniformMatrix2x3fv):
        (WebCore::GraphicsContextGLOpenGL::uniformMatrix3x2fv):
        (WebCore::GraphicsContextGLOpenGL::uniformMatrix2x4fv):
        (WebCore::GraphicsContextGLOpenGL::uniformMatrix4x2fv):
        (WebCore::GraphicsContextGLOpenGL::uniformMatrix3x4fv):
        (WebCore::GraphicsContextGLOpenGL::uniformMatrix4x3fv):
        (WebCore::GraphicsContextGLOpenGL::vertexAttribI4i):
        (WebCore::GraphicsContextGLOpenGL::vertexAttribI4iv):
        (WebCore::GraphicsContextGLOpenGL::vertexAttribI4ui):
        (WebCore::GraphicsContextGLOpenGL::vertexAttribI4uiv):
        (WebCore::GraphicsContextGLOpenGL::vertexAttribIPointer):
        (WebCore::GraphicsContextGLOpenGL::drawRangeElements):
        (WebCore::GraphicsContextGLOpenGL::drawBuffers):
        (WebCore::GraphicsContextGLOpenGL::clearBufferiv):
        (WebCore::GraphicsContextGLOpenGL::clearBufferuiv):
        (WebCore::GraphicsContextGLOpenGL::clearBufferfv):
        (WebCore::GraphicsContextGLOpenGL::clearBufferfi):
        (WebCore::GraphicsContextGLOpenGL::createQuery):
        (WebCore::GraphicsContextGLOpenGL::deleteQuery):
        (WebCore::GraphicsContextGLOpenGL::isQuery):
        (WebCore::GraphicsContextGLOpenGL::beginQuery):
        (WebCore::GraphicsContextGLOpenGL::endQuery):
        (WebCore::GraphicsContextGLOpenGL::getQuery):
        (WebCore::GraphicsContextGLOpenGL::getQueryObjectui):
        (WebCore::GraphicsContextGLOpenGL::createSampler):
        (WebCore::GraphicsContextGLOpenGL::deleteSampler):
        (WebCore::GraphicsContextGLOpenGL::isSampler):
        (WebCore::GraphicsContextGLOpenGL::bindSampler):
        (WebCore::GraphicsContextGLOpenGL::samplerParameteri):
        (WebCore::GraphicsContextGLOpenGL::samplerParameterf):
        (WebCore::GraphicsContextGLOpenGL::getSamplerParameterf):
        (WebCore::GraphicsContextGLOpenGL::getSamplerParameteri):
        (WebCore::GraphicsContextGLOpenGL::fenceSync):
        (WebCore::GraphicsContextGLOpenGL::isSync):
        (WebCore::GraphicsContextGLOpenGL::deleteSync):
        (WebCore::GraphicsContextGLOpenGL::clientWaitSync):
        (WebCore::GraphicsContextGLOpenGL::waitSync):
        (WebCore::GraphicsContextGLOpenGL::getSynci):
        (WebCore::GraphicsContextGLOpenGL::createTransformFeedback):
        (WebCore::GraphicsContextGLOpenGL::deleteTransformFeedback):
        (WebCore::GraphicsContextGLOpenGL::isTransformFeedback):
        (WebCore::GraphicsContextGLOpenGL::bindTransformFeedback):
        (WebCore::GraphicsContextGLOpenGL::beginTransformFeedback):
        (WebCore::GraphicsContextGLOpenGL::endTransformFeedback):
        (WebCore::GraphicsContextGLOpenGL::transformFeedbackVaryings):
        (WebCore::GraphicsContextGLOpenGL::getTransformFeedbackVarying):
        (WebCore::GraphicsContextGLOpenGL::pauseTransformFeedback):
        (WebCore::GraphicsContextGLOpenGL::resumeTransformFeedback):
        (WebCore::GraphicsContextGLOpenGL::bindBufferBase):
        (WebCore::GraphicsContextGLOpenGL::bindBufferRange):
        (WebCore::GraphicsContextGLOpenGL::getUniformIndices):
        (WebCore::GraphicsContextGLOpenGL::getActiveUniforms):
        (WebCore::GraphicsContextGLOpenGL::getUniformBlockIndex):
        (WebCore::GraphicsContextGLOpenGL::getActiveUniformBlockName):
        (WebCore::GraphicsContextGLOpenGL::uniformBlockBinding):
        (WebCore::GraphicsContextGLOpenGL::readnPixels):
        (WebCore::GraphicsContextGLOpenGL::getActiveUniformBlockiv):
        (WebCore::GraphicsContextGLOpenGL::texImage2D):
        (WebCore::GraphicsContextGLOpenGL::texImage3D):
        (WebCore::GraphicsContextGLOpenGL::texSubImage3D):
        (WebCore::GraphicsContextGLOpenGL::compressedTexImage3D):
        (WebCore::GraphicsContextGLOpenGL::compressedTexSubImage3D):
        (WebCore::GraphicsContextGLOpenGL::multiDrawArraysANGLE):
        (WebCore::GraphicsContextGLOpenGL::multiDrawArraysInstancedANGLE):
        (WebCore::GraphicsContextGLOpenGL::multiDrawElementsANGLE):
        (WebCore::GraphicsContextGLOpenGL::multiDrawElementsInstancedANGLE):
        (WebCore::GraphicsContextGLOpenGL::texImage2DResourceSafe):
        * platform/graphics/opengl/GraphicsContextGLOpenGL.h:
        * platform/graphics/opengl/GraphicsContextGLOpenGLCommon.cpp: Removed.
        (): Deleted.
        (WebCore::setCurrentNameHashMapForShader): Deleted.
        (WebCore::nameHashForShader): Deleted.
        (WebCore::GraphicsContextGLOpenGL::validateDepthStencil): Deleted.
        (WebCore::GraphicsContextGLOpenGL::prepareTexture): Deleted.
        (WebCore::GraphicsContextGLOpenGL::readRenderingResults): Deleted.
        (WebCore::GraphicsContextGLOpenGL::reshape): Deleted.
        (WebCore::GraphicsContextGLOpenGL::checkVaryingsPacking const): Deleted.
        (WebCore::GraphicsContextGLOpenGL::precisionsMatch const): Deleted.
        (WebCore::GraphicsContextGLOpenGL::activeTexture): Deleted.
        (WebCore::GraphicsContextGLOpenGL::attachShader): Deleted.
        (WebCore::GraphicsContextGLOpenGL::bindAttribLocation): Deleted.
        (WebCore::GraphicsContextGLOpenGL::bindBuffer): Deleted.
        (WebCore::GraphicsContextGLOpenGL::bindFramebuffer): Deleted.
        (WebCore::GraphicsContextGLOpenGL::bindRenderbuffer): Deleted.
        (WebCore::GraphicsContextGLOpenGL::bindTexture): Deleted.
        (WebCore::GraphicsContextGLOpenGL::blendColor): Deleted.
        (WebCore::GraphicsContextGLOpenGL::blendEquation): Deleted.
        (WebCore::GraphicsContextGLOpenGL::blendEquationSeparate): Deleted.
        (WebCore::GraphicsContextGLOpenGL::blendFunc): Deleted.
        (WebCore::GraphicsContextGLOpenGL::blendFuncSeparate): Deleted.
        (WebCore::GraphicsContextGLOpenGL::bufferData): Deleted.
        (WebCore::GraphicsContextGLOpenGL::bufferSubData): Deleted.
        (WebCore::GraphicsContextGLOpenGL::checkFramebufferStatus): Deleted.
        (WebCore::GraphicsContextGLOpenGL::clearColor): Deleted.
        (WebCore::GraphicsContextGLOpenGL::clear): Deleted.
        (WebCore::GraphicsContextGLOpenGL::clearStencil): Deleted.
        (WebCore::GraphicsContextGLOpenGL::colorMask): Deleted.
        (WebCore::GraphicsContextGLOpenGL::compileShader): Deleted.
        (WebCore::GraphicsContextGLOpenGL::compileShaderDirect): Deleted.
        (WebCore::GraphicsContextGLOpenGL::copyTexImage2D): Deleted.
        (WebCore::GraphicsContextGLOpenGL::copyTexSubImage2D): Deleted.
        (WebCore::GraphicsContextGLOpenGL::cullFace): Deleted.
        (WebCore::GraphicsContextGLOpenGL::depthFunc): Deleted.
        (WebCore::GraphicsContextGLOpenGL::depthMask): Deleted.
        (WebCore::GraphicsContextGLOpenGL::detachShader): Deleted.
        (WebCore::GraphicsContextGLOpenGL::disable): Deleted.
        (WebCore::GraphicsContextGLOpenGL::disableVertexAttribArray): Deleted.
        (WebCore::GraphicsContextGLOpenGL::drawArrays): Deleted.
        (WebCore::GraphicsContextGLOpenGL::drawElements): Deleted.
        (WebCore::GraphicsContextGLOpenGL::enable): Deleted.
        (WebCore::GraphicsContextGLOpenGL::enableVertexAttribArray): Deleted.
        (WebCore::GraphicsContextGLOpenGL::finish): Deleted.
        (WebCore::GraphicsContextGLOpenGL::flush): Deleted.
        (WebCore::GraphicsContextGLOpenGL::framebufferRenderbuffer): Deleted.
        (WebCore::GraphicsContextGLOpenGL::framebufferTexture2D): Deleted.
        (WebCore::GraphicsContextGLOpenGL::frontFace): Deleted.
        (WebCore::GraphicsContextGLOpenGL::generateMipmap): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getActiveAttribImpl): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getActiveAttrib): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getActiveUniformImpl): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getActiveUniform): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getAttachedShaders): Deleted.
        (WebCore::generateHashedName): Deleted.
        (WebCore::GraphicsContextGLOpenGL::mappedSymbolInShaderSourceMap): Deleted.
        (WebCore::GraphicsContextGLOpenGL::mappedSymbolName): Deleted.
        (WebCore::GraphicsContextGLOpenGL::originalSymbolInShaderSourceMap): Deleted.
        (WebCore::GraphicsContextGLOpenGL::originalSymbolName): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getAttribLocation): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getAttribLocationDirect): Deleted.
        (WebCore::GraphicsContextGLOpenGL::moveErrorsToSyntheticErrorList): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getError): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getString): Deleted.
        (WebCore::GraphicsContextGLOpenGL::hint): Deleted.
        (WebCore::GraphicsContextGLOpenGL::isBuffer): Deleted.
        (WebCore::GraphicsContextGLOpenGL::isEnabled): Deleted.
        (WebCore::GraphicsContextGLOpenGL::isFramebuffer): Deleted.
        (WebCore::GraphicsContextGLOpenGL::isProgram): Deleted.
        (WebCore::GraphicsContextGLOpenGL::isRenderbuffer): Deleted.
        (WebCore::GraphicsContextGLOpenGL::isShader): Deleted.
        (WebCore::GraphicsContextGLOpenGL::isTexture): Deleted.
        (WebCore::GraphicsContextGLOpenGL::lineWidth): Deleted.
        (WebCore::GraphicsContextGLOpenGL::linkProgram): Deleted.
        (WebCore::GraphicsContextGLOpenGL::pixelStorei): Deleted.
        (WebCore::GraphicsContextGLOpenGL::polygonOffset): Deleted.
        (WebCore::GraphicsContextGLOpenGL::sampleCoverage): Deleted.
        (WebCore::GraphicsContextGLOpenGL::scissor): Deleted.
        (WebCore::GraphicsContextGLOpenGL::shaderSource): Deleted.
        (WebCore::GraphicsContextGLOpenGL::stencilFunc): Deleted.
        (WebCore::GraphicsContextGLOpenGL::stencilFuncSeparate): Deleted.
        (WebCore::GraphicsContextGLOpenGL::stencilMask): Deleted.
        (WebCore::GraphicsContextGLOpenGL::stencilMaskSeparate): Deleted.
        (WebCore::GraphicsContextGLOpenGL::stencilOp): Deleted.
        (WebCore::GraphicsContextGLOpenGL::stencilOpSeparate): Deleted.
        (WebCore::GraphicsContextGLOpenGL::texParameterf): Deleted.
        (WebCore::GraphicsContextGLOpenGL::texParameteri): Deleted.
        (WebCore::GraphicsContextGLOpenGL::uniform1f): Deleted.
        (WebCore::GraphicsContextGLOpenGL::uniform1fv): Deleted.
        (WebCore::GraphicsContextGLOpenGL::uniform2f): Deleted.
        (WebCore::GraphicsContextGLOpenGL::uniform2fv): Deleted.
        (WebCore::GraphicsContextGLOpenGL::uniform3f): Deleted.
        (WebCore::GraphicsContextGLOpenGL::uniform3fv): Deleted.
        (WebCore::GraphicsContextGLOpenGL::uniform4f): Deleted.
        (WebCore::GraphicsContextGLOpenGL::uniform4fv): Deleted.
        (WebCore::GraphicsContextGLOpenGL::uniform1i): Deleted.
        (WebCore::GraphicsContextGLOpenGL::uniform1iv): Deleted.
        (WebCore::GraphicsContextGLOpenGL::uniform2i): Deleted.
        (WebCore::GraphicsContextGLOpenGL::uniform2iv): Deleted.
        (WebCore::GraphicsContextGLOpenGL::uniform3i): Deleted.
        (WebCore::GraphicsContextGLOpenGL::uniform3iv): Deleted.
        (WebCore::GraphicsContextGLOpenGL::uniform4i): Deleted.
        (WebCore::GraphicsContextGLOpenGL::uniform4iv): Deleted.
        (WebCore::GraphicsContextGLOpenGL::uniformMatrix2fv): Deleted.
        (WebCore::GraphicsContextGLOpenGL::uniformMatrix3fv): Deleted.
        (WebCore::GraphicsContextGLOpenGL::uniformMatrix4fv): Deleted.
        (WebCore::GraphicsContextGLOpenGL::useProgram): Deleted.
        (WebCore::GraphicsContextGLOpenGL::validateProgram): Deleted.
        (WebCore::GraphicsContextGLOpenGL::vertexAttrib1f): Deleted.
        (WebCore::GraphicsContextGLOpenGL::vertexAttrib1fv): Deleted.
        (WebCore::GraphicsContextGLOpenGL::vertexAttrib2f): Deleted.
        (WebCore::GraphicsContextGLOpenGL::vertexAttrib2fv): Deleted.
        (WebCore::GraphicsContextGLOpenGL::vertexAttrib3f): Deleted.
        (WebCore::GraphicsContextGLOpenGL::vertexAttrib3fv): Deleted.
        (WebCore::GraphicsContextGLOpenGL::vertexAttrib4f): Deleted.
        (WebCore::GraphicsContextGLOpenGL::vertexAttrib4fv): Deleted.
        (WebCore::GraphicsContextGLOpenGL::vertexAttribPointer): Deleted.
        (WebCore::GraphicsContextGLOpenGL::viewport): Deleted.
        (WebCore::GraphicsContextGLOpenGL::createVertexArray): Deleted.
        (WebCore::GraphicsContextGLOpenGL::deleteVertexArray): Deleted.
        (WebCore::GraphicsContextGLOpenGL::isVertexArray): Deleted.
        (WebCore::GraphicsContextGLOpenGL::bindVertexArray): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getBooleanv): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getBufferParameteri): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getFloatv): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getInteger64): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getInteger64i): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getFramebufferAttachmentParameteri): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getProgrami): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getNonBuiltInActiveSymbolCount): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getUnmangledInfoLog): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getProgramInfoLog): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getRenderbufferParameteri): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getShaderi): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getShaderInfoLog): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getShaderSource): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getTexParameterf): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getTexParameteri): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getUniformfv): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getUniformiv): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getUniformuiv): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getUniformLocation): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getVertexAttribOffset): Deleted.
        (WebCore::GraphicsContextGLOpenGL::texSubImage2D): Deleted.
        (WebCore::GraphicsContextGLOpenGL::compressedTexImage2D): Deleted.
        (WebCore::GraphicsContextGLOpenGL::compressedTexSubImage2D): Deleted.
        (WebCore::GraphicsContextGLOpenGL::createBuffer): Deleted.
        (WebCore::GraphicsContextGLOpenGL::createFramebuffer): Deleted.
        (WebCore::GraphicsContextGLOpenGL::createProgram): Deleted.
        (WebCore::GraphicsContextGLOpenGL::createRenderbuffer): Deleted.
        (WebCore::GraphicsContextGLOpenGL::createShader): Deleted.
        (WebCore::GraphicsContextGLOpenGL::createTexture): Deleted.
        (WebCore::GraphicsContextGLOpenGL::deleteBuffer): Deleted.
        (WebCore::GraphicsContextGLOpenGL::deleteFramebuffer): Deleted.
        (WebCore::GraphicsContextGLOpenGL::deleteProgram): Deleted.
        (WebCore::GraphicsContextGLOpenGL::deleteRenderbuffer): Deleted.
        (WebCore::GraphicsContextGLOpenGL::deleteShader): Deleted.
        (WebCore::GraphicsContextGLOpenGL::deleteTexture): Deleted.
        (WebCore::GraphicsContextGLOpenGL::synthesizeGLError): Deleted.
        (WebCore::GraphicsContextGLOpenGL::forceContextLost): Deleted.
        (WebCore::GraphicsContextGLOpenGL::recycleContext): Deleted.
        (WebCore::GraphicsContextGLOpenGL::dispatchContextChangedNotification): Deleted.
        (WebCore::GraphicsContextGLOpenGL::texImage2DDirect): Deleted.
        (WebCore::GraphicsContextGLOpenGL::drawArraysInstanced): Deleted.
        (WebCore::GraphicsContextGLOpenGL::drawElementsInstanced): Deleted.
        (WebCore::GraphicsContextGLOpenGL::vertexAttribDivisor): Deleted.
        (WebCore::GraphicsContextGLOpenGL::primitiveRestartIndex): Deleted.
        (WebCore::GraphicsContextGLOpenGL::copyBufferSubData): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getBufferSubData): Deleted.
        (WebCore::GraphicsContextGLOpenGL::blitFramebuffer): Deleted.
        (WebCore::GraphicsContextGLOpenGL::framebufferTextureLayer): Deleted.
        (WebCore::GraphicsContextGLOpenGL::invalidateFramebuffer): Deleted.
        (WebCore::GraphicsContextGLOpenGL::invalidateSubFramebuffer): Deleted.
        (WebCore::GraphicsContextGLOpenGL::readBuffer): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getInternalformativ): Deleted.
        (WebCore::GraphicsContextGLOpenGL::renderbufferStorageMultisample): Deleted.
        (WebCore::GraphicsContextGLOpenGL::texStorage2D): Deleted.
        (WebCore::GraphicsContextGLOpenGL::texStorage3D): Deleted.
        (WebCore::GraphicsContextGLOpenGL::copyTexSubImage3D): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getFragDataLocation): Deleted.
        (WebCore::GraphicsContextGLOpenGL::uniform1ui): Deleted.
        (WebCore::GraphicsContextGLOpenGL::uniform2ui): Deleted.
        (WebCore::GraphicsContextGLOpenGL::uniform3ui): Deleted.
        (WebCore::GraphicsContextGLOpenGL::uniform4ui): Deleted.
        (WebCore::GraphicsContextGLOpenGL::uniform1uiv): Deleted.
        (WebCore::GraphicsContextGLOpenGL::uniform2uiv): Deleted.
        (WebCore::GraphicsContextGLOpenGL::uniform3uiv): Deleted.
        (WebCore::GraphicsContextGLOpenGL::uniform4uiv): Deleted.
        (WebCore::GraphicsContextGLOpenGL::uniformMatrix2x3fv): Deleted.
        (WebCore::GraphicsContextGLOpenGL::uniformMatrix3x2fv): Deleted.
        (WebCore::GraphicsContextGLOpenGL::uniformMatrix2x4fv): Deleted.
        (WebCore::GraphicsContextGLOpenGL::uniformMatrix4x2fv): Deleted.
        (WebCore::GraphicsContextGLOpenGL::uniformMatrix3x4fv): Deleted.
        (WebCore::GraphicsContextGLOpenGL::uniformMatrix4x3fv): Deleted.
        (WebCore::GraphicsContextGLOpenGL::vertexAttribI4i): Deleted.
        (WebCore::GraphicsContextGLOpenGL::vertexAttribI4iv): Deleted.
        (WebCore::GraphicsContextGLOpenGL::vertexAttribI4ui): Deleted.
        (WebCore::GraphicsContextGLOpenGL::vertexAttribI4uiv): Deleted.
        (WebCore::GraphicsContextGLOpenGL::vertexAttribIPointer): Deleted.
        (WebCore::GraphicsContextGLOpenGL::drawRangeElements): Deleted.
        (WebCore::GraphicsContextGLOpenGL::drawBuffers): Deleted.
        (WebCore::GraphicsContextGLOpenGL::clearBufferiv): Deleted.
        (WebCore::GraphicsContextGLOpenGL::clearBufferuiv): Deleted.
        (WebCore::GraphicsContextGLOpenGL::clearBufferfv): Deleted.
        (WebCore::GraphicsContextGLOpenGL::clearBufferfi): Deleted.
        (WebCore::GraphicsContextGLOpenGL::createQuery): Deleted.
        (WebCore::GraphicsContextGLOpenGL::deleteQuery): Deleted.
        (WebCore::GraphicsContextGLOpenGL::isQuery): Deleted.
        (WebCore::GraphicsContextGLOpenGL::beginQuery): Deleted.
        (WebCore::GraphicsContextGLOpenGL::endQuery): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getQuery): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getQueryObjectui): Deleted.
        (WebCore::GraphicsContextGLOpenGL::createSampler): Deleted.
        (WebCore::GraphicsContextGLOpenGL::deleteSampler): Deleted.
        (WebCore::GraphicsContextGLOpenGL::isSampler): Deleted.
        (WebCore::GraphicsContextGLOpenGL::bindSampler): Deleted.
        (WebCore::GraphicsContextGLOpenGL::samplerParameteri): Deleted.
        (WebCore::GraphicsContextGLOpenGL::samplerParameterf): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getSamplerParameterf): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getSamplerParameteri): Deleted.
        (WebCore::GraphicsContextGLOpenGL::fenceSync): Deleted.
        (WebCore::GraphicsContextGLOpenGL::isSync): Deleted.
        (WebCore::GraphicsContextGLOpenGL::deleteSync): Deleted.
        (WebCore::GraphicsContextGLOpenGL::clientWaitSync): Deleted.
        (WebCore::GraphicsContextGLOpenGL::waitSync): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getSynci): Deleted.
        (WebCore::GraphicsContextGLOpenGL::createTransformFeedback): Deleted.
        (WebCore::GraphicsContextGLOpenGL::deleteTransformFeedback): Deleted.
        (WebCore::GraphicsContextGLOpenGL::isTransformFeedback): Deleted.
        (WebCore::GraphicsContextGLOpenGL::bindTransformFeedback): Deleted.
        (WebCore::GraphicsContextGLOpenGL::beginTransformFeedback): Deleted.
        (WebCore::GraphicsContextGLOpenGL::endTransformFeedback): Deleted.
        (WebCore::GraphicsContextGLOpenGL::transformFeedbackVaryings): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getTransformFeedbackVarying): Deleted.
        (WebCore::GraphicsContextGLOpenGL::pauseTransformFeedback): Deleted.
        (WebCore::GraphicsContextGLOpenGL::resumeTransformFeedback): Deleted.
        (WebCore::GraphicsContextGLOpenGL::bindBufferBase): Deleted.
        (WebCore::GraphicsContextGLOpenGL::bindBufferRange): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getUniformIndices): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getActiveUniforms): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getUniformBlockIndex): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getActiveUniformBlockName): Deleted.
        (WebCore::GraphicsContextGLOpenGL::uniformBlockBinding): Deleted.
        (WebCore::GraphicsContextGLOpenGL::readnPixels): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getActiveUniformBlockiv): Deleted.
        (WebCore::GraphicsContextGLOpenGL::texImage2D): Deleted.
        (WebCore::GraphicsContextGLOpenGL::texImage3D): Deleted.
        (WebCore::GraphicsContextGLOpenGL::texSubImage3D): Deleted.
        (WebCore::GraphicsContextGLOpenGL::compressedTexImage3D): Deleted.
        (WebCore::GraphicsContextGLOpenGL::compressedTexSubImage3D): Deleted.
        (WebCore::GraphicsContextGLOpenGL::multiDrawArraysANGLE): Deleted.
        (WebCore::GraphicsContextGLOpenGL::multiDrawArraysInstancedANGLE): Deleted.
        (WebCore::GraphicsContextGLOpenGL::multiDrawElementsANGLE): Deleted.
        (WebCore::GraphicsContextGLOpenGL::multiDrawElementsInstancedANGLE): Deleted.
        (WebCore::GraphicsContextGLOpenGL::texImage2DResourceSafe): Deleted.
        * platform/graphics/opengl/GraphicsContextGLOpenGLManager.cpp:
        (WebCore::GraphicsContextGLOpenGLManager::addContext):
        (WebCore::GraphicsContextGLOpenGLManager::removeContext):
        * platform/graphics/opengl/GraphicsContextGLOpenGLManager.h:
        * platform/graphics/texmap/GraphicsContextGLTextureMapper.cpp:
        (WebCore::GraphicsContextGLOpenGL::isGLES2Compliant const):
        * platform/graphics/texmap/GraphicsContextGLTextureMapper.h:
        * platform/ios/wak/WebCoreThread.mm:

2021-11-30  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, GTK clang build fix after r286226

        * style/RuleFeature.cpp:
        (WebCore::Style::RuleFeatureSet::collectFeatures):

2021-11-30  Philippe Normand  <pnormand@igalia.com>

        REGRESSION(r269103): this patch is not EME spec compliant
        https://bugs.webkit.org/show_bug.cgi?id=233630

        Unreviewed, revert r269103. We must validate init data.

        * Modules/encryptedmedia/CDM.cpp:
        (WebCore::CDM::sanitizeInitData):
        * platform/encryptedmedia/CDMPrivate.cpp:
        (WebCore::CDMPrivate::sanitizeInitData const): Deleted.
        * platform/encryptedmedia/CDMPrivate.h:
        * platform/graphics/gstreamer/eme/CDMThunder.cpp:
        (WebCore::CDMPrivateThunder::supportsInitData const):
        (WebCore::CDMPrivateThunder::sanitizeInitData const): Deleted.
        * platform/graphics/gstreamer/eme/CDMThunder.h:

2021-11-30  Martin Robinson  <mrobinson@webkit.org>

        Transition from perspective(500px) to 'none' is probably wrong
        https://bugs.webkit.org/show_bug.cgi?id=52700

        Reviewed by Simon Fraser.

        Test: animations/3d/animate-to-transform-perpective-to-none.html

        Fix the interpolation of the `perspective()` transform function. This
        is a port of a similar Chromium CL at:
        https://chromium-review.googlesource.com/c/chromium/src/+/2924023

        * platform/graphics/transforms/PerspectiveTransformOperation.cpp:
        (WebCore::PerspectiveTransformOperation::blend):
        * platform/graphics/transforms/PerspectiveTransformOperation.h:

2021-11-30  Youenn Fablet  <youenn@apple.com>

        Preload navigation request if the service worker is not immediately ready to handle the navigation request fetch event
        https://bugs.webkit.org/show_bug.cgi?id=233471

        Reviewed by Chris Dumez.

        Add a helper routine.

        * loader/FetchOptions.h:

2021-11-30  Said Abou-Hallawa  <said@apple.com>

        [GPU Process] Calculate the result image rectangle of the FilterEffect in filter coordinates
        https://bugs.webkit.org/show_bug.cgi?id=233613

        Reviewed by Cameron McCormack.

        In this patch:

        1. determineAbsolutePaintRect() functions are deleted and replaced by
           calculateImageRect(). The new function returns the image rectangle
           in filter coordinates. Both the image rectangle in filter coordinates
           and in user space coordinates will be stored in the result FilterImage.

        2. FilterConsumer is replaced by Filter::ClipOperation and it is stored
           in Filter. So there is no need for FilterEffect::m_clipsToBounds.

        3. resultIsAlphaImage() will take a Vector of FilterImages instead of 
           relying on the input effects. This is a step towards removing the input
           effects from the FilterEffect.

        4. Move the maxEffectRect() calculation to Filter and make it also in
           filter coordinates.

        5. Make Filter::scaledByFilterScale() just scales a FloatSize. Add other
           override methods to scale the FloatPoint and FloatRect. Move resolving
           the relative length to the bounding box in a separate function 
           Filter::resolvedSize() which has to be called explicitly before calling
           scaledByFilterScale().

        6. Remove FilterEffect::mapPointFromUserSpaceToBuffer() and replace it by
           a call to Filter::scaledByFilterScale() followed by a call to
           FilterImage::mappedAbsolutePoint() since this is what it actually does.

        7. The SVGFilter and CSSFilter will pass the sourceImageRect in filter
           coordinates. When creating the sourceImage, sourceImageRect has to be
           scaled by calling Filter::scaledByFilterScale().

        * css/CSSFilterImageValue.cpp:
        (WebCore::CSSFilterImageValue::image):
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawFilteredImageBuffer):
        Scale the context down before drawing the result ImageBuffer and restore
        the context back after the drawing. Remove the repeated code from 
        RenderLayerFilters::applyFilterEffect() and 
        RenderSVGResourceFilter::postApplyResource().

        * platform/graphics/filters/DistantLightSource.cpp:
        (WebCore::DistantLightSource::initPaintingData const):
        * platform/graphics/filters/DistantLightSource.h:
        * platform/graphics/filters/FEColorMatrix.cpp:
        (WebCore::FEColorMatrix::resultIsAlphaImage const):
        * platform/graphics/filters/FEColorMatrix.h:
        * platform/graphics/filters/FEComposite.cpp:
        (WebCore::FEComposite::calculateImageRect const):
        (WebCore::FEComposite::determineAbsolutePaintRect): Deleted.
        * platform/graphics/filters/FEComposite.h:
        * platform/graphics/filters/FEConvolveMatrix.cpp:
        (WebCore::FEConvolveMatrix::calculateImageRect const):
        * platform/graphics/filters/FEConvolveMatrix.h:
        (): Deleted.
        * platform/graphics/filters/FEDisplacementMap.cpp:
        (WebCore::FEDisplacementMap::calculateImageRect const):
        * platform/graphics/filters/FEDisplacementMap.h:
        * platform/graphics/filters/FEDropShadow.cpp:
        (WebCore::FEDropShadow::calculateImageRect const):
        (WebCore::FEDropShadow::determineAbsolutePaintRect): Deleted.
        * platform/graphics/filters/FEDropShadow.h:
        * platform/graphics/filters/FEFlood.cpp:
        (WebCore::FEFlood::calculateImageRect const):
        * platform/graphics/filters/FEFlood.h:
        * platform/graphics/filters/FEGaussianBlur.cpp:
        (WebCore::FEGaussianBlur::calculateKernelSize):
        (WebCore::FEGaussianBlur::calculateImageRect const):
        (WebCore::FEGaussianBlur::resultIsAlphaImage const):
        (WebCore::FEGaussianBlur::determineAbsolutePaintRect): Deleted.
        * platform/graphics/filters/FEGaussianBlur.h:
        * platform/graphics/filters/FELighting.cpp:
        (WebCore::FELighting::calculateImageRect const):
        * platform/graphics/filters/FELighting.h:
        (): Deleted.
        * platform/graphics/filters/FEMorphology.cpp:
        (WebCore::FEMorphology::calculateImageRect const):
        (WebCore::FEMorphology::resultIsAlphaImage const):
        (WebCore::FEMorphology::determineAbsolutePaintRect): Deleted.
        * platform/graphics/filters/FEMorphology.h:
        * platform/graphics/filters/FEOffset.cpp:
        (WebCore::FEOffset::calculateImageRect const):
        (WebCore::FEOffset::resultIsAlphaImage const):
        (WebCore::FEOffset::determineAbsolutePaintRect): Deleted.
        * platform/graphics/filters/FEOffset.h:
        * platform/graphics/filters/FETile.cpp:
        (WebCore::FETile::calculateImageRect const):
        (WebCore::FETile::resultIsAlphaImage const):
        * platform/graphics/filters/FETile.h:
        (): Deleted.
        * platform/graphics/filters/FETurbulence.cpp:
        (WebCore::FETurbulence::calculateImageRect const):
        * platform/graphics/filters/FETurbulence.h:
        (): Deleted.
        * platform/graphics/filters/Filter.cpp:
        (WebCore::Filter::Filter):
        (WebCore::Filter::scaledByFilterScale const):
        (WebCore::Filter::maxEffectRect const):
        (WebCore::Filter::clipToMaxEffectRect const):
        * platform/graphics/filters/Filter.h:
        (WebCore::Filter::clipOperation const):
        (WebCore::Filter::resolvedSize const):
        (WebCore::Filter::scaledByFilterScale const): Deleted.
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::calculateImageRect const):
        (WebCore::FilterEffect::determineFilterPrimitiveSubregion):
        (WebCore::FilterEffect::apply):
        (WebCore::FilterEffect::externalRepresentation const):
        (WebCore::FilterEffect::determineAbsolutePaintRect): Deleted.
        (WebCore::FilterEffect::clipAbsolutePaintRect): Deleted.
        (WebCore::FilterEffect::mapPointFromUserSpaceToBuffer const): Deleted.
        * platform/graphics/filters/FilterEffect.h:
        (WebCore::FilterEffect::resultIsAlphaImage const):
        (WebCore::FilterEffect::absolutePaintRect const): Deleted.
        (WebCore::FilterEffect::setAbsolutePaintRect): Deleted.
        (WebCore::FilterEffect::setUnclippedAbsoluteSubregion): Deleted.
        (WebCore::FilterEffect::clipsToBounds const): Deleted.
        (WebCore::FilterEffect::setClipsToBounds): Deleted.
        * platform/graphics/filters/FilterImage.cpp:
        (WebCore::FilterImage::create):
        (WebCore::FilterImage::FilterImage):
        (WebCore::FilterImage::maxEffectRect const):
        (WebCore::FilterImage::mappedAbsolutePoint const):
        * platform/graphics/filters/FilterImage.h:
        (WebCore::FilterImage::imageRect const):
        * platform/graphics/filters/LightSource.h:
        * platform/graphics/filters/PointLightSource.cpp:
        (WebCore::PointLightSource::initPaintingData const):
        * platform/graphics/filters/PointLightSource.h:
        * platform/graphics/filters/SourceAlpha.cpp:
        (WebCore::SourceAlpha::calculateImageRect const):
        (WebCore::SourceAlpha::determineAbsolutePaintRect): Deleted.
        * platform/graphics/filters/SourceAlpha.h:
        * platform/graphics/filters/SourceGraphic.cpp:
        (WebCore::SourceGraphic::calculateImageRect const):
        (WebCore::SourceGraphic::determineAbsolutePaintRect): Deleted.
        * platform/graphics/filters/SourceGraphic.h:
        * platform/graphics/filters/SpotLightSource.cpp:
        (WebCore::SpotLightSource::initPaintingData const):
        * platform/graphics/filters/SpotLightSource.h:
        * platform/graphics/filters/software/FEDisplacementMapSoftwareApplier.cpp:
        (WebCore::FEDisplacementMapSoftwareApplier::apply const):
        * platform/graphics/filters/software/FEDropShadowSoftwareApplier.cpp:
        (WebCore::FEDropShadowSoftwareApplier::apply const):
        * platform/graphics/filters/software/FELightingSoftwareApplier.cpp:
        (WebCore::FELightingSoftwareApplier::setPixelInternal):
        (WebCore::FELightingSoftwareApplier::applyPlatform):
        (WebCore::FELightingSoftwareApplier::apply const):
        * platform/graphics/filters/software/FELightingSoftwareApplier.h:
        * platform/graphics/filters/software/FEMorphologySoftwareApplier.cpp:
        (WebCore::FEMorphologySoftwareApplier::apply const):
        * platform/graphics/filters/software/FEOffsetSoftwareApplier.cpp:
        (WebCore::FEOffsetSoftwareApplier::apply const):
        * rendering/CSSFilter.cpp:
        (WebCore::CSSFilter::create):
        (WebCore::CSSFilter::CSSFilter):
        (WebCore::createBlurEffect):
        (WebCore::createSVGFilter):
        (WebCore::CSSFilter::buildFilterFunctions):
        (WebCore::CSSFilter::setSourceImageRect):
        (WebCore::setupLastEffectProperties): Deleted.
        * rendering/CSSFilter.h:
        * rendering/RenderLayerFilters.cpp:
        (WebCore::RenderLayerFilters::buildFilter):
        (WebCore::RenderLayerFilters::allocateBackingStore):
        (WebCore::RenderLayerFilters::beginFilterEffect):
        (WebCore::RenderLayerFilters::applyFilterEffect):
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::applyResource):
        (WebCore::RenderSVGResourceFilter::postApplyResource):
        * svg/graphics/filters/SVGFEImage.cpp:
        (WebCore::FEImage::calculateImageRect const):
        (WebCore::FEImage::determineAbsolutePaintRect): Deleted.
        * svg/graphics/filters/SVGFEImage.h:
        * svg/graphics/filters/SVGFilter.cpp:
        (WebCore::SVGFilter::create):
        (WebCore::SVGFilter::SVGFilter):
        (WebCore::SVGFilter::resolvedSize const):
        (WebCore::SVGFilter::scaledByFilterScale const): Deleted.
        * svg/graphics/filters/SVGFilter.h:

2021-11-30  Youenn Fablet  <youenn@apple.com>

        Remove unnecessary service worker page settings handling
        https://bugs.webkit.org/show_bug.cgi?id=233468

        Reviewed by Chris Dumez.

        Use Settings.shouldUseServiceWorkerShortTimeout instead of dedicated SWContextManager::Connection::shouldUseShortTimeout.
        Remove SWContextManager::Connection::shouldUseShortTimeout.
        Change ServiceWorkerThreadProxy::createPageForServiceWorker into ServiceWorkerThreadProxy::setupPageForServiceWorker
        so that we apply page settings before creating the page document.

        No change of behavior.

        * workers/service/context/SWContextManager.h:
        (WebCore::SWContextManager::Connection::isClosed const):
        (WebCore::SWContextManager::Connection::setAsClosed):
        (WebCore::SWContextManager::Connection::shouldUseShortTimeout const): Deleted.
        (WebCore::SWContextManager::Connection::setShouldUseShortTimeout): Deleted.
        * workers/service/context/ServiceWorkerThread.cpp:
        (WebCore::ServiceWorkerThread::ServiceWorkerThread):
        * workers/service/context/ServiceWorkerThreadProxy.cpp:
        (WebCore::ServiceWorkerThreadProxy::setupPageForServiceWorker):
        (WebCore::ServiceWorkerThreadProxy::createPageForServiceWorker): Deleted.
        * workers/service/context/ServiceWorkerThreadProxy.h:

2021-11-29  Chris Dumez  <cdumez@apple.com>

        Add initial implementation for the Web Lock API
        https://bugs.webkit.org/show_bug.cgi?id=233289

        Reviewed by Geoff Garen.

        Add initial implementation for the Web Lock API as per:
        - https://wicg.github.io/web-locks/#lockmanager

        The implementation is complete and passes all the WPT tests. However,
        to reduce the patch size, the current implementation only works within
        a single WebProcess. In a follow-up, I'll update the implementation so
        that the registry lives in the UIProcess and the WebProcess just does
        IPC.

        No new tests, rebaselined existing tests.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/web-locks/WebLock.cpp:
        (WebCore::WebLock::create):
        (WebCore::WebLock::WebLock):
        * Modules/web-locks/WebLock.h:
        (WebCore::WebLock::identifier const):
        * Modules/web-locks/WebLockGrantedCallback.idl:
        * Modules/web-locks/WebLockIdentifier.h: Copied from Source/WebCore/Modules/web-locks/WebLockGrantedCallback.idl.
        * Modules/web-locks/WebLockManager.cpp:
        (WebCore::clientOriginFromContext):
        (WebCore::WebLockManager::LockRequest::isValid const):
        (WebCore::WebLockManager::create):
        (WebCore::WebLockManager::WebLockManager):
        (WebCore::WebLockManager::request):
        (WebCore::WebLockManager::didCompleteLockRequest):
        (WebCore::WebLockManager::requestLockOnMainThread):
        (WebCore::WebLockManager::releaseLockOnMainThread):
        (WebCore::WebLockManager::abortLockRequestOnMainThread):
        (WebCore::WebLockManager::queryOnMainThread):
        (WebCore::WebLockManager::query):
        (WebCore::WebLockManager::signalToAbortTheRequest):
        (WebCore::WebLockManager::settleReleasePromise):
        (WebCore::WebLockManager::stop):
        (WebCore::WebLockManager::virtualHasPendingActivity const):
        (WebCore::WebLockManager::activeDOMObjectName const):
        * Modules/web-locks/WebLockManager.h:
        * Modules/web-locks/WebLockManager.idl:
        * Modules/web-locks/WebLockManagerSnapshot.h: Copied from Source/WebCore/Modules/web-locks/WebLock.h.
        (WebCore::WebLockManagerSnapshot::Info::isolatedCopy const):
        (WebCore::WebLockManagerSnapshot::isolatedCopy const):
        * Modules/web-locks/WebLockManagerSnapshot.idl: Copied from Source/WebCore/Modules/web-locks/WebLockGrantedCallback.idl.
        * Modules/web-locks/WebLockRegistry.cpp: Added.
        (WebCore::WebLockRegistry::registryForOrigin):
        (WebCore::WebLockRegistry::WebLockRegistry):
        (WebCore::WebLockRegistry::~WebLockRegistry):
        (WebCore::WebLockRegistry::requestLock):
        (WebCore::WebLockRegistry::releaseLock):
        (WebCore::WebLockRegistry::abortLockRequest):
        (WebCore::WebLockRegistry::isGrantable const):
        (WebCore::WebLockRegistry::processLockRequestQueue):
        (WebCore::WebLockRegistry::snapshot):
        (WebCore::WebLockRegistry::clientIsGoingAway):
        * Modules/web-locks/WebLockRegistry.h: Copied from Source/WebCore/Modules/web-locks/WebLock.h.
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

        * bindings/js/JSDOMConvertPromise.h:
        (WebCore::Converter<IDLPromise<T>>::convert):
        Update Converter<IDLPromise<T>>::convert() to deal with worker termination similarly to
        what is done is some other places (e.g. DeferredPromise::handleTerminationExceptionIfNeeded(()).
        I had to make this fix because one of the WPT tests was hitting a debug assertions in JSC on
        worker termination otherwise.

        * page/NavigatorBase.cpp:
        (WebCore::NavigatorBase::locks):

2021-11-29  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Webpage translation] Avoid translating text inside image overlays
        https://bugs.webkit.org/show_bug.cgi?id=233225
        rdar://85713734

        Reviewed by Aditya Keerthi.

        Add `translate="no"` to image overlay content; text in image overlays is meant to visually match recognized text
        in the image, and should never be modified as a part of webpage translation.

        Test: fast/images/text-recognition/image-overlay-do-not-translate.html

        * dom/ImageOverlay.cpp:
        (WebCore::ImageOverlay::updateSubtree):

2021-11-29  Simon Fraser  <simon.fraser@apple.com>

        Run keyboard-animated scrolls on the scrolling thread
        https://bugs.webkit.org/show_bug.cgi?id=233591

        Reviewed by Tim Horton.

        Calling m_scrollableArea.scrollToPositionWithAnimation() hits the FrameView/RenderLayerScrollableArea
        overrides of requestAnimatedScrollToPosition() which dispatch the scroll to the scrolling thread.

        This allows the ScrollAnimationSmooth for keyboard-triggered scrolls (spacebar, page up/down, home/end)
        to run on the scrolling thread.

        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::singleAxisScroll):

2021-11-29  Simon Fraser  <simon.fraser@apple.com>

        Revert changes related to using a scroll animator for momentum scrolling
        https://bugs.webkit.org/show_bug.cgi?id=233585

        Reviewed by Tim Horton.

        It turns out that running an animation for the momentum phase of a scroll isn't web
        compatible, adds a bunch of complexity around interactions with rubberbanding, and
        has issues when ScrollAnimationMomentum behavior differs from the momentum event
        behavior in its response to initial velocity.

        So revert these changes added in r285787, r285797, r285917, r285953, r285964.

        * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.mm:
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::handleWheelEvent):
        * platform/ScrollingEffectsController.h:
        * platform/mac/ScrollingEffectsController.mm:
        (WebCore::ScrollingEffectsController::handleWheelEvent):
        (WebCore::ScrollingEffectsController::startRubberBandAnimation):
        (WebCore::phaseToString): Deleted.
        (WebCore::adjustedVelocity): Deleted.

2021-11-29  Tim Horton  <timothy_horton@apple.com>

        Plumb raw platform scrolling deltas along in wheel events
        https://bugs.webkit.org/show_bug.cgi?id=233583

        Reviewed by Simon Fraser.

        * platform/PlatformWheelEvent.cpp:
        (WebCore::PlatformWheelEvent::createFromGesture):
        * platform/PlatformWheelEvent.h:
        (WebCore::PlatformWheelEvent::rawPlatformDelta const):
        * PAL/pal/spi/mac/IOKitSPIMac.h:

2021-11-29  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add a basic heuristic for sizing text in image overlay blocks
        https://bugs.webkit.org/show_bug.cgi?id=233343
        rdar://85755755

        Reviewed by Tim Horton.

        Address a FIXME by implementing a simple heuristic for sizing text in image overlay blocks. Each image overlay
        block has a predetermined target width and height; currently, we hard-code the font size in each of these blocks
        to be 80% of the target height. While this works in some cases, it also causes content in these blocks to
        overflow the container if there's too much text.

        Avoid this problem by finding the largest font size, such that text in each container fits within the target
        bounds without overflowing vertically (we don't need to worry about horizontal overflow because horizontally
        overflowing text will simply wrap to the next line).

        Because of line wrapping, it's difficult to analytically compute this font size, so I'm instead using binary
        search (up to a fixed number of iterations) to converge on this largest size that avoids exceeding the target
        height. See below for more details.

        Test: fast/images/text-recognition/image-overlay-blocks.html

        * dom/ImageOverlay.cpp:
        (WebCore::ImageOverlay::updateWithTextRecognitionResult):

        Implement the main logic of the binary search. Establish a goal of ending up with text that fills at least 90%
        of the available space in the container (with a max of just slightly over 100%, so that we stop early if we
        happen to only barely exceed the target height). Then, starting with a font size that's 80% of the target
        height, converge on a font size between 0% and 100% of the target height that achieves this goal. In practice,
        most of the injected blocks of text will stop after a single iteration (due to the "80%-of-height" font size
        being sufficient to mostly fill available vertical space).

        Each FontSizeAdjustmentState here represents a single block container. At the beginning of each iteration, we
        ensure that layout is up to date, and set the font size to be between the current min and max value (scaling by
        target height to get font size). Using `linesBoundingBox()`, we compute the height of the rendered text relative
        to its parent (which we know a-priori to be as tall as the target height). If this height is at least 90% of the
        target height, we finish and remove the font size adjustment state from the vector of pending font adjustments;
        otherwise, we adjust the min and max to either increase or decrease the font size as needed, and continue the
        loop. We finally bail after an arbitrarily-chosen 10 iterations, if the text in the container is still too
        small.

        * testing/Internals.cpp:
        (WebCore::Internals::installImageOverlay):

        Augment this testing-only internals hook so that we can inject arbitrary image overlay block content inside
        image overlays.

        * testing/Internals.h:
        * testing/Internals.idl:

2021-11-29  Chris Dumez  <cdumez@apple.com>

        REGRESSION(r283855) [GTK][WPE] imported/w3c/web-platform-tests/webaudio/the-audio-api/the-pannernode-interface/panner-equalpower.html fails
        https://bugs.webkit.org/show_bug.cgi?id=233529

        Reviewed by Philippe Normand.

        The non-USE(ACCELERATE) implementation for VectorMath::multiplyByScalarThenAddToVector() was wrong, causing the test
        to fail on non Cocoa ports. The implementation was wrongly calling multiplyByScalarThenAddToOutput() instead of
        multiplyByScalar() before calling add().

        * platform/audio/VectorMath.cpp:
        (WebCore::VectorMath::multiplyByScalarThenAddToVector):

2021-11-29  Fujii Hironori  <Hironori.Fujii@sony.com>

        REGRESSION(r286205) [WinCairo] WebGL tests are failing
        https://bugs.webkit.org/show_bug.cgi?id=233589

        Unreviewed crash fix.

        EGL_BIND_TO_TEXTURE_TARGET_ANGLE isn't available for Windows.
        Restored the previous code.

        * platform/graphics/angle/GraphicsContextGLANGLE.cpp:
        (WebCore::GraphicsContextGLOpenGL::drawingBufferTextureTarget):
        Set m_drawingBufferTextureTarget to EGL_TEXTURE_2D for
        PLATFORM(WIN) instead of querying with EGL_BIND_TO_TEXTURE_TARGET_ANGLE.

2021-11-29  Chris Fleizach  <cfleizach@apple.com>

        AX: Unify speech synthesizer platform usage for Mac/iOS
        https://bugs.webkit.org/show_bug.cgi?id=231895
        <rdar://problem/84372479>

        Reviewed by Andres Gonzalez.

        AVSpeechSynthesizer has been fully supported on macOS for a number of years. This allows us to unify platform usage.
        Fix a number of tests that had been marked failing/flaky related to speech synthesis.

        * Modules/speech/SpeechSynthesis.cpp:
        (WebCore::SpeechSynthesis::SpeechSynthesis):
        (WebCore::SpeechSynthesis::startSpeakingImmediately):
        (WebCore::SpeechSynthesis::speak):
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * page/SpeechSynthesisClient.h:
        * platform/PlatformSpeechSynthesizer.h:
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::variationAxes):
        * platform/ios/PlatformSpeechSynthesizerIOS.mm: Removed.
        * platform/mac/PlatformSpeechSynthesizerMac.mm: Removed.
        * Source/WebCore/platform/cocoa/PlatformSpeechSynthesizerCocoa.mm: Added.

2021-11-29  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] REGRESSION(r281291): Text Style fonts don't have the correct weight set
        https://bugs.webkit.org/show_bug.cgi?id=233070

        Reviewed by Cameron McCormack.

        Text style fonts (like font: -apple-system-body) weren't having their weights detected correctly. When the
        bold-fonts accessibility setting is enabled, our detection logic was indicating that the fonts weren't
        bold when they actually were. This patch fixes the detection logic to use kCTFontCSSWeightAttribute
        instead.

        Test: platform/ios/ios/fast/text/opticalFontWithWeight.html

        * rendering/RenderThemeCocoa.mm:
        (WebCore::cssWeightOfSystemFont):

2021-11-24  Antoine Quint  <graouts@webkit.org>

        [Model] clean up compile-time flags and condition IDL methods behind them
        https://bugs.webkit.org/show_bug.cgi?id=233407

        Reviewed by Tim Horton.

        We condition the availability of IDL methods recently added to HTMLModelElement by
        the new set of ENABLE_MODEL_ELEMENT_XXX_CONTROL flags.

        * Modules/model-element/HTMLModelElement.cpp:
        * Modules/model-element/HTMLModelElement.h:
        * Modules/model-element/HTMLModelElement.idl:
        * Modules/model-element/ModelPlayer.h:
        * Modules/model-element/dummy/DummyModelPlayer.cpp:
        * Modules/model-element/dummy/DummyModelPlayer.h:
        * Modules/model-element/scenekit/SceneKitModelPlayer.h:
        * Modules/model-element/scenekit/SceneKitModelPlayer.mm:

2021-11-29  Antti Koivisto  <antti@apple.com>

        [:has() pseudo-class] id invalidation support
        https://bugs.webkit.org/show_bug.cgi?id=233557

        Reviewed by Simon Fraser.

        The existing invalidation code doesn't automatically cover id mutations for has since it doesn't use rulesets
        (because id mutations are rare and have not been worth optimizing).

        * style/ChildChangeInvalidation.cpp:
        (WebCore::Style::ChildChangeInvalidation::invalidateForChangedElement):

        Invalidate for ids.
        Only look for descendant matching :has rulesets for non-children.

        * style/IdChangeInvalidation.cpp:
        (WebCore::Style::IdChangeInvalidation::invalidateStyle):

        Invalidate with RuleSets.

        * style/RuleFeature.cpp:
        (WebCore::Style::RuleFeatureSet::recursivelyCollectFeaturesFromSelector):

        Collect ids for building rulesets for :has case only, similar to tags.

        (WebCore::Style::RuleFeatureSet::collectFeatures):
        (WebCore::Style::RuleFeatureSet::add):

        Use some lambdas to reduce copy code.

        (WebCore::Style::RuleFeatureSet::clear):
        (WebCore::Style::RuleFeatureSet::shrinkToFit):
        * style/RuleFeature.h:
        * style/StyleScopeRuleSets.cpp:
        (WebCore::Style::ScopeRuleSets::idInvalidationRuleSets const):
        * style/StyleScopeRuleSets.h:

2021-11-29  Simon Fraser  <simon.fraser@apple.com>

        Remove some unused event names
        https://bugs.webkit.org/show_bug.cgi?id=233485

        Reviewed by Sam Weinig.

        'webkitspeechchange' was added in r69100 and should have been removed in r172259.

        'webkitregionoversetchange' was added in r151777 and should have been removed in r222259.

        'webkitwillreveal*' were added in r163092 and should have been removed in r218651.

        * dom/EventNames.h:
        * html/HTMLAttributeNames.in:
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::createWindowEventHandlerNameMap):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::createEventHandlerNameMap):

2021-11-29  Michael Catanzaro  <mcatanzaro@gnome.org>

        [GTK] 2.33.1 tarball fails to build on i386
        https://bugs.webkit.org/show_bug.cgi?id=233564

        Unreviewed.

        * platform/graphics/SourceBufferPrivate.h:

2021-11-29  Andreu Botella  <andreu@andreubotella.com>

        Form payloads with text/plain enctype should have a final \r\n
        https://bugs.webkit.org/show_bug.cgi?id=220783

        Reviewed by Darin Adler.

        According to the HTML specification, the text/plain form enctype should not only have
        entries separated by a \r\n linebreak, but it should also have a final \r\n linebreak.
        Firefox and Chrome follow this, while WebKit skips the final linebreak for non-mailto form
        submissions. This change adds it in every case.

        Tests: imported/w3c/web-platform-tests/html/semantics/forms/form-submission-0/form-data-set-empty-file.window.html
               imported/w3c/web-platform-tests/html/semantics/forms/form-submission-0/submit-entity-body.html
               imported/w3c/web-platform-tests/html/semantics/forms/form-submission-0/text-plain.window.html
               http/tests/misc/form-post-textplain-cross-site.html
               http/tests/misc/form-post-textplain.html

        * platform/network/FormDataBuilder.cpp:
        (WebCore::FormDataBuilder::addKeyValuePairAsFormData): Changed to add a trailing newline.
        * loader/FormSubmission.cpp:
        (WebCore::appendMailtoPostFormDataToURL): Changed to remove the extra trailing newline that
        was added to text/plain mailto payloads.

2021-11-29  Rob Buis  <rbuis@igalia.com>

        Only handle ident tokens in consumeWillChange
        https://bugs.webkit.org/show_bug.cgi?id=233459

        Reviewed by Antti Koivisto.

        Only handle ident tokens in consumeWillChange.

        Test: fast/css/variables/will-change-variable-resolve-crash.html

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeWillChange):

2021-11-29  Youenn Fablet  <youenn@apple.com>

        Apply WebPreferences on ServiceWorker settings
        https://bugs.webkit.org/show_bug.cgi?id=233466

        Reviewed by Chris Dumez.

        Migrate WebLock flag to a page setting.
        Update ServiceWorkerThreadProxy to expose its method to create a service worker dummy page.
        Covered by existing web lock service worker tests.

        * Modules/web-locks/NavigatorLocks.idl:
        * Modules/web-locks/WebLock.idl:
        * Modules/web-locks/WebLockManager.idl:
        * page/RuntimeEnabledFeatures.h:
        * workers/service/context/ServiceWorkerThreadProxy.cpp:
        * workers/service/context/ServiceWorkerThreadProxy.h:

2021-11-29  Enrique Ocaña González  <eocanha@igalia.com>

        [GStreamer][WPE] Control on-disk multimedia buffering via the WPE_SHELL_DISABLE_MEDIA_DISK_CACHE environment variable
        https://bugs.webkit.org/show_bug.cgi?id=233492

        Reviewed by Xabier Rodriguez-Calvar.

        Embedded platforms often don't have a persistent storage suitable for repetitive writes (eg: caching
        media files may wear out a flash drive, and RAM memory is scarce enough to use a tmpfs for caching).
        Those platforms need a way to disable on-disk caching.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp: Honor environment variable.

2021-11-29  Kimmo Kinnunen  <kkinnunen@apple.com>

        GPUP GraphicsContextGL creation failure cannot be detected
        https://bugs.webkit.org/show_bug.cgi?id=233517

        Reviewed by Antti Koivisto.

        Before, concrete `GraphicsContextGL` instance was created with `GraphicsContextGL::create()`
        which would internally use host window as a factory if possible. If this produced null, it would
        create the "default" GraphicsContextGL subclass instance.
        With GPUP, it does not make sense to create "default" type, as that in-process contexts should never
        be used.
        It also does not make sense to create "default", as it's unclear what the "default" type is.
        Instead, use the host window, i.e. the chrome client, to always create the GraphicsContextGL instance
        to WebGL. If this fails, the WebGL should be unavailable.
        Remove GraphicsContextGL::create() as that is not useful. The callers should either
        explicitly specify what subclass to use, for example in testing, or use the polymorhpic factory
        (ChromeClient) which knows the policy.

        Fix a bug where GPUP WebGL would use in-process context if the lost context would be recreated.

        No new tests, a refactor.

        * PlatformMac.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::create):
        (WebCore::WebGLRenderingContextBase::maybeRestoreContext):
        * page/ChromeClient.h:
        (WebCore::ChromeClient::createGraphicsContextGL const):
        * platform/graphics/WebProcessGraphicsContextGL.h: Added.
        * platform/graphics/cocoa/WebProcessGraphicsContextGLCocoa.mm:
        (WebCore::createWebProcessGraphicsContextGL):
        (WebCore::GraphicsContextGLOpenGL::create): Deleted.
        * platform/graphics/opengl/GraphicsContextGLOpenGL.h:
        * platform/graphics/texmap/GraphicsContextGLTextureMapper.cpp:
        (WebCore::createWebProcessGraphicsContextGL):
        (WebCore::GraphicsContextGLOpenGL::create): Deleted.
        * platform/xr/openxr/PlatformXROpenXR.cpp:
        (PlatformXR::OpenXRDevice::initializeTrackingAndRendering):
        * testing/WebFakeXRDevice.cpp:
        (WebCore::SimulatedXRDevice::initializeTrackingAndRendering):

2021-10-27  Sergio Villar Senin  <svillar@igalia.com>

        [css-flexbox] Do not shrink tables bellow their intrinsic sizes
        https://bugs.webkit.org/show_bug.cgi?id=232383

        Reviewed by Manuel Rego Casasnovas.

        Flex layout algorithm uses the flex items min|max sizes to compute the hypothetical main size which
        will be used to clamp the size of the items when flexed. In the case of tables as flex items, we were
        using the min-size straight away whenever that was definite. However we cannot do that because tables
        must not shrink bellow their intrinsic sizes. That's why we should select the maximum of the intrinsic
        size and the min-size.

        This fixes a WPT test covering this case.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::computeFlexItemMinMaxSizes): Do not select a min-size smaller than the
        table intrinsic size in the main axis.

2021-10-27  Sergio Villar Senin  <svillar@igalia.com>

        [css-flexbox] Add support for replaced elements with intrinsic ratio and no intrinsic size
        https://bugs.webkit.org/show_bug.cgi?id=231952
        <rdar://problem/84662305>

        Reviewed by Manuel Rego Casasnovas.

        It might be the case that replaced elements have intrinsic aspect ratio but no
        intrinsic dimensions. Actually that's quite common for SVGs for example. We're
        incorrectly assuming that flex items with no intrinsic dimensions didn't have
        intrinsic aspect ratios which is wrong.

        Added new checks that are able to detect those cases were we have an intrinsic
        aspect ratio even though there are no intrinsic dimensions.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::isRenderReplacedWithIntrinsicAspectRatio):
        (WebCore::childHasAspectRatio):
        Consider replaced elements with intrinsic ratios and no intrinsic dimensions.
        (WebCore::RenderFlexibleBox::computeMainSizeFromAspectRatioUsing const):
        Let replaced elements compute the aspect ratio by themselves.
        (WebCore::RenderFlexibleBox::childHasComputableAspectRatio const):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::computeIntrinsicAspectRatio const): New method that
        computes the aspect ratio for replaced elements.
        * rendering/RenderReplaced.h:

2021-11-29  Kimmo Kinnunen  <kkinnunen@apple.com>

        GraphicsContextGLANGLE.cpp has platform specific code
        https://bugs.webkit.org/show_bug.cgi?id=233515

        Reviewed by Antti Koivisto.

        GraphicsContextGLANGLE.cpp has platform specific code for modifying
        the display buffer backing storage (IOSurface on Cocoa,
        normal texture on TextureMapper variants).
        This modification should be done through the reshapeDisplayBufferBacking
        method call for all implementations, so that in the future
        GraphicsContextGLOpenGL ANGLE variant can be renamed GraphicsContextGLANGLE
        and still invoke that functionality.

        No new tests, refactor.

        * platform/graphics/angle/GraphicsContextGLANGLE.cpp:
        (WebCore::GraphicsContextGLOpenGL::reshapeFBOs):
        (WebCore::GraphicsContextGLOpenGL::platformReleaseThreadResources): Deleted.
        * platform/graphics/cocoa/GraphicsContextGLCocoa.mm:
        (WebCore::GraphicsContextGLOpenGL::bindDisplayBufferBacking):
        * platform/graphics/opengl/GraphicsContextGLOpenGL.h:
        * platform/graphics/texmap/GraphicsContextGLTextureMapperANGLE.cpp: Added.
        (WebCore::GraphicsContextGLOpenGL::reshapeDisplayBufferBacking):
        (WebCore::GraphicsContextGLOpenGL::platformReleaseThreadResources):

2021-11-28  Said Abou-Hallawa  <said@apple.com>

        [GPU Process] Apply the filter to an ImageBuffer through GraphicsContext and ImageBuffer
        https://bugs.webkit.org/show_bug.cgi?id=232843

        Reviewed by Cameron McCormack.

        This step will allow sending the Filter to GPUProcess and applying it to
        a remote ImageBuffer.

        In this patch, managing the sourceImageBuffer of the CSSFilter is moved
        to RenderLayerFilters. This is similar to what RenderSVGResourceFilter 
        does by maintaining the sourceImage for the SVGFilter.

        * Headers.cmake:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSFilterImageValue.cpp:
        (WebCore::CSSFilterImageValue::image):
        * platform/graphics/ConcreteImageBuffer.h:
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawFilteredImageBuffer):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/ImageBuffer.h:
        * platform/graphics/filters/Filter.cpp: Added.
        (WebCore::Filter::Filter):
        (WebCore::Filter::apply):
        * platform/graphics/filters/Filter.h:
        (WebCore::Filter::renderingMode const):
        (WebCore::Filter::setRenderingMode):
        (WebCore::Filter::scaledByFilterScale const):
        (WebCore::Filter::Filter): Deleted.
        * platform/graphics/filters/FilterImage.h:
        * platform/graphics/filters/software/FETileSoftwareApplier.cpp:
        * platform/graphics/filters/software/SourceAlphaSoftwareApplier.cpp:
        * platform/graphics/filters/software/SourceGraphicSoftwareApplier.cpp:
        * rendering/CSSFilter.cpp:
        (WebCore::CSSFilter::apply):
        (WebCore::CSSFilter::setSourceImageRect):
        (WebCore::CSSFilter::inputContext): Deleted.
        (WebCore::CSSFilter::allocateBackingStoreIfNeeded): Deleted.
        (WebCore::CSSFilter::output): Deleted.
        (WebCore::CSSFilter::outputRect): Deleted.
        * rendering/CSSFilter.h:
        * rendering/RenderLayerFilters.cpp:
        (WebCore::RenderLayerFilters::inputContext):
        (WebCore::RenderLayerFilters::allocateBackingStore):
        (WebCore::RenderLayerFilters::beginFilterEffect):
        (WebCore::RenderLayerFilters::applyFilterEffect):
        * rendering/RenderLayerFilters.h:
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::postApplyResource):
        * svg/graphics/filters/SVGFilter.cpp:
        (WebCore::SVGFilter::apply):
        * svg/graphics/filters/SVGFilter.h:

2021-11-28  Matt Woodrow  <matt.woodrow@gmail.com>

        Serialize computed style of background shorthand with multiple layers correctly.
        https://bugs.webkit.org/show_bug.cgi?id=111121

        Reviewed by Cameron McCormack.

        New subtests added to getComputedStyle-background-shorthand

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::getBackgroundShorthandValue):

2021-11-28  Myles C. Maxfield  <mmaxfield@apple.com>

        [WebGPU] Add derived sources to Xcode project
        https://bugs.webkit.org/show_bug.cgi?id=233533

        Reviewed by Simon Fraser.

        This allows for things like searching within Xcode to work.

        No new tests because there is no behavior change.

        * WebCore.xcodeproj/project.pbxproj:

2021-11-28  Sam Weinig  <weinig@apple.com>

        [CSS Color 5] Update color-mix() to latest spec (again)
        https://bugs.webkit.org/show_bug.cgi?id=233527

        Reviewed by Dean Jackson.

        Updates color-mix() implementation with support for hue interpolation methods and
        addresses various other spec changes (detailed below).

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        Add ColorInterpolation.h/cpp

        * css/CSSValueKeywords.in:
        Add keywords need for the <color-space-interpolation> production. Separated out
        from color-mix as these will be used for other CSS properties as well.

        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::consumeHueInterpolationMethod):
        (WebCore::CSSPropertyParserHelpers::consumeColorInterpolationMethod):
        (WebCore::CSSPropertyParserHelpers::consumeColorMixComponent):
        (WebCore::CSSPropertyParserHelpers::normalizedMixPercentages):
        (WebCore::CSSPropertyParserHelpers::makeColorTypeByNormalizingComponentsAfterMix<HWBA<float>>):
        (WebCore::CSSPropertyParserHelpers::makeColorTypeByNormalizingComponentsAfterMix<HSLA<float>>):
        (WebCore::CSSPropertyParserHelpers::makeColorTypeByNormalizingComponentsAfterMix<LCHA<float>>):
        (WebCore::CSSPropertyParserHelpers::makeColorTypeByNormalizingComponentsAfterMix<OKLCHA<float>>):
        (WebCore::CSSPropertyParserHelpers::mixColorComponentsUsingColorInterpolationMethod):
        (WebCore::CSSPropertyParserHelpers::mixColorComponents):
        (WebCore::CSSPropertyParserHelpers::parseColorMixFunctionParameters):
        (WebCore::CSSPropertyParserHelpers::consumeColorMixColorSpaceAndComma): Deleted.
        (WebCore::CSSPropertyParserHelpers::fixupHueComponentsPriorToMix): Deleted.
        (WebCore::CSSPropertyParserHelpers::mixColorComponentsInColorSpace): Deleted.
        Rework color-mix to support the hue interpolation method specification for polor color spaces 
        like lch, oklch, hsl and hwb. Also update implementation to match the current spec by restricting
        mix percentages to between 0 and 100 and applying alpha multiplier when the mix percentages add
        up to less than 100.

        * platform/graphics/ColorInterpolation.cpp: Added.
        * platform/graphics/ColorInterpolation.h: Added.
        Add structures to represent color interpolation methods including optional hue
        interpolation parameters for color spaces that require it and provides prenormalization
        that fixes up hue angles depending on the method selected. Over time, more aspects of
        interpolation should be moved here as we figure out what can be shared.

2021-11-28  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Visual ordering may require multiple display box instances for a single inline box
        https://bugs.webkit.org/show_bug.cgi?id=233538

        Reviewed by Antti Koivisto.

        This patch implements the multiple display box setup for cases when the visually re-ordered content escapes
        the logical inline box boundaries.

            a<span>bg</span>f<span>ec</span>d -> "abgfecd"

        Introduce RTL/LTR overrides:

            a<span>b&#8238;g</span>f<span>e&#8237;c</span>d -> "abcdefg"

        current direction: left-to-right.
        take: 'a'
        take: 'b'
        take: RTL override (current direction: right-to-left, ie jump to the right end of the override content unless there's a nested override)
        take: (nested)LTR override (current direction: left-to-right, ie jump to the left end of the override content)
        take: 'c'
        take: 'd' (end of nested LTR override)
        take: 'e' (in RTL direction)
        take: 'f'
        take: 'g'

        By jumping between these bidi runs, we may end up going back and forth between various inline boxes.
        Each time we "leave" an inline box (e.g. going from 'b' to 'c'), we need to close the current inline box(es)
        and "open" new one(s) for the content.
        This patch implements the jumping logic but it does not yet compute geometry for each of these fragmented inline boxes.

        * layout/formattingContexts/inline/InlineDisplayContentBuilder.cpp:
        (WebCore::Layout::InlineDisplayContentBuilder::appendInlineBoxDisplayBox):
        (WebCore::Layout::InlineDisplayContentBuilder::appendSpanningInlineBoxDisplayBox):
        (WebCore::Layout::InlineDisplayContentBuilder::appendInlineBoxDisplayBoxForBidiBoundary):
        (WebCore::Layout::InlineDisplayContentBuilder::adjustInlineBoxDisplayBoxForBidiBoundary):
        (WebCore::Layout::InlineDisplayContentBuilder::processNonBidiContent): "Open" and "close" inline boxes based on the content
        and not based on the [inline box start]/[inline box end] runs (ie content where logical order == visual order can use those explicit markers to
        construct the associated display boxes but with re-ordering we need to rely on the content itself)

        (WebCore::Layout::InlineDisplayContentBuilder::processBidiContent):
        * layout/formattingContexts/inline/InlineDisplayContentBuilder.h:

2021-11-27  Said Abou-Hallawa  <said@apple.com>

        [GPU Process] Implement FilterEffect CoreImage appliers
        https://bugs.webkit.org/show_bug.cgi?id=232831

        Reviewed by Cameron McCormack.

        This will allow applying the CoreImage filters through FilterEffect::apply().
        It will also allow passing FilterImages to the FilterEffect CoreImage
        appliers. This will require adding a CIImage as a possible result to
        FilterImage.

        If the CoreImage filters are enabled, the Filter will check if all the 
        FilterEffects supports CoreImage rendering. And if one if them does not
        support it, the renderingMode will be switched to Unaccelerated.

        * Sources.txt:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/coreimage/FEColorMatrixCoreImageApplier.h: Copied from Source/WebCore/platform/graphics/filters/FilterEffectRenderer.cpp.
        * platform/graphics/coreimage/FEColorMatrixCoreImageApplier.mm: Added.
        (WebCore::FEColorMatrixCoreImageApplier::FEColorMatrixCoreImageApplier):
        (WebCore::FEColorMatrixCoreImageApplier::supportsCoreImageRendering):
        (WebCore::FEColorMatrixCoreImageApplier::apply const):
        * platform/graphics/coreimage/FEComponentTransferCoreImageApplier.h: Renamed from Source/WebCore/platform/graphics/filters/FilterEffectRenderer.h.
        * platform/graphics/coreimage/FEComponentTransferCoreImageApplier.mm: Added.
        (WebCore::FEComponentTransferCoreImageApplier::FEComponentTransferCoreImageApplier):
        (WebCore::FEComponentTransferCoreImageApplier::supportsCoreImageRendering):
        (WebCore::FEComponentTransferCoreImageApplier::apply const):
        * platform/graphics/coreimage/FilterEffectRendererCoreImage.h: Removed.
        * platform/graphics/coreimage/FilterEffectRendererCoreImage.mm: Removed.
        * platform/graphics/coreimage/FilterImageCoreImage.mm: Added.
        (WebCore::sharedCIContext):
        (WebCore::FilterImage::setCIImage):
        (WebCore::FilterImage::imageBufferFromCIImage):
        * platform/graphics/coreimage/SourceGraphicCoreImageApplier.h: Copied from Source/WebCore/platform/graphics/filters/FilterEffectRenderer.cpp.
        * platform/graphics/coreimage/SourceGraphicCoreImageApplier.mm: Renamed from Source/WebCore/platform/graphics/filters/FilterEffectRenderer.cpp.
        (WebCore::SourceGraphicCoreImageApplier::apply const):
        * platform/graphics/cv/CVUtilities.mm:
        * platform/graphics/filters/FEColorMatrix.cpp:
        (WebCore::FEColorMatrix::supportsCoreImageRendering const):
        (WebCore::FEColorMatrix::createApplier const):
        * platform/graphics/filters/FEColorMatrix.h:
        * platform/graphics/filters/FEComponentTransfer.cpp:
        (WebCore::FEComponentTransfer::supportsCoreImageRendering const):
        (WebCore::FEComponentTransfer::createApplier const):
        * platform/graphics/filters/FEComponentTransfer.h:
        * platform/graphics/filters/Filter.h:
        (WebCore::Filter::Filter):
        (): Deleted.
        * platform/graphics/filters/FilterFunction.h:
        (WebCore::FilterFunction::supportsCoreImageRendering const):
        * platform/graphics/filters/FilterImage.cpp:
        (WebCore::FilterImage::imageBuffer):
        (WebCore::FilterImage::imageBufferFromPixelBuffer):
        * platform/graphics/filters/FilterImage.h:
        (WebCore::FilterImage::ciImage const):
        * platform/graphics/filters/SourceGraphic.cpp:
        (WebCore::SourceGraphic::createApplier const):
        * platform/graphics/filters/SourceGraphic.h:
        * platform/mac/ScrollingEffectsController.mm:
        * rendering/CSSFilter.cpp:
        (WebCore::CSSFilter::create):
        (WebCore::CSSFilter::CSSFilter):
        (WebCore::createSVGFilter):
        (WebCore::CSSFilter::buildFilterFunctions):
        (WebCore::CSSFilter::allocateBackingStoreIfNeeded):
        (WebCore::CSSFilter::supportsCoreImageRendering const):
        (WebCore::CSSFilter::apply):
        (WebCore::CSSFilter::output):
        (WebCore::CSSFilter::outputRect):
        * rendering/CSSFilter.h:
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::applyResource):
        * rendering/svg/SVGRenderTreeAsText.cpp:
        (WebCore::writeSVGResourceContainer):
        * svg/graphics/filters/SVGFilter.cpp:
        (WebCore::SVGFilter::create):
        (WebCore::SVGFilter::SVGFilter):
        (WebCore::SVGFilter::supportsCoreImageRendering const):
        * svg/graphics/filters/SVGFilter.h:

2021-11-27  Sam Weinig  <weinig@apple.com>

        [CSS Color 4] Add support for oklab() and oklch() colors
        https://bugs.webkit.org/show_bug.cgi?id=233507

        Reviewed by Cameron McCormack.

        Tests: imported/w3c/web-platform-tests/css/css-color/oklab-001.html
               imported/w3c/web-platform-tests/css/css-color/oklab-002.html
               imported/w3c/web-platform-tests/css/css-color/oklab-003.html
               imported/w3c/web-platform-tests/css/css-color/oklab-004.html
               imported/w3c/web-platform-tests/css/css-color/oklab-005.html
               imported/w3c/web-platform-tests/css/css-color/oklab-006.html
               imported/w3c/web-platform-tests/css/css-color/oklab-007.html
               imported/w3c/web-platform-tests/css/css-color/oklab-008.html
               imported/w3c/web-platform-tests/css/css-color/oklch-001.html
               imported/w3c/web-platform-tests/css/css-color/oklch-002.html
               imported/w3c/web-platform-tests/css/css-color/oklch-003.html
               imported/w3c/web-platform-tests/css/css-color/oklch-004.html
               imported/w3c/web-platform-tests/css/css-color/oklch-005.html
               imported/w3c/web-platform-tests/css/css-color/oklch-006.html
               imported/w3c/web-platform-tests/css/css-color/oklch-007.html
               imported/w3c/web-platform-tests/css/css-color/oklch-008.html

        Adds support for oklab() and oklch() CSS colors and as interpolation
        parameters for color-mix().

        OKLab (and its polar form OKLCH) is a relatively new Lab-like colorspace that aims
        to be an improved (improved hue linearity, hue uniformity, and chroma uniformity)
        Lab. It was create by Björn Ottosson and is documented at https://bottosson.github.io/posts/oklab/.

        * css/CSSValueKeywords.in:
        Add 'oklab' and 'oklch' to the keyword list so they can be used as function
        identifiers. Remove old mention of 'lab' in the color() function section, 
        since 'lab' is no longer a valid colorspace to use in the color() function
        (rather, only lab() is supported).

        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::parseLabParameters):
        (WebCore::CSSPropertyParserHelpers::parseRelativeLabParameters):
        (WebCore::CSSPropertyParserHelpers::parseNonRelativeLabParameters):
        (WebCore::CSSPropertyParserHelpers::parseLCHParameters):
        (WebCore::CSSPropertyParserHelpers::parseRelativeLCHParameters):
        (WebCore::CSSPropertyParserHelpers::parseNonRelativeLCHParameters):
        (WebCore::CSSPropertyParserHelpers::parseColorFunction):
        Generalize lab and lch function parsing to also support the oklab and
        oklch variants (they have the same parsing rules).

        (WebCore::CSSPropertyParserHelpers::consumeColorMixColorSpaceAndComma):
        (WebCore::CSSPropertyParserHelpers::mixColorComponents):
        Add support for using oklab and oklch as the interpolation space of a color-mix().
        This was already generalized so all it meant doing was adding mappings of the
        new identifiers to enums and mixColorComponentsInColorSpace calls.

        * platform/graphics/ColorComponents.h:
        (WebCore::ColorComponents::subset const):
        Fix compile error (no one had used subset yet it seems). 'std::remove_const_t<decltype(T::Size)>'
        was likely copied from mapColorComponents() where it is templatized and needs to deduce the loop
        variable, but that is not needed here.

        * platform/graphics/ColorConversion.cpp:
        (WebCore::convertToPolarForm):
        (WebCore::convertToRectangularForm):
        Move conversion to/from polar/rectangular forms from the LCHA conversion
        code here, so that it can be reused for OKLCHA.

        (WebCore::OKLab<float>>::convert):
        Add support for converting OKLab to/from XYZ D65. Matrix values come from https://bottosson.github.io/posts/oklab/
        with updates from https://github.com/w3c/csswg-drafts/issues/6642#issuecomment-943521484

        (WebCore::OKLCHA<float>>::convert):
        Add support for converting OKLCHA. This is identical to the LCHA code above.

        (WebCore::converColorComponents):
        Add cases for new colorspaces.

        * platform/graphics/ColorConversion.h:
        Add converters for new colorspaces. Update diagram with them as well.

        * platform/graphics/ColorMatrix.h:
        (WebCore::ColorMatrix::transformedColorComponents const):
        Generalize transformedColorComponents to work with any size ColorComponents object. This allows
        the OKLab conversion code to be a bit simpler as it can operate on just the non-alpha components
        in a more systematic way.

        * platform/graphics/ColorModels.h:
        Add new predicate template variables to help when needing to check what model a particular
        color type uses.

        * platform/graphics/ColorSerialization.cpp:
        (WebCore::serialization):
        (WebCore::serializationForCSS):
        (WebCore::serializationForHTML):
        (WebCore::serializationForRenderTreeAsText):
        Add serialization support for new colorspaces. Also removes unused support for serializing lab
        colors using the color(lab ...) syntax which has not been supported for some time.

        * platform/graphics/ColorSpace.cpp:
        * platform/graphics/ColorSpace.h:
        * platform/graphics/cg/ColorSpaceCG.h:
        Add OKLab and OKLCH to the list of enumerated colorspaces and add mappings to their
        newly defined types OKLab<T> and OKLCHA<T>.

        * platform/graphics/ColorTypes.h:
        (WebCore::OKLab::OKLab):
        (WebCore::OKLCHA::OKLCHA):
        Add new types OKLab<T> and OKLCHA<T> (it looks like at some point an earlier version of this
        must have partially landed as there were existing forward declarations). Like Lab<T> and LCHA<T>,
        these new types use the LabModel<T> and LCHModel<T> models, but unlike them they use a whitepoint
        of D65.

        * platform/graphics/ColorUtilities.h:
        Generalize isBlack and isWhite to have a variant that works with Lab, LCH, OKLab and OKLCH (as they
        all are identical) using SFINAE, use the new model predicates to make this more clear.

2021-11-27  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Decouple display box construction for bidi and non-bidi content
        https://bugs.webkit.org/show_bug.cgi?id=233531

        Reviewed by Antti Koivisto.

        Having a common display box creation codepath for both bidi and non-bidi content worked out well this far
        but the upcoming inline box visual ordering will certainly make the common codepath unnecessarily confusing
        for the non-bidi case.
        In this patch the newly introduced append* functions manage the display box creation and
        their callers (processNonBidiContent/processBidiContent) deal with the visual ordering details.
        It means that the non-bidi codepath simply loops through the line runs and calls the append* functions,
        while the bidi codepath keeps track of the visual ordering and calls the append* functions accordingly.

        * layout/formattingContexts/inline/InlineDisplayContentBuilder.cpp:
        (WebCore::Layout::InlineDisplayContentBuilder::build):
        (WebCore::Layout::InlineDisplayContentBuilder::appendTextDisplayBox):
        (WebCore::Layout::InlineDisplayContentBuilder::appendSoftLineBreakDisplayBox):
        (WebCore::Layout::InlineDisplayContentBuilder::appendHardLineBreakDisplayBox):
        (WebCore::Layout::InlineDisplayContentBuilder::appendAtomicInlineLevelDisplayBox):
        (WebCore::Layout::InlineDisplayContentBuilder::appendInlineBoxDisplayBox):
        (WebCore::Layout::InlineDisplayContentBuilder::appendSpanningInlineBoxDisplayBox):
        (WebCore::Layout::InlineDisplayContentBuilder::processNonBidiContent):
        (WebCore::Layout::InlineDisplayContentBuilder::processBidiContent):
        (WebCore::Layout::InlineDisplayContentBuilder::processOverflownRunsForEllipsis):
        (WebCore::Layout::InlineDisplayContentBuilder::createBoxesAndUpdateGeometryForLineContent): Deleted.
        * layout/formattingContexts/inline/InlineDisplayContentBuilder.h:

2021-11-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][a11y] Signal state-changed:selected is not emitted for listbox elements when building with ATSPI
        https://bugs.webkit.org/show_bug.cgi?id=233521

        Reviewed by Adrian Perez de Castro.

        Post a selected change notification for option elements when the state changes.

        * accessibility/atspi/AXObjectCacheAtspi.cpp:
        (WebCore::AXObjectCache::postPlatformNotification):
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::setSelectedState):

2021-11-27  Antti Koivisto  <antti@apple.com>

        [:has() pseudo-class] Invalidation support for adding and removing elements
        https://bugs.webkit.org/show_bug.cgi?id=233489
        <rdar://problem/85754298>

        Unreviewed followup.

        Some unitialized bits caused us to do unnecessary work and regressed Speedometer.

        * style/RuleFeature.h:

        Initialize the usedMatchElements array.

2021-11-26  Sam Weinig  <weinig@apple.com>

        Typo in ColorConversion code: converColorComponents
        https://bugs.webkit.org/show_bug.cgi?id=233497

        Reviewed by Ryosuke Niwa.

        Fix typo in ColorConversion code. converColorComponents -> convertColorComponents

        * platform/graphics/Color.cpp:
        (WebCore::Color::toColorComponentsInColorSpace const):
        * platform/graphics/ColorConversion.cpp:
        (WebCore::convertColorComponents):
        (WebCore::converColorComponents): Deleted.
        * platform/graphics/ColorConversion.h:

2021-11-26  Said Abou-Hallawa  <said@apple.com>

        [GPU Process] Make FilterEffects create FilterEffectAppliers which will be used by FilterEffect::apply()
        https://bugs.webkit.org/show_bug.cgi?id=233516

        Reviewed by Cameron McCormack.

        This step is required to allow integrating CoreImage FilterEffect appliers
        in FilterEffect::apply(). Currently applying CoreImage FilterEffect has
        to go to a different code path in FilterEffectRendererCoreImage.

        * platform/graphics/filters/FEBlend.cpp:
        (WebCore::FEBlend::createApplier const):
        (WebCore::FEBlend::platformApplySoftware): Deleted.
        * platform/graphics/filters/FEBlend.h:
        * platform/graphics/filters/FEColorMatrix.cpp:
        (WebCore::FEColorMatrix::createApplier const):
        (WebCore::FEColorMatrix::platformApplySoftware): Deleted.
        * platform/graphics/filters/FEColorMatrix.h:
        * platform/graphics/filters/FEComponentTransfer.cpp:
        (WebCore::FEComponentTransfer::createApplier const):
        (WebCore::FEComponentTransfer::platformApplySoftware): Deleted.
        * platform/graphics/filters/FEComponentTransfer.h:
        * platform/graphics/filters/FEComposite.cpp:
        (WebCore::FEComposite::createApplier const):
        (WebCore::FEComposite::platformApplySoftware): Deleted.
        * platform/graphics/filters/FEComposite.h:
        * platform/graphics/filters/FEConvolveMatrix.cpp:
        (WebCore::FEConvolveMatrix::createApplier const):
        (WebCore::FEConvolveMatrix::platformApplySoftware): Deleted.
        * platform/graphics/filters/FEConvolveMatrix.h:
        * platform/graphics/filters/FEDisplacementMap.cpp:
        (WebCore::FEDisplacementMap::createApplier const):
        (WebCore::FEDisplacementMap::platformApplySoftware): Deleted.
        * platform/graphics/filters/FEDisplacementMap.h:
        * platform/graphics/filters/FEDropShadow.cpp:
        (WebCore::FEDropShadow::createApplier const):
        (WebCore::FEDropShadow::platformApplySoftware): Deleted.
        * platform/graphics/filters/FEDropShadow.h:
        * platform/graphics/filters/FEFlood.cpp:
        (WebCore::FEFlood::createApplier const):
        (WebCore::FEFlood::platformApplySoftware): Deleted.
        * platform/graphics/filters/FEFlood.h:
        * platform/graphics/filters/FEGaussianBlur.cpp:
        (WebCore::FEGaussianBlur::createApplier const):
        (WebCore::FEGaussianBlur::platformApplySoftware): Deleted.
        * platform/graphics/filters/FEGaussianBlur.h:
        * platform/graphics/filters/FELighting.cpp:
        (WebCore::FELighting::createApplier const):
        (WebCore::FELighting::platformApplySoftware): Deleted.
        * platform/graphics/filters/FELighting.h:
        * platform/graphics/filters/FEMerge.cpp:
        (WebCore::FEMerge::createApplier const):
        (WebCore::FEMerge::platformApplySoftware): Deleted.
        * platform/graphics/filters/FEMerge.h:
        * platform/graphics/filters/FEMorphology.cpp:
        (WebCore::FEMorphology::createApplier const):
        (WebCore::FEMorphology::platformApplySoftware): Deleted.
        * platform/graphics/filters/FEMorphology.h:
        * platform/graphics/filters/FEOffset.cpp:
        (WebCore::FEOffset::createApplier const):
        (WebCore::FEOffset::platformApplySoftware): Deleted.
        * platform/graphics/filters/FEOffset.h:
        * platform/graphics/filters/FETile.cpp:
        (WebCore::FETile::createApplier const):
        (WebCore::FETile::platformApplySoftware): Deleted.
        * platform/graphics/filters/FETile.h:
        * platform/graphics/filters/FETurbulence.cpp:
        (WebCore::FETurbulence::createApplier const):
        (WebCore::FETurbulence::platformApplySoftware): Deleted.
        * platform/graphics/filters/FETurbulence.h:
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::apply):
        * platform/graphics/filters/FilterEffect.h:
        * platform/graphics/filters/FilterEffectApplier.h:
        (WebCore::FilterEffectApplier::create):
        (WebCore::FilterEffectConcreteApplier::FilterEffectConcreteApplier):
        * platform/graphics/filters/SourceAlpha.cpp:
        (WebCore::SourceAlpha::createApplier const):
        (WebCore::SourceAlpha::platformApplySoftware): Deleted.
        * platform/graphics/filters/SourceAlpha.h:
        * platform/graphics/filters/SourceGraphic.cpp:
        (WebCore::SourceGraphic::createApplier const):
        (WebCore::SourceGraphic::platformApplySoftware): Deleted.
        * platform/graphics/filters/SourceGraphic.h:
        * platform/graphics/filters/software/FEBlendSoftwareApplier.cpp:
        (WebCore::FEBlendSoftwareApplier::apply const):
        (WebCore::FEBlendSoftwareApplier::apply): Deleted.
        * platform/graphics/filters/software/FEBlendSoftwareApplier.h:
        * platform/graphics/filters/software/FEColorMatrixSoftwareApplier.cpp:
        (WebCore::FEColorMatrixSoftwareApplier::FEColorMatrixSoftwareApplier):
        (WebCore::FEColorMatrixSoftwareApplier::apply const):
        (WebCore::FEColorMatrixSoftwareApplier::apply): Deleted.
        * platform/graphics/filters/software/FEColorMatrixSoftwareApplier.h:
        * platform/graphics/filters/software/FEComponentTransferSoftwareApplier.cpp:
        (WebCore::FEComponentTransferSoftwareApplier::apply const):
        (WebCore::FEComponentTransferSoftwareApplier::apply): Deleted.
        * platform/graphics/filters/software/FEComponentTransferSoftwareApplier.h:
        * platform/graphics/filters/software/FECompositeSoftwareApplier.cpp:
        (WebCore::FECompositeSoftwareApplier::applyArithmetic const):
        (WebCore::FECompositeSoftwareApplier::applyNonArithmetic const):
        (WebCore::FECompositeSoftwareApplier::apply const):
        (WebCore::FECompositeSoftwareApplier::applyArithmetic): Deleted.
        (WebCore::FECompositeSoftwareApplier::applyNonArithmetic): Deleted.
        (WebCore::FECompositeSoftwareApplier::apply): Deleted.
        * platform/graphics/filters/software/FECompositeSoftwareApplier.h:
        * platform/graphics/filters/software/FEConvolveMatrixSoftwareApplier.cpp:
        (WebCore::FEConvolveMatrixSoftwareApplier::apply const):
        (WebCore::FEConvolveMatrixSoftwareApplier::apply): Deleted.
        * platform/graphics/filters/software/FEConvolveMatrixSoftwareApplier.h:
        * platform/graphics/filters/software/FEDisplacementMapSoftwareApplier.cpp:
        (WebCore::FEDisplacementMapSoftwareApplier::FEDisplacementMapSoftwareApplier):
        (WebCore::FEDisplacementMapSoftwareApplier::apply const):
        (WebCore::FEDisplacementMapSoftwareApplier::apply): Deleted.
        * platform/graphics/filters/software/FEDisplacementMapSoftwareApplier.h:
        * platform/graphics/filters/software/FEDropShadowSoftwareApplier.cpp:
        (WebCore::FEDropShadowSoftwareApplier::apply const):
        (WebCore::FEDropShadowSoftwareApplier::apply): Deleted.
        * platform/graphics/filters/software/FEDropShadowSoftwareApplier.h:
        * platform/graphics/filters/software/FEFloodSoftwareApplier.cpp:
        (WebCore::FEFloodSoftwareApplier::apply const):
        (WebCore::FEFloodSoftwareApplier::apply): Deleted.
        * platform/graphics/filters/software/FEFloodSoftwareApplier.h:
        * platform/graphics/filters/software/FEGaussianBlurSoftwareApplier.cpp:
        (WebCore::FEGaussianBlurSoftwareApplier::apply const):
        (WebCore::FEGaussianBlurSoftwareApplier::apply): Deleted.
        * platform/graphics/filters/software/FEGaussianBlurSoftwareApplier.h:
        * platform/graphics/filters/software/FELightingSoftwareApplier.cpp:
        (WebCore::FELightingSoftwareApplier::apply const):
        (WebCore::FELightingSoftwareApplier::apply): Deleted.
        * platform/graphics/filters/software/FELightingSoftwareApplier.h:
        * platform/graphics/filters/software/FEMergeSoftwareApplier.cpp:
        (WebCore::FEMergeSoftwareApplier::apply const):
        (WebCore::FEMergeSoftwareApplier::apply): Deleted.
        * platform/graphics/filters/software/FEMergeSoftwareApplier.h:
        * platform/graphics/filters/software/FEMorphologySoftwareApplier.cpp:
        (WebCore::FEMorphologySoftwareApplier::apply const):
        (WebCore::FEMorphologySoftwareApplier::apply): Deleted.
        * platform/graphics/filters/software/FEMorphologySoftwareApplier.h:
        * platform/graphics/filters/software/FEOffsetSoftwareApplier.cpp:
        (WebCore::FEOffsetSoftwareApplier::apply const):
        (WebCore::FEOffsetSoftwareApplier::apply): Deleted.
        * platform/graphics/filters/software/FEOffsetSoftwareApplier.h:
        * platform/graphics/filters/software/FETileSoftwareApplier.cpp:
        (WebCore::FETileSoftwareApplier::apply const):
        (WebCore::FETileSoftwareApplier::apply): Deleted.
        * platform/graphics/filters/software/FETileSoftwareApplier.h:
        * platform/graphics/filters/software/FETurbulenceSoftwareApplier.cpp:
        (WebCore::FETurbulenceSoftwareApplier::apply const):
        (WebCore::FETurbulenceSoftwareApplier::apply): Deleted.
        * platform/graphics/filters/software/FETurbulenceSoftwareApplier.h:
        * platform/graphics/filters/software/SourceAlphaSoftwareApplier.cpp:
        (WebCore::SourceAlphaSoftwareApplier::apply const):
        (WebCore::SourceAlphaSoftwareApplier::apply): Deleted.
        * platform/graphics/filters/software/SourceAlphaSoftwareApplier.h:
        * platform/graphics/filters/software/SourceGraphicSoftwareApplier.cpp:
        (WebCore::SourceGraphicSoftwareApplier::apply const):
        (WebCore::SourceGraphicSoftwareApplier::apply): Deleted.
        * platform/graphics/filters/software/SourceGraphicSoftwareApplier.h:
        * svg/graphics/filters/SVGFEImage.cpp:
        (WebCore::FEImageSoftwareApplier::apply const):
        (WebCore::FEImage::createApplier const):
        (WebCore::FEImageSoftwareApplier::apply): Deleted.
        (WebCore::FEImage::platformApplySoftware): Deleted.
        * svg/graphics/filters/SVGFEImage.h:

2021-11-26  Adrian Perez de Castro  <aperez@igalia.com>

        Unreviewed non-unified build fix.

        No new tests needed.

        * css/SelectorChecker.cpp: Add missin StyleRule.h header inclusion.

2021-11-26  Antti Koivisto  <antti@apple.com>

        [:has() pseudo-class] Don't traverse descendants during selector matching unless needed
        https://bugs.webkit.org/show_bug.cgi?id=233520

        Reviewed by Alan Bujtas.

        It is sufficient to traverse direct children to match something like :has(> foo).

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne const):
        (WebCore::SelectorChecker::matchHasPseudoClass const):

        Factor into a function.
        Compute the match element for the :has() argument and use it to choose what to traverse.

        * css/SelectorChecker.h:
        * style/RuleFeature.cpp:
        (WebCore::Style::computeNextMatchElement):
        (WebCore::Style::computeHasPseudoClassMatchElement):
        (WebCore::Style::computeSubSelectorMatchElement):

        Make these free-standing functions and expose computeHasPseudoClassMatchElement.

        (WebCore::Style::RuleFeatureSet::computeNextMatchElement): Deleted.
        (WebCore::Style::RuleFeatureSet::computeSubSelectorMatchElement): Deleted.
        * style/RuleFeature.h:

2021-11-26  Antti Koivisto  <antti@apple.com>

        REGRESSION(r286112): Style invalidation for text mutation happening after event dispatch
        https://bugs.webkit.org/show_bug.cgi?id=233501
        <rdar://problem/85754810>

        Reviewed by Alan Bujtas.

        Test: fast/events/mutation-in-DOMCharacterDataModified.html

        * dom/CharacterData.cpp:
        (WebCore::CharacterData::setDataAndUpdate):

        Scope ChildChangeInvalidation more narrowly.

2021-11-26  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Generate ellipsis boxes for tex-overflow: ellipsis
        https://bugs.webkit.org/show_bug.cgi?id=233508

        Reviewed by Antti Koivisto.

        1. Check for overflowing inline content
        2. Truncate runs to make room for the ellipsis content
        (https://drafts.csswg.org/css-overflow/#text-overflow)

        * layout/formattingContexts/inline/InlineDisplayContentBuilder.cpp:
        (WebCore::Layout::InlineDisplayContentBuilder::build):
        (WebCore::Layout::InlineDisplayContentBuilder::processOverflownRunsForEllipsis):
        * layout/formattingContexts/inline/InlineDisplayContentBuilder.h:
        * layout/formattingContexts/inline/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::computeGeometryForLineContent):
        * layout/formattingContexts/inline/InlineRect.h:
        (WebCore::Layout::InlineRect::setRight):
        * layout/formattingContexts/inline/display/InlineDisplayBox.h:
        (WebCore::InlineDisplay::Box::isEllipsis const):
        (WebCore::InlineDisplay::Box::moveHorizontally):
        (WebCore::InlineDisplay::Box::truncate):
        * layout/formattingContexts/inline/text/TextUtil.cpp:
        (WebCore::Layout::TextUtil::breakWord):
        * layout/formattingContexts/inline/text/TextUtil.h:

2021-11-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][a11y] MenuListPopup elements should implement selection interface too when building with ATSPI
        https://bugs.webkit.org/show_bug.cgi?id=233519

        Reviewed by Adrian Perez de Castro.

        Add an implementation of canHaveSelectedChildren() to AccessibilityMenuListPopup that returns true for
        ATSPI. Also implement selectedChildren() which is enough to share the same selection interface implementation
        with list box elements. This is consistent with chromium.

        * accessibility/AccessibilityMenuListPopup.cpp:
        (WebCore::AccessibilityMenuListPopup::canHaveSelectedChildren const):
        (WebCore::AccessibilityMenuListPopup::selectedChildren):
        * accessibility/AccessibilityMenuListPopup.h:
        * accessibility/atspi/AXObjectCacheAtspi.cpp:
        (WebCore::AXObjectCache::postPlatformNotification):

2021-11-26  Adrian Perez de Castro  <aperez@igalia.com>

        Non-unified build fixes, late November 2021 edition
        https://bugs.webkit.org/show_bug.cgi?id=233493

        Unreviewed non-unified build fixes.

        No new tests needed.

        * Modules/mediastream/RTCDataChannelRemoteHandler.cpp: Add missing ProcessQualified.h and
        ScriptExecutionContextIdentifier.h headers.
        * Modules/mediastream/RTCDataChannelRemoteSource.cpp: Ditto.
        * contentextensions/ContentExtensionActions.cpp: Add missing ResourceRequest.h header.
        * platform/graphics/filters/FilterImage.h: Add missing forward declarations for the Filter
        and FloatRect types.
        * platform/graphics/filters/software/FEColorMatrixSoftwareApplier.h: Add missing forward
        declaration for the PixelBuffer type.
        * platform/graphics/filters/software/FEComponentTransferSoftwareApplier.h: Ditto.
        * platform/graphics/filters/software/FEConvolveMatrixSoftwareApplier.h: Add missing
        IntPoint.h, IntSize.h, and JavaScriptCore/TypedArrayAdaptersForwardDeclarations.h headers.
        * platform/graphics/filters/software/FEGaussianBlurSoftwareApplier.h: Add missing
        IntSize.h header.
        * platform/graphics/filters/software/FELightingSoftwareApplier.h: Add missing
        FilterEffect.h and FilterImageVector.h headers.

2021-11-26  Kimmo Kinnunen  <kkinnunen@apple.com>

        GraphicsContextGLOpenGL.cpp contains OpenGL implementation specific and platform specific code
        https://bugs.webkit.org/show_bug.cgi?id=233513

        Reviewed by Antti Koivisto.

        Move duplicate functionality of "context changed, context not changed" from
          - GraphicsContextGLOpenGL ANGLE variant
          - GraphicsContextGLOpenGL OpenGL, OpenGL ES variant
          - RemoteGraphicsContextGLProxyBase
        to base class GraphicsContextGL. In order to do this, add few WEBCORE_EXPORTs to
        GraphicsContextGL.h, since RemoteGraphicsContextGLProxyBase is in WebKit and needs to call
        the base-class versions as well as use vtable.

        Move ANGLE-specific functions from GraphicsContextGLOpenGL.cpp to GraphicsContextGLANGLE.cpp.
        Move TextureMapper-specific functions from GraphicsContextGLOpenGL.cpp to GraphicsContextGLTextureMapper.cpp.
        Move OpenGL, OpenGL ES specific functions from GraphicsContextGLOpenGL.cpp to GraphicsContextGLOpenGLCommon.cpp.

        This works towards being able to separate ANGLE and OpenGL, OpenGL ES implementations to different classes,
        reducing the ifdeffing in GraphicsContextGLOpenGL.h.

        No new tests, refactor.

        * platform/graphics/GraphicsContextGL.cpp:
        (WebCore::GraphicsContextGL::markContextChanged):
        (WebCore::GraphicsContextGL::layerComposited const):
        (WebCore::GraphicsContextGL::setBuffersToAutoClear):
        (WebCore::GraphicsContextGL::getBuffersToAutoClear const):
        (WebCore::GraphicsContextGL::markLayerComposited):
        * platform/graphics/GraphicsContextGL.h:
        (WebCore::GraphicsContextGL::Client::~Client): Deleted.
        * platform/graphics/RemoteGraphicsContextGLProxyBase.cpp:
        (WebCore::RemoteGraphicsContextGLProxyBase::markContextChanged):
        (WebCore::RemoteGraphicsContextGLProxyBase::markLayerComposited): Deleted.
        (WebCore::RemoteGraphicsContextGLProxyBase::layerComposited const): Deleted.
        (WebCore::RemoteGraphicsContextGLProxyBase::setBuffersToAutoClear): Deleted.
        (WebCore::RemoteGraphicsContextGLProxyBase::getBuffersToAutoClear const): Deleted.
        * platform/graphics/RemoteGraphicsContextGLProxyBase.h:
        * platform/graphics/angle/GraphicsContextGLANGLE.cpp:
        (WebCore::GraphicsContextGLOpenGL::markContextChanged): Deleted.
        (WebCore::GraphicsContextGLOpenGL::markLayerComposited): Deleted.
        (WebCore::GraphicsContextGLOpenGL::layerComposited const): Deleted.
        * platform/graphics/cocoa/GraphicsContextGLCocoa.h:
        * platform/graphics/cocoa/GraphicsContextGLCocoa.mm:
        (WebCore::GraphicsContextGLCocoa::copyTextureFromMedia):
        * platform/graphics/opengl/GraphicsContextGLOpenGL.cpp:
        (WebCore::GraphicsContextGLOpenGL::resetBuffersToAutoClear): Deleted.
        (WebCore::GraphicsContextGLOpenGL::setBuffersToAutoClear): Deleted.
        (WebCore::GraphicsContextGLOpenGL::getBuffersToAutoClear const): Deleted.
        (WebCore::GraphicsContextGLOpenGL::releaseThreadResources): Deleted.
        (WebCore::GraphicsContextGLOpenGL::platformReleaseThreadResources): Deleted.
        (WebCore::GraphicsContextGLOpenGL::texImage2DResourceSafe): Deleted.
        (WebCore::GraphicsContextGLOpenGL::setContextVisibility): Deleted.
        (WebCore::GraphicsContextGLOpenGL::simulateEventForTesting): Deleted.
        (WebCore::GraphicsContextGLOpenGL::prepareForDisplay): Deleted.
        (WebCore::GraphicsContextGLOpenGL::paintCompositedResultsToMediaSample): Deleted.
        (WebCore::GraphicsContextGLOpenGL::readCompositedResults): Deleted.
        (WebCore::GraphicsContextGLOpenGL::copyTextureFromMedia): Deleted.
        * platform/graphics/opengl/GraphicsContextGLOpenGL.h:
        * platform/graphics/opengl/GraphicsContextGLOpenGLCommon.cpp:
        (WebCore::GraphicsContextGLOpenGL::texImage2DResourceSafe):
        (WebCore::GraphicsContextGLOpenGL::markContextChanged): Deleted.
        (WebCore::GraphicsContextGLOpenGL::markLayerComposited): Deleted.
        (WebCore::GraphicsContextGLOpenGL::layerComposited const): Deleted.
        * platform/graphics/texmap/GraphicsContextGLTextureMapper.cpp:
        (WebCore::GraphicsContextGLOpenGL::setContextVisibility):
        (WebCore::GraphicsContextGLOpenGL::simulateEventForTesting):
        (WebCore::GraphicsContextGLOpenGL::prepareForDisplay):
        (WebCore::GraphicsContextGLOpenGL::paintCompositedResultsToMediaSample):
        (WebCore::GraphicsContextGLOpenGL::readCompositedResults):
        (WebCore::GraphicsContextGLTextureMapper::copyTextureFromMedia):
        * platform/graphics/texmap/GraphicsContextGLTextureMapper.h:

2021-11-26  Tim Nguyen  <ntim@apple.com>

        Update dialog focusing steps inert/disconnected handling
        https://bugs.webkit.org/show_bug.cgi?id=233514

        Reviewed by Antti Koivisto.

        After discussing with Domenic Denicola, we resolved on stopping early return in case of inert `<dialog>`,
        and disconnected `<dialog>` will just do nothing at the "focus the control" step.

        The focus fixup rule still applies, meaning the focus is still moved to the viewport in case of modal `<dialog>`,
        given everything else is non-focusable.

        https://github.com/whatwg/html/commit/08b4033db249ea0c63fd35f4e8fa06e85ec20a6f

        https://html.spec.whatwg.org/multipage/interaction.html#focus-fixup-rule

        * html/HTMLDialogElement.cpp:
        (WebCore::HTMLDialogElement::runFocusingSteps):

2021-11-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][a11y] Add implementation of selection interface when building with ATSPI
        https://bugs.webkit.org/show_bug.cgi?id=233494

        Reviewed by Adrian Perez de Castro.

        * SourcesGTK.txt:
        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::deferSelectedChildrenChangedIfNeeded):
        * accessibility/atspi/AXObjectCacheAtspi.cpp:
        (WebCore::AXObjectCache::postPlatformNotification):
        * accessibility/atspi/AccessibilityAtspi.cpp:
        (WebCore::AccessibilityAtspi::selectionChanged):
        * accessibility/atspi/AccessibilityAtspi.h:
        * accessibility/atspi/AccessibilityObjectAtspi.cpp:
        (WebCore::AccessibilityObjectAtspi::interfacesForObject):
        (WebCore::AccessibilityObjectAtspi::path):
        (WebCore::AccessibilityObjectAtspi::name const):
        (WebCore::AccessibilityObjectAtspi::buildInterfaces const):
        * accessibility/atspi/AccessibilityObjectAtspi.h:
        * accessibility/atspi/AccessibilityObjectSelectionAtspi.cpp: Added.
        (WebCore::AccessibilityObjectAtspi::selectionCount const):
        (WebCore::AccessibilityObjectAtspi::selectedChild const):
        (WebCore::AccessibilityObjectAtspi::setChildSelected const):
        (WebCore::AccessibilityObjectAtspi::deselectSelectedChild const):
        (WebCore::AccessibilityObjectAtspi::isChildSelected const):
        (WebCore::AccessibilityObjectAtspi::selectAll const):
        (WebCore::AccessibilityObjectAtspi::clearSelection const):
        (WebCore::AccessibilityObjectAtspi::selectionChanged):

2021-11-25  Said Abou-Hallawa  <said@apple.com>

        [GPU Process] Move FilterEffect relative absolutePaintRect calculation to FilterImage
        https://bugs.webkit.org/show_bug.cgi?id=233510

        Reviewed by Cameron McCormack.

        drawingRegionOfInputImage() and requestedRegionOfInputPixelBuffer() will
        be removed from FilterEffect and will be replaced by FilterImage::
        absoluteImageRectRelativeTo(). Both of the removed function were just
        getting the absolutePaintRect of a FilterEffect relative to a specified
        FilterImage. Also there is o need for scaling because of clamping since 
        the areas of all FilterImages have to be less than MaxClampedArea.

        * platform/graphics/filters/Filter.h:
        (WebCore::Filter::maxEffectRect const): Deleted.
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::requestedRegionOfInputPixelBuffer const): Deleted.
        (WebCore::FilterEffect::drawingRegionOfInputImage const): Deleted.
        * platform/graphics/filters/FilterEffect.h:
        * platform/graphics/filters/FilterImage.cpp:
        (WebCore::FilterImage::maxEffectRect const):
        (WebCore::FilterImage::absoluteImageRectRelativeTo const):
        * platform/graphics/filters/FilterImage.h:
        * platform/graphics/filters/software/FEBlendSoftwareApplier.cpp:
        (WebCore::FEBlendSoftwareApplier::apply):
        * platform/graphics/filters/software/FEColorMatrixSoftwareApplier.cpp:
        (WebCore::FEColorMatrixSoftwareApplier::apply):
        * platform/graphics/filters/software/FEComponentTransferSoftwareApplier.cpp:
        (WebCore::FEComponentTransferSoftwareApplier::apply):
        * platform/graphics/filters/software/FECompositeSoftwareApplier.cpp:
        (WebCore::FECompositeSoftwareApplier::applyArithmetic):
        (WebCore::FECompositeSoftwareApplier::applyNonArithmetic):
        * platform/graphics/filters/software/FEConvolveMatrixSoftwareApplier.cpp:
        (WebCore::FEConvolveMatrixSoftwareApplier::apply):
        * platform/graphics/filters/software/FEDisplacementMapSoftwareApplier.cpp:
        (WebCore::FEDisplacementMapSoftwareApplier::apply):
        * platform/graphics/filters/software/FEDropShadowSoftwareApplier.cpp:
        (WebCore::FEDropShadowSoftwareApplier::apply):
        * platform/graphics/filters/software/FEGaussianBlurSoftwareApplier.cpp:
        (WebCore::FEGaussianBlurSoftwareApplier::apply):
        * platform/graphics/filters/software/FELightingSoftwareApplier.cpp:
        (WebCore::FELightingSoftwareApplier::apply):
        * platform/graphics/filters/software/FEMergeSoftwareApplier.cpp:
        (WebCore::FEMergeSoftwareApplier::apply):
        * platform/graphics/filters/software/FEMorphologySoftwareApplier.cpp:
        (WebCore::FEMorphologySoftwareApplier::apply):
        * platform/graphics/filters/software/FEOffsetSoftwareApplier.cpp:
        (WebCore::FEOffsetSoftwareApplier::apply):
        * platform/graphics/filters/software/FETileSoftwareApplier.cpp:
        (WebCore::FETileSoftwareApplier::apply):
        * rendering/CSSFilter.cpp:
        (WebCore::CSSFilter::outputRect):
        * svg/graphics/filters/SVGFEImage.cpp:
        (WebCore::FEImageSoftwareApplier::apply):

2021-11-25  Jean-Yves Avenard  <jya@apple.com>

        Avoid flattening a SharedBuffer when reading reading it through SharedBufferChunkReader.
        https://bugs.webkit.org/show_bug.cgi?id=233481
        rdar://problem/85733358

        Reviewed by Cameron McCormack

        SharedBufferChunkReader required the SharedBuffer to be flattened which
        would mutate the underlying SharedBuffer.
        The peek method was also incorrect if the data read overlapped multiple
        segments (it would return too many characters) and some members were used
        without being initialised.

        Additionally, add a similar read method in SharedBuffer that will be used
        in bug 233030.

        Covered in existing tests, API tests added.

        * Headers.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::getSomeData const):
        (WebCore::SharedBuffer::getSegmentForPosition const):
        (WebCore::SharedBuffer::read const):
        * platform/SharedBuffer.h:
        * platform/SharedBufferChunkReader.cpp:
        (WebCore::SharedBufferChunkReader::SharedBufferChunkReader):
        (WebCore::SharedBufferChunkReader::nextChunk):
        (WebCore::SharedBufferChunkReader::peek):
        * platform/SharedBufferChunkReader.h:

2021-11-25  Antti Koivisto  <antti@apple.com>

        [:has() pseudo-class] Invalidation support for adding and removing nodes
        https://bugs.webkit.org/show_bug.cgi?id=233489

        Reviewed by Alan Bujtas.

        We need to invalidate style when added or removed elements match :has() arguments.

        This patch adds tag name invalidation rulesets for :has() case, along with the existing class
        and attribute rulesets. It is still missing support for #id invalidation.

        * style/ChildChangeInvalidation.cpp:
        (WebCore::Style::ChildChangeInvalidation::ChildChangeInvalidation):

        See if we need to invalidate for the elements being removed before the mutation.

        (WebCore::Style::ChildChangeInvalidation::~ChildChangeInvalidation):

        See if we need to invalidate for the elements being added after the mutation.

        (WebCore::Style::ChildChangeInvalidation::invalidateForChangedElement):

        Find the relevant invalidation rulesets for attributes, classes and tags and invalidate using them.

        (WebCore::Style::needsTraversal):

        We only need to do anything in the presence of :has() rules.

        (WebCore::Style::needsDescendantTraversal):

        Full traversal is only needed in case there are :has() rules using descendant combinator.

        (WebCore::Style::ChildChangeInvalidation::traverseRemovedElements):
        (WebCore::Style::ChildChangeInvalidation::traverseAddedElements):
        * style/ChildChangeInvalidation.h:
        * style/RuleFeature.cpp:
        (WebCore::Style::isHasPseudoClassMatchElement):
        (WebCore::Style::RuleFeatureSet::recursivelyCollectFeaturesFromSelector):
        (WebCore::Style::RuleFeatureSet::collectFeatures):

        Collect tag invalidation rulesets for :has case only.

        (WebCore::Style::RuleFeatureSet::add):
        (WebCore::Style::RuleFeatureSet::clear):
        (WebCore::Style::RuleFeatureSet::shrinkToFit):
        * style/RuleFeature.h:
        (WebCore::Style::RuleFeatureSet::usesMatchElement const):
        (WebCore::Style::RuleFeatureSet::setUsesMatchElement):

        Keep track of what sort of match elements are being used.

        * style/StyleScopeRuleSets.cpp:
        (WebCore::Style::ScopeRuleSets::collectFeatures const):
        (WebCore::Style::ScopeRuleSets::tagInvalidationRuleSets const):
        * style/StyleScopeRuleSets.h:

2021-11-25  Sam Weinig  <weinig@apple.com>

        [CSS Color 4] Add support for new srgb-linear, xyz-d50 and xyz-d65 colorspaces
        https://bugs.webkit.org/show_bug.cgi?id=233475

        Reviewed by Dean Jackson.

        Updates existing tests to add cases for the new colorspaces.

        - Adds support for color(srgb-linear ...), color(xyz-d50 ...) and color(xyz-d65 ...)
        - Updates color(xyz ...) to be an alias of color(xyz-d65 ...), which is a breaking change
          both because previously it used the d50 white point and because we now serialize it
          as color(xyz-d65 ...). We think this is acceptable as we just shipped the feature and
          no other browsers yet support it.
        - Adds support for color-mix(in xyz-d50, ...) and color-mix(in xyz-d65, ...).
        - Updates color-mix(in xyz, ...) to use the d65 white point (like above). We have not shipped
          color-mix enabled, so this should even less controvertial.

        * css/CSSValueKeywords.in:
        Add new keywords.

        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::parseRelativeColorFunctionForRGBTypes):
        (WebCore::CSSPropertyParserHelpers::parseColorFunctionForRGBTypes):
        (WebCore::CSSPropertyParserHelpers::parseColorFunctionForXYZTypes):
        (WebCore::CSSPropertyParserHelpers::parseRelativeColorFunctionForXYZTypes):
        (WebCore::CSSPropertyParserHelpers::parseRelativeColorFunctionParameters):
        (WebCore::CSSPropertyParserHelpers::parseNonRelativeColorFunctionParameters):
        (WebCore::CSSPropertyParserHelpers::consumeColorMixColorSpaceAndComma):
        (WebCore::CSSPropertyParserHelpers::mixColorComponents):
        Add/update parsing support for new/updated colorspaces. parseColorFunctionForXYZTypes
        is now templatized like parseColorFunctionForRGBTypes to allow reusing it for each
        of the XYZ types.

        * platform/graphics/ColorSpace.h:
        (WebCore::callWithColorType):
        * platform/graphics/ColorSpace.cpp:
        (WebCore::operator<<):
        * platform/graphics/ColorConversion.cpp:
        (WebCore::converColorComponents):
        Add new "named" colorspace, XYZ_D65, so that color(xyz-d65 ...) can be piped through
        and serialized correctly. We already had a name for srgb-linear (though it was not
        possible to create it from css previously) so no new name was needed for it.

        * platform/graphics/ColorSerialization.cpp:
        (WebCore::serialization):
        (WebCore::serializationForCSS):
        (WebCore::serializationForHTML):
        (WebCore::serializationForRenderTreeAsText):
        Add serialization specialization for xyz-d50/xyz-d65 and update name of LinearSRGBA
        to "srgb-linear" to match the now defined name in css. 

        * platform/graphics/cg/ColorCG.cpp:
        (WebCore::Color::createAndLosslesslyConvertToSupportedColorSpace):
        * platform/graphics/cg/ColorSpaceCG.cpp:
        (WebCore::xyzD50ColorSpaceRef):
        (WebCore::colorSpaceForCGColorSpace):
        (WebCore::xyzColorSpaceRef): Deleted.
        * platform/graphics/cg/ColorSpaceCG.h:
        (WebCore::cachedNullableCGColorSpace):
        Updates xyzColorSpaceRef() function to be named xyzD50ColorSpaceRef() to more accurately
        state what it is. It is not yet clear how or if an xyz-d65 colorspace can be created in
        CoreGraphics, so we return nullptr when requested. This does not change any rendered values
        as we can convert to extended-srgb in that case (as we do with lab and lch) without any loss.

2021-11-25  Kimmo Kinnunen  <kkinnunen@apple.com>

        GraphicsContextGL implementations should have separate class definitions
        https://bugs.webkit.org/show_bug.cgi?id=233491

        Reviewed by Antti Koivisto.

        Add new concrete classes GraphicsContextGLCocoa and
        GraphicsContextGLTextureMapper.
        In the future, the platform-specific functionality can be moved
        to these classes, reducing the GraphicsContextGLOpenGL #ifdefs.

        No new tests, a refactor.

        * Modules/webxr/WebXROpaqueFramebuffer.cpp:
        (WebCore::WebXROpaqueFramebuffer::startFrame):
        (WebCore::WebXROpaqueFramebuffer::endFrame):
        * PlatformMac.cmake:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/TextureMapper.cmake:
        * platform/graphics/cocoa/GraphicsContextGLCocoa.h: Added.
        * platform/graphics/cocoa/GraphicsContextGLCocoa.mm: Renamed from Source/WebCore/platform/graphics/cocoa/GraphicsContextGLOpenGLCocoa.mm.
        (WebCore::GraphicsContextGLCocoa::create):
        (WebCore::GraphicsContextGLCocoa::displayBuffer):
        (WebCore::GraphicsContextGLCocoa::markDisplayBufferInUse):
        (WebCore::GraphicsContextGLCocoa::GraphicsContextGLCocoa):
        (WebCore::GraphicsContextGLCocoa::isValid const):
        (WebCore::GraphicsContextGLCocoa::createPbufferAndAttachIOSurface):
        (WebCore::GraphicsContextGLCocoa::destroyPbufferAndDetachIOSurface):
        (WebCore::GraphicsContextGLCocoa::attachIOSurfaceToSharedTexture):
        (WebCore::GraphicsContextGLCocoa::detachIOSurfaceFromSharedTexture):
        * platform/graphics/cocoa/WebProcessGraphicsContextGLCocoa.mm: Renamed from Source/WebCore/platform/graphics/cocoa/WebProcessGraphicsContextGLOpenGLCocoa.mm.
        (WebCore::GraphicsContextGLOpenGL::create):
        * platform/graphics/opengl/GraphicsContextGLOpenGL.cpp:
        (WebCore::GraphicsContextGLOpenGL::isValid const): Deleted.
        * platform/graphics/opengl/GraphicsContextGLOpenGL.h:
        * platform/graphics/opengl/GraphicsContextGLOpenGLBase.cpp:
        (WebCore::GraphicsContextGLOpenGL::reshapeFBOs):
        * platform/graphics/texmap/GraphicsContextGLTextureMapper.cpp:
        (WebCore::GraphicsContextGLTextureMapper::create):
        (WebCore::GraphicsContextGLTextureMapper::GraphicsContextGLTextureMapper):
        (WebCore::GraphicsContextGLOpenGL::create):
        * platform/graphics/texmap/GraphicsContextGLTextureMapper.h: Added.

2021-11-25  Enrique Ocaña González  <eocanha@igalia.com>

        [GStreamer][WPE] Use WPE_SHELL_MEDIA_DISK_CACHE_PATH env var to customize media disk cache path
        https://bugs.webkit.org/show_bug.cgi?id=233477

        Reviewed by Xabier Rodriguez-Calvar.

        "/var/tmp" isn't always the best place to store the media download cache generated by GstDownloadBuffer
        on embedded platforms. Each of those downloads can hold up to a whole movie (Gigabytes) and "/var/tmp"
        is sometimes a memory based tmpfs. Some way to control the cache path is needed.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp: Honor environment variable.

2021-11-25  Said Abou-Hallawa  <said@apple.com>

        [GPU Process] Make FilterEffect appliers take FilterImages in their apply() methods
        https://bugs.webkit.org/show_bug.cgi?id=233487

        Reviewed by Cameron McCormack.

        Eventually the FilterImage will be removed from FilterEffect. So this is
        a step towards making the FilterEffect hold the effect data only. To do 
        his change, FilterImage needs to hold two new members: primitiveSubregion
        and isAlphaImage.

        FilterEffect::setIsAlphaImage() is not needed and isAlphaImage() will be
        a virtual function but it will be renamed resultIsAlphaImage(). The result 
        of this function will be stored in the result FilterImage.

        FEGaussianBlurSoftwareApplier::apply() is the only user of isAlphaImage.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/filters/FEBlend.cpp:
        (WebCore::FEBlend::platformApplySoftware):
        * platform/graphics/filters/FEColorMatrix.cpp:
        (WebCore::FEColorMatrix::resultIsAlphaImage const):
        (WebCore::FEColorMatrix::platformApplySoftware):
        * platform/graphics/filters/FEColorMatrix.h:
        * platform/graphics/filters/FEComponentTransfer.cpp:
        (WebCore::FEComponentTransfer::platformApplySoftware):
        * platform/graphics/filters/FEComposite.cpp:
        (WebCore::FEComposite::platformApplySoftware):
        * platform/graphics/filters/FEConvolveMatrix.cpp:
        (WebCore::FEConvolveMatrix::platformApplySoftware):
        * platform/graphics/filters/FEDisplacementMap.cpp:
        (WebCore::FEDisplacementMap::platformApplySoftware):
        * platform/graphics/filters/FEDropShadow.cpp:
        (WebCore::FEDropShadow::platformApplySoftware):
        * platform/graphics/filters/FEFlood.cpp:
        (WebCore::FEFlood::platformApplySoftware):
        * platform/graphics/filters/FEGaussianBlur.cpp:
        (WebCore::FEGaussianBlur::resultIsAlphaImage const):
        (WebCore::FEGaussianBlur::platformApplySoftware):
        * platform/graphics/filters/FEGaussianBlur.h:
        * platform/graphics/filters/FELighting.cpp:
        (WebCore::FELighting::platformApplySoftware):
        * platform/graphics/filters/FEMerge.cpp:
        (WebCore::FEMerge::platformApplySoftware):
        * platform/graphics/filters/FEMorphology.cpp:
        (WebCore::FEMorphology::resultIsAlphaImage const):
        (WebCore::FEMorphology::platformApplySoftware):
        * platform/graphics/filters/FEMorphology.h:
        * platform/graphics/filters/FEOffset.cpp:
        (WebCore::FEOffset::resultIsAlphaImage const):
        (WebCore::FEOffset::platformApplySoftware):
        * platform/graphics/filters/FEOffset.h:
        * platform/graphics/filters/FETile.cpp:
        (WebCore::FETile::resultIsAlphaImage const):
        (WebCore::FETile::platformApplySoftware):
        * platform/graphics/filters/FETile.h:
        * platform/graphics/filters/FETurbulence.cpp:
        (WebCore::FETurbulence::platformApplySoftware):
        * platform/graphics/filters/Filter.h:
        (WebCore::Filter::maxEffectRect const):
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::apply):
        (WebCore::FilterEffect::inputFilterImages const):
        (WebCore::FilterEffect::externalRepresentation const):
        (WebCore::FilterEffect::createResult): Deleted.
        (WebCore::FilterEffect::imageBufferResult): Deleted.
        (WebCore::FilterEffect::pixelBufferResult): Deleted.
        (WebCore::FilterEffect::getPixelBufferResult): Deleted.
        (WebCore::FilterEffect::copyPixelBufferResult const): Deleted.
        * platform/graphics/filters/FilterEffect.h:
        (WebCore::FilterEffect::filterImage const):
        (WebCore::FilterEffect::resultIsAlphaImage const):
        (WebCore::FilterEffect::isAlphaImage const): Deleted.
        (WebCore::FilterEffect::setIsAlphaImage): Deleted.
        (WebCore::FilterEffect::normalizedFloats): Deleted.
        * platform/graphics/filters/FilterEffectApplier.h:
        * platform/graphics/filters/FilterImage.cpp:
        (WebCore::FilterImage::create):
        (WebCore::FilterImage::FilterImage):
        * platform/graphics/filters/FilterImage.h:
        (WebCore::FilterImage::primitiveSubregion const):
        (WebCore::FilterImage::isAlphaImage const):
        * platform/graphics/filters/FilterImageVector.h: Copied from Source/WebCore/platform/graphics/filters/FilterEffectApplier.h.
        * platform/graphics/filters/SourceAlpha.cpp:
        (WebCore::SourceAlpha::platformApplySoftware):
        * platform/graphics/filters/SourceGraphic.cpp:
        (WebCore::SourceGraphic::platformApplySoftware):
        * platform/graphics/filters/software/FEBlendSoftwareApplier.cpp:
        (WebCore::FEBlendSoftwareApplier::apply):
        * platform/graphics/filters/software/FEBlendSoftwareApplier.h:
        * platform/graphics/filters/software/FEColorMatrixSoftwareApplier.cpp:
        (WebCore::FEColorMatrixSoftwareApplier::apply):
        * platform/graphics/filters/software/FEColorMatrixSoftwareApplier.h:
        * platform/graphics/filters/software/FEComponentTransferSoftwareApplier.cpp:
        (WebCore::FEComponentTransferSoftwareApplier::apply):
        * platform/graphics/filters/software/FEComponentTransferSoftwareApplier.h:
        * platform/graphics/filters/software/FECompositeSoftwareApplier.cpp:
        (WebCore::FECompositeSoftwareApplier::applyArithmetic):
        (WebCore::FECompositeSoftwareApplier::applyNonArithmetic):
        (WebCore::FECompositeSoftwareApplier::apply):
        * platform/graphics/filters/software/FECompositeSoftwareApplier.h:
        * platform/graphics/filters/software/FEConvolveMatrixSoftwareApplier.cpp:
        (WebCore::FEConvolveMatrixSoftwareApplier::apply):
        * platform/graphics/filters/software/FEConvolveMatrixSoftwareApplier.h:
        * platform/graphics/filters/software/FEDisplacementMapSoftwareApplier.cpp:
        (WebCore::FEDisplacementMapSoftwareApplier::apply):
        * platform/graphics/filters/software/FEDisplacementMapSoftwareApplier.h:
        * platform/graphics/filters/software/FEDropShadowSoftwareApplier.cpp:
        (WebCore::FEDropShadowSoftwareApplier::apply):
        * platform/graphics/filters/software/FEDropShadowSoftwareApplier.h:
        * platform/graphics/filters/software/FEFloodSoftwareApplier.cpp:
        (WebCore::FEFloodSoftwareApplier::apply):
        * platform/graphics/filters/software/FEFloodSoftwareApplier.h:
        * platform/graphics/filters/software/FEGaussianBlurSoftwareApplier.cpp:
        (WebCore::FEGaussianBlurSoftwareApplier::apply):
        * platform/graphics/filters/software/FEGaussianBlurSoftwareApplier.h:
        * platform/graphics/filters/software/FELightingSoftwareApplier.cpp:
        (WebCore::FELightingSoftwareApplier::apply):
        * platform/graphics/filters/software/FELightingSoftwareApplier.h:
        * platform/graphics/filters/software/FEMergeSoftwareApplier.cpp:
        (WebCore::FEMergeSoftwareApplier::apply):
        * platform/graphics/filters/software/FEMergeSoftwareApplier.h:
        * platform/graphics/filters/software/FEMorphologySoftwareApplier.cpp:
        (WebCore::FEMorphologySoftwareApplier::apply):
        * platform/graphics/filters/software/FEMorphologySoftwareApplier.h:
        * platform/graphics/filters/software/FEOffsetSoftwareApplier.cpp:
        (WebCore::FEOffsetSoftwareApplier::apply):
        * platform/graphics/filters/software/FEOffsetSoftwareApplier.h:
        * platform/graphics/filters/software/FETileSoftwareApplier.cpp:
        (WebCore::FETileSoftwareApplier::apply):
        * platform/graphics/filters/software/FETileSoftwareApplier.h:
        * platform/graphics/filters/software/FETurbulenceSoftwareApplier.cpp:
        (WebCore::FETurbulenceSoftwareApplier::apply):
        * platform/graphics/filters/software/FETurbulenceSoftwareApplier.h:
        * platform/graphics/filters/software/SourceAlphaSoftwareApplier.cpp:
        (WebCore::SourceAlphaSoftwareApplier::apply):
        * platform/graphics/filters/software/SourceAlphaSoftwareApplier.h:
        * platform/graphics/filters/software/SourceGraphicSoftwareApplier.cpp:
        (WebCore::SourceGraphicSoftwareApplier::apply):
        * platform/graphics/filters/software/SourceGraphicSoftwareApplier.h:
        * rendering/CSSFilter.cpp:
        (WebCore::CSSFilter::output):
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::postApplyResource):
        * svg/graphics/filters/SVGFEImage.cpp:
        (WebCore::FEImageSoftwareApplier::apply):
        (WebCore::FEImage::platformApplySoftware):

2021-11-25  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK distcheck build

        Remove platform specific file from cross-platform makefile.

        * CMakeLists.txt: Add WebCoreTestSupport_PRIVATE_HEADERS and use it in WEBKIT_COPY_FILES.
        * PlatformMac.cmake: Append testing/cocoa/WebArchiveDumpSupport.h to WebCoreTestSupport_PRIVATE_HEADERS.

2021-11-25  Kimmo Kinnunen  <kkinnunen@apple.com>

        ANGLE Metal: The memory backing IOSurfaces of former client buffer pbuffers is leaked
        https://bugs.webkit.org/show_bug.cgi?id=233328
        <rdar://problem/85563187>

        Reviewed by Antti Koivisto.

        Fix a bug where recycling GraphicsContextGLOpenGL display buffers would
        leak the spare buffer pbuffer handle. This would happen if the
        display buffer was marked as "in use", so that the IOSurface reference
        would be dropped immediately in order to not use it as next drawing buffer.
        However, the IOSurface is still bound in ANGLE and as such, the pbuffer handle
        must be returned during `GraphicsContextGLIOSurfaceSwapChain::recycleBuffer``
        call.

        Adds API tests for testing the leak.

        * platform/graphics/cocoa/GraphicsContextGLIOSurfaceSwapChain.cpp:
        (WebCore::GraphicsContextGLIOSurfaceSwapChain::recycleBuffer):
        (WebCore::GraphicsContextGLIOSurfaceSwapChain::present):

2021-11-24  David Kilzer  <ddkilzer@apple.com>

        Compiler should be able to check localized format strings for consistency
        <https://webkit.org/b/232686>
        <rdar://problem/84994345>

        Reviewed by Darin Adler.

        The primary goal of this patch is to allow the compiler to check
        format strings to ensure that the correct number and type of
        arguments and placeholders are used.  The epiphany to make this
        possible was that Apple platforms may use CFStringRef objects or
        const char* C-strings to accomplish this with CoreFoundation
        macros.  Non-Apple platforms continue to use const char* for
        format strings to allow the compiler to check format strings.

        To this end localized strings passed to formatLocalizedString()
        must use a WEB_UI_FORMAT_*() macro on all platforms.  Failure to
        do so will result in a compiler error, though, since non-FORMAT
        macros return a WTF::String.

        This patch also eliminates autoreleased NSString objects except
        when using WEB_UI_NSSTRING()/localizedNSString() directly (the
        return value is always autoreleased), and it removes the need to
        convert from CF/NSString -> WTF::String -> CF/NSString for
        localized format strings.

        * Scripts/extract-localizable-strings.pl:
        (isFormatMacro): Add.
        - Add support for parsing the following new macros with variadic
          parameter lists:
          o WEB_UI_FORMAT_STRING  [cross-platform]
          o WEB_UI_FORMAT_CFSTRING
          o WEB_UI_FORMAT_CFSTRING_KEY

        * platform/LocalizedStrings.cpp:
        (WebCore::formatLocalizedString):
        - Implement using `CFStringRef format` for Apple platforms, but
          `const char* format` for other platforms.
        - Use of these types allows format checking macros to be added
          to declarations in LocalizedStrings.h.
        (WebCore::webCoreBundle): Add.
        - Extract code for getting a CFBundleRef for WebCore.framework
          into a function that's similar to webKitBundle() on Windows.
        (WebCore::copyLocalizedString): Add.
        - This method was converted from localizedNSString() in
          LocalizedStringsCocoa.mm and from localizedString() in
          LocalizedStringsWin.cpp.
        (WebCore::localizedString(CFStringRef)): Add.
        - Avoids runtime creation of CFStringRef on non-Windows
          platforms.
        (WebCore::localizedString(const char*)):
        - Code for USE(CF) was converted from the same method in
          LocalizedStringsCocoa.mm, but only used on Windows port.
        (WebCore::contextMenuItemTagLookUpInDictionary):
        (WebCore::contextMenuItemTagTranslate):
        (WebCore::multipleFileUploadText):
        (WebCore::imageTitle):
        (WebCore::localizedMediaTimeDescription):
        (WebCore::validationMessageTooShortText):
        (WebCore::validationMessageTooLongText):
        (WebCore::validationMessageRangeUnderflowText):
        (WebCore::validationMessageRangeOverflowText):
        (WebCore::addTrackLabelAsSuffix):
        (WebCore::addTextTrackKindClosedCaptionsSuffix):
        (WebCore::addTextTrackKindCaptionsSuffix):
        (WebCore::addTextTrackKindDescriptionsSuffix):
        (WebCore::addTextTrackKindChaptersSuffix):
        (WebCore::addTextTrackKindMetadataSuffix):
        (WebCore::addTextTrackKindSDHSuffix):
        (WebCore::addTextTrackKindEasyReaderSuffix):
        (WebCore::addTextTrackKindForcedSuffix):
        (WebCore::addAudioTrackKindDescriptionsSuffix):
        (WebCore::addAudioTrackKindCommentarySuffix):
        (WebCore::webCryptoMasterKeyKeychainLabel):
        (WebCore::makeCredentialTouchIDPromptTitle):
        (WebCore::getAssertionTouchIDPromptTitle):
        - Use WEB_UI_FORMAT_STRING() for cross-platform UI format
          strings, and use WEB_UI_FORMAT_CFSTRING[_KEY]() for Apple
          platform UI format strings.
        - Make formatLocalizedString() an implementation detail of
          WEB_UI_FORMAT_[CF]STRING() macros.

        * platform/LocalizedStrings.h:
        (WEB_UI_STRING): Add.
        (WEB_UI_STRING_KEY): Add.
        (WEB_UI_STRING_WITH_MNEMONIC): Add.
        (WEB_UI_CFSTRING): Add.
        (WEB_UI_CFSTRING_KEY): Add.
        - Add USE(CF)-specific macros to avoid CFStringRef allocations
          at runtime.  The Apple Windows port can not use these because
          it uses a default encoding of Mac Roman for CFSTR().
        (WEB_UI_FORMAT_STRING): Add.
        - Cross-platform macro for UI format strings.
        - Note that non-USE(CF) macros essentially do nothing since
          localizedString() just converts const char* to WTF::String
          (which was previously converted back to const char*), and
          formatLocalizedString() now takes a const char*.
        (WEB_UI_FORMAT_CFSTRING): Add.
        (WEB_UI_FORMAT_CFSTRING_KEY): Add.
        - These macros are used as format string arguments to
          formatLocalizedString().
        (WebCore::localizedFormatString): Add.
        - Declare a new function for USE(CF) that is passed to
          formatLocalizedString().
        (WebCore::localizedString(CFStringRef)): Add.
        - Declare a new function for USE(CF) that takes a CFStringRef
          argument.
        (WebCore::formatLocalizedString):
        - Change to use `CFStringRef format` for USE(CF) platforms
          (except Windows), and `const char* format` for other platforms
          so format macros may be added to the delaration.
        (WebCore::localizedNSString):
        - Re-implement as an inline function using localizedString().

        * platform/cocoa/LocalizedStringsCocoa.mm:
        (WebCore::localizedNSString): Delete.
        - Moved to LocalizedStrings.h.
        (WebCore::localizedString): Delete.
        - Moved to LocalizedStrings.cpp.
        (WebCore::contextMenuItemTagSearchWeb):
        (WebCore::keygenKeychainItemName):
        (WebCore::htmlSelectMultipleItems):
        - Switch from WEB_UI_STRING() to WEB_UI_FORMAT_CFSTRING() due to
          the new rule for localized format strings.
        (WebCore::validationMessageTooLongText):
        - Switch from +[NSString stringWithFormat:] and
          WEB_UI_NSSTRING() to WebCore::formatLocalizedString() and
          WEB_UI_FORMAT_CFSTRING() for consistency.

        * platform/win/LocalizedStringsWin.cpp:
        (WebCore::localizedString): Delete.
        - Moved to localizedString() in LocalizedStrings.cpp.

2021-11-24  Said Abou-Hallawa  <said@apple.com>

        [GPU Process] Move the software FilterEffectAppliers to separate files
        https://bugs.webkit.org/show_bug.cgi?id=232833
        rdar://85424225

        Reviewed by Simon Fraser.

        This patch moves the the software FilterEffectAppliers to separate source
        and header files. There is no change in the appliers code.

        But EdgeModeType and MorphologyOperatorType have to changed to be enum
        classes so they can be forwarded declared in the appliers' header files.

        * CMakeLists.txt:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/filters/FEBlend.cpp:
        (WebCore::FEBlendSoftwareApplier::apply): Deleted.
        * platform/graphics/filters/FEBlend.h:
        * platform/graphics/filters/FEColorMatrix.cpp:
        (WebCore::FEColorMatrixSoftwareApplier::FEColorMatrixSoftwareApplier): Deleted.
        (WebCore::FEColorMatrixSoftwareApplier::matrix const): Deleted.
        (WebCore::FEColorMatrixSoftwareApplier::saturateAndHueRotate const): Deleted.
        (WebCore::FEColorMatrixSoftwareApplier::luminance const): Deleted.
        (WebCore::FEColorMatrixSoftwareApplier::applyPlatformAccelerated const): Deleted.
        (WebCore::FEColorMatrixSoftwareApplier::applyPlatformUnaccelerated const): Deleted.
        (WebCore::FEColorMatrixSoftwareApplier::applyPlatform const): Deleted.
        (WebCore::FEColorMatrixSoftwareApplier::apply): Deleted.
        * platform/graphics/filters/FEColorMatrix.h:
        * platform/graphics/filters/FEComponentTransfer.cpp:
        (WebCore::FEComponentTransferSoftwareApplier::computeIdentityTable): Deleted.
        (WebCore::FEComponentTransferSoftwareApplier::computeTabularTable): Deleted.
        (WebCore::FEComponentTransferSoftwareApplier::computeDiscreteTable): Deleted.
        (WebCore::FEComponentTransferSoftwareApplier::computeLinearTable): Deleted.
        (WebCore::FEComponentTransferSoftwareApplier::computeGammaTable): Deleted.
        (WebCore::FEComponentTransferSoftwareApplier::computeLookupTable): Deleted.
        (WebCore::FEComponentTransferSoftwareApplier::applyPlatform const): Deleted.
        (WebCore::FEComponentTransferSoftwareApplier::apply): Deleted.
        * platform/graphics/filters/FEComponentTransfer.h:
        * platform/graphics/filters/FEComposite.cpp:
        (WebCore::FECompositeSoftwareApplier::clampByte): Deleted.
        (WebCore::FECompositeSoftwareApplier::computeArithmeticPixels): Deleted.
        (WebCore::FECompositeSoftwareApplier::computeArithmeticPixelsUnclamped): Deleted.
        (WebCore::FECompositeSoftwareApplier::applyPlatformArithmetic): Deleted.
        (WebCore::FECompositeSoftwareApplier::applyArithmetic): Deleted.
        (WebCore::FECompositeSoftwareApplier::applyNonArithmetic): Deleted.
        (WebCore::FECompositeSoftwareApplier::apply): Deleted.
        * platform/graphics/filters/FEComposite.h:
        * platform/graphics/filters/FEConvolveMatrix.cpp:
        (WebCore::operator<<):
        (WebCore::FEConvolveMatrixSoftwareApplier::clampRGBAValue): Deleted.
        (WebCore::FEConvolveMatrixSoftwareApplier::setDestinationPixels): Deleted.
        (WebCore::FEConvolveMatrixSoftwareApplier::getPixelValue): Deleted.
        (WebCore::FEConvolveMatrixSoftwareApplier::setInteriorPixels): Deleted.
        (WebCore::FEConvolveMatrixSoftwareApplier::setOuterPixels): Deleted.
        (WebCore::FEConvolveMatrixSoftwareApplier::applyPlatform const): Deleted.
        (WebCore::FEConvolveMatrixSoftwareApplier::apply): Deleted.
        * platform/graphics/filters/FEConvolveMatrix.h:
        * platform/graphics/filters/FEDiffuseLighting.cpp:
        * platform/graphics/filters/FEDiffuseLighting.h:
        * platform/graphics/filters/FEDisplacementMap.cpp:
        (WebCore::FEDisplacementMapSoftwareApplier::byteOffsetOfPixel): Deleted.
        (WebCore::FEDisplacementMapSoftwareApplier::xChannelIndex const): Deleted.
        (WebCore::FEDisplacementMapSoftwareApplier::yChannelIndex const): Deleted.
        (WebCore::FEDisplacementMapSoftwareApplier::FEDisplacementMapSoftwareApplier): Deleted.
        (WebCore::FEDisplacementMapSoftwareApplier::apply): Deleted.
        * platform/graphics/filters/FEDisplacementMap.h:
        * platform/graphics/filters/FEDropShadow.cpp:
        (WebCore::FEDropShadowSoftwareApplier::apply): Deleted.
        * platform/graphics/filters/FEDropShadow.h:
        * platform/graphics/filters/FEFlood.cpp:
        (WebCore::FEFloodSoftwareApplier::apply): Deleted.
        * platform/graphics/filters/FEFlood.h:
        * platform/graphics/filters/FEGaussianBlur.cpp:
        (WebCore::FEGaussianBlur::determineAbsolutePaintRect):
        (WebCore::FEGaussianBlurSoftwareApplier::kernelPosition): Deleted.
        (WebCore::FEGaussianBlurSoftwareApplier::boxBlurAlphaOnly): Deleted.
        (WebCore::FEGaussianBlurSoftwareApplier::boxBlur): Deleted.
        (WebCore::FEGaussianBlurSoftwareApplier::boxBlurAccelerated): Deleted.
        (WebCore::FEGaussianBlurSoftwareApplier::boxBlurUnaccelerated): Deleted.
        (WebCore::FEGaussianBlurSoftwareApplier::boxBlurGeneric): Deleted.
        (WebCore::FEGaussianBlurSoftwareApplier::boxBlurWorker): Deleted.
        (WebCore::FEGaussianBlurSoftwareApplier::applyPlatform): Deleted.
        (WebCore::FEGaussianBlurSoftwareApplier::apply): Deleted.
        * platform/graphics/filters/FEGaussianBlur.h:
        * platform/graphics/filters/FELighting.cpp:
        (): Deleted.
        (WebCore::FELightingSoftwareApplier::AlphaWindow::topLeft const): Deleted.
        (WebCore::FELightingSoftwareApplier::AlphaWindow::left const): Deleted.
        (WebCore::FELightingSoftwareApplier::AlphaWindow::bottomLeft const): Deleted.
        (WebCore::FELightingSoftwareApplier::AlphaWindow::top const): Deleted.
        (WebCore::FELightingSoftwareApplier::AlphaWindow::center const): Deleted.
        (WebCore::FELightingSoftwareApplier::AlphaWindow::bottom const): Deleted.
        (WebCore::FELightingSoftwareApplier::AlphaWindow::setTop): Deleted.
        (WebCore::FELightingSoftwareApplier::AlphaWindow::setCenter): Deleted.
        (WebCore::FELightingSoftwareApplier::AlphaWindow::setBottom): Deleted.
        (WebCore::FELightingSoftwareApplier::AlphaWindow::setTopRight): Deleted.
        (WebCore::FELightingSoftwareApplier::AlphaWindow::setRight): Deleted.
        (WebCore::FELightingSoftwareApplier::AlphaWindow::setBottomRight): Deleted.
        (WebCore::FELightingSoftwareApplier::AlphaWindow::shiftRow): Deleted.
        (WebCore::FELightingSoftwareApplier::AlphaWindow::shift): Deleted.
        (WebCore::FELightingSoftwareApplier::LightingData::topLeftNormal const): Deleted.
        (WebCore::FELightingSoftwareApplier::LightingData::topRowNormal const): Deleted.
        (WebCore::FELightingSoftwareApplier::LightingData::topRightNormal const): Deleted.
        (WebCore::FELightingSoftwareApplier::LightingData::leftColumnNormal const): Deleted.
        (WebCore::FELightingSoftwareApplier::LightingData::interiorNormal const): Deleted.
        (WebCore::FELightingSoftwareApplier::LightingData::rightColumnNormal const): Deleted.
        (WebCore::FELightingSoftwareApplier::LightingData::bottomLeftNormal const): Deleted.
        (WebCore::FELightingSoftwareApplier::LightingData::bottomRowNormal const): Deleted.
        (WebCore::FELightingSoftwareApplier::LightingData::bottomRightNormal const): Deleted.
        (WebCore::FELightingSoftwareApplier::setPixelInternal): Deleted.
        (WebCore::FELightingSoftwareApplier::setPixel): Deleted.
        (WebCore::FELightingSoftwareApplier::applyPlatformGenericPaint): Deleted.
        (WebCore::FELightingSoftwareApplier::applyPlatformGenericWorker): Deleted.
        (WebCore::FELightingSoftwareApplier::applyPlatformGeneric): Deleted.
        (WebCore::FELightingSoftwareApplier::applyPlatform): Deleted.
        (WebCore::FELightingSoftwareApplier::apply): Deleted.
        * platform/graphics/filters/FELighting.h:
        * platform/graphics/filters/FEMerge.cpp:
        (WebCore::FEMergeSoftwareApplier::apply): Deleted.
        * platform/graphics/filters/FEMerge.h:
        * platform/graphics/filters/FEMorphology.cpp:
        (WebCore::operator<<):
        (WebCore::FEMorphologySoftwareApplier::pixelArrayIndex): Deleted.
        (WebCore::FEMorphologySoftwareApplier::makePixelValueFromColorComponents): Deleted.
        (WebCore::FEMorphologySoftwareApplier::makeColorComponentsfromPixelValue): Deleted.
        (WebCore::FEMorphologySoftwareApplier::minOrMax): Deleted.
        (WebCore::FEMorphologySoftwareApplier::columnExtremum): Deleted.
        (WebCore::FEMorphologySoftwareApplier::kernelExtremum): Deleted.
        (WebCore::FEMorphologySoftwareApplier::applyPlatformGeneric): Deleted.
        (WebCore::FEMorphologySoftwareApplier::applyPlatformWorker): Deleted.
        (WebCore::FEMorphologySoftwareApplier::applyPlatform): Deleted.
        (WebCore::FEMorphologySoftwareApplier::apply): Deleted.
        * platform/graphics/filters/FEMorphology.h:
        (): Deleted.
        * platform/graphics/filters/FEOffset.cpp:
        (WebCore::FEOffsetSoftwareApplier::apply): Deleted.
        * platform/graphics/filters/FEOffset.h:
        * platform/graphics/filters/FESpecularLighting.cpp:
        * platform/graphics/filters/FESpecularLighting.h:
        * platform/graphics/filters/FETile.cpp:
        (WebCore::FETileSoftwareApplier::apply): Deleted.
        * platform/graphics/filters/FETile.h:
        * platform/graphics/filters/FETurbulence.cpp:
        (WebCore::FETurbulence::setStitchTiles):
        (WebCore::FETurbulenceSoftwareApplier::PaintingData::random): Deleted.
        (): Deleted.
        (WebCore::FETurbulenceSoftwareApplier::smoothCurve): Deleted.
        (WebCore::FETurbulenceSoftwareApplier::linearInterpolation): Deleted.
        (WebCore::FETurbulenceSoftwareApplier::initPaintingData): Deleted.
        (WebCore::FETurbulenceSoftwareApplier::computeStitching): Deleted.
        (WebCore::FETurbulenceSoftwareApplier::noise2D): Deleted.
        (WebCore::FETurbulenceSoftwareApplier::toIntBasedColorComponents): Deleted.
        (WebCore::FETurbulenceSoftwareApplier::calculateTurbulenceValueForPoint): Deleted.
        (WebCore::FETurbulenceSoftwareApplier::applyPlatformGeneric): Deleted.
        (WebCore::FETurbulenceSoftwareApplier::applyPlatformWorker): Deleted.
        (WebCore::FETurbulenceSoftwareApplier::applyPlatform): Deleted.
        (WebCore::FETurbulenceSoftwareApplier::apply): Deleted.
        * platform/graphics/filters/FETurbulence.h:
        * platform/graphics/filters/FilterEffectApplier.h:
        * platform/graphics/filters/SourceAlpha.cpp:
        (WebCore::SourceAlphaSoftwareApplier::apply): Deleted.
        * platform/graphics/filters/SourceAlpha.h:
        * platform/graphics/filters/SourceGraphic.cpp:
        (WebCore::SourceGraphicSoftwareApplier::apply): Deleted.
        * platform/graphics/filters/SourceGraphic.h:
        * platform/graphics/filters/software/FEBlendSoftwareApplier.cpp: Copied from Source/WebCore/platform/graphics/filters/FEBlend.cpp.
        (WebCore::FEBlendSoftwareApplier::apply):
        * platform/graphics/filters/software/FEBlendSoftwareApplier.h: Copied from Source/WebCore/platform/graphics/filters/FEMerge.h.
        * platform/graphics/filters/software/FEColorMatrixSoftwareApplier.cpp: Copied from Source/WebCore/platform/graphics/filters/FEColorMatrix.cpp.
        (WebCore::FEColorMatrixSoftwareApplier::FEColorMatrixSoftwareApplier):
        (WebCore::FEColorMatrixSoftwareApplier::matrix const):
        (WebCore::FEColorMatrixSoftwareApplier::saturateAndHueRotate const):
        (WebCore::FEColorMatrixSoftwareApplier::luminance const):
        (WebCore::FEColorMatrixSoftwareApplier::applyPlatformAccelerated const):
        (WebCore::FEColorMatrixSoftwareApplier::applyPlatformUnaccelerated const):
        (WebCore::FEColorMatrixSoftwareApplier::applyPlatform const):
        (WebCore::FEColorMatrixSoftwareApplier::apply):
        * platform/graphics/filters/software/FEColorMatrixSoftwareApplier.h: Copied from Source/WebCore/platform/graphics/filters/FEOffset.h.
        * platform/graphics/filters/software/FEComponentTransferSoftwareApplier.cpp: Copied from Source/WebCore/platform/graphics/filters/FEComponentTransfer.cpp.
        (WebCore::FEComponentTransferSoftwareApplier::computeIdentityTable):
        (WebCore::FEComponentTransferSoftwareApplier::computeTabularTable):
        (WebCore::FEComponentTransferSoftwareApplier::computeDiscreteTable):
        (WebCore::FEComponentTransferSoftwareApplier::computeLinearTable):
        (WebCore::FEComponentTransferSoftwareApplier::computeGammaTable):
        (WebCore::FEComponentTransferSoftwareApplier::computeLookupTable):
        (WebCore::FEComponentTransferSoftwareApplier::applyPlatform const):
        (WebCore::FEComponentTransferSoftwareApplier::apply):
        * platform/graphics/filters/software/FEComponentTransferSoftwareApplier.h: Copied from Source/WebCore/platform/graphics/filters/FEOffset.h.
        * platform/graphics/filters/software/FECompositeSoftwareApplier.cpp: Copied from Source/WebCore/platform/graphics/filters/FEComposite.cpp.
        (WebCore::FECompositeSoftwareApplier::clampByte):
        (WebCore::FECompositeSoftwareApplier::computeArithmeticPixels):
        (WebCore::FECompositeSoftwareApplier::computeArithmeticPixelsUnclamped):
        (WebCore::FECompositeSoftwareApplier::applyPlatformArithmetic):
        (WebCore::FECompositeSoftwareApplier::applyArithmetic):
        (WebCore::FECompositeSoftwareApplier::applyNonArithmetic):
        (WebCore::FECompositeSoftwareApplier::apply):
        * platform/graphics/filters/software/FECompositeSoftwareApplier.h: Added.
        * platform/graphics/filters/software/FEConvolveMatrixSoftwareApplier.cpp: Copied from Source/WebCore/platform/graphics/filters/FEConvolveMatrix.cpp.
        (WebCore::FEConvolveMatrixSoftwareApplier::clampRGBAValue):
        (WebCore::FEConvolveMatrixSoftwareApplier::setDestinationPixels):
        (WebCore::FEConvolveMatrixSoftwareApplier::getPixelValue):
        (WebCore::FEConvolveMatrixSoftwareApplier::setInteriorPixels):
        (WebCore::FEConvolveMatrixSoftwareApplier::setOuterPixels):
        (WebCore::FEConvolveMatrixSoftwareApplier::applyPlatform const):
        (WebCore::FEConvolveMatrixSoftwareApplier::apply):
        * platform/graphics/filters/software/FEConvolveMatrixSoftwareApplier.h: Added.
        * platform/graphics/filters/software/FEDisplacementMapSoftwareApplier.cpp: Copied from Source/WebCore/platform/graphics/filters/FEDisplacementMap.cpp.
        (WebCore::FEDisplacementMapSoftwareApplier::FEDisplacementMapSoftwareApplier):
        (WebCore::FEDisplacementMapSoftwareApplier::xChannelIndex const):
        (WebCore::FEDisplacementMapSoftwareApplier::yChannelIndex const):
        (WebCore::FEDisplacementMapSoftwareApplier::apply):
        * platform/graphics/filters/software/FEDisplacementMapSoftwareApplier.h: Copied from Source/WebCore/platform/graphics/filters/FEOffset.h.
        (WebCore::FEDisplacementMapSoftwareApplier::byteOffsetOfPixel):
        * platform/graphics/filters/software/FEDropShadowSoftwareApplier.cpp: Copied from Source/WebCore/platform/graphics/filters/FEDropShadow.cpp.
        (WebCore::FEDropShadowSoftwareApplier::apply):
        * platform/graphics/filters/software/FEDropShadowSoftwareApplier.h: Copied from Source/WebCore/platform/graphics/filters/FEMerge.h.
        * platform/graphics/filters/software/FEFloodSoftwareApplier.cpp: Copied from Source/WebCore/platform/graphics/filters/FEMerge.h.
        (WebCore::FEFloodSoftwareApplier::apply):
        * platform/graphics/filters/software/FEFloodSoftwareApplier.h: Copied from Source/WebCore/platform/graphics/filters/FEMerge.h.
        * platform/graphics/filters/software/FEGaussianBlurSoftwareApplier.cpp: Copied from Source/WebCore/platform/graphics/filters/FEGaussianBlur.cpp.
        (WebCore::FEGaussianBlurSoftwareApplier::kernelPosition):
        (WebCore::FEGaussianBlurSoftwareApplier::boxBlurAlphaOnly):
        (WebCore::FEGaussianBlurSoftwareApplier::boxBlur):
        (WebCore::FEGaussianBlurSoftwareApplier::boxBlurAccelerated):
        (WebCore::FEGaussianBlurSoftwareApplier::boxBlurUnaccelerated):
        (WebCore::FEGaussianBlurSoftwareApplier::boxBlurGeneric):
        (WebCore::FEGaussianBlurSoftwareApplier::boxBlurWorker):
        (WebCore::FEGaussianBlurSoftwareApplier::applyPlatform):
        (WebCore::FEGaussianBlurSoftwareApplier::apply):
        * platform/graphics/filters/software/FEGaussianBlurSoftwareApplier.h: Added.
        * platform/graphics/filters/software/FELightingSoftwareApplier.cpp: Copied from Source/WebCore/platform/graphics/filters/FELighting.cpp.
        (WebCore::FELightingSoftwareApplier::LightingData::topLeftNormal const):
        (WebCore::FELightingSoftwareApplier::LightingData::topRowNormal const):
        (WebCore::FELightingSoftwareApplier::LightingData::topRightNormal const):
        (WebCore::FELightingSoftwareApplier::LightingData::leftColumnNormal const):
        (WebCore::FELightingSoftwareApplier::LightingData::interiorNormal const):
        (WebCore::FELightingSoftwareApplier::LightingData::rightColumnNormal const):
        (WebCore::FELightingSoftwareApplier::LightingData::bottomLeftNormal const):
        (WebCore::FELightingSoftwareApplier::LightingData::bottomRowNormal const):
        (WebCore::FELightingSoftwareApplier::LightingData::bottomRightNormal const):
        (WebCore::FELightingSoftwareApplier::setPixelInternal):
        (WebCore::FELightingSoftwareApplier::setPixel):
        (WebCore::FELightingSoftwareApplier::applyPlatformGenericPaint):
        (WebCore::FELightingSoftwareApplier::applyPlatformGenericWorker):
        (WebCore::FELightingSoftwareApplier::applyPlatformGeneric):
        (WebCore::FELightingSoftwareApplier::applyPlatform):
        (WebCore::FELightingSoftwareApplier::apply):
        * platform/graphics/filters/software/FELightingSoftwareApplier.h: Added.
        (WebCore::FELightingSoftwareApplier::AlphaWindow::topLeft const):
        (WebCore::FELightingSoftwareApplier::AlphaWindow::left const):
        (WebCore::FELightingSoftwareApplier::AlphaWindow::bottomLeft const):
        (WebCore::FELightingSoftwareApplier::AlphaWindow::top const):
        (WebCore::FELightingSoftwareApplier::AlphaWindow::center const):
        (WebCore::FELightingSoftwareApplier::AlphaWindow::bottom const):
        (WebCore::FELightingSoftwareApplier::AlphaWindow::setTop):
        (WebCore::FELightingSoftwareApplier::AlphaWindow::setCenter):
        (WebCore::FELightingSoftwareApplier::AlphaWindow::setBottom):
        (WebCore::FELightingSoftwareApplier::AlphaWindow::setTopRight):
        (WebCore::FELightingSoftwareApplier::AlphaWindow::setRight):
        (WebCore::FELightingSoftwareApplier::AlphaWindow::setBottomRight):
        (WebCore::FELightingSoftwareApplier::AlphaWindow::shiftRow):
        (WebCore::FELightingSoftwareApplier::AlphaWindow::shift):
        * platform/graphics/filters/software/FEMergeSoftwareApplier.cpp: Copied from Source/WebCore/platform/graphics/filters/FEMerge.cpp.
        (WebCore::FEMergeSoftwareApplier::apply):
        * platform/graphics/filters/software/FEMergeSoftwareApplier.h: Copied from Source/WebCore/platform/graphics/filters/FEMerge.h.
        * platform/graphics/filters/software/FEMorphologySoftwareApplier.cpp: Copied from Source/WebCore/platform/graphics/filters/FEMorphology.cpp.
        (WebCore::FEMorphologySoftwareApplier::minOrMax):
        (WebCore::FEMorphologySoftwareApplier::columnExtremum):
        (WebCore::FEMorphologySoftwareApplier::kernelExtremum):
        (WebCore::FEMorphologySoftwareApplier::applyPlatformGeneric):
        (WebCore::FEMorphologySoftwareApplier::applyPlatformWorker):
        (WebCore::FEMorphologySoftwareApplier::applyPlatform):
        (WebCore::FEMorphologySoftwareApplier::apply):
        * platform/graphics/filters/software/FEMorphologySoftwareApplier.h: Added.
        (WebCore::FEMorphologySoftwareApplier::pixelArrayIndex):
        (WebCore::FEMorphologySoftwareApplier::makePixelValueFromColorComponents):
        (WebCore::FEMorphologySoftwareApplier::makeColorComponentsfromPixelValue):
        * platform/graphics/filters/software/FEOffsetSoftwareApplier.cpp: Copied from Source/WebCore/platform/graphics/filters/FEOffset.cpp.
        (WebCore::FEOffsetSoftwareApplier::apply):
        * platform/graphics/filters/software/FEOffsetSoftwareApplier.h: Copied from Source/WebCore/platform/graphics/filters/FEMerge.h.
        * platform/graphics/filters/software/FETileSoftwareApplier.cpp: Copied from Source/WebCore/platform/graphics/filters/FETile.cpp.
        (WebCore::FETileSoftwareApplier::apply):
        * platform/graphics/filters/software/FETileSoftwareApplier.h: Copied from Source/WebCore/platform/graphics/filters/FEMerge.h.
        * platform/graphics/filters/software/FETurbulenceSoftwareApplier.cpp: Copied from Source/WebCore/platform/graphics/filters/FETurbulence.cpp.
        (WebCore::FETurbulenceSoftwareApplier::initPaintingData):
        (WebCore::FETurbulenceSoftwareApplier::computeStitching):
        (WebCore::FETurbulenceSoftwareApplier::noise2D):
        (WebCore::FETurbulenceSoftwareApplier::toIntBasedColorComponents):
        (WebCore::FETurbulenceSoftwareApplier::calculateTurbulenceValueForPoint):
        (WebCore::FETurbulenceSoftwareApplier::applyPlatformGeneric):
        (WebCore::FETurbulenceSoftwareApplier::applyPlatformWorker):
        (WebCore::FETurbulenceSoftwareApplier::applyPlatform):
        (WebCore::FETurbulenceSoftwareApplier::apply):
        * platform/graphics/filters/software/FETurbulenceSoftwareApplier.h: Added.
        (WebCore::FETurbulenceSoftwareApplier::PaintingData::random):
        (WebCore::FETurbulenceSoftwareApplier::smoothCurve):
        (WebCore::FETurbulenceSoftwareApplier::linearInterpolation):
        * platform/graphics/filters/software/SourceAlphaSoftwareApplier.cpp: Copied from Source/WebCore/platform/graphics/filters/SourceAlpha.cpp.
        (WebCore::SourceAlphaSoftwareApplier::apply):
        * platform/graphics/filters/software/SourceAlphaSoftwareApplier.h: Copied from Source/WebCore/platform/graphics/filters/SourceAlpha.h.
        * platform/graphics/filters/software/SourceGraphicSoftwareApplier.cpp: Copied from Source/WebCore/platform/graphics/filters/SourceAlpha.h.
        (WebCore::SourceGraphicSoftwareApplier::apply):
        * platform/graphics/filters/software/SourceGraphicSoftwareApplier.h: Copied from Source/WebCore/platform/graphics/filters/SourceGraphic.h.
        * rendering/CSSFilter.cpp:
        (WebCore::createBlurEffect):
        * svg/SVGFEConvolveMatrixElement.cpp:
        (WebCore::SVGFEConvolveMatrixElement::parseAttribute):
        * svg/SVGFEConvolveMatrixElement.h:
        (WebCore::SVGPropertyTraits<EdgeModeType>::highestEnumValue):
        (WebCore::SVGPropertyTraits<EdgeModeType>::initialValue):
        (WebCore::SVGPropertyTraits<EdgeModeType>::toString):
        (WebCore::SVGPropertyTraits<EdgeModeType>::fromString):
        * svg/SVGFEGaussianBlurElement.cpp:
        (WebCore::SVGFEGaussianBlurElement::parseAttribute):
        * svg/SVGFEGaussianBlurElement.h:
        * svg/SVGFEMorphologyElement.cpp:
        (WebCore::SVGFEMorphologyElement::parseAttribute):
        * svg/SVGFEMorphologyElement.h:
        (WebCore::SVGPropertyTraits<MorphologyOperatorType>::highestEnumValue):
        (WebCore::SVGPropertyTraits<MorphologyOperatorType>::toString):
        (WebCore::SVGPropertyTraits<MorphologyOperatorType>::fromString):

2021-11-24  Dean Jackson  <dino@apple.com>

        Make DocumentClass an OptionSet
        https://bugs.webkit.org/show_bug.cgi?id=233274

        Reviewed by Sam Weinig.

        DocumentClassFlags was playing the part of an OptionSet, so
        it might as well be one.

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::testIsHTMLClassOnDocument): Use
        branchTest16 here, as DocumentClass is a 16-bit value.

        * dom/Document.cpp: Use new type.
        (WebCore::Document::Document):
        * dom/Document.h: Make a new type alias DocumentClasses
        that is OptionSet<DocumentClass>, use that for m_documentClasses,
        and change all the is*Document methods to test the OptionSet.
        (WebCore::Document::isHTMLDocument const):
        (WebCore::Document::isXHTMLDocument const):
        (WebCore::Document::isXMLDocument const):
        (WebCore::Document::isImageDocument const):
        (WebCore::Document::isSVGDocument const):
        (WebCore::Document::isPluginDocument const):
        (WebCore::Document::isMediaDocument const):
        (WebCore::Document::isTextDocument const):
        (WebCore::Document::isModelDocument const):
        (WebCore::Document::documentClassesMemoryOffset):
        (WebCore::Document::isHTMLDocumentClassFlag):
        (WebCore::Document::Document):
        * dom/XMLDocument.h: Use new type.
        (WebCore::XMLDocument::createXHTML):
        (WebCore::XMLDocument::XMLDocument):
        * html/HTMLDocument.cpp: Ditto.
        (WebCore::HTMLDocument::createSynthesizedDocument):
        (WebCore::HTMLDocument::HTMLDocument):
        * html/HTMLDocument.h: Ditto.
        (WebCore::HTMLDocument::HTMLDocument):
        (WebCore::HTMLDocument::create):
        * html/ImageDocument.cpp: Ditto.
        (WebCore::ImageDocument::ImageDocument):
        * html/MediaDocument.cpp: Ditto.
        (WebCore::MediaDocument::MediaDocument):
        * html/ModelDocument.cpp: Ditto.
        (WebCore::ModelDocument::ModelDocument):
        * html/PluginDocument.cpp: Ditto.
        (WebCore::PluginDocument::PluginDocument):
        * html/TextDocument.cpp: Ditto.
        (WebCore::TextDocument::TextDocument):
        * svg/SVGDocument.cpp: Ditto.
        (WebCore::SVGDocument::SVGDocument):

2021-11-24  Patrick Griffis  <pgriffis@igalia.com>

        CSP: Implement submitting samples in violation reports
        https://bugs.webkit.org/show_bug.cgi?id=233398

        Reviewed by Kate Cheney.

        This implements handling 'report-sample' directive and submits a sample
        for style-src and script-src. It doesn't currently extract the source
        from eval() yet.

        * page/csp/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::allowJavaScriptURLs const):
        (WebCore::ContentSecurityPolicy::allowInlineEventHandlers const):
        (WebCore::ContentSecurityPolicy::allowNonParserInsertedScripts const):
        (WebCore::ContentSecurityPolicy::allowInlineScript const):
        (WebCore::ContentSecurityPolicy::allowInlineStyle const):
        (WebCore::ContentSecurityPolicy::allowFrameAncestors const):
        (WebCore::ContentSecurityPolicy::allowPluginType const):
        (WebCore::ContentSecurityPolicy::allowObjectFromSource const):
        (WebCore::ContentSecurityPolicy::allowChildFrameFromSource const):
        (WebCore::ContentSecurityPolicy::allowResourceFromSource const):
        (WebCore::ContentSecurityPolicy::allowConnectToSource const):
        (WebCore::ContentSecurityPolicy::allowBaseURI const):
        (WebCore::ContentSecurityPolicy::reportViolation const):
        * page/csp/ContentSecurityPolicy.h:
        * page/csp/ContentSecurityPolicyClient.h:
        * page/csp/ContentSecurityPolicyDirectiveList.cpp:
        (WebCore::ContentSecurityPolicyDirectiveList::shouldReportSample const):
        * page/csp/ContentSecurityPolicyDirectiveList.h:
        * page/csp/ContentSecurityPolicySourceList.cpp:
        (WebCore::ContentSecurityPolicySourceList::parseSource):
        * page/csp/ContentSecurityPolicySourceList.h:
        (WebCore::ContentSecurityPolicySourceList::shouldReportSample const):
        * page/csp/ContentSecurityPolicySourceListDirective.h:
        (WebCore::ContentSecurityPolicySourceListDirective::shouldReportSample const):

2021-11-24  Ziran Sun  <zsun@igalia.com>

        [css-grid] Track sizing algorithm not repeated even if used flex fraction would change
        https://bugs.webkit.org/show_bug.cgi?id=232617

        Reviewed by Javier Fernandez.

        According to https://drafts.csswg.org/css-grid/#algo-flex-tracks, when row height is
        indefinite, for each grid item that crosses a flexible track, we run the track sizing
        algorithm under a max-content constraint to find the flex fraction. Then we work out
        the grid container height as definite, which may cause the flex fraction change. At this
        point, we need to repeat the track sizing algorithm for row and layout the grid for real.
        The current implementation doesn't repeat the track sizing algorithm for row.

        The complication with calling RenderGrid::repeatTracksSizingIfNeeded() for flex max-sizing
        is that it might change a grid item's status of participating in Baseline Alignment for
        a cyclic sizing dependncy case, which should be definitively excluded. See
        https://github.com/w3c/csswg-drafts/issues/3046 for more details. This issue should be handled
        in a seperate bug. This CL only handle test cases that don't have baseline alignment specified. 
        
        * rendering/GridTrackSizingAlgorithm.cpp:
        (WebCore::GridTrackSizingAlgorithm::initializeTrackSizes):
        (WebCore::GridTrackSizingAlgorithm::setup):
        (WebCore::GridTrackSizingAlgorithm::reset):
        * rendering/GridTrackSizingAlgorithm.h:
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::repeatTracksSizingIfNeeded):
        (WebCore::RenderGrid::layoutBlock):
        * rendering/RenderGrid.h:

2021-11-24  Alan Bujtas  <zalan@apple.com>

        [IFC][Integration] RenderQuote is not a RenderText
        https://bugs.webkit.org/show_bug.cgi?id=233457

        Reviewed by Antti Koivisto.

        It's a RenderInline since r162972.

        * layout/integration/LayoutIntegrationCoverage.cpp:
        (WebCore::LayoutIntegration::canUseForFontAndText):
        (WebCore::LayoutIntegration::canUseForRenderInlineChild):

2021-11-23  Cameron McCormack  <heycam@apple.com>

        Remove unnecessary explicit initializer_list usage
        https://bugs.webkit.org/show_bug.cgi?id=233456
        <rdar://problem/85716623>

        Reviewed by Myles C. Maxfield.

        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::FontCache::prewarmGlobally):

2021-11-23  Said Abou-Hallawa  <said@apple.com>

        [GPU Process] Move the software FilterEffect functions to separate applier classes
        https://bugs.webkit.org/show_bug.cgi?id=232832

        Reviewed by Cameron McCormack.

        This step is required to move the FilterEffect software code to separate
        files. Since the FilterEffect can be applied with the accelerated CoreImage
        or the unaccelerated software methods, it make sense to remove the software
        code from the FilterEffect classes.

        The plan is to have the software code in separate files. Each FilterEffect
        will be asked to create an applier which can be SoftwareApplier or
        CoreImageApplier. This applier will be given to FilterEffect::apply()
        which will pass the input images to the apply() method of the applier to
        get the result image.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/filters/DistantLightSource.cpp:
        (WebCore::DistantLightSource::initPaintingData const):
        (WebCore::DistantLightSource::initPaintingData): Deleted.
        * platform/graphics/filters/DistantLightSource.h:
        * platform/graphics/filters/FEBlend.cpp:
        (WebCore::FEBlendSoftwareApplier::apply):
        (WebCore::FEBlend::platformApplySoftware):

        * platform/graphics/filters/FEColorMatrix.cpp:
        (WebCore::FEColorMatrix::calculateSaturateComponents):
        (WebCore::FEColorMatrix::calculateHueRotateComponents):
        (WebCore::FEColorMatrix::normalizedFloats):
        (WebCore::FEColorMatrixSoftwareApplier::FEColorMatrixSoftwareApplier):
        (WebCore::FEColorMatrixSoftwareApplier::matrix const):
        (WebCore::FEColorMatrixSoftwareApplier::saturateAndHueRotate const):
        (WebCore::FEColorMatrixSoftwareApplier::luminance const):
        (WebCore::FEColorMatrixSoftwareApplier::applyPlatformAccelerated const):
        (WebCore::FEColorMatrixSoftwareApplier::applyPlatformUnaccelerated const):
        (WebCore::FEColorMatrixSoftwareApplier::applyPlatform const):
        (WebCore::FEColorMatrixSoftwareApplier::apply):
        (WebCore::FEColorMatrix::platformApplySoftware):
        (WebCore::matrix): Deleted.
        (WebCore::saturateAndHueRotate): Deleted.
        (WebCore::luminance): Deleted.
        (WebCore::effectApplyAccelerated): Deleted.
        (WebCore::effectType): Deleted.
        * platform/graphics/filters/FEColorMatrix.h:
        (WebCore::FEColorMatrix::calculateSaturateComponents): Deleted.
        (WebCore::FEColorMatrix::calculateHueRotateComponents): Deleted.
        Move calculateSaturateComponents() and calculateHueRotateComponents() from
        the header file to the source file. Move choosing the calculation mode for
        FECOLORMATRIX_TYPE_MATRIX from effectApplyAccelerated() to applyPlatform().

        * platform/graphics/filters/FEComponentTransfer.cpp:
        (WebCore::FEComponentTransferSoftwareApplier::computeIdentityTable):
        (WebCore::FEComponentTransferSoftwareApplier::computeTabularTable):
        (WebCore::FEComponentTransferSoftwareApplier::computeDiscreteTable):
        (WebCore::FEComponentTransferSoftwareApplier::computeLinearTable):
        (WebCore::FEComponentTransferSoftwareApplier::computeGammaTable):
        (WebCore::FEComponentTransferSoftwareApplier::computeLookupTable):
        (WebCore::FEComponentTransferSoftwareApplier::applyPlatform const):
        (WebCore::FEComponentTransferSoftwareApplier::apply):
        (WebCore::FEComponentTransfer::platformApplySoftware):
        (WebCore::FEComponentTransfer::computeIdentityTable): Deleted.
        (WebCore::FEComponentTransfer::computeTabularTable): Deleted.
        (WebCore::FEComponentTransfer::computeDiscreteTable): Deleted.
        (WebCore::FEComponentTransfer::computeLinearTable): Deleted.
        (WebCore::FEComponentTransfer::computeGammaTable): Deleted.
        (WebCore::FEComponentTransfer::computeLookupTables): Deleted.
        * platform/graphics/filters/FEComponentTransfer.h:
        Instead of calling computeLookupTables() to initialize the four lookup
        tables, call computeLookupTable() four times: one for each color channel.

        * platform/graphics/filters/FEComposite.cpp:
        (WebCore::FEComposite::determineAbsolutePaintRect):
        (WebCore::FECompositeSoftwareApplier::clampByte):
        (WebCore::FECompositeSoftwareApplier::computeArithmeticPixels):
        (WebCore::FECompositeSoftwareApplier::computeArithmeticPixelsUnclamped):
        (WebCore::FECompositeSoftwareApplier::applyPlatformArithmetic):
        (WebCore::FECompositeSoftwareApplier::applyArithmetic):
        (WebCore::FECompositeSoftwareApplier::applyNonArithmetic):
        (WebCore::FECompositeSoftwareApplier::apply):
        (WebCore::FEComposite::platformApplySoftware):
        (WebCore::clampByte): Deleted.
        (WebCore::computeArithmeticPixels): Deleted.
        (WebCore::computeArithmeticPixelsUnclamped): Deleted.
        (WebCore::arithmeticSoftware): Deleted.
        (WebCore::FEComposite::platformArithmeticSoftware): Deleted.

        * platform/graphics/filters/FEConvolveMatrix.cpp:
        (WebCore::FEConvolveMatrixSoftwareApplier::clampRGBAValue):
        (WebCore::FEConvolveMatrixSoftwareApplier::setDestinationPixels):
        (WebCore::FEConvolveMatrixSoftwareApplier::getPixelValue):
        (WebCore::FEConvolveMatrixSoftwareApplier::setInteriorPixels):
        (WebCore::FEConvolveMatrixSoftwareApplier::setOuterPixels):
        (WebCore::FEConvolveMatrixSoftwareApplier::applyPlatform const):
        (WebCore::FEConvolveMatrixSoftwareApplier::apply):
        (WebCore::FEConvolveMatrix::platformApplySoftware):
        (WebCore::clampRGBAValue): Deleted.
        (WebCore::setDestinationPixels): Deleted.
        (WebCore::FEConvolveMatrix::fastSetInteriorPixels): Deleted.
        (WebCore::FEConvolveMatrix::getPixelValue): Deleted.
        (WebCore::FEConvolveMatrix::fastSetOuterPixels): Deleted.
        (WebCore::FEConvolveMatrix::setInteriorPixels): Deleted.
        (WebCore::FEConvolveMatrix::setOuterPixels): Deleted.
        * platform/graphics/filters/FEConvolveMatrix.h:
        Add the members of FEConvolveMatrix to PaintingData. Remove the template
        functions and the MSVC warning. Just ignore the alpha channel if 
        preserveAlphaValues is true.

        * platform/graphics/filters/FEDiffuseLighting.cpp:
        (WebCore::FEDiffuseLighting::FEDiffuseLighting):
        No need to pass FELighting::DiffuseLighting when creating FEDiffuseLighting.
        FilterEffect::Type::FEDiffuseLighting is already passed to FELighting. 

        * platform/graphics/filters/FEDisplacementMap.cpp:
        (WebCore::FEDisplacementMapSoftwareApplier::byteOffsetOfPixel):
        (WebCore::FEDisplacementMapSoftwareApplier::xChannelIndex const):
        (WebCore::FEDisplacementMapSoftwareApplier::yChannelIndex const):
        (WebCore::FEDisplacementMapSoftwareApplier::FEDisplacementMapSoftwareApplier):
        (WebCore::FEDisplacementMapSoftwareApplier::apply):
        (WebCore::FEDisplacementMap::platformApplySoftware):
        (WebCore::byteOffsetOfPixel): Deleted.
        * platform/graphics/filters/FEDisplacementMap.h:
        (WebCore::FEDisplacementMap::xChannelIndex const): Deleted.
        (WebCore::FEDisplacementMap::yChannelIndex const): Deleted.
        * platform/graphics/filters/FEDropShadow.cpp:
        (WebCore::FEDropShadowSoftwareApplier::apply):
        (WebCore::FEDropShadow::platformApplySoftware):
        * platform/graphics/filters/FEFlood.cpp:
        (WebCore::FEFloodSoftwareApplier::apply):
        (WebCore::FEFlood::platformApplySoftware):

        * platform/graphics/filters/FEGaussianBlur.cpp:
        (WebCore::FEGaussianBlur::create):
        (WebCore::FEGaussianBlur::FEGaussianBlur):
        (WebCore::FEGaussianBlur::setStdDeviationX):
        (WebCore::FEGaussianBlur::setStdDeviationY):
        (WebCore::FEGaussianBlur::setEdgeMode):
        (WebCore::clampedToKernelSize):
        (WebCore::FEGaussianBlur::calculateUnscaledKernelSize):
        (WebCore::FEGaussianBlur::calculateKernelSize):
        (WebCore::FEGaussianBlur::calculateOutsetSize):
        (WebCore::FEGaussianBlur::determineAbsolutePaintRect):
        (WebCore::FEGaussianBlurSoftwareApplier::kernelPosition):
        (WebCore::FEGaussianBlurSoftwareApplier::boxBlurAlphaOnly):
        (WebCore::FEGaussianBlurSoftwareApplier::boxBlur):
        (WebCore::FEGaussianBlurSoftwareApplier::boxBlurAccelerated):
        (WebCore::FEGaussianBlurSoftwareApplier::boxBlurUnaccelerated):
        (WebCore::FEGaussianBlurSoftwareApplier::boxBlurGeneric):
        (WebCore::FEGaussianBlurSoftwareApplier::boxBlurWorker):
        (WebCore::FEGaussianBlurSoftwareApplier::applyPlatform):
        (WebCore::FEGaussianBlurSoftwareApplier::apply):
        (WebCore::FEGaussianBlur::platformApplySoftware):
        (gaussianKernelFactor): Deleted.
        (WebCore::kernelPosition): Deleted.
        (WebCore::boxBlurAlphaOnly): Deleted.
        (WebCore::boxBlur): Deleted.
        (WebCore::accelerateBoxBlur): Deleted.
        (WebCore::standardBoxBlur): Deleted.
        (WebCore::FEGaussianBlur::platformApplyGeneric): Deleted.
        (WebCore::FEGaussianBlur::platformApplyWorker): Deleted.
        (WebCore::FEGaussianBlur::platformApply): Deleted.
        * platform/graphics/filters/FEGaussianBlur.h:
        Add the two members 'isAlphaImage' and 'edgeMode' to ApplyParameters.

        * platform/graphics/filters/FELighting.cpp:
        (WebCore::FELighting::FELighting):
        (WebCore::FELightingSoftwareApplier::AlphaWindow::topLeft const):
        (WebCore::FELightingSoftwareApplier::AlphaWindow::left const):
        (WebCore::FELightingSoftwareApplier::AlphaWindow::bottomLeft const):
        (WebCore::FELightingSoftwareApplier::AlphaWindow::top const):
        (WebCore::FELightingSoftwareApplier::AlphaWindow::center const):
        (WebCore::FELightingSoftwareApplier::AlphaWindow::bottom const):
        (WebCore::FELightingSoftwareApplier::AlphaWindow::setTop):
        (WebCore::FELightingSoftwareApplier::AlphaWindow::setCenter):
        (WebCore::FELightingSoftwareApplier::AlphaWindow::setBottom):
        (WebCore::FELightingSoftwareApplier::AlphaWindow::setTopRight):
        (WebCore::FELightingSoftwareApplier::AlphaWindow::setRight):
        (WebCore::FELightingSoftwareApplier::AlphaWindow::setBottomRight):
        (WebCore::FELightingSoftwareApplier::AlphaWindow::shiftRow):
        (WebCore::FELightingSoftwareApplier::AlphaWindow::shift):
        (WebCore::FELightingSoftwareApplier::LightingData::topLeftNormal const):
        (WebCore::FELightingSoftwareApplier::LightingData::topRowNormal const):
        (WebCore::FELightingSoftwareApplier::LightingData::topRightNormal const):
        (WebCore::FELightingSoftwareApplier::LightingData::leftColumnNormal const):
        (WebCore::FELightingSoftwareApplier::LightingData::interiorNormal const):
        (WebCore::FELightingSoftwareApplier::LightingData::rightColumnNormal const):
        (WebCore::FELightingSoftwareApplier::LightingData::bottomLeftNormal const):
        (WebCore::FELightingSoftwareApplier::LightingData::bottomRowNormal const):
        (WebCore::FELightingSoftwareApplier::LightingData::bottomRightNormal const):
        (WebCore::FELightingSoftwareApplier::setPixelInternal):
        (WebCore::FELightingSoftwareApplier::setPixel):
        (WebCore::FELightingSoftwareApplier::applyPlatformGenericPaint):
        (WebCore::FELightingSoftwareApplier::applyPlatformGenericWorker):
        (WebCore::FELightingSoftwareApplier::applyPlatformGeneric):
        (WebCore::FELightingSoftwareApplier::applyPlatform):
        (WebCore::FELightingSoftwareApplier::apply):
        (WebCore::FELighting::platformApplySoftware):
        (WebCore::FELighting::LightingData::topLeftNormal const): Deleted.
        (WebCore::FELighting::LightingData::topRowNormal const): Deleted.
        (WebCore::FELighting::LightingData::topRightNormal const): Deleted.
        (WebCore::FELighting::LightingData::leftColumnNormal const): Deleted.
        (WebCore::FELighting::LightingData::interiorNormal const): Deleted.
        (WebCore::FELighting::LightingData::rightColumnNormal const): Deleted.
        (WebCore::FELighting::LightingData::bottomLeftNormal const): Deleted.
        (WebCore::FELighting::LightingData::bottomRowNormal const): Deleted.
        (WebCore::FELighting::LightingData::bottomRightNormal const): Deleted.
        (WebCore::FELighting::setPixel): Deleted.
        (WebCore::FELighting::setPixelInternal): Deleted.
        (WebCore::FELighting::platformApplyGenericPaint): Deleted.
        (WebCore::FELighting::platformApplyGenericWorker): Deleted.
        (WebCore::FELighting::platformApplyGeneric): Deleted.
        (WebCore::FELighting::platformApply): Deleted.
        (WebCore::FELighting::drawLighting): Deleted.
        * platform/graphics/filters/FELighting.h:
        (WebCore::FELighting::lightingColor const):
        (WebCore::FELighting::diffuseConstant const):
        (WebCore::FELighting::specularConstant const):
        (WebCore::FELighting::specularExponent const):
        (WebCore::FELighting::AlphaWindow::topLeft const): Deleted.
        (WebCore::FELighting::AlphaWindow::left const): Deleted.
        (WebCore::FELighting::AlphaWindow::bottomLeft const): Deleted.
        (WebCore::FELighting::AlphaWindow::top const): Deleted.
        (WebCore::FELighting::AlphaWindow::center const): Deleted.
        (WebCore::FELighting::AlphaWindow::bottom const): Deleted.
        (WebCore::FELighting::AlphaWindow::setTop): Deleted.
        (WebCore::FELighting::AlphaWindow::setCenter): Deleted.
        (WebCore::FELighting::AlphaWindow::setBottom): Deleted.
        (WebCore::FELighting::AlphaWindow::setTopRight): Deleted.
        (WebCore::FELighting::AlphaWindow::setRight): Deleted.
        (WebCore::FELighting::AlphaWindow::setBottomRight): Deleted.
        (WebCore::FELighting::AlphaWindow::shiftRow): Deleted.
        (WebCore::FELighting::AlphaWindow::shift): Deleted.
        Move filling the structure LightingData from FELighting::drawLighting()
        to FELightingSoftwareApplier::apply.

        * platform/graphics/filters/FEMerge.cpp:
        (WebCore::FEMergeSoftwareApplier::apply):
        (WebCore::FEMerge::platformApplySoftware):

        * platform/graphics/filters/FEMorphology.cpp:
        (WebCore::FEMorphologySoftwareApplier::pixelArrayIndex):
        (WebCore::FEMorphologySoftwareApplier::makePixelValueFromColorComponents):
        (WebCore::FEMorphologySoftwareApplier::makeColorComponentsfromPixelValue):
        (WebCore::FEMorphologySoftwareApplier::minOrMax):
        (WebCore::FEMorphologySoftwareApplier::columnExtremum):
        (WebCore::FEMorphologySoftwareApplier::kernelExtremum):
        (WebCore::FEMorphologySoftwareApplier::applyPlatformGeneric):
        (WebCore::FEMorphologySoftwareApplier::applyPlatformWorker):
        (WebCore::FEMorphologySoftwareApplier::applyPlatform):
        (WebCore::FEMorphologySoftwareApplier::apply):
        (WebCore::FEMorphology::platformApplySoftware):
        (WebCore::pixelArrayIndex): Deleted.
        (WebCore::makeColorComponentsfromPixelValue): Deleted.
        (WebCore::makePixelValueFromColorComponents): Deleted.
        (WebCore::minOrMax): Deleted.
        (WebCore::columnExtremum): Deleted.
        (WebCore::kernelExtremum): Deleted.
        (WebCore::FEMorphology::platformApplyGeneric): Deleted.
        (WebCore::FEMorphology::platformApplyWorker): Deleted.
        (WebCore::FEMorphology::platformApply): Deleted.
        (WebCore::FEMorphology::platformApplyDegenerate): Deleted.
        * platform/graphics/filters/FEMorphology.h:
        Remove the template functions and just the MorphologyOperatorType as an
        argument to these functions.  Replace platformApplyDegenerate() with a
        call to isDegenerate() and move the call to copyPremultipliedResult() to 
        platformApplySoftware().

        * platform/graphics/filters/FEOffset.cpp:
        (WebCore::FEOffsetSoftwareApplier::apply):
        (WebCore::FEOffset::platformApplySoftware):

        * platform/graphics/filters/FESpecularLighting.cpp:
        (WebCore::FESpecularLighting::FESpecularLighting):
        No need to pass FELighting::SpecularLighting when creating FEDiffuseLighting.
        FilterEffect::Type::FESpecularLighting is already passed to FELighting. 

        * platform/graphics/filters/FETile.cpp:
        (WebCore::FETileSoftwareApplier::apply):
        (WebCore::FETile::platformApplySoftware):

        * platform/graphics/filters/FETurbulence.cpp:
        (WebCore::FETurbulenceSoftwareApplier::PaintingData::random):
        (WebCore::FETurbulenceSoftwareApplier::smoothCurve):
        (WebCore::FETurbulenceSoftwareApplier::linearInterpolation):
        (WebCore::FETurbulenceSoftwareApplier::initPaintingData):
        (WebCore::FETurbulenceSoftwareApplier::computeStitching):
        (WebCore::FETurbulenceSoftwareApplier::noise2D):
        (WebCore::FETurbulenceSoftwareApplier::toIntBasedColorComponents):
        (WebCore::FETurbulenceSoftwareApplier::calculateTurbulenceValueForPoint):
        (WebCore::FETurbulenceSoftwareApplier::applyPlatformGeneric):
        (WebCore::FETurbulenceSoftwareApplier::applyPlatformWorker):
        (WebCore::FETurbulenceSoftwareApplier::applyPlatform):
        (WebCore::FETurbulenceSoftwareApplier::apply):
        (WebCore::FETurbulence::platformApplySoftware):
        (WebCore::FETurbulence::PaintingData::random): Deleted.
        (WebCore::smoothCurve): Deleted.
        (WebCore::linearInterpolation): Deleted.
        (WebCore::FETurbulence::initPaint): Deleted.
        (WebCore::FETurbulence::computeStitching const): Deleted.
        (WebCore::FETurbulence::noise2D const): Deleted.
        (WebCore::toIntBasedColorComponents): Deleted.
        (WebCore::FETurbulence::calculateTurbulenceValueForPoint const): Deleted.
        (WebCore::FETurbulence::fillRegion const): Deleted.
        (WebCore::FETurbulence::fillRegionWorker): Deleted.
        * platform/graphics/filters/FETurbulence.h:
        (WebCore::FETurbulence::PaintingData::PaintingData): Deleted.
        Move the threading code from platformApplySoftware() to a new function
        called FETurbulenceSoftwareApplier::applyPlatform().

        * platform/graphics/filters/FilterEffect.h:
        (WebCore::FilterEffect::normalizedFloats): Deleted.
        Move normalizedFloats() from FilterEffect to FEColorMatrix.

        * platform/graphics/filters/FilterEffectApplier.h: Added.
        (WebCore::FilterEffectConcreteApplier::FilterEffectConcreteApplier):
        Introduce this class which will be the base class of all the software and
        the CoreImage FilterEffect appliers.

        * platform/graphics/filters/LightSource.h:
        * platform/graphics/filters/PointLightSource.cpp:
        (WebCore::PointLightSource::initPaintingData const):
        (WebCore::PointLightSource::initPaintingData): Deleted.
        * platform/graphics/filters/PointLightSource.h:
        Make initPaintingData() be a constant function.

        * platform/graphics/filters/SourceAlpha.cpp:
        (WebCore::SourceAlphaSoftwareApplier::apply):
        (WebCore::SourceAlpha::platformApplySoftware):
        * platform/graphics/filters/SourceGraphic.cpp:
        (WebCore::SourceGraphicSoftwareApplier::apply):
        (WebCore::SourceGraphic::platformApplySoftware):

        * platform/graphics/filters/SpotLightSource.cpp:
        (WebCore::SpotLightSource::initPaintingData const):
        (WebCore::SpotLightSource::initPaintingData): Deleted.
        * platform/graphics/filters/SpotLightSource.h:
        Make initPaintingData() be a constant function.

        * svg/graphics/filters/SVGFEImage.cpp:
        (WebCore::FEImageSoftwareApplier::apply):
        (WebCore::FEImage::platformApplySoftware):
        * svg/graphics/filters/SVGFEImage.h:

2021-11-23  Myles C. Maxfield  <mmaxfield@apple.com>

        Delete dead shaping code
        https://bugs.webkit.org/show_bug.cgi?id=233453

        Reviewed by Cameron McCormack.

        It's unreferenced.

        No new tests because there is no behavior change.

        * platform/graphics/WidthIterator.cpp:
        (WebCore::isSoftBankEmoji): Deleted.

2021-11-23  Don Olmstead  <don.olmstead@sony.com>

        Non-unified build fixes, mid November 2021 edition
        https://bugs.webkit.org/show_bug.cgi?id=233450

        Unreviewed non-unified build fixes.

        * Modules/WebGPU/GPUColorWrite.h:
        * Modules/filesystemaccess/FileSystemFileHandle.cpp:
        * inspector/WorkerInspectorController.cpp:
        * layout/integration/LayoutIntegrationBoxTree.cpp:
        * layout/integration/LayoutIntegrationBoxTree.h:
        * page/DOMWindow.cpp:
        * platform/graphics/filters/FEComponentTransfer.cpp:
        * platform/graphics/filters/FEConvolveMatrix.cpp:
        * platform/graphics/filters/FEDiffuseLighting.cpp:
        * platform/graphics/filters/FELighting.cpp:
        * platform/graphics/filters/FESpecularLighting.cpp:
        * rendering/svg/RenderSVGResourceLinearGradientInlines.h:
        * rendering/svg/RenderSVGResourceMarkerInlines.h:
        * rendering/svg/RenderSVGResourceMaskerInlines.h:
        * rendering/svg/RenderSVGResourceRadialGradientInlines.h:
        * style/ChildChangeInvalidation.cpp:
        * workers/service/ServiceWorkerTypes.h:

2021-11-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        CSP: security policy violation event is always using document as target
        https://bugs.webkit.org/show_bug.cgi?id=233182

        Reviewed by Kate Cheney.

        We should use the violation element instead if not null.

        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent): Pass element to allowInlineEventHandlers().
        * bindings/js/JSLazyEventListener.cpp:
        (WebCore::JSLazyEventListener::initializeJSFunction const): Ditto.
        * dom/Element.cpp:
        (WebCore::Element::enqueueSecurityPolicyViolationEvent): Helper to queue securitypolicyviolationEvent for element.
        * dom/Element.h:
        * dom/InlineStyleSheetOwner.cpp:
        (WebCore::InlineStyleSheetOwner::createSheet): Pass element to allowInlineStyle().
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::requestModuleScript): Pass element to allowInlineScript().
        (WebCore::ScriptElement::executeClassicScript): Ditto.
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::styleAttributeChanged): Pass element to allowInlineStyle().
        * page/csp/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::allowInlineEventHandlers const): Pass given element to reportViolation().
        (WebCore::ContentSecurityPolicy::allowInlineScript const): Ditto.
        (WebCore::ContentSecurityPolicy::allowInlineStyle const): Ditto.
        (WebCore::ContentSecurityPolicy::reportViolation const): Call Element::enqueueSecurityPolicyViolationEvent() if
        element is not nullptr.
        * page/csp/ContentSecurityPolicy.h:

2021-11-23  Antti Koivisto  <antti@apple.com>

        [:has() pseudo-class] Basic invalidation support
        https://bugs.webkit.org/show_bug.cgi?id=233443

        Reviewed by Alan Bujtas.

        Adde RuleSet based invalidation for :has(). This covers class/attribute/pseudo-class cases.

        There is also a basic optimization that limits the invalidation scope based on :has() selector
        matching child/descedant/sibling.

        * style/RuleFeature.cpp:
        (WebCore::Style::isSiblingOrSubject):
        (WebCore::Style::isHasPseudoClassMatchElement):
        (WebCore::Style::RuleFeatureSet::computeNextMatchElement):
        (WebCore::Style::RuleFeatureSet::computeSubSelectorMatchElement):

        Add new MatchElement types for :has and compute the value. This enables automatic
        creation of the required invalidation rule sets.

        (WebCore::Style::RuleFeatureSet::recursivelyCollectFeaturesFromSelector):
        * style/RuleFeature.h:
        * style/StyleInvalidator.cpp:
        (WebCore::Style::Invalidator::invalidateStyleWithMatchElement):

        Traverse appropriate parent/ancestors/siblings to invalidate.

2021-11-23  Antti Koivisto  <antti@apple.com>

        Add :focus-visible to focus bucket in RuleSet
        https://bugs.webkit.org/show_bug.cgi?id=233178

        Reviewed by Alan Bujtas.

        To use :focus-visible on UA sheet we need to have this basic optimization for it.

        * style/RuleSet.cpp:
        (WebCore::Style::RuleSet::addRule):

        :focus-visible is a strict subset of :focus so this works without other changes.

2021-11-23  Alan Bujtas  <zalan@apple.com>

        [IFC][Integration] Inflate ink overflow with box-shadow
        https://bugs.webkit.org/show_bug.cgi?id=233437

        Reviewed by Antti Koivisto.

        * layout/formattingContexts/inline/InlineDisplayContentBuilder.cpp:
        (WebCore::Layout::addBoxShadowInkOverflow):
        (WebCore::Layout::InlineDisplayContentBuilder::createBoxesAndUpdateGeometryForLineContent):
        * layout/formattingContexts/inline/InlineRect.h:
        (WebCore::Layout::InlineRect::inflate):
        * layout/integration/LayoutIntegrationCoverage.cpp:
        (WebCore::LayoutIntegration::printReason):
        (WebCore::LayoutIntegration::canUseForRenderInlineChild):
        (WebCore::LayoutIntegration::canUseForChild):
        * layout/integration/LayoutIntegrationCoverage.h:

2021-11-23  Said Abou-Hallawa  <said@apple.com>

        [GPU Process] Refactor the FilterEffect result buffers into a new class named 'FilterImage'
        https://bugs.webkit.org/show_bug.cgi?id=225088
        rdar://77487760

        Reviewed by Cameron McCormack.

        Move the storage and the logic for managing the result of applying the
        FilterEffect to its inputs to a new class named 'FilterImage'. This will
        simplify the implementation of FilterEffect. It will also allow integrating
        the CoreImage seamlessly and simplifying the geometry calculation.

        Instead of having three ways to create the result of a FilterEffect, there
        will be one way which is by calling FilterImage::create(). This call will
        not create a concrete result. But requesting the ImageBuffer or a PixelBuffer
        from FilterImage will make this creation happen

        The default of the operating ColorSpace is sRGB. But it will be set to
        linearRGB if the color interpolation of the filter effect element is
        linearRGB. The only exception is the FEImage whose result has to be in
        sRGB always.

        The default value of the result ColorSpace is the operating ColorSpace.
        The only exception is FEDisplacementMap whose result has to be in the
        ColorSpace of its first input FilterEffect.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:
        (WebCore::FilterEffectRendererCoreImage::connectCIFilters):
        * platform/graphics/cpu/arm/filters/FEBlendNEON.h:
        (WebCore::FEBlend::platformApplySoftware):
        * platform/graphics/filters/FEBlend.cpp:
        (WebCore::FEBlend::platformApplySoftware):
        * platform/graphics/filters/FEColorMatrix.cpp:
        (WebCore::FEColorMatrix::platformApplySoftware):
        * platform/graphics/filters/FEComponentTransfer.cpp:
        (WebCore::FEComponentTransfer::platformApplySoftware):
        * platform/graphics/filters/FEComposite.cpp:
        (WebCore::FEComposite::platformApplySoftware):
        (WebCore::FEComposite::correctFilterResultIfNeeded): Deleted.
        * platform/graphics/filters/FEComposite.h:
        requiresValidPreMultipliedPixels() is replaced by the opposite
        mayProduceInvalidPremultipliedPixels(). Correcting the premultiplied
        result will be done by FilterEffect.

        * platform/graphics/filters/FEConvolveMatrix.cpp:
        (WebCore::FEConvolveMatrix::platformApplySoftware):
        * platform/graphics/filters/FEDisplacementMap.cpp:
        (WebCore::FEDisplacementMap::resultColorSpace const):
        (WebCore::FEDisplacementMap::platformApplySoftware):
        (WebCore::FEDisplacementMap::setResultColorSpace): Deleted.
        * platform/graphics/filters/FEDisplacementMap.h:
        (WebCore::FEDisplacementMap::xChannelIndex const):
        (WebCore::FEDisplacementMap::yChannelIndex const):
        * platform/graphics/filters/FEDropShadow.cpp:
        (WebCore::FEDropShadow::platformApplySoftware):
        * platform/graphics/filters/FEFlood.cpp:
        (WebCore::FEFlood::platformApplySoftware):
        * platform/graphics/filters/FEFlood.h:
        * platform/graphics/filters/FEGaussianBlur.cpp:
        (WebCore::FEGaussianBlur::platformApplySoftware):
        * platform/graphics/filters/FELighting.cpp:
        (WebCore::FELighting::platformApplySoftware):
        * platform/graphics/filters/FEMerge.cpp:
        (WebCore::FEMerge::platformApplySoftware):
        * platform/graphics/filters/FEMorphology.cpp:
        (WebCore::FEMorphology::platformApplySoftware):
        * platform/graphics/filters/FEOffset.cpp:
        (WebCore::FEOffset::platformApplySoftware):
        * platform/graphics/filters/FETile.cpp:
        (WebCore::FETile::platformApplySoftware):
        * platform/graphics/filters/FETurbulence.cpp:
        (WebCore::FETurbulence::platformApplySoftware):
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::apply):
        (WebCore::FilterEffect::createResult):

        (WebCore::FilterEffect::clearResult):
        (WebCore::FilterEffect::clearResultsRecursive):
        Clearing the result can be done by nullifying a single pointer.

        (WebCore::FilterEffect::imageBufferResult):
        (WebCore::FilterEffect::unpremultipliedResult):
        (WebCore::FilterEffect::premultipliedResult):
        (WebCore::FilterEffect::getUnpremultipliedResult):
        (WebCore::FilterEffect::getPremultipliedResult):
        (WebCore::FilterEffect::copyUnpremultipliedResult const):
        (WebCore::FilterEffect::copyPremultipliedResult const):
        (WebCore::FilterEffect::correctPremultipliedResultIfNeeded):
        (WebCore::FilterEffect::transformResultColorSpace):
        (WebCore::FilterEffect::externalRepresentation const):
        (WebCore::FilterEffect::forceValidPreMultipliedPixels): Deleted.
        (WebCore::FilterEffect::unmultipliedResult): Deleted.
        (WebCore::FilterEffect::copyImageBytes const): Deleted.
        (WebCore::copyPremultiplyingAlpha): Deleted.
        (WebCore::copyUnpremultiplyingAlpha): Deleted.
        (WebCore::FilterEffect::convertPixelBufferToColorSpace): Deleted.
        (WebCore::FilterEffect::convertImageBufferToColorSpace): Deleted.
        (WebCore::FilterEffect::copyConvertedImageBufferToDestination): Deleted.
        (WebCore::FilterEffect::copyConvertedPixelBufferToDestination): Deleted.
        (WebCore::FilterEffect::copyUnmultipliedResult): Deleted.
        (WebCore::FilterEffect::copyPremultipliedResult): Deleted.
        (WebCore::FilterEffect::createImageBufferResult): Deleted.
        (WebCore::FilterEffect::createUnmultipliedImageResult): Deleted.
        (WebCore::FilterEffect::createPremultipliedImageResult): Deleted.
        (WebCore::FilterEffect::requiresPixelBufferColorSpaceConversion): Deleted.
        All the logic of these functions was moved to FilterImage.cpp.

        * platform/graphics/filters/FilterEffect.h:
        (WebCore::FilterEffect::hasResult const):
        (WebCore::FilterEffect::resultColorSpace const):
        (WebCore::FilterEffect::mayProduceInvalidPremultipliedPixels const):
        (WebCore::FilterEffect::correctFilterResultIfNeeded): Deleted.
        (WebCore::FilterEffect::setResultColorSpace): Deleted.
        (WebCore::FilterEffect::requiresValidPreMultipliedPixels): Deleted.
        * platform/graphics/filters/FilterImage.cpp: Added.
        (WebCore::FilterImage::create):
        (WebCore::FilterImage::FilterImage):
        (WebCore::FilterImage::imageBuffer):
        (WebCore::copyPremultiplyingAlpha):
        (WebCore::copyUnpremultiplyingAlpha):
        (WebCore::FilterImage::pixelBufferIfExists):
        (WebCore::FilterImage::pixelBuffer):
        (WebCore::FilterImage::getPixelBuffer):
        (WebCore::FilterImage::requiresPixelBufferColorSpaceConversion const):
        (WebCore::FilterImage::copyImageBytes const):
        (WebCore::FilterImage::getConvertedPixelBuffer const):
        (WebCore::FilterImage::copyPixelBuffer):
        (WebCore::FilterImage::correctPremultipliedPixelBuffer):
        (WebCore::FilterImage::transformToColorSpace):
        * platform/graphics/filters/FilterImage.h: Added.
        (WebCore::FilterImage::absoluteImageRect const):
        (WebCore::FilterImage::renderingMode const):
        (WebCore::FilterImage::colorSpace const):
        (WebCore::FilterImage::imageBufferIfExists):
        * platform/graphics/filters/SourceAlpha.cpp:
        (WebCore::SourceAlpha::platformApplySoftware):
        * platform/graphics/filters/SourceGraphic.cpp:
        (WebCore::SourceGraphic::platformApplySoftware):
        * platform/graphics/filters/SourceGraphic.h:
        (WebCore::SourceGraphic::SourceGraphic):
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::postApplyResource):
        * svg/graphics/filters/SVGFEImage.cpp:
        (WebCore::FEImage::platformApplySoftware):
        * svg/graphics/filters/SVGFEImage.h:

2021-11-22  Simon Fraser  <simon.fraser@apple.com>

        Have ScrollAnimator::scrollToPositionWithAnimation() take a clamping argument
        https://bugs.webkit.org/show_bug.cgi?id=233438

        Reviewed by Cameron McCormack.

        Create symmetry between scrollToPositionWithAnimation() and scrollToPositionWithoutAnimation()
        by adding a ScrollClamping argument to the former. Neither need to be virtual.

        ScrollAnimator::cancelAnimations() does not need to be virtual.

        Rename ScrollableArea::constrainScrollPosition() to ScrollableArea::constrainedScrollPosition()
        because it just returns a new position.

        * platform/KeyboardScrollingAnimator.cpp:
        (WebCore::KeyboardScrollingAnimator::updateKeyboardScrollPosition):
        (WebCore::KeyboardScrollingAnimator::stopKeyboardScrollAnimation):
        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::scrollToPositionWithAnimation):
        (WebCore::ScrollAnimator::adjustScrollPositionToBoundsIfNecessary):
        (WebCore::ScrollAnimator::adjustScrollPositionIfNecessary const):
        * platform/ScrollAnimator.h:
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::scrollToPositionWithAnimation):
        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::constrainedScrollPosition const):
        (WebCore::ScrollableArea::constrainScrollPosition const): Deleted.

2021-11-22  Wenson Hsieh  <wenson_hsieh@apple.com>

        Remove old concurrent display list logic that's no longer necessary
        https://bugs.webkit.org/show_bug.cgi?id=233433

        Reviewed by Sam Weinig.

        Now that concurrent display lists (i.e. for 2D canvas and DOM rendering in the GPU process) uses the same shared
        IPC streaming mechanism as WebGL, we can remove the old concurrent display list processing logic around display
        lists and the remote rendering backend in WebKit2.

        No change in behavior, since this code is now all (effectively) unused.

        * platform/graphics/displaylists/DisplayList.cpp:
        (WebCore::DisplayList::DisplayList::append):
        * platform/graphics/displaylists/DisplayListItemBuffer.cpp:
        (WebCore::DisplayList::ItemHandle::apply):
        (WebCore::DisplayList::ItemHandle::destroy):
        (WebCore::DisplayList::ItemHandle::safeCopy const):
        (WebCore::DisplayList::ItemBuffer::swapWritableBufferIfNeeded):

        Additionally remove a couple of display list items that were only used for concurrent display list processing.
        In a followup, we should remove more logic around this area pertaining to display list reader and writer
        clients, and the display list replayer delegate.

        * platform/graphics/displaylists/DisplayListItemType.cpp:
        (WebCore::DisplayList::sizeOfItemInBytes):
        (WebCore::DisplayList::isDrawingItem):
        (WebCore::DisplayList::isInlineItem):
        * platform/graphics/displaylists/DisplayListItemType.h:
        * platform/graphics/displaylists/DisplayListItems.cpp:
        (WebCore::DisplayList::operator<<):
        * platform/graphics/displaylists/DisplayListItems.h:
        (WebCore::DisplayList::MetaCommandChangeItemBuffer::MetaCommandChangeItemBuffer): Deleted.
        (WebCore::DisplayList::MetaCommandChangeItemBuffer::identifier const): Deleted.
        (WebCore::DisplayList::MetaCommandChangeItemBuffer::isValid const): Deleted.
        (WebCore::DisplayList::MetaCommandChangeDestinationImageBuffer::MetaCommandChangeDestinationImageBuffer): Deleted.
        (WebCore::DisplayList::MetaCommandChangeDestinationImageBuffer::identifier const): Deleted.
        (WebCore::DisplayList::MetaCommandChangeDestinationImageBuffer::isValid const): Deleted.
        * platform/graphics/displaylists/DisplayListReplayer.cpp:
        (WebCore::DisplayList::Replayer::replay):

2021-11-22  Myles C. Maxfield  <mmaxfield@apple.com>

        [WebGPU] Use OptionSet where it makes sense to
        https://bugs.webkit.org/show_bug.cgi?id=233434

        Reviewed by Wenson Hsieh.

        The fact that the IDL has a bunch of hardcoded const variables doesn't mean we have to.

        No new tests because there is no behavior change.

        * Modules/WebGPU/GPUBufferUsage.h:
        (WebCore::convertBufferUsageFlagsToBacking):
        * Modules/WebGPU/GPUColorWrite.h:
        (WebCore::convertColorWriteFlagsToBacking):
        * Modules/WebGPU/GPUMapMode.h:
        (WebCore::convertMapModeFlagsToBacking):
        * Modules/WebGPU/GPUShaderStage.h:
        (WebCore::convertShaderStageFlagsToBacking):
        * Modules/WebGPU/GPUTextureUsage.h:
        (WebCore::convertTextureUsageFlagsToBacking):

2021-11-22  Myles C. Maxfield  <mmaxfield@apple.com>

        rem in media queries should be calculated using font-size:initial, not root element font-size
        https://bugs.webkit.org/show_bug.cgi?id=156684
        <rdar://problem/25778616>

        Reviewed by Antti Koivisto.

        The CSS spec says:
        > Relative units in media queries are based on the initial value, which means that units are never based on results of declarations.

        Tests: imported/w3c/web-platform-tests/css/mediaqueries/relative-units-001.html
               imported/w3c/web-platform-tests/css/mediaqueries/mq-calc-005.html

        * css/MediaQueryEvaluator.cpp:
        (WebCore::MediaQueryEvaluator::evaluate const):

2021-11-22  Cameron McCormack  <heycam@apple.com>

        Fix some license find/replace errors
        https://bugs.webkit.org/show_bug.cgi?id=233435

        Reviewed by Sam Weinig.

        * platform/graphics/FontCascadeDescription.h:
        * platform/graphics/FontDescription.h:

2021-11-22  Antti Koivisto  <antti@apple.com>

        [LFC][Integration] Use IFC for preferred width computation for inline boxes
        https://bugs.webkit.org/show_bug.cgi?id=232616

        Reviewed by Alan Bujtas.

        * rendering/RenderBlockFlow.cpp:

2021-11-22  Simon Fraser  <simon.fraser@apple.com>

        Clarify the behavior of ScrollAnimator::scroll()
        https://bugs.webkit.org/show_bug.cgi?id=233403

        Unreviewed.

        Address patch feedback from Chris Lord.

        * dom/Element.cpp:
        (WebCore::Element::scrollByUnits):
        * page/FrameView.cpp:
        (WebCore::FrameView::adjustVerticalPageScrollStepForFixedContent):
        (WebCore::FrameView::adjustScrollStepForFixedContent): Deleted.
        * page/FrameView.h:
        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::singleAxisScroll):
        * platform/ScrollTypes.h:
        (WebCore::axisFromDirection):
        (WebCore::valueForAxis):
        (WebCore::setValueForAxis):
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::adjustVerticalPageScrollStepForFixedContent):
        (WebCore::ScrollableArea::scroll):
        (WebCore::ScrollableArea::adjustScrollStepForFixedContent): Deleted.
        * platform/ScrollableArea.h:

2021-11-22  Fujii Hironori  <Hironori.Fujii@sony.com>

        [MSVC] RenderBlock.cpp(2259): warning C4239: nonstandard extension used: 'initializing': conversion from 'WebCore::Length' to 'WebCore::Length &'
        https://bugs.webkit.org/show_bug.cgi?id=233412

        Reviewed by Don Olmstead.

        WinCairo build reported the following warnings.

        > Source\WebCore\rendering/RenderBlock.cpp(2259): warning C4239: nonstandard extension used: 'initializing': conversion from 'WebCore::Length' to 'WebCore::Length &'
        > Source\WebCore\rendering/RenderBlock.cpp(2259): note: A non-const reference may only be bound to an lvalue
        > Source\WebCore\rendering/RenderBox.cpp(3116): warning C4239: nonstandard extension used: 'initializing': conversion from 'WebCore::Length' to 'WebCore::Length &'
        > Source\WebCore\rendering/RenderBox.cpp(3116): note: A non-const reference may only be bound to an lvalue

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::computePreferredLogicalWidths):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeLogicalHeight const):
        Changed "auto&" to "const auto&".

2021-11-22  Jean-Yves Avenard  <jya@apple.com>

        Remove unused getEOTHeader method in OpenTypeUtilities.cpp
        https://bugs.webkit.org/show_bug.cgi?id=233411
        rdar://85656827

        Reviewed by Youenn Fablet.

        No change in behaviour.

        * platform/graphics/opentype/OpenTypeUtilities.cpp:
        * platform/graphics/opentype/OpenTypeUtilities.h:

2021-11-22  Chris Fleizach  <cfleizach@apple.com>

        AX: WebKit: need a method to get visible text and frame of an element on screen
        https://bugs.webkit.org/show_bug.cgi?id=233336

        Reviewed by Andres Gonzalez.

        Implement visibleCharacterRange for static text elements so that Books can determine the visible
        content on a page.

        Test: accessibility/visible-character-range.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::visibleCharacterRange const):
        (WebCore::AccessibilityObject::unobscuredContentRect const):
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityObjectInterface.h:
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilityVisibleContentRect]):
        (accessibleElementsForObjects):
        (-[WebAccessibilityObjectWrapper accessibilityFindMatchingObjects:]):
        (-[WebAccessibilityObjectWrapper positionForTextMarker:]):
        (-[WebAccessibilityObjectWrapper textMarkerForPosition:]):
        (-[WebAccessibilityObjectWrapper stringForRange:]):
        (-[WebAccessibilityObjectWrapper frameForRange:]):
        (-[WebAccessibilityObjectWrapper accessibilityMathRadicand]):
        (-[WebAccessibilityObjectWrapper _convertToNSRange:]): Deleted.
        (-[WebAccessibilityObjectWrapper _convertToDOMRange:]): Deleted.
        * accessibility/isolatedtree/AXIsolatedObject.cpp:
        (WebCore::AXIsolatedObject::visibleCharacterRange const):
        (WebCore::AXIsolatedObject::unobscuredContentRect const):
        * accessibility/isolatedtree/AXIsolatedObject.h:
        * accessibility/mac/WebAccessibilityObjectWrapperBase.h:
        * accessibility/mac/WebAccessibilityObjectWrapperBase.mm:
        (makeNSArray):
        (-[WebAccessibilityObjectWrapperBase accessibilityVisibleCharacterRange]):
        (makeNSRange):
        (makeDOMRange):
        (-[WebAccessibilityObjectWrapperBase baseUpdateBackingStore]):
        (-[WebAccessibilityObjectWrapperBase lineRectsAndText]):
        (convertToNSArray): Deleted.
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper childrenVectorArray]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
        (-[WebAccessibilityObjectWrapper _indexForTextMarker:]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]):
        (-[WebAccessibilityObjectWrapper _convertToNSRange:]): Deleted.

2021-11-20  Simon Fraser  <simon.fraser@apple.com>

        Clarify the behavior of ScrollAnimator::scroll()
        https://bugs.webkit.org/show_bug.cgi?id=233403

        Reviewed by Sam Weinig.

        ScrollAnimator::scroll() was hard to reason about. It used ScrollbarOrientation but didn't
        do anything with scrollbars. It took ScrollGranularity, "step" and "multiplier" and it
        wasn't clear whether step had already accounted for ScrollGranularity, and whether
        multiplier was anything other than 1 or -1. One of the behaviors was DoDirectionalSnapping
        but it wasn't clear if the "directional" or "snapping" part of that was important. It also
        called itself.

        Bring clarity by using 'unsigned stepCount' in all the callers, using ScrollEventAxis
        instead of ScrollbarOrientation, and having a single "delta" argument. It no longer
        calls itself, instead just continuing from the snapping branch.
        
        Add some helpers that ease interactions with FloatPoint/FloatSize and ScrollEventAxis.

        * dom/Element.cpp:
        (WebCore::Element::scrollByUnits):
        * dom/Element.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::adjustScrollStepForFixedContent):
        * page/FrameView.h:
        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::scroll):
        (WebCore::ScrollAnimator::deltaFromStep):
        (WebCore::ScrollAnimator::handleWheelEvent):
        * platform/ScrollAnimator.h:
        * platform/ScrollSnapAnimatorState.cpp:
        (WebCore::ScrollSnapAnimatorState::adjustedScrollDestination const):
        * platform/ScrollTypes.h:
        (WebCore::axisFromDirection):
        (WebCore::valueForAxis):
        (WebCore::setValueForAxis):
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::adjustScrollStepForFixedContent):
        (WebCore::ScrollableArea::scroll):
        * platform/ScrollableArea.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::scrollLayer):
        (WebCore::RenderBox::scroll):
        (WebCore::RenderBox::logicalScroll):
        * rendering/RenderBox.h:
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::scroll):
        (WebCore::RenderEmbeddedObject::logicalScroll):
        * rendering/RenderEmbeddedObject.h:
        * rendering/RenderLayerScrollableArea.cpp:
        (WebCore::RenderLayerScrollableArea::scroll):
        * rendering/RenderLayerScrollableArea.h:
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::scroll):
        (WebCore::RenderListBox::logicalScroll):
        * rendering/RenderListBox.h:
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::scroll):
        (WebCore::RenderTextControlSingleLine::logicalScroll):
        * rendering/RenderTextControlSingleLine.h:

2021-11-22  Antti Koivisto  <antti@apple.com>

        [LFC][Integration] Remove dirOverride
        https://bugs.webkit.org/show_bug.cgi?id=233423

        Reviewed by Alan Bujtas.

        This legacy inline box bit is used to set directionOverride bit when creating a TextRun for the box.
        However that bit is never needed in cases these TextRuns are created for (painting and editing).

        In practice dirOverride only affects render tree dumps and can be removed.

        * layout/integration/InlineIteratorBox.h:
        (WebCore::InlineIterator::Box::dirOverride const): Deleted.
        * layout/integration/InlineIteratorBoxLegacyPath.h:
        (WebCore::InlineIterator::BoxLegacyPath::isHorizontal const):
        (WebCore::InlineIterator::BoxLegacyPath::dirOverride const): Deleted.
        * layout/integration/InlineIteratorBoxModernPath.h:
        (WebCore::InlineIterator::BoxModernPath::isHorizontal const):
        (WebCore::InlineIterator::BoxModernPath::createTextRun const):
        (WebCore::InlineIterator::BoxModernPath::dirOverride const): Deleted.
        * rendering/LegacyInlineBox.h:
        (WebCore::LegacyInlineBox::InlineBoxBitfields::InlineBoxBitfields):
        (WebCore::LegacyInlineBox::dirOverride const): Deleted.
        (WebCore::LegacyInlineBox::setDirOverride): Deleted.
        * rendering/LegacyInlineTextBox.cpp:
        (WebCore::LegacyInlineTextBox::createTextRun const):
        * rendering/LegacyLineLayout.cpp:
        (WebCore::LegacyLineLayout::constructLine):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::write):
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::constructTextRun const):
        * rendering/svg/SVGRenderTreeAsText.cpp:
        (WebCore::writeSVGInlineTextBox):

2021-11-22  Antti Koivisto  <antti@apple.com>

        Factor child change invalidation into class
        https://bugs.webkit.org/show_bug.cgi?id=233311

        Reviewed by Alan Bujtas.

        Use similar pattern as ClassChangeInvalidation and others where we create a stack object scoped
        over a DOM mutation. This will allow more sophisticated ruleset based invalidation in
        future.

        This patch moves the invalidation code from childrenChanged() to the new ChildChangeInvalidation class.
        ChildChangeInvalidation is instantiated in ContainerNode and CharacterData mutation functions
        that call childrenChanged(). It uses the same ChildChange argument type as childrenChanged().

        There are no changes to invalidation functionality in this patch.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/CharacterData.cpp:
        (WebCore::makeChildChange):
        (WebCore::CharacterData::parserAppendData):
        (WebCore::CharacterData::setDataAndUpdate):
        (WebCore::CharacterData::notifyParentAfterChange):
        * dom/CharacterData.h:
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::removeAllChildrenWithScriptAssertion):
        (WebCore::makeChildChangeForRemoval):
        (WebCore::ContainerNode::removeNodeWithScriptAssertion):
        (WebCore::makeChildChangeForInsertion):
        (WebCore::executeNodeInsertionWithScriptAssertion):
        (WebCore::ContainerNode::insertBefore):
        (WebCore::ContainerNode::parserInsertBefore):
        (WebCore::ContainerNode::replaceChild):
        (WebCore::ContainerNode::replaceAll):
        (WebCore::ContainerNode::appendChildWithoutPreInsertionValidityCheck):
        (WebCore::ContainerNode::parserAppendChild):
        (WebCore::affectsElements):
        * dom/Element.cpp:
        (WebCore::invalidateForSiblingCombinators):
        (WebCore::Element::childTypeAllowed const):
        (WebCore::Element::childrenChanged):
        (WebCore::Element::finishParsingChildren):
        (WebCore::checkForEmptyStyleChange): Deleted.
        (WebCore::invalidateForForwardPositionalRules): Deleted.
        (WebCore::invalidateForBackwardPositionalRules): Deleted.
        (WebCore::checkForSiblingStyleChanges): Deleted.
        * dom/Element.h:
        * style/ChildChangeInvalidation.cpp: Added.
        (WebCore::Style::ChildChangeInvalidation::ChildChangeInvalidation):
        (WebCore::Style::ChildChangeInvalidation::~ChildChangeInvalidation):
        (WebCore::Style::ChildChangeInvalidation::invalidateAfterChange):
        (WebCore::Style::ChildChangeInvalidation::checkForEmptyStyleChange):
        (WebCore::Style::invalidateForForwardPositionalRules):
        (WebCore::Style::invalidateForBackwardPositionalRules):
        (WebCore::Style::ChildChangeInvalidation::checkForSiblingStyleChanges):
        * style/ChildChangeInvalidation.h: Added.
        (WebCore::Style::ChildChangeInvalidation::parentElement):
        * style/StyleAdjuster.h:

2021-11-21  Alan Bujtas  <zalan@apple.com>

        [LFC][Integration] Enable bidi content for non-inline-box cases
        https://bugs.webkit.org/show_bug.cgi?id=232980
        <rdar://problem/85281410>

        Reviewed by Antti Koivisto.

        * layout/integration/LayoutIntegrationCoverage.cpp:

2021-11-21  Jean-Yves Avenard  <jya@apple.com>

        Remove unused HTMLModelElement::modelData() method.
        https://bugs.webkit.org/show_bug.cgi?id=233406
        rdar://85640503

        Reviewed by Sam Weinig.

        No change in observable behaviour.

        * Modules/model-element/HTMLModelElement.cpp:
        (WebCore::HTMLModelElement::notifyFinished):
        * Modules/model-element/HTMLModelElement.h:

2021-11-21  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add support for caching bidi InlineTextItem widths
        https://bugs.webkit.org/show_bug.cgi?id=233402

        Reviewed by Antti Koivisto.

        Let's do a "text content measure" pass when the inline item boundaries are finalized (including bidi split).

        * layout/formattingContexts/inline/InlineItem.h:
        (WebCore::Layout::InlineItem::setWidth):
        * layout/formattingContexts/inline/InlineItemsBuilder.cpp:
        (WebCore::Layout::InlineItemsBuilder::build):
        (WebCore::Layout::InlineItemsBuilder::computeInlineTextItemWidths):
        (WebCore::Layout::InlineItemsBuilder::handleTextContent):
        * layout/formattingContexts/inline/InlineItemsBuilder.h:

2021-11-21  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Cache measured width even if canUseSimplifiedTextMeasuring is false
        https://bugs.webkit.org/show_bug.cgi?id=233404

        Reviewed by Antti Koivisto.

        Just because some content goes through the non-simplified text measuring codepath, it does not
        necessary mean we can't cache the measured value on the inline item (actually, we can cache these values just fine in most cases).

        This is in preparation for being able to cache bidi content measured widths.

        * layout/formattingContexts/inline/InlineItemsBuilder.cpp:
        (WebCore::Layout::canCacheMeasuredWidthOnInlineTextItem):
        (WebCore::Layout::InlineItemsBuilder::handleTextContent):

2021-11-21  Ziran Sun  <zsun@igalia.com>

        [css-grid] svg image as grid items should use the overriding logical width/height when defined to compute the logical height/width
        https://bugs.webkit.org/show_bug.cgi?id=228105

        Reviewed by Javier Fernandez.

        This is a reland of r280290. It's got reverted because another patch r280078 caused crash and had been
        reverted. r280290 is a dependent patch for r280078.

        As discussed at https://github.com/w3c/csswg-drafts/issues/6286#issuecomment-866986544, degenerate
        aspect ratios derived from SVG width/height attributes fall back to viewbox aspect ratio 
        (whether due to negative values or zero values).

        When computing the logical height/width using an intrinsic aspect ratio, RenderReplaced uses the
        overridingLogicalWidth/overridingLogicalHeight whenever defined as long as the flex or
        grid item has an intrinsic size. For an SVG graphic though, it's common to have an intrinsic aspect
        ratio but not to have an intrinsic width or height. For this special case, we still should use
        overridingLogicalWidth/overridingLogicalHeight for logical height/width calculations.        

        * rendering/RenderReplaced.cpp:
        (WebCore::hasIntrinsicSize):
        (WebCore::RenderReplaced::computeReplacedLogicalWidth const):
        (WebCore::RenderReplaced::computeReplacedLogicalHeight const):

2021-11-21  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Introduce canCacheMeasuredWidthOnInlineTextItem
        https://bugs.webkit.org/show_bug.cgi?id=233399

        Reviewed by Antti Koivisto.

        This patch is in preparation for decoupling simplified text measuring and measured width caching.
        (Caching should solely be position and (maybe) context dependent.)

        * layout/formattingContexts/inline/InlineItemsBuilder.cpp:
        (WebCore::Layout::canCacheMeasuredWidthOnInlineTextItem const):
        (WebCore::Layout::InlineItemsBuilder::handleTextContent):
        * layout/formattingContexts/inline/text/TextUtil.cpp:
        (WebCore::Layout::TextUtil::canUseSimplifiedTextMeasuringForFirstLine): Deleted.
        * layout/formattingContexts/inline/text/TextUtil.h:
        * layout/integration/LayoutIntegrationBoxTree.cpp:
        (WebCore::LayoutIntegration::BoxTree::buildTree): whitespace is not part of the first-line style set.

2021-11-20  Alan Bujtas  <zalan@apple.com>

        [IFC][Integration] Initialize layout box geometries for preferred width computation
        https://bugs.webkit.org/show_bug.cgi?id=233386

        Reviewed by Antti Koivisto.

        Initializing certain geometries (e.g. inline box margin/border/padding) is required for the integration
        codepath the same way we do it for the actual line layout.

        * layout/formattingContexts/inline/InlineFormattingContext.cpp: Add a dedicated integration codepath for preferred width
        computation using the preset geometry values.
        (WebCore::Layout::InlineFormattingContext::computedIntrinsicWidthConstraintsForIntegration):
        * layout/formattingContexts/inline/InlineFormattingContext.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::tryComputePreferredWidthsUsingModernPath):

2021-11-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        Report the initiating url instead of the redirected one
        https://bugs.webkit.org/show_bug.cgi?id=233037

        Reviewed by Brent Fulgham.

        As per the spec, blockedURI should use the requested URL of original request instead of redirected location.

        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::isAllowedByContentSecurityPolicy):
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::willSendRequestInternal):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::allowedByContentSecurityPolicy const):
        (WebCore::CachedResourceLoader::canRequestAfterRedirection const):
        (WebCore::CachedResourceLoader::updateRequestAfterRedirection):
        * loader/cache/CachedResourceLoader.h:
        * page/csp/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::allowChildContextFromSource const):
        (WebCore::ContentSecurityPolicy::allowScriptFromSource const):
        (WebCore::ContentSecurityPolicy::allowImageFromSource const):
        (WebCore::ContentSecurityPolicy::allowStyleFromSource const):
        (WebCore::ContentSecurityPolicy::allowFontFromSource const):
        (WebCore::ContentSecurityPolicy::allowManifestFromSource const):
        (WebCore::ContentSecurityPolicy::allowMediaFromSource const):
        * page/csp/ContentSecurityPolicy.h:

2021-11-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][a11y] Add implementation of image interface when building with ATSPI
        https://bugs.webkit.org/show_bug.cgi?id=232782

        Reviewed by Adrian Perez de Castro.

        * SourcesGTK.txt:
        * accessibility/atspi/AccessibilityObjectAtspi.cpp:
        (WebCore::AccessibilityObjectAtspi::interfacesForObject):
        (WebCore::AccessibilityObjectAtspi::path):
        (WebCore::AccessibilityObjectAtspi::buildInterfaces const):
        * accessibility/atspi/AccessibilityObjectAtspi.h:
        * accessibility/atspi/AccessibilityObjectImageAtspi.cpp: Added.
        (WebCore::AccessibilityObjectAtspi::imageDescription const):

2021-11-19  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r286058.
        https://bugs.webkit.org/show_bug.cgi?id=233394

        Speedometer2 is crashing

        Reverted changeset:

        "Factor child change invalidation into class"
        https://bugs.webkit.org/show_bug.cgi?id=233311
        https://commits.webkit.org/r286058

2021-11-19  Kiet Ho  <tho22@apple.com>

        Implement parsing and animation support for ray() shape accepted by offset-path
        https://bugs.webkit.org/show_bug.cgi?id=233153

        Reviewed by Dean Jackson.

        Tests: imported/w3c/web-platform-tests/css/motion/animation/offset-path-composition.html
               imported/w3c/web-platform-tests/css/motion/animation/offset-path-interpolation-005.html
               imported/w3c/web-platform-tests/css/motion/offset-supports-calc.html
               imported/w3c/web-platform-tests/css/motion/parsing/offset-path-computed.html
               imported/w3c/web-platform-tests/css/motion/parsing/offset-path-parsing-invalid.html
               imported/w3c/web-platform-tests/css/motion/parsing/offset-path-parsing-valid.html

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFunc): Added support for blending between ray()s.
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueIDForRaySize):
        (WebCore::valueForPathOperation): Added support for getting the computed value of ray().
        * css/CSSRayValue.cpp: Added.
        (WebCore::CSSRayValue::customCSSText const):
        (WebCore::CSSRayValue::equals const):
        * css/CSSRayValue.h: Added.
        * css/CSSValue.cpp:
        (WebCore::CSSValue::equals const):
        (WebCore::CSSValue::cssText const):
        (WebCore::CSSValue::destroy):
        * css/CSSValue.h:
        (WebCore::CSSValue::isRayValue const):
        * css/CSSValueKeywords.in: Added new keywords used by ray().
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeRayShape): Added method to consume ray().
        (WebCore::consumePathOperation): Added a switch to control whether to accept
        ray() or not. Both clip-path and offset-path uses this function, however clip-path
        doesn't support the ray shape, while offset-path does, hence the switch.
        (WebCore::CSSPropertyParser::parseSingleValue):
        * rendering/PathOperation.h: Added a new subclass of PathOperation called RayPathOperation
        to represent ray().
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::hitTestClipPath const):
        * style/StyleBuilderConverter.h:
        (WebCore::Style::BuilderConverter::convertPathOperation): Added support for converting CSSRayValue
        to RayPathOperation.

2021-11-19  Kiet Ho  <tho22@apple.com>

        Integrate motion path transforms in transformation pipeline
        https://bugs.webkit.org/show_bug.cgi?id=233144

        Reviewed by Dean Jackson.

        This patch ties everything together and renders CSS Motion Path out onto the screen.
        Motion path properties are desugared into two transformations: one translate to move
        the element to the specified location on the path, and one rotate to rotate the element
        to the correct orientation specified by offset-rotate. The two transformations are applied
        after scale() and before the individual transform functions, as specified in the CSS
        Transforms spec.

        Tests: imported/w3c/web-platform-tests/css/motion/animation/reftests/offset-path-with-transforms-001.html
               imported/w3c/web-platform-tests/css/motion/offset-distance-001.html
               imported/w3c/web-platform-tests/css/motion/offset-distance-002.html
               imported/w3c/web-platform-tests/css/motion/offset-distance-003.html
               imported/w3c/web-platform-tests/css/motion/offset-distance-004.html
               imported/w3c/web-platform-tests/css/motion/offset-distance-005.html
               imported/w3c/web-platform-tests/css/motion/offset-distance-006.html
               imported/w3c/web-platform-tests/css/motion/offset-distance-007.html
               imported/w3c/web-platform-tests/css/motion/offset-distance-008.html
               imported/w3c/web-platform-tests/css/motion/offset-distance-009.html
               imported/w3c/web-platform-tests/css/motion/offset-path-string-001.html
               imported/w3c/web-platform-tests/css/motion/offset-path-string-002.html
               imported/w3c/web-platform-tests/css/motion/offset-rotate-003.html
               imported/w3c/web-platform-tests/css/motion/offset-rotate-004.html
               imported/w3c/web-platform-tests/css/motion/offset-rotate-005.html

        * platform/graphics/Path.cpp:
        (WebCore::Path::isClosed const): Added method to determine if a Path is closed (i.e,
        the last draw command is CloseSubpath). This is required because offset-distance is
        handled differently depending on if the Path is closed or not.
        * platform/graphics/Path.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::recompositeChangeRequiresGeometryUpdate): Account in changes in motion path properties.
        * rendering/RenderObject.h:
        (WebCore::RenderObject::hasTransform const): Account in motion path properties.
        * rendering/style/RenderStyle.cpp:
        (WebCore::rareNonInheritedDataChangeRequiresLayout):
        (WebCore::RenderStyle::applyTransform const): Add an additional step to apply motion path transforms.
        (WebCore::getPathFromPathOperation):
        (WebCore::getTraversalStateAtDistance):
        (WebCore::RenderStyle::applyMotionPathTransform const): Added method to apply motion path transforms.
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::hasTransform const): Account for motion path properties.

2021-11-19  Alex Christensen  <achristensen@webkit.org>

        Implement extension-path variant of redirect action in WKContentRuleList
        https://bugs.webkit.org/show_bug.cgi?id=233351

        Reviewed by Tim Hatcher.

        Because the extension path changes each time you relaunch Safari but the compiled bytecode does not,
        we need a way to pass in the extension base URL when adding the looked-up or compiled WKContentRuleList
        to the WKUserContentController.

        * contentextensions/ContentExtension.cpp:
        (WebCore::ContentExtensions::ContentExtension::create):
        (WebCore::ContentExtensions::ContentExtension::ContentExtension):
        * contentextensions/ContentExtension.h:
        (WebCore::ContentExtensions::ContentExtension::extensionBaseURL const):
        * contentextensions/ContentExtensionActions.cpp:
        (WebCore::ContentExtensions::RedirectAction::applyToRequest):
        * contentextensions/ContentExtensionActions.h:
        * contentextensions/ContentExtensionsBackend.cpp:
        (WebCore::ContentExtensions::ContentExtensionsBackend::addContentExtension):
        (WebCore::ContentExtensions::ContentExtensionsBackend::processContentRuleListsForLoad):
        (WebCore::ContentExtensions::applyResultsToRequest):
        * contentextensions/ContentExtensionsBackend.h:
        * contentextensions/ContentRuleListResults.h:

2021-11-19  Myles C. Maxfield  <mmaxfield@apple.com>

        [WebGPU] Add converters from serializable descriptors to interface descriptors
        https://bugs.webkit.org/show_bug.cgi?id=233310

        Reviewed by Dean Jackson.

        The WebGPU abstract interface (in PAL/graphics/WebGPU) has a set of structs for descriptors. These descriptors hold references to
        objects, so these interfaces can't be serialized directly. Instead, we have a parallel set of structs (in WebKit/Shared/WebGPU)
        which replace the object references with WebGPUIdentifiers. The web process side will convert the abstract interface structs
        to the serializable ones, and the GPU process side will convert back. This patch implements the converters back, from the serializable
        structs to the abstract interface structs.

        No new tests because there is no behavior change.

        * Modules/WebGPU/GPUBindGroupDescriptor.h:
        (WebCore::GPUBindGroupDescriptor::convertToBacking const):
        * Modules/WebGPU/GPUBindGroupLayoutDescriptor.h:
        (WebCore::GPUBindGroupLayoutDescriptor::convertToBacking const):
        * Modules/WebGPU/GPUCompilationInfo.cpp:
        (WebCore::GPUCompilationInfo::messages const):
        * Modules/WebGPU/GPUCompilationMessage.h:
        (WebCore::GPUCompilationMessage::create):
        (WebCore::GPUCompilationMessage::GPUCompilationMessage):
        * Modules/WebGPU/GPUComputePassTimestampWrite.h:
        (WebCore::convertToBacking):
        * Modules/WebGPU/GPUDeviceDescriptor.h:
        (WebCore::GPUDeviceDescriptor::convertToBacking const):
        * Modules/WebGPU/GPUFragmentState.h:
        (WebCore::GPUFragmentState::convertToBacking const):
        * Modules/WebGPU/GPUPipelineLayoutDescriptor.h:
        (WebCore::GPUPipelineLayoutDescriptor::convertToBacking const):
        * Modules/WebGPU/GPUProgrammableStage.h:
        (WebCore::GPUProgrammableStage::convertToBacking const):
        * Modules/WebGPU/GPUQuerySetDescriptor.h:
        (WebCore::GPUQuerySetDescriptor::convertToBacking const):
        * Modules/WebGPU/GPURenderBundleEncoderDescriptor.h:
        (WebCore::GPURenderBundleEncoderDescriptor::convertToBacking const):
        * Modules/WebGPU/GPURenderPassDescriptor.h:
        (WebCore::GPURenderPassDescriptor::convertToBacking const):
        * Modules/WebGPU/GPURenderPassLayout.h:
        (WebCore::GPURenderPassLayout::convertToBacking const):
        * Modules/WebGPU/GPURenderPassTimestampWrite.h:
        (WebCore::convertToBacking):
        * Modules/WebGPU/GPUVertexBufferLayout.h:
        (WebCore::GPUVertexBufferLayout::convertToBacking const):
        * Modules/WebGPU/GPUVertexState.h:
        (WebCore::GPUVertexState::convertToBacking const):

2021-11-19  Brent Fulgham  <bfulgham@apple.com>

        Add support for web app manifest icons in WebKit/UI Process layer
        https://bugs.webkit.org/show_bug.cgi?id=233350
        <rdar://problem/84311569>

        Reviewed by Chris Dumez.

        This patch builds on the work in Bug 231339 and threads the new icons
        feature through the WebKit layer.

        This change modifies the parser to represent the 'sizes' member of the
        icon as an array of strings, rather than a single string containing the
        sizes as a set of space-separated items. This more closesly matches the
        behavior of the WebKit API layer.

        Tested by TestWebKitAPI.

        * Modules/applicationmanifest/ApplicationManifest.h:
        * Modules/applicationmanifest/ApplicationManifestParser.cpp:
        (WebCore::ApplicationManifestParser::parseIcons):

2021-11-19  Antoine Quint  <graouts@webkit.org>

        [Model] add support for seeking animations
        https://bugs.webkit.org/show_bug.cgi?id=233362
        <rdar://problem/85428812>

        Reviewed by Wenson Hsieh.

        We add three new promise-based methods to the HTMLModelElement IDL to allow seeking the animation
        built into the USDZ asset: animationDuration(), animationCurrentTime() and setAnimationCurrentTime().
        All these methods are promise-based.

        * Modules/model-element/HTMLModelElement.cpp:
        (WebCore::HTMLModelElement::animationDuration):
        (WebCore::HTMLModelElement::animationCurrentTime):
        (WebCore::HTMLModelElement::setAnimationCurrentTime):
        * Modules/model-element/HTMLModelElement.h:
        * Modules/model-element/HTMLModelElement.idl:
        * Modules/model-element/ModelPlayer.h:
        * Modules/model-element/dummy/DummyModelPlayer.cpp:
        (WebCore::DummyModelPlayer::animationDuration):
        (WebCore::DummyModelPlayer::animationCurrentTime):
        (WebCore::DummyModelPlayer::setAnimationCurrentTime):
        * Modules/model-element/dummy/DummyModelPlayer.h:
        * Modules/model-element/scenekit/SceneKitModelPlayer.h:
        * Modules/model-element/scenekit/SceneKitModelPlayer.mm:
        (WebCore::SceneKitModelPlayer::animationDuration):
        (WebCore::SceneKitModelPlayer::animationCurrentTime):
        (WebCore::SceneKitModelPlayer::setAnimationCurrentTime):

2021-11-19  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, reverting r286047.

        Breaks internal builds

        Reverted changeset:

        "[WebGPU] Add converters from serializable descriptors to
        interface descriptors"
        https://bugs.webkit.org/show_bug.cgi?id=233310
        https://commits.webkit.org/r286047

2021-11-19  Antoine Quint  <graouts@webkit.org>

        [Model] add support for controlling looping animations
        https://bugs.webkit.org/show_bug.cgi?id=233356
        <rdar://problem/85428884>

        Reviewed by Wenson Hsieh.

        We add two new promise-based methods to the HTMLModelElement IDL to control the looping state
        of the animation built into the USDZ asset: isLoopingAnimation() and setIsLoopingAnimation().
        All these methods are promise-based.

        * Modules/model-element/HTMLModelElement.cpp:
        (WebCore::HTMLModelElement::isLoopingAnimation):
        (WebCore::HTMLModelElement::setIsLoopingAnimation):
        * Modules/model-element/HTMLModelElement.h:
        * Modules/model-element/HTMLModelElement.idl:
        * Modules/model-element/ModelPlayer.h:
        * Modules/model-element/dummy/DummyModelPlayer.cpp:
        (WebCore::DummyModelPlayer::isLoopingAnimation):
        (WebCore::DummyModelPlayer::setIsLoopingAnimation):
        * Modules/model-element/dummy/DummyModelPlayer.h:
        * Modules/model-element/scenekit/SceneKitModelPlayer.h:
        * Modules/model-element/scenekit/SceneKitModelPlayer.mm:
        (WebCore::SceneKitModelPlayer::isLoopingAnimation):
        (WebCore::SceneKitModelPlayer::setIsLoopingAnimation):

2021-11-19  Antoine Quint  <graouts@webkit.org>

        [Model] add audio support
        https://bugs.webkit.org/show_bug.cgi?id=233365
        <rdar://problem/85428982>

        Reviewed by Wenson Hsieh.

        We add three new promise-based methods to the HTMLModelElement IDL to control the audio state
        of the animation built into the USDZ asset: hasAudio(), isMuted() and setIsMuted().
        All these methods are promise-based.

        * Modules/model-element/HTMLModelElement.cpp:
        (WebCore::HTMLModelElement::hasAudio):
        (WebCore::HTMLModelElement::isMuted):
        (WebCore::HTMLModelElement::setIsMuted):
        * Modules/model-element/HTMLModelElement.h:
        * Modules/model-element/HTMLModelElement.idl:
        * Modules/model-element/ModelPlayer.h:
        * Modules/model-element/dummy/DummyModelPlayer.cpp:
        (WebCore::DummyModelPlayer::hasAudio):
        (WebCore::DummyModelPlayer::isMuted):
        (WebCore::DummyModelPlayer::setIsMuted):
        * Modules/model-element/dummy/DummyModelPlayer.h:
        * Modules/model-element/scenekit/SceneKitModelPlayer.h:
        * Modules/model-element/scenekit/SceneKitModelPlayer.mm:
        (WebCore::SceneKitModelPlayer::hasAudio):
        (WebCore::SceneKitModelPlayer::isMuted):
        (WebCore::SceneKitModelPlayer::setIsMuted):

2021-11-19  Antti Koivisto  <antti@apple.com>

        [CSS Cascade Layers] [Debug] ASSERTION FAILED: m_childRules.isEmpty() when using @import with layer name
        https://bugs.webkit.org/show_bug.cgi?id=233283
        <rdar://problem/85520733>

        Reviewed by Antoine Quint.

        CSS parser is allowing rules in illegal order (@import rule following @layer block)

        Test: fast/css/layer-illegal-import.html

        * css/parser/CSSParserImpl.cpp:
        (WebCore::computeNewAllowedRules):

        Only stay in AllowLayerStatementRules state if the new layer is a statement, not a block.

2021-11-19  Antti Koivisto  <antti@apple.com>

        :hover with descendant selector not invalidated correctly in shadow tree
        https://bugs.webkit.org/show_bug.cgi?id=233354

        Reviewed by Antoine Quint.

        We optimize :hover and :active by only invalidating for descendant selectors with a single tree walk.
        This doesn't work correctly for shadow trees as their scoped style may differ and the invalidation
        is limited to a single scope anyway.

        Fix by doing descendant invalidation for each affected scope.

        Test: fast/selectors/hover-descendant-shadow-tree.html

        * dom/Document.cpp:
        (WebCore::Document::updateHoverActiveState):

        We need to perform scoped descendant invalidation for elements that are parented to ShadowRoot.

2021-11-19  Matt Woodrow  <matt.woodrow@gmail.com>

        Don't modify fragment-only or empty image URLs
        https://bugs.webkit.org/show_bug.cgi?id=229917

        Reviewed by Darin Adler.

        Don't modify fragment-only or empty image URLs, as-per css-values-4

        Existing web-platform-tests are marked as passing.

        * css/CSSImageValue.cpp:
        (WebCore::CSSImageValue::reresolvedURL const):
        * css/parser/CSSParserContext.cpp:
        (WebCore::CSSParserContext::completeURL const):
        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::consumeImage):
        * dom/Document.cpp:
        (WebCore::Document::completeURL const):

2021-11-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][a11y] Add implementation of document interface when building with ATSPI
        https://bugs.webkit.org/show_bug.cgi?id=232755

        Reviewed by Adrian Perez de Castro.

        * SourcesGTK.txt:
        * accessibility/atspi/AccessibilityObjectAtspi.cpp:
        (WebCore::AccessibilityObjectAtspi::interfacesForObject):
        (WebCore::AccessibilityObjectAtspi::path):
        (WebCore::AccessibilityObjectAtspi::locale const):
        (WebCore::AccessibilityObjectAtspi::buildInterfaces const):
        * accessibility/atspi/AccessibilityObjectAtspi.h:
        * accessibility/atspi/AccessibilityObjectDocumentAtspi.cpp: Added.
        (WebCore::AccessibilityObjectAtspi::documentAttribute const):
        (WebCore::AccessibilityObjectAtspi::documentAttributes const):
        (WebCore::AccessibilityObjectAtspi::documentLocale const):

2021-11-19  Antti Koivisto  <antti@apple.com>

        Factor child change invalidation into class
        https://bugs.webkit.org/show_bug.cgi?id=233311

        Reviewed by Alan Bujtas.

        Use similar pattern as ClassChangeInvalidation and others where we create a stack object scoped
        over a DOM mutation. This will allow more sophisticated ruleset based invalidation in
        future.

        This patch moves the invalidation code from childrenChanged() to the new ChildChangeInvalidation class.
        ChildChangeInvalidation is instantiated in ContainerNode and CharacterData mutation functions
        that call childrenChanged(). It uses the same ChildChange argument type as childrenChanged().

        There are no changes to invalidation functionality in this patch.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/CharacterData.cpp:
        (WebCore::makeChildChange):
        (WebCore::CharacterData::parserAppendData):
        (WebCore::CharacterData::setDataAndUpdate):
        (WebCore::CharacterData::notifyParentAfterChange):
        * dom/CharacterData.h:
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::removeAllChildrenWithScriptAssertion):
        (WebCore::makeChildChangeForRemoval):
        (WebCore::ContainerNode::removeNodeWithScriptAssertion):
        (WebCore::makeChildChangeForInsertion):
        (WebCore::executeNodeInsertionWithScriptAssertion):
        (WebCore::ContainerNode::insertBefore):
        (WebCore::ContainerNode::parserInsertBefore):
        (WebCore::ContainerNode::replaceChild):
        (WebCore::ContainerNode::replaceAll):
        (WebCore::ContainerNode::appendChildWithoutPreInsertionValidityCheck):
        (WebCore::ContainerNode::parserAppendChild):
        (WebCore::affectsElements):
        * dom/ContainerNode.h:
        (WebCore::ContainerNode::ChildChange::isInsertion const):

        Add a new FinishedParsingChildren change type, only used when invalidating from Element::finishParsingChildren.

        * dom/Element.cpp:
        (WebCore::invalidateForSiblingCombinators):
        (WebCore::Element::childTypeAllowed const):
        (WebCore::Element::childrenChanged):
        (WebCore::Element::finishParsingChildren):
        (WebCore::checkForEmptyStyleChange): Deleted.
        (WebCore::invalidateForForwardPositionalRules): Deleted.
        (WebCore::invalidateForBackwardPositionalRules): Deleted.
        (WebCore::checkForSiblingStyleChanges): Deleted.
        * dom/Element.h:
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::childrenChanged):
        * style/ChildChangeInvalidation.cpp: Added.
        (WebCore::Style::ChildChangeInvalidation::ChildChangeInvalidation):
        (WebCore::Style::ChildChangeInvalidation::~ChildChangeInvalidation):
        (WebCore::Style::ChildChangeInvalidation::invalidateAfterChange):
        (WebCore::Style::ChildChangeInvalidation::checkForEmptyStyleChange):
        (WebCore::Style::invalidateForForwardPositionalRules):
        (WebCore::Style::invalidateForBackwardPositionalRules):
        (WebCore::Style::ChildChangeInvalidation::checkForSiblingStyleChanges):
        * style/ChildChangeInvalidation.h: Added.
        (WebCore::Style::ChildChangeInvalidation::parentElement):
        * style/StyleAdjuster.h:

2021-11-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][a11y] Add implementation of action interface when building with ATSPI
        https://bugs.webkit.org/show_bug.cgi?id=232749

        Reviewed by Adrian Perez de Castro.

        * SourcesGTK.txt:
        * accessibility/atspi/AccessibilityObjectActionAtspi.cpp: Added.
        (WebCore::AccessibilityObjectAtspi::actionName const):
        (WebCore::AccessibilityObjectAtspi::localizedActionName const):
        (WebCore::AccessibilityObjectAtspi::actionKeyBinding const):
        (WebCore::AccessibilityObjectAtspi::doAction const):
        * accessibility/atspi/AccessibilityObjectAtspi.cpp:
        (WebCore::AccessibilityObjectAtspi::interfacesForObject):
        (WebCore::AccessibilityObjectAtspi::path):
        (WebCore::AccessibilityObjectAtspi::buildInterfaces const):
        * accessibility/atspi/AccessibilityObjectAtspi.h:

2021-11-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][a11y] Add implementation of hypertext interface when building with ATSPI
        https://bugs.webkit.org/show_bug.cgi?id=232708

        Reviewed by Adrian Perez de Castro.

        * SourcesGTK.txt:
        * accessibility/atspi/AccessibilityAtspi.cpp:
        (WebCore::AccessibilityAtspi::unregisterObject):
        (WebCore::AccessibilityAtspi::registerHyperlink):
        * accessibility/atspi/AccessibilityAtspi.h:
        * accessibility/atspi/AccessibilityObjectAtspi.cpp:
        (WebCore::AccessibilityObjectAtspi::interfacesForObject):
        (WebCore::AccessibilityObjectAtspi::path):
        (WebCore::AccessibilityObjectAtspi::hyperlinkReference):
        (WebCore::AccessibilityObjectAtspi::buildInterfaces const):
        * accessibility/atspi/AccessibilityObjectAtspi.h:
        * accessibility/atspi/AccessibilityObjectHypertextAtspi.cpp: Added.
        (WebCore::AccessibilityObjectAtspi::hyperlinkCount const):
        (WebCore::AccessibilityObjectAtspi::hyperlink const):
        (WebCore::AccessibilityObjectAtspi::hyperlinkIndex const):
        * accessibility/atspi/AccessibilityObjectTextAtspi.cpp:
        (WebCore::AccessibilityObjectAtspi::characterIndex const):

2021-11-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][a11y] Add implementation of hyperlink interface when building with ATSPI
        https://bugs.webkit.org/show_bug.cgi?id=232707

        Reviewed by Adrian Perez de Castro.

        Add hyperlink implementation and make links be handled as replaced objects too, to ensure all hyperlinks are
        handled the same way. That's consistent with chromium.

        * SourcesGTK.txt:
        * accessibility/atspi/AccessibilityObjectAtspi.cpp:
        (WebCore::AccessibilityObjectAtspi::interfacesForObject):
        (WebCore::AccessibilityObjectAtspi::path):
        (WebCore::AccessibilityObjectAtspi::buildInterfaces const):
        * accessibility/atspi/AccessibilityObjectAtspi.h:
        * accessibility/atspi/AccessibilityObjectHyperlinkAtspi.cpp: Added.
        (WebCore::AccessibilityObjectAtspi::url const):
        (WebCore::AccessibilityObjectAtspi::offsetInParent const):
        * accessibility/atspi/AccessibilityObjectTextAtspi.cpp:
        (WebCore::AccessibilityObjectAtspi::characterOffset const):
        * editing/TextIterator.cpp:
        (WebCore::isRendererReplacedElement):
        (WebCore::TextIterator::handleReplacedElement):

2021-11-18  Frédéric Wang  <fwang@igalia.com>

        Nullptr crash in SimplifiedBackwardsTextIterator::range() via previousSentencePosition
        https://bugs.webkit.org/show_bug.cgi?id=229282

        Reviewed by Darin Adler.

        Constructors of TextIterator and SimplifiedBackwardsTextIterator update layout, which may
        make HTMLObjectElement switch to fallback content and invalidate their renderer. As a
        consequence their advance() method may incorrectly treat them as replaced elements. This
        patch updates the layout at the beginning of FrameSelection::modify and disable post
        resolution callbacks in order to prevent this kind of unaverted tree changes while browsing
        the tree for selection update.

        Test: editing/text-iterator/backward-textiterator-object-crash.html

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::modify): Update layout and disable post resolution callback, so that
        all iterators used during the execution of the function handle <object>s consistently.

2021-11-18  Antoine Quint  <graouts@webkit.org>

        [Model] add support for pausing and resuming animations
        https://bugs.webkit.org/show_bug.cgi?id=233319
        <rdar://problem/85428464>

        Reviewed by Wenson Hsieh.

        We add three new promise-based methods to the HTMLModelElement IDL to control the playback state
        of the animation built into the USDZ asset: isPlayingAnimation(), playAnimation() and pauseAnimation().
        All these methods are promise-based.

        * Modules/model-element/HTMLModelElement.cpp:
        (WebCore::HTMLModelElement::isPlayingAnimation):
        (WebCore::HTMLModelElement::setAnimationIsPlaying):
        (WebCore::HTMLModelElement::playAnimation):
        (WebCore::HTMLModelElement::pauseAnimation):
        * Modules/model-element/HTMLModelElement.h:
        * Modules/model-element/HTMLModelElement.idl:
        * Modules/model-element/ModelPlayer.h:
        * Modules/model-element/dummy/DummyModelPlayer.cpp:
        (WebCore::DummyModelPlayer::isPlayingAnimation):
        (WebCore::DummyModelPlayer::setAnimationIsPlaying):
        * Modules/model-element/dummy/DummyModelPlayer.h:
        * Modules/model-element/scenekit/SceneKitModelPlayer.h:
        * Modules/model-element/scenekit/SceneKitModelPlayer.mm:
        (WebCore::SceneKitModelPlayer::isPlayingAnimation):
        (WebCore::SceneKitModelPlayer::setAnimationIsPlaying):

2021-11-18  Fujii Hironori  <Hironori.Fujii@sony.com>

        [TextureMapper][GraphicsLayerTextureMapper][GraphicsLayerWC] setBackgroundColor support
        https://bugs.webkit.org/show_bug.cgi?id=233244

        Reviewed by Don Olmstead.

        TextureMapper, GraphicsLayerTextureMapper and GraphicsLayerWC
        didn't support setBackgroundColor. setBackgroundColor is used for
        "painting flush" feature of Web Inspector Elements tab.

        Added a new class TextureMapperSolidColorLayer to draw a solid
        layer for the primary layer and contents layer.

        * platform/TextureMapper.cmake:
        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::GraphicsLayerTextureMapper::setBackgroundColor): Added.
        (WebCore::GraphicsLayerTextureMapper::setContentsToSolidColor):
        (WebCore::GraphicsLayerTextureMapper::commitLayerChanges):
        * platform/graphics/texmap/GraphicsLayerTextureMapper.h:
        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::paintSelf):
        (WebCore::TextureMapperLayer::setBackgroundColor):
        (WebCore::blendWithOpacity): Deleted.
        * platform/graphics/texmap/TextureMapperLayer.h:
        * platform/graphics/texmap/TextureMapperSolidColorLayer.h: Added.
        (WebCore::TextureMapperSolidColorLayer::setColor):

2021-11-18  Ben Nham  <nham@apple.com>

        Add support for onpushsubscriptionchange event handler
        https://bugs.webkit.org/show_bug.cgi?id=233088

        Reviewed by Youenn Fablet.

        This adds the ability to send a pushsubscriptionchange event to the appropriate handler on
        ServiceWorkerGlobalScope. I didn't implement a completion handler for the event (as we do
        for the push event) since it's not required by the standard and I don't think we'd use it.
        We only plan on firing this event the first time you visit an origin after we deregister a
        PushSubscription for receiving too many silent pushes.

        Tests: http/wpt/service-workers/service-worker-spinning-push.https.html
               http/wpt/service-workers/service-worker-spinning-pushsubscriptionchange.https.html

        * Modules/push-api/PushSubscription.cpp:
        (WebCore::PushSubscription::PushSubscription):
        (WebCore::PushSubscription::data const):
        (WebCore::PushSubscription::endpoint const):
        (WebCore::PushSubscription::expirationTime const):
        (WebCore::PushSubscription::options const):
        (WebCore::PushSubscription::clientECDHPublicKey const):
        (WebCore::PushSubscription::sharedAuthenticationSecret const):
        (WebCore::PushSubscription::getKey const):
        (WebCore::PushSubscription::toJSON const):
        * Modules/push-api/PushSubscription.h:
        * Modules/push-api/ServiceWorkerGlobalScope+PushAPI.idl:
        * bindings/js/WebCoreBuiltinNames.h:
        * dom/EventNames.h:
        * testing/Internals.cpp:
        (WebCore::Internals::createPushSubscription):
        * testing/ServiceWorkerInternals.cpp:
        (WebCore::ServiceWorkerInternals::schedulePushSubscriptionChangeEvent):
        (WebCore::ServiceWorkerInternals::createPushSubscription):
        * testing/ServiceWorkerInternals.h:
        * testing/ServiceWorkerInternals.idl:
        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::subscribeToPushService):
        (WebCore::ServiceWorkerContainer::getPushSubscription):
        (WebCore::createPushSubscriptionFromData): Deleted.
        * workers/service/ServiceWorkerRegistration.h:
        * workers/service/context/SWContextManager.cpp:
        (WebCore::SWContextManager::firePushSubscriptionChangeEvent):
        * workers/service/context/SWContextManager.h:
        * workers/service/context/ServiceWorkerThread.cpp:
        (WebCore::ServiceWorkerThread::queueTaskToFirePushSubscriptionChangeEvent):
        (WebCore::ServiceWorkerThread::heartBeatTimerFired):
        (WebCore::ServiceWorkerThread::willPostTaskToFirePushSubscriptionChangeEvent):
        (WebCore::ServiceWorkerThread::finishedFiringPushSubscriptionChangeEvent):
        * workers/service/context/ServiceWorkerThread.h:
        * workers/service/context/ServiceWorkerThreadProxy.cpp:
        (WebCore::ServiceWorkerThreadProxy::firePushSubscriptionChangeEvent):
        * workers/service/context/ServiceWorkerThreadProxy.h:

2021-11-18  Mark Lam  <mark.lam@apple.com>

        SubSpace constructors should take a const HeapCellType& instead of a HeapCellType*.
        https://bugs.webkit.org/show_bug.cgi?id=233341
        rdar://85573277

        Reviewed by Yusuke Suzuki.

        * bindings/js/JSFileSystemDirectoryHandleIterator.cpp:
        (WebCore::JSFileSystemDirectoryHandleIterator::subspaceForImpl):
        * bindings/js/WebCoreJSClientData.cpp:
        (WebCore::JSVMClientData::JSVMClientData):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        (GenerateIterableDefinition):
        * bindings/scripts/test/JS/JSDOMWindow.cpp:
        (WebCore::JSDOMWindow::subspaceForImpl):
        * bindings/scripts/test/JS/JSDedicatedWorkerGlobalScope.cpp:
        (WebCore::JSDedicatedWorkerGlobalScope::subspaceForImpl):
        * bindings/scripts/test/JS/JSExposedStar.cpp:
        (WebCore::JSExposedStar::subspaceForImpl):
        * bindings/scripts/test/JS/JSExposedToWorkerAndWindow.cpp:
        (WebCore::JSExposedToWorkerAndWindow::subspaceForImpl):
        * bindings/scripts/test/JS/JSPaintWorkletGlobalScope.cpp:
        (WebCore::JSPaintWorkletGlobalScope::subspaceForImpl):
        * bindings/scripts/test/JS/JSServiceWorkerGlobalScope.cpp:
        (WebCore::JSServiceWorkerGlobalScope::subspaceForImpl):
        * bindings/scripts/test/JS/JSSharedWorkerGlobalScope.cpp:
        (WebCore::JSSharedWorkerGlobalScope::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestCEReactions.cpp:
        (WebCore::JSTestCEReactions::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestCEReactionsStringifier.cpp:
        (WebCore::JSTestCEReactionsStringifier::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestCallTracer.cpp:
        (WebCore::JSTestCallTracer::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.cpp:
        (WebCore::JSTestClassWithJSBuiltinConstructor::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestConditionalIncludes.cpp:
        (WebCore::JSTestConditionalIncludes::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestConditionallyReadWrite.cpp:
        (WebCore::JSTestConditionallyReadWrite::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestDOMJIT.cpp:
        (WebCore::JSTestDOMJIT::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestDefaultToJSON.cpp:
        (WebCore::JSTestDefaultToJSON::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestDefaultToJSONFilteredByExposed.cpp:
        (WebCore::JSTestDefaultToJSONFilteredByExposed::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestDefaultToJSONIndirectInheritance.cpp:
        (WebCore::JSTestDefaultToJSONIndirectInheritance::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestDefaultToJSONInherit.cpp:
        (WebCore::JSTestDefaultToJSONInherit::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestDefaultToJSONInheritFinal.cpp:
        (WebCore::JSTestDefaultToJSONInheritFinal::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestDelegateToSharedSyntheticAttribute.cpp:
        (WebCore::JSTestDelegateToSharedSyntheticAttribute::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestDomainSecurity.cpp:
        (WebCore::JSTestDomainSecurity::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestEnabledBySetting.cpp:
        (WebCore::JSTestEnabledBySetting::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestEnabledForContext.cpp:
        (WebCore::JSTestEnabledForContext::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore::JSTestEventConstructor::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::JSTestEventTarget::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestException.cpp:
        (WebCore::JSTestException::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestGenerateAddOpaqueRoot.cpp:
        (WebCore::JSTestGenerateAddOpaqueRoot::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        (WebCore::JSTestGenerateIsReachable::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestGlobalObject.cpp:
        (WebCore::JSTestGlobalObject::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestIndexedSetterNoIdentifier.cpp:
        (WebCore::JSTestIndexedSetterNoIdentifier::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestIndexedSetterThrowingException.cpp:
        (WebCore::JSTestIndexedSetterThrowingException::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestIndexedSetterWithIdentifier.cpp:
        (WebCore::JSTestIndexedSetterWithIdentifier::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::jsTestInterfacePrototypeFunction_entriesCaller):
        (WebCore::JSTestInterface::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestInterfaceLeadingUnderscore.cpp:
        (WebCore::JSTestInterfaceLeadingUnderscore::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestIterable.cpp:
        (WebCore::jsTestIterablePrototypeFunction_entriesCaller):
        (WebCore::JSTestIterable::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp:
        (WebCore::JSTestJSBuiltinConstructor::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestLegacyFactoryFunction.cpp:
        (WebCore::JSTestLegacyFactoryFunction::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestLegacyNoInterfaceObject.cpp:
        (WebCore::JSTestLegacyNoInterfaceObject::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestLegacyOverrideBuiltIns.cpp:
        (WebCore::JSTestLegacyOverrideBuiltIns::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestMapLike.cpp:
        (WebCore::JSTestMapLike::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestMapLikeWithOverriddenOperations.cpp:
        (WebCore::JSTestMapLikeWithOverriddenOperations::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterNoIdentifier.cpp:
        (WebCore::JSTestNamedAndIndexedSetterNoIdentifier::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterThrowingException.cpp:
        (WebCore::JSTestNamedAndIndexedSetterThrowingException::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterWithIdentifier.cpp:
        (WebCore::JSTestNamedAndIndexedSetterWithIdentifier::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestNamedDeleterNoIdentifier.cpp:
        (WebCore::JSTestNamedDeleterNoIdentifier::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestNamedDeleterThrowingException.cpp:
        (WebCore::JSTestNamedDeleterThrowingException::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestNamedDeleterWithIdentifier.cpp:
        (WebCore::JSTestNamedDeleterWithIdentifier::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestNamedDeleterWithIndexedGetter.cpp:
        (WebCore::JSTestNamedDeleterWithIndexedGetter::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestNamedGetterCallWith.cpp:
        (WebCore::JSTestNamedGetterCallWith::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestNamedGetterNoIdentifier.cpp:
        (WebCore::JSTestNamedGetterNoIdentifier::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestNamedGetterWithIdentifier.cpp:
        (WebCore::JSTestNamedGetterWithIdentifier::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestNamedSetterNoIdentifier.cpp:
        (WebCore::JSTestNamedSetterNoIdentifier::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestNamedSetterThrowingException.cpp:
        (WebCore::JSTestNamedSetterThrowingException::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestNamedSetterWithIdentifier.cpp:
        (WebCore::JSTestNamedSetterWithIdentifier::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetter.cpp:
        (WebCore::JSTestNamedSetterWithIndexedGetter::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetterAndSetter.cpp:
        (WebCore::JSTestNamedSetterWithIndexedGetterAndSetter::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestNamedSetterWithLegacyOverrideBuiltIns.cpp:
        (WebCore::JSTestNamedSetterWithLegacyOverrideBuiltIns::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestNamedSetterWithLegacyUnforgeableProperties.cpp:
        (WebCore::JSTestNamedSetterWithLegacyUnforgeableProperties::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestNamedSetterWithLegacyUnforgeablePropertiesAndLegacyOverrideBuiltIns.cpp:
        (WebCore::JSTestNamedSetterWithLegacyUnforgeablePropertiesAndLegacyOverrideBuiltIns::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestNamespaceObject.cpp:
        (WebCore::JSTestNamespaceObject::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestNode.cpp:
        (WebCore::jsTestNodePrototypeFunction_entriesCaller):
        (WebCore::JSTestNode::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::JSTestObj::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestOperationConditional.cpp:
        (WebCore::JSTestOperationConditional::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        (WebCore::JSTestOverloadedConstructors::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestOverloadedConstructorsWithSequence.cpp:
        (WebCore::JSTestOverloadedConstructorsWithSequence::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestPluginInterface.cpp:
        (WebCore::JSTestPluginInterface::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestPromiseRejectionEvent.cpp:
        (WebCore::JSTestPromiseRejectionEvent::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestReadOnlyMapLike.cpp:
        (WebCore::JSTestReadOnlyMapLike::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestReadOnlySetLike.cpp:
        (WebCore::JSTestReadOnlySetLike::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestReportExtraMemoryCost.cpp:
        (WebCore::JSTestReportExtraMemoryCost::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::JSTestSerializedScriptValueInterface::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestSetLike.cpp:
        (WebCore::JSTestSetLike::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestSetLikeWithOverriddenOperations.cpp:
        (WebCore::JSTestSetLikeWithOverriddenOperations::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestStringifier.cpp:
        (WebCore::JSTestStringifier::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestStringifierAnonymousOperation.cpp:
        (WebCore::JSTestStringifierAnonymousOperation::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestStringifierNamedOperation.cpp:
        (WebCore::JSTestStringifierNamedOperation::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestStringifierOperationImplementedAs.cpp:
        (WebCore::JSTestStringifierOperationImplementedAs::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestStringifierOperationNamedToString.cpp:
        (WebCore::JSTestStringifierOperationNamedToString::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestStringifierReadOnlyAttribute.cpp:
        (WebCore::JSTestStringifierReadOnlyAttribute::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestStringifierReadWriteAttribute.cpp:
        (WebCore::JSTestStringifierReadWriteAttribute::subspaceForImpl):
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::JSTestTypedefs::subspaceForImpl):
        * bindings/scripts/test/JS/JSWorkerGlobalScope.cpp:
        (WebCore::JSWorkerGlobalScope::subspaceForImpl):
        * bindings/scripts/test/JS/JSWorkletGlobalScope.cpp:
        (WebCore::JSWorkletGlobalScope::subspaceForImpl):
        * bridge/objc/objc_runtime.mm:
        (JSC::Bindings::ObjcFallbackObjectImp::subspaceForImpl):

2021-11-18  Alex Christensen  <achristensen@webkit.org>

        Allow all redirect schemes when compiling a content rule list
        https://bugs.webkit.org/show_bug.cgi?id=233338

        Reviewed by Tim Hatcher.

        What was I thinking?  I made an SPI that gives you a set of allowed redirect schemes
        from the same source as the JSON which contains those redirect schemes.  This allows
        all redirect schemes.  If you want to prevent redirecting to a certain scheme, then
        don't compile JSON that redirects to that scheme.  We may want a helper function that
        uses the same parser to get the set of schemes being redirected to, but right now that
        is not necessary because the JSON is being assembled by a program that has the ability
        to check the schemes.

        * contentextensions/ContentExtensionActions.cpp:
        (WebCore::ContentExtensions::RedirectAction::parse):
        (WebCore::ContentExtensions::RedirectAction::URLTransformAction::parse):
        * contentextensions/ContentExtensionActions.h:
        * contentextensions/ContentExtensionCompiler.cpp:
        (WebCore::ContentExtensions::compileRuleList):
        * contentextensions/ContentExtensionError.cpp:
        (WebCore::ContentExtensions::contentExtensionErrorCategory):
        * contentextensions/ContentExtensionError.h:
        * contentextensions/ContentExtensionParser.cpp:
        (WebCore::ContentExtensions::loadAction):
        (WebCore::ContentExtensions::loadRule):
        (WebCore::ContentExtensions::loadEncodedRules):
        (WebCore::ContentExtensions::parseRuleList):
        * contentextensions/ContentExtensionParser.h:

2021-11-18  Chris Dumez  <cdumez@apple.com>

        Unreviewed build fix.

        * Modules/webxr/XRHandJoint.h:

2021-11-18  Simon Fraser  <simon.fraser@apple.com>

        Teach WheelEventTestMonitor about scroll animations
        https://bugs.webkit.org/show_bug.cgi?id=233296

        Reviewed by Tim Horton.

        There was no way for a test to wait for a scroll animation to finish, so enhance 
        WheelEventTestMonitor to know about scroll animations.

        ScrollAnimationInProgress should probably subsume the RubberbandInProgress and
        ScrollSnapInProgress reasons, but those are left alone for now.

        * page/WheelEventTestMonitor.cpp:
        (WebCore::operator<<):
        * page/WheelEventTestMonitor.h:
        * platform/ScrollingEffectsController.cpp:
        (WebCore::ScrollingEffectsController::startScrollSnapAnimation):
        (WebCore::ScrollingEffectsController::stopScrollSnapAnimation):
        (WebCore::ScrollingEffectsController::scrollAnimationWillStart):
        (WebCore::ScrollingEffectsController::scrollAnimationDidEnd):
        (WebCore::ScrollingEffectsController::startDeferringWheelEventTestCompletion):
        (WebCore::ScrollingEffectsController::stopDeferringWheelEventTestCompletion):
        * platform/ScrollingEffectsController.h:
        * platform/mac/ScrollingEffectsController.mm:
        (WebCore::ScrollingEffectsController::scheduleStatelessScrollSnap):
        (WebCore::ScrollingEffectsController::startDeferringWheelEventTestCompletionDueToScrollSnapping): Deleted.
        (WebCore::ScrollingEffectsController::stopDeferringWheelEventTestCompletionDueToScrollSnapping): Deleted.

2021-11-18  Chris Dumez  <cdumez@apple.com>

        Unreviewed, fix Linux build after r286025.

        * page/linux/ResourceUsageThreadLinux.cpp:
        (WebCore::ResourceUsageThread::platformCollectCPUData):

2021-11-18  Chris Dumez  <cdumez@apple.com>

        Port call sites to ScriptExecutionContext::identifier() and drop ScriptExecutionContext::contextIdentifier()
        https://bugs.webkit.org/show_bug.cgi?id=233323

        Reviewed by Geoffrey Garen.

        Port call sites to ScriptExecutionContext::identifier() and drop ScriptExecutionContext::contextIdentifier() alias.

        * Modules/mediacapabilities/MediaCapabilities.cpp:
        (WebCore::MediaCapabilities::decodingInfo):
        (WebCore::MediaCapabilities::encodingInfo):
        * Modules/mediastream/RTCDataChannel.cpp:
        (WebCore::RTCDataChannel::create):
        (WebCore::m_contextIdentifier):
        * Modules/mediastream/RTCRtpSFrameTransform.cpp:
        (WebCore::RTCRtpSFrameTransform::initializeTransformer):
        (WebCore::RTCRtpSFrameTransform::createStreams):
        * crypto/CryptoAlgorithm.cpp:
        (WebCore::dispatchAlgorithmOperation):
        * crypto/algorithms/CryptoAlgorithmECDH.cpp:
        (WebCore::CryptoAlgorithmECDH::deriveBits):
        * crypto/algorithms/CryptoAlgorithmSHA1.cpp:
        (WebCore::CryptoAlgorithmSHA1::digest):
        * crypto/algorithms/CryptoAlgorithmSHA224.cpp:
        (WebCore::CryptoAlgorithmSHA224::digest):
        * crypto/algorithms/CryptoAlgorithmSHA256.cpp:
        (WebCore::CryptoAlgorithmSHA256::digest):
        * crypto/algorithms/CryptoAlgorithmSHA384.cpp:
        (WebCore::CryptoAlgorithmSHA384::digest):
        * crypto/algorithms/CryptoAlgorithmSHA512.cpp:
        (WebCore::CryptoAlgorithmSHA512::digest):
        * crypto/mac/CryptoKeyRSAMac.cpp:
        (WebCore::CryptoKeyRSA::generatePair):
        * dom/BroadcastChannel.cpp:
        (WebCore::BroadcastChannel::MainThreadBridge::registerChannel):
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::ScriptExecutionContext):
        (WebCore::ScriptExecutionContext::removeFromContextsMap):
        (WebCore::ScriptExecutionContext::~ScriptExecutionContext):
        * dom/ScriptExecutionContext.h:
        (WebCore::ScriptExecutionContext::identifier const):
        (WebCore::ScriptExecutionContext::contextIdentifier const): Deleted.
        * workers/WorkerGlobalScope.cpp:
        (WebCore::m_credentials):
        (WebCore::WorkerGlobalScope::~WorkerGlobalScope):

2021-11-18  Alan Bujtas  <zalan@apple.com>

        [IFC][Integration] Switching line layout path should invalidate preferred width
        https://bugs.webkit.org/show_bug.cgi?id=233324

        Reviewed by Antti Koivisto.

        Since we don't propagate intrinsic width values between the line layout codepaths, switching
        should invalidate these dirty bits.

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::invalidateLineLayoutPath):

2021-11-18  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] [Live Text] Avoid analyzing images in editable content
        https://bugs.webkit.org/show_bug.cgi?id=233317

        Reviewed by Megan Gardner.

        Make macOS Live Text behavior consistent with iOS, and avoid automatically triggering text recognition (Live
        Text) when hovering over images in editable content. In addition to platform consistency, this also allows us to
        avoid handling both image service controls and image overlay content inside editable image elements in Mail
        compose.

        Test: fast/images/text-recognition/mac/text-recognition-candidates.html

        * page/EventHandler.cpp:
        (WebCore::EventHandler::textRecognitionCandidateElement const):

        Add the editability check here and return null.

        * page/EventHandler.h:

        Drive-by code cleanup -- move `textRecognitionCandidateElement` behind the `ENABLE(IMAGE_ANALYSIS)` compile-time
        flag, since it's only used from image analysis code.

        * testing/Internals.cpp:
        (WebCore::Internals::textRecognitionCandidate const):

        Add an internal testing hook to query the current text recognition candidate element (i.e. a suitable image that
        is being hovered, or otherwise null).

        * testing/Internals.h:
        * testing/Internals.idl:

2021-11-18  Antoine Quint  <graouts@webkit.org>

        [Model] add support for getting and setting the camera
        https://bugs.webkit.org/show_bug.cgi?id=233265
        <rdar://problem/85426290>

        Reviewed by Darin Adler.

        We add two new promise-based methods to the HTMLModelElement IDL to access and set the camera:
        getCamera() and setCamera(). The camera is represented by a new HTMLModelElementCamera dictionary
        which has yaw, pitch and scale members.

        * CMakeLists.txt:
        * Headers.cmake:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/model-element/HTMLModelElement.cpp:
        (WebCore::HTMLModelElement::getCamera):
        (WebCore::HTMLModelElement::setCamera):
        * Modules/model-element/HTMLModelElement.h:
        * Modules/model-element/HTMLModelElement.idl:
        * Modules/model-element/HTMLModelElementCamera.h: Copied from Source/WebCore/Modules/model-element/HTMLModelElement.idl.
        (WebCore::HTMLModelElementCamera::encode const):
        (WebCore::HTMLModelElementCamera::decode):
        * Modules/model-element/HTMLModelElementCamera.idl: Copied from Source/WebCore/Modules/model-element/HTMLModelElement.idl.
        * Modules/model-element/ModelPlayer.h:
        * Modules/model-element/dummy/DummyModelPlayer.cpp:
        (WebCore::DummyModelPlayer::getCamera):
        (WebCore::DummyModelPlayer::setCamera):
        * Modules/model-element/dummy/DummyModelPlayer.h:
        * Modules/model-element/scenekit/SceneKitModelPlayer.h:
        * Modules/model-element/scenekit/SceneKitModelPlayer.mm:
        (WebCore::SceneKitModelPlayer::getCamera):
        (WebCore::SceneKitModelPlayer::setCamera):
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/EmptyClients.cpp:
        (WebCore::EmptyChromeClient::takeModelElementFullscreen const): Deleted.
        * loader/EmptyClients.h:
        * page/ChromeClient.h:
        (WebCore::ChromeClient::takeModelElementFullscreen const): Deleted.

2021-11-18  David Kilzer  <ddkilzer@apple.com>

        Add missing dependencies for <wtf/Platform.h> when generating derived sources
        <https://webkit.org/b/233304>
        <rdar://problem/85533245>

        Reviewed by Darin Adler.

        * WebCore.xcodeproj/project.pbxproj:
        (Derived Sources : Generate Derived Sources):
        - Add an input dependency on the script run from the build phase
          script.

        * DerivedSources-input.xcfilelist:
        - Update after changes to DerivedSoures.make.  WebKit headers
          included by <wtf/Platform.h> are now listed.
        * DerivedSources.make:
        (platform_h_compiler_command): Add.
        (FEATURE_AND_PLATFORM_DEFINES):
        - Extract compiler command into a call routine for reuse.
        (PLATFORM_HEADER_DIR): Add.
        (PLATFORM_HEADER_DEPENDENCIES): Add.
        (FEATURE_AND_PLATFORM_DEFINE_DEPENDENCIES):
        - Generate a makefile dependency list for <wtf/Platform.h>, then
          filter it to list only WebKit project headers.

2021-11-18  Christopher Reid  <c29reid@uwaterloo.ca>

        [Win] Build fix after r285991
        https://bugs.webkit.org/show_bug.cgi?id=233321

        Unreviewed build fix.

        * accessibility/win/AXObjectCacheWin.cpp:

2021-11-18  Chris Dumez  <cdumez@apple.com>

        Drop ServiceWorkerClientIdentifier / DocumentIdentifier and use ScriptExecutionContextIdentifier instead
        https://bugs.webkit.org/show_bug.cgi?id=233288

        Reviewed by Darin Adler.

        Drop ServiceWorkerClientIdentifier / DocumentIdentifier and use ScriptExecutionContextIdentifier instead.

        We need to generic identifier type to identify script execution contexts globally. This patch augments
        ScriptExecutionContextIdentifier with a process identifier to make it app-global, and then gets rid of
        ServiceWorkerClientIdentifier & DocumentIdentifier (which become obsolete).

        This is useful for Web Lock API support as we need a clientId that is consistent between the Web Lock
        API and the service worker API (tested by imported/w3c/web-platform-tests/web-locks//clientids.tentative.https.html).
        The clientId in service workers was using the ServiceWorkerClientIdentifier type, which made little
        sense to use for the Web Lock API given its name.

        * Headers.cmake:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::addToDocumentsMap):
        (WebCore::Document::removeFromDocumentsMap):
        (WebCore::Document::setServiceWorkerConnection):
        * dom/Document.h:
        (WebCore::Document::identifier const): Deleted.
        * dom/ElementContext.h:
        (WebCore::ElementContext::decode):
        * dom/ScriptElement.h:
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::ScriptExecutionContext):
        (WebCore::ScriptExecutionContext::removeFromContextsMap):
        (WebCore::ScriptExecutionContext::~ScriptExecutionContext):
        (WebCore::ScriptExecutionContext::contextIdentifier const): Deleted.
        * dom/ScriptExecutionContext.h:
        (WebCore::ScriptExecutionContext::contextIdentifier const):
        (WebCore::ScriptExecutionContext::identifier const):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::fromTemporaryDocumentIdentifier):
        (WebCore::DocumentLoader::loadMainResource):
        * loader/DocumentLoader.h:
        * loader/FetchOptions.h:
        (WebCore::FetchOptions::encode const):
        (WebCore::FetchOptions::decode):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::prepareFetch):
        * loader/cache/CachedResourceRequest.cpp:
        (WebCore::CachedResourceRequest::setClientIdentifierIfNeeded):
        * loader/cache/CachedResourceRequest.h:
        * page/mac/PageMac.mm:
        (WebCore::Page::platformInitialize):
        * platform/DocumentIdentifier.h: Removed.
        (): Deleted.
        * platform/ProcessQualified.h:
        (WebCore::ProcessQualified::generateThreadSafe):
        (WebCore::ProcessQualified::generate):
        (WebCore::ProcessQualified::toString const):
        (WebCore::ProcessQualified<T>::encode const):
        (WebCore::ProcessQualified<T>::decode):
        * platform/ScriptExecutionContextIdentifier.h:
        * platform/mediastream/libwebrtc/LibWebRTCProvider.cpp:
        (WebCore::LibWebRTCProvider::createPeerConnection):
        * platform/mediastream/libwebrtc/LibWebRTCProvider.h:
        * testing/Internals.cpp:
        (WebCore::Internals::documentIdentifier const):
        (WebCore::Internals::isDocumentAlive const):
        (WebCore::Internals::serviceWorkerClientIdentifier const):
        * workers/service/SWClientConnection.cpp:
        (WebCore::dispatchToContextThreadIfNecessary):
        (WebCore::SWClientConnection::scheduleJob):
        (WebCore::SWClientConnection::postMessageToServiceWorkerClient):
        (WebCore::SWClientConnection::notifyClientsOfControllerChange):
        (WebCore::SWClientConnection::registerServiceWorkerClients):
        * workers/service/SWClientConnection.h:
        * workers/service/ServiceWorker.cpp:
        (WebCore::ServiceWorker::postMessage):
        * workers/service/ServiceWorkerClient.h:
        * workers/service/ServiceWorkerClientData.cpp:
        (WebCore::ServiceWorkerClientData::from):
        * workers/service/ServiceWorkerClientData.h:
        (WebCore::ServiceWorkerClientData::decode):
        * workers/service/ServiceWorkerClientIdentifier.cpp: Removed.
        (WebCore::ServiceWorkerClientIdentifier::fromString): Deleted.
        * workers/service/ServiceWorkerClientIdentifier.h: Removed.
        (WebCore::ServiceWorkerClientIdentifier::toString const): Deleted.
        (WebCore::operator==): Deleted.
        (WebCore::ServiceWorkerClientIdentifier::encode const): Deleted.
        (WebCore::ServiceWorkerClientIdentifier::decode): Deleted.
        (WebCore::ServiceWorkerClientIdentifier::hash const): Deleted.
        (WebCore::ServiceWorkerClientIdentifierHash::hash): Deleted.
        (WebCore::ServiceWorkerClientIdentifierHash::equal): Deleted.
        (WTF::HashTraits<WebCore::ServiceWorkerClientIdentifier>::emptyValue): Deleted.
        (WTF::HashTraits<WebCore::ServiceWorkerClientIdentifier>::constructDeletedValue): Deleted.
        (WTF::HashTraits<WebCore::ServiceWorkerClientIdentifier>::isDeletedValue): Deleted.
        * workers/service/ServiceWorkerClients.cpp:
        (WebCore::scriptExecutionContextIdentifierFromString):
        (WebCore::ServiceWorkerClients::get):
        * workers/service/ServiceWorkerClients.h:
        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::contextIdentifier):
        * workers/service/ServiceWorkerContainer.h:
        * workers/service/ServiceWorkerContextData.h:
        (WebCore::ServiceWorkerContextData::decode):
        * workers/service/ServiceWorkerGlobalScope.cpp:
        (WebCore::ServiceWorkerGlobalScope::serviceWorkerPage):
        (WebCore::ServiceWorkerGlobalScope::serviceWorkerClient):
        * workers/service/ServiceWorkerGlobalScope.h:
        * workers/service/ServiceWorkerJob.h:
        (WebCore::ServiceWorkerJob::contextIdentifier):
        * workers/service/ServiceWorkerJobClient.h:
        * workers/service/ServiceWorkerJobData.cpp:
        (WebCore::serviceWorkerOrClientIdentifier):
        (WebCore::ServiceWorkerJobData::ServiceWorkerJobData):
        (WebCore::ServiceWorkerJobData::serviceWorkerPageIdentifier const):
        * workers/service/ServiceWorkerJobData.h:
        * workers/service/ServiceWorkerTypes.h:
        * workers/service/WorkerSWClientConnection.cpp:
        (WebCore::WorkerSWClientConnection::unregisterServiceWorkerClient):
        (WebCore::WorkerSWClientConnection::scheduleJob):
        (WebCore::WorkerSWClientConnection::scheduleUnregisterJobInServer):
        * workers/service/WorkerSWClientConnection.h:
        * workers/service/context/SWContextManager.cpp:
        * workers/service/context/SWContextManager.h:
        * workers/service/context/ServiceWorkerFetch.cpp:
        (WebCore::ServiceWorkerFetch::dispatchFetchEvent):
        * workers/service/context/ServiceWorkerFetch.h:
        * workers/service/context/ServiceWorkerThread.cpp:
        (WebCore::ServiceWorkerThread::queueTaskToFireFetchEvent):
        * workers/service/context/ServiceWorkerThread.h:
        * workers/service/context/ServiceWorkerThreadProxy.cpp:
        (WebCore::ServiceWorkerThreadProxy::startFetch):
        * workers/service/context/ServiceWorkerThreadProxy.h:
        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::serviceWorkerClientWithOriginByID const):
        (WebCore::SWServer::scheduleUnregisterJob):
        (WebCore::SWServer::updateWorker):
        (WebCore::SWServer::registerServiceWorkerClient):
        (WebCore::SWServer::unregisterServiceWorkerClient):
        (WebCore::SWServer::createContextConnection):
        * workers/service/server/SWServer.h:
        * workers/service/server/SWServerRegistration.cpp:
        (WebCore::SWServerRegistration::SWServerRegistration):
        (WebCore::SWServerRegistration::addClientUsingRegistration):
        (WebCore::SWServerRegistration::removeClientUsingRegistration):
        (WebCore::SWServerRegistration::controlClient):
        * workers/service/server/SWServerRegistration.h:
        (WebCore::SWServerRegistration::serviceWorkerPageIdentifier const):
        * workers/service/server/SWServerToContextConnection.cpp:
        (WebCore::SWServerToContextConnection::SWServerToContextConnection):
        (WebCore::SWServerToContextConnection::findClientByIdentifier):
        * workers/service/server/SWServerToContextConnection.h:
        (WebCore::SWServerToContextConnection::serviceWorkerPageIdentifier const):
        * workers/service/server/SWServerWorker.cpp:
        (WebCore::SWServerWorker::findClientByIdentifier const):
        (WebCore::SWServerWorker::serviceWorkerPageIdentifier const):
        * workers/service/server/SWServerWorker.h:

2021-11-18  Yoshiaki Jitsukawa  <yoshiaki.jitsukawa@sony.com>

        Implement JPEG XL image decoder using libjxl
        https://bugs.webkit.org/show_bug.cgi?id=233113

        Reviewed by Michael Catanzaro.

        This patch introduces the initial version of JPEG XL image decoder.
        JPEG XL is a royalty-free raster-graphics file format that supports
        both lossy and lossless compression and is experimentally supported by
        Chrome, FireFox, and Edge.
        The image decoder implemented by this patch uses libjxl, a reference
        implementation of JPEG XL decoder (and encoder). JPEG XL animations
        will be supported later.

        Tests: LayoutTests\fast\images\jpegxl-as-image.html
               LayoutTests\fast\images\jpegxl-image-decoding.html

        * platform/ImageDecoders.cmake: Add JPEGXLImageDecoder.cpp if
        USE(JPEGXL) is turned on.
        * platform/MIMETypeRegistry.cpp: JPEG XL mime type added.
        * platform/image-decoders/ScalableImageDecoder.cpp: JPEG XL signature
        added.
        * platform/image-decoders/jpegxl/JPEGXLImageDecoder.cpp: Added.
        * platform/image-decoders/jpegxl/JPEGXLImageDecoder.h: Added.
        * platform/win/MIMETypeRegistryWin.cpp: The .jxl file extension added.

2021-11-18  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Should not always keep the entire continuous content when the line is empty
        https://bugs.webkit.org/show_bug.cgi?id=233303

        Reviewed by Antti Koivisto.

        The rule of "let's keep the first glyph on the line" should take into account when
        the continuous content has a series of runs e.g [X][X][X] where each 'X' represents an individual inline text item.
        In such cases we should just return the first text run as the trailing inline item with 'break' action.
        (This patch is in preparation for enabling IFC's preferred width computation.)

        * layout/formattingContexts/inline/InlineContentBreaker.cpp:
        (WebCore::Layout::InlineContentBreaker::processOverflowingContent const):
        * rendering/RenderBlockFlow.cpp:

2021-11-18  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Inline boxes with unbreakable decoration can produce a breaking position with no trailing run
        https://bugs.webkit.org/show_bug.cgi?id=233302

        Reviewed by Antti Koivisto.

        This is a rare case when the overflowing run is the first inline box start with unbreakable decoration while its content is breakable.
        e.g.
        <div style="width: 0xp"><span style="border: solid; word-break: break-word;">breakable</span></div>

          While the overflowing run (inline box start) is unbreakable (border), we find the first breaking position right between
          the <span> (inline box start) and its content (inline text item).
          However we also don't want to separate the content from its parent inline box (i.e. should not be breaking between these 2 inline items)
          so we start searching for a trailing run candidate by looking at the previous set of runs.
          Now if this <span> is the first run in this set we won't find a trailing run and we should just return the breaking position with no trailing content.

        Test: fast/inline/inline-box-with-unbreakable-decoration-and-word-break.html

        * layout/formattingContexts/inline/InlineContentBreaker.cpp:
        (WebCore::Layout::InlineContentBreaker::tryBreakingNextOverflowingRuns const):

2021-11-18  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Glyphs that conditionally hang are taken into account for max-content only
        https://bugs.webkit.org/show_bug.cgi?id=233287

        Reviewed by Antti Koivisto.

        Remove hanging glyphs for min-content only. It simply means that content followed by (pre-wrap) whitespace may make shrink wrapped lines wider. 

        * layout/formattingContexts/inline/InlineLineBuilder.cpp:
        (WebCore::Layout::LineBuilder::close):
        * rendering/RenderBlockFlow.cpp:

2021-11-18  Ziran Sun  <zsun@igalia.com>

        Images as grid items should use the overridingLogicalWidth when defined to compute the logical Height
        https://bugs.webkit.org/show_bug.cgi?id=228022

        This is a re-land of r280078 and r282008. r280078 has caused a crash. Details on the crash test case is
        at https://bugs.webkit.org/show_bug.cgi?id=232922. The reason for the crash is that, when recomputing the
        intrinsic width we need to recompute the intrinsic width of the caller, which is the grid item, rather than
        the grid in this case.
        
        This patch addresses the original issue and the cause for the crash.

        When computing the logical height using an intrinsic aspect ratio, RenderReplaced should use the
        overridingLogicalWidth whenever defined just as how it does for flex items. This change is to
        replace the use of intrinsic (non-stretched) logical width in current code with the overridingLogicalWidth.

        The current code doesn't set overringLogicalWidth while the width changes while stretches along Row Axis.
        This change adds the logic in.

        Reviewed by Javier Fernandez.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::applyStretchAlignmentToChildIfNeeded):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::computeReplacedLogicalHeight const):

2021-10-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][a11y] Add implementation of value interface when building with ATSPI
        https://bugs.webkit.org/show_bug.cgi?id=232300

        Reviewed by Adrian Perez de Castro.

        * SourcesGTK.txt:
        * accessibility/atspi/AXObjectCacheAtspi.cpp:
        (WebCore::AXObjectCache::postPlatformNotification):
        * accessibility/atspi/AccessibilityAtspi.cpp:
        (WebCore::AccessibilityAtspi::valueChanged):
        * accessibility/atspi/AccessibilityAtspi.h:
        * accessibility/atspi/AccessibilityObjectAtspi.cpp:
        (WebCore::AccessibilityObjectAtspi::interfacesForObject):
        (WebCore::AccessibilityObjectAtspi::path):
        (WebCore::AccessibilityObjectAtspi::buildInterfaces const):
        * accessibility/atspi/AccessibilityObjectAtspi.h:
        * accessibility/atspi/AccessibilityObjectValueAtspi.cpp: Added.
        (WebCore::AccessibilityObjectAtspi::currentValue const):
        (WebCore::AccessibilityObjectAtspi::setCurrentValue):
        (WebCore::AccessibilityObjectAtspi::minimumValue const):
        (WebCore::AccessibilityObjectAtspi::maximumValue const):
        (WebCore::AccessibilityObjectAtspi::minimumIncrement const):
        (WebCore::AccessibilityObjectAtspi::valueChanged):
        * accessibility/atspi/AccessibilityRootAtspi.cpp:

2021-10-25  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][a11y] Add initial WTR accessibility support when building with ATSPI
        https://bugs.webkit.org/show_bug.cgi?id=230259

        Reviewed by Adrian Perez de Castro.

        Export symbols required by WTR.

        * accessibility/atspi/AccessibilityAtspi.cpp:
        (WebCore::AccessibilityAtspi::runLoop const):
        * accessibility/atspi/AccessibilityAtspi.h:
        * accessibility/atspi/AccessibilityObjectAtspi.h:
        * accessibility/atspi/AccessibilityRootAtspi.cpp:
        (WebCore::AccessibilityRootAtspi::focusedObject const):
        * accessibility/atspi/AccessibilityRootAtspi.h:

2021-11-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK build with ATSPI enaled after r285904

        * accessibility/atspi/AccessibilityObjectTextAtspi.cpp:
        (WebCore::AccessibilityObjectAtspi::textAttributes const):

2021-11-18  Youenn Fablet  <youenn@apple.com>

        MediaPlayerAVFoundation should support rvfc
        https://bugs.webkit.org/show_bug.cgi?id=231945
        <rdar://problem/84657372>

        Reviewed by Eric Carlson.

        Add API to start/stop gathering metadata.
        This goes from video element down to media player private.
        Conversely, add a callback to get the metadata, including the pixel buffer.

        Implement support in MediaPlayerPrivateAVFoundationObjC by adding a specific timeline observer.
        We reuse the same video output and the same pixel buffer as when painting the video element in the canvas.
        To make sure painting in a canvas does not have side effects with gathering video metadata, we do not update the pixel buffer
        when painting on a canvas in case video metadata is gathered.
        Instead, we consider that pixel buffer is as up to date as possible in that case.
        To make it work in WK1, we implement the synchronous video frame callback getter.

        Round the millisecond now time given to the callback, like done for RAF.

        Covered by enabled tests.

        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLMediaElement.h:
        * html/HTMLVideoElement.cpp:
        * html/HTMLVideoElement.h:
        * platform/VideoFrameMetadata.h:
        * platform/cocoa/CVPixelBufferRef.h: Added.
        * platform/graphics/MediaPlayer.cpp:
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        * platform/graphics/cv/PixelBufferConformerCV.h:

2021-11-18  Chris Lord  <clord@igalia.com>

        [GLIB] twitch.tv forces synchronous scrolling
        https://bugs.webkit.org/show_bug.cgi?id=232376
        <rdar://problem/85247010>

        Reviewed by Simon Fraser.

        Make sure to keep the userScrollInProgress flag in sync for scrolling
        nodes in the nicosia backend and add a utility function to determine
        if user scroll is in progress for a given wheel event. This lets
        EventDispatcher dispatch events asynchronously in that case.

        No new tests, exercised by existing tests.

        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::isUserScrollInProgressAtEventLocation):
        * page/scrolling/ScrollingTree.h:
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::isUserScrollInProgress const):
        (WebCore::ScrollingTreeScrollingNode::isUserScrollProgress const): Deleted.
        * page/scrolling/ScrollingTreeScrollingNode.h:
        * page/scrolling/nicosia/ScrollingTreeScrollingNodeDelegateNicosia.cpp:
        (WebCore::ScrollingTreeScrollingNodeDelegateNicosia::handleWheelEvent):

2021-11-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        AX: Use ObjectIdentifier for AXID
        https://bugs.webkit.org/show_bug.cgi?id=233248
        <rdar://problem/85497145>

        Reviewed by Andres Gonzalez.

        * accessibility/AXLogger.cpp:
        (WebCore::operator<<):
        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::setIsolatedTreeFocusedObject):
        (WebCore::AXObjectCache::get):
        (WebCore::AXObjectCache::cacheAndInitializeWrapper):
        (WebCore::AXObjectCache::remove):
        (WebCore::AXObjectCache::platformGenerateAXID const):
        (WebCore::AXObjectCache::objectsForIDs const):
        (WebCore::AXObjectCache::updateIsolatedTree):
        * accessibility/AXObjectCache.h:
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityObjectInterface.h:
        (WebCore::AXCoreObject::detach):
        * accessibility/atspi/AccessibilityObjectAtspi.cpp:
        * accessibility/isolatedtree/AXIsolatedObject.cpp:
        (WebCore::AXIsolatedObject::AXIsolatedObject):
        (WebCore::AXIsolatedObject::associatedAXObject const):
        (WebCore::AXIsolatedObject::detachFromParent):
        (WebCore::AXIsolatedObject::isDetachedFromParent):
        (WebCore::AXIsolatedObject::cellForColumnAndRow):
        (WebCore::AXIsolatedObject::accessibilityHitTest const):
        (WebCore::AXIsolatedObject::objectAttributeValue const):
        * accessibility/isolatedtree/AXIsolatedObject.h:
        * accessibility/isolatedtree/AXIsolatedTree.cpp:
        (WebCore::AXIsolatedTree::nodeForID const):
        (WebCore::AXIsolatedTree::idsForObjects const):
        (WebCore::AXIsolatedTree::updateChildrenIDs):
        (WebCore::AXIsolatedTree::generateSubtree):
        (WebCore::AXIsolatedTree::createSubtree):
        (WebCore::AXIsolatedTree::updateNode):
        (WebCore::AXIsolatedTree::updateChildren):
        (WebCore::AXIsolatedTree::focusedNode):
        (WebCore::AXIsolatedTree::setFocusedNodeID):
        (WebCore::AXIsolatedTree::removeNode):
        (WebCore::AXIsolatedTree::removeSubtree):
        (WebCore::AXIsolatedTree::applyPendingChanges):
        * accessibility/isolatedtree/AXIsolatedTree.h:
        (WebCore::AXIsolatedTree::WTF_GUARDED_BY_LOCK): Deleted.
        * accessibility/mac/WebAccessibilityObjectWrapperBase.mm:
        (-[WebAccessibilityObjectWrapperBase attachAXObject:]):
        (-[WebAccessibilityObjectWrapperBase attachIsolatedObject:]):
        (-[WebAccessibilityObjectWrapperBase detach]):
        (-[WebAccessibilityObjectWrapperBase detachIsolatedObject:]):
        * accessibility/win/AXObjectCacheWin.cpp:
        (WebCore::AXObjectCache::postPlatformNotification):
        (WebCore::AXObjectCache::platformGenerateAXID const):

2021-11-18  Kimmo Kinnunen  <kkinnunen@apple.com>

        RemoteGraphicsContextGLProxyBase should not have platform-specific implementations
        https://bugs.webkit.org/show_bug.cgi?id=233175

        Reviewed by Antti Koivisto.

        Move platform-specific code from RemoteGraphicsContextGLProxyBase to
        WebKit::RemoteGraphicsContextGLProxyCocoa and WebKit::RemoteGraphicsContextGLProxyWC.
        The platform-specific code is trivial and anyway used by the WebKit side concrete classes.

        No new tests, refactor.

        * PlatformWinCairo.cmake:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/RemoteGraphicsContextGLProxyBase.cpp:
        (WebCore::RemoteGraphicsContextGLProxyBase::RemoteGraphicsContextGLProxyBase):
        (WebCore::RemoteGraphicsContextGLProxyBase::platformInitialize): Deleted.
        (WebCore::RemoteGraphicsContextGLProxyBase::platformLayer const): Deleted.
        (WebCore::RemoteGraphicsContextGLProxyBase::paintCompositedResultsToMediaSample): Deleted.
        * platform/graphics/RemoteGraphicsContextGLProxyBase.h:
        * platform/graphics/avfoundation/objc/MediaSampleAVFObjC.h:
        * platform/graphics/cocoa/RemoteGraphicsContextGLProxyBaseCocoa.mm: Removed.
        (WebCore::RemoteGraphicsContextGLProxyBase::platformInitialize): Deleted.
        (WebCore::RemoteGraphicsContextGLProxyBase::platformLayer const): Deleted.
        (WebCore::RemoteGraphicsContextGLProxyBase::asCV): Deleted.
        (WebCore::RemoteGraphicsContextGLProxyBase::paintCompositedResultsToMediaSample): Deleted.
        * platform/graphics/wc/RemoteGraphicsContextGLProxyBaseWC.cpp: Removed.
        (WebCore::RemoteGraphicsContextGLProxyBase::platformInitialize): Deleted.
        (WebCore::RemoteGraphicsContextGLProxyBase::platformLayer const): Deleted.
        (WebCore::RemoteGraphicsContextGLProxyBase::setPlatformLayer): Deleted.

2021-11-18  Ziran Sun  <zsun@igalia.com>

        [css-grid] Transfer size for grid item with an aspect-ratio and stretch alignment against the definite row
        https://bugs.webkit.org/show_bug.cgi?id=232987

        Reviewed by Javier Fernandez.

        For a grid item with an aspect-ratio, if it has stretch alignment against the definite row, it should
        try and resolve it if possible and transfer this size into the inline direction for the min/max content
        size. For the case that the grid width is content sized, we need to update the width before laying out
        the grid items. Since the min-content contribution of the grid item has changed based on the row sizes
        calculated in step 2 of sizing algorithm, we also need to repeat the sizing algorithm steps to update
        the width of the track sizes.

        * rendering/GridLayoutFunctions.cpp:
        (WebCore::GridLayoutFunctions::isAspectRatioBlockSizeDependentChild):
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::updateGridAreaForAspectRatioItems):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::needsPreferredWidthsRecalculation const):

2021-11-18 Antoine Quint  <graouts@webkit.org>

        [Model] [macOS] Add support for interaction on macOS
        https://bugs.webkit.org/show_bug.cgi?id=233105
        <rdar://problem/80079386>

        Reviewed by Wenson Hsieh.

        Capture mouse events after the mouse button is pressed over a <model> element,
        unless preventDefault() is called, and forward those events through ModelPlayer
        to the UI process.

        * Modules/model-element/HTMLModelElement.cpp:
        (WebCore::HTMLModelElement::defaultEventHandler):
        (WebCore::HTMLModelElement::dragDidStart):
        (WebCore::HTMLModelElement::dragDidChange):
        (WebCore::HTMLModelElement::dragDidEnd):
        * Modules/model-element/HTMLModelElement.h:
        * Modules/model-element/ModelPlayer.cpp:
        (WebCore::ModelPlayer::supportsMouseInteraction):
        * Modules/model-element/ModelPlayer.h:
        * Modules/model-element/dummy/DummyModelPlayer.cpp:
        (WebCore::DummyModelPlayer::handleMouseDown):
        (WebCore::DummyModelPlayer::handleMouseMove):
        (WebCore::DummyModelPlayer::handleMouseUp):
        * Modules/model-element/dummy/DummyModelPlayer.h:
        * Modules/model-element/scenekit/SceneKitModelPlayer.h:
        * Modules/model-element/scenekit/SceneKitModelPlayer.mm:
        (WebCore::SceneKitModelPlayer::handleMouseDown):
        (WebCore::SceneKitModelPlayer::handleMouseMove):
        (WebCore::SceneKitModelPlayer::handleMouseUp):

2021-11-17  Youenn Fablet  <youenn@apple.com>

        Audio Rate Gets Messed up With Safari WebRTC and Bluetooth Switching
        https://bugs.webkit.org/show_bug.cgi?id=232822
        <rdar://problem/85418545>

        Reviewed by Eric Carlson.

        We usually create the unit, start the unit and stop the unit.
        After that cycle, if we restart the unit, we expect the configuration to stay the same in WebProcess.
        But, in LocalAudioMediaStreamTrackRendererInternalUnit::stop, we were disposing the audio unit and recreating it if necesary in LocalAudioMediaStreamTrackRendererInternalUnit::start.
        If the sample rate changed, the new audio unit would use the new sample rate while WebProcess will use the old sample rate.
        To prevent this, we now always reuse the same description to initialize the audio unit.

        Manually tested.

        * platform/mediastream/cocoa/AudioMediaStreamTrackRendererInternalUnit.cpp:
        (WebCore::LocalAudioMediaStreamTrackRendererInternalUnit::createAudioUnitIfNeeded):

2021-11-17  Youenn Fablet  <youenn@apple.com>

        Add support for more rvfc metadata
        https://bugs.webkit.org/show_bug.cgi?id=233185

        Reviewed by Eric Carlson.

        Introduce VideoSampleMetadata that allows a RealtimeMediaSource to provide metadata for each video frame.
        Fill VideoSampleMetadata for each source (capture and WebRTC)
        Make use of VideoSampleMetadata in MediaPlayerPrivateMediaStreamAVFObjC to fill VideoFrameMetadata.
        Enhance MediaPlayerPrivateAVFoundationObjC to fill in the newly exposed metadata in VideoFrameMetadata.
        Update HTMLVideoElement to process the timestamp values as needed.

        Covered by existing tests.

        * Headers.cmake:
        * Modules/mediastream/CanvasCaptureMediaStreamTrack.cpp:
        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLVideoElement.cpp:
        * html/VideoFrameMetadata.idl:
        * platform/VideoSampleMetadata.h: Added.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        * platform/mediarecorder/MediaRecorderPrivateAVFImpl.cpp:
        * platform/mediarecorder/MediaRecorderPrivateAVFImpl.h:
        * platform/mediarecorder/MediaRecorderPrivateMock.cpp:
        * platform/mediarecorder/MediaRecorderPrivateMock.h:
        * platform/mediastream/RealtimeIncomingVideoSource.cpp:
        * platform/mediastream/RealtimeIncomingVideoSource.h:
        * platform/mediastream/RealtimeMediaSource.cpp:
        * platform/mediastream/RealtimeMediaSource.h:
        * platform/mediastream/RealtimeOutgoingVideoSource.h:
        * platform/mediastream/RealtimeVideoCaptureSource.cpp:
        * platform/mediastream/RealtimeVideoCaptureSource.h:
        * platform/mediastream/RealtimeVideoSource.cpp:
        * platform/mediastream/RealtimeVideoSource.h:
        * platform/mediastream/cocoa/DisplayCaptureSourceCocoa.cpp:
        * platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:
        * platform/mediastream/gstreamer/GStreamerVideoCaptureSource.cpp:
        * platform/mediastream/gstreamer/MockRealtimeVideoSourceGStreamer.cpp:
        * platform/mediastream/gstreamer/MockRealtimeVideoSourceGStreamer.h:
        * platform/mediastream/libwebrtc/gstreamer/RealtimeIncomingVideoSourceLibWebRTC.cpp:
        * platform/mediastream/libwebrtc/gstreamer/RealtimeOutgoingVideoSourceLibWebRTC.cpp:
        * platform/mediastream/libwebrtc/gstreamer/RealtimeOutgoingVideoSourceLibWebRTC.h:
        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        * platform/mediastream/mac/MockRealtimeVideoSourceMac.mm:
        * platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.mm:
        * platform/mediastream/mac/RealtimeOutgoingVideoSourceCocoa.cpp:
        * platform/mediastream/mac/RealtimeOutgoingVideoSourceCocoa.h:
        * testing/Internals.cpp:
        * testing/Internals.h:

2021-11-17  Ricky Mondello  <rmondello@apple.com>

        When an "autofilled and viewable" field becomes empty, turn "autofilled and viewable" off
        https://bugs.webkit.org/show_bug.cgi?id=233239

        Reviewed by Darin Adler.

        Test: fast/forms/input-autofilled-and-viewable.html

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setValueFromRenderer): Implement the fix.
        * testing/Internals.cpp:
        (WebCore::Internals::setValueFromRenderer): Added.
        * testing/Internals.h: Declare a member function.

2021-11-17  Alex Christensen  <achristensen@webkit.org>

        Implement most of redirect and modify-headers action types
        https://bugs.webkit.org/show_bug.cgi?id=233268

        Reviewed by Tim Hatcher.

        This implements modify-headers and redirect actions except for extension-path and regex-substitution variants of redirecting,
        which are big enough to be implemented in their own patch.  In order to enable these actions, the WKContentRuleList needs to
        be compiled with new SPI where you specify which schemes are allowed to be redirected to, and SPI in WKWebpagePreferences allows
        addition of a set of patterns to specify which URLs are allowed to be modified.  An empty set means no active actions are allowed,
        which is the default, whereas a null set means all active actions are allowed.

        I also made the parser a little bit stricter, such as only allowing valid ports, queries, and fragments.

        * Modules/websockets/WebSocketChannel.cpp:
        * contentextensions/ContentExtensionActions.cpp:
        (WebCore::ContentExtensions::ModifyHeadersAction::operator== const):
        (WebCore::ContentExtensions::ModifyHeadersAction::applyToRequest):
        (WebCore::ContentExtensions::ModifyHeadersAction::ModifyHeaderInfo::applyToRequest):
        (WebCore::ContentExtensions::RedirectAction::parse):
        (WebCore::ContentExtensions::RedirectAction::operator== const):
        (WebCore::ContentExtensions::RedirectAction::applyToRequest):
        (WebCore::ContentExtensions::RedirectAction::URLTransformAction::parse):
        (WebCore::ContentExtensions::RedirectAction::URLTransformAction::serialize const):
        (WebCore::ContentExtensions::RedirectAction::URLTransformAction::deserialize):
        (WebCore::ContentExtensions::RedirectAction::URLTransformAction::applyToURL const):
        (WebCore::ContentExtensions::RedirectAction::URLTransformAction::QueryTransform::applyToURL const):
        * contentextensions/ContentExtensionActions.h:
        (WebCore::ContentExtensions::VariantHasher::hash):
        (WebCore::ContentExtensions::VectorHasher::hash):
        (WTF::DefaultHash<WebCore::ContentExtensions::RedirectAction>::hash):
        (WTF::DefaultHash<WebCore::ContentExtensions::RedirectAction>::equal):
        (WTF::DefaultHash<WebCore::ContentExtensions::ModifyHeadersAction>::hash):
        (WTF::DefaultHash<WebCore::ContentExtensions::ModifyHeadersAction>::equal):
        * contentextensions/ContentExtensionCompiler.cpp:
        (WebCore::ContentExtensions::serializeActions):
        (WebCore::ContentExtensions::compileRuleList):
        * contentextensions/ContentExtensionError.cpp:
        (WebCore::ContentExtensions::contentExtensionErrorCategory):
        * contentextensions/ContentExtensionError.h:
        * contentextensions/ContentExtensionParser.cpp:
        (WebCore::ContentExtensions::loadAction):
        (WebCore::ContentExtensions::loadRule):
        (WebCore::ContentExtensions::loadEncodedRules):
        (WebCore::ContentExtensions::parseRuleList):
        * contentextensions/ContentExtensionParser.h:
        * contentextensions/ContentExtensionsBackend.cpp:
        (WebCore::ContentExtensions::ContentExtensionsBackend::processContentRuleListsForLoad):
        (WebCore::ContentExtensions::ContentExtensionsBackend::processContentRuleListsForPingLoad):
        (WebCore::ContentExtensions::applyResultsToRequest):
        * contentextensions/ContentRuleListResults.h:
        (WebCore::ContentRuleListResults::Summary::decode):
        * css/StyleSheetContents.cpp:
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::setActiveContentRuleListActionsPatterns):
        (WebCore::DocumentLoader::allowsActiveContentRuleListActionsForURL const):
        * loader/DocumentLoader.h:
        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::removeHTTPHeaderField):
        * platform/network/ResourceRequestBase.h:

2021-11-17  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Live Text] Plumb an identifier string through `ChromeClient::requestTextRecognition()`
        https://bugs.webkit.org/show_bug.cgi?id=233210

        Reviewed by Dean Jackson.

        See WebKit/ChangeLog for more details.

        * accessibility/AXImage.cpp:
        (WebCore::AXImage::imageOverlayElements):
        * page/ChromeClient.h:
        (WebCore::ChromeClient::requestTextRecognition):
        * page/ImageAnalysisQueue.cpp:
        (WebCore::ImageAnalysisQueue::resumeProcessing):
        * testing/Internals.cpp:
        (WebCore::Internals::requestTextRecognition):

2021-11-17  Takashi Komori  <Takashi.Komori@sony.com>

        [Curl] Remove unnecessary option setting
        https://bugs.webkit.org/show_bug.cgi?id=233249

        Reviewed by Fujii Hironori.

        Remove setting CURLPIPE_MULTIPLEX option.
        The option is enabled by default since curl 7.62.0 [1].

        [1] https://curl.se/libcurl/c/curl_multi_setopt.html

        No new tests, covered by existing tests.

        * platform/network/curl/CurlContext.cpp:
        (WebCore::CurlMultiHandle::CurlMultiHandle):

2021-11-17  John Wilander  <wilander@apple.com>

        PCM: Add capability for click destination to fire triggering event without cross-site requests to the click source
        https://bugs.webkit.org/show_bug.cgi?id=233173
        <rdar://79426605>

        Reviewed by Alex Christensen.

        This patch enables click destination sites a non-JavaScript way to fire triggering
        events without a requirement to make cross-site requests to source sites. This is
        referred to as a "same-site pixel API" and has been discussed in W3C Privacy CG:
        https://github.com/privacycg/private-click-measurement/issues/71

        The reason why some merchants want such an "API" is reluctance to deploy new
        JavaScript on their sites. In some industries it's even a compliance issue. Legacy
        "pixels" are however accepted and so a same-site "pixel" can work for them.

        Test: http/tests/privateClickMeasurement/triggering-event-with-attribution-source-through-fetch-keepalive.html

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::handleClick):
            This change is because of clarification in naming:
            - attributionReportSourceURL to attributionReportClickSourceURL
        * loader/PrivateClickMeasurement.cpp:
        (WebCore::PrivateClickMeasurement::parseAttributionRequestQuery):
            New function that parses out query string parameters.
        (WebCore::PrivateClickMeasurement::parseAttributionRequest):
            Now calls the new PrivateClickMeasurement::parseAttributionRequestQuery()
            which handles data coming in in query parameters, in this case
            the new parameter "attributionSource."
        (WebCore::PrivateClickMeasurement::attributionReportClickSourceURL const):
            New name.
        (WebCore::PrivateClickMeasurement::attributionReportClickDestinationURL const):
            New name.
        (WebCore::PrivateClickMeasurement::attributionReportJSON const):
            Now uses the constant privateClickMeasurementVersion.
        (WebCore::PrivateClickMeasurement::tokenSignatureJSON const):
            Now uses the constant privateClickMeasurementVersion.
        (WebCore::PrivateClickMeasurement::attributionReportSourceURL const): Deleted.
            Renamed attributionReportClickSourceURL.
        (WebCore::PrivateClickMeasurement::attributionReportAttributeOnURL const): Deleted.
            Renamed attributionReportClickDestinationURL.
        * loader/PrivateClickMeasurement.h:
        (WebCore::PrivateClickMeasurement::sourceSecretToken const):
            New name.
        (WebCore::PrivateClickMeasurement::AttributionTriggerData::encode const):
        (WebCore::PrivateClickMeasurement::AttributionTriggerData::decode):
            Encoding and decoding of the new field sourceRegistrableDomain.
        (WebCore::PrivateClickMeasurement::sourceUnlinkableToken const): Deleted.
            Renamed sourceSecretToken.
            Note that it was always the secret token used, just bad renaming earlier.

2021-11-17  Tim Horton  <timothy_horton@apple.com>

        Momentum animator: Short scrolls are too far, medium scrolls aren't far enough
        https://bugs.webkit.org/show_bug.cgi?id=233272
        <rdar://problem/85472653>

        Reviewed by Simon Fraser.

        * platform/mac/ScrollingEffectsController.mm:
        (WebCore::adjustedVelocity):
        (WebCore::ScrollingEffectsController::handleWheelEvent):
        Attempt to apply a empirically-derived curve to the initial velocity
        to fit the distance of a normal momentum scroll.

2021-11-17  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Introduce enum class IntrinsicWidthMode
        https://bugs.webkit.org/show_bug.cgi?id=233277

        Reviewed by Antti Koivisto.

        This is in preparation for being able to apply different glyph hanging behavior for min and max intrinsic width computation.

        * layout/formattingContexts/FormattingConstraints.h:
        * layout/formattingContexts/inline/InlineContentBreaker.cpp:
        (WebCore::Layout::InlineContentBreaker::InlineContentBreaker):
        * layout/formattingContexts/inline/InlineContentBreaker.h:
        (WebCore::Layout::InlineContentBreaker::isInIntrinsicWidthMode const):
        * layout/formattingContexts/inline/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::computedIntrinsicWidthConstraints):
        (WebCore::Layout::InlineFormattingContext::computedIntrinsicWidthForConstraint const):
        * layout/formattingContexts/inline/InlineFormattingContext.h:
        * layout/formattingContexts/inline/InlineLineBuilder.cpp:
        (WebCore::Layout::LineBuilder::LineBuilder):
        (WebCore::Layout::LineBuilder::computedIntrinsicWidth):
        (WebCore::Layout::LineBuilder::placeInlineContent):
        * layout/formattingContexts/inline/InlineLineBuilder.h:
        (WebCore::Layout::LineBuilder::intrinsicWidthMode const):
        (WebCore::Layout::LineBuilder::isInIntrinsicWidthMode const):

2021-11-17  Chris Dumez  <cdumez@apple.com>

        Web Locks API does get enabled in Service Workers when running layout tests
        https://bugs.webkit.org/show_bug.cgi?id=233273

        Reviewed by Geoffrey Garen.

        Use RuntimeEnabledFeatures to back the Web Lock API since regular settings do not get
        properly propagated to service workers at the moment.

        No new tests, rebaselined existing ones.

        * Modules/web-locks/NavigatorLocks.idl:
        * Modules/web-locks/WebLock.idl:
        * Modules/web-locks/WebLockManager.idl:
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setWebLocksAPIEnabled):
        (WebCore::RuntimeEnabledFeatures::webLocksAPIEnabled const):

2021-11-17  Tim Horton  <timothy_horton@apple.com>

        Momentum animator sometimes starts the animation at a very high velocity
        https://bugs.webkit.org/show_bug.cgi?id=233245
        <rdar://problem/85307115>

        Reviewed by Simon Fraser.

        * page/WheelEventDeltaFilter.cpp:
        (WebCore::WheelEventDeltaFilter::eventCopyWithVelocity const):
        * page/WheelEventDeltaFilter.h:
        * platform/PlatformWheelEvent.h:
        (WebCore::PlatformWheelEvent::copyWithVelocity const):
        Make it possible to ask the delta filter to only add velocity data without filtering deltas.
        We should later make ScrollingEffectsController talk directly to the
        WheelEventDeltaFilter to get the velocity, but that requires a great
        deal of scrolling thread plumbing.

        * page/mac/WheelEventDeltaFilterMac.h:
        * page/mac/WheelEventDeltaFilterMac.mm:
        (WebCore::WheelEventDeltaFilterMac::updateFromEvent):
        Factor updateCurrentVelocityFromEvent out.
        Update the current velocity for momentum begin phase events as well.

        (WebCore::WheelEventDeltaFilterMac::updateCurrentVelocityFromEvent):

        * platform/ScrollingEffectsController.h:
        * platform/mac/ScrollingEffectsController.mm:
        (WebCore::ScrollingEffectsController::handleWheelEvent):
        Start the momentum animation with the velocity provided by the momentum
        begin phase, instead of a potentially incorrect delta from an earlier change phase.

2021-11-17  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add a helper class to coordinate batch analysis of images
        https://bugs.webkit.org/show_bug.cgi?id=233075

        Reviewed by Dean Jackson.

        Introduce ImageAnalysisQueue, which will collect suitable image elements in the main document and coordinate
        image analysis tasks for up to some (fixed, but easily configurable) maximum number of simultaneous pending
        tasks. See below for more details.

        * Headers.cmake:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * page/ImageAnalysisQueue.cpp: Added.
        (WebCore::ImageAnalysisQueue::ImageAnalysisQueue):
        (WebCore::ImageAnalysisQueue::enqueueAllImages):

        Iterate through all image elements on the page with cached images, and add them as image analysis tasks to the
        task queue as long as they are not tiny. Automatically start processing queued tasks afterwards (see below).

        (WebCore::ImageAnalysisQueue::resumeProcessing):

        Run the main processing loop of the task queue; while there are tasks remaining, push up to 5 images to the
        client layer for image analysis at the same time, until there are no more queued tasks.

        (WebCore::ImageAnalysisQueue::clear):
        * page/ImageAnalysisQueue.h: Added.

        Introduce the new class.

        * page/Page.cpp:
        (WebCore::Page::imageOverlayController):

        Drive-by fix: `m_imageOverlayController` was being eagerly initialized here, despite the existence of both
        `imageOverlayControllerIfExists()` and `imageOverlayController()`. Fix this by lazily creating the
        ImageOverlayController instead.

        (WebCore::Page::imageAnalysisQueue):
        * page/Page.h:
        (WebCore::Page::imageAnalysisQueueIfExists):
        (WebCore::Page::imageOverlayController): Deleted.

2021-11-17  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Do not apply the "do not trim whitespace followed by br" legacy line layout quirk when computing the intrinsic widths
        https://bugs.webkit.org/show_bug.cgi?id=233262

        Reviewed by Antti Koivisto.

        While legacy line layout applies this quirk at line layout, the preferred width computation (totally different) codepath omits this quirk.

        * layout/formattingContexts/inline/InlineLine.cpp:
        (WebCore::Layout::Line::removeTrailingTrimmableContent):
        * layout/formattingContexts/inline/InlineLine.h:
        * layout/formattingContexts/inline/InlineLineBuilder.cpp:
        (WebCore::Layout::LineBuilder::close):

2021-11-17  Alan Bujtas  <zalan@apple.com>

        Address post review comment after r285925.

        Reviewed by Darin Adler.

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::tryComputePreferredWidthsUsingModernPath):

2021-11-17  Antti Koivisto  <antti@apple.com>

        InlineIterator::TextBox::offsetForPosition and positionForOffset should be layout path independent
        https://bugs.webkit.org/show_bug.cgi?id=233259

        Reviewed by Alan Bujtas.

        Remove imperfectly duplicated code.

        This also fixes editing/mac/input/caret-primary-bidi.html with IFC BiDi.

        * layout/integration/InlineIteratorBoxLegacyPath.h:
        (WebCore::InlineIterator::BoxLegacyPath::createTextRun const):
        (WebCore::InlineIterator::BoxLegacyPath::offsetForPosition const): Deleted.
        (WebCore::InlineIterator::BoxLegacyPath::positionForOffset const): Deleted.
        * layout/integration/InlineIteratorBoxModernPath.h:
        (WebCore::InlineIterator::BoxModernPath::createTextRun const):
        (WebCore::InlineIterator::BoxModernPath::offsetForPosition const): Deleted.
        (WebCore::InlineIterator::BoxModernPath::positionForOffset const): Deleted.
        * layout/integration/InlineIteratorTextBox.cpp:
        (WebCore::InlineIterator::TextBox::offsetForPosition const):
        (WebCore::InlineIterator::TextBox::positionForOffset const):
        * layout/integration/InlineIteratorTextBox.h:
        (WebCore::InlineIterator::TextBox::createTextRun const):
        (WebCore::InlineIterator::TextBox::offsetForPosition const): Deleted.
        (WebCore::InlineIterator::TextBox::positionForOffset const): Deleted.
        * rendering/LegacyInlineTextBox.cpp:
        (WebCore::LegacyInlineTextBox::placeEllipsisBox):
        (WebCore::LegacyInlineTextBox::offsetForPosition const): Deleted.
        (WebCore::LegacyInlineTextBox::positionForOffset const): Deleted.
        * rendering/LegacyInlineTextBox.h:
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::offsetForPosition const): Deleted.
        (WebCore::SVGInlineTextBox::positionForOffset const): Deleted.
        * rendering/svg/SVGInlineTextBox.h:

2021-11-17  Dean Jackson  <dino@apple.com>

        Add ModelDocument for directly showing content that can be handled by <model>
        https://bugs.webkit.org/show_bug.cgi?id=233057
        rdar://85265880

        Reviewed by Darin Adler.

        Add a new ModelDocument class that is created when we encounter a MIME-type that
        can be handled by the <model> element.

        Test: http/tests/model/model-document.html

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj: Add new files.

        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument): Create a ModelDocument when we
        see a MIME-type that <model> can support.

        * dom/Document.h: Add a new ModelDocumentClass which meant I also had to
        increase the sizeof DocumentClassFlags.
        (WebCore::Document::isModelDocument const): 

        * html/ModelDocument.cpp: Added.
        (WebCore::ModelDocumentParser::createDocumentStructure):
        (WebCore::ModelDocumentParser::appendBytes):
        (WebCore::ModelDocumentParser::finish):
        (WebCore::ModelDocument::ModelDocument):
        (WebCore::ModelDocument::createParser):
        * html/ModelDocument.h: Added.
        (isType):

        * platform/MIMETypeRegistry.cpp: Add isSupportedModelMIMEType and test for it
        in canShowMIMEType.
        (WebCore::MIMETypeRegistry::canShowMIMEType):
        (WebCore::MIMETypeRegistry::isSupportedModelMIMEType):
        * platform/MIMETypeRegistry.h:

2021-11-17  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r285934.
        https://bugs.webkit.org/show_bug.cgi?id=233260

        Broke Windows build

        Reverted changeset:

        "AX: Use ObjectIdentifier for AXID"
        https://bugs.webkit.org/show_bug.cgi?id=233248
        https://commits.webkit.org/r285934

2021-11-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        AX: Use ObjectIdentifier for AXID
        https://bugs.webkit.org/show_bug.cgi?id=233248

        Reviewed by Andres Gonzalez.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::setIsolatedTreeFocusedObject):
        (WebCore::AXObjectCache::get):
        (WebCore::AXObjectCache::cacheAndInitializeWrapper):
        (WebCore::AXObjectCache::platformGenerateAXID const):
        (WebCore::AXObjectCache::objectsForIDs const):
        (WebCore::AXObjectCache::updateIsolatedTree):
        * accessibility/AXObjectCache.h:
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityObjectInterface.h:
        (WebCore::AXCoreObject::detach):
        * accessibility/atspi/AccessibilityObjectAtspi.cpp:
        * accessibility/isolatedtree/AXIsolatedObject.cpp:
        (WebCore::AXIsolatedObject::AXIsolatedObject):
        (WebCore::AXIsolatedObject::associatedAXObject const):
        (WebCore::AXIsolatedObject::detachFromParent):
        (WebCore::AXIsolatedObject::isDetachedFromParent):
        (WebCore::AXIsolatedObject::cellForColumnAndRow):
        (WebCore::AXIsolatedObject::accessibilityHitTest const):
        (WebCore::AXIsolatedObject::objectAttributeValue const):
        * accessibility/isolatedtree/AXIsolatedObject.h:
        * accessibility/isolatedtree/AXIsolatedTree.cpp:
        (WebCore::AXIsolatedTree::nodeForID const):
        (WebCore::AXIsolatedTree::idsForObjects const):
        (WebCore::AXIsolatedTree::updateChildrenIDs):
        (WebCore::AXIsolatedTree::generateSubtree):
        (WebCore::AXIsolatedTree::createSubtree):
        (WebCore::AXIsolatedTree::updateNode):
        (WebCore::AXIsolatedTree::updateChildren):
        (WebCore::AXIsolatedTree::removeSubtree):
        (WebCore::AXIsolatedTree::applyPendingChanges):
        * accessibility/isolatedtree/AXIsolatedTree.h:
        (WebCore::AXIsolatedTree::WTF_GUARDED_BY_LOCK):
        * accessibility/mac/WebAccessibilityObjectWrapperBase.mm:
        (-[WebAccessibilityObjectWrapperBase attachAXObject:]):
        (-[WebAccessibilityObjectWrapperBase attachIsolatedObject:]):
        (-[WebAccessibilityObjectWrapperBase detach]):
        (-[WebAccessibilityObjectWrapperBase detachIsolatedObject:]):
        * accessibility/win/AXObjectCacheWin.cpp:
        (WebCore::AXObjectCache::platformGenerateAXID const):

2021-11-17  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Incorrect use of BreakWord with preferred width computation (it's a valid value for both WordBreak and OverflowWrap)
        https://bugs.webkit.org/show_bug.cgi?id=233258

        Reviewed by Antti Koivisto.

        This was caught by fast/text/word-break.html (note that this codepath is not yet enabled).

        * layout/formattingContexts/inline/InlineContentBreaker.cpp:
        (WebCore::Layout::InlineContentBreaker::wordBreakBehavior const):

2021-11-17  Andreu Botella  <andreu@andreubotella.com>

        Fix formatting and string literals in FileInputType.cpp
        https://bugs.webkit.org/show_bug.cgi?id=233229

        Reviewed by Darin Adler.

        This change uses the emptyString() and defaultMIMEType() functions rather than using string
        literals, fixes the coding style, and reverts an unnecessary change in the comments.

        This fixes code review suggestions from https://bugs.webkit.org/show_bug.cgi?id=185416 and
        https://bugs.webkit.org/show_bug.cgi?id=221549

        * html/FileInputType.cpp:
        (WebCore::FileInputType::appendFormData const):

2021-11-17  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Fix imported/w3c/web-platform-tests/css/css-text/white-space/white-space-intrinsic-size-013.html
        https://bugs.webkit.org/show_bug.cgi?id=233237

        Reviewed by Antti Koivisto.

        Do not take hanging glyphs into account when measuring content for preferred width.
        (Note that this patch is in preparation for enabling IFC preferred width computation)

        * layout/formattingContexts/inline/InlineLine.cpp:
        (WebCore::Layout::Line::removeHangingGlyphs):
        * layout/formattingContexts/inline/InlineLine.h:
        * layout/formattingContexts/inline/InlineLineBuilder.cpp:
        (WebCore::Layout::LineBuilder::close):

2021-11-17  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] break-word is not considered when calculating min-content intrinsic sizes.
        https://bugs.webkit.org/show_bug.cgi?id=233222

        Reviewed by Antti Koivisto.

        See https://drafts.csswg.org/css-text/#overflow-wrap-property

        * layout/formattingContexts/inline/InlineContentBreaker.cpp:
        (WebCore::Layout::InlineContentBreaker::InlineContentBreaker):
        (WebCore::Layout::InlineContentBreaker::wordBreakBehavior const):
        * layout/formattingContexts/inline/InlineContentBreaker.h:
        (WebCore::Layout::InlineContentBreaker::isIntrinsicWidthMode const):
        * layout/formattingContexts/inline/InlineLineBuilder.cpp:
        (WebCore::Layout::LineBuilder::placeInlineContent):
        (WebCore::Layout::LineBuilder::initialConstraintsForLine const):
        * layout/formattingContexts/inline/InlineLineBuilder.h:
        (WebCore::Layout::LineBuilder::isIntrinsicWidthMode const):

2021-11-17  Youenn Fablet  <youenn@apple.com>

        Increase CoreAudioCaptureSource capture verify timer to handle the case of device change
        https://bugs.webkit.org/show_bug.cgi?id=233250

        Reviewed by Eric Carlson.

        Previously, our capture verify timer was starting with 10 seconds to handle slow start up times, and decreasing to 2 seconds to be snappy.
        We are now sticking to 10 seconds to handle the case of changing of capture device while capturing.
        This happens on iOS for instance when going from builtin microphone to BT headset microphone.

        Manually tested.

        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:

2021-11-17  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] LineBuilder should drive the trailing whitespace collapsing/trimming
        https://bugs.webkit.org/show_bug.cgi?id=233233

        Reviewed by Antti Koivisto.

        This is in preparation for adding min/max intrinsic handling to trailing whitespace content.

        * layout/formattingContexts/inline/InlineLine.cpp:
        (WebCore::Layout::Line::visuallyCollapseHangingOverflowingWhitespace): Use spec term.
        (WebCore::Layout::Line::removeTrimmableContent): Deleted.
        (WebCore::Layout::Line::visuallyCollapseHangingOverflow): Deleted.
        * layout/formattingContexts/inline/InlineLine.h:
        * layout/formattingContexts/inline/InlineLineBuilder.cpp:
        (WebCore::Layout::LineBuilder::close):

2021-11-17  Alan Bujtas  <zalan@apple.com>

        [IFC][Integration] Clear the preferredLogicalWidths dirty bits after calling LineLayout::computeIntrinsicWidthConstraints
        https://bugs.webkit.org/show_bug.cgi?id=233201

        Reviewed by Antti Koivisto.

        This is in preparation for enabling preferred width computation through IFC.

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::tryComputePreferredWidthsUsingModernPath):

2021-11-17  Rob Buis  <rbuis@igalia.com>

        Limit logical width over-constrained direction check
        https://bugs.webkit.org/show_bug.cgi?id=233189

        Reviewed by Sergio Villar Senin.

        In computePositionedLogicalWidthUsing the over-constrained case always checks for RTL
        direction, but this should not be done if we are not dealing with left and right properties,
        i.e. only when we are not orthogonal with the container.
        Finally computeLogicalLeftPositionedOffset should not do the flipping logic in the over-constrained case.

        * rendering/RenderBox.cpp:
        (WebCore::computeLogicalLeftPositionedOffset):
        (WebCore::RenderBox::computePositionedLogicalWidthUsing const):
        (WebCore::RenderBox::computePositionedLogicalWidthReplaced const):

2021-11-17  Antoine Quint  <graouts@webkit.org>

        [Model] Create iOS ModelPlayer implementation
        https://bugs.webkit.org/show_bug.cgi?id=233192

        Reviewed by Dean Jackson.

        Bug 232848 factored platform-specific code out of HTMLModelElement with the use of a new ModelPlayer
        abstraction with a concrete ARKitInlinePreviewModelPlayer implementation. This first patch moved the
        macOS code, and this patch moves the remaining iOS code.

        To do so we make ARKitInlinePreviewModelPlayer a parent class of two platform-specific subclasses:
        ARKitInlinePreviewModelPlayerMac and ARKitInlinePreviewModelPlayerIOS. We add a new enterFullscreen()
        method to ModelPlayer, with an implementation in the iOS subclass. To support this new method, we
        add a new platformLayerID() on ModelPlayerClient.

        * Modules/model-element/HTMLModelElement.cpp:
        (WebCore::HTMLModelElement::modelDidChange):
        (WebCore::HTMLModelElement::usesPlatformLayer const):
        (WebCore::HTMLModelElement::platformLayerID):
        (WebCore::HTMLModelElement::enterFullscreen):
        * Modules/model-element/HTMLModelElement.h:
        * Modules/model-element/ModelPlayer.h:
        * Modules/model-element/ModelPlayerClient.h:
        * Modules/model-element/ModelPlayerProvider.h:
        * Modules/model-element/dummy/DummyModelPlayer.cpp:
        (WebCore::DummyModelPlayer::enterFullscreen):
        * Modules/model-element/dummy/DummyModelPlayer.h:
        * Modules/model-element/scenekit/SceneKitModelPlayer.h:
        * Modules/model-element/scenekit/SceneKitModelPlayer.mm:
        (WebCore::SceneKitModelPlayer::enterFullscreen):

2021-11-17  Rob Buis  <rbuis@igalia.com>

        Null check clonedParent
        https://bugs.webkit.org/show_bug.cgi?id=230713

        Reviewed by Wenson Hsieh.

        Null check clonedParent.

        Test: editing/execCommand/insert-newline-in-quoted-content-crash.html

        * editing/BreakBlockquoteCommand.cpp:
        (WebCore::BreakBlockquoteCommand::doApply):

2021-11-16  Rob Buis  <rbuis@igalia.com>

        Re-add 'style' to contain:strict and contain:content CSS properties
        https://bugs.webkit.org/show_bug.cgi?id=233193

        Reviewed by Brent Fulgham.

        After being removed for a while, style containment is part again of contain:strict and contain: content [1, 2].
        The change was done in chromium and Firefox has verbally agreed to make the change as well [3].

        [1] https://github.com/w3c/csswg-drafts/issues/6287#issuecomment-862525199
        [2] https://github.com/w3c/csswg-drafts/commit/7948feb03a9aaceb3a8ee423b07c6e526024cdc2
        [3] https://groups.google.com/a/chromium.org/g/blink-dev/c/oMVBKemrTDQ?pli=1

        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::strictContainment):
        (WebCore::RenderStyle::contentContainment):

2021-11-16  Simon Fraser  <simon.fraser@apple.com>

        Stop a momentum scroll animation when receiving a momentum end event
        https://bugs.webkit.org/show_bug.cgi?id=233236

        Reviewed by Tim Horton.

        The stream of momentum events is terminated by an "end" event under two circumstances:
        1. The gesture finished naturally without interruption.
        2. The user tapped the trackpad with two fingers.

        Unfortunately we can't tell these apart, so we always have to stop the animation.
        
        Sadly this reveals a hole in the testing infrastructure. All the "changed" momentum
        events in the sequence handed to UIHelper.mouseWheelSequence() are ignored while the
        animation is running, but the "ended" event stops the animation. So any test without
        a reasonable number of "changed" events will terminate its animation prematurely.
        We can't fix this without new testing infrastructure (webkit.org/b/233234).

        Test: fast/scrolling/mac/momentum-animator-end-event-stops.html

        * platform/ScrollingEffectsController.h:
        * platform/mac/ScrollingEffectsController.mm:
        (WebCore::ScrollingEffectsController::handleWheelEvent):

2021-11-16  Said Abou-Hallawa  <said@apple.com>

        [GPU Process] Build a postfix expression for applying the FilterEffects of the SVGFilter
        https://bugs.webkit.org/show_bug.cgi?id=233214

        Reviewed by Cameron McCormack.

        The goal of building this expression is to have all inputs of each
        FilterEffect be applied before applying it. This will eliminate the need
        to do recursive applying in FilterEffect::apply(). And it will also
        eliminate the need to store the rectangle of the result of FilterEffect.
        Once the absolutePaintRect is calculated, the result image can be created.

        Filter::apply() and FilterEffect::apply() should return a boolean so the
        caller knows that applying the filter function was not successful.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/cpu/arm/filters/FEBlendNEON.h:
        (WebCore::FEBlend::platformApplySoftware):
        * platform/graphics/filters/FEBlend.cpp:
        (WebCore::FEBlend::platformApplySoftware):
        * platform/graphics/filters/FEBlend.h:
        * platform/graphics/filters/FEColorMatrix.cpp:
        (WebCore::FEColorMatrix::platformApplySoftware):
        * platform/graphics/filters/FEColorMatrix.h:
        * platform/graphics/filters/FEComponentTransfer.cpp:
        (WebCore::FEComponentTransfer::platformApplySoftware):
        * platform/graphics/filters/FEComponentTransfer.h:
        * platform/graphics/filters/FEComposite.cpp:
        (WebCore::FEComposite::platformApplySoftware):
        * platform/graphics/filters/FEComposite.h:
        * platform/graphics/filters/FEConvolveMatrix.cpp:
        (WebCore::FEConvolveMatrix::platformApplySoftware):
        * platform/graphics/filters/FEConvolveMatrix.h:
        * platform/graphics/filters/FEDisplacementMap.cpp:
        (WebCore::FEDisplacementMap::platformApplySoftware):
        * platform/graphics/filters/FEDisplacementMap.h:
        * platform/graphics/filters/FEDropShadow.cpp:
        (WebCore::FEDropShadow::platformApplySoftware):
        * platform/graphics/filters/FEDropShadow.h:
        * platform/graphics/filters/FEFlood.cpp:
        (WebCore::FEFlood::platformApplySoftware):
        * platform/graphics/filters/FEFlood.h:
        * platform/graphics/filters/FEGaussianBlur.cpp:
        (WebCore::FEGaussianBlur::platformApplySoftware):
        * platform/graphics/filters/FEGaussianBlur.h:
        * platform/graphics/filters/FELighting.cpp:
        (WebCore::FELighting::platformApplySoftware):
        * platform/graphics/filters/FELighting.h:
        * platform/graphics/filters/FEMerge.cpp:
        (WebCore::FEMerge::platformApplySoftware):
        * platform/graphics/filters/FEMerge.h:
        * platform/graphics/filters/FEMorphology.cpp:
        (WebCore::FEMorphology::platformApplySoftware):
        * platform/graphics/filters/FEMorphology.h:
        * platform/graphics/filters/FEOffset.cpp:
        (WebCore::FEOffset::platformApplySoftware):
        * platform/graphics/filters/FEOffset.h:
        * platform/graphics/filters/FETile.cpp:
        (WebCore::FETile::platformApplySoftware):
        * platform/graphics/filters/FETile.h:
        * platform/graphics/filters/FETurbulence.cpp:
        (WebCore::FETurbulence::platformApplySoftware):
        * platform/graphics/filters/FETurbulence.h:
        * platform/graphics/filters/Filter.h:
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::apply):
        * platform/graphics/filters/FilterEffect.h:
        * platform/graphics/filters/FilterEffectVector.h: Added.
        * platform/graphics/filters/FilterFunction.h:
        (WebCore::FilterFunction::apply):
        * platform/graphics/filters/SourceAlpha.cpp:
        (WebCore::SourceAlpha::platformApplySoftware):
        * platform/graphics/filters/SourceAlpha.h:
        * platform/graphics/filters/SourceGraphic.cpp:
        (WebCore::SourceGraphic::platformApplySoftware):
        * platform/graphics/filters/SourceGraphic.h:
        * rendering/CSSFilter.cpp:
        (WebCore::CSSFilter::apply):
        * rendering/CSSFilter.h:
        * svg/graphics/filters/SVGFEImage.cpp:
        (WebCore::FEImage::platformApplySoftware):
        * svg/graphics/filters/SVGFEImage.h:
        * svg/graphics/filters/SVGFilter.cpp:
        (WebCore::SVGFilter::create):
        (WebCore::SVGFilter::apply):
        (WebCore::SVGFilter::outsets const):
        (WebCore::SVGFilter::clearResult):
        * svg/graphics/filters/SVGFilter.h:
        * svg/graphics/filters/SVGFilterBuilder.cpp:
        (WebCore::buildEffectExpression):
        (WebCore::SVGFilterBuilder::buildExpression const):
        * svg/graphics/filters/SVGFilterBuilder.h:

2021-11-16  Joonghun Park  <jh718.park@samsung.com>

        border-radius inline style should serialize with valid syntax
        https://bugs.webkit.org/show_bug.cgi?id=183994

        This patch have border-radius property serializes in canonical order
        as specified in https://drafts.csswg.org/css-backgrounds/#border-radius.

        Reviewed by Darin Adler.

        * css/StyleProperties.cpp:
        (WebCore::StyleProperties::getPropertyValue const):
        (WebCore::StyleProperties::borderRadiusValue const):
        * css/StyleProperties.h:

2021-11-16  Sihui Liu  <sihui_liu@apple.com>

        Implement FileSystemFileHandle.getFile()
        https://bugs.webkit.org/show_bug.cgi?id=232716
        <rdar://problem/85022453>

        Reviewed by Youenn Fablet.

        Spec: https://wicg.github.io/file-system-access/#api-filesystemfilehandle-getfile

        Tests: storage/filesystemaccess/file-handle-getfile-worker.html
               storage/filesystemaccess/file-handle-getfile.html

        * Modules/filesystemaccess/FileSystemFileHandle.cpp:
        (WebCore::FileSystemFileHandle::getFile):
        * Modules/filesystemaccess/FileSystemStorageConnection.h:
        * Modules/filesystemaccess/WorkerFileSystemStorageConnection.cpp:
        (WebCore::WorkerFileSystemStorageConnection::scopeClosed):
        (WebCore::WorkerFileSystemStorageConnection::didResolve):
        (WebCore::WorkerFileSystemStorageConnection::getFile):
        (WebCore::WorkerFileSystemStorageConnection::completeStringCallback):
        * Modules/filesystemaccess/WorkerFileSystemStorageConnection.h:

2021-11-16  Nikolaos Mouchtaris  <nmouchtaris@apple.com>

        Rename TextDecoration to TextDecorationLine
        https://bugs.webkit.org/show_bug.cgi?id=232729

        Reviewed by Myles C. Maxfield.

        Split up patch by Tim Nguyen: https://bugs.webkit.org/show_bug.cgi?id=230083. This patch
        renames enum TextDecoration to TextDecorationLine, to be more in line with the current spec.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::hasUnderline const):
        * accessibility/atk/WebKitAccessibleInterfaceText.cpp:
        (getAttributeSetForAccessibilityObject):
        * accessibility/mac/WebAccessibilityObjectWrapperBase.mm:
        (AXAttributeStringSetStyle):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (AXAttributeStringSetStyle):
        * animation/CSSPropertyAnimation.cpp:
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::renderTextDecorationLineFlagsToCSSValue):
        (WebCore::ComputedStyleExtractor::valueForPropertyInStyle):
        (WebCore::renderTextDecorationFlagsToCSSValue): Deleted.
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::operator OptionSet<TextDecorationLine> const):
        (WebCore::CSSPrimitiveValue::operator OptionSet<TextDecoration> const): Deleted.
        * editing/Editor.cpp:
        (WebCore::Editor::fontAttributesAtSelectionStart):
        * editing/cocoa/HTMLConverter.mm:
        (WebCore::editingAttributedString):
        * rendering/StyledMarkedText.cpp:
        (WebCore::resolveStyleForMarkedText):
        * rendering/TextDecorationPainter.cpp:
        (WebCore::TextDecorationPainter::TextDecorationPainter):
        (WebCore::TextDecorationPainter::paintTextDecoration):
        (WebCore::collectStylesForRenderer):
        (WebCore::TextDecorationPainter::textDecorationsInEffectForStyle):
        (WebCore::TextDecorationPainter::stylesForRenderer):
        * rendering/TextDecorationPainter.h:
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::textDecorationsInEffect const):
        (WebCore::RenderStyle::textDecoration const):
        (WebCore::RenderStyle::addToTextDecorationsInEffect):
        (WebCore::RenderStyle::setTextDecorationsInEffect):
        (WebCore::RenderStyle::setTextDecoration):
        (WebCore::RenderStyle::initialTextDecoration):
        * rendering/style/RenderStyleConstants.cpp:
        (WebCore::operator<<):
        * rendering/style/RenderStyleConstants.h:
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::paint):
        (WebCore::positionOffsetForDecoration):
        (WebCore::thicknessForDecoration):
        (WebCore::SVGInlineTextBox::paintDecoration):
        (WebCore::SVGInlineTextBox::paintDecorationWithStyle):
        * rendering/svg/SVGInlineTextBox.h:
        * style/InlineTextBoxStyle.cpp:
        (WebCore::minLogicalTopForTextDecorationLine):
        (WebCore::maxLogicalBottomForTextDecorationLine):
        (WebCore::enclosingRendererWithTextDecoration):
        (WebCore::computeUnderlineOffset):
        (WebCore::visualOverflowForDecorations):
        * style/StyleBuilderConverter.h:
        (WebCore::Style::BuilderConverter::convertTextDecoration):

2021-11-16  Devin Rousso  <drousso@apple.com>

        [Apple Pay] handle unknown setup features
        https://bugs.webkit.org/show_bug.cgi?id=233212

        Reviewed by Wenson Hsieh.

        * Modules/applepay/ApplePaySetupFeatureWebCore.h:
        * Modules/applepay/ApplePaySetupFeature.mm:
        (WebCore::ApplePaySetupFeature::supportsFeature): Added.
        (WebCore::ApplePaySetupFeature::type const):

        * Modules/applepay/PaymentInstallmentConfiguration.mm:
        (WebCore::applePaySetupFeatureType):
        (WebCore::platformFeatureType):
        (WebCore::PaymentInstallmentConfiguration::applePayInstallmentConfiguration const):
        If the `PKPaymentSetupFeatureType` is unknown/unsupported, return an empty `ApplePayInstallmentConfiguration`.
        Drive-by: Replace all `PKPaymentSetupFeatureTypeApplePay_X` with `PKPaymentSetupFeatureTypeAppleCard`.

2021-11-16  Nikolaos Mouchtaris  <nmouchtaris@apple.com>

        Add overscroll behavior to ScrollableAreaParameters
        https://bugs.webkit.org/show_bug.cgi?id=233159

        Reviewed by Simon Fraser.

        Split patch by Cathie Chen and Frederic Wang. This patch lands the addition of 
        horizontalOverscrollBehavior and verticalOverscrollBehavior to ScrollableAreaParameters
        to track value of over scroll behavior for particular scroll node. Patches for synchronous/
        asynchronous scrolling on Mac and on iOS to come.

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::setScrollingNodeScrollableAreaGeometry):
        * page/scrolling/ScrollingCoordinatorTypes.h:
        (WebCore::ScrollableAreaParameters::operator== const):
        * page/scrolling/ScrollingTreeScrollingNode.h:
        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::horizontalOverscrollBehavior const):
        (WebCore::ScrollableArea::verticalOverscrollBehavior const):
        * rendering/RenderLayerScrollableArea.cpp:
        (WebCore::RenderLayerScrollableArea::horizontalOverscrollBehavior const):
        (WebCore::RenderLayerScrollableArea::verticalOverscrollBehavior const):
        * rendering/RenderLayerScrollableArea.h:

2021-11-16  Rob Buis  <rbuis@igalia.com>

        [css-contain] Support contain:paint
        https://bugs.webkit.org/show_bug.cgi?id=224742

        Reviewed by Alan Bujtas.

        This patch implements paint containment as specified[1].

        It adds shouldApplyPaintContainment to check whether the element applies for paint containment. Is so, then:
        - an independent formatting context is established.
        - an absolute positioning and fixed positioning containing block is established.
        - a stacking context is created.
        - implements clipping on the overflow clip edge.

        This patch also adds effectiveOverflowX/effectiveOverflowY on RenderElement to take
        the effect of paint containment on overflow-x/y into account.

        [1] https://drafts.csswg.org/css-contain-2/#paint-containment

        * page/FrameView.cpp:
        (WebCore::FrameView::applyOverflowToViewport):
        (WebCore::FrameView::applyPaginationToViewport):
        (WebCore::FrameView::calculateScrollbarModesForLayout):
        * rendering/GridTrackSizingAlgorithm.cpp:
        (WebCore::GridTrackSizingAlgorithmStrategy::minSizeForChild const):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::updateFromStyle):
        (WebCore::RenderBox::constrainLogicalWidthInFragmentByMinMax const):
        (WebCore::RenderBox::constrainLogicalHeightByMinMax const):
        (WebCore::RenderBox::createsNewFormattingContext const):
        (WebCore::RenderBox::addOverflowFromChild):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::updateFromStyle):
        * rendering/RenderElement.cpp:
        (WebCore::includeNonFixedHeight):
        (WebCore::RenderElement::effectiveOverflowX const):
        (WebCore::RenderElement::effectiveOverflowY const):
        * rendering/RenderElement.h:
        (WebCore::RenderElement::effectiveOverflowInlineDirection const):
        (WebCore::RenderElement::effectiveOverflowBlockDirection const):
        (WebCore::RenderElement::canContainFixedPositionObjects const):
        (WebCore::RenderElement::canContainAbsolutelyPositionedObjects const):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::mainAxisOverflowForChild const):
        (WebCore::RenderFlexibleBox::crossAxisOverflowForChild const):
        * rendering/RenderFragmentContainer.cpp:
        (WebCore::RenderFragmentContainer::overflowRectForFragmentedFlowPortion):
        * rendering/RenderInline.h:
        * rendering/RenderLayer.cpp:
        (WebCore::canCreateStackingContext):
        (WebCore::RenderLayer::shouldBeCSSStackingContext const):
        (WebCore::RenderLayer::setAncestorChainHasSelfPaintingLayerDescendant):
        (WebCore::RenderLayer::setAncestorChainHasVisibleDescendant):
        (WebCore::RenderLayer::calculateClipRects const):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::setPaintContainmentApplies):
        (WebCore::RenderObject::RenderObjectRareData::RenderObjectRareData):
        (WebCore::shouldApplyPaintContainment):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::paintContainmentApplies const):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::overflowY const):
        (WebCore::RenderStyle::containsPaint const):
        (WebCore::RenderStyle::overflowInlineDirection const): Deleted.
        (WebCore::RenderStyle::overflowBlockDirection const): Deleted.
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::shouldApplyViewportClip const):

2021-11-16  Simon Fraser  <simon.fraser@apple.com>

        Use IOHIDEvent timestamps for momentum velocity computation
        https://bugs.webkit.org/show_bug.cgi?id=233168

        Reviewed by Tim Horton.

        NSEvent timetamps can have some jitter on some devices (rdar://85309639) so drop
        down to IOHIDEvent timestamps when computing the initial velocity for a momentum
        scroll animation, for improved accuracy.

        * page/mac/WheelEventDeltaFilterMac.h:
        * page/mac/WheelEventDeltaFilterMac.mm:
        (WebCore::WheelEventDeltaFilterMac::updateFromEvent):
        (WebCore::WheelEventDeltaFilterMac::reset):
        * page/scrolling/ThreadedScrollingTree.cpp:
        (WebCore::ThreadedScrollingTree::willStartRenderingUpdate):

2021-11-16  Andres Gonzalez  <andresg_22@apple.com>

        Fix for accessibility/mac/replace-text-with-range-on-webarea-element.html in isolated tree mode.
        https://bugs.webkit.org/show_bug.cgi?id=233160
        <rdar://problem/85436385>

        Reviewed by Chris Fleizach.

        Test: accessibility/mac/replace-text-with-range-on-webarea-element.html

        The replacement and insertion text string is now properly isolatedCopied
        in the AXIsolatedObject method instead of in the wrapper.

        * accessibility/isolatedtree/AXIsolatedObject.cpp:
        (WebCore::AXIsolatedObject::replaceTextInRange):
        (WebCore::AXIsolatedObject::insertText):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityReplaceRange:withText:]):
        (-[WebAccessibilityObjectWrapper accessibilityInsertText:]):

2021-11-16  Youenn Fablet  <youenn@apple.com>

        Remove unused Xcode references to ServiceWorkerGlobalScopePushAPI files
        https://bugs.webkit.org/show_bug.cgi?id=233177

        Reviewed by Alex Christensen.

        No change of behavior.

        * Modules/push-api/ServiceWorkerGlobalScope+PushAPI.idl:
        * WebCore.xcodeproj/project.pbxproj:

2021-11-16  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Fix fast/text/basic/005.html
        https://bugs.webkit.org/show_bug.cgi?id=233150

        Reviewed by Antti Koivisto.

        Negative word-spacing acts as negative margin, pulling the content to the left. In this patch we account for such negative values when
        computing the overall content width.

        Note that this patch is in preparation for enabling IFC preferred width computation.

        * layout/formattingContexts/inline/InlineLine.cpp:
        (WebCore::Layout::Line::appendTextContent):

2021-11-16  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add support for injecting and rendering text recognition blocks
        https://bugs.webkit.org/show_bug.cgi?id=233044

        Reviewed by Aditya Keerthi.

        Adds support for rendering text recognition blocks, which appear as opaque div elements over images. See below
        for more details; no change in behavior, since nothing currently generates TextRecognitionBlockData yet.

        * dom/ImageOverlay.cpp:
        (WebCore::ImageOverlay::imageOverlayDataDetectorClass):
        (WebCore::ImageOverlay::imageOverlayBlockClass):
        (WebCore::ImageOverlay::isDataDetectorResult):
        (WebCore::ImageOverlay::updateSubtree):

        Add support for creating text recognition block containers in the UA shadow root, if needed.

        (WebCore::ImageOverlay::fitElementToQuad):

        Factor out logic to adjust the width, height and transforms on a given element to fit the given quad, and return
        rotated bounding rect info; we use this in three places below.

        (WebCore::ImageOverlay::updateWithTextRecognitionResult):

        Add support for adjusting the size and transforms on each of the block containers created above.

        (WebCore::ImageOverlay::imageOverlayDataDetectorClassName): Deleted.

        Rename this to just `imageOverlayDataDetectorClass()` to match the other static helper functions.

        * html/shadow/imageOverlay.css:
        (div#image-overlay):
        (div.image-overlay-line):
        (div.image-overlay-line, div.image-overlay-block):
        (div.image-overlay-block):
        (div.image-overlay-line, .image-overlay-text):

2021-11-16  Andreu Botella  <andreu@andreubotella.com>

        Empty <input type=file> is represented incorrectly in FormData
        https://bugs.webkit.org/show_bug.cgi?id=185416

        Reviewed by Chris Dumez.

        When a FormData object is constructed from a form, an empty <input type="file"> control will
        be represented as an empty file with an empty filename. According to the HTML spec, this
        file must have "application/octet-stream" as its content type. WebKit has the empty string
        instead. This change brings WebKit into alignment with the standard and with Firefox and
        Chrome in this area.

        Tests: imported/w3c/web-platform-tests/html/semantics/forms/form-submission-0/form-data-set-empty-file.window.html

        * html/FileInputType.cpp:
        (WebCore::FileInputType::appendFormData const):

2021-11-16  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Fix fast/text/text-indent-inside-float.html
        https://bugs.webkit.org/show_bug.cgi?id=233163

        Reviewed by Antti Koivisto.

        Percentages must be treated as 0 for the purpose of calculating intrinsic size contributions.
        https://drafts.csswg.org/css-text/#text-indent-property

        Note that this patch is in preparation for enabling IFC preferred width computation.

        * layout/formattingContexts/inline/InlineLineBuilder.cpp:
        (WebCore::Layout::LineBuilder::LineBuilder):
        (WebCore::Layout::LineBuilder::initialConstraintsForLine const):
        * layout/formattingContexts/inline/InlineLineBuilder.h: Add an "intrinsic mode" which will also be used
        for other, preferred width computation specific properties and values.

2021-11-16  Chris Lord  <clord@igalia.com>

        [GTK][WPE] displayDidRefresh can shortcut waking up the scrolling thread
        https://bugs.webkit.org/show_bug.cgi?id=233187

        Reviewed by Alejandro G. Castro.

        Allow scrolling thread wake-up shortcut on GTK and WPE (matching
        behaviour on every other platform).

        No new tests, covered by existing tests.

        * page/scrolling/ThreadedScrollingTree.cpp:
        (WebCore::ThreadedScrollingTree::displayDidRefresh):

2021-11-16  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r280078, r280290 and r282008.
        https://bugs.webkit.org/show_bug.cgi?id=233184

        Caused a crash in grid

        Reverted changesets:

        "Images as grid items should use the overridingLogicalWidth
        when defined to compute the logical Height"
        https://bugs.webkit.org/show_bug.cgi?id=228022
        https://commits.webkit.org/r280078

        "[css-grid] svg image as grid items should use the overriding
        logical width/height when defined to compute the logical
        height/width"
        https://bugs.webkit.org/show_bug.cgi?id=228105
        https://commits.webkit.org/r280290

        "REGRESSION(r280078): broke fast/images/exif-orientation-
        composited.html on windows"
        https://bugs.webkit.org/show_bug.cgi?id=228325
        https://commits.webkit.org/r282008

2021-11-16  Cathie Chen  <cathiechen@igalia.com>

        [CSS contain] The size should be updated if layout containment is inside a fit-content parent
        https://bugs.webkit.org/show_bug.cgi?id=233046

        Reviewed by Rob Buis.

        When the object is a layout containment, we also need to add size containment as the constraint of
        being a relayout boundary. Otherwise when the layout size depends on the content, the layout size
        might not be updated correctly.

        Test: imported/w3c/web-platform-tests/css/css-contain/contain-layout-019.html

        * rendering/RenderObject.cpp:
        (WebCore::objectIsRelayoutBoundary):

2021-11-15  Sam Weinig  <weinig@apple.com>

        Add another <model> backend backed by SceneKit to prove out ModelPlayer infrastructure a bit more
        https://bugs.webkit.org/show_bug.cgi?id=233112

        Reviewed by Dean Jackson.

        Adds basic SceneKit based ModelPlayer implementation. Like the ARKit player, this one
        also requires writing the USD file to a temporary file as SceneKit does not support
        loading USD files from NSData, and therefore is not actually something that can be used
        for production yet.

        The player is backed by a SceneKitModel class, which is created via a SceneKitModelLoader.
        Both SceneKitModel and SceneKitModelLoader are abstract so that different types of models
        can be supported. Currently, there is only a USD loader implemented for parity with the
        ARKit based implementation.

        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        Add new files.

        * Modules/model-element/scenekit: Added.
        * Modules/model-element/scenekit/SceneKitModel.h: Added.
        * Modules/model-element/scenekit/SceneKitModel.mm: Added.
        Abstract base class for loader specific implementations.
        
        * Modules/model-element/scenekit/SceneKitModelLoader.h: Added.
        * Modules/model-element/scenekit/SceneKitModelLoader.mm: Added.
        (WebCore::loadSceneKitModel):
        Entry point where different loaders can be referenced for different
        file types. As noted above, currenly only a USD loader is implementend.

        * Modules/model-element/scenekit/SceneKitModelLoaderClient.h: Added.
        * Modules/model-element/scenekit/SceneKitModelLoaderClient.mm: Added.
        Interface to pass state back to whatever requested the load.

        * Modules/model-element/scenekit/SceneKitModelLoaderUSD.h: Added.
        * Modules/model-element/scenekit/SceneKitModelLoaderUSD.mm: Added.
        Loads USD file into a SCNScene which the client can attach to a 
        renderer (e.g. the SCNMetalLayer).

        * Modules/model-element/scenekit/SceneKitModelPlayer.h: Added.
        * Modules/model-element/scenekit/SceneKitModelPlayer.mm: Added.
        The SceneKitModelPlayer uses loadSceneKitModel() to load and build
        a SCNScene asynchonously that it then attaches to its SCNMetalLayer. 

2021-11-15  Takashi Komori  <Takashi.Komori@sony.com>

        [Curl] Security information sometimes do not appear in inspector network tab
        https://bugs.webkit.org/show_bug.cgi?id=232971

        Reviewed by Fujii Hironori.

        Get certificate information from SSL context when CurlSSLVerifier is empty.

        No tests yet.

        * platform/network/curl/CertificateInfo.h:
        * platform/network/curl/CurlContext.cpp:
        (WebCore:: const):
        (WebCore::CurlHandle::addExtraNetworkLoadMetrics):
        (WebCore::CurlHandle::certificateInfo const):
        * platform/network/curl/CurlContext.h:
        * platform/network/curl/OpenSSLHelper.cpp:
        (OpenSSL::StackOfX509::StackOfX509):
        (OpenSSL::StackOfX509::~StackOfX509):
        (OpenSSL::pemDataFromCtx):
        (OpenSSL::createCertificateInfo):
        * platform/network/curl/OpenSSLHelper.h:

2021-11-15  Kiet Ho  <tho22@apple.com>

        Add helper to add CSS property with implicit default
        https://bugs.webkit.org/show_bug.cgi?id=233108

        Reviewed by Myles C. Maxfield.

        Add a helper in CSSPropertyParser to add a property with implicit default. This helper
        accepts a RefPtr<> value and a Ref<> default. If the value is a null pointer, the
        default is added, and the implicit flag is set. Otherwise, the value is added. This is
        useful for parsing shorthands, because the CSS spec requires that missing value be
        set to its default value, and WebCore additionally requires the implicit flag to be set.
        This helper handles both of them.

        No functional changes; no tests needed.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::addPropertyWithImplicitDefault):
        (WebCore::CSSPropertyParser::consumeTransformOrigin):
        (WebCore::CSSPropertyParser::consumeFont):
        (WebCore::CSSPropertyParser::consumeFontVariantShorthand):
        (WebCore::CSSPropertyParser::consumeColumns):
        (WebCore::CSSPropertyParser::consumeShorthandGreedily):
        (WebCore::CSSPropertyParser::consumeBorderImage):
        * css/parser/CSSPropertyParser.h:

2021-11-15  Antti Koivisto  <antti@apple.com>

        Revert r285235
        https://bugs.webkit.org/show_bug.cgi?id=233142

        Unreviewed.

        Causes crash with simple repro

        <div id=t style="border-radius: unset"></div>
        <script>
        t.style.borderRadius;
        </script>

        * css/StyleProperties.cpp:
        (WebCore::StyleProperties::getPropertyValue const):
        (WebCore::StyleProperties::borderRadiusValue const): Deleted.
        * css/StyleProperties.h:

2021-11-15  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Fix fast/text/letter-spacing-negative-opacity.html
        https://bugs.webkit.org/show_bug.cgi?id=233132

        Reviewed by Antti Koivisto.

        Special case the negative letter spacing content when computing the content logical width.

        * layout/formattingContexts/inline/InlineLine.cpp:
        (WebCore::Layout::Line::appendTextContent):
        1. Negative letter space value could produce negative content width
        2. Subsequent text content (e.g. "this text has whitepspace content") may go from positive to negative content width as parts of the content may produce positive width even with negative letter spacing.

2021-11-15  Chris Dumez  <cdumez@apple.com>

        `Cross-Origin-Embedder-Policy: require-corp` prevents loading of data URL images
        https://bugs.webkit.org/show_bug.cgi?id=233131
        <rdar://85236459>

        Reviewed by Geoffrey Garen.

        When doing an initial data URL <img> load, we properly wouldn't perform a cross-origin resource policy check.
        This is per the Fetch specification that says to use a scheme fetch [1] when the request URL is a data URL.
        When the protocol is data, the scheme fetch algorithm would return a response without performing an HTTP
        Fetch. The HTTP check [2] is the algorithm that actually performs a cross-origin resource policy check, at
        step 7.

        The issue with our implementation was that data URL <img> loads would perform a cross-origin resource policy
        check in the case where the image is loaded from our memory cache, due to a check we had in
        CachedResourceLoader::requestResource(). As a result, data URL <img> loads would fail when served from the
        memory cache, when CORP is enforced. To address the issue and match the specification, we now disable this
        CORP check when the request URL is a data URL.

        [1] https://fetch.spec.whatwg.org/#scheme-fetch
        [2] https://fetch.spec.whatwg.org/#concept-http-fetch

        Test: http/wpt/html/cross-origin-embedder-policy/require-corp-data-url.html

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestResource):

2021-11-15  Kiet Ho  <tho22@apple.com>

        Implement parsing and animation support for offset-rotate
        https://bugs.webkit.org/show_bug.cgi?id=232752

        Reviewed by Myles C. Maxfield.

        Implement parsing and animation support for offset-rotate as specified in the CSS
        motion path specification. 'auto' and 'reverse' modifiers are supported.

        Tests: imported/w3c/web-platform-tests/css/motion/inheritance.html
               imported/w3c/web-platform-tests/css/motion/offset-supports-calc.html
               imported/w3c/web-platform-tests/css/motion/animation/offset-rotate-composition.html
               imported/w3c/web-platform-tests/css/motion/animation/offset-rotate-interpolation.html
               imported/w3c/web-platform-tests/css/motion/parsing/offset-rotate-computed.html
               imported/w3c/web-platform-tests/css/motion/parsing/offset-rotate-parsing-invalid.html
               imported/w3c/web-platform-tests/css/motion/parsing/offset-rotate-parsing-valid.html

        * Headers.cmake:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFunc): Added blendFunc override for blending OffsetRotation.
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):
        Added animation support for offset-rotate.
        * css/CSSComputedStyleDeclaration.cpp: Added computed style support for offset-rotate.
        (WebCore::valueForOffsetRotate):
        (WebCore::ComputedStyleExtractor::valueForPropertyInStyle):
        * css/CSSOffsetRotateValue.cpp: Added.
        (WebCore::CSSOffsetRotateValue::customCSSText const):
        (WebCore::CSSOffsetRotateValue::equals const):
        * css/CSSOffsetRotateValue.h: Added.
        * css/CSSProperties.json: Added entry for offset-rotate.
        * css/CSSValue.cpp:
        (WebCore::CSSValue::equals const):
        (WebCore::CSSValue::cssText const):
        (WebCore::CSSValue::destroy):
        * css/CSSValue.h:
        (WebCore::CSSValue::isOffsetRotateValue const):
        * css/parser/CSSPropertyParser.cpp: Added parsing support for offset-rotate.
        (WebCore::consumeOffsetRotate):
        (WebCore::CSSPropertyParser::parseSingleValue):
        * rendering/style/OffsetRotation.cpp: Added.
        (WebCore::OffsetRotation::OffsetRotation):
        (WebCore::OffsetRotation::operator== const):
        (WebCore::operator<<):
        * rendering/style/OffsetRotation.h: Added.
        (WebCore::OffsetRotation::hasAuto const):
        (WebCore::OffsetRotation::angle const):
        (WebCore::OffsetRotation::operator!= const):
        * rendering/style/RenderStyle.h: Added support for offset-rotate.
        (WebCore::RenderStyle::offsetRotate const):
        (WebCore::RenderStyle::setOffsetRotate):
        (WebCore::RenderStyle::initialOffsetRotate):
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator== const):
        * rendering/style/StyleRareNonInheritedData.h: Added storage space for offset-path.
        * style/StyleBuilderConverter.h:
        (WebCore::Style::BuilderConverter::convertOffsetRotate):

2021-11-15  Gabriel Nava Marino  <gnavamarino@apple.com>

        nullptr deref in CompositeEditCommand::insertNodeAt
        https://bugs.webkit.org/show_bug.cgi?id=232837

        Reviewed by Wenson Hsieh and Darin Adler.

        Check endingSelection is not orphan before inserting nodes at
        the start position.

        Test: fast/editing/editing-position-crash.html

        * editing/CreateLinkCommand.cpp:
        (WebCore::CreateLinkCommand::doApply):

2021-11-15  Andreu Botella  <andreu@andreubotella.com>

        Null bytes aren't percent-encoded on urlencoded over POST
        https://bugs.webkit.org/show_bug.cgi?id=220780

        Reviewed by Alex Christensen.

        This change fixes a bug where strchr was being used to match a character against a set
        character list, without checking whether the character was NUL. This resulted in NUL bytes
        being passed through in the urlencoded enctype over POST, rather than being percent-escaped.

        Tests: imported/w3c/web-platform-tests/html/semantics/forms/form-submission-0/urlencoded2.window.html

        * platform/network/FormDataBuilder.cpp:
        (WebCore::FormDataBuilder::appendFormURLEncoded):

2021-11-15  Andreu Botella  <andreu@andreubotella.com>

        Empty <input type=file> controls don't show up in the urlencoded and text/plain enctypes
        https://bugs.webkit.org/show_bug.cgi?id=221549

        Reviewed by Chris Dumez.

        In the HTML spec, and in Firefox and Chrome's implementations, an empty <input type="file">
        control is represented in form submission as if it were an empty file with an empty
        filename. WebKit, however, does not include a form entry corresponding to the file input at
        all in the application/x-www-form-urlencoded and text/plain enctypes. This change fixes it.

        Tests: imported/w3c/web-platform-tests/html/semantics/forms/form-submission-0/form-data-set-empty-file.window.html

        * html/FileInputType.cpp:
        (WebCore::FileInputType::appendFormData const):

2021-11-15  Antti Koivisto  <antti@apple.com>

        [LFC][Integration] fast/text/international/bidi-innertext.html fails with BiDi enabled
        https://bugs.webkit.org/show_bug.cgi?id=233125

        Reviewed by Alan Bujtas.

        TextIterator needs to know that RenderText contains bidi text. 

        * layout/formattingContexts/inline/InlineItemsBuilder.cpp:
        (WebCore::Layout::InlineItemsBuilder::handleTextContent):

        Use the InlineTextBox bit.

        * layout/formattingContexts/inline/text/TextUtil.cpp:
        (WebCore::Layout::TextUtil::containsBidiText):

        Add a helper.

        * layout/formattingContexts/inline/text/TextUtil.h:
        * layout/integration/InlineIteratorLogicalOrderTraversal.cpp:
        (WebCore::InlineIterator::makeTextLogicalOrderCacheIfNeeded):
        * layout/integration/LayoutIntegrationBoxTree.cpp:
        (WebCore::LayoutIntegration::BoxTree::buildTree):
        * layout/layouttree/LayoutInlineTextBox.cpp:
        (WebCore::Layout::InlineTextBox::InlineTextBox):
        (WebCore::Layout::m_containsBidiText):

        Add a bit to the InlineTextBox.

        (WebCore::Layout::m_canUseSimplifiedContentMeasuring): Deleted.
        * layout/layouttree/LayoutInlineTextBox.h:
        (WebCore::Layout::InlineTextBox::containsBidiText const):
        * layout/layouttree/LayoutTreeBuilder.cpp:
        (WebCore::Layout::TreeBuilder::createTextBox):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::RenderText):
        (WebCore::RenderText::positionLineBox):
        * rendering/RenderText.h:
        (WebCore::RenderText::containsBidiText const):
        (WebCore::RenderText::setContainsBidiText):
        (WebCore::RenderText::containsReversedText const): Deleted.

2021-11-15  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Take text-indent into account when computing preferred width
        https://bugs.webkit.org/show_bug.cgi?id=233115

        Reviewed by Antti Koivisto.

        * layout/formattingContexts/inline/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::computedIntrinsicWidthForConstraint const):
        * layout/formattingContexts/inline/InlineLineBuilder.cpp:
        (WebCore::Layout::LineBuilder::computedIntrinsicWidth):
        * layout/formattingContexts/inline/InlineLineBuilder.h:

2021-11-15  Enrique Ocaña González  <eocanha@igalia.com>

        [GTK] webaudio/silent-audio-interrupted-in-background.html is a flaky timeout
        https://bugs.webkit.org/show_bug.cgi?id=229964

        Reviewed by Carlos Garcia Campos.

        I can't reproduce the timeout locally anymore, but I'm getting a crash sometimes. This fix is for the crash.
        Unregister dbus objects on MediaSessionGLib destruction to prevent the dbus connection to keep processing requests.

        * platform/audio/glib/MediaSessionGLib.cpp:
        (WebCore::MediaSessionGLib::MediaSessionGLib()): Don't register a GBusNameLostCallback, as unregistration is now going to be handled in the destructor.
        (WebCore::MediaSessionGLib::~MediaSessionGLib()): Unregister dbus objects.
        (WebCore::MediaSessionGLib::nameLost()): Refactored into the destructor.
        * platform/audio/glib/MediaSessionGLib.h:
        (WebCore::MediaSessionGLib::nameLost()): Deleted.

2021-11-15  Antti Koivisto  <antti@apple.com>

        Stack overflow with revert-layer
        https://bugs.webkit.org/show_bug.cgi?id=233119
        rdar://85342210

        Reviewed by Antoine Quint.

        We would decrement the cascade layer priority by one after finding 'revert-layer' value and then try
        to apply again. If both the default layer and a cascade layer contained 'revert-layer' we would
        enter a very deep recursion as the default layer priority is 64k and the cascade layer priorities
        start from zero.

        Test: fast/css/revert-layer-stack-overflow-2.html

        * style/StyleBuilder.cpp:
        (WebCore::Style::Builder::applyRollbackCascadeProperty):

        Fix by getting the new cascade layer priority from the actual property rather than the cascade
        minimum value.

        Factor into a function.

        (WebCore::Style::Builder::applyProperty):
        * style/StyleBuilder.h:

2021-11-15  Patrick Griffis  <pgriffis@igalia.com>

        CSP: Fix missing lineNumber and columnNumber in inline violation reports
        https://bugs.webkit.org/show_bug.cgi?id=233102

        Reviewed by Carlos Garcia Campos.

        * page/csp/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::reportViolation const):

2021-11-14  Simon Fraser  <simon.fraser@apple.com>

        Fingers down on the trackpad should stop an animated scroll
        https://bugs.webkit.org/show_bug.cgi?id=233114

        Reviewed by Wenson Hsieh.
        
        Fingers down on the trackpad sends a "MayBegin" event; this needs to stop any in-progress
        animated momentum scroll.

        This failed because ScrollingTreeScrollingNodeDelegateMac::handleWheelEvent() early-returned
        on the MayBegin event before it got to ScrollingEffectsController. Fix that, and have
        ScrollingEffectsController::handleWheelEvent() return true to say it was handled.

        This triggered an assertion in ScrollingTreeGestureState, but for "post-main-thread"
        handling for which the assertion was wrong.

        Test: fast/scrolling/mac/momentum-animator-maybegin-stops.html

        * page/scrolling/ScrollingTreeGestureState.cpp:
        (WebCore::ScrollingTreeGestureState::nodeDidHandleEvent):
        * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.mm:
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::handleWheelEvent):
        * platform/mac/ScrollingEffectsController.mm:
        (WebCore::ScrollingEffectsController::handleWheelEvent):

2021-11-14  Said Abou-Hallawa  <said@apple.com>

        [GPU Process] Remove the reference to Filter from FilterEffect
        https://bugs.webkit.org/show_bug.cgi?id=232551
        rdar://85136447

        Reviewed by Cameron McCormack.

        This patch removes an unnecessary dependency of individual FilterEffects
        on the Filter object, which makes it easier to send the filter description
        over IPC.

        Instead of having a reference to the Filter in the FilterEffect, we are
        going to pass a reference to the Filter to the FilterEffect functions
        only when needed. FilterEffect may need access to the Filter only in two
        methods: determineAbsolutePaintRect() and platformApplySoftware().

        We need to change all the FilterEffect create methods to not take a Filter
        as input. This requires the SVG filter effect elements to change their
        build() method. And it requires also CSSFilter to not pass itself to the
        FilterEffects its create.

        * platform/graphics/coreimage/FilterEffectRendererCoreImage.h:
        * platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:
        (WebCore::FilterEffectRendererCoreImage::applyEffects):
        (WebCore::FilterEffectRendererCoreImage::connectCIFilters):
        (WebCore::FilterEffectRendererCoreImage::imageForSourceGraphic):
        * platform/graphics/cpu/arm/filters/FEBlendNEON.h:
        (WebCore::FEBlend::platformApplySoftware):
        * platform/graphics/filters/FEBlend.cpp:
        (WebCore::FEBlend::create):
        (WebCore::FEBlend::FEBlend):
        (WebCore::FEBlend::platformApplySoftware):
        * platform/graphics/filters/FEBlend.h:
        * platform/graphics/filters/FEColorMatrix.cpp:
        (WebCore::FEColorMatrix::create):
        (WebCore::FEColorMatrix::FEColorMatrix):
        (WebCore::FEColorMatrix::platformApplySoftware):
        * platform/graphics/filters/FEColorMatrix.h:
        * platform/graphics/filters/FEComponentTransfer.cpp:
        (WebCore::FEComponentTransfer::create):
        (WebCore::FEComponentTransfer::FEComponentTransfer):
        (WebCore::FEComponentTransfer::platformApplySoftware):
        * platform/graphics/filters/FEComponentTransfer.h:
        * platform/graphics/filters/FEComposite.cpp:
        (WebCore::FEComposite::create):
        (WebCore::FEComposite::FEComposite):
        (WebCore::FEComposite::determineAbsolutePaintRect):
        (WebCore::FEComposite::platformApplySoftware):
        * platform/graphics/filters/FEComposite.h:
        * platform/graphics/filters/FEConvolveMatrix.cpp:
        (WebCore::FEConvolveMatrix::create):
        (WebCore::FEConvolveMatrix::FEConvolveMatrix):
        (WebCore::FEConvolveMatrix::platformApplySoftware):
        * platform/graphics/filters/FEConvolveMatrix.h:
        * platform/graphics/filters/FEDiffuseLighting.cpp:
        (WebCore::FEDiffuseLighting::create):
        (WebCore::FEDiffuseLighting::FEDiffuseLighting):
        * platform/graphics/filters/FEDiffuseLighting.h:
        * platform/graphics/filters/FEDisplacementMap.cpp:
        (WebCore::FEDisplacementMap::create):
        (WebCore::FEDisplacementMap::FEDisplacementMap):
        (WebCore::FEDisplacementMap::platformApplySoftware):
        * platform/graphics/filters/FEDisplacementMap.h:
        * platform/graphics/filters/FEDropShadow.cpp:
        (WebCore::FEDropShadow::create):
        (WebCore::FEDropShadow::FEDropShadow):
        (WebCore::FEDropShadow::determineAbsolutePaintRect):
        (WebCore::FEDropShadow::platformApplySoftware):
        * platform/graphics/filters/FEDropShadow.h:
        * platform/graphics/filters/FEFlood.cpp:
        (WebCore::FEFlood::create):
        (WebCore::FEFlood::FEFlood):
        (WebCore::FEFlood::platformApplySoftware):
        * platform/graphics/filters/FEFlood.h:
        * platform/graphics/filters/FEGaussianBlur.cpp:
        (WebCore::FEGaussianBlur::create):
        (WebCore::FEGaussianBlur::FEGaussianBlur):
        (WebCore::FEGaussianBlur::determineAbsolutePaintRect):
        (WebCore::FEGaussianBlur::platformApplySoftware):
        * platform/graphics/filters/FEGaussianBlur.h:
        * platform/graphics/filters/FELighting.cpp:
        (WebCore::FELighting::FELighting):
        (WebCore::FELighting::platformApplySoftware):
        * platform/graphics/filters/FELighting.h:
        * platform/graphics/filters/FEMerge.cpp:
        (WebCore::FEMerge::create):
        (WebCore::FEMerge::FEMerge):
        (WebCore::FEMerge::platformApplySoftware):
        * platform/graphics/filters/FEMerge.h:
        * platform/graphics/filters/FEMorphology.cpp:
        (WebCore::FEMorphology::create):
        (WebCore::FEMorphology::FEMorphology):
        (WebCore::FEMorphology::determineAbsolutePaintRect):
        (WebCore::FEMorphology::platformApplySoftware):
        * platform/graphics/filters/FEMorphology.h:
        * platform/graphics/filters/FEOffset.cpp:
        (WebCore::FEOffset::create):
        (WebCore::FEOffset::FEOffset):
        (WebCore::FEOffset::determineAbsolutePaintRect):
        (WebCore::FEOffset::platformApplySoftware):
        * platform/graphics/filters/FEOffset.h:
        * platform/graphics/filters/FESpecularLighting.cpp:
        (WebCore::FESpecularLighting::create):
        (WebCore::FESpecularLighting::FESpecularLighting):
        * platform/graphics/filters/FESpecularLighting.h:
        * platform/graphics/filters/FETile.cpp:
        (WebCore::FETile::create):
        (WebCore::FETile::FETile):
        (WebCore::FETile::platformApplySoftware):
        * platform/graphics/filters/FETile.h:
        * platform/graphics/filters/FETurbulence.cpp:
        (WebCore::FETurbulence::create):
        (WebCore::FETurbulence::FETurbulence):
        (WebCore::FETurbulence::fillRegion const):
        (WebCore::FETurbulence::fillRegionWorker):
        (WebCore::FETurbulence::platformApplySoftware):
        * platform/graphics/filters/FETurbulence.h:
        * platform/graphics/filters/Filter.h:
        (WebCore::Filter::sourceImage const):
        (WebCore::Filter::sourceImage): Deleted.

        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::FilterEffect):
        (WebCore::FilterEffect::determineAbsolutePaintRect):
        (WebCore::FilterEffect::determineFilterPrimitiveSubregion):
        (WebCore::FilterEffect::apply):
        (WebCore::FilterEffect::imageBufferResult):
        (WebCore::FilterEffect::convertPixelBufferToColorSpace):
        (WebCore::FilterEffect::convertImageBufferToColorSpace):
        (WebCore::FilterEffect::createImageBufferResult):
        * platform/graphics/filters/FilterEffect.h:
        (WebCore::FilterEffect::filter): Deleted.
        (WebCore::FilterEffect::filter const): Deleted.
        Create a unaccelerated filter image result for now. This will be fixed 
        in the following patch. Anyway currently we never create accelerated
        intermediate ImageBuffers for filters.

        * platform/graphics/filters/FilterEffectRenderer.h:
        * platform/graphics/filters/SourceAlpha.cpp:
        (WebCore::SourceAlpha::SourceAlpha):
        (WebCore::SourceAlpha::determineAbsolutePaintRect):
        (WebCore::SourceAlpha::platformApplySoftware):
        * platform/graphics/filters/SourceAlpha.h:
        * platform/graphics/filters/SourceGraphic.cpp:
        (WebCore::SourceGraphic::create):
        (WebCore::SourceGraphic::SourceGraphic):
        (WebCore::SourceGraphic::determineAbsolutePaintRect):
        (WebCore::SourceGraphic::platformApplySoftware):
        * platform/graphics/filters/SourceGraphic.h:
        (WebCore::SourceGraphic::SourceGraphic): Deleted.
        * rendering/CSSFilter.cpp:
        (WebCore::createBlurEffect):
        (WebCore::createBrightnessEffect):
        (WebCore::createContrastEffect):
        (WebCore::createDropShadowEffect):
        (WebCore::createGrayScaleEffect):
        (WebCore::createHueRotateEffect):
        (WebCore::createInvertEffect):
        (WebCore::createOpacityEffect):
        (WebCore::createSaturateEffect):
        (WebCore::createSepiaEffect):
        (WebCore::CSSFilter::buildFilterFunctions):
        (WebCore::CSSFilter::determineFilterPrimitiveSubregion):
        (WebCore::CSSFilter::apply):
        * rendering/CSSFilter.h:
        Apply the FilterFunctions of the CSSFilter in the forward direction.

        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::applyResource):
        (WebCore::RenderSVGResourceFilter::postApplyResource):

        * svg/SVGFEBlendElement.cpp:
        (WebCore::SVGFEBlendElement::build const):
        * svg/SVGFEBlendElement.h:
        * svg/SVGFEColorMatrixElement.cpp:
        (WebCore::SVGFEColorMatrixElement::build const):
        * svg/SVGFEColorMatrixElement.h:
        * svg/SVGFEComponentTransferElement.cpp:
        (WebCore::SVGFEComponentTransferElement::build const):
        * svg/SVGFEComponentTransferElement.h:
        * svg/SVGFECompositeElement.cpp:
        (WebCore::SVGFECompositeElement::build const):
        * svg/SVGFECompositeElement.h:
        * svg/SVGFEConvolveMatrixElement.cpp:
        (WebCore::SVGFEConvolveMatrixElement::build const):
        * svg/SVGFEConvolveMatrixElement.h:
        * svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::build const):
        * svg/SVGFEDiffuseLightingElement.h:
        * svg/SVGFEDisplacementMapElement.cpp:
        (WebCore::SVGFEDisplacementMapElement::build const):
        * svg/SVGFEDisplacementMapElement.h:
        * svg/SVGFEDropShadowElement.cpp:
        (WebCore::SVGFEDropShadowElement::build const):
        * svg/SVGFEDropShadowElement.h:
        * svg/SVGFEFloodElement.cpp:
        (WebCore::SVGFEFloodElement::build const):
        * svg/SVGFEFloodElement.h:
        * svg/SVGFEGaussianBlurElement.cpp:
        (WebCore::SVGFEGaussianBlurElement::build const):
        * svg/SVGFEGaussianBlurElement.h:
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::build const):
        * svg/SVGFEImageElement.h:
        * svg/SVGFEMergeElement.cpp:
        (WebCore::SVGFEMergeElement::build const):
        * svg/SVGFEMergeElement.h:
        * svg/SVGFEMorphologyElement.cpp:
        (WebCore::SVGFEMorphologyElement::build const):
        * svg/SVGFEMorphologyElement.h:
        * svg/SVGFEOffsetElement.cpp:
        (WebCore::SVGFEOffsetElement::build const):
        * svg/SVGFEOffsetElement.h:
        * svg/SVGFESpecularLightingElement.cpp:
        (WebCore::SVGFESpecularLightingElement::build const):
        * svg/SVGFESpecularLightingElement.h:
        * svg/SVGFETileElement.cpp:
        (WebCore::SVGFETileElement::build const):
        * svg/SVGFETileElement.h:
        * svg/SVGFETurbulenceElement.cpp:
        (WebCore::SVGFETurbulenceElement::build const):
        * svg/SVGFETurbulenceElement.h:
        * svg/SVGFilterPrimitiveStandardAttributes.h:
        Remove the Filter as an input to the build() method and pass a reference
        to SVGFilterBuilder instead of passing a pointer.

        * svg/graphics/filters/SVGFEImage.cpp:
        (WebCore::FEImage::create):
        (WebCore::FEImage::FEImage):
        (WebCore::FEImage::determineAbsolutePaintRect):
        (WebCore::FEImage::platformApplySoftware):
        * svg/graphics/filters/SVGFEImage.h:
        * svg/graphics/filters/SVGFilter.cpp:
        (WebCore::SVGFilter::create):
        (WebCore::SVGFilter::apply):
        * svg/graphics/filters/SVGFilter.h:
        * svg/graphics/filters/SVGFilterBuilder.cpp:
        (WebCore::SVGFilterBuilder::buildFilterEffects):
        * svg/graphics/filters/SVGFilterBuilder.h:

2021-11-14  Myles C. Maxfield  <mmaxfield@apple.com>

        [WebGPU] Various mechanical cleanups
        https://bugs.webkit.org/show_bug.cgi?id=233104

        Reviewed by Dean Jackson.

        - Trailing commas in enums
        - Update GPUFeatureName to the latest spec

        No new tests because there is no behavior change (yet).

        * Modules/WebGPU/GPUAddressMode.h:
        * Modules/WebGPU/GPUBlendFactor.h:
        * Modules/WebGPU/GPUBlendOperation.h:
        * Modules/WebGPU/GPUBufferBindingType.h:
        * Modules/WebGPU/GPUCanvasCompositingAlphaMode.h:
        * Modules/WebGPU/GPUCompareFunction.h:
        * Modules/WebGPU/GPUCompilationMessageType.h:
        * Modules/WebGPU/GPUComputePassTimestampLocation.h:
        * Modules/WebGPU/GPUCullMode.h:
        * Modules/WebGPU/GPUDeviceLostReason.h:
        * Modules/WebGPU/GPUErrorFilter.h:
        * Modules/WebGPU/GPUFeatureName.h:
        (WebCore::convertToBacking):
        * Modules/WebGPU/GPUFeatureName.idl:
        * Modules/WebGPU/GPUFilterMode.h:
        * Modules/WebGPU/GPUFrontFace.h:
        * Modules/WebGPU/GPUIndexFormat.h:
        * Modules/WebGPU/GPULoadOp.h:
        * Modules/WebGPU/GPUPipelineStatisticName.h:
        * Modules/WebGPU/GPUPowerPreference.h:
        * Modules/WebGPU/GPUPredefinedColorSpace.h:
        * Modules/WebGPU/GPUPrimitiveTopology.h:
        * Modules/WebGPU/GPUQueryType.h:
        * Modules/WebGPU/GPURenderPassTimestampLocation.h:
        * Modules/WebGPU/GPUSamplerBindingType.h:
        * Modules/WebGPU/GPUStencilOperation.h:
        * Modules/WebGPU/GPUStorageTextureAccess.h:
        * Modules/WebGPU/GPUStoreOp.h:
        * Modules/WebGPU/GPUTextureAspect.h:
        * Modules/WebGPU/GPUTextureDimension.h:
        * Modules/WebGPU/GPUTextureFormat.h:
        * Modules/WebGPU/GPUTextureSampleType.h:
        * Modules/WebGPU/GPUTextureViewDimension.h:
        * Modules/WebGPU/GPUVertexFormat.h:
        * Modules/WebGPU/GPUVertexStepMode.h:

2021-11-14  Tim Nguyen  <ntim@apple.com>

        Modal dialogs should make the root element unfocusable
        https://bugs.webkit.org/show_bug.cgi?id=233099

        Reviewed by Simon Fraser.

        From https://html.spec.whatwg.org/multipage/interaction.html#inert,

        > A Document document is blocked by a modal dialog subject if subject is
        > the topmost dialog element in document's top layer. While document is
        > so blocked, every node that is connected to document, with the
        > exception of the subject element and its shadow-including descendants,
        > must be marked inert.

        RenderStyle::effectiveInert() already matches this definition, Node::deprecatedIsInert() does not.

        Main reason the removed check was there is to prevent the whole document from being inert to hit-testing, but with the RenderStyle
        approach, we instead override effectiveInert to false for the modal dialog. Removing this check for focus is absolutely fine
        however, since focusability isn't inherited (Node::deprecatedIsInert is only used for focus).

        Tests added by this Chromium WPT: https://github.com/web-platform-tests/wpt/commit/0457111e7109ec3d9e575aa421b96d8c36ce2ae8

        * dom/Node.cpp:
        (WebCore::Node::deprecatedIsInert const):

2021-11-14  Simon Fraser  <simon.fraser@apple.com>

        Attach IOHIDEvent timestamps to wheel events
        https://bugs.webkit.org/show_bug.cgi?id=233051

        Reviewed by Wenson Hsieh.

        On some macOS devices, there can be significant deltas between NSEvent timestamps,
        and the timestamps on underlying IOHIDEvents (rdar://85309639). This makes momentum
        velocity computation unpredictable; we can get better results by using IOHIDEvent
        timestamps.

        * platform/PlatformWheelEvent.cpp:
        (WebCore::PlatformWheelEvent::createFromGesture):
        * platform/PlatformWheelEvent.h:
        (WebCore::PlatformWheelEvent::ioHIDEventTimestamp const):
        * platform/mac/PlatformEventFactoryMac.h:
        * platform/mac/PlatformEventFactoryMac.mm:
        (WebCore::eventTimeStampSince1970):
        (WebCore::PlatformMouseEventBuilder::PlatformMouseEventBuilder):
        (WebCore::PlatformWheelEventBuilder::PlatformWheelEventBuilder):
        (WebCore::PlatformKeyboardEventBuilder::PlatformKeyboardEventBuilder):

2021-11-13  Simon Fraser  <simon.fraser@apple.com>

        Run a ScrollAnimationMomentum for the momentum phase of a scroll
        https://bugs.webkit.org/show_bug.cgi?id=232897

        Reviewed by Tim Horton.
        
        Run an animation for the momentum phase of a scroll, rather than scrolling in response
        to wheel events, because it produces a smoother result with fewer dropped frames.
        
        We re-use ScrollAnimationMomentum which is already used for scroll snap, but have to
        allow it to yield unclamped coordinates, since using it for momentum can result in
        rubber-banding.
        
        When we get the momentum "began" event, we start the ScrollAnimationMomentum
        using initial velocity computed from WheelEventDeltaFilter. ScrollingEffectsController then
        ignores the reset of the momentum "changed" events.

        We have to stop this animation when we receive a "begin" or "mayBegin" event, since
        this indicates that the user has put fingers down on the trackpad.
        
        Rename m_dragEndedScrollingVelocity to m_scrollingVelocityForScrollSnap for clarity
        (at some point we should merge this with m_scrollingVelocityForMomentumAnimation).

        Tests: fast/scrolling/mac/momentum-animator-in-overflow.html
               fast/scrolling/mac/momentum-animator.html

        * page/WheelEventDeltaFilter.cpp:
        (WebCore::WheelEventDeltaFilter::shouldApplyFilteringForEvent):
        * page/WheelEventDeltaFilter.h:
        * platform/PlatformWheelEvent.cpp:
        (WebCore::operator<<):
        * platform/ScrollAnimationMomentum.cpp:
        (WebCore::ScrollAnimationMomentum::startAnimatedScrollWithInitialVelocity):
        (WebCore::ScrollAnimationMomentum::stop):
        (WebCore::ScrollAnimationMomentum::serviceAnimation):
        * platform/ScrollAnimationMomentum.h:
        * platform/ScrollingEffectsController.cpp:
        (WebCore::ScrollingEffectsController::ScrollingEffectsController):
        (WebCore::ScrollingEffectsController::stopAnimatedNonRubberbandingScroll):
        (WebCore::ScrollingEffectsController::startMomentumScrollWithInitialVelocity):
        * platform/ScrollingEffectsController.h:
        (WebCore::ScrollingEffectsController::momentumScrollingAnimatorEnabled const):
        * platform/mac/ScrollingEffectsController.mm:
        (WebCore::phaseToString):
        (WebCore::ScrollingEffectsController::handleWheelEvent):
        (WebCore::ScrollingEffectsController::startRubberBandAnimation):
        (WebCore::ScrollingEffectsController::startRubberBandAnimationIfNecessary):
        (WebCore::ScrollingEffectsController::processWheelEventForScrollSnap):

2021-11-13  Tim Horton  <timothy_horton@apple.com>

        Clean up IOKit SPI headers
        https://bugs.webkit.org/show_bug.cgi?id=233093

        Reviewed by Simon Fraser.

        * platform/gamepad/cocoa/GameControllerGamepadProvider.mm:
        * platform/gamepad/mac/HIDGamepadProvider.h:
        * platform/gamepad/mac/HIDGamepadProvider.mm:

2021-11-13  Said Abou-Hallawa  <said@apple.com>

        REGRESSION (r285618): [mac-wk1] ASSERTION FAILED: cgContext == [currentContext CGContext]
        https://bugs.webkit.org/show_bug.cgi?id=233008
        rdar://85311948

        Reviewed by Wenson Hsieh.

        The assertion fails when loading the expected html page because one of
        the elements has a CSS filter named "(#noop)" but the filter "noop" is
        not defined.

        The reason for the assertion to fail is we switch the PaintInfo to the
        context of the CSSFilter::sourceImage() and we do not restore it back.
        In fact CSSFilter::buildFilterFunctions() should fail since the filter
        has only a reference filter and this reference filter does not exit. The
        bug is CSSFilter::buildFilterFunctions() does not fail in this case.

        Before r285618, CSSFilter::buildFilterFunctions() was not adding 
        SourceGraphic to m_functions. It was added as the input of the first
        FilterEffect. This was fine since we were applying the lastEffect which
        goes backward till it reaches the SourceGraphic.

        But the plan is to apply the FilterFunctions from the first to the last
        without having to go backward, so we need to add the SourceGraphic to
        m_functions explicitly. The bug happens when no FilterFunction is built
        successfully and we return 'true' because m_functions is not empty. It
        has the SourceGraphic.

        The fix is to add the SourceGraphic only when there is at least another 
        FilterFunction will be added to m_functions.

        * rendering/CSSFilter.cpp:
        (WebCore::CSSFilter::buildFilterFunctions):

2021-11-13  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Inline box end's padding/border/margin should be taken into account when computing horizontal position for bidi content
        https://bugs.webkit.org/show_bug.cgi?id=233083

        Reviewed by Antti Koivisto.

        Let's decouple the "display box rect" and the "content right in visual order" computation.
        There are runs (e.g. inline box end) that don't need to call displayBoxRect() but they
        still affect the "content right in visual order" (<span style="border-right: 10px solid green">).

        * layout/formattingContexts/inline/InlineDisplayContentBuilder.cpp:
        (WebCore::Layout::InlineDisplayContentBuilder::createBoxesAndUpdateGeometryForLineContent): add the additional lineRun.isInlineBoxEnd() case.

2021-11-13  Alan Bujtas  <zalan@apple.com>

        [LFC][Integration] Add support for optional bidi character coverage checking
        https://bugs.webkit.org/show_bug.cgi?id=233049

        Reviewed by Antti Koivisto.

        This is in preparation for enabling bidi for IFC.

        * layout/formattingContexts/inline/InlineItemsBuilder.cpp:
        * layout/integration/LayoutIntegrationCoverage.cpp:
        (WebCore::LayoutIntegration::canUseForFontAndText):
        (WebCore::LayoutIntegration::canUseForRenderInlineChild):
        (WebCore::LayoutIntegration::canUseForLineLayoutWithReason):

2021-11-13  Alan Bujtas  <zalan@apple.com>

        [LFC][Integration] Bring showRenderTree for IFC integration back
        https://bugs.webkit.org/show_bug.cgi?id=233000

        Reviewed by Antti Koivisto.

        Currently showRenderTree comes back blank for IFC content.

        * layout/integration/LayoutIntegrationBoxTree.cpp:
        (WebCore::LayoutIntegration::showInlineContent):
        * layout/integration/LayoutIntegrationBoxTree.h:
        * layout/integration/LayoutIntegrationLineLayout.cpp:
        (WebCore::LayoutIntegration::LineLayout::outputLineTree const):

2021-11-13  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Inline box end (opaque to bidi) should get the bidi level from its adjacent content
        https://bugs.webkit.org/show_bug.cgi?id=233082

        Reviewed by Antti Koivisto.

        While the inline box start item (<span>) gets the bidi level from the next (adjacent) content, inline box end (</span>)
        should get it from the previous content (these are opaque inline items).

          e.g <span>bidi content</span>  
          both the inline box start and the inline box end items get their bidi level from the "bidi content" inline text item.

        * layout/formattingContexts/inline/InlineItemsBuilder.cpp:
        (WebCore::Layout::InlineItemsBuilder::breakAndComputeBidiLevels):

2021-11-12  Timothy Hatcher  <timothy@apple.com>

        webView._isBeingInspected does not work with Service Worker pages
        https://bugs.webkit.org/show_bug.cgi?id=233062
        rdar://problem/85354982

        Reviewed by Devin Rousso.

        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::connectFrontend): Call updateServiceWorkerPageFrontendCount().
        (WebCore::WorkerInspectorController::disconnectFrontend): Ditto.
        (WebCore::WorkerInspectorController::updateServiceWorkerPageFrontendCount): Added.
        * inspector/WorkerInspectorController.h: Added updateServiceWorkerPageFrontendCount().

2021-11-12  Darin Adler  <darin@apple.com>

        Make sort-Xcode-project-file idempotent
        https://bugs.webkit.org/show_bug.cgi?id=233077

        Reviewed by Wenson Hsieh.

        * WebCore.xcodeproj/project.pbxproj: Sorted.

2021-11-12  Said Abou-Hallawa  <said@apple.com>

        REGRESSION(r285481): Infinite recursion with cyclic filter reference
        https://bugs.webkit.org/show_bug.cgi?id=232972
        rdar://85264240

        Reviewed by Wenson Hsieh.

        Before r285481, we were creating the ImageBuffer of the referenced SVGElement
        for the FEImage through RenderSVGResourceFilter::postApplyResource(). Now
        we create this ImageBuffer through RenderSVGResourceFilter::applyResource(). 
        The difference is at the end of RenderSVGResourceFilter::applyResource()
        we add an entry to m_rendererFilterDataMap. This entry was preventing 
        trying to rebuild the SVGFilter for the same renderer if there is a
        cyclic reference.

        The fix is to add the entry in m_rendererFilterDataMap before creating the
        SVGFilter. If an error happens, this entry will be removed before returning.

        Test: svg/filters/feImage-cyclic-reference.svg

        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::applyResource):

2021-11-12  Rob Buis  <rbuis@igalia.com>

        Null check m_spanElement
        https://bugs.webkit.org/show_bug.cgi?id=230894

        Reviewed by Wenson Hsieh.

        Null check m_spanElement in ReplaceNodeWithSpanCommand::doUnapply, since
        it may not be created by ReplaceNodeWithSpanCommand::doApply.

        Test: editing/execCommand/default-paragraph-separator-crash.html

        * editing/ReplaceNodeWithSpanCommand.cpp:
        (WebCore::ReplaceNodeWithSpanCommand::doUnapply):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::makeInsertedContentRoundTrippableWithHTMLTreeBuilder):

2021-11-12  Chris Dumez  <cdumez@apple.com>

        Crash when accessing reason property of a newly created AbortSignal
        https://bugs.webkit.org/show_bug.cgi?id=233066
        <rdar://problem/85249306>

        Reviewed by Geoffrey Garen.

        Make sure AbortSignal.reason get initialized to jsUndefined() by default
        and not a default-constructed JSValue.

        Test: fast/dom/AbortSignal-reason-crash.html

        * dom/AbortSignal.cpp:
        (WebCore::AbortSignal::AbortSignal):
        * dom/AbortSignal.h:

2021-11-12  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, reverting r285583.

        Seems to have caused many layout tests to become flaky
        failures

        Reverted changeset:

        "[css-contain] Support contain:paint"
        https://bugs.webkit.org/show_bug.cgi?id=224742
        https://commits.webkit.org/r285583

2021-11-12  Alexey Shvayka  <ashvayka@apple.com>

        Implement custom element definition's *disable shadow* flag
        https://bugs.webkit.org/show_bug.cgi?id=233023

        Reviewed by Geoffrey Garen.

        This change implements *disable shadow* flag that precludes attachShadow() [1]
        as well as upgrading an element with already attached shadow root [2].

        Aligns WebKit with Blink and Gecko.
        Preserves the fast path for non-custom elements.

        [1] https://dom.spec.whatwg.org/#ref-for-concept-custom-element-definition-disable-shadow
        [2] https://html.spec.whatwg.org/multipage/custom-elements.html#upgrades:concept-custom-element-definition-disable-shadow

        Tests: imported/w3c/web-platform-tests/custom-elements/CustomElementRegistry.html
               imported/w3c/web-platform-tests/custom-elements/upgrading.html
               imported/w3c/web-platform-tests/shadow-dom/Element-interface-attachShadow-custom-element.html

        * bindings/js/JSCustomElementInterface.cpp:
        (WebCore::JSCustomElementInterface::JSCustomElementInterface):
        (WebCore::JSCustomElementInterface::upgradeElement):
        * bindings/js/JSCustomElementInterface.h:
        (WebCore::JSCustomElementInterface::disableShadow):
        (WebCore::JSCustomElementInterface::isShadowDisabled const):
        * bindings/js/JSCustomElementRegistryCustom.cpp:
        (WebCore::JSCustomElementRegistry::define):
        * dom/CustomElementRegistry.cpp:
        (WebCore::CustomElementRegistry::addElementDefinition):
        * dom/CustomElementRegistry.h:
        (WebCore::CustomElementRegistry::isShadowDisabled const):
        * dom/Element.cpp:
        (WebCore::canAttachAuthorShadowRoot):

2021-11-12  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r285639.
        https://bugs.webkit.org/show_bug.cgi?id=233065

        Causes Geolocation test crashes

        Reverted changeset:

        "JSCallbackData should use lexical global object for errors
        and lifecycle"
        https://bugs.webkit.org/show_bug.cgi?id=232387
        https://commits.webkit.org/r285639

2021-11-12  Don Olmstead  <don.olmstead@sony.com>

        [WinCairo] Add Little-CMS support
        https://bugs.webkit.org/show_bug.cgi?id=233024

        Reviewed by Michael Catanzaro.

        Centralize addition of LCMS2::LCMS2 to the root CMakeLists in WebCore.

        * CMakeLists.txt:
        * PlatformGTK.cmake:
        * PlatformWPE.cmake:

2021-11-12  Rob Buis  <rbuis@igalia.com>

        Null check host in SlotAssignment::assignSlots
        https://bugs.webkit.org/show_bug.cgi?id=230899

        Reviewed by Darin Adler.

        Null check host in SlotAssignment::assignSlots.

        Tests: fast/shadow-dom/shadow-root-gc-crash.html

        * dom/SlotAssignment.cpp:
        (WebCore::SlotAssignment::assignSlots):

2021-11-12  Chris Dumez  <cdumez@apple.com>

        Disable MathML when in Captive Portal Mode
        https://bugs.webkit.org/show_bug.cgi?id=233013
        <rdar://84567129>

        Reviewed by Brent Fulgham.

        Add runtime feature flag for MathML and update implementation in WebCore to only support
        MathML when the flag is on.

        * bindings/js/WebCoreBuiltinNames.h:
        * dom/Document.cpp:
        (WebCore::Document::createElement):
        * mathml/MathMLElement.idl:
        * mathml/MathMLMathElement.idl:

2021-11-11  Mark Lam  <mark.lam@apple.com>

        Refactor allocateCell() and tryAllocateCell() to take VM& instead of Heap&.
        https://bugs.webkit.org/show_bug.cgi?id=233028
        rdar://85329680

        Reviewed by Yusuke Suzuki.

        * bindings/js/JSDOMAsyncIterator.h:
        * bindings/js/JSDOMBuiltinConstructor.h:
        (WebCore::JSDOMBuiltinConstructor<JSClass>::create):
        * bindings/js/JSDOMConstructor.h:
        (WebCore::JSDOMConstructor<JSClass>::create):
        * bindings/js/JSDOMConstructorNotCallable.h:
        (WebCore::JSDOMConstructorNotCallable<JSClass>::create):
        * bindings/js/JSDOMConstructorNotConstructable.h:
        (WebCore::JSDOMConstructorNotConstructable<JSClass>::create):
        * bindings/js/JSDOMIterator.h:
        * bindings/js/JSDOMLegacyFactoryFunction.h:
        (WebCore::JSDOMLegacyFactoryFunction<JSClass>::create):
        * bindings/js/JSDOMWindowProperties.h:
        * bindings/js/JSFileSystemDirectoryHandleIterator.h:
        * bindings/js/JSIDBSerializationGlobalObject.cpp:
        (WebCore::JSIDBSerializationGlobalObject::create):
        * bindings/js/JSWindowProxy.cpp:
        (WebCore::JSWindowProxy::create):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateIterableDefinition):
        (GeneratePrototypeDeclaration):
        * bindings/scripts/test/JS/JSDOMWindow.h:
        (WebCore::JSDOMWindow::create):
        * bindings/scripts/test/JS/JSDedicatedWorkerGlobalScope.h:
        (WebCore::JSDedicatedWorkerGlobalScope::create):
        * bindings/scripts/test/JS/JSExposedStar.cpp:
        (WebCore::JSExposedStarDOMConstructor::prototypeForStructure):
        * bindings/scripts/test/JS/JSExposedStar.h:
        (WebCore::JSExposedStar::create):
        * bindings/scripts/test/JS/JSExposedToWorkerAndWindow.cpp:
        * bindings/scripts/test/JS/JSExposedToWorkerAndWindow.h:
        (WebCore::JSExposedToWorkerAndWindow::create):
        * bindings/scripts/test/JS/JSPaintWorkletGlobalScope.h:
        (WebCore::JSPaintWorkletGlobalScope::create):
        * bindings/scripts/test/JS/JSServiceWorkerGlobalScope.h:
        (WebCore::JSServiceWorkerGlobalScope::create):
        * bindings/scripts/test/JS/JSSharedWorkerGlobalScope.h:
        (WebCore::JSSharedWorkerGlobalScope::create):
        * bindings/scripts/test/JS/JSTestCEReactions.cpp:
        (WebCore::JSTestCEReactionsDOMConstructor::prototypeForStructure):
        * bindings/scripts/test/JS/JSTestCEReactions.h:
        (WebCore::JSTestCEReactions::create):
        * bindings/scripts/test/JS/JSTestCEReactionsStringifier.cpp:
        (WebCore::JSTestCEReactionsStringifierDOMConstructor::prototypeForStructure):
        * bindings/scripts/test/JS/JSTestCEReactionsStringifier.h:
        (WebCore::JSTestCEReactionsStringifier::create):
        * bindings/scripts/test/JS/JSTestCallTracer.cpp:
        (WebCore::JSTestCallTracerDOMConstructor::prototypeForStructure):
        * bindings/scripts/test/JS/JSTestCallTracer.h:
        (WebCore::JSTestCallTracer::create):
        * bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.cpp:
        (WebCore::JSTestClassWithJSBuiltinConstructorDOMConstructor::prototypeForStructure):
        * bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.h:
        (WebCore::JSTestClassWithJSBuiltinConstructor::create):
        * bindings/scripts/test/JS/JSTestConditionalIncludes.cpp:
        (WebCore::JSTestConditionalIncludesDOMConstructor::prototypeForStructure):
        * bindings/scripts/test/JS/JSTestConditionalIncludes.h:
        (WebCore::JSTestConditionalIncludes::create):
        * bindings/scripts/test/JS/JSTestConditionallyReadWrite.cpp:
        (WebCore::JSTestConditionallyReadWriteDOMConstructor::prototypeForStructure):
        * bindings/scripts/test/JS/JSTestConditionallyReadWrite.h:
        (WebCore::JSTestConditionallyReadWrite::create):
        * bindings/scripts/test/JS/JSTestDOMJIT.cpp:
        (WebCore::JSTestDOMJITDOMConstructor::prototypeForStructure):
        * bindings/scripts/test/JS/JSTestDOMJIT.h:
        (WebCore::JSTestDOMJIT::create):
        * bindings/scripts/test/JS/JSTestDefaultToJSON.cpp:
        (WebCore::JSTestDefaultToJSONDOMConstructor::prototypeForStructure):
        * bindings/scripts/test/JS/JSTestDefaultToJSON.h:
        (WebCore::JSTestDefaultToJSON::create):
        * bindings/scripts/test/JS/JSTestDefaultToJSONFilteredByExposed.cpp:
        (WebCore::JSTestDefaultToJSONFilteredByExposedDOMConstructor::prototypeForStructure):
        * bindings/scripts/test/JS/JSTestDefaultToJSONFilteredByExposed.h:
        (WebCore::JSTestDefaultToJSONFilteredByExposed::create):
        * bindings/scripts/test/JS/JSTestDefaultToJSONIndirectInheritance.cpp:
        (WebCore::JSTestDefaultToJSONIndirectInheritanceDOMConstructor::prototypeForStructure):
        * bindings/scripts/test/JS/JSTestDefaultToJSONIndirectInheritance.h:
        (WebCore::JSTestDefaultToJSONIndirectInheritance::create):
        * bindings/scripts/test/JS/JSTestDefaultToJSONInherit.cpp:
        (WebCore::JSTestDefaultToJSONInheritDOMConstructor::prototypeForStructure):
        * bindings/scripts/test/JS/JSTestDefaultToJSONInherit.h:
        (WebCore::JSTestDefaultToJSONInherit::create):
        * bindings/scripts/test/JS/JSTestDefaultToJSONInheritFinal.cpp:
        (WebCore::JSTestDefaultToJSONInheritFinalDOMConstructor::prototypeForStructure):
        * bindings/scripts/test/JS/JSTestDefaultToJSONInheritFinal.h:
        (WebCore::JSTestDefaultToJSONInheritFinal::create):
        * bindings/scripts/test/JS/JSTestDelegateToSharedSyntheticAttribute.cpp:
        (WebCore::JSTestDelegateToSharedSyntheticAttributeDOMConstructor::prototypeForStructure):
        * bindings/scripts/test/JS/JSTestDelegateToSharedSyntheticAttribute.h:
        (WebCore::JSTestDelegateToSharedSyntheticAttribute::create):
        * bindings/scripts/test/JS/JSTestDomainSecurity.cpp:
        (WebCore::JSTestDomainSecurityDOMConstructor::prototypeForStructure):
        * bindings/scripts/test/JS/JSTestDomainSecurity.h:
        (WebCore::JSTestDomainSecurity::create):
        * bindings/scripts/test/JS/JSTestEnabledBySetting.cpp:
        (WebCore::JSTestEnabledBySettingDOMConstructor::prototypeForStructure):
        * bindings/scripts/test/JS/JSTestEnabledBySetting.h:
        (WebCore::JSTestEnabledBySetting::create):
        * bindings/scripts/test/JS/JSTestEnabledForContext.cpp:
        (WebCore::JSTestEnabledForContextDOMConstructor::prototypeForStructure):
        * bindings/scripts/test/JS/JSTestEnabledForContext.h:
        (WebCore::JSTestEnabledForContext::create):
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        * bindings/scripts/test/JS/JSTestEventConstructor.h:
        (WebCore::JSTestEventConstructor::create):
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::JSTestEventTargetDOMConstructor::prototypeForStructure):
        * bindings/scripts/test/JS/JSTestEventTarget.h:
        (WebCore::JSTestEventTarget::create):
        * bindings/scripts/test/JS/JSTestException.cpp:
        (WebCore::JSTestExceptionDOMConstructor::prototypeForStructure):
        * bindings/scripts/test/JS/JSTestException.h:
        (WebCore::JSTestException::create):
        * bindings/scripts/test/JS/JSTestGenerateAddOpaqueRoot.cpp:
        (WebCore::JSTestGenerateAddOpaqueRootDOMConstructor::prototypeForStructure):
        * bindings/scripts/test/JS/JSTestGenerateAddOpaqueRoot.h:
        (WebCore::JSTestGenerateAddOpaqueRoot::create):
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        (WebCore::JSTestGenerateIsReachableDOMConstructor::prototypeForStructure):
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.h:
        (WebCore::JSTestGenerateIsReachable::create):
        * bindings/scripts/test/JS/JSTestGlobalObject.h:
        (WebCore::JSTestGlobalObject::create):
        * bindings/scripts/test/JS/JSTestIndexedSetterNoIdentifier.cpp:
        (WebCore::JSTestIndexedSetterNoIdentifierDOMConstructor::prototypeForStructure):
        * bindings/scripts/test/JS/JSTestIndexedSetterNoIdentifier.h:
        (WebCore::JSTestIndexedSetterNoIdentifier::create):
        * bindings/scripts/test/JS/JSTestIndexedSetterThrowingException.cpp:
        (WebCore::JSTestIndexedSetterThrowingExceptionDOMConstructor::prototypeForStructure):
        * bindings/scripts/test/JS/JSTestIndexedSetterThrowingException.h:
        (WebCore::JSTestIndexedSetterThrowingException::create):
        * bindings/scripts/test/JS/JSTestIndexedSetterWithIdentifier.cpp:
        (WebCore::JSTestIndexedSetterWithIdentifierDOMConstructor::prototypeForStructure):
        * bindings/scripts/test/JS/JSTestIndexedSetterWithIdentifier.h:
        (WebCore::JSTestIndexedSetterWithIdentifier::create):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterfaceDOMConstructor::construct):
        (WebCore::jsTestInterfacePrototypeFunction_entriesCaller):
        * bindings/scripts/test/JS/JSTestInterface.h:
        * bindings/scripts/test/JS/JSTestInterfaceLeadingUnderscore.cpp:
        (WebCore::JSTestInterfaceLeadingUnderscoreDOMConstructor::prototypeForStructure):
        * bindings/scripts/test/JS/JSTestInterfaceLeadingUnderscore.h:
        (WebCore::JSTestInterfaceLeadingUnderscore::create):
        * bindings/scripts/test/JS/JSTestIterable.cpp:
        (WebCore::JSTestIterableDOMConstructor::prototypeForStructure):
        (WebCore::jsTestIterablePrototypeFunction_entriesCaller):
        * bindings/scripts/test/JS/JSTestIterable.h:
        (WebCore::JSTestIterable::create):
        * bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp:
        (WebCore::JSTestJSBuiltinConstructorDOMConstructor::prototypeForStructure):
        * bindings/scripts/test/JS/JSTestJSBuiltinConstructor.h:
        (WebCore::JSTestJSBuiltinConstructor::create):
        * bindings/scripts/test/JS/JSTestLegacyFactoryFunction.cpp:
        (WebCore::JSTestLegacyFactoryFunctionDOMConstructor::prototypeForStructure):
        * bindings/scripts/test/JS/JSTestLegacyFactoryFunction.h:
        (WebCore::JSTestLegacyFactoryFunction::create):
        * bindings/scripts/test/JS/JSTestLegacyNoInterfaceObject.cpp:
        (WebCore::JSTestLegacyNoInterfaceObjectPrototype::finishCreation):
        * bindings/scripts/test/JS/JSTestLegacyNoInterfaceObject.h:
        (WebCore::JSTestLegacyNoInterfaceObject::create):
        * bindings/scripts/test/JS/JSTestLegacyOverrideBuiltIns.cpp:
        (WebCore::JSTestLegacyOverrideBuiltInsDOMConstructor::prototypeForStructure):
        * bindings/scripts/test/JS/JSTestLegacyOverrideBuiltIns.h:
        (WebCore::JSTestLegacyOverrideBuiltIns::create):
        * bindings/scripts/test/JS/JSTestMapLike.cpp:
        (WebCore::JSTestMapLikeDOMConstructor::prototypeForStructure):
        * bindings/scripts/test/JS/JSTestMapLike.h:
        (WebCore::JSTestMapLike::create):
        * bindings/scripts/test/JS/JSTestMapLikeWithOverriddenOperations.cpp:
        (WebCore::JSTestMapLikeWithOverriddenOperationsDOMConstructor::prototypeForStructure):
        * bindings/scripts/test/JS/JSTestMapLikeWithOverriddenOperations.h:
        (WebCore::JSTestMapLikeWithOverriddenOperations::create):
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterNoIdentifier.cpp:
        (WebCore::JSTestNamedAndIndexedSetterNoIdentifierDOMConstructor::prototypeForStructure):
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterNoIdentifier.h:
        (WebCore::JSTestNamedAndIndexedSetterNoIdentifier::create):
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterThrowingException.cpp:
        (WebCore::JSTestNamedAndIndexedSetterThrowingExceptionDOMConstructor::prototypeForStructure):
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterThrowingException.h:
        (WebCore::JSTestNamedAndIndexedSetterThrowingException::create):
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterWithIdentifier.cpp:
        (WebCore::JSTestNamedAndIndexedSetterWithIdentifierDOMConstructor::prototypeForStructure):
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterWithIdentifier.h:
        (WebCore::JSTestNamedAndIndexedSetterWithIdentifier::create):
        * bindings/scripts/test/JS/JSTestNamedDeleterNoIdentifier.cpp:
        (WebCore::JSTestNamedDeleterNoIdentifierDOMConstructor::prototypeForStructure):
        * bindings/scripts/test/JS/JSTestNamedDeleterNoIdentifier.h:
        (WebCore::JSTestNamedDeleterNoIdentifier::create):
        * bindings/scripts/test/JS/JSTestNamedDeleterThrowingException.cpp:
        (WebCore::JSTestNamedDeleterThrowingExceptionDOMConstructor::prototypeForStructure):
        * bindings/scripts/test/JS/JSTestNamedDeleterThrowingException.h:
        (WebCore::JSTestNamedDeleterThrowingException::create):
        * bindings/scripts/test/JS/JSTestNamedDeleterWithIdentifier.cpp:
        (WebCore::JSTestNamedDeleterWithIdentifierDOMConstructor::prototypeForStructure):
        * bindings/scripts/test/JS/JSTestNamedDeleterWithIdentifier.h:
        (WebCore::JSTestNamedDeleterWithIdentifier::create):
        * bindings/scripts/test/JS/JSTestNamedDeleterWithIndexedGetter.cpp:
        (WebCore::JSTestNamedDeleterWithIndexedGetterDOMConstructor::prototypeForStructure):
        * bindings/scripts/test/JS/JSTestNamedDeleterWithIndexedGetter.h:
        (WebCore::JSTestNamedDeleterWithIndexedGetter::create):
        * bindings/scripts/test/JS/JSTestNamedGetterCallWith.cpp:
        (WebCore::JSTestNamedGetterCallWithDOMConstructor::prototypeForStructure):
        * bindings/scripts/test/JS/JSTestNamedGetterCallWith.h:
        (WebCore::JSTestNamedGetterCallWith::create):
        * bindings/scripts/test/JS/JSTestNamedGetterNoIdentifier.cpp:
        (WebCore::JSTestNamedGetterNoIdentifierDOMConstructor::prototypeForStructure):
        * bindings/scripts/test/JS/JSTestNamedGetterNoIdentifier.h:
        (WebCore::JSTestNamedGetterNoIdentifier::create):
        * bindings/scripts/test/JS/JSTestNamedGetterWithIdentifier.cpp:
        (WebCore::JSTestNamedGetterWithIdentifierDOMConstructor::prototypeForStructure):
        * bindings/scripts/test/JS/JSTestNamedGetterWithIdentifier.h:
        (WebCore::JSTestNamedGetterWithIdentifier::create):
        * bindings/scripts/test/JS/JSTestNamedSetterNoIdentifier.cpp:
        (WebCore::JSTestNamedSetterNoIdentifierDOMConstructor::prototypeForStructure):
        * bindings/scripts/test/JS/JSTestNamedSetterNoIdentifier.h:
        (WebCore::JSTestNamedSetterNoIdentifier::create):
        * bindings/scripts/test/JS/JSTestNamedSetterThrowingException.cpp:
        (WebCore::JSTestNamedSetterThrowingExceptionDOMConstructor::prototypeForStructure):
        * bindings/scripts/test/JS/JSTestNamedSetterThrowingException.h:
        (WebCore::JSTestNamedSetterThrowingException::create):
        * bindings/scripts/test/JS/JSTestNamedSetterWithIdentifier.cpp:
        (WebCore::JSTestNamedSetterWithIdentifierDOMConstructor::prototypeForStructure):
        * bindings/scripts/test/JS/JSTestNamedSetterWithIdentifier.h:
        (WebCore::JSTestNamedSetterWithIdentifier::create):
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetter.cpp:
        (WebCore::JSTestNamedSetterWithIndexedGetterDOMConstructor::prototypeForStructure):
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetter.h:
        (WebCore::JSTestNamedSetterWithIndexedGetter::create):
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetterAndSetter.cpp:
        (WebCore::JSTestNamedSetterWithIndexedGetterAndSetterDOMConstructor::prototypeForStructure):
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetterAndSetter.h:
        (WebCore::JSTestNamedSetterWithIndexedGetterAndSetter::create):
        * bindings/scripts/test/JS/JSTestNamedSetterWithLegacyOverrideBuiltIns.cpp:
        (WebCore::JSTestNamedSetterWithLegacyOverrideBuiltInsDOMConstructor::prototypeForStructure):
        * bindings/scripts/test/JS/JSTestNamedSetterWithLegacyOverrideBuiltIns.h:
        (WebCore::JSTestNamedSetterWithLegacyOverrideBuiltIns::create):
        * bindings/scripts/test/JS/JSTestNamedSetterWithLegacyUnforgeableProperties.cpp:
        (WebCore::JSTestNamedSetterWithLegacyUnforgeablePropertiesDOMConstructor::prototypeForStructure):
        * bindings/scripts/test/JS/JSTestNamedSetterWithLegacyUnforgeableProperties.h:
        (WebCore::JSTestNamedSetterWithLegacyUnforgeableProperties::create):
        * bindings/scripts/test/JS/JSTestNamedSetterWithLegacyUnforgeablePropertiesAndLegacyOverrideBuiltIns.cpp:
        (WebCore::JSTestNamedSetterWithLegacyUnforgeablePropertiesAndLegacyOverrideBuiltInsDOMConstructor::prototypeForStructure):
        * bindings/scripts/test/JS/JSTestNamedSetterWithLegacyUnforgeablePropertiesAndLegacyOverrideBuiltIns.h:
        (WebCore::JSTestNamedSetterWithLegacyUnforgeablePropertiesAndLegacyOverrideBuiltIns::create):
        * bindings/scripts/test/JS/JSTestNamespaceObject.h:
        (WebCore::JSTestNamespaceObject::create):
        * bindings/scripts/test/JS/JSTestNode.cpp:
        (WebCore::jsTestNodePrototypeFunction_entriesCaller):
        * bindings/scripts/test/JS/JSTestNode.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::JSTestObjDOMConstructor::construct):
        * bindings/scripts/test/JS/JSTestObj.h:
        (WebCore::JSTestObj::create):
        * bindings/scripts/test/JS/JSTestOperationConditional.cpp:
        (WebCore::JSTestOperationConditionalDOMConstructor::prototypeForStructure):
        * bindings/scripts/test/JS/JSTestOperationConditional.h:
        (WebCore::JSTestOperationConditional::create):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.h:
        (WebCore::JSTestOverloadedConstructors::create):
        * bindings/scripts/test/JS/JSTestOverloadedConstructorsWithSequence.cpp:
        * bindings/scripts/test/JS/JSTestOverloadedConstructorsWithSequence.h:
        (WebCore::JSTestOverloadedConstructorsWithSequence::create):
        * bindings/scripts/test/JS/JSTestPluginInterface.cpp:
        (WebCore::JSTestPluginInterfaceDOMConstructor::prototypeForStructure):
        * bindings/scripts/test/JS/JSTestPluginInterface.h:
        (WebCore::JSTestPluginInterface::create):
        * bindings/scripts/test/JS/JSTestPromiseRejectionEvent.cpp:
        * bindings/scripts/test/JS/JSTestPromiseRejectionEvent.h:
        (WebCore::JSTestPromiseRejectionEvent::create):
        * bindings/scripts/test/JS/JSTestReadOnlyMapLike.cpp:
        (WebCore::JSTestReadOnlyMapLikeDOMConstructor::prototypeForStructure):
        * bindings/scripts/test/JS/JSTestReadOnlyMapLike.h:
        (WebCore::JSTestReadOnlyMapLike::create):
        * bindings/scripts/test/JS/JSTestReadOnlySetLike.cpp:
        (WebCore::JSTestReadOnlySetLikeDOMConstructor::prototypeForStructure):
        * bindings/scripts/test/JS/JSTestReadOnlySetLike.h:
        (WebCore::JSTestReadOnlySetLike::create):
        * bindings/scripts/test/JS/JSTestReportExtraMemoryCost.cpp:
        (WebCore::JSTestReportExtraMemoryCostDOMConstructor::prototypeForStructure):
        * bindings/scripts/test/JS/JSTestReportExtraMemoryCost.h:
        (WebCore::JSTestReportExtraMemoryCost::create):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::JSTestSerializedScriptValueInterfaceDOMConstructor::prototypeForStructure):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h:
        (WebCore::JSTestSerializedScriptValueInterface::create):
        * bindings/scripts/test/JS/JSTestSetLike.cpp:
        (WebCore::JSTestSetLikeDOMConstructor::prototypeForStructure):
        * bindings/scripts/test/JS/JSTestSetLike.h:
        (WebCore::JSTestSetLike::create):
        * bindings/scripts/test/JS/JSTestSetLikeWithOverriddenOperations.cpp:
        (WebCore::JSTestSetLikeWithOverriddenOperationsDOMConstructor::prototypeForStructure):
        * bindings/scripts/test/JS/JSTestSetLikeWithOverriddenOperations.h:
        (WebCore::JSTestSetLikeWithOverriddenOperations::create):
        * bindings/scripts/test/JS/JSTestStringifier.cpp:
        (WebCore::JSTestStringifierDOMConstructor::prototypeForStructure):
        * bindings/scripts/test/JS/JSTestStringifier.h:
        (WebCore::JSTestStringifier::create):
        * bindings/scripts/test/JS/JSTestStringifierAnonymousOperation.cpp:
        (WebCore::JSTestStringifierAnonymousOperationDOMConstructor::prototypeForStructure):
        * bindings/scripts/test/JS/JSTestStringifierAnonymousOperation.h:
        (WebCore::JSTestStringifierAnonymousOperation::create):
        * bindings/scripts/test/JS/JSTestStringifierNamedOperation.cpp:
        (WebCore::JSTestStringifierNamedOperationDOMConstructor::prototypeForStructure):
        * bindings/scripts/test/JS/JSTestStringifierNamedOperation.h:
        (WebCore::JSTestStringifierNamedOperation::create):
        * bindings/scripts/test/JS/JSTestStringifierOperationImplementedAs.cpp:
        (WebCore::JSTestStringifierOperationImplementedAsDOMConstructor::prototypeForStructure):
        * bindings/scripts/test/JS/JSTestStringifierOperationImplementedAs.h:
        (WebCore::JSTestStringifierOperationImplementedAs::create):
        * bindings/scripts/test/JS/JSTestStringifierOperationNamedToString.cpp:
        (WebCore::JSTestStringifierOperationNamedToStringDOMConstructor::prototypeForStructure):
        * bindings/scripts/test/JS/JSTestStringifierOperationNamedToString.h:
        (WebCore::JSTestStringifierOperationNamedToString::create):
        * bindings/scripts/test/JS/JSTestStringifierReadOnlyAttribute.cpp:
        (WebCore::JSTestStringifierReadOnlyAttributeDOMConstructor::prototypeForStructure):
        * bindings/scripts/test/JS/JSTestStringifierReadOnlyAttribute.h:
        (WebCore::JSTestStringifierReadOnlyAttribute::create):
        * bindings/scripts/test/JS/JSTestStringifierReadWriteAttribute.cpp:
        (WebCore::JSTestStringifierReadWriteAttributeDOMConstructor::prototypeForStructure):
        * bindings/scripts/test/JS/JSTestStringifierReadWriteAttribute.h:
        (WebCore::JSTestStringifierReadWriteAttribute::create):
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::JSTestTypedefsDOMConstructor::construct):
        * bindings/scripts/test/JS/JSTestTypedefs.h:
        (WebCore::JSTestTypedefs::create):
        * bindings/scripts/test/JS/JSWorkerGlobalScope.h:
        (WebCore::JSWorkerGlobalScope::create):
        * bindings/scripts/test/JS/JSWorkletGlobalScope.h:
        (WebCore::JSWorkletGlobalScope::create):
        * bridge/objc/ObjCRuntimeObject.h:
        * bridge/objc/objc_instance.mm:
        (JSC::Bindings::ObjcInstance::getMethod):
        * bridge/objc/objc_runtime.h:
        * bridge/runtime_array.h:
        * bridge/runtime_method.h:
        * bridge/runtime_object.h:

2021-11-12  Antoine Quint  <graouts@webkit.org>

        [Web Animations] Accelerated animations with a single keyframe don't account for prior forward-filling animations
        https://bugs.webkit.org/show_bug.cgi?id=233041
        <rdar://problem/85236241>

        Reviewed by Dean Jackson.

        Test: webanimations/accelerated-animation-after-forward-filling-animation.html

        When starting an accelerated animation, we would fill any implicit keyframes based on the unanimated style.
        We now also apply all animations below this animation in the target's effect stack such that a previous
        forward-filling animation is accounted for.

        * animation/KeyframeEffect.cpp:
        (WebCore::KeyframeEffect::applyPendingAcceleratedActions):

2021-11-12  Wenson Hsieh  <wenson_hsieh@apple.com>

        Move subtree update logic in ImageOverlay::updateWithTextRecognitionResult() into a separate helper
        https://bugs.webkit.org/show_bug.cgi?id=233010

        Reviewed by Aditya Keerthi.

        Split `updateWithTextRecognitionResult()` into two phases: the first of which updates the UA shadow DOM to
        reflect the given text recognition results, and a second phase that updates inline styles for each of the image
        overlay elements by mapping normalized OCR quads onto rotated bounding rects in client coordinates. This will
        make it easier to add support for representing `TextRecognitionBlockData` as image overlay content in the next
        patch.

        * dom/ImageOverlay.cpp:
        (WebCore::ImageOverlay::imageOverlayLineClass):
        (WebCore::ImageOverlay::imageOverlayTextClass):
        (WebCore::ImageOverlay::updateSubtree):

        Now that this is all namespaced inside `ImageOverlay`, we can also simplify some of these names. Instead of
        TextRecognitionLineElements and TextRecognitionElements, we can just call them LineElements and Elements.

        (WebCore::ImageOverlay::updateWithTextRecognitionResult):

2021-11-12  Adrian Perez de Castro  <aperez@igalia.com>

        Some C++ source files use #pragma once
        https://bugs.webkit.org/show_bug.cgi?id=233040

        Reviewed by Chris Dumez.

        Remove spurious usage of "#pragma once" in implementation files.

        No new tests needed.

        * Modules/WebGPU/GPUBuffer.cpp:
        * Modules/WebGPU/GPUCommandEncoder.cpp:
        * Modules/WebGPU/GPUComputePassEncoder.cpp:
        * Modules/WebGPU/GPUQuerySet.cpp:
        * Modules/WebGPU/GPUQueue.cpp:
        * Modules/WebGPU/GPURenderBundleEncoder.cpp:
        * Modules/WebGPU/GPURenderPassEncoder.cpp:
        * page/PerformanceNavigationTiming.cpp:

2021-11-12  Philippe Normand  <pnormand@igalia.com>

        [GLib] Developer build with release logs disabled fails
        https://bugs.webkit.org/show_bug.cgi?id=232931

        Reviewed by Adrian Perez de Castro.

        * platform/audio/PlatformMediaSession.cpp: Remove ifdef around convertEnumerationToString
        functions, required by Internals.

2021-11-12  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add inline box margin-start support for visual ordering (bidi)
        https://bugs.webkit.org/show_bug.cgi?id=233022

        Reviewed by Antti Koivisto.

        Line run geometry is margin box based (only applicable for inline level boxes), while
        the displayRect() returns border box based geometry (again, only relevant for inline level boxes).
        When computing the border box based left position using the distanceFromLogicalPreviousRun (line run based)
        we have to offset it with the margin value.

        * layout/formattingContexts/inline/InlineDisplayContentBuilder.cpp:
        (WebCore::Layout::InlineDisplayContentBuilder::createBoxesAndUpdateGeometryForLineContent):

2021-11-12  Adrian Perez de Castro  <aperez@igalia.com>

        Non-unified build fixes, early November 2021 edition, bis x2

        Unreviewed non-unified build fixes.

        * platform/gamepad/GamepadConstants.h: Use wtf/Forward.h instead of manually
        forward-declaring the WTF::String type in the file.

2021-11-12  Tim Nguyen  <ntim@apple.com>

        Re-use isCSSWideKeyword in CSSCustomPropertyValue::createWithID
        https://bugs.webkit.org/show_bug.cgi?id=233035

        Reviewed by Antti Koivisto.

        * css/CSSCustomPropertyValue.cpp:
        (WebCore::CSSCustomPropertyValue::createWithID):
        * css/CSSCustomPropertyValue.h:

2021-11-12  Antti Koivisto  <antti@apple.com>

        Stack overflow with revert and revert-layer
        https://bugs.webkit.org/show_bug.cgi?id=233033
        rdar://85336439

        Reviewed by Antoine Quint.

        Test: fast/css/revert-layer-stack-overflow.html

        We end up using a rollback cascade made for revert-layer to do revert and that leads to eternal recursion.

        * style/StyleBuilder.cpp:
        (WebCore::Style::Builder::ensureRollbackCascadeForRevert):
        (WebCore::Style::Builder::ensureRollbackCascadeForRevertLayer):

        Key the rollback cascade map with the reverted values instead of the original ones since the same
        original keys produce different rollbacks depending on whether it is made for revert or revert-layer.

2021-11-12  Antti Koivisto  <antti@apple.com>

        REGRESSION(r285624) Using revert keyword with a css variable hits assert
        https://bugs.webkit.org/show_bug.cgi?id=233031
        rdar://85332271

        Reviewed by Tim Horton.

        Test: fast/selectors/variable-revert-crash.html

        * style/StyleBuilderState.h:

        Default initialization set the variable to a value that is not in the enumeration.

2021-11-11  Sergio Villar Senin  <svillar@igalia.com>

        [css-flexbox] Add flex-basis: content support
        https://bugs.webkit.org/show_bug.cgi?id=221479

        Reviewed by Javier Fernandez.

        Add support for the content keyword as a valid value for the flex-basis property.
        It indicates an automated size based on the contents of the flex item. It's typically
        equivalent to the max-content size but it has some adjustments for aspect ratios,
        orthogonal flows and intrinsic sizing constraints.

        Apart from adding the parsing support, it required very little adjustments in the
        flexbox code after the refactoring in r284359.

        This makes WebKit pass all of the flex-basis:content tests in WPT. We're talking
        about 6 tests testing the feature and 6 subtests related to parsing.

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue): Handle Content in switch.
        (WebCore::CSSPrimitiveValue::init): Initialization for content CSS value.
        * css/CSSProperties.json:
        * css/LengthFunctions.cpp: Replaced LengthOrAuto by LengthSizing.
        (WebCore::valueForLength): Handle Content in switch.
        (WebCore::floatValueForLength): Ditto.
        * css/LengthFunctions.h:
        (WebCore::minimumValueForLength): Ditto.
        * css/calc/CSSCalcValue.cpp:
        (WebCore::createCSS): Ditto.
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeFlexBasis): Consume CSSValueContent.
        (WebCore::CSSPropertyParser::consumeFlex): Ditto.
        * platform/Length.cpp:
        (WebCore::operator<<): Added printing support for content.
        * platform/Length.h:
        (WebCore::Length::initialize): Added enum for content.
        (WebCore::Length::isContent const): New method.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeReplacedLogicalWidthUsing const): Handle content in switch.
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::childMainSizeIsDefinite): Treat content as indefinite lenght.
        (WebCore::RenderFlexibleBox::computeFlexBaseSizeForChild): Compute flex-basis using max-content
        if flex-basis:content is specified.
        * style/StyleBuilderConverter.h:
        (WebCore::Style::BuilderConverter::convertLengthSizing): Handle content in switch.

2021-11-11  Brent Fulgham  <bfulgham@apple.com>

        [WebAuthn] Stop serializing BufferSource and Vector<uint8_t> duplicates of identifiers
        https://bugs.webkit.org/show_bug.cgi?id=233011
        <rdar://problem/85313807>

        Reviewed by Chris Dumez.

        The original WebAuthn logic converted WebCore::BufferSource objects to Vector<uint8_t>
        during serialization, which created a weird design where some code dealt with BufferSource
        objects, and other with Vectors, and lots of converting to and from these types. It also caused
        WebAuthn data structures to have two places where this information might live, with the
        UIProcess using one representation, and the WebContent process using another.

        This patch revises the code as follows:

        1. The identifiers are always stored as BufferSource, and the same member is used in UIProcess
           and WebContent process when accessing this information.
        2. We now serialize BufferSource directly.

        Tested by existing WebAuthn test cases (API and Layout tests)

        * Modules/webauthn/PublicKeyCredentialCreationOptions.h:
        (WebCore::PublicKeyCredentialCreationOptions::encode const):
        (WebCore::PublicKeyCredentialCreationOptions::decode):
        * Modules/webauthn/PublicKeyCredentialDescriptor.h:
        (WebCore::PublicKeyCredentialDescriptor::encode const):
        (WebCore::PublicKeyCredentialDescriptor::decode):
        * Modules/webauthn/PublicKeyCredentialRequestOptions.h:
        (WebCore::PublicKeyCredentialRequestOptions::decode):
        * Modules/webauthn/cbor/CBORValue.cpp:
        (cbor::CBORValue::CBORValue):
        * Modules/webauthn/cbor/CBORValue.h:
        * Modules/webauthn/fido/DeviceRequestConverter.cpp:
        (fido::convertUserEntityToCBOR):
        (fido::convertDescriptorToCBOR):
        * Modules/webauthn/fido/U2fCommandConstructor.cpp:
        (fido::WebCore::constructU2fSignCommand):
        (fido::convertToU2fCheckOnlySignCommand):
        (fido::convertToU2fSignCommand):
        * Modules/webauthn/fido/U2fCommandConstructor.h:
        * Modules/webauthn/fido/U2fResponseConverter.cpp:
        (fido::readU2fSignResponse):
        * Modules/webauthn/fido/U2fResponseConverter.h:
        * bindings/js/BufferSource.h:
        (WebCore::BufferSource::encode const):
        (WebCore::BufferSource::decode):
        (WebCore::toBufferSource):

2021-11-11  Michael Catanzaro  <mcatanzaro@gnome.org>

        Misc compiler warnings
        https://bugs.webkit.org/show_bug.cgi?id=232989

        Reviewed by Darin Adler.

        * contentextensions/ContentExtensionActions.cpp:
        (WebCore::ContentExtensions::RedirectAction::URLTransformAction::parse):
        (WebCore::ContentExtensions::RedirectAction::URLTransformAction::QueryTransform::parse):
        * platform/graphics/transforms/ScaleTransformOperation.cpp:
        (WebCore::blendScaleComponent):
        * style/CascadeLevel.h:
        (WebCore::Style::operator--):

2021-11-11  Mark Lam  <mark.lam@apple.com>

        Add VM::writeBarrier() and VM::mutatorFence().
        https://bugs.webkit.org/show_bug.cgi?id=233019
        rdar://85318693

        Reviewed by Saam Barati.

        * bindings/js/JSDOMGuardedObject.cpp:
        (WebCore::DOMGuardedObject::DOMGuardedObject):
        * bindings/js/JSEventListener.h:
        (WebCore::JSEventListener::ensureJSFunction const):
        * bindings/js/JSValueInWrappedObject.h:
        (WebCore::cachedPropertyValue):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateAttributeSetterBodyDefinition):
        (GenerateWriteBarriersForArguments):
        * bindings/scripts/test/JS/JSTestDefaultToJSON.cpp:
        (WebCore::setJSTestDefaultToJSON_eventHandlerAttributeSetter):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::setJSTestObj_onfooSetter):
        (WebCore::setJSTestObj_onwebkitfooSetter):
        (WebCore::jsTestObjPrototypeFunction_addEventListenerBody):
        (WebCore::jsTestObjPrototypeFunction_removeEventListenerBody):
        * worklets/PaintWorkletGlobalScope.cpp:
        (WebCore::PaintWorkletGlobalScope::registerPaint):

2021-11-11  Tyler Wilcock  <tyler_w@apple.com>

        AX: Add missing AXID variant to AXPropertyValueVariant
        https://bugs.webkit.org/show_bug.cgi?id=233004

        Reviewed by Chris Fleizach.

        In AXIsolatedObject::setObjectProperty, we set property values to be
        AXIDs. However, there is no AXID variant in AXPropertyValueVariant,
        so none of these property lookups ever returned values.

        This patch adds AXID as a variant to AXPropertyValueVariant, fixing
        ~15 text-only failures.

        * accessibility/isolatedtree/AXIsolatedTree.h:
        Add AXID as a variant to AXPropertyValueVariant.

2021-11-11  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Live Text] Augment TextRecognitionResult with a new type of text recognition data
        https://bugs.webkit.org/show_bug.cgi?id=233009

        Reviewed by Devin Rousso.

        Add the new type, along with encoding/decoding support. No change in behavior.

        * platform/TextRecognitionResult.h:
        (WebCore::TextRecognitionBlockData::TextRecognitionBlockData):
        (WebCore::TextRecognitionBlockData::encode const):
        (WebCore::TextRecognitionBlockData::decode):
        (WebCore::TextRecognitionResult::isEmpty const):
        (WebCore::TextRecognitionResult::encode const):
        (WebCore::TextRecognitionResult::decode):
        * testing/Internals.cpp:
        (WebCore::Internals::installImageOverlay):

2021-11-11  Nikolaos Mouchtaris  <nmouchtaris@apple.com>

        REGRESSION: (r283871) [ macOS wk2 Release ] 2 css/cssom-view/scroll-behavior-main-frame tests are failing
        https://bugs.webkit.org/show_bug.cgi?id=231600

        Reviewed by Simon Fraser.

        Fix for issue where a scroll animation is not properly cancelled by a second scroll request.
        This occurs when the first scroll animation has not been fully started by the time the second
        request has been received by the scrolling thread (first animation still in 
        m_nodesWithPendingScrollAnimations). For the scenario where the second scroll request is animated, 
        we change ThreadedScrollingTree::scrollingTreeNodeRequestsScroll to use set (add is ignored if
        key exists in the hash map which caused the second request to be ignored). For the scenario 
        where the second scroll request is not animated, we clear the pending request for that 
        scrolling node (if one exists).

        * page/scrolling/ScrollingTree.h:
        (WebCore::ScrollingTree::removePendingScrollAnimationForNode):
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::handleScrollPositionRequest):
        * page/scrolling/ThreadedScrollingTree.cpp:
        (WebCore::ThreadedScrollingTree::scrollingTreeNodeRequestsScroll):
        (WebCore::ThreadedScrollingTree::removePendingScrollAnimationForNode):
        * page/scrolling/ThreadedScrollingTree.h:

2021-11-11  Wenson Hsieh  <wenson_hsieh@apple.com>

        Move image overlay code out of HTMLElement and into a separate helper file
        https://bugs.webkit.org/show_bug.cgi?id=232974

        Reviewed by Antti Koivisto.

        Move code for updating, querying, and removing image overlays out of HTMLElement.cpp and HTMLElement.h and into
        separate helper files instead (ImageOverlay.h and ImageOverlay.cpp). Future patches in this area will extend the
        functionality of these overlays, so this will help avoid code bloat inside HTMLElement when doing so.

        No change in behavior.

        * Headers.cmake:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/ImageOverlay.cpp: Added.
        (WebCore::ImageOverlay::imageOverlayElementIdentifier):
        (WebCore::ImageOverlay::imageOverlayDataDetectorClassName):
        (WebCore::ImageOverlay::hasOverlay):
        (WebCore::ImageOverlay::imageOverlayHost):
        (WebCore::ImageOverlay::isDataDetectorResult):
        (WebCore::ImageOverlay::isInsideOverlay):
        (WebCore::ImageOverlay::isOverlayText):
        (WebCore::ImageOverlay::removeOverlaySoonIfNeeded):
        (WebCore::ImageOverlay::containerRect):
        (WebCore::ImageOverlay::updateWithTextRecognitionResult):
        * dom/ImageOverlay.h: Added.

        Additionally wrap the new image overlay helper functions in the `ImageOverlay` namespace. This also allows us to
        shorten some of the function names, since they're already under the namespace, so duplicating "ImageOverlay" in
        the function name itself is unnecessary.

        * editing/Editor.cpp:
        (WebCore::Editor::performCutOrCopy):
        (WebCore::scanForTelephoneNumbers):
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::contains const):
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::handleReplacedElement):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::shouldExtendSelectionToTargetNode):
        (WebCore::HTMLElement::selectionRenderingBehavior):
        (WebCore::imageOverlayElementIdentifier): Deleted.
        (WebCore::imageOverlayDataDetectorClassName): Deleted.
        (WebCore::HTMLElement::hasImageOverlay const): Deleted.
        (WebCore::imageOverlayHost): Deleted.
        (WebCore::HTMLElement::isImageOverlayDataDetectorResult const): Deleted.
        (WebCore::HTMLElement::isInsideImageOverlay): Deleted.
        (WebCore::HTMLElement::isImageOverlayText): Deleted.
        (WebCore::HTMLElement::removeImageOverlaySoonIfNeeded): Deleted.
        (WebCore::HTMLElement::containerRectForTextRecognition): Deleted.
        (WebCore::HTMLElement::updateWithTextRecognitionResult): Deleted.
        * html/HTMLElement.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::seekWithTolerance):
        (WebCore::HTMLMediaElement::playInternal):
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::populate):
        * page/DragController.cpp:
        (WebCore::DragController::draggableElement const):
        (WebCore::DragController::startDrag):
        * page/EventHandler.cpp:
        (WebCore::nodeToSelectOnMouseDownForNode):
        (WebCore::EventHandler::canMouseDownStartSelect):
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::EventHandler::updateSelectionForMouseDrag):
        (WebCore::EventHandler::hitTestResultAtPoint const):
        (WebCore::EventHandler::selectCursor):
        * page/ImageOverlayController.cpp:
        (WebCore::ImageOverlayController::selectionQuadsDidChange):
        * page/Page.cpp:
        (WebCore::Page::updateElementsWithTextRecognitionResults):
        * page/mac/ImageOverlayControllerMac.mm:
        (WebCore::ImageOverlayController::updateDataDetectorHighlights):
        (WebCore::ImageOverlayController::elementUnderMouseDidChange):
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::nodeForImageData const):
        (WebCore::HitTestResult::addNodeToListBasedTestResultCommon):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::RenderImage):
        * testing/Internals.cpp:
        (WebCore::Internals::installImageOverlay):

2021-11-11  Adrian Perez de Castro  <aperez@igalia.com>

        Non-unified build fixes, early November 2021 edition, bis
        https://bugs.webkit.org/show_bug.cgi?id=232998

        Unreviewed non-unified build fixes.

        No new tests needed.

        * Modules/WebGPU/GPUColorWrite.h: Remove unneeded inclusion of wtf/RefCounted.h.
        * Modules/WebGPU/GPUOutOfMemoryError.h: Replace inclusion of header wtf/Ref.h with
        wtf/RefPtr.h.
        * Modules/WebGPU/GPURenderPassEncoder.cpp: Add missing headers GPUBindGroup,h,
        GPUQuerySet.h, GPURenderBundle.h, and GPURenderPipeline.h
        * Modules/WebGPU/GPUSupportedLimits.h: Remove unneeded inclusions of headers which are
        picked transitively from WebGPUSupportedLimits.h
        * Modules/mediastream/RTCDataChannel.cpp: Add missing header
        RTCDataChannelRemoteHandlerConnection.h
        * Modules/webaudio/AudioBuffer.h: Add missing JavaScriptCore/GenericTypedArrayView.h header.
        * bindings/js/ScriptModuleLoader.cpp: Add missing DocumentInlines.h header.
        * contentextensions/ContentExtensionActions.cpp: Add missing wtf/URL.h header.
        * dom/FragmentDirectiveParser.cpp: Add missing wtf/Deque.h header.
        * dom/FragmentDirectiveParser.h: Add missing wtf/text/WTFString.h header.
        * editing/atk/FrameSelectionAtk.cpp: Replace inclusion of header Document.h with
        DocumentInlines.h.
        * html/HTMLElement.cpp: Add missing EventLoop.h header inclusion.
        * html/HTMLFrameElement.cpp: Add missing ElementInlines.h header inclusion.
        * html/HTMLHRElement.cpp: Ditto.
        * html/HTMLInputElement.cpp: Ditto.
        * html/SearchInputType.cpp: Ditto.
        * loader/DocumentLoader.cpp: Add missing DocumentInlines.h header inclusion.
        * platform/audio/glib/MediaSessionManagerGLib.cpp: Add missing MediaSessionGLib.h header
        inclusion.
        * platform/gamepad/GamepadConstants.h: Add missing WTF:: namespace prefix to uses of
        WTF::String.
        * platform/mediastream/AudioMediaStreamTrackRenderer.cpp: Add missing inclusion of
        LibWebRTCAudioModule.h header, guarded by USE(LIBWEBRTC).
        * rendering/CSSFilter.cpp: Add missing inclusion of headers FilterOperations.h,
        GraphicsContext.h, LengthFunctions.h, and RenderElement.h
        * rendering/svg/SVGResourcesCache.cpp: Add missing inclusion of ElementInlines.h header.

2021-11-11  Mark Lam  <mark.lam@apple.com>

        Rename Heap::isCurrentThreadBusy() to Heap::currentThreadIsDoingGCWork().
        https://bugs.webkit.org/show_bug.cgi?id=233005
        rdar://85307204

        Reviewed by Saam Barati.

        * bindings/js/GCController.cpp:
        (WebCore::GCController::garbageCollectNow):
        (WebCore::GCController::garbageCollectNowIfNotDoneRecently):
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::deleteJSCodeAndGC):

2021-11-11  Michael Catanzaro  <mcatanzaro@gnome.org>

        -Warray-bounds, -Wstringop-truncation, -Wstringop-overread warnings in Packed.h
        https://bugs.webkit.org/show_bug.cgi?id=226557
        <rdar://problem/79103658>

        Reviewed by Darin Adler.

        Since -Wstringop-overread is now suppressed globally, we can include WebSocket.cpp in the
        unified build once again.

        * CMakeLists.txt:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

2021-11-11  Ben Nham  <nham@apple.com>

        Log memory usage metadata when WebContent crosses critical or warning level memory thresholds
        https://bugs.webkit.org/show_bug.cgi?id=232976

        Reviewed by Darin Adler.

        WebCore::logMemoryStatistics was changed to:

         - Emit VM tag names as public strings to the log. There isn't anything privacy sensitive
           about our 256 fixed VM tags, and emitting them to the logs as as private string (as we
           were doing before) made those log lines useless.
         - Use WebCore::memoryUsageStatistics to gather memory metadata, since other WebCore
           callsites were already using that and it reduces code duplication.
         - Only log JS object type counts on internal OS builds. Previously we also logged those
           counts on public OS builds, but that was useless since all the class names were redacted
           in the log.

        * page/MemoryRelease.cpp:
        (WebCore::logMemoryStatistics):
        (WebCore::logMemoryStatisticsReasonDescription):
        (WebCore::pageCount): Deleted.
        (WebCore::logMemoryStatisticsAtTimeOfDeath): Deleted.
        * page/MemoryRelease.h:
        * page/PerformanceLogging.cpp:
        (WebCore::PerformanceLogging::memoryUsageStatistics):
        (WebCore::PerformanceLogging::didReachPointOfInterest):
        * page/PerformanceLogging.h:
        * page/cocoa/PerformanceLoggingCocoa.mm:
        (WebCore::PerformanceLogging::getPlatformMemoryUsageStatistics):

2021-11-11  Jer Noble  <jer.noble@apple.com>

        [iOS] Adopt -[AVAudioSession setAuditTokensForProcessAssertion:]
        https://bugs.webkit.org/show_bug.cgi?id=232909
        <rdar://68184444>

        Reviewed by Chris Dumez.

        Wrap the implementation of setPresentingProcess() in a HAVE guard.

        * platform/audio/ios/AudioSessionIOS.mm:
        (WebCore::AudioSessionIOS::setPresentingProcesses):

2021-11-11  Rachel Ginsberg  <rginsberg@apple.com>

        Add support in WebCore for web app manifest icons
        https://bugs.webkit.org/show_bug.cgi?id=231339
        rdar://84311306

        Reviewed by Brent Fulgham.

        Tests are added to OpenSource/Tools/TestWebKitAPI/Tests/WebCore/ApplicationManifestParser.cpp

        * Modules/applicationmanifest/ApplicationManifest.h:
        A new enum for the icon purpose (Icon::Purpose) was added to the ApplicationManifest::Icon struct.
        A new Icon struct containing variable for the src, sizes,
        type, and Icon::Purpose attributes for app manifest icons was added to the ApplicationManifest
        struct. A vector of Icon's is added as a variable for
        the ApplicationManifest struct.
        (WebCore::ApplicationManifest::encode const):
        Added icons to encode function
        (WebCore::ApplicationManifest::decode):
        Added icons to decode function
        (WebCore::ApplicationManifest::Icon::encode const):
        Create encode function for ApplicationManifest::Icon
        (WebCore::ApplicationManifest::Icon::decode):
        Create decode function for ApplicationManifest::Icon

        * Modules/applicationmanifest/ApplicationManifestParser.cpp:
        (WebCore::ApplicationManifestParser::parseManifest):
        Added call to parseIcons
        (WebCore::ApplicationManifestParser::parseIcons):
        parseIcons iterates through the list of icons, performs checks for attribute,
        and then, if valid, adds the attribute to an ApplicationManifestIcon struct
        that is appended to a new Vector of ApplicationManifestIcons.

        * Modules/applicationmanifest/ApplicationManifestParser.h:
        Declare functions for ApplicationManifestParser

2021-11-11  Kimmo Kinnunen  <kkinnunen@apple.com>

        REGRESSION (iOS 15, GPU Process): Fails to load texture map
        https://bugs.webkit.org/show_bug.cgi?id=231471
        <rdar://problem/84328146>

        Reviewed by Tim Horton.

        Clear the CGImage copy from the IOSurface CGContext after the IOSurface has
        been drawn to a bitmap CGContext. The CGImage stored in the IOSurface CGContext
        contains a malloc buffer of the data. This buffer is counted against GPU
        process memory consumption, causing GPU process jetsams.

        * platform/graphics/cg/ImageBufferIOSurfaceBackend.cpp:
        (WebCore::ImageBufferIOSurfaceBackend::draw):
        * platform/graphics/cg/ImageBufferIOSurfaceBackend.h:

2021-11-11  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Reset InlineTextItem width on bidi split
        https://bugs.webkit.org/show_bug.cgi?id=233002

        Reviewed by Darin Adler.

        We remeasure the individual inline items right before line breaking.

        * layout/formattingContexts/inline/InlineTextItem.cpp:
        (WebCore::Layout::InlineTextItem::split):

2021-11-11  Nikolaos Mouchtaris  <nmouchtaris@apple.com>

        Make scroll granularity an enum class
        https://bugs.webkit.org/show_bug.cgi?id=232641

        Reviewed by Cameron McCormack.

        * dom/Element.cpp:
        (WebCore::Element::scrollByLines):
        (WebCore::Element::scrollByPages):
        * editing/EditorCommand.cpp:
        (WebCore::executeScrollPageBackward):
        (WebCore::executeScrollPageForward):
        (WebCore::executeScrollLineUp):
        (WebCore::executeScrollLineDown):
        (WebCore::executeScrollToBeginningOfDocument):
        (WebCore::executeScrollToEndOfDocument):
        * page/EventHandler.cpp:
        (WebCore::wheelGranularityToScrollGranularity):
        (WebCore::EventHandler::logicalScrollRecursively):
        (WebCore::EventHandler::defaultSpaceEventHandler):
        (WebCore::EventHandler::scrollDistance):
        * page/FrameView.cpp:
        (WebCore::FrameView::adjustScrollStepForFixedContent):
        * platform/KeyboardScrollingAnimator.cpp:
        (WebCore::KeyboardScrollingAnimator::scrollDistance const):
        (WebCore::KeyboardScrollingAnimator::keyboardScrollForKeyboardEvent const):
        (WebCore::KeyboardScrollingAnimator::beginKeyboardScrollGesture):
        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::handleWheelEvent):
        * platform/ScrollTypes.h:
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::scroll):
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::pressedPartScrollGranularity):
        * platform/ios/ScrollAnimatorIOS.mm:
        (WebCore::ScrollAnimatorIOS::handleTouchEvent):
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenuWin::wndProc):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::logicalScroll):

2021-11-11  Alexey Shvayka  <ashvayka@apple.com>

        JSCallbackData should use lexical global object for errors and lifecycle
        https://bugs.webkit.org/show_bug.cgi?id=232387

        Reviewed by Geoff Garen.

        Currently, JSCallbackData uses incumbent [1] global object pretty much for everything,
        which causes a few issues:

          1) TypeErrors are constructed in incorrect realm;
          2) NodeFilter / XPathNSResolver crash if their incumbent window gets disconnected;
          3) other callbacks, originated in detached frame, were not invoked at all.

        Since not all handleEvent() callers have ScriptExecutionContext, and to avoid a large
        code diff, this patch utilizes callback wrapper's ScriptExecutionContext to fix all
        the above-mentioned problems.

        To accomodate NodeFilter and XPathNSResolver of detached frames without growing `sizeof`
        of all other other callbacks, m_globalObject member is introduced only for them.

        AudioWorklet changes are unobservable as worklets can't acquire a cross-realm method.

        [1] https://html.spec.whatwg.org/multipage/webappapis.html#incumbent

        Tests: fast/dom/Geolocation/callback-to-deleted-context.html
               imported/w3c/web-platform-tests/dom/traversal/TreeWalker-acceptNode-filter-cross-realm-null-browsing-context.html
               imported/w3c/web-platform-tests/dom/traversal/TreeWalker-acceptNode-filter-cross-realm.html

        * Modules/geolocation/PositionErrorCallback.idl:
        * Modules/webaudio/AudioWorkletGlobalScope.cpp:
        (WebCore::AudioWorkletGlobalScope::registerProcessor):
        (WebCore::AudioWorkletGlobalScope::createProcessor):
        * Modules/webaudio/AudioWorkletProcessor.cpp:
        (WebCore::AudioWorkletProcessor::create):
        (WebCore::AudioWorkletProcessor::AudioWorkletProcessor):
        (WebCore::AudioWorkletProcessor::process):
        (WebCore::AudioWorkletProcessor::setProcessCallback):
        * Modules/webaudio/AudioWorkletProcessor.h:
        (WebCore::AudioWorkletProcessor::processCallbackWrapper):
        * bindings/js/JSAudioWorkletProcessorCustom.cpp:
        (WebCore::JSAudioWorkletProcessor::visitAdditionalChildren):
        * bindings/js/JSCallbackData.cpp:
        (WebCore::JSCallbackData::invokeCallback):
        * bindings/js/JSCallbackData.h:
        (WebCore::JSCallbackData::JSCallbackData):
        (WebCore::JSCallbackData::~JSCallbackData):
        (WebCore::JSCallbackDataStrong::JSCallbackDataStrong):
        (WebCore::JSCallbackDataStrong::invokeCallback):
        (WebCore::JSCallbackDataWeak::JSCallbackDataWeak):
        (WebCore::JSCallbackDataWeak::invokeCallback):
        (WebCore::JSCallbackData::globalObject): Deleted.
        * bindings/js/JSDOMConvertCallbacks.h:
        (WebCore::Converter<IDLCallbackFunction<T>>::convert):
        (WebCore::Converter<IDLCallbackInterface<T>>::convert):
        * bindings/js/JSDOMConvertXPathNSResolver.h:
        (WebCore::Converter<IDLInterface<XPathNSResolver>>::convert):
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSC_DEFINE_HOST_FUNCTION):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::jsDOMWindowInstanceFunction_openDatabaseBody):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateCallbackHeaderContent):
        (GenerateCallbackImplementationContent):
        (JSValueToNativeDOMConvertNeedsGlobalObject):
        * bindings/scripts/IDLAttributes.json:
        * bindings/scripts/test/JS/*: Updated.
        * bindings/scripts/test/TestCallbackFunctionSkipCallbackInvokeCheck.idl: Added.
        * bindings/scripts/test/TestCallbackInterface.idl:
        * dom/NodeFilter.idl:
        * workers/WorkerOrWorkletGlobalScope.h:
        * worklets/PaintWorkletGlobalScope.cpp:
        (WebCore::PaintWorkletGlobalScope::registerPaint):
        * xml/CustomXPathNSResolver.idl:

2021-11-11  Tim Nguyen  <ntim@apple.com>

        Drop support for <object usemap> making <object> interactive
        https://bugs.webkit.org/show_bug.cgi?id=222642

        Reviewed by Antti Koivisto.

        As per https://github.com/whatwg/html/pull/6283, <object usemap> should no longer be supported.

        IDL support is kept per spec like other obsolete attributes.

        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::isURLAttribute const):
        (WebCore::HTMLObjectElement::addSubresourceAttributeURLs const):
        (WebCore::HTMLObjectElement::isInteractiveContent const): Deleted.
        * html/HTMLObjectElement.h:

2021-11-11  Sam Weinig  <weinig@apple.com>

        Factor platform specific code out of HTMLModelElement
        https://bugs.webkit.org/show_bug.cgi?id=232848

        Reviewed by Dean Jackson.

        Factor out most of the platform / renderer specific details from HTMLModelElement
        into a new ModelPlayer/ModelPlayerProvider abstraction. This allows for better
        separation of concerns, tighter coupling in the ARKit player implementation by
        being entirely in WebKit and the ability to support multiple backends. The suffix
        "player" was chosen to roughly align with the existing concept of a MediaPlayer.

        * CMakeLists.txt:
        * Headers.cmake:
        * Sources.txt:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        Add new files / remove no longer necessary HTMLModelElementCocoa.mm

        * Modules/model-element/HTMLModelElement.h:
        * Modules/model-element/HTMLModelElement.cpp:
        (WebCore::HTMLModelElement::~HTMLModelElement):
        clearFile() is now handled in the ARKit specific ModelPlayer destructor.

        (WebCore::HTMLModelElement::setSourceURL):
        For simplicity, we clear the player when the URL changes and we start a
        new load. In the future, we should consider keeping the player around and
        simply resetting it if that proves to be a performance benefit.
        (WebCore::HTMLModelElement::modelDidChange):
        Repurpose modelDidChange to now be where we create the player, via the
        provider and instantiate the load.

        (WebCore::HTMLModelElement::usesPlatformLayer const):
        (WebCore::HTMLModelElement::platformLayer const):
        Add accessors for the player's layer and a predicate indicating
        whether there is one that RenderLayerBacking uses to pick whether
        it will use the platform layer or the model-as-contents path. It
        would be good to move to just having one in the future.
        
        (WebCore::HTMLModelElement::didFinishLoading):
        (WebCore::HTMLModelElement::didFailLoading):
        Implement the ModelPlayerClient functions to trigger the render tree update.

        (WebCore::sharedModelElementCacheDirectory): Deleted.
        (WebCore::HTMLModelElement::setModelElementCacheDirectory): Deleted.
        (WebCore::HTMLModelElement::modelElementCacheDirectory): Deleted.
        Move to ARKit ModelPlayer implementation

        * Modules/model-element/HTMLModelElementCocoa.mm: Removed.
        Move to ARKit ModelPlayer implementation

        * Modules/model-element/ModelPlayer.cpp: Added.
        * Modules/model-element/ModelPlayer.h: Added.
        The model player is the main interface for loading and interacting
        with models.

        * Modules/model-element/ModelPlayerClient.cpp: Added.
        * Modules/model-element/ModelPlayerClient.h: Added.
        The model player client allows the model player to communicate back
        to its owner things like load success / failure and will likely also
        allow trigging things like subresource loads the model player needs
        to kick off.

        * Modules/model-element/ModelPlayerProvider.cpp: Added.
        * Modules/model-element/ModelPlayerProvider.h: Added.
        The model player provider allows the WebKit layer to provide its
        own model players.

        * Modules/model-element/dummy: Added.
        * Modules/model-element/dummy/DummyModelPlayer.cpp: Added.
        * Modules/model-element/dummy/DummyModelPlayer.h: Added.
        * Modules/model-element/dummy/DummyModelPlayerProvider.cpp: Added.
        * Modules/model-element/dummy/DummyModelPlayerProvider.h: Added.
        The dummy player and provider are used for platforms / configurations
        where model is not supported.

        * loader/EmptyClients.h:
        * loader/EmptyClients.cpp:
        (WebCore::pageConfigurationWithEmptyClients):
        Use the DummyModelPlayerProvider for the empty client.

        * page/ChromeClient.h:
        (WebCore::ChromeClient::modelElementDidCreatePreview const): Deleted.
        This is is no longer needed now that the ARKit implementation is in WebKit.

        * page/Page.cpp:
        * page/Page.h:
        * page/PageConfiguration.cpp:
        * page/PageConfiguration.h:
        Add a model player provider to the list of providers the page vends.

        * platform/graphics/Model.cpp:
        * platform/graphics/Model.h:
        Remove #if ENABLE(MODEL_ELEMENT) for parts that aren't actually the
        element itself.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateConfiguration):
        Remove platform specific code and utilize the new platformLayer accessor
        and predicate on HTMLModelElement.

2021-11-10  Mark Lam  <mark.lam@apple.com>

        Move m_doesGC from Heap to VM.
        https://bugs.webkit.org/show_bug.cgi?id=232975
        rdar://85277492

        Reviewed by Filip Pizlo.

        * bindings/js/GCController.cpp:
        (WebCore::GCController::dumpHeap):
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::createCrossOriginFunction):
        (WebCore::JSDOMGlobalObject::createCrossOriginGetterSetter):

2021-11-11  Dean Jackson  <dino@apple.com>

        WKSystemPreviewView should be called WKUSDPreviewView
        https://bugs.webkit.org/show_bug.cgi?id=232961
        <rdar://problem/85265415>

        Reviewed by Sam Weinig.

        Rename the WebCore APIs that look for "SystemPreview" MIME-types
        to be clear they are looking for USD.

        * platform/MIMETypeRegistry.cpp:
        (WebCore::MIMETypeRegistry::isUSDMIMEType):
        (WebCore::MIMETypeRegistry::isSystemPreviewMIMEType): Deleted.
        * platform/MIMETypeRegistry.h:
        * platform/cocoa/MIMETypeRegistryCocoa.mm:
        (WebCore::MIMETypeRegistry::preferredExtensionForMIMEType):

2021-11-11  Tyler Wilcock  <tyler_w@apple.com>

        AX: Implement AXCoreObject::value for AXIsolatedObject
        https://bugs.webkit.org/show_bug.cgi?id=232983

        Reviewed by Chris Fleizach.

        This patch implements AXCoreObject::value by moving the implementation
        from AccessibilityObject into AXCoreObject (AccessibilityObjectInterface.h),
        as the behavior should be the same for both types of objects. We can entirely
        share the implementation because all the methods it calls are interface methods.

        This patch also changes AXIsolatedObject::headingLevel() to use
        `unsignedAttributeValue` rather than `intAttributeValue`, as the value
        we are setting is an `unsigned`. Before this change, `headingLevel`
        always returned zero because the property lookup never returned an
        int.

        Between these two changes, roughly 57 text-only failures are fixed compared to `main`
        with run-webkit-tests --release --accessibility-isolated-tree accessibility/

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::value):
        Move implementation to AXCoreObject (AccessibilityObjectInterface.h).

        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityObjectInterface.h:
        (WebCore::AXCoreObject::value):
        Added default implementation from AccessibilityObject.cpp.

        * accessibility/isolatedtree/AXIsolatedObject.h:
        Change `headingLevel` to use `unsignedAttributeValue` rather than
        `intAttributeValue`.

2021-11-11  Antoine Quint  <graouts@webkit.org>

        Improve additivity support when animating the transform property
        https://bugs.webkit.org/show_bug.cgi?id=232990

        Reviewed by Dean Jackson.

        When blending TransformOperations with the "add" composite operation, we should
        simply concatenate the from and to transform operations.

        * animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFunc):

2021-11-11  Antti Koivisto  <antti@apple.com>

        Introduce SelectorMatchingState and move SelectorFilter there
        https://bugs.webkit.org/show_bug.cgi?id=232994

        Reviewed by Alan Bujtas.

        It will be useful to have an extensible state struct available during style resolution.
        Initially it will contain just the existing SelectorFilter.

        * WebCore.xcodeproj/project.pbxproj:
        * style/ElementRuleCollector.cpp:
        (WebCore::Style::ElementRuleCollector::ElementRuleCollector):
        (WebCore::Style::ElementRuleCollector::collectMatchingRulesForList):
        * style/ElementRuleCollector.h:
        * style/SelectorMatchingState.h: Added.
        * style/StyleInvalidator.cpp:
        (WebCore::Style::Invalidator::invalidateIfNeeded):
        (WebCore::Style::Invalidator::invalidateStyleForTree):
        (WebCore::Style::Invalidator::invalidateStyleForDescendants):
        (WebCore::Style::Invalidator::invalidateStyle):
        (WebCore::Style::Invalidator::invalidateStyleWithMatchElement):
        * style/StyleInvalidator.h:
        * style/StyleResolver.cpp:
        (WebCore::Style::Resolver::styleForElement):
        (WebCore::Style::Resolver::pseudoStyleForElement):
        * style/StyleResolver.h:
        * style/StyleSharingResolver.cpp:
        (WebCore::Style::SharingResolver::SharingResolver):
        (WebCore::Style::SharingResolver::styleSharingCandidateMatchesRuleSet const):
        * style/StyleSharingResolver.h:
        * style/StyleTreeResolver.cpp:
        (WebCore::Style::TreeResolver::Scope::Scope):
        (WebCore::Style::TreeResolver::makeResolutionContext):
        (WebCore::Style::TreeResolver::makeResolutionContextForPseudoElement):
        (WebCore::Style::TreeResolver::pushParent):
        (WebCore::Style::TreeResolver::popParent):
        * style/StyleTreeResolver.h:
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::resolveCustomStyle):

2021-11-11  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Do not set prior context on the line-break iterator when when crossing layout box boundary
        https://bugs.webkit.org/show_bug.cgi?id=232979

        Reviewed by Antti Koivisto.

        This is the case when the bidi boundary may also be a valid soft wrap opportunity. We normally set
        a "prior context" before calling into the nextBreakablePosition to eliminate the need for constructing
        continuous text content by extracting strings from different layout boxes. However in the bidi boundary case, we know
        that the text content belongs to only one layout box.  

        * layout/formattingContexts/inline/InlineLineBuilder.cpp:
        (WebCore::Layout::endsWithSoftWrapOpportunity): This will eventually be replaced with the "breaking reason flag" optimization i.e. bidi boundary vs. soft wrap opportunity.

2021-11-11  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add support for non-initial text-alignment values on bidi content
        https://bugs.webkit.org/show_bug.cgi?id=232968

        Reviewed by Antti Koivisto.

        The text-align property "moves" the root inline box as a whole and not the individual runs.
        This patch ensures that this offset value is taken into account when computing the horizontal position for the visually ordered runs too.
        (Note that this offset value is baked into the logical position of the runs, see LineBox::logicalRectForTextRun.)

        * layout/formattingContexts/inline/InlineDisplayContentBuilder.cpp:
        (WebCore::Layout::InlineDisplayContentBuilder::createBoxesAndUpdateGeometryForLineContent):

2021-11-11  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add support for missing inline item types in buildBidiParagraph
        https://bugs.webkit.org/show_bug.cgi?id=232964

        Reviewed by Antti Koivisto.

        * layout/formattingContexts/inline/InlineItemsBuilder.cpp:
        (WebCore::Layout::buildBidiParagraph):

2021-11-11  Antti Koivisto  <antti@apple.com>

        [CSS Cascade Layers] Support 'revert-layer' value
        https://bugs.webkit.org/show_bug.cgi?id=232236
        <rdar://problem/84879369>

        Reviewed by Simon Fraser.

        'revert-layer' keyword rolls back the value computed by the cascade to the one coming from the layer below.

        https://www.w3.org/TR/css-cascade-5/#revert-layer

        * css/CSSPrimitiveValue.h:
        * css/CSSValue.cpp:
        (WebCore::CSSValue::isRevertLayerValue const):
        * css/CSSValue.h:
        * css/CSSValueKeywords.in:

        Add a 'revert-layer' keyword.

        * css/parser/CSSParserIdioms.h:
        (WebCore::isCSSWideKeyword):

        Make the keyword CSS-wide.

        (WebCore::isValidCustomIdentifier):
        * style/CascadeLevel.h:
        (WebCore::Style::operator--):

        Add decrement operator.

        (WebCore::Style::allCascadeLevels): Deleted.
        * style/ElementRuleCollector.cpp:
        (WebCore::Style::ElementRuleCollector::addElementStyleProperties):
        (WebCore::Style::ElementRuleCollector::transferMatchedRules):

        Pass the casdade layer priority so it is available when resolving the cascade.

        (WebCore::Style::ElementRuleCollector::addElementInlineStyleProperties):

        Add a bit indicating if the properties came from a style attribute. This is needed for correct resolution of !important with cascade layers.

        * style/ElementRuleCollector.h:
        * style/PropertyCascade.cpp:
        (WebCore::Style::PropertyCascade::PropertyCascade):

        Specify cascade levels in terms of the maximum level instead of an OptionSet of levels. This makes things simpler.
        Make it a member.
        Provide maximum cascade layer priority when constructing rollback cascade.

        (WebCore::Style::PropertyCascade::buildCascade):
        (WebCore::Style::PropertyCascade::setPropertyInternal):
        (WebCore::Style::PropertyCascade::addMatch):

        Ignore properties with cascade level higher than the maximum.

        (WebCore::Style::PropertyCascade::addImportantMatches):

        Take cascade layers into accouny when sorting important matches.

        (WebCore::Style::PropertyCascade::propertyCascadeForRollback const): Deleted.

        Move rollback cascades to Builder.

        * style/PropertyCascade.h:
        (WebCore::Style::PropertyCascade::maximumCascadeLevel const):
        (WebCore::Style::PropertyCascade::maximumCascadeLayerPriority const):
        * style/StyleBuilder.cpp:
        (WebCore::Style::Builder::Builder):

        Specify cascade levels in terms of the maximum level instead of an OptionSet of levels.

        (WebCore::Style::Builder::applyCascadeProperty):
        (WebCore::Style::Builder::applyProperty):

        Construct rollback cascade for 'revert-layer' case too. This is similar to 'revert'.

        (WebCore::Style::Builder::ensureRollbackCascadeForRevert):
        (WebCore::Style::Builder::ensureRollbackCascadeForRevertLayer):

        Make the rollback cascades and store them into a HashMap.

        (WebCore::Style::Builder::makeRollbackCascadeKey):
        * style/StyleBuilder.h:
        * style/StyleBuilderState.h:
        * style/StyleResolver.cpp:
        (WebCore::Style::Resolver::styleForKeyframe):
        (WebCore::Style::Resolver::styleForPage):
        (WebCore::Style::Resolver::applyMatchedProperties):

        Adopt to the new interface.

2021-11-10  Sergio Villar Senin  <svillar@igalia.com>

        [css-flexbox] Improve & simplify the flex-basis computation
        https://bugs.webkit.org/show_bug.cgi?id=230755

        Reviewed by Alan Bujtas.

        The flex basis computation has some special cases that require us to size the flex items "as if" they had the
        length specified by flex-basis property as their main size (either width or height depending on the flex direction).
        In order to do that a mechanism similar to the overriding sizes was implemented, but in this case, we're doing
        an overriding of the style. That overriding style is used during both layout and preferred width computations if
        present.

        A new RAII class called ScopedFlexBasisAsChildMainSize sets the overriding before computing the flex base size and
        clears it just after the calculations. This is done in the computeFlexBaseSizeForChild() method that was renamed
        from computeInnerFlexBaseSizeForChild() as it fits better with the terminology used in the specs.

        Flex basis computation is already covered by the WPT test suite, there is no need for extra tests. This patch
        fixes the only flex-basis-* test case that was not passing apart from another one.

        The original patch was causing severe regressions in sites doing heavy usage of nested flexboxes like twitter.com or
        gmail.com because it was removing some caching that is needed in order not to do way too many layouts. The new one does
        not have this issue. A new perf test was added in order to detect those eventual regressions. In my laptop the test
        achieves 13.5k runs/s while with the original patch is only capable of doing 6k runs/s.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::computePreferredLogicalWidths): Use the overriding style if present.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::overridingLogicalHeightLength const): Added.
        (WebCore::RenderBox::setOverridingLogicalHeightLength): Added.
        (WebCore::RenderBox::hasOverridingLogicalHeightLength const): Added.
        (WebCore::RenderBox::clearOverridingLogicalHeightLength): Added.
        (WebCore::RenderBox::overridingLogicalWidthLength const): Added.
        (WebCore::RenderBox::setOverridingLogicalWidthLength): Added.
        (WebCore::RenderBox::hasOverridingLogicalWidthLength const): Added.
        (WebCore::RenderBox::clearOverridingLogicalWidthLength): Added.
        (WebCore::RenderBox::computeLogicalWidthInFragment const): Use the overriding style if present.
        (WebCore::RenderBox::computeLogicalHeight const): Use the overriding style if present.
        * rendering/RenderBox.h:
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::ScopedFlexBasisAsChildMainSize::ScopedFlexBasisAsChildMainSize): Sets the overriding style.
        (WebCore::ScopedFlexBasisAsChildMainSize::~ScopedFlexBasisAsChildMainSize): Clears the overriding style.
        (WebCore::RenderFlexibleBox::computeFlexBaseSizeForChild): Renamed from computeInnerFlexBaseSizeForChild().
        (WebCore::RenderFlexibleBox::maybeCacheChildMainIntrinsicSize): Refactored from code from
        computeInnerFlexBaseSizeForChild().
        (WebCore::RenderFlexibleBox::constructFlexItem): Moved code to maybeCacheChildMainIntrinsicSize().
        (WebCore::RenderFlexibleBox::computeInnerFlexBaseSizeForChild): Deleted.
        * rendering/RenderFlexibleBox.h:

2021-11-11  Antti Koivisto  <antti@apple.com>

        Use narrower types for style scope ordinal and cascade layer priority
        https://bugs.webkit.org/show_bug.cgi?id=232797

        Reviewed by Alan Bujtas.

        This shrinks critical ElementRuleCollector data structures like MatchedRule.

        64k layers ought to be enough for anybody (and 256 scopes).

        * style/ElementRuleCollector.cpp:
        (WebCore::Style::ElementRuleCollector::matchSlottedPseudoElementRules):
        (WebCore::Style::ElementRuleCollector::matchPartPseudoElementRulesForScope):

        Check the scope depth limits.

        * style/ElementRuleCollector.h:
        * style/RuleSet.h:
        (WebCore::Style::RuleSet::cascadeLayerPriorityForIdentifier const):
        (WebCore::Style::RuleSet::cascadeLayerPriorityFor const):

        Add a type alias and make it uint16_t.

        * style/RuleSetBuilder.cpp:
        (WebCore::Style::RuleSetBuilder::updateCascadeLayerPriorities):
        * style/StyleScopeOrdinal.h:
        (WebCore::Style::operator++):
        (WebCore::Style::operator--):

        Use int8_t. No realistic case requires more than a handful.

2021-11-11  Antoine Quint  <graouts@webkit.org>

        Default computed value for "content" should be "none" for ::before and ::after
        https://bugs.webkit.org/show_bug.cgi?id=232932

        Reviewed by Antti Koivisto.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::contentToCSSValue):

2021-11-10  Devin Rousso  <drousso@apple.com>

        REGRESSION(r283863): `<attachment>` with a long `action` do not render correctly
        https://bugs.webkit.org/show_bug.cgi?id=232645
        <rdar://problem/84558377>

        Reviewed by Myles C. Maxfield.

        Unlike the `DisplayList` concept in WebCore, when using `CGContextDelegateRef` (which is
        what `DrawGlyphsRecorder` uses on Cocoa platforms) the callbacks for each action are only
        told about the current state of all-the-things at the time of that action, not each of the
        corresponding API-level calls that resulted in that final state (e.g. where `DisplayList`
        would see separate `scale` and `rotate` calls, `CGContextDelegateRef` would only be able to
        get the final calculated CTM). In order for `DrawGlyphsRecorder` to (re)generate WebCore
        calls, it needs to have information about the starting state of the `CGContext` before any
        actions are performed so it can at least derive some diff/idea of what happened.

        This is further complicated by the fact that when drawing text CG separates the state of
        all-the-things into two: the CTM and the text matrix. WebKit does not have this separation,
        however, so it needs to combine the two into a single CTM, but only when dealing with text.

        A new path (`drawNativeText`) was added in r283863 that allows `DrawGlyphsRecorder` to be
        used directly with native text-related objects (e.g. `CTLineRef`) instead of objects/data
        derived in WebCore. A result of this on Cocoa platforms is that now a single `drawNativeText`
        can result in multiple `recordDrawGlyphs` invocations if the `CTLineRef` contains multiple
        "groupings" of glyphs to draw (e.g. if a line is truncated with a "..." in the middle then
        the three groups will be the remaining text before, the "..." and the remaining text after).

        AFAICT before this new path it was never the case that the text matrix had a translate, only
        rotate/skew/etc., meaning that when `DrawGlyphsRecorder` needed to convert from the CG's
        computed glyph positions back into WebCore's glyph advances it could use the text matrix
        since there would be no translation. With this new path, however, if a `drawNativeText` call
        results in multiple `recordDrawGlyphs` then there will be a translation in the text matrix
        to account for that. As such, we end up double counting the text matrix: once when we
        (re)generate the CTM to give to WebCore and _again_ when we (re)compute the WebCore advances.

        Since we've already counted the text matrix once, we don't need to do it again. Also, by
        this point we've already modified WebCore's CTM, so we only really need to account for the
        difference from the original position when we first called `drawNativeText`. As such, we
        just need invert what was used to generate CG positions from WebCore advances.

        Note that in the name of expediently fixing a regression, this change only considers
        horizontal text as `<attachment>` are never drawn vertically. Fixing vertical text will be
        done in a followup <https://webkit.org/b/232917>.

        Test: fast/attachment/attachment-truncated-action.html

        * platform/graphics/coretext/DrawGlyphsRecorderCoreText.cpp:
        (WebCore::DrawGlyphsRecorder::recordDrawGlyphs):

        * platform/graphics/FontCascade.h:
        * platform/graphics/coretext/FontCascadeCoreText.cpp:
        (WebCore::fillVectorWithHorizontalGlyphPositions):
        (WebCore::fillVectorWithVerticalGlyphPositions):
        Add a comment indicating the related nature of these functions with `DrawGlyphsRecorder::recordDrawGlyphs`.
        Drive-by: `fillVectorWithHorizontalGlyphPositions` is only called by this class, so don't export it.

2021-11-10  Said Abou-Hallawa  <said@apple.com>

        [GPU Process] Make CSSFilter be a composite of FilterFunctions
        https://bugs.webkit.org/show_bug.cgi?id=232469
        rdar://85047148

        Reviewed by Simon Fraser.

        In this patch, the CSS reference filter is built as an SVGFilter and it
        is kept as a FilterFunction in the CSSFilter functions' list. The Filter 
        associated with the FilterEffects of the referenced filter will be an
        SVGFilter instead of the root CSSFilter. This will allow having color
        spacing for the referenced filters different from the color spacing of
        CSSFilter. 

        Also this patch makes a single function for building the primitives of
        the SVGFilter instead of having two functions.

        To allow operating through the SVGFilter as a FilterFunction owned by
        CSSFilter, the SVGFilter will have a pointer to its lastEffect.

        * css/CSSFilterImageValue.cpp:
        (WebCore::CSSFilterImageValue::image):
        * platform/graphics/filters/Filter.h:
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::collectEffects): Deleted.
        (WebCore::FilterEffect::totalNumberOfEffectInputs const): Deleted.
        * platform/graphics/filters/FilterEffect.h:
        (WebCore::FilterEffect::numberOfEffectInputs const):
        (WebCore::FilterEffect::setMaxEffectRect):
        (WebCore::FilterEffect::outsets const): Deleted.
        * platform/graphics/filters/FilterFunction.h:
        (WebCore::FilterFunction::outsets const):
        (WebCore::FilterFunction::clearResult):
        * rendering/CSSFilter.cpp:
        (WebCore::CSSFilter::create):
        (WebCore::CSSFilter::CSSFilter):
        (WebCore::m_hasFilterThatShouldBeRestrictedBySecurityOrigin):
        (WebCore::createBlurEffect):
        (WebCore::createBrightnessEffect):
        (WebCore::createContrastEffect):
        (WebCore::createDropShadowEffect):
        (WebCore::createGrayScaleEffect):
        (WebCore::createHueRotateEffect):
        (WebCore::createInvertEffect):
        (WebCore::createOpacityEffect):
        (WebCore::createSaturateEffect):
        (WebCore::createSepiaEffect):
        (WebCore::createSVGFilter):
        (WebCore::setupLastEffectProperties):
        (WebCore::CSSFilter::buildFilterFunctions):
        (WebCore::CSSFilter::inputContext):
        (WebCore::CSSFilter::allocateBackingStoreIfNeeded):
        (WebCore::CSSFilter::lastEffect):
        (WebCore::CSSFilter::determineFilterPrimitiveSubregion):
        (WebCore::CSSFilter::clearIntermediateResults):
        (WebCore::CSSFilter::apply):
        (WebCore::CSSFilter::output):
        (WebCore::CSSFilter::setSourceImageRect):
        (WebCore::CSSFilter::outputRect):
        (WebCore::CSSFilter::outsets const):
        (WebCore::m_sourceGraphic): Deleted.
        (WebCore::CSSFilter::buildReferenceFilter): Deleted.
        (WebCore::CSSFilter::build): Deleted.
        (WebCore::CSSFilter::output const): Deleted.
        (WebCore::CSSFilter::setMaxEffectRects): Deleted.
        (WebCore::CSSFilter::outputRect const): Deleted.
        * rendering/CSSFilter.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::setupFilters):
        * rendering/RenderLayerFilters.cpp:
        (WebCore::RenderLayerFilters::buildFilter):
        (WebCore::RenderLayerFilters::beginFilterEffect):
        (WebCore::RenderLayerFilters::applyFilterEffect):
        * rendering/RenderLayerFilters.h:
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::applyResource):
        (WebCore::RenderSVGResourceFilter::buildPrimitives const): Deleted.
        * rendering/svg/SVGRenderTreeAsText.cpp:
        (WebCore::writeSVGResourceContainer):
        * svg/graphics/filters/SVGFilter.cpp:
        (WebCore::SVGFilter::create):
        (WebCore::SVGFilter::outsets const):
        (WebCore::SVGFilter::clearResult):
        * svg/graphics/filters/SVGFilter.h:
        * svg/graphics/filters/SVGFilterBuilder.cpp:
        (WebCore::SVGFilterBuilder::setupBuiltinEffects):
        (WebCore::colorInterpolationForElement):
        (WebCore::collectEffects):
        (WebCore::totalNumberFilterEffects):
        (WebCore::SVGFilterBuilder::buildFilterEffects):
        (WebCore::SVGFilterBuilder::SVGFilterBuilder): Deleted.
        * svg/graphics/filters/SVGFilterBuilder.h:

2021-11-10  J Pascoe  <j_pascoe@apple.com>

        [WebAuthn] Unify _WKWebAuthenticationPanel SPI and AuthenticatorCoordinator's ClientDataJson generation 
        https://bugs.webkit.org/show_bug.cgi?id=232965
        <rdar://problem/85268216>

        Reviewed by Brent Fulgham.

        The _WKWebAuthenticationPanel SPI and AuthenticatorCoordinator use different methods of generating
        clientDataJson, which results in strings with the keys in a different order. This change abstracts
        the clientDataJson generation out of AuthenticatorCoordinator and into WebAuthenticationUtils.

        * Modules/webauthn/AuthenticatorCoordinator.cpp:
        (WebCore::AuthenticatorCoordinator::create const):
        (WebCore::AuthenticatorCoordinator::discoverFromExternalSource const):
        (WebCore::AuthenticatorCoordinatorInternal::produceClientDataJson): Deleted.
        (WebCore::AuthenticatorCoordinatorInternal::produceClientDataJsonHash): Deleted.
        * Modules/webauthn/WebAuthenticationUtils.cpp:
        (WebCore::buildClientDataJson):
        (WebCore::buildClientDataJsonHash):
        * Modules/webauthn/WebAuthenticationUtils.h:

2021-11-10  Tim Nguyen  <ntim@apple.com>

        Remove non-standard -webkit-border-fit CSS property
        https://bugs.webkit.org/show_bug.cgi?id=229564

        Reviewed by Simon Fraser.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::valueForPropertyInStyle):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::operator BorderFit const): Deleted.
        * css/CSSProperties.json:
        * css/CSSValueKeywords.in:
        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):
        (WebCore::CSSParserFastPaths::isKeywordPropertyID):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::layoutBlock):
        (WebCore::RenderBlockFlow::adjustForBorderFit const): Deleted.
        (WebCore::RenderBlockFlow::fitBorderToLinesIfNeeded): Deleted.
        * rendering/RenderBlockFlow.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeLogicalWidthInFragment const):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::repaintAfterLayoutIfNeeded):
        * rendering/style/RenderStyle.cpp:
        (WebCore::rareNonInheritedDataChangeRequiresRepaint):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::borderFit const): Deleted.
        (WebCore::RenderStyle::setBorderFit): Deleted.
        (WebCore::RenderStyle::initialBorderFit): Deleted.
        * rendering/style/RenderStyleConstants.cpp:
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):

2021-11-10  Devin Rousso  <drousso@apple.com>

        Add support for marking an `<input>` as being autofilled with obscured content
        https://bugs.webkit.org/show_bug.cgi?id=232903
        <rdar://problem/84276999>

        Reviewed by Aditya Keerthi.

        Test: fast/forms/auto-fill-button/input-auto-filled-and-obscured.html

        * html/HTMLInputElement.h:
        (WebCore::HTMLInputElement::isAutoFilledAndObscured const): Added.
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::HTMLInputElement):
        (WebCore::HTMLInputElement::reset):
        (WebCore::HTMLInputElement::setAutoFilledAndObscured): Added.
        Add a new boolean state member that is used by injected bundle code (and tests).

        * css/CSSSelector.h:
        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::selectorText const):
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne const):
        * css/SelectorCheckerTestFunctions.h:
        (WebCore::isAutofilledAndObscured): Added.
        * css/SelectorPseudoClassAndCompatibilityElementMap.in:
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::JSC_DEFINE_JIT_OPERATION):
        (WebCore::SelectorCompiler::addPseudoClassType):
        Create a new `-webkit-autofill-and-obscured` pseudo-class.

        * css/html.css:
        (input:-webkit-autofill-and-obscured): Added.
        (input:-webkit-autofill, input:-webkit-autofill-strong-password, input:-webkit-autofill-strong-password-viewable, input:-webkit-autofill-and-obscured): Renamed from `input:-webkit-autofill, input:-webkit-autofill-strong-password, input:-webkit-autofill-strong-password-viewable`.
        Use `-webkit-autofill-and-obscured` to change the `<input>` text into non-interactable discs.

        * testing/Internals.idl:
        * testing/Internals.h:
        * testing/Internals.cpp:
        (WebCore::Internals::setAutoFilledAndObscured): Added.

2021-11-10  Wenson Hsieh  <wenson_hsieh@apple.com>

        Refactor some image overlay logic to work with built-in media controls
        https://bugs.webkit.org/show_bug.cgi?id=232899
        rdar://83173597

        Reviewed by Antoine Quint and Tim Horton.

        Make various minor adjustments to allow built-in modern media controls to play well with image overlay content.
        See below for more details.

        * Modules/mediacontrols/MediaControlsHost.cpp:
        (WebCore::MediaControlsHost::mediaControlsContainerClassName):
        * Modules/mediacontrols/MediaControlsHost.h:

        Add a helper function to grab the "media-controls-container" class name, which is used for the `div` element
        containing built-in modern media controls. This is used below to identify existing media control container
        elements when determining where to inject the image overlay root container.

        * Modules/mediacontrols/MediaControlsHost.idl:
        * Modules/modern-media-controls/controls/controls-bar.css:
        (.controls-bar):

        Z-order the media controls bar (which contains all interactible media control elements) above any image overlay
        content that may coexist in the same shadow root.

        * Modules/modern-media-controls/controls/media-controls.css:
        (:host):

        Remove `-webkit-user-select: none;` here. This was added to prevent the iOS magnifier UI from showing up when
        long pressing inside a video element; we can achieve the same effect without applying this property over the
        entire host element by instead changing selection logic in WebKit2.

        (.media-controls):

        Push the `-webkit-user-select: none;` property down into the media control children, instead of on
        `.media-controls` itself.

        (.media-controls > *):
        * Modules/modern-media-controls/media/media-controller.js:
        (MediaController):

        Change this to ask for `mediaControlsContainerClassName` from the host, instead of hard-coding it to
        "media-controls-container". From code inspection, there does not seem to be any codepath that passes in an
        undefined `host`, except for the modern media controls layout tests (which still pass after this adjustment).

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::isImageOverlayText):
        (WebCore::HTMLElement::removeImageOverlaySoonIfNeeded):

        Adjust these helper methods to work in the case where the image overlay container is hosted underneath the media
        controls container.

        (WebCore::HTMLElement::updateWithTextRecognitionResult):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::seekWithTolerance):
        (WebCore::HTMLMediaElement::playInternal):

        If needed, remove the image overlay when seeking or playing media.

2021-11-10  Antoine Quint  <graouts@webkit.org>

        The cssText property for a computed style should return an empty string
        https://bugs.webkit.org/show_bug.cgi?id=232943

        Reviewed by Antti Koivisto.

        See https://github.com/w3c/csswg-drafts/issues/1033. This was an annoying test to fail because the output
        would require a rebaseline every time we'd change something visible in the computed style.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::cssText const):

2021-11-10  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] ubidi expects non-preserved new lines as whitespace characters
        https://bugs.webkit.org/show_bug.cgi?id=232921

        Reviewed by Antti Koivisto.

        * layout/formattingContexts/inline/InlineItemsBuilder.cpp:
        (WebCore::Layout::replaceNonPreservedNewLineCharactersAndAppend):
        (WebCore::Layout::buildBidiParagraph):

2021-11-10  Alex Christensen  <achristensen@webkit.org>

        Implement serialization and deserialization of redirect and modify headers actions for WKContentRuleList
        https://bugs.webkit.org/show_bug.cgi?id=232901

        Reviewed by Timothy Hatcher.

        I serialized each type so that the first 4 bytes are the total serialized length of that type.
        The next time we increment CurrentContentRuleListFileVersion I intend to do that for all existing action serializations.

        I used UTF-8 encoding on disk because I anticipate most of the use here will be ASCII because the strings will
        either go into URLs or into HTTP headers, both of which use only 8-bit characters when actually used.

        URLTransformActions will likely have many cases that don't have all fields, so I optimized by adding one byte
        with 8 booleans indicating whether the field is present or not.  This way, I don't need 32 bytes of 0's for the
        unused fields' serializations.

        Future optimization can be done by adding WTF::String::utf8Length() and WTF::String::utf8EncodeIntoBuffer(Span<uint8_t>)
        but that will just reduce copies and allocations during compiling, not the serialized format.

        Another future optimization that could be done is to use null terminated strings instead of a 4 byte size before each string.
        That would reduce the binary size considerably.

        * contentextensions/ContentExtensionActions.cpp:
        (WebCore::ContentExtensions::append):
        (WebCore::ContentExtensions::uncheckedAppend):
        (WebCore::ContentExtensions::deserializeLength):
        (WebCore::ContentExtensions::deserializeUTF8String):
        (WebCore::ContentExtensions::writeLengthToVectorAtOffset):
        (WebCore::ContentExtensions::ModifyHeadersAction::serialize const):
        (WebCore::ContentExtensions::ModifyHeadersAction::deserialize):
        (WebCore::ContentExtensions::ModifyHeadersAction::serializedLength):
        (WebCore::ContentExtensions::ModifyHeadersAction::ModifyHeaderInfo::serialize const):
        (WebCore::ContentExtensions::ModifyHeadersAction::ModifyHeaderInfo::deserialize):
        (WebCore::ContentExtensions::ModifyHeadersAction::ModifyHeaderInfo::serializedLength):
        (WebCore::ContentExtensions::RedirectAction::serialize const):
        (WebCore::ContentExtensions::RedirectAction::deserialize):
        (WebCore::ContentExtensions::RedirectAction::serializedLength):
        (WebCore::ContentExtensions::RedirectAction::URLTransformAction::parse):
        (WebCore::ContentExtensions::RedirectAction::URLTransformAction::serialize const):
        (WebCore::ContentExtensions::RedirectAction::URLTransformAction::deserialize):
        (WebCore::ContentExtensions::RedirectAction::URLTransformAction::serializedLength):
        (WebCore::ContentExtensions::RedirectAction::URLTransformAction::QueryTransform::parse):
        (WebCore::ContentExtensions::RedirectAction::URLTransformAction::QueryTransform::serialize const):
        (WebCore::ContentExtensions::RedirectAction::URLTransformAction::QueryTransform::deserialize):
        (WebCore::ContentExtensions::RedirectAction::URLTransformAction::QueryTransform::serializedLength):
        (WebCore::ContentExtensions::RedirectAction::URLTransformAction::QueryTransform::QueryKeyValue::serialize const):
        (WebCore::ContentExtensions::RedirectAction::URLTransformAction::QueryTransform::QueryKeyValue::deserialize):
        (WebCore::ContentExtensions::RedirectAction::URLTransformAction::QueryTransform::QueryKeyValue::serializedLength):
        * contentextensions/ContentExtensionActions.h:
        (WebCore::ContentExtensions::ModifyHeadersAction::ModifyHeaderInfo::AppendOperation::isolatedCopy const): Deleted.
        (WebCore::ContentExtensions::ModifyHeadersAction::ModifyHeaderInfo::AppendOperation::operator== const): Deleted.
        (WebCore::ContentExtensions::ModifyHeadersAction::ModifyHeaderInfo::SetOperation::isolatedCopy const): Deleted.
        (WebCore::ContentExtensions::ModifyHeadersAction::ModifyHeaderInfo::SetOperation::operator== const): Deleted.
        (WebCore::ContentExtensions::ModifyHeadersAction::ModifyHeaderInfo::RemoveOperation::isolatedCopy const): Deleted.
        (WebCore::ContentExtensions::ModifyHeadersAction::ModifyHeaderInfo::RemoveOperation::operator== const): Deleted.
        (WebCore::ContentExtensions::RedirectAction::ExtensionPathAction::isolatedCopy const): Deleted.
        (WebCore::ContentExtensions::RedirectAction::ExtensionPathAction::operator== const): Deleted.
        (WebCore::ContentExtensions::RedirectAction::RegexSubstitutionAction::isolatedCopy const): Deleted.
        (WebCore::ContentExtensions::RedirectAction::RegexSubstitutionAction::operator== const): Deleted.
        (WebCore::ContentExtensions::RedirectAction::URLAction::isolatedCopy const): Deleted.
        (WebCore::ContentExtensions::RedirectAction::URLAction::operator== const): Deleted.

2021-11-10  Said Abou-Hallawa  <said@apple.com>

        [GPU Process] Make SVGFilter and CSSFilter work in the same coordinates system
        https://bugs.webkit.org/show_bug.cgi?id=232457
        rdar://85035379

        Reviewed by Simon Fraser.

        Currently SVGFilter sets the following members of Filter

        1. AffineTransform m_absoluteTransform: this is the scaling part from the
           transformation from the target element to the outermost coordinate system
        2. FloatSize m_filterResolution: this is the clamping scale if the size
           of the result ImageBuffers exceeds MaxClampedArea

        And the CSSFilter sets the following member of Filter:

        1. float m_filterScale: this is the document().deviceScaleFactor()

        The discrepancy happens also when creating the result ImageBuffers. For 
        SVGFilter, we create them with scaleFactor = 1. This means the logicalSize
        of the ImageBuffer is equal to its backendSize. But for CSSFilter we
        create them with scaleFactor = m_filterScale. This means the logicalSize
        != backendSize in this case.

        We need to unify the coordinates system for both filters. We need also to
        replace the three members by a single FloatSize called "m_filterScale".

        * css/CSSFilterImageValue.cpp:
        (WebCore::CSSFilterImageValue::image):
        * platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:
        (WebCore::FilterEffectRendererCoreImage::renderToImageBuffer):
        (WebCore::FilterEffectRendererCoreImage::destRect const):
        * platform/graphics/filters/FEConvolveMatrix.cpp:
        (WebCore::FEConvolveMatrix::platformApplySoftware):
        * platform/graphics/filters/FEDisplacementMap.cpp:
        (WebCore::FEDisplacementMap::platformApplySoftware):
        * platform/graphics/filters/FEDropShadow.cpp:
        (WebCore::FEDropShadow::determineAbsolutePaintRect):
        (WebCore::FEDropShadow::platformApplySoftware):
        * platform/graphics/filters/FEGaussianBlur.cpp:
        (WebCore::FEGaussianBlur::calculateKernelSize):
        (WebCore::FEGaussianBlur::platformApplySoftware):
        * platform/graphics/filters/FEMorphology.cpp:
        (WebCore::FEMorphology::determineAbsolutePaintRect):
        (WebCore::FEMorphology::platformApplySoftware):
        * platform/graphics/filters/FEOffset.cpp:
        (WebCore::FEOffset::determineAbsolutePaintRect):
        (WebCore::FEOffset::platformApplySoftware):
        * platform/graphics/filters/FETile.cpp:
        (WebCore::FETile::platformApplySoftware):
        * platform/graphics/filters/FETurbulence.cpp:
        (WebCore::FETurbulence::fillRegion const):
        (WebCore::FETurbulence::platformApplySoftware):
        * platform/graphics/filters/Filter.h:
        (WebCore::Filter::filterScale const):
        (WebCore::Filter::setFilterScale):
        (WebCore::Filter::sourceImageRect const):
        (WebCore::Filter::setSourceImageRect):
        (WebCore::Filter::filterRegion const):
        (WebCore::Filter::setFilterRegion):
        (WebCore::Filter::scaledByFilterScale const):
        (WebCore::Filter::sourceImage):
        (WebCore::Filter::setSourceImage):
        (WebCore::Filter::Filter):
        (WebCore::Filter::filterResolution const): Deleted.
        (WebCore::Filter::setFilterResolution): Deleted.
        (WebCore::Filter::absoluteTransform const): Deleted.
        (WebCore::Filter::isSVGFilter const): Deleted.
        (WebCore::Filter::isCSSFilter const): Deleted.
        (WebCore::Filter::scaledByFilterResolution const): Deleted.
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::determineFilterPrimitiveSubregion):
        (WebCore::FilterEffect::apply):
        (WebCore::FilterEffect::imageBufferResult):
        (WebCore::FilterEffect::unmultipliedResult):
        (WebCore::FilterEffect::premultipliedResult):
        (WebCore::FilterEffect::copyImageBytes const):
        (WebCore::FilterEffect::convertPixelBufferToColorSpace):
        (WebCore::FilterEffect::convertImageBufferToColorSpace):
        (WebCore::FilterEffect::copyUnmultipliedResult):
        (WebCore::FilterEffect::copyPremultipliedResult):
        (WebCore::FilterEffect::createImageBufferResult):
        (WebCore::FilterEffect::createUnmultipliedImageResult):
        (WebCore::FilterEffect::createPremultipliedImageResult):
        * platform/graphics/filters/SourceGraphic.cpp:
        (WebCore::SourceGraphic::determineAbsolutePaintRect):
        * rendering/CSSFilter.cpp:
        (WebCore::CSSFilter::create):
        (WebCore::CSSFilter::CSSFilter):
        (WebCore::CSSFilter::buildReferenceFilter):
        (WebCore::CSSFilter::build):
        (WebCore::CSSFilter::allocateBackingStoreIfNeeded):
        (WebCore::CSSFilter::determineFilterPrimitiveSubregion):
        (WebCore::CSSFilter::clearIntermediateResults):
        (WebCore::CSSFilter::setSourceImageRect):
        (WebCore::CSSFilter::outputRect const):
        * rendering/CSSFilter.h:
        * rendering/RenderLayerFilters.cpp:
        (WebCore::RenderLayerFilters::buildFilter):
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::applyResource):
        (WebCore::RenderSVGResourceFilter::postApplyResource):
        * rendering/svg/RenderSVGResourceFilter.h:
        * rendering/svg/SVGRenderTreeAsText.cpp:
        (WebCore::writeSVGResourceContainer):
        * svg/graphics/filters/SVGFEImage.cpp:
        (WebCore::FEImage::determineAbsolutePaintRect):
        (WebCore::FEImage::platformApplySoftware):
        * svg/graphics/filters/SVGFilter.cpp:
        (WebCore::SVGFilter::SVGFilter):
        (WebCore::SVGFilter::scaledByFilterScale const):
        (WebCore::SVGFilter::create):
        (WebCore::SVGFilter::scaledByFilterResolution const): Deleted.
        * svg/graphics/filters/SVGFilter.h:

2021-11-10  Tyler Wilcock  <tyler_w@apple.com>

        AX: Make ancestor computation cheaper by setting flags upon child insertion
        https://bugs.webkit.org/show_bug.cgi?id=232466

        Reviewed by Andres Gonzalez.

        This patch adds bit-flags (named AXAncestorFlags) to our accessibility objects,
        and sets these flags upon child insertion to enable cheap
        determination of whether any object has ancestors of certain types
        (e.g. a document role ancestor). Some AX clients need this
        information, and WebKit can compute it more efficiently than they can.

        The following flags are added in this patch:
          - HasDocumentRoleAncestor
          - HasWebApplicationAncestor
          - IsInDescriptionListDetail
          - IsInDescriptionListTerm
          - IsInCell

        Tests: accessibility/ancestor-computation.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::computeAncestorFlags const): Added.
        (WebCore::AccessibilityObject::initializeAncestorFlags): Added.
        (WebCore::AccessibilityObject::matchesAncestorFlag const): Added.
        (WebCore::AccessibilityObject::hasAncestorMatchingFlag const): Added.
        (WebCore::AccessibilityObject::hasDocumentRoleAncestor const): Added.
        (WebCore::AccessibilityObject::hasWebApplicationAncestor const):Added.
        (WebCore::AccessibilityObject::isInDescriptionListDetail const):Added.
        (WebCore::AccessibilityObject::isInDescriptionListTerm const): Added.
        (WebCore::AccessibilityObject::isInTableCell const): Added.
        (WebCore::accessibilityObjectFrom): Added.
        (WebCore::AccessibilityObject::insertChild):
        Compute and store AXAncestorFlags for newly inserted children.

        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::addAncestorFlags): Added.
        (WebCore::AccessibilityObject::ancestorFlagsAreInitialized const): Added.
        (WebCore::AccessibilityObject::hasAncestorFlag const): Added.

        * accessibility/AccessibilityObjectInterface.h:
        Add AXAncestorFlags enum class and these virtual functions:
          - hasDocumentRoleAncestor
          - hasWebApplicationAncestor
          - isInDescriptionListDetail
          - isInDescriptionListTerm
          - isInCell

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilityHasDocumentRoleAncestor]): Added.
        (-[WebAccessibilityObjectWrapper accessibilityHasWebApplicationAncestor]): Added.
        (-[WebAccessibilityObjectWrapper accessibilityIsInDescriptionListDefinition]):
        Moved to a different part of the file.
        (-[WebAccessibilityObjectWrapper accessibilityIsInDescriptionListTerm]):
        Moved to a different part of the file.
        (-[WebAccessibilityObjectWrapper _accessibilityIsInTableCell]):
        Moved to a different part of the file.
        (-[WebAccessibilityObjectWrapper tableParent]): Fix grammar in comment.

        * accessibility/isolatedtree/AXIsolatedObject.cpp:
        (WebCore::AXIsolatedObject::initializeAttributeData):
        Initialize new AXPropertyName::AncestorFlags property.
        (WebCore::AXIsolatedObject::ancestorFlags const): Added.

        * accessibility/isolatedtree/AXIsolatedObject.h:
        * accessibility/isolatedtree/AXIsolatedTree.h:
        Add new AXPropertyName::AncestorFlags property. Add new
        OptionSet<AXAncestorFlag> type to AXPropertyValueVariant.

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (AXAttributeStringSetStyle):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
        Handle new AXHasDocumentRoleAncestorAttribute,
        AXHasWebApplicationAncestorAttribute, AXIsInDescriptionListDetail,
        AXIsInDescriptionListTerm, and AXIsInTableCell attributes.

2021-11-10  Chris Dumez  <cdumez@apple.com>

        imported/w3c/web-platform-tests/webmessaging/broadcastchannel/workers.html is flaky crashing in debug
        https://bugs.webkit.org/show_bug.cgi?id=232920

        Reviewed by Alex Christensen.

        When WorkerGlobalScope::postTask() gets called, the task may get destroyed on the worker thread, without
        getting executed in the case where the worker thread is about to exit. This was causing trouble in
        BroadcastChannel::dispatchMessageTo() where we were calling WorkerGlobalScope::postTask() and capturing
        a CallbackAggregator. We were relying on the task actually executing to dispatch the CallbackAggregator
        back to the maint thread so that the completion handler is always called on the main thread.

        To address the issue, we now capture a WTF::ScopeExit which calls the completion handler on the main
        thread upon destruction. This way, the completion handler will always get called on the main thread,
        no matter what.

        * dom/BroadcastChannel.cpp:
        (WebCore::BroadcastChannel::dispatchMessageTo):

2021-11-10  Enrique Ocaña González  <eocanha@igalia.com>

        [GTK] Layout Test media/video-seek-with-negative-playback.html timeouts on the release bot.
        https://bugs.webkit.org/show_bug.cgi?id=135086

        Reviewed by Xabier Rodriguez-Calvar.

        In some specific cases, an EOS GstEvent can happen right before a seek. The event is translated
        by playbin as an EOS GstMessage and posted to the bus, waiting to be forwarded to the main thread.
        The EOS message (now irrelevant after the seek) is received and processed right after the seek,
        causing the termination of the media at the player private and upper levels. This can even happen
        after the seek has completed (m_isSeeking already false).

        This patch detects that condition by ensuring that the playback is coherent with the EOS message,
        that is, if we're still playing somewhere inside the playable ranges, there should be no EOS at
        all. If that's the case, it's considered to be one of those spureous EOS and is ignored.

        Live streams (infinite duration) are special and we still have to detect legitimate EOS there, so
        this message bailout isn't done in those cases.

        Also refactored the code that queries the position to the sinks.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp: Ignore EOS message if the playback position is inside the playback limits when they're finite. Refactored sink position query code as gstreamerPositionFromSinks().
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h: Added gstreamerPositionFromSinks().

2021-11-10  Jer Noble  <jer.noble@apple.com>

        [iOS] Adopt -[AVAudioSession setAuditTokensForProcessAssertion:]
        https://bugs.webkit.org/show_bug.cgi?id=232909
        <rdar://68184444>

        Reviewed by Eric Carlson.

        * platform/audio/AudioSession.h:
        * platform/audio/ios/AudioSessionIOS.h:
        * platform/audio/ios/AudioSessionIOS.mm:
        (WebCore::AudioSessionIOS::setPresentingProcesses):

2021-11-10  Rob Buis  <rbuis@igalia.com>

        [css-contain] Support contain:paint
        https://bugs.webkit.org/show_bug.cgi?id=224742

        Reviewed by Alan Bujtas.

        This patch implements paint containment as specified[1].

        It adds shouldApplyPaintContainment to check whether the element applies for paint containment. Is so, then:
        - an independent formatting context is established.
        - an absolute positioning and fixed positioning containing block is established.
        - a stacking context is created.
        - implements clipping on the overflow clip edge.

        This patch also adds effectiveOverflowX/effectiveOverflowY on RenderElement to take
        the effect of paint containment on overflow-x/y into account.

        [1] https://drafts.csswg.org/css-contain-2/#paint-containment

        * page/FrameView.cpp:
        (WebCore::FrameView::applyOverflowToViewport):
        (WebCore::FrameView::applyPaginationToViewport):
        (WebCore::FrameView::calculateScrollbarModesForLayout):
        * rendering/GridTrackSizingAlgorithm.cpp:
        (WebCore::GridTrackSizingAlgorithmStrategy::minSizeForChild const):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::updateFromStyle):
        (WebCore::RenderBox::constrainLogicalWidthInFragmentByMinMax const):
        (WebCore::RenderBox::constrainLogicalHeightByMinMax const):
        (WebCore::RenderBox::createsNewFormattingContext const):
        (WebCore::RenderBox::addOverflowFromChild):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::updateFromStyle):
        * rendering/RenderElement.cpp:
        (WebCore::includeNonFixedHeight):
        (WebCore::RenderElement::effectiveOverflowX const):
        (WebCore::RenderElement::effectiveOverflowY const):
        * rendering/RenderElement.h:
        (WebCore::RenderElement::effectiveOverflowInlineDirection const):
        (WebCore::RenderElement::effectiveOverflowBlockDirection const):
        (WebCore::RenderElement::canContainFixedPositionObjects const):
        (WebCore::RenderElement::canContainAbsolutelyPositionedObjects const):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::mainAxisOverflowForChild const):
        (WebCore::RenderFlexibleBox::crossAxisOverflowForChild const):
        * rendering/RenderFragmentContainer.cpp:
        (WebCore::RenderFragmentContainer::overflowRectForFragmentedFlowPortion):
        * rendering/RenderInline.h:
        * rendering/RenderLayer.cpp:
        (WebCore::canCreateStackingContext):
        (WebCore::RenderLayer::shouldBeCSSStackingContext const):
        (WebCore::RenderLayer::setAncestorChainHasSelfPaintingLayerDescendant):
        (WebCore::RenderLayer::setAncestorChainHasVisibleDescendant):
        (WebCore::RenderLayer::calculateClipRects const):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::setPaintContainmentApplies):
        (WebCore::shouldApplyPaintContainment):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::paintContainmentApplies const):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::overflowY const):
        (WebCore::RenderStyle::containsPaint const):
        (WebCore::RenderStyle::overflowInlineDirection const): Deleted.
        (WebCore::RenderStyle::overflowBlockDirection const): Deleted.
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::shouldApplyViewportClip const):

2021-11-10  Youenn Fablet  <youenn@apple.com> and Victor M. Jaquez L. <vjaquez@igalia.com>

        Update libwebrtc to M96
        https://bugs.webkit.org/show_bug.cgi?id=232873

        Reviewed by Alex Christensen.

        Update WebCore code according updated libwebrtc API, in particular moving from deprecated CreateDataChannel to CreateDataChannelOrError.
        Covered by existing tests.

        * Modules/mediastream/libwebrtc/LibWebRTCCertificateGenerator.cpp:
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::createDataChannel):
        * platform/mediastream/libwebrtc/LibWebRTCProvider.cpp:
        (WebCore::BasicPacketSocketFactory::BasicPacketSocketFactory):
        * platform/mediastream/AudioMediaStreamTrackRenderer.cpp:
        (WebCore::AudioMediaStreamTrackRenderer::create):
        * platform/mediastream/libwebrtc/LibWebRTCProvider.cpp:
        * platform/mediastream/libwebrtc/gstreamer/GStreamerVideoCommon.cpp:
        (WebCore::createH264Format):
        (WebCore::supportedH264Formats):
        * platform/mediastream/libwebrtc/gstreamer/GStreamerVideoDecoderFactory.cpp:
        * platform/mediastream/libwebrtc/gstreamer/GStreamerVideoEncoderFactory.cpp:
        * testing/MockLibWebRTCPeerConnection.cpp:
        (WebCore::MockLibWebRTCPeerConnection::CreateDataChannelOrError):
        (WebCore::MockLibWebRTCPeerConnection::CreateDataChannel): Deleted.
        * testing/MockLibWebRTCPeerConnection.h:

2021-11-10  Youenn Fablet  <youenn@apple.com>

        [iOS] Add audio gain in case category switches to PlayAndRecord
        https://bugs.webkit.org/show_bug.cgi?id=232941
        <rdar://85250248>

        Reviewed by Eric Carlson.

        Add a audio category change observer.
        Observer needs to be in the process where the actual iOS shared audio session is living (GPUProcess typically).
        Manually tested.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/audio/cocoa/AudioSampleBufferList.h:
        * platform/audio/ios/AudioSessionIOS.h:
        * platform/audio/ios/AudioSessionIOS.mm:

2021-11-10  Tim Nguyen  <ntim@apple.com>

        Migrate DialogElementEnabled from RuntimeFlags to Settings
        https://bugs.webkit.org/show_bug.cgi?id=232926

        Reviewed by Youenn Fablet.

        * html/HTMLDialogElement.idl:
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::formMethod const):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::submit):
        (WebCore::HTMLFormElement::parseAttribute):
        (WebCore::HTMLFormElement::method const):
        * html/HTMLTagNames.in:
        * loader/FormSubmission.cpp:
        (WebCore::FormSubmission::Attributes::methodString):
        (WebCore::FormSubmission::Attributes::parseMethodType):
        (WebCore::FormSubmission::Attributes::updateMethodType):
        (WebCore::FormSubmission::create):
        * loader/FormSubmission.h:
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setDialogElementEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::dialogElementEnabled const): Deleted.
        * style/UserAgentStyle.cpp:
        (WebCore::Style::UserAgentStyle::ensureDefaultStyleSheetsForElement):

2021-11-10  Antti Koivisto  <antti@apple.com>

        Use Hasher for hashing MatchResult for MatchedDeclarationsCache
        https://bugs.webkit.org/show_bug.cgi?id=232930

        Reviewed by Kimmo Kinnunen.

        We currently use hashMemory over a Vector<MatchedProperties>. This works correctly only as long as
        the MatchedProperties struct is fully packed. Any unitilized memory in the struct leads to badness.

        * WebCore.xcodeproj/project.pbxproj:
        * style/ElementRuleCollector.h:
        (WebCore::Style::MatchResult::operator== const): Deleted.
        (WebCore::Style::MatchResult::operator!= const): Deleted.
        (WebCore::Style::MatchResult::isEmpty const): Deleted.
        (WebCore::Style::operator==): Deleted.
        (WebCore::Style::operator!=): Deleted.

        Move MatchResult to a file of its own.

        * style/MatchResult.h: Added.
        (WebCore::Style::MatchResult::isEmpty const):
        (WebCore::Style::operator==):
        (WebCore::Style::operator!=):
        (WebCore::Style::add):

        Implement Hasher functions for the types.

        * style/MatchedDeclarationsCache.cpp:
        (WebCore::Style::MatchedDeclarationsCache::computeHash):

        use WTF::computeHash

        * style/MatchedDeclarationsCache.h:
        * style/PageRuleCollector.h:
        * style/PropertyCascade.h:

2021-11-10  Enrique Ocaña González  <eocanha@igalia.com>

        [Media] Make currentTime compliant with the spec when readyState is HAVE_NOTHING
        https://bugs.webkit.org/show_bug.cgi?id=229605
        Reviewed by Xabier Rodriguez-Calvar.

        Covered by LayoutTests/media/video-seek-have-nothing.html.

        Added an internal defaultPlaybackPosition in HTMLMediaElement when currentTime changes
        are done when readyState is still HAVE_NOTHING, as mandated by the spec[1] since late
        2011: https://html.spec.whatwg.org/#current-playback-position

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setReadyState): Seek to defaultPlaybackPosition (and reset it)  when readyState increases to HAVE_METADATA.
        (WebCore::HTMLMediaElement::currentMediaTime const): Return defaultPlaybackPosition when higher than zero.
        (WebCore::HTMLMediaElement::setCurrentTimeForBindings): Store the new currentTime in defaultPlaybackPosition when changed during a HAVE_NOTHING readyState.
        * html/HTMLMediaElement.h: Added m_defaultPlaybackStartPosition private attribute.

2021-11-10  Tim Nguyen  <ntim@apple.com>

        Fix crash in GraphicsContextCG::endTransparencyLayer
        https://bugs.webkit.org/show_bug.cgi?id=230230

        Reviewed by Myles C. Maxfield.

        The crash was due to unbalanced calls to begin and end transparency layers.

        A branch handling ancestors of transparent layers that are transform root needed to be
        aware of the top layer. Opacity on ancestors don't affect top layer elements so calling
        `beginTransparencyLayers` on `parent()` is incorrect.

        Also fix `transparentPaintingAncestor()` to be top layer aware to avoid flickering layers
        while scrolling.

        Test: fast/layers/top-layer-ancestor-opacity-and-transform-crash.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::transparentPaintingAncestor):
        (WebCore::RenderLayer::paintLayerWithEffects):

2021-11-10  Tim Nguyen  <ntim@apple.com>

        Enable dialog tests on Windows
        https://bugs.webkit.org/show_bug.cgi?id=232911

        Reviewed by Youenn Fablet.

        The runtime flag sometimes seems to be off for Windows, change the member in
        RuntimeEnabledFeatures.h and re-enable tests.

        * page/RuntimeEnabledFeatures.h:

2021-11-10  Manuel Rego Casasnovas  <rego@igalia.com>

        Wavy decorations don't cover the whole line length
        https://bugs.webkit.org/show_bug.cgi?id=232663

        Reviewed by Myles C. Maxfield.

        We have a problem with wavy decorations, because we are only painting
        whole waves. Which means that, sometimes, the last part of the line
        is not covered by the wavy decorations.

        To fix this we're modifying strokeWavyTextDecoration() method.
        We paint 2 extra waves before and after the line width,
        and we clip the wavy text decoration to match the line's width.

        This patch also removes adjustStepToDecorationLength() as the method
        was wrong (e.g. passing 40px length and 10px step, it'd modify the step
        to be 10.75px which makes no sense).
        Apart from that, as we're now clipping the wave to the text line,
        this adjustment is no longer needed.

        Tests: imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-line-through-wavy-covers-whole-line-length-001.html
               imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-overline-wavy-covers-whole-line-length-001.html
               imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-underline-wavy-covers-whole-line-length-001.html

        * rendering/TextDecorationPainter.cpp:
        (WebCore::strokeWavyTextDecoration):
        (WebCore::adjustStepToDecorationLength): Deleted.

2021-11-10  Sihui Liu  <sihui_liu@apple.com>

        Perform FileSystemSyncAccessHandle operations in web process
        https://bugs.webkit.org/show_bug.cgi?id=232146
        <rdar://problem/84809428>

        Reviewed by Youenn Fablet.

        truncate(), getSize() and flush() operations are now performed on a global WorkQueue in web process.

        * Modules/filesystemaccess/FileSystemFileHandle.cpp:
        (WebCore::FileSystemFileHandle::getSize): Deleted.
        (WebCore::FileSystemFileHandle::truncate): Deleted.
        (WebCore::FileSystemFileHandle::flush): Deleted.
        * Modules/filesystemaccess/FileSystemFileHandle.h:
        * Modules/filesystemaccess/FileSystemStorageConnection.h:
        * Modules/filesystemaccess/FileSystemSyncAccessHandle.cpp:
        (WebCore::FileSystemSyncAccessHandle::~FileSystemSyncAccessHandle):
        (WebCore::FileSystemSyncAccessHandle::truncate):
        (WebCore::FileSystemSyncAccessHandle::getSize):
        (WebCore::FileSystemSyncAccessHandle::flush):
        (WebCore::FileSystemSyncAccessHandle::close):
        (WebCore::FileSystemSyncAccessHandle::closeInternal):
        (WebCore::FileSystemSyncAccessHandle::closeBackend):
        (WebCore::FileSystemSyncAccessHandle::read):
        (WebCore::FileSystemSyncAccessHandle::write):
        (WebCore::FileSystemSyncAccessHandle::completePromise):
        * Modules/filesystemaccess/FileSystemSyncAccessHandle.h:
        (): Deleted.
        * Modules/filesystemaccess/WorkerFileSystemStorageConnection.cpp:
        (WebCore::WorkerFileSystemStorageConnection::completeIntegerCallback): Deleted.
        (WebCore::WorkerFileSystemStorageConnection::getSize): Deleted.
        (WebCore::WorkerFileSystemStorageConnection::truncate): Deleted.
        (WebCore::WorkerFileSystemStorageConnection::flush): Deleted.
        * Modules/filesystemaccess/WorkerFileSystemStorageConnection.h:
        * workers/WorkerGlobalScope.cpp:
        (WebCore::sharedFileSystemStorageQueue):
        (WebCore::WorkerGlobalScope::postFileSystemStorageTask):
        * workers/WorkerGlobalScope.h:

2021-11-09  Ben Nham  <nham@apple.com>

        Add support for PushSubscriptionChangeEvent
        https://bugs.webkit.org/show_bug.cgi?id=232455

        Reviewed by Youenn Fablet.

        This adds support for the PushSubscriptionChangeEvent object. I plan to add support for the
        onpushsubscriptionchange event handler in a later patch.

        While working on this, it seemed reasonable to be able to create PushSubscriptions that
        point to a null ServiceWorkerRegistration. This is for subscriptions that are returned via
        the oldSubscription property and are therefore already unsubscribed.

        I added a new constructor for creating a PushSubscription pointing to a null
        ServiceWorkerRegistration, rather than changing the existing constructor to just take a
        RefPtr<ServiceWorkerRegistration>. This is because I wanted to remove the WEBCORE_EXPORT
        from ServiceWorkerRegistration, and the inline code generated by creating a null
        RefPtr<ServiceWorkerRegistration> in the internals dylib caused it to require
        ServiceWorkerRegistration::ref/deref to be exported.

        Tests: http/wpt/push-api/pushSubscriptionChangeEvent.any.serviceworker.html

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/push-api/PushManager.cpp:
        (WebCore::PushManager::subscribe):
        (WebCore::PushManager::getSubscription):
        (WebCore::PushManager::permissionState):
        * Modules/push-api/PushManager.h:
        * Modules/push-api/PushManager.idl:
        * Modules/push-api/PushSubscription.cpp:
        (WebCore::PushSubscription::PushSubscription):
        (WebCore::PushSubscription::unsubscribe):
        * Modules/push-api/PushSubscription.h:
        * Modules/push-api/PushSubscription.idl:
        * Modules/push-api/PushSubscriptionChangeEvent.cpp: Copied from Source/WebCore/Modules/push-api/PushManager.h.
        (WebCore::PushSubscriptionChangeEvent::create):
        (WebCore::PushSubscriptionChangeEvent::PushSubscriptionChangeEvent):
        * Modules/push-api/PushSubscriptionChangeEvent.h: Copied from Source/WebCore/Modules/push-api/PushManager.h.
        * Modules/push-api/PushSubscriptionChangeEvent.idl: Copied from Source/WebCore/Modules/push-api/PushSubscription.idl.
        * Modules/push-api/PushSubscriptionChangeEventInit.h: Copied from Source/WebCore/Modules/push-api/PushSubscription.idl.
        * Modules/push-api/PushSubscriptionChangeEventInit.idl: Copied from Source/WebCore/Modules/push-api/PushSubscription.idl.
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:
        * dom/EventNames.in:
        * testing/Internals.cpp:
        (WebCore::Internals::createPushSubscription):
        * testing/Internals.h:
        * testing/Internals.idl:
        * testing/ServiceWorkerInternals.cpp:
        (WebCore::ServiceWorkerInternals::createPushSubscription):
        * testing/ServiceWorkerInternals.h:
        * testing/ServiceWorkerInternals.idl:
        * workers/service/ServiceWorkerRegistration.h:
        * workers/service/ServiceWorkerRegistration.idl:

2021-11-09  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Migrate from CTFontCopyVariationAxes() to CTFontCopyVariationAxesInternal() if possible
        https://bugs.webkit.org/show_bug.cgi?id=232690

        Reviewed by Simon Fraser and Cameron McCormack.

        CTFontCopyVariationAxesInternal() is faster than CTFontCopyVariationAxes(), but the strings
        it provides are not localized. Luckily, we don't actually use the strings in the common case,
        so we can migrate to CTFontCopyVariationAxesInternal() safely.

        No new tests because there is no behavior change.

        * Headers.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/agents/InspectorCSSAgent.cpp:
        (WebCore::buildObjectForFont):
        * platform/graphics/FontPlatformData.cpp:
        (WebCore::FontPlatformData::variationAxes const):
        * platform/graphics/FontPlatformData.h:
        * platform/graphics/ShouldLocalizeAxisNames.h: Added.
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::variationAxes):
        (WebCore::defaultVariationValues):
        (WebCore::preparePlatformFont):
        (WebCore::variationCapabilitiesForFontDescriptor):
        * platform/graphics/cocoa/FontCacheCoreText.h:
        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        (WebCore::FontPlatformData::variationAxes const):

2021-11-09  Dean Jackson  <dino@apple.com>

        [WebXR] three.js demos don't work
        https://bugs.webkit.org/show_bug.cgi?id=232798
        rdar://83559881

        Reviewed by Myles C. Maxfield.

        Any content using three.js for WebXR was failing for
        a couple of reasons. Firstly, we were not correctly
        restoring the framebuffer, read, draw and texture
        bindings in the native code, and three.js was correctly
        assuming it didn't need to rebind.

        Secondly, we were not resolving the multisample
        framebuffer if the context was created with no alpha.
        The issue is that our framebuffer from XR always has
        an alpha channel, and you can't blit from RGB to RGBA.

        * Modules/webxr/WebXROpaqueFramebuffer.cpp:
        (WebCore::WebXROpaqueFramebuffer::startFrame): Make sure to restore the
        bound texture target when exiting the function. Also ensure that we
        tell the resolved FBO where its texture data comes from.
        (WebCore::WebXROpaqueFramebuffer::endFrame): Restore the framebuffer binding.
        (WebCore::WebXROpaqueFramebuffer::setupFramebuffer): Use the correct format.

2021-11-09  Said Abou-Hallawa  <said@apple.com>

        [GPU Process] Introduce FilterFunction and make it the base class of Filter and FilterEffect
        https://bugs.webkit.org/show_bug.cgi?id=232413
        rdar://84966765

        Reviewed by Myles C. Maxfield.

        This allows CSSFilter to hold a list of FilterFunctions. The Filter in
        this case will act like a composite pattern of FilterEffects.

        This patch also
        1. Removes the virtual function filterName() from all the FilterEffect
           classes. It replaces it with a static function in FilterFunction.
        2. Removes the virtual function filterEffectType() and the function
           FilterEffect::filterEffectClassType() since they can both be replaced
           by FilterFunction::filterType().
        3. Adds trait macros for all FilterEffects and the SVGFilters class.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:
        (WebCore::FilterEffectRendererCoreImage::supportsCoreImageRendering):
        (WebCore::FilterEffectRendererCoreImage::connectCIFilters):
        * platform/graphics/filters/FEBlend.cpp:
        (WebCore::FEBlend::FEBlend):
        * platform/graphics/filters/FEBlend.h:
        (): Deleted.
        * platform/graphics/filters/FEColorMatrix.cpp:
        (WebCore::FEColorMatrix::FEColorMatrix):
        * platform/graphics/filters/FEColorMatrix.h:
        (isType): Deleted.
        * platform/graphics/filters/FEComponentTransfer.cpp:
        (WebCore::FEComponentTransfer::FEComponentTransfer):
        * platform/graphics/filters/FEComponentTransfer.h:
        (isType): Deleted.
        * platform/graphics/filters/FEComposite.cpp:
        (WebCore::FEComposite::FEComposite):
        * platform/graphics/filters/FEComposite.h:
        * platform/graphics/filters/FEConvolveMatrix.cpp:
        (WebCore::FEConvolveMatrix::FEConvolveMatrix):
        * platform/graphics/filters/FEConvolveMatrix.h:
        * platform/graphics/filters/FEDiffuseLighting.cpp:
        (WebCore::FEDiffuseLighting::FEDiffuseLighting):
        * platform/graphics/filters/FEDiffuseLighting.h:
        * platform/graphics/filters/FEDisplacementMap.cpp:
        (WebCore::FEDisplacementMap::FEDisplacementMap):
        * platform/graphics/filters/FEDisplacementMap.h:
        * platform/graphics/filters/FEDropShadow.cpp:
        (WebCore::FEDropShadow::FEDropShadow):
        * platform/graphics/filters/FEDropShadow.h:
        (): Deleted.
        * platform/graphics/filters/FEFlood.cpp:
        (WebCore::FEFlood::FEFlood):
        * platform/graphics/filters/FEFlood.h:
        * platform/graphics/filters/FEGaussianBlur.cpp:
        (WebCore::FEGaussianBlur::FEGaussianBlur):
        * platform/graphics/filters/FEGaussianBlur.h:
        (): Deleted.
        * platform/graphics/filters/FELighting.h:
        * platform/graphics/filters/FEMerge.cpp:
        (WebCore::FEMerge::FEMerge):
        * platform/graphics/filters/FEMerge.h:
        (): Deleted.
        * platform/graphics/filters/FEMorphology.cpp:
        (WebCore::FEMorphology::FEMorphology):
        * platform/graphics/filters/FEMorphology.h:
        * platform/graphics/filters/FEOffset.cpp:
        (WebCore::FEOffset::FEOffset):
        * platform/graphics/filters/FEOffset.h:
        (): Deleted.
        * platform/graphics/filters/FESpecularLighting.cpp:
        (WebCore::FESpecularLighting::FESpecularLighting):
        * platform/graphics/filters/FESpecularLighting.h:
        * platform/graphics/filters/FETile.cpp:
        (WebCore::FETile::FETile):
        (WebCore::FETile::platformApplySoftware):
        * platform/graphics/filters/FETile.h:
        * platform/graphics/filters/FETurbulence.cpp:
        (WebCore::FETurbulence::FETurbulence):
        * platform/graphics/filters/FETurbulence.h:
        * platform/graphics/filters/Filter.h:
        (WebCore::Filter::Filter):
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::FilterEffect):
        (WebCore::FilterEffect::determineFilterPrimitiveSubregion):
        (WebCore::FilterEffect::createImageBufferResult):
        (WebCore::FilterEffect::createUnmultipliedImageResult):
        (WebCore::FilterEffect::createPremultipliedImageResult):
        * platform/graphics/filters/FilterEffect.h:
        (isType):
        (WebCore::FilterEffect::filterEffectType const): Deleted.
        (WebCore::FilterEffect::filterEffectClassType const): Deleted.
        * platform/graphics/filters/FilterFunction.cpp: Added.
        (WebCore::FilterFunction::FilterFunction):
        (WebCore::FilterFunction::filterName):
        * platform/graphics/filters/FilterFunction.h: Added.
        (WebCore::FilterFunction::filterType const):
        (WebCore::FilterFunction::isCSSFilter const):
        (WebCore::FilterFunction::isSVGFilter const):
        (WebCore::FilterFunction::isFilter const):
        (WebCore::FilterFunction::isFilterEffect const):
        (WebCore::FilterFunction::sourceAlphaName):
        (WebCore::FilterFunction::sourceGraphicName):
        (WebCore::FilterFunction::filterName const):
        * platform/graphics/filters/SourceAlpha.cpp:
        (WebCore::SourceAlpha::SourceAlpha):
        (WebCore::SourceAlpha::effectName): Deleted.
        * platform/graphics/filters/SourceAlpha.h:
        (WebCore::SourceAlpha::effectName):
        (): Deleted.
        * platform/graphics/filters/SourceGraphic.cpp:
        (WebCore::SourceGraphic::effectName): Deleted.
        * platform/graphics/filters/SourceGraphic.h:
        (WebCore::SourceGraphic::effectName):
        (WebCore::SourceGraphic::SourceGraphic):
        (): Deleted.
        (isType): Deleted.
        * platform/mediastream/mac/RealtimeIncomingAudioSourceCocoa.cpp:
        * rendering/CSSFilter.cpp:
        (WebCore::CSSFilter::CSSFilter):
        * svg/graphics/filters/SVGFEImage.cpp:
        (WebCore::FEImage::FEImage):
        * svg/graphics/filters/SVGFEImage.h:
        * svg/graphics/filters/SVGFilter.cpp:
        (WebCore::SVGFilter::SVGFilter):
        * svg/graphics/filters/SVGFilter.h:
        (isType):
        * svg/graphics/filters/SVGFilterBuilder.cpp:

2021-11-09  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r285246.
        https://bugs.webkit.org/show_bug.cgi?id=232907

        Broke FixedVector

        Reverted changeset:

        "[JSC] Clean up StructureStubInfo initialization"
        https://bugs.webkit.org/show_bug.cgi?id=232652
        https://commits.webkit.org/r285246

2021-11-09  Sihui Liu  <sihui_liu@apple.com>

        Fix macCatalyst build after r285509
        https://bugs.webkit.org/show_bug.cgi?id=232863

        Unreviewed.

        * Modules/speech/cocoa/SpeechRecognizerCocoa.mm:

2021-11-09  Antoine Quint  <graouts@webkit.org>

        REGRESSION(r272201): Safari showed red distortion on webview after using Web Inspector, returning from another app
        https://bugs.webkit.org/show_bug.cgi?id=231358
        <rdar://problem/81505208>

        Reviewed by Devin Rousso.

        Test: inspector/page/setShowPaintRects.html

        When we added support for animating individual transform properties, we moved to a model where all animations
        for a given CSS property were wrapped in a dedicated CAAnimationGroup when running accelerated. Those groups
        have an infinite duration and thus would never call the -animationDidStop:finished: CAAnimationDelegate method.

        An option would have been to set the delegate on all animations contained in a CAAnimationGroup in
        PlatformCALayerCocoa::addAnimationForKey(), but as it turns out, the CAAnimationDelegate methods for children
        of an animation group aren't fired.

        Since the only current use for the -animationDidStop:finished: delegate method is to eventually message back
        into WebInspectorClient::animationEndedForLayer() for opacity animations, which don't need to run contained in
        groups, our approach to address the issue is to only group animations for transform-related properties and
        leave other animations as simple leaf animations.

        To do this, inside of GraphicsLayerCA::updateAnimations(), we replace the addAnimation() lambda with a new
        addLeafAnimation() lambda which we use for opacity, background-color and filter animations.

        In order to be able to test the successful removal of repaint rects as a result of the CAAnimationDelegate
        method firing, Patrick Angle contributed the required changes under inspector/ to expose the number of paint
        rects to layout tests.

        * inspector/InspectorClient.h:
        (WebCore::InspectorClient::paintRectCount const):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::paintRectCount const):
        * inspector/InspectorController.h:
        * inspector/InspectorOverlay.h:
        (WebCore::InspectorOverlay::paintRectCount const):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::updateAnimations):
        * testing/Internals.cpp:
        (WebCore::Internals::inspectorHighlightRects):
        (WebCore::Internals::inspectorPaintRectCount):
        * testing/Internals.h:
        * testing/Internals.idl:

2021-11-09  Megan Gardner  <megan_gardner@apple.com>

        Scroll To Text Fragment directive parsing
        https://bugs.webkit.org/show_bug.cgi?id=231410

        Reviewed by Chris Dumez.

        Text directive parsing for 
        https://wicg.github.io/scroll-to-text-fragment/
 
        Make a new class to handle the parsing of the text directive.
        The parsing is defined in the linked spec. 
        The directive should be stored on Document and in a future
        patch the matching algorithm will find the text and scroll
        and highlight it.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.h:
        (WebCore::Document::setFragmentDirective):
        (WebCore::Document::fragmentDirective const):
        * dom/FragmentDirectiveParser.cpp: Added.
        (WebCore::FragmentDirectiveParser::FragmentDirectiveParser):
        (WebCore::FragmentDirectiveParser::parseFragmentDirective):
        * dom/FragmentDirectiveParser.h: Added.
        (WebCore::FragmentDirectiveParser::parsedTextDirectives const):
        (WebCore::FragmentDirectiveParser::fragmentDirective const):
        (WebCore::FragmentDirectiveParser::remainingURLFragment const):
        (WebCore::FragmentDirectiveParser::isValid const):
        * page/FrameView.cpp:
        (WebCore::FrameView::scrollToFragment):
        * platform/Logging.h:

2021-11-09  Tim Horton  <timothy_horton@apple.com>

        Add runtime flag for momentum scrolling
        https://bugs.webkit.org/show_bug.cgi?id=232898
        <rdar://problem/85211338>

        Reviewed by Simon Fraser.

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::setFrameScrollingNodeState):
        * page/scrolling/ScrollingStateFrameScrollingNode.cpp:
        (WebCore::ScrollingStateFrameScrollingNode::ScrollingStateFrameScrollingNode):
        (WebCore::ScrollingStateFrameScrollingNode::applicableProperties const):
        (WebCore::ScrollingStateFrameScrollingNode::setMomentumScrollingAnimatorEnabled):
        * page/scrolling/ScrollingStateFrameScrollingNode.h:
        * page/scrolling/ScrollingStateNode.h:
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::commitTreeState):
        * page/scrolling/ScrollingTree.h:
        (WebCore::ScrollingTree::momentumScrollingAnimatorEnabled const):
        (WebCore::ScrollingTree::setMomentumScrollingAnimatorEnabled):
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::momentumScrollingAnimatorEnabled const):
        * page/scrolling/ScrollingTreeScrollingNode.h:
        * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.h:
        * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.mm:
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::momentumScrollingAnimatorEnabled const):
        * platform/ScrollingEffectsController.h:
        (WebCore::ScrollingEffectsControllerClient::momentumScrollingAnimatorEnabled const):

2021-11-09  Don Olmstead  <don.olmstead@sony.com>

        Fix !ENABLE(ACCESSIBILITY) after r285427
        https://bugs.webkit.org/show_bug.cgi?id=232893
        <rdar://problem/85210424>

        Reviewed by Andres Gonzalez.

        In r285399 a number of AXObjectCache methods were affected by a removal of an
        ENABLE(ACCESSIBILITY) guard. The definitions were pushed down to the large
        !ENABLE(ACCESSIBILITY) block at the bottom of the file but `inline static` isn't valid
        code so the compile issue was fixed in r285427. However the commits had also introduced a
        linker error around AXObjectCache::accessibilityEnabled and
        AXObjectCache::accessibilityEnhancedUserInterfaceEnabled.

        To fix the static member variables referenced in those methods are `static constexpr` when
        !ENABLE(ACCESSIBILITY).

        * accessibility/AXObjectCache.h:

2021-11-09  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Horizontal constraint change should not purge the inline item cache.
        https://bugs.webkit.org/show_bug.cgi?id=232892

        Reviewed by Antti Koivisto.

        Available horizontal space change does not affect the inline content itself (it only affects the geometry of said content).

        * layout/formattingContexts/inline/invalidation/InlineInvalidation.cpp:
        (WebCore::Layout::InlineInvalidation::horizontalConstraintChanged):

2021-11-09  Devin Rousso  <drousso@apple.com>

        REGRESSION(r271735): PaymentShippingOption.selected ignored
        https://bugs.webkit.org/show_bug.cgi?id=221960
        <rdar://problem/73464404>

        Reviewed by Tim Horton.

        Leverage new `PKShippingMethods` SPI to provide both the general list of `PKShippingMethod`
        and the default selected `PKShippingMethods` when creating/updating a payment request.

        * Modules/applepay/ApplePayShippingMethod.idl:
        * Modules/applepay/ApplePayShippingMethod.h:
        (WebCore::ApplePayShippingMethod::encode const):
        (WebCore::ApplePayShippingMethod::decode):
        Add new `selected` boolean property.

        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp:
        (WebCore::ApplePayPaymentHandler::computeShippingMethods const):

        * Modules/paymentrequest/PaymentRequest.cpp:
        (WebCore::checkAndCanonicalizeDetails):

2021-11-09  Sihui Liu  <sihui_liu@apple.com>

        Keep track of captured data time in SpeechRecognizer
        https://bugs.webkit.org/show_bug.cgi?id=232867

        Reviewed by Youenn Fablet.

        The time parameter passed to SpeechRecognizer::dataCaptured is not started from zero. 

        Manually tested.

        * Modules/speech/SpeechRecognizer.cpp:
        (WebCore::SpeechRecognizer::SpeechRecognizer):
        * Modules/speech/SpeechRecognizer.h:
        * Modules/speech/cocoa/SpeechRecognizerCocoa.mm:
        (WebCore::SpeechRecognizer::dataCaptured):

2021-11-09  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r285318.
        https://bugs.webkit.org/show_bug.cgi?id=232894

        broke Apple internal build

        Reverted changeset:

        "[Cocoa] Migrate from CTFontCopyVariationAxes() to
        CTFontCopyVariationAxesInternal() if possible"
        https://bugs.webkit.org/show_bug.cgi?id=232690
        https://commits.webkit.org/r285318

2021-11-09  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Line spanning inline box items should be treated as opaque bidi content
        https://bugs.webkit.org/show_bug.cgi?id=232887

        Reviewed by Antti Koivisto.

        These "made-up" line spanning inline items (e.g. <span>first line<br>second line</span> <- inline box start on the second line) are
        opaque to bidi and should be treated accordingly (this is similar to what we do in setBidiLevelForOpaqueInlineItems at InlineItemsBuilder::breakAndComputeBidiLevels).

        * layout/formattingContexts/inline/InlineLineBuilder.cpp:
        (WebCore::Layout::LineBuilder::initialize):

2021-11-09  Chris Dumez  <cdumez@apple.com>

        Ignore BroadcastChannel::postMessage from detached iframe / closing worker contexts
        https://bugs.webkit.org/show_bug.cgi?id=232693

        Reviewed by Darin Adler.

        Ignore BroadcastChannel::postMessage from detached iframe / closing worker contexts:
        - https://html.spec.whatwg.org/#eligible-for-messaging

        Tests: imported/w3c/web-platform-tests/webmessaging/broadcastchannel/basics.any.serviceworker.html
               imported/w3c/web-platform-tests/webmessaging/broadcastchannel/cross-origin.html
               imported/w3c/web-platform-tests/webmessaging/broadcastchannel/detached-iframe.html
               imported/w3c/web-platform-tests/webmessaging/broadcastchannel/ordering.html
               imported/w3c/web-platform-tests/webmessaging/broadcastchannel/service-worker.https.html

        * dom/BroadcastChannel.cpp:
        (WebCore::BroadcastChannel::postMessage):
        (WebCore::BroadcastChannel::dispatchMessage):
        (WebCore::BroadcastChannel::isEligibleForMessaging const):
        * dom/BroadcastChannel.h:

2021-11-09  Ziran Sun  <zsun@igalia.com>

        [css-grid] update the content-sized grid width before laying out a grid item with block constraints and aspect-ratio
        https://bugs.webkit.org/show_bug.cgi?id=231802

        Reviewed by Javier Fernandez.

        For a grid item with an aspect-ratio, if it has block-constraints such as the relative logical height
        case we consider in this CL, it should try and resolve it if possible and transfer this size into
        the inline direction for the min/max content size. For the case that the grid width is content sized,
        we need to update the width before laying out the grid items. Since the min-content contribution of
        the grid item has changed based on the row sizes calculated in step 2 of sizing algorithm, we also
        need to repeat the sizing algorithm steps to update the width of the track sizes.

        * rendering/GridLayoutFunctions.cpp:
        (WebCore::GridLayoutFunctions::isAspectRatioBlockSizeDependentChild):
        * rendering/GridLayoutFunctions.h:
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::layoutBlock):
        (WebCore::RenderGrid::updateGridAreaForAspectRatioItems):
        * rendering/RenderGrid.h:

2021-11-09  Alan Bujtas  <zalan@apple.com>

        Rendering bug with height: min-content, position: absolute, and box-sizing: border-box
        https://bugs.webkit.org/show_bug.cgi?id=232816
        <rdar://problem/85154265>

        Reviewed by Antti Koivisto.

        After r199895, computeIntrinsicLogicalContentHeightUsing started returning the inflated height (content height + border + padding)
        as content height for border-box box sizing. While some of the callers expect this inflated height, computePositionedLogicalHeightUsing
        needs the actual content height. This is also similar to what we do with the width values.

        Test: fast/block/out-of-flow-intrinsic-height.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computePositionedLogicalHeightUsing const):

2021-11-09  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r285436.
        https://bugs.webkit.org/show_bug.cgi?id=232878

        Broke WPE build

        Reverted changeset:

        "[WebXR] three.js demos don't work"
        https://bugs.webkit.org/show_bug.cgi?id=232798
        https://commits.webkit.org/r285436

2021-11-09  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r285486.
        https://bugs.webkit.org/show_bug.cgi?id=232876

        Made fast/ruby/generated-before-counter-doesnt-crash.html
        flaky, possibly indicating perf problem

        Reverted changeset:

        "[CSS Cascade Layers] Support 'revert-layer' value"
        https://bugs.webkit.org/show_bug.cgi?id=232236
        https://commits.webkit.org/r285486

2021-11-09  Tim Nguyen  <ntim@apple.com>

        Refactor consumeWillChange() to make better use of consumeCustomIdent()
        https://bugs.webkit.org/show_bug.cgi?id=232874

        Reviewed by Antti Koivisto.

        consumeCustomIdent() already rejects for non-ident types and reserved keywords.
        Make use of that to make the function more readable.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeWillChange):

2021-11-09  Tim Nguyen  <ntim@apple.com>

        Use isValidCustomIdentifier in consumeWillChange
        https://bugs.webkit.org/show_bug.cgi?id=232868

        Reviewed by Antti Koivisto.

        This bit specifically implements <custom-ident>, see:
        https://drafts.csswg.org/css-will-change/#will-change

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeWillChange):

2021-11-09  Antti Koivisto  <antti@apple.com>

        [CSS Cascade Layers] Support 'revert-layer' value
        https://bugs.webkit.org/show_bug.cgi?id=232236
        <rdar://problem/84879369>

        Reviewed by Simon Fraser.

        'revert-layer' keyword rolls back the value computed by the cascade to the one coming from the layer below.

        https://www.w3.org/TR/css-cascade-5/#revert-layer

        * css/CSSPrimitiveValue.h:
        * css/CSSValue.cpp:
        (WebCore::CSSValue::isRevertLayerValue const):
        * css/CSSValue.h:
        * css/CSSValueKeywords.in:

        Add a 'revert-layer' keyword.

        * css/parser/CSSParserIdioms.h:
        (WebCore::isCSSWideKeyword):

        Make the keyword CSS-wide.

        (WebCore::isValidCustomIdentifier):
        * style/CascadeLevel.h:
        (WebCore::Style::operator--):

        Add decrement operator.

        (WebCore::Style::allCascadeLevels): Deleted.
        * style/ElementRuleCollector.cpp:
        (WebCore::Style::ElementRuleCollector::addElementStyleProperties):
        (WebCore::Style::ElementRuleCollector::transferMatchedRules):

        Pass the casdade layer priority so it is available when resolving the cascade.

        (WebCore::Style::ElementRuleCollector::addElementInlineStyleProperties):

        Add a bit indicating if the properties came from a style attribute. This is needed for correct resolution of !important with cascade layers.

        * style/ElementRuleCollector.h:
        * style/PropertyCascade.cpp:
        (WebCore::Style::PropertyCascade::PropertyCascade):

        Specify cascade levels in terms of the maximum level instead of an OptionSet of levels. This makes things simpler.
        Make it a member.
        Provide maximum cascade layer priority when constructing rollback cascade.

        (WebCore::Style::PropertyCascade::buildCascade):
        (WebCore::Style::PropertyCascade::setPropertyInternal):
        (WebCore::Style::PropertyCascade::addMatch):

        Ignore properties with cascade level higher than the maximum.

        (WebCore::Style::PropertyCascade::addImportantMatches):

        Take cascade layers into accouny when sorting important matches.

        (WebCore::Style::PropertyCascade::propertyCascadeForRollback const): Deleted.

        Move rollback cascades to Builder.

        * style/PropertyCascade.h:
        (WebCore::Style::PropertyCascade::maximumCascadeLevel const):
        (WebCore::Style::PropertyCascade::maximumCascadeLayerPriority const):
        * style/StyleBuilder.cpp:
        (WebCore::Style::Builder::Builder):

        Specify cascade levels in terms of the maximum level instead of an OptionSet of levels.

        (WebCore::Style::Builder::applyCascadeProperty):
        (WebCore::Style::Builder::applyProperty):

        Construct rollback cascade for 'revert-layer' case too. This is similar to 'revert'.

        (WebCore::Style::Builder::ensureRollbackCascadeForRevert):
        (WebCore::Style::Builder::ensureRollbackCascadeForRevertLayer):

        Make the rollback cascades and store them into a HashMap.

        (WebCore::Style::Builder::makeRollbackCascadeKey):
        * style/StyleBuilder.h:
        * style/StyleBuilderState.h:
        * style/StyleResolver.cpp:
        (WebCore::Style::Resolver::styleForKeyframe):
        (WebCore::Style::Resolver::styleForPage):
        (WebCore::Style::Resolver::applyMatchedProperties):

        Adopt to the new interface.

2021-11-09  Tim Nguyen  <ntim@apple.com>

        Re-use isCSSWideKeyword in CSSVariableParser.cpp & CSSPropertyParser.cpp
        https://bugs.webkit.org/show_bug.cgi?id=232830

        Reviewed by Antti Koivisto.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::canParseTypedCustomPropertyValue):
        * css/parser/CSSVariableParser.cpp:
        (WebCore::classifyVariableRange):

2021-11-09  Martin Robinson  <mrobinson@webkit.org>

        A mask or isolation should set transform-style to flat
        https://bugs.webkit.org/show_bug.cgi?id=232491

        Reviewed by Simon Fraser.

        Tests: transforms/preserve-3d-flat-webkit-grouping-properties-expected.txt: Added.
               transforms/preserve-3d-flat-webkit-grouping-properties.html: Added.

        This is covered by an existing WPT test:
            imported/w3c/web-platform-tests/css/css-transforms/preserve-3d-flat-grouping-properties.html

        Ensure that values of `mask-image` other than `none`, `mask-border-source` other than `none`,
        and `isolation: isolate` all force used style of `preserve-3d: flat`.

        * style/StyleAdjuster.cpp:
        (WebCore::Style::Adjuster::adjust const):

2021-11-08  Said Abou-Hallawa  <said@apple.com>

        [GPU Process] Remove non-platform code form the FEImage class
        https://bugs.webkit.org/show_bug.cgi?id=232369
        rdar://84966765

        Reviewed by Simon Fraser.

        SVGFEImageElement should create the FEImage with either an Image or an 
        ImageBuffer based on whether the 'href' attribute points to a resource
        image or an SVG element. For the SVG element, an ImageBuffer will be 
        created and the renderer of this element will be drawn to it.

        Instead of holding a TreeScope and Image, FEImage can hold a variant of
        Image and ImageBuffer.

        Tests: svg/filters/feImage-element-primitive-subregion-expected.svg
               svg/filters/feImage-element-primitive-subregion.svg
               svg/filters/feImage-image-primitive-subregion-expected.svg
               svg/filters/feImage-image-primitive-subregion.svg

        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::imageBufferForEffect const):
        (WebCore::SVGFEImageElement::build const):
        * svg/SVGFEImageElement.h:
        * svg/graphics/filters/SVGFEImage.cpp:
        (WebCore::FEImage::create):
        (WebCore::FEImage::FEImage):
        (WebCore::FEImage::determineAbsolutePaintRect):
        (WebCore::FEImage::platformApplySoftware):
        (WebCore::FEImage::externalRepresentation const):
        (WebCore::FEImage::createWithImage): Deleted.
        (WebCore::FEImage::createWithIRIReference): Deleted.
        (WebCore::FEImage::referencedRenderer const): Deleted.
        * svg/graphics/filters/SVGFEImage.h:

2021-11-08  Patrick Griffis  <pgriffis@igalia.com>

        Implement nonce-hiding
        https://bugs.webkit.org/show_bug.cgi?id=179728

        Reviewed by Chris Dumez.

        This is a hardening technique implemented by both Firefox and Chromium.

        The behavior is documented here: https://html.spec.whatwg.org/multipage/urls-and-fetching.html#nonce-attributes

        * dom/Element.cpp:
        (WebCore::Element::nonce const):
        (WebCore::Element::setNonce):
        (WebCore::Element::hideNonce):
        (WebCore::Element::attributeChanged):
        (WebCore::Element::cloneAttributesFromElement):
        * dom/Element.h:
        * dom/ElementRareData.cpp:
        * dom/ElementRareData.h:
        (WebCore::ElementRareData::nonce const):
        (WebCore::ElementRareData::setNonce):
        (WebCore::ElementRareData::useTypes const):
        * dom/InlineClassicScript.cpp:
        (WebCore::InlineClassicScript::create):
        * dom/InlineStyleSheetOwner.cpp:
        (WebCore::InlineStyleSheetOwner::createSheet):
        * dom/NodeRareData.h:
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::requestClassicScript):
        (WebCore::ScriptElement::requestModuleScript):
        (WebCore::ScriptElement::executeClassicScript):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::insertedIntoAncestor):
        * html/HTMLElement.h:
        * html/HTMLOrForeignElement.idl:
        * html/HTMLScriptElement.idl:
        * page/csp/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::didReceiveHeader):
        * page/csp/ContentSecurityPolicy.h:
        (WebCore::ContentSecurityPolicy::isHeaderDelivered const):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::insertedIntoAncestor):

2021-11-08  J Pascoe  <j_pascoe@apple.com>

        [WebAuthn] challenge does not get passed to -[_WKWebAuthenticationPanel getAssertionWithChallenge:origin:options:completionHandler:]
        https://bugs.webkit.org/show_bug.cgi?id=232836
        rdar://85163927

        Reviewed by Brent Fulgham.

        -[_WKWebAuthenticationPanel getAssertionWithChallenge:origin:options:completionHandler:] receives
        an empty challenge, causing _WKWebAuthenticationPanel to immediately close when using the new UNIFIED_ASC_AUTH_UI.

        This change encodes/decodes challenge in PublicKeyCredentialRequestOptions. Before this
        field was not used after xpc, but with the new UNIFIED_ASC_AUTH_UI it is.

        * Modules/webauthn/PublicKeyCredentialCreationOptions.h:
        (WebCore::PublicKeyCredentialCreationOptions::encode const):
        (WebCore::PublicKeyCredentialCreationOptions::decode):
        * Modules/webauthn/PublicKeyCredentialRequestOptions.h:
        (WebCore::PublicKeyCredentialRequestOptions::encode const):
        (WebCore::PublicKeyCredentialRequestOptions::decode):
        Add new challengeVector field to both options structs and include it
        in decoding / encoding.

2021-11-08  Chris Dumez  <cdumez@apple.com>

        REGRESSION (r283935): [ macOS wk1 ] imported/w3c/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/dialog-autofocus-multiple-times.html is a flaky failure
        https://bugs.webkit.org/show_bug.cgi?id=231918
        <rdar://problem/84393055>

        Reviewed by Wenson Hsieh.

        Our "flush autofocus candidates" algorithm wasn't quite matching the specification [1].
        In particular, we were incorrectly removing a candidate from the list when not ready
        to autofocus due to loading CSS stylesheets.

        The spec says to remove the candidate from the list at step 5.6. We should check the stylesheet
        counter at step 5.5, and return early, *before* removing the candidate from the list.

        [1] https://html.spec.whatwg.org/multipage/interaction.html#flush-autofocus-candidates

        No new tests, unskipped existing test.

        * dom/Document.cpp:
        (WebCore::Document::flushAutofocusCandidates):

2021-11-08  Devin Rousso  <drousso@apple.com>

        [Payment Request] Add a new payment method for showing AMS UI
        https://bugs.webkit.org/show_bug.cgi?id=232634
        <rdar://problem/79024227>

        Reviewed by Tim Horton.

        Leverage the W3C Payment Request API as a way for Apple domains to show alternate native
        payment UIs without having to add new proprietary APIs (e.g. Apple Pay JS). This new payment
        method is quite bare-bones in that it just takes some JSON and passes it to AMS, which then
        decides what UI to show based on that. No data is exposed back to the page other than either
        an error or a yes/no as to whether the payment was successful.

        Test: http/tests/ssl/applepay-ams-ui/PaymentRequest.https.html

        * Modules/applepay/cocoa/PaymentAPIVersionCocoa.mm:
        (WebCore::PaymentAPIVersion::current):
        Bump the current Apple Pay version.

        * Modules/applepay-ams-ui/ApplePayAMSUIPaymentHandler.h: Added.
        * Modules/applepay-ams-ui/ApplePayAMSUIPaymentHandler.cpp: Added.
        (WebCore::convertAndValidateApplePayAMSUIRequest):
        (WebCore::ApplePayAMSUIPaymentHandler::validateData):
        (WebCore::ApplePayAMSUIPaymentHandler::handlesIdentifier):
        (WebCore::ApplePayAMSUIPaymentHandler::hasActiveSession):
        (WebCore::ApplePayAMSUIPaymentHandler::finishSession):
        (WebCore::ApplePayAMSUIPaymentHandler::ApplePayAMSUIPaymentHandler):
        (WebCore::ApplePayAMSUIPaymentHandler::document const):
        (WebCore::ApplePayAMSUIPaymentHandler::page const):
        (WebCore::ApplePayAMSUIPaymentHandler::convertData):
        (WebCore::ApplePayAMSUIPaymentHandler::show):
        (WebCore::ApplePayAMSUIPaymentHandler::hide):
        (WebCore::ApplePayAMSUIPaymentHandler::canMakePayment):
        (WebCore::ApplePayAMSUIPaymentHandler::detailsUpdated):
        (WebCore::ApplePayAMSUIPaymentHandler::merchantValidationCompleted):
        (WebCore::ApplePayAMSUIPaymentHandler::complete):
        (WebCore::ApplePayAMSUIPaymentHandler::retry):
        Add a new payment method that uses AMS to present UI.

        * Modules/applepay-ams-ui/ApplePayAMSUIRequest.idl: Added.
        * Modules/applepay-ams-ui/ApplePayAMSUIRequest.h: Added.
        (WebCore::ApplePayAMSUIRequest::encode const):
        (WebCore::ApplePayAMSUIRequest::decode):
        IDL `dictionary` that takes the place of the `object data` in `PaymentMethodData` when the
        Apple Pay AMS UI payment method is used.

        * Modules/paymentrequest/PaymentHandler.h:
        * Modules/paymentrequest/PaymentHandler.cpp:
        (WebCore::PaymentHandler::create):
        (WebCore::PaymentHandler::validateData):
        (WebCore::PaymentHandler::hasActiveSession):
        Minor refactoring to allow for there to be more than one payment method implemeted at once.

        * Modules/paymentrequest/PaymentRequest.h:
        * Modules/paymentrequest/PaymentRequest.cpp:
        (WebCore::PaymentRequest::abort):
        (WebCore::PaymentRequest::accept):
        (WebCore::PaymentRequest::reject):
        The W3C Payment Request API doesn't require that payment methods be abortable. As such, add
        some logic that checks with the active `PaymentHandler` to see if it can be aborted before
        actually doing so. Also create some public helper methods that allow the payment request to
        be accepted without providing shipping information and be directly rejected with an error.

        * page/Page.h:
        (WebCore::Page::hasActiveApplePayAMSUISession const): Added.
        * page/Page.cpp:
        (WebCore::Page::startApplePayAMSUISession): Added.
        (WebCore::Page::abortApplePayAMSUISession): Added.
        * page/ChromeClient.h:
        (WebCore::ChromeClient::startApplePayAMSUISession): Added.
        (WebCore::ChromeClient::abortApplePayAMSUISession): Added.
        Add plumbing between WebCore/WebProcess and UIProcess. Also maintain state about if there's
        already an active Apple Pay AMS UI payment session (needed by the W3C Payment Request API).

        * platform/cocoa/PlatformViewController.h: Added.
        Create a helper `PlatformViewController` that will do the right thing on both macOS and iOS.

        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.h:
        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp:
        (WebCore::convertAndValidateApplePayRequest): Added.
        (WebCore::ApplePayPaymentHandler::validateData):
        (WebCore::ApplePayPaymentHandler::convertData):
        Drive-by: Rename the `convertAndValidate` that takes `JSC::JSValue` to `convertAndValidateApplePayRequest`
        so that there isn't a naming conflict in other files that may want to do a similar thing.

        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * PlatformMac.cmake:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:

2021-11-08  Alex Christensen  <achristensen@webkit.org>

        Parse redirect and modify-headers actions for WKContentRuleList
        https://bugs.webkit.org/show_bug.cgi?id=232838

        Reviewed by Tim Hatcher.

        Parser covered by unit tests, functionality yet unimplemented.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * contentextensions/ContentExtensionActions.cpp: Added.
        (WebCore::ContentExtensions::ModifyHeadersAction::parse):
        (WebCore::ContentExtensions::ModifyHeadersAction::isolatedCopy const):
        (WebCore::ContentExtensions::ModifyHeadersAction::operator== const):
        (WebCore::ContentExtensions::ModifyHeadersAction::serialize const):
        (WebCore::ContentExtensions::ModifyHeadersAction::deserialize):
        (WebCore::ContentExtensions::ModifyHeadersAction::serializedLength):
        (WebCore::ContentExtensions::ModifyHeadersAction::ModifyHeaderInfo::parse):
        (WebCore::ContentExtensions::ModifyHeadersAction::ModifyHeaderInfo::isolatedCopy const):
        (WebCore::ContentExtensions::ModifyHeadersAction::ModifyHeaderInfo::operator== const):
        (WebCore::ContentExtensions::ModifyHeadersAction::ModifyHeaderInfo::serialize const):
        (WebCore::ContentExtensions::ModifyHeadersAction::ModifyHeaderInfo::deserialize):
        (WebCore::ContentExtensions::ModifyHeadersAction::ModifyHeaderInfo::serializedLength):
        (WebCore::ContentExtensions::RedirectAction::parse):
        (WebCore::ContentExtensions::RedirectAction::isolatedCopy const):
        (WebCore::ContentExtensions::RedirectAction::operator== const):
        (WebCore::ContentExtensions::RedirectAction::serialize const):
        (WebCore::ContentExtensions::RedirectAction::deserialize):
        (WebCore::ContentExtensions::RedirectAction::serializedLength):
        (WebCore::ContentExtensions::RedirectAction::URLTransformAction::parse):
        (WebCore::ContentExtensions::RedirectAction::URLTransformAction::isolatedCopy const):
        (WebCore::ContentExtensions::RedirectAction::URLTransformAction::operator== const):
        (WebCore::ContentExtensions::RedirectAction::URLTransformAction::serialize const):
        (WebCore::ContentExtensions::RedirectAction::URLTransformAction::deserialize):
        (WebCore::ContentExtensions::RedirectAction::URLTransformAction::serializedLength):
        (WebCore::ContentExtensions::RedirectAction::URLTransformAction::QueryTransform::parse):
        (WebCore::ContentExtensions::RedirectAction::URLTransformAction::QueryTransform::isolatedCopy const):
        (WebCore::ContentExtensions::RedirectAction::URLTransformAction::QueryTransform::operator== const):
        (WebCore::ContentExtensions::RedirectAction::URLTransformAction::QueryTransform::serialize const):
        (WebCore::ContentExtensions::RedirectAction::URLTransformAction::QueryTransform::deserialize):
        (WebCore::ContentExtensions::RedirectAction::URLTransformAction::QueryTransform::serializedLength):
        (WebCore::ContentExtensions::RedirectAction::URLTransformAction::QueryTransform::QueryKeyValue::parse):
        (WebCore::ContentExtensions::RedirectAction::URLTransformAction::QueryTransform::QueryKeyValue::isolatedCopy const):
        (WebCore::ContentExtensions::RedirectAction::URLTransformAction::QueryTransform::QueryKeyValue::operator== const):
        (WebCore::ContentExtensions::RedirectAction::URLTransformAction::QueryTransform::QueryKeyValue::serialize const):
        (WebCore::ContentExtensions::RedirectAction::URLTransformAction::QueryTransform::QueryKeyValue::deserialize):
        (WebCore::ContentExtensions::RedirectAction::URLTransformAction::QueryTransform::QueryKeyValue::serializedLength):
        * contentextensions/ContentExtensionActions.h:
        (WebCore::ContentExtensions::ModifyHeadersAction::ModifyHeaderInfo::AppendOperation::isolatedCopy const):
        (WebCore::ContentExtensions::ModifyHeadersAction::ModifyHeaderInfo::AppendOperation::operator== const):
        (WebCore::ContentExtensions::ModifyHeadersAction::ModifyHeaderInfo::SetOperation::isolatedCopy const):
        (WebCore::ContentExtensions::ModifyHeadersAction::ModifyHeaderInfo::SetOperation::operator== const):
        (WebCore::ContentExtensions::ModifyHeadersAction::ModifyHeaderInfo::RemoveOperation::isolatedCopy const):
        (WebCore::ContentExtensions::ModifyHeadersAction::ModifyHeaderInfo::RemoveOperation::operator== const):
        (WebCore::ContentExtensions::RedirectAction::ExtensionPathAction::isolatedCopy const):
        (WebCore::ContentExtensions::RedirectAction::ExtensionPathAction::operator== const):
        (WebCore::ContentExtensions::RedirectAction::RegexSubstitutionAction::isolatedCopy const):
        (WebCore::ContentExtensions::RedirectAction::RegexSubstitutionAction::operator== const):
        (WebCore::ContentExtensions::RedirectAction::URLAction::isolatedCopy const):
        (WebCore::ContentExtensions::RedirectAction::URLAction::operator== const):
        * contentextensions/ContentExtensionCompiler.cpp:
        (WebCore::ContentExtensions::serializeActions):
        * contentextensions/ContentExtensionError.cpp:
        (WebCore::ContentExtensions::contentExtensionErrorCategory):
        * contentextensions/ContentExtensionError.h:
        * contentextensions/ContentExtensionParser.cpp:
        (WebCore::ContentExtensions::getStringList):
        (WebCore::ContentExtensions::loadAction):
        (WebCore::ContentExtensions::loadRule):
        (WebCore::ContentExtensions::loadEncodedRules):
        * contentextensions/ContentExtensionsBackend.cpp:
        (WebCore::ContentExtensions::ContentExtensionsBackend::processContentRuleListsForLoad):
        (WebCore::ContentExtensions::ContentExtensionsBackend::processContentRuleListsForPingLoad):

2021-11-08  Dean Jackson  <dino@apple.com>

        [WebXR] three.js demos don't work
        https://bugs.webkit.org/show_bug.cgi?id=232798
        rdar://83559881

        Reviewed by Myles C. Maxfield.

        Any content using three.js for WebXR was failing for
        a couple of reasons. Firstly, we were not correctly
        restoring the framebuffer, read, draw and texture
        bindings in the native code, and three.js was correctly
        assuming it didn't need to rebind.

        Secondly, we were not resolving the multisample
        framebuffer if the context was created with no alpha.
        The issue is that our framebuffer from XR always has
        an alpha channel, and you can't blit from RGB to RGBA.

        * Modules/webxr/WebXROpaqueFramebuffer.cpp:
        (WebCore::WebXROpaqueFramebuffer::startFrame): Make sure to restore the
        bound texture target when exiting the function. Also ensure that we
        tell the resolved FBO where its texture data comes from.
        (WebCore::WebXROpaqueFramebuffer::endFrame): Restore the framebuffer binding.
        (WebCore::WebXROpaqueFramebuffer::setupFramebuffer): Use the correct format.

2021-11-08  Myles C. Maxfield  <mmaxfield@apple.com>

        [WebGPU] Connect JS bindings code to internal WebGPU interface
        https://bugs.webkit.org/show_bug.cgi?id=232804

        Reviewed by Dean Jackson.

        We have the Javascript bindings code for WebGPU, and we have our internal interface
        for WebGPU too (https://bugs.webkit.org/show_bug.cgi?id=232792). The internal interface
        is a bunch of virtual classes. This code hookes up the two of them, so calling a
        Javascript bindings function will end up calling through to our internal interface.

        The strategy to connect them is to give each of the bindings objects a Ref of its backing
        interface, which is passed in to its create() function. When JS calls a method of one of
        these objects, the bindings object will just forward the call on through its backing
        Ref.

        In order for this to work, there have to be a bunch of converter functions for all the
        descriptor dictionaries which are used as arguments to methods. The converter functions
        convert the bindings dictionary to the relevant internal struct. These methods are all
        called convertToBacking(), and for struct types, they're member functions of the struct,
        and for enum types and typedef types, they are standalone functions.

        So, for a bindings method foo(descriptorDictionary), this gets turned into:
        m_backing->foo(descriptorDictionary.convertToBacking()).

        No new tests because there is no behavior change yet.

        * Modules/WebGPU/GPU.cpp:
        (WebCore::convertToBacking):
        (WebCore::GPU::requestAdapter):
        * Modules/WebGPU/GPU.h:
        (WebCore::GPU::create):
        (WebCore::GPU::backing):
        (WebCore::GPU::backing const):
        (WebCore::GPU::GPU):
        * Modules/WebGPU/GPUAdapter.cpp:
        (WebCore::GPUAdapter::name const):
        (WebCore::GPUAdapter::features const):
        (WebCore::GPUAdapter::limits const):
        (WebCore::GPUAdapter::isFallbackAdapter const):
        (WebCore::convertToBacking):
        (WebCore::GPUAdapter::requestDevice):
        * Modules/WebGPU/GPUAdapter.h:
        (WebCore::GPUAdapter::create):
        (WebCore::GPUAdapter::backing):
        (WebCore::GPUAdapter::backing const):
        (WebCore::GPUAdapter::GPUAdapter):
        * Modules/WebGPU/GPUAddressMode.h:
        (WebCore::convertToBacking):
        * Modules/WebGPU/GPUBindGroup.cpp:
        (WebCore::GPUBindGroup::label const):
        (WebCore::GPUBindGroup::setLabel):
        * Modules/WebGPU/GPUBindGroup.h:
        (WebCore::GPUBindGroup::create):
        (WebCore::GPUBindGroup::backing):
        (WebCore::GPUBindGroup::backing const):
        (WebCore::GPUBindGroup::GPUBindGroup):
        * Modules/WebGPU/GPUBindGroupDescriptor.h:
        (WebCore::GPUBindGroupDescriptor::convertToBacking const):
        * Modules/WebGPU/GPUBindGroupEntry.h:
        (WebCore::convertToBacking):
        (WebCore::GPUBindGroupEntry::convertToBacking const):
        * Modules/WebGPU/GPUBindGroupLayout.cpp:
        (WebCore::GPUBindGroupLayout::label const):
        (WebCore::GPUBindGroupLayout::setLabel):
        * Modules/WebGPU/GPUBindGroupLayout.h:
        (WebCore::GPUBindGroupLayout::create):
        (WebCore::GPUBindGroupLayout::backing):
        (WebCore::GPUBindGroupLayout::backing const):
        (WebCore::GPUBindGroupLayout::GPUBindGroupLayout):
        * Modules/WebGPU/GPUBindGroupLayoutDescriptor.h:
        (WebCore::GPUBindGroupLayoutDescriptor::convertToBacking const):
        * Modules/WebGPU/GPUBindGroupLayoutEntry.h:
        (WebCore::GPUBindGroupLayoutEntry::convertToBacking const):
        * Modules/WebGPU/GPUBlendComponent.h:
        (WebCore::GPUBlendComponent::convertToBacking const):
        * Modules/WebGPU/GPUBlendFactor.h:
        (WebCore::convertToBacking):
        * Modules/WebGPU/GPUBlendOperation.h:
        (WebCore::convertToBacking):
        * Modules/WebGPU/GPUBlendState.h:
        (WebCore::GPUBlendState::convertToBacking const):
        * Modules/WebGPU/GPUBuffer.cpp:
        (WebCore::GPUBuffer::label const):
        (WebCore::GPUBuffer::setLabel):
        (WebCore::GPUBuffer::mapAsync):
        (WebCore::GPUBuffer::getMappedRange):
        (WebCore::GPUBuffer::unmap):
        (WebCore::GPUBuffer::destroy):
        * Modules/WebGPU/GPUBuffer.h:
        (WebCore::GPUBuffer::create):
        (WebCore::GPUBuffer::backing):
        (WebCore::GPUBuffer::backing const):
        (WebCore::GPUBuffer::GPUBuffer):
        * Modules/WebGPU/GPUBufferBinding.h:
        (WebCore::GPUBufferBinding::convertToBacking const):
        * Modules/WebGPU/GPUBufferBindingLayout.h:
        (WebCore::GPUBufferBindingLayout::convertToBacking const):
        * Modules/WebGPU/GPUBufferBindingType.h:
        (WebCore::convertToBacking):
        * Modules/WebGPU/GPUBufferDescriptor.h:
        (WebCore::GPUBufferDescriptor::convertToBacking const):
        * Modules/WebGPU/GPUBufferUsage.h:
        (WebCore::convertBufferUsageFlagsToBacking):
        * Modules/WebGPU/GPUCanvasCompositingAlphaMode.h:
        (WebCore::convertToBacking):
        * Modules/WebGPU/GPUCanvasConfiguration.h:
        (WebCore::GPUCanvasConfiguration::convertToBacking const):
        * Modules/WebGPU/GPUColorDict.h:
        (WebCore::GPUColorDict::convertToBacking const):
        (WebCore::convertToBacking):
        * Modules/WebGPU/GPUColorTargetState.h:
        (WebCore::GPUColorTargetState::convertToBacking const):
        * Modules/WebGPU/GPUColorWrite.h:
        (WebCore::convertColorWriteFlagsToBacking):
        * Modules/WebGPU/GPUCommandBuffer.cpp:
        (WebCore::GPUCommandBuffer::label const):
        (WebCore::GPUCommandBuffer::setLabel):
        * Modules/WebGPU/GPUCommandBuffer.h:
        (WebCore::GPUCommandBuffer::create):
        (WebCore::GPUCommandBuffer::backing):
        (WebCore::GPUCommandBuffer::backing const):
        (WebCore::GPUCommandBuffer::GPUCommandBuffer):
        * Modules/WebGPU/GPUCommandBufferDescriptor.h:
        (WebCore::GPUCommandBufferDescriptor::convertToBacking const):
        * Modules/WebGPU/GPUCommandEncoder.cpp:
        (WebCore::GPUCommandEncoder::label const):
        (WebCore::GPUCommandEncoder::setLabel):
        (WebCore::GPUCommandEncoder::beginRenderPass):
        (WebCore::GPUCommandEncoder::beginComputePass):
        (WebCore::GPUCommandEncoder::copyBufferToBuffer):
        (WebCore::GPUCommandEncoder::copyBufferToTexture):
        (WebCore::GPUCommandEncoder::copyTextureToBuffer):
        (WebCore::GPUCommandEncoder::copyTextureToTexture):
        (WebCore::GPUCommandEncoder::fillBuffer):
        (WebCore::GPUCommandEncoder::pushDebugGroup):
        (WebCore::GPUCommandEncoder::popDebugGroup):
        (WebCore::GPUCommandEncoder::insertDebugMarker):
        (WebCore::GPUCommandEncoder::writeTimestamp):
        (WebCore::GPUCommandEncoder::resolveQuerySet):
        (WebCore::convertToBacking):
        (WebCore::GPUCommandEncoder::finish):
        * Modules/WebGPU/GPUCommandEncoder.h:
        (WebCore::GPUCommandEncoder::create):
        (WebCore::GPUCommandEncoder::backing):
        (WebCore::GPUCommandEncoder::backing const):
        (WebCore::GPUCommandEncoder::GPUCommandEncoder):
        * Modules/WebGPU/GPUCommandEncoderDescriptor.h:
        (WebCore::GPUCommandEncoderDescriptor::convertToBacking const):
        * Modules/WebGPU/GPUCompareFunction.h:
        (WebCore::convertToBacking):
        * Modules/WebGPU/GPUCompilationInfo.cpp:
        (WebCore::GPUCompilationInfo::messages const):
        * Modules/WebGPU/GPUCompilationInfo.h:
        (WebCore::GPUCompilationInfo::create):
        (WebCore::GPUCompilationInfo::backing):
        (WebCore::GPUCompilationInfo::backing const):
        (WebCore::GPUCompilationInfo::GPUCompilationInfo):
        * Modules/WebGPU/GPUCompilationMessage.cpp:
        (WebCore::GPUCompilationMessage::message const):
        (WebCore::GPUCompilationMessage::type const):
        (WebCore::GPUCompilationMessage::lineNum const):
        (WebCore::GPUCompilationMessage::linePos const):
        (WebCore::GPUCompilationMessage::offset const):
        (WebCore::GPUCompilationMessage::length const):
        * Modules/WebGPU/GPUCompilationMessage.h:
        (WebCore::GPUCompilationMessage::create):
        (WebCore::GPUCompilationMessage::backing):
        (WebCore::GPUCompilationMessage::backing const):
        (WebCore::GPUCompilationMessage::GPUCompilationMessage):
        * Modules/WebGPU/GPUCompilationMessageType.h:
        (WebCore::convertToBacking):
        * Modules/WebGPU/GPUComputePassDescriptor.h:
        (WebCore::GPUComputePassDescriptor::convertToBacking const):
        * Modules/WebGPU/GPUComputePassEncoder.cpp:
        (WebCore::GPUComputePassEncoder::label const):
        (WebCore::GPUComputePassEncoder::setLabel):
        (WebCore::GPUComputePassEncoder::setPipeline):
        (WebCore::GPUComputePassEncoder::dispatch):
        (WebCore::GPUComputePassEncoder::dispatchIndirect):
        (WebCore::GPUComputePassEncoder::beginPipelineStatisticsQuery):
        (WebCore::GPUComputePassEncoder::endPipelineStatisticsQuery):
        (WebCore::GPUComputePassEncoder::endPass):
        (WebCore::GPUComputePassEncoder::setBindGroup):
        (WebCore::GPUComputePassEncoder::pushDebugGroup):
        (WebCore::GPUComputePassEncoder::popDebugGroup):
        (WebCore::GPUComputePassEncoder::insertDebugMarker):
        * Modules/WebGPU/GPUComputePassEncoder.h:
        (WebCore::GPUComputePassEncoder::create):
        (WebCore::GPUComputePassEncoder::backing):
        (WebCore::GPUComputePassEncoder::backing const):
        (WebCore::GPUComputePassEncoder::GPUComputePassEncoder):
        * Modules/WebGPU/GPUComputePassTimestampLocation.h:
        (WebCore::convertToBacking):
        * Modules/WebGPU/GPUComputePassTimestampWrite.h:
        (WebCore::GPUComputePassTimestampWrite::convertToBacking const):
        (WebCore::convertToBacking):
        * Modules/WebGPU/GPUComputePipeline.cpp:
        (WebCore::GPUComputePipeline::label const):
        (WebCore::GPUComputePipeline::setLabel):
        (WebCore::GPUComputePipeline::getBindGroupLayout):
        * Modules/WebGPU/GPUComputePipeline.h:
        (WebCore::GPUComputePipeline::create):
        (WebCore::GPUComputePipeline::backing):
        (WebCore::GPUComputePipeline::backing const):
        (WebCore::GPUComputePipeline::GPUComputePipeline):
        * Modules/WebGPU/GPUComputePipelineDescriptor.h:
        (WebCore::GPUComputePipelineDescriptor::convertToBacking const):
        * Modules/WebGPU/GPUCullMode.h:
        (WebCore::convertToBacking):
        * Modules/WebGPU/GPUDepthStencilState.h:
        (WebCore::GPUDepthStencilState::convertToBacking const):
        * Modules/WebGPU/GPUDevice.cpp:
        (WebCore::GPUDevice::label const):
        (WebCore::GPUDevice::setLabel):
        (WebCore::GPUDevice::features const):
        (WebCore::GPUDevice::limits const):
        (WebCore::GPUDevice::destroy):
        (WebCore::GPUDevice::createBuffer):
        (WebCore::GPUDevice::createTexture):
        (WebCore::convertToBacking):
        (WebCore::GPUDevice::createSampler):
        (WebCore::GPUDevice::importExternalTexture):
        (WebCore::GPUDevice::createBindGroupLayout):
        (WebCore::GPUDevice::createPipelineLayout):
        (WebCore::GPUDevice::createBindGroup):
        (WebCore::GPUDevice::createShaderModule):
        (WebCore::GPUDevice::createComputePipeline):
        (WebCore::GPUDevice::createRenderPipeline):
        (WebCore::GPUDevice::createComputePipelineAsync):
        (WebCore::GPUDevice::createRenderPipelineAsync):
        (WebCore::GPUDevice::createCommandEncoder):
        (WebCore::GPUDevice::createRenderBundleEncoder):
        (WebCore::GPUDevice::createQuerySet):
        (WebCore::GPUDevice::pushErrorScope):
        (WebCore::GPUDevice::popErrorScope):
        * Modules/WebGPU/GPUDevice.h:
        (WebCore::GPUDevice::create):
        (WebCore::GPUDevice::backing):
        (WebCore::GPUDevice::backing const):
        (WebCore::GPUDevice::GPUDevice):
        (WebCore::GPUDevice::m_backing):
        * Modules/WebGPU/GPUDeviceDescriptor.h:
        (WebCore::GPUDeviceDescriptor::convertToBacking const):
        * Modules/WebGPU/GPUDeviceLostInfo.cpp:
        (WebCore::GPUDeviceLostInfo::reason const):
        (WebCore::GPUDeviceLostInfo::message const):
        (WebCore::GPUDeviceLostInfo::GPUDeviceLostInfo): Deleted.
        * Modules/WebGPU/GPUDeviceLostInfo.h:
        (WebCore::GPUDeviceLostInfo::create):
        (WebCore::GPUDeviceLostInfo::backing):
        (WebCore::GPUDeviceLostInfo::backing const):
        (WebCore::GPUDeviceLostInfo::GPUDeviceLostInfo):
        * Modules/WebGPU/GPUDeviceLostReason.h:
        (WebCore::convertToBacking):
        * Modules/WebGPU/GPUErrorFilter.h:
        (WebCore::convertToBacking):
        * Modules/WebGPU/GPUExtent3DDict.h:
        (WebCore::GPUExtent3DDict::convertToBacking const):
        (WebCore::convertToBacking):
        * Modules/WebGPU/GPUExternalTexture.cpp:
        (WebCore::GPUExternalTexture::label const):
        (WebCore::GPUExternalTexture::setLabel):
        * Modules/WebGPU/GPUExternalTexture.h:
        (WebCore::GPUExternalTexture::create):
        (WebCore::GPUExternalTexture::backing):
        (WebCore::GPUExternalTexture::backing const):
        (WebCore::GPUExternalTexture::GPUExternalTexture):
        * Modules/WebGPU/GPUExternalTextureBindingLayout.h:
        (WebCore::GPUExternalTextureBindingLayout::convertToBacking const):
        * Modules/WebGPU/GPUExternalTextureDescriptor.h:
        (WebCore::GPUExternalTextureDescriptor::convertToBacking const):
        * Modules/WebGPU/GPUFeatureName.h:
        (WebCore::convertToBacking):
        * Modules/WebGPU/GPUFilterMode.h:
        (WebCore::convertToBacking):
        * Modules/WebGPU/GPUFragmentState.h:
        (WebCore::GPUFragmentState::convertToBacking const):
        * Modules/WebGPU/GPUFrontFace.h:
        (WebCore::convertToBacking):
        * Modules/WebGPU/GPUImageCopyBuffer.h:
        (WebCore::GPUImageCopyBuffer::convertToBacking const):
        * Modules/WebGPU/GPUImageCopyExternalImage.h:
        (WebCore::GPUImageCopyExternalImage::convertToBacking const):
        * Modules/WebGPU/GPUImageCopyTexture.h:
        (WebCore::GPUImageCopyTexture::convertToBacking const):
        * Modules/WebGPU/GPUImageCopyTextureTagged.h:
        (WebCore::GPUImageCopyTextureTagged::convertToBacking const):
        * Modules/WebGPU/GPUImageDataLayout.h:
        (WebCore::GPUImageDataLayout::convertToBacking const):
        * Modules/WebGPU/GPUIndexFormat.h:
        (WebCore::convertToBacking):
        * Modules/WebGPU/GPULoadOp.h:
        (WebCore::convertToBacking):
        * Modules/WebGPU/GPUMapMode.h:
        (WebCore::convertMapModeFlagsToBacking):
        * Modules/WebGPU/GPUMultisampleState.h:
        (WebCore::GPUMultisampleState::convertToBacking const):
        * Modules/WebGPU/GPUObjectDescriptorBase.h:
        (WebCore::GPUObjectDescriptorBase::convertToBacking const):
        * Modules/WebGPU/GPUOrigin2DDict.h:
        (WebCore::GPUOrigin2DDict::convertToBacking const):
        (WebCore::convertToBacking):
        * Modules/WebGPU/GPUOrigin3DDict.h:
        (WebCore::GPUOrigin3DDict::convertToBacking const):
        (WebCore::convertToBacking):
        * Modules/WebGPU/GPUOutOfMemoryError.h:
        (WebCore::GPUOutOfMemoryError::create):
        (WebCore::GPUOutOfMemoryError::backing):
        (WebCore::GPUOutOfMemoryError::backing const):
        (WebCore::GPUOutOfMemoryError::GPUOutOfMemoryError):
        * Modules/WebGPU/GPUPipelineDescriptorBase.h:
        (WebCore::GPUPipelineDescriptorBase::convertToBacking const):
        * Modules/WebGPU/GPUPipelineLayout.cpp:
        (WebCore::GPUPipelineLayout::label const):
        (WebCore::GPUPipelineLayout::setLabel):
        * Modules/WebGPU/GPUPipelineLayout.h:
        (WebCore::GPUPipelineLayout::create):
        (WebCore::GPUPipelineLayout::backing):
        (WebCore::GPUPipelineLayout::backing const):
        (WebCore::GPUPipelineLayout::GPUPipelineLayout):
        * Modules/WebGPU/GPUPipelineLayoutDescriptor.h:
        (WebCore::GPUPipelineLayoutDescriptor::convertToBacking const):
        * Modules/WebGPU/GPUPipelineStatisticName.h:
        (WebCore::convertToBacking):
        * Modules/WebGPU/GPUPowerPreference.h:
        (WebCore::convertToBacking):
        * Modules/WebGPU/GPUPredefinedColorSpace.h:
        (WebCore::convertToBacking):
        * Modules/WebGPU/GPUPrimitiveState.h:
        (WebCore::GPUPrimitiveState::convertToBacking const):
        * Modules/WebGPU/GPUPrimitiveTopology.h:
        (WebCore::convertToBacking):
        * Modules/WebGPU/GPUProgrammableStage.h:
        (WebCore::GPUProgrammableStage::convertToBacking const):
        * Modules/WebGPU/GPUQuerySet.cpp:
        (WebCore::GPUQuerySet::label const):
        (WebCore::GPUQuerySet::setLabel):
        (WebCore::GPUQuerySet::destroy):
        * Modules/WebGPU/GPUQuerySet.h:
        (WebCore::GPUQuerySet::create):
        (WebCore::GPUQuerySet::backing):
        (WebCore::GPUQuerySet::backing const):
        (WebCore::GPUQuerySet::GPUQuerySet):
        * Modules/WebGPU/GPUQuerySetDescriptor.h:
        (WebCore::GPUQuerySetDescriptor::convertToBacking const):
        * Modules/WebGPU/GPUQueryType.h:
        (WebCore::convertToBacking):
        * Modules/WebGPU/GPUQueue.cpp:
        (WebCore::GPUQueue::label const):
        (WebCore::GPUQueue::setLabel):
        (WebCore::GPUQueue::submit):
        (WebCore::GPUQueue::onSubmittedWorkDone):
        (WebCore::GPUQueue::writeBuffer):
        (WebCore::GPUQueue::writeTexture):
        (WebCore::GPUQueue::copyExternalImageToTexture):
        * Modules/WebGPU/GPUQueue.h:
        (WebCore::GPUQueue::create):
        (WebCore::GPUQueue::backing):
        (WebCore::GPUQueue::backing const):
        (WebCore::GPUQueue::GPUQueue):
        * Modules/WebGPU/GPURenderBundle.cpp:
        (WebCore::GPURenderBundle::label const):
        (WebCore::GPURenderBundle::setLabel):
        * Modules/WebGPU/GPURenderBundle.h:
        (WebCore::GPURenderBundle::create):
        (WebCore::GPURenderBundle::backing):
        (WebCore::GPURenderBundle::backing const):
        (WebCore::GPURenderBundle::GPURenderBundle):
        * Modules/WebGPU/GPURenderBundleDescriptor.h:
        (WebCore::GPURenderBundleDescriptor::convertToBacking const):
        * Modules/WebGPU/GPURenderBundleEncoder.cpp:
        (WebCore::GPURenderBundleEncoder::label const):
        (WebCore::GPURenderBundleEncoder::setLabel):
        (WebCore::GPURenderBundleEncoder::setPipeline):
        (WebCore::GPURenderBundleEncoder::setIndexBuffer):
        (WebCore::GPURenderBundleEncoder::setVertexBuffer):
        (WebCore::GPURenderBundleEncoder::draw):
        (WebCore::GPURenderBundleEncoder::drawIndexed):
        (WebCore::GPURenderBundleEncoder::drawIndirect):
        (WebCore::GPURenderBundleEncoder::drawIndexedIndirect):
        (WebCore::GPURenderBundleEncoder::setBindGroup):
        (WebCore::GPURenderBundleEncoder::pushDebugGroup):
        (WebCore::GPURenderBundleEncoder::popDebugGroup):
        (WebCore::GPURenderBundleEncoder::insertDebugMarker):
        (WebCore::convertToBacking):
        (WebCore::GPURenderBundleEncoder::finish):
        * Modules/WebGPU/GPURenderBundleEncoder.h:
        (WebCore::GPURenderBundleEncoder::create):
        (WebCore::GPURenderBundleEncoder::backing):
        (WebCore::GPURenderBundleEncoder::backing const):
        (WebCore::GPURenderBundleEncoder::GPURenderBundleEncoder):
        * Modules/WebGPU/GPURenderBundleEncoderDescriptor.h:
        (WebCore::GPURenderBundleEncoderDescriptor::convertToBacking const):
        * Modules/WebGPU/GPURenderPassColorAttachment.h:
        (WebCore::GPURenderPassColorAttachment::convertToBacking const):
        * Modules/WebGPU/GPURenderPassDepthStencilAttachment.h:
        (WebCore::GPURenderPassDepthStencilAttachment::convertToBacking const):
        * Modules/WebGPU/GPURenderPassDescriptor.h:
        (WebCore::GPURenderPassDescriptor::convertToBacking const):
        * Modules/WebGPU/GPURenderPassEncoder.cpp:
        (WebCore::GPURenderPassEncoder::label const):
        (WebCore::GPURenderPassEncoder::setLabel):
        (WebCore::GPURenderPassEncoder::setPipeline):
        (WebCore::GPURenderPassEncoder::setIndexBuffer):
        (WebCore::GPURenderPassEncoder::setVertexBuffer):
        (WebCore::GPURenderPassEncoder::draw):
        (WebCore::GPURenderPassEncoder::drawIndexed):
        (WebCore::GPURenderPassEncoder::drawIndirect):
        (WebCore::GPURenderPassEncoder::drawIndexedIndirect):
        (WebCore::GPURenderPassEncoder::setBindGroup):
        (WebCore::GPURenderPassEncoder::pushDebugGroup):
        (WebCore::GPURenderPassEncoder::popDebugGroup):
        (WebCore::GPURenderPassEncoder::insertDebugMarker):
        (WebCore::GPURenderPassEncoder::setViewport):
        (WebCore::GPURenderPassEncoder::setScissorRect):
        (WebCore::GPURenderPassEncoder::setBlendConstant):
        (WebCore::GPURenderPassEncoder::setStencilReference):
        (WebCore::GPURenderPassEncoder::beginOcclusionQuery):
        (WebCore::GPURenderPassEncoder::endOcclusionQuery):
        (WebCore::GPURenderPassEncoder::beginPipelineStatisticsQuery):
        (WebCore::GPURenderPassEncoder::endPipelineStatisticsQuery):
        (WebCore::GPURenderPassEncoder::executeBundles):
        (WebCore::GPURenderPassEncoder::endPass):
        * Modules/WebGPU/GPURenderPassEncoder.h:
        (WebCore::GPURenderPassEncoder::create):
        (WebCore::GPURenderPassEncoder::backing):
        (WebCore::GPURenderPassEncoder::backing const):
        (WebCore::GPURenderPassEncoder::GPURenderPassEncoder):
        * Modules/WebGPU/GPURenderPassLayout.h:
        (WebCore::GPURenderPassLayout::convertToBacking const):
        * Modules/WebGPU/GPURenderPassTimestampLocation.h:
        (WebCore::convertToBacking):
        * Modules/WebGPU/GPURenderPassTimestampWrite.h:
        (WebCore::GPURenderPassTimestampWrite::convertToBacking const):
        (WebCore::convertToBacking):
        * Modules/WebGPU/GPURenderPipeline.cpp:
        (WebCore::GPURenderPipeline::label const):
        (WebCore::GPURenderPipeline::setLabel):
        (WebCore::GPURenderPipeline::getBindGroupLayout):
        * Modules/WebGPU/GPURenderPipeline.h:
        (WebCore::GPURenderPipeline::create):
        (WebCore::GPURenderPipeline::backing):
        (WebCore::GPURenderPipeline::backing const):
        (WebCore::GPURenderPipeline::GPURenderPipeline):
        * Modules/WebGPU/GPURenderPipelineDescriptor.h:
        (WebCore::GPURenderPipelineDescriptor::convertToBacking const):
        * Modules/WebGPU/GPURequestAdapterOptions.h:
        (WebCore::GPURequestAdapterOptions::convertToBacking const):
        * Modules/WebGPU/GPUSampler.cpp:
        (WebCore::GPUSampler::label const):
        (WebCore::GPUSampler::setLabel):
        * Modules/WebGPU/GPUSampler.h:
        (WebCore::GPUSampler::create):
        (WebCore::GPUSampler::backing):
        (WebCore::GPUSampler::backing const):
        (WebCore::GPUSampler::GPUSampler):
        * Modules/WebGPU/GPUSamplerBindingLayout.h:
        (WebCore::GPUSamplerBindingLayout::convertToBacking const):
        * Modules/WebGPU/GPUSamplerBindingType.h:
        (WebCore::convertToBacking):
        * Modules/WebGPU/GPUSamplerDescriptor.h:
        (WebCore::GPUSamplerDescriptor::convertToBacking const):
        * Modules/WebGPU/GPUShaderModule.cpp:
        (WebCore::GPUShaderModule::label const):
        (WebCore::GPUShaderModule::setLabel):
        (WebCore::GPUShaderModule::compilationInfo):
        * Modules/WebGPU/GPUShaderModule.h:
        (WebCore::GPUShaderModule::create):
        (WebCore::GPUShaderModule::backing):
        (WebCore::GPUShaderModule::backing const):
        (WebCore::GPUShaderModule::GPUShaderModule):
        * Modules/WebGPU/GPUShaderModuleDescriptor.h:
        (WebCore::GPUShaderModuleDescriptor::convertToBacking const):
        * Modules/WebGPU/GPUShaderStage.h:
        (WebCore::convertShaderStageFlagsToBacking):
        * Modules/WebGPU/GPUStencilFaceState.h:
        (WebCore::GPUStencilFaceState::convertToBacking const):
        * Modules/WebGPU/GPUStencilOperation.h:
        (WebCore::convertToBacking):
        * Modules/WebGPU/GPUStorageTextureAccess.h:
        (WebCore::convertToBacking):
        * Modules/WebGPU/GPUStorageTextureBindingLayout.h:
        (WebCore::GPUStorageTextureBindingLayout::convertToBacking const):
        * Modules/WebGPU/GPUStoreOp.h:
        (WebCore::convertToBacking):
        * Modules/WebGPU/GPUSupportedFeatures.cpp:
        (WebCore::GPUSupportedFeatures::initializeSetLike const):
        * Modules/WebGPU/GPUSupportedFeatures.h:
        (WebCore::GPUSupportedFeatures::create):
        (WebCore::GPUSupportedFeatures::backing):
        (WebCore::GPUSupportedFeatures::backing const):
        (WebCore::GPUSupportedFeatures::GPUSupportedFeatures):
        * Modules/WebGPU/GPUSupportedLimits.cpp:
        (WebCore::GPUSupportedLimits::maxTextureDimension1D const):
        (WebCore::GPUSupportedLimits::maxTextureDimension2D const):
        (WebCore::GPUSupportedLimits::maxTextureDimension3D const):
        (WebCore::GPUSupportedLimits::maxTextureArrayLayers const):
        (WebCore::GPUSupportedLimits::maxBindGroups const):
        (WebCore::GPUSupportedLimits::maxDynamicUniformBuffersPerPipelineLayout const):
        (WebCore::GPUSupportedLimits::maxDynamicStorageBuffersPerPipelineLayout const):
        (WebCore::GPUSupportedLimits::maxSampledTexturesPerShaderStage const):
        (WebCore::GPUSupportedLimits::maxSamplersPerShaderStage const):
        (WebCore::GPUSupportedLimits::maxStorageBuffersPerShaderStage const):
        (WebCore::GPUSupportedLimits::maxStorageTexturesPerShaderStage const):
        (WebCore::GPUSupportedLimits::maxUniformBuffersPerShaderStage const):
        (WebCore::GPUSupportedLimits::maxUniformBufferBindingSize const):
        (WebCore::GPUSupportedLimits::maxStorageBufferBindingSize const):
        (WebCore::GPUSupportedLimits::minUniformBufferOffsetAlignment const):
        (WebCore::GPUSupportedLimits::minStorageBufferOffsetAlignment const):
        (WebCore::GPUSupportedLimits::maxVertexBuffers const):
        (WebCore::GPUSupportedLimits::maxVertexAttributes const):
        (WebCore::GPUSupportedLimits::maxVertexBufferArrayStride const):
        (WebCore::GPUSupportedLimits::maxInterStageShaderComponents const):
        (WebCore::GPUSupportedLimits::maxComputeWorkgroupStorageSize const):
        (WebCore::GPUSupportedLimits::maxComputeInvocationsPerWorkgroup const):
        (WebCore::GPUSupportedLimits::maxComputeWorkgroupSizeX const):
        (WebCore::GPUSupportedLimits::maxComputeWorkgroupSizeY const):
        (WebCore::GPUSupportedLimits::maxComputeWorkgroupSizeZ const):
        (WebCore::GPUSupportedLimits::maxComputeWorkgroupsPerDimension const):
        * Modules/WebGPU/GPUSupportedLimits.h:
        (WebCore::GPUSupportedLimits::create):
        (WebCore::GPUSupportedLimits::backing):
        (WebCore::GPUSupportedLimits::backing const):
        (WebCore::GPUSupportedLimits::GPUSupportedLimits):
        * Modules/WebGPU/GPUTexture.cpp:
        (WebCore::GPUTexture::label const):
        (WebCore::GPUTexture::setLabel):
        (WebCore::convertToBacking):
        (WebCore::GPUTexture::createView const):
        * Modules/WebGPU/GPUTexture.h:
        (WebCore::GPUTexture::create):
        (WebCore::GPUTexture::backing):
        (WebCore::GPUTexture::backing const):
        (WebCore::GPUTexture::GPUTexture):
        * Modules/WebGPU/GPUTextureAspect.h:
        (WebCore::convertToBacking):
        * Modules/WebGPU/GPUTextureBindingLayout.h:
        (WebCore::GPUTextureBindingLayout::convertToBacking const):
        * Modules/WebGPU/GPUTextureDescriptor.h:
        (WebCore::GPUTextureDescriptor::convertToBacking const):
        * Modules/WebGPU/GPUTextureDimension.h:
        (WebCore::convertToBacking):
        * Modules/WebGPU/GPUTextureFormat.h:
        (WebCore::convertToBacking):
        * Modules/WebGPU/GPUTextureSampleType.h:
        (WebCore::convertToBacking):
        * Modules/WebGPU/GPUTextureUsage.h:
        (WebCore::convertTextureUsageFlagsToBacking):
        * Modules/WebGPU/GPUTextureView.cpp:
        (WebCore::GPUTextureView::label const):
        (WebCore::GPUTextureView::setLabel):
        * Modules/WebGPU/GPUTextureView.h:
        (WebCore::GPUTextureView::create):
        (WebCore::GPUTextureView::backing):
        (WebCore::GPUTextureView::backing const):
        (WebCore::GPUTextureView::GPUTextureView):
        * Modules/WebGPU/GPUTextureViewDescriptor.h:
        (WebCore::GPUTextureViewDescriptor::convertToBacking const):
        * Modules/WebGPU/GPUTextureViewDimension.h:
        (WebCore::convertToBacking):
        * Modules/WebGPU/GPUUncapturedErrorEvent.cpp:
        (WebCore::GPUUncapturedErrorEvent::error const):
        (WebCore::GPUUncapturedErrorEvent::GPUUncapturedErrorEvent): Deleted.
        * Modules/WebGPU/GPUUncapturedErrorEvent.h:
        (WebCore::GPUUncapturedErrorEvent::create):
        (WebCore::GPUUncapturedErrorEvent::backing):
        (WebCore::GPUUncapturedErrorEvent::backing const):
        (WebCore::GPUUncapturedErrorEvent::GPUUncapturedErrorEvent):
        * Modules/WebGPU/GPUUncapturedErrorEventInit.h:
        * Modules/WebGPU/GPUValidationError.cpp:
        (WebCore::GPUValidationError::message const):
        (WebCore::GPUValidationError::GPUValidationError): Deleted.
        * Modules/WebGPU/GPUValidationError.h:
        (WebCore::GPUValidationError::create):
        (WebCore::GPUValidationError::backing):
        (WebCore::GPUValidationError::backing const):
        (WebCore::GPUValidationError::GPUValidationError):
        * Modules/WebGPU/GPUVertexAttribute.h:
        (WebCore::GPUVertexAttribute::convertToBacking const):
        * Modules/WebGPU/GPUVertexBufferLayout.h:
        (WebCore::GPUVertexBufferLayout::convertToBacking const):
        * Modules/WebGPU/GPUVertexFormat.h:
        (WebCore::convertToBacking):
        * Modules/WebGPU/GPUVertexState.h:
        (WebCore::GPUVertexState::convertToBacking const):
        * Modules/WebGPU/GPUVertexStepMode.h:
        (WebCore::convertToBacking):
        * page/NavigatorBase.cpp:
        (WebCore::NavigatorBase::NavigatorBase):
        * page/NavigatorBase.h:
        (WebCore::NavigatorBase::gpu):

2021-11-08  Chris Dumez  <cdumez@apple.com>

        Add abort reason to AbortSignal
        https://bugs.webkit.org/show_bug.cgi?id=232299
        <rdar://problem/84921281>

        Reviewed by Alexey Shvayka.

        Add abort reason to AbortSignal:
        - https://github.com/whatwg/dom/pull/1027
        - https://dom.spec.whatwg.org/#abortsignal

        No new tests, updated & rebaselined existing WPT test.

        * bindings/js/JSAbortSignalCustom.cpp:
        (WebCore::JSAbortSignal::visitAdditionalChildren):
        * dom/AbortController.cpp:
        (WebCore::AbortController::abort):
        * dom/AbortController.h:
        * dom/AbortController.idl:
        * dom/AbortSignal.cpp:
        (WebCore::AbortSignal::abort):
        (WebCore::AbortSignal::AbortSignal):
        (WebCore::AbortSignal::signalAbort):
        (WebCore::AbortSignal::signalFollow):
        * dom/AbortSignal.h:
        * dom/AbortSignal.idl:

2021-11-08  Ross Kirsling  <ross.kirsling@sony.com>

        Fix !ENABLE(ACCESSIBILITY) build following r285399
        https://bugs.webkit.org/show_bug.cgi?id=232826

        Unreviewed build fix.

        * accessibility/AXObjectCache.h:
        (WebCore::AXObjectCache::enableAccessibility):
        (WebCore::AXObjectCache::disableAccessibility):
        (WebCore::AXObjectCache::setEnhancedUserInterfaceAccessibility):

2021-11-08  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Live Text] Add a helper method to remove recognized text from an image element
        https://bugs.webkit.org/show_bug.cgi?id=232788

        Reviewed by Aditya Keerthi.

        Add a couple of helper functions for resetting cached text recognition results, and for removing recognized text
        from the shadow root of an image element. These will be used to support enhancements to Live Text in a future
        patch. No change in behavior.

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::removeImageOverlaySoonIfNeeded):
        * html/HTMLElement.h:
        * page/Page.cpp:
        (WebCore::Page::resetTextRecognitionResult):
        * page/Page.h:

2021-11-08  Antoine Quint  <graouts@webkit.org>

        Discrete animation of content property does not work
        https://bugs.webkit.org/show_bug.cgi?id=183544

        Reviewed by Antti Koivisto.

        Test: imported/w3c/web-platform-tests/css/css-content/content-animation.html

        Add support for animating the "content" property.

        * animation/CSSPropertyAnimation.cpp:
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):
        * rendering/style/RenderStyle.h:

2021-11-08  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r285408.
        https://bugs.webkit.org/show_bug.cgi?id=232829

        Depending on r285392, which caused 4% Speedometer2 regression

        Reverted changeset:

        "[CSS Cascade Layers] Support 'revert-layer' value"
        https://bugs.webkit.org/show_bug.cgi?id=232236
        https://commits.webkit.org/r285408

2021-11-08  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r285392.
        https://bugs.webkit.org/show_bug.cgi?id=232828

        4% Speedometer2 regression

        Reverted changeset:

        "Use narrower types for style scope ordinal and cascade layer
        priority"
        https://bugs.webkit.org/show_bug.cgi?id=232797
        https://commits.webkit.org/r285392

2021-11-08  Chris Dumez  <cdumez@apple.com>

        Unreviewed, reverting r284883.

        Caused high energy use on wsj.com <rdar://85156874>

        Reverted changeset:

        "<link> elements should be able to fire more than one load /
        error event"
        https://bugs.webkit.org/show_bug.cgi?id=232309
        https://commits.webkit.org/r284883

2021-11-08  Chris Dumez  <cdumez@apple.com>

        Stop using a timer to dispatch the source element's error event asynchronously
        https://bugs.webkit.org/show_bug.cgi?id=232817

        Reviewed by Youenn Fablet.

        Stop using a timer to dispatch the source element's error event asynchronously and use
        the HTML5 event loop instead.

        * html/HTMLSourceElement.cpp:
        (WebCore::HTMLSourceElement::HTMLSourceElement):
        (WebCore::HTMLSourceElement::scheduleErrorEvent):
        (WebCore::HTMLSourceElement::cancelPendingErrorEvent):
        (WebCore::HTMLSourceElement::errorEventTimerFired): Deleted.
        (WebCore::HTMLSourceElement::suspend): Deleted.
        (WebCore::HTMLSourceElement::resume): Deleted.
        * html/HTMLSourceElement.h:

2021-11-08  Wenson Hsieh  <wenson_hsieh@apple.com>

        Enabling "media source inline painting" by default should work when using GPU Process for media
        https://bugs.webkit.org/show_bug.cgi?id=232802

        Reviewed by Eric Carlson.

        See WebKit/ChangeLog for more details.

        * page/RuntimeEnabledFeatures.h:

2021-11-08  Antti Koivisto  <antti@apple.com>

        [CSS Cascade Layers] Support 'revert-layer' value
        https://bugs.webkit.org/show_bug.cgi?id=232236
        <rdar://problem/84879369>

        Reviewed by Simon Fraser.

        'revert-layer' keyword rolls back the value computed by the cascade to the one coming from the layer below.

        https://www.w3.org/TR/css-cascade-5/#revert-layer

        * css/CSSPrimitiveValue.h:
        * css/CSSValue.cpp:
        (WebCore::CSSValue::isRevertLayerValue const):
        * css/CSSValue.h:
        * css/CSSValueKeywords.in:

        Add a 'revert-layer' keyword.

        * css/parser/CSSParserIdioms.h:
        (WebCore::isCSSWideKeyword):

        Make the keyword CSS-wide.

        (WebCore::isValidCustomIdentifier):
        * style/CascadeLevel.h:
        (WebCore::Style::operator--):

        Add decrement operator.

        (WebCore::Style::allCascadeLevels): Deleted.
        * style/ElementRuleCollector.cpp:
        (WebCore::Style::ElementRuleCollector::addElementStyleProperties):
        (WebCore::Style::ElementRuleCollector::transferMatchedRules):

        Pass the casdade layer priority so it is available when resolving the cascade.

        (WebCore::Style::ElementRuleCollector::addElementInlineStyleProperties):

        Add a bit indicating if the properties came from a style attribute. This is needed for correct resolution of !important with cascade layers.

        * style/ElementRuleCollector.h:
        * style/PropertyCascade.cpp:
        (WebCore::Style::PropertyCascade::PropertyCascade):

        Specify cascade levels in terms of the maximum level instead of an OptionSet of levels. This makes things simpler.
        Make it a member.
        Provide maximum cascade layer priority when constructing rollback cascade.

        (WebCore::Style::PropertyCascade::buildCascade):
        (WebCore::Style::PropertyCascade::setPropertyInternal):
        (WebCore::Style::PropertyCascade::addMatch):

        Ignore properties with cascade level higher than the maximum.

        (WebCore::Style::PropertyCascade::addImportantMatches):

        Take cascade layers into accouny when sorting important matches.

        (WebCore::Style::PropertyCascade::propertyCascadeForRollback const): Deleted.

        Move rollback cascades to Builder.

        * style/PropertyCascade.h:
        (WebCore::Style::PropertyCascade::maximumCascadeLevel const):
        (WebCore::Style::PropertyCascade::maximumCascadeLayerPriority const):
        * style/StyleBuilder.cpp:
        (WebCore::Style::Builder::Builder):

        Specify cascade levels in terms of the maximum level instead of an OptionSet of levels.

        (WebCore::Style::Builder::applyCascadeProperty):
        (WebCore::Style::Builder::applyProperty):

        Construct rollback cascade for 'revert-layer' case too. This is similar to 'revert'.

        (WebCore::Style::Builder::ensureRollbackCascadeForRevert):
        (WebCore::Style::Builder::ensureRollbackCascadeForRevertLayer):

        Make the rollback cascades and store them into a HashMap.

        (WebCore::Style::Builder::makeRollbackCascadeKey):
        * style/StyleBuilder.h:
        * style/StyleBuilderState.h:
        * style/StyleResolver.cpp:
        (WebCore::Style::Resolver::styleForKeyframe):
        (WebCore::Style::Resolver::styleForPage):
        (WebCore::Style::Resolver::applyMatchedProperties):

        Adopt to the new interface.

2021-11-08  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] The first run in visual order may not generate a display box
        https://bugs.webkit.org/show_bug.cgi?id=232806

        Reviewed by Antti Koivisto.

        Do not rely on the 0 index value to compute the content start position when visual ordering is in place.
        The very first run (i == 0) in visual order may not even call into the displayBoxRect function (e.g. inline box end as </span>) 
        which means that we end up with an incorrect initial content start position (as we miss the RTL conversion).

        * layout/formattingContexts/inline/InlineDisplayContentBuilder.cpp:
        (WebCore::Layout::InlineDisplayContentBuilder::createBoxesAndUpdateGeometryForLineContent):

2021-11-08  Jer Noble  <jer.noble@apple.com>

        Infinite loop in SourceBufferParserWebM::SegmentReader::Read
        https://bugs.webkit.org/show_bug.cgi?id=232740
        <rdar://83573873>

        Reviewed by Eric Carlson.

        No test because the reproduction steps are still unknown.

        Customer reports indicate an infinite loop condition on a background queue inside
        SourceBufferParserWebM::SegmentReader::Read(), and those reports indicate that the
        MTPluginByteSourceRead() call is failing and returning an error. When an error occurs, the
        SourceBufferParser::Segment::read() method drops the error and simply reports that zero
        bytes were read. And consequently in the SegmentReader::Read() method, that method will
        loop forever attempting to satisfy the request for a certain number of bytes to be read. 

        The cause of the MTPluginByteSourceRead() call failing is not well known at this point.
        It could be the case of a faulty server reporting an incorrect content-length, or it could
        be a result of a WebContent process crash. Regardless, that error should be propagated
        up the call stack so that the caller can correctly break out of its while loop.

        Change the return type the Segment::read() method from `size_t` to an Expected object
        containing either a `size_t` or a ReaderError. Check the return value from within
        SegmentReader::Read() and bail if an error was returned. ReadInto() will need to be
        modified similarly.

        * platform/graphics/cocoa/SourceBufferParser.cpp:
        (WebCore::SourceBufferParser::Segment::read const):
        (WebCore::SourceBufferParser::Segment::takeSharedBuffer):
        * platform/graphics/cocoa/SourceBufferParser.h:
        * platform/graphics/cocoa/SourceBufferParserWebM.cpp:
        (WebCore::segmentReadErrorToWebmStatus):
        * platform/graphics/cocoa/SourceBufferParserWebM.h:

2021-11-08  Youenn Fablet  <youenn@apple.com>

        newAudioChunkPushed callback should take the total number of audio samples as parameter
        https://bugs.webkit.org/show_bug.cgi?id=232808

        Reviewed by Eric Carlson.

        Update code according review.
        This is a refactoring, no change of behavior.

        * platform/mediastream/cocoa/IncomingAudioMediaStreamTrackRendererUnit.cpp:
        (WebCore::IncomingAudioMediaStreamTrackRendererUnit::newAudioChunkPushed):
        * platform/mediastream/cocoa/IncomingAudioMediaStreamTrackRendererUnit.h:
        * platform/mediastream/libwebrtc/LibWebRTCAudioModule.cpp:
        (WebCore::LibWebRTCAudioModule::pollFromSource):

2021-11-08  Andres Gonzalez  <andresg_22@apple.com>

        WTR::AccessibilityController::focusedElement() cannot get the focused object via WKAccessibilityFocusedObject in isolated tree mode.
        https://bugs.webkit.org/show_bug.cgi?id=232756
        <rdar://problem/85069882>

        Reviewed by Chris Fleizach.

        WTR::AccessibilityController::focusedElement() was getting the focused
        object from WKAccessibilityFocusedObject, which has to run on the main
        thread. WKAccessibilityFocusedObject was in turn calling AXObjectCache::
        focusedUIElementForPage that tried to return the isolated focused
        object. The problem with this is that the isolated focused object can
        only be retrieved on the secondary thread.
        The solution in this patch is to retrieve the focused object from the
        root object as an AT client would do.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::focusedObjectForPage):
        (WebCore::AXObjectCache::isolatedTreeFocusedObject): Deleted, not needed any more.
        (WebCore::AXObjectCache::focusedUIElementForPage): Deleted, using focusedObjectForPage instead.
        * accessibility/AXObjectCache.h:
        Moved the following inlines out of the class declaration.
        (WebCore::AXObjectCache::accessibilityEnhancedUserInterfaceEnabled):
        (WebCore::AXObjectCache::~AXObjectCache):
        (WebCore::AXObjectCache::focusedObjectForPage):
        (WebCore::AXObjectCache::enableAccessibility):
        (WebCore::AXObjectCache::disableAccessibility):
        (WebCore::AXObjectCache::setEnhancedUserInterfaceAccessibility):
        (WebCore::AXObjectCache::accessibilityEnabled):
        (WebCore::AXObjectCache::focusedUIElementForPage): Deleted.
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilityFocusedUIElement]): Code cleanup.
        * accessibility/win/AXObjectCacheWin.cpp:
        (WebCore::AXObjectCache::platformHandleFocusedUIElementChanged):

2021-11-08  Antoine Quint  <graouts@webkit.org>

        [Web Animations] Add support for composite operations for software animations
        https://bugs.webkit.org/show_bug.cgi?id=230404
        <rdar://problem/83495091>

        Reviewed by Dean Jackson.

        We now support composite operations provided via the Web Animations API. Much of the work is to ensure
        we account for the CompositeOperation provided to the blending functions. The rest of the work is to
        correctly handle the values provided by the API, store them in the KeyframeValue and KeyframeList objects
        created to support blending in KeyframeEffect and correctly use the composite operations as part of the
        KeyframeEffect::setAnimatedPropertiesInStyle() function.

        The remaining work not covered by this patch is to fix the remaining WPT failures related to additivity
        of various transform types (bug 232082) and support for additivity for accelerated animations (bug 232081).

        * animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFunc): support additivity when blending float and ShapeValue values. In the case of
        Visibility, we make sure to ignore additivity since it's irrelevant for this type.
        (WebCore::AnimationPropertyWrapperBase::isAdditiveOrCumulative const): There are rare cases where
        types do not support additivity, so we add a new virtual method to the base wrapper to let subclasses
        indicate such cases.
        (WebCore::canInterpolateLengths): some of the composition WPT identified an issue where we ought not
        interpolate LengthPoint in the case where one of the from or to values are calc() unless the other value
        is fixed, a percentage or another calc() value.
        (WebCore::PropertyWrapperShadow::canInterpolate): shadows can always interpolate when they are additive
        since in that case we don't blend but rather add the list of shadows.
        (WebCore::StrokeDasharrayPropertyWrapper): stoke-dasharray is not additive so we add a dedicated wrapper
        which implements isAdditiveOrCumulative() and returns false.
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap): composition WPT revealed issues
        with blending for margin and padding properties where we did not support blending between lengths and
        percentages, so we add the IsLengthPercentage to the option set when creating wrappers for these properties.
        We also do this for shape-margin and flex-basis.
        (WebCore::CSSPropertyAnimation::isPropertyAdditiveOrCumulative): expose this method such that it may be
        called from KeyframeEffect to determine whether the wrapper for a given property supports blending with
        additivity.
        * animation/CSSPropertyAnimation.h:
        * animation/DocumentTimeline.cpp:
        (WebCore::DocumentTimeline::animatedStyleForRenderer): composition WPT revealed that we weren't applying
        effects when computing the animated style in the correct order. We now respect the correct order by making
        sure we iterate over KeyframeEffectStack::sortedEffects().
        * animation/KeyframeEffect.cpp:
        (WebCore::KeyframeEffect::create): when creating a KeyframeEffect via the Web Animations API, ensure we pass
        the compositeOperation and iterationCompositeOperation properties provided as optional options.
        (WebCore::KeyframeEffect::updateBlendingKeyframes): when creating the supporting blending keyframes, a
        KeyframeList containing KeyframeValue objects, we now set the composite operations on those objects.
        (WebCore::KeyframeEffect::setAnimatedPropertiesInStyle): account for composite operations when blending for
        the animated style. The important part here is when we implement step 12 from the "effect value of a keyframe
        effect" spec procedure and we blend the start and end keyframe values over the underlying style with additivity
        if set. The rest of the function is slightly refactored to keep around KeyframeValue references rather than
        blending keyframe indexes when working out the keyframes for the current interval.
        (WebCore::KeyframeEffect::timingFunctionForBlendingKeyframe const): factor some code out of timingFunctionForKeyframeAtIndex()
        in order to deal with a KeyframeValue directly in setAnimatedPropertiesInStyle().
        (WebCore::KeyframeEffect::timingFunctionForKeyframeAtIndex const): call the new timingFunctionForBlendingKeyframe()
        which has much of the code from this function factored in.
        (WebCore::KeyframeEffect::backingAnimationForCompositedRenderer const): set the composite operation on the
        Animation generated for composited animations (which will be supported in the future).
        * animation/KeyframeEffect.h:
        * animation/KeyframeEffectStack.cpp:
        (WebCore::KeyframeEffectStack::addEffect): one of the WPT identified a bug where we didn't mark the style for an
        effect target as dirty when an effect was added to it, which is the case when persist() is called on a replaced
        animation.
        * platform/Length.cpp:
        (WebCore::makeCalculated):
        (WebCore::convertTo100PercentMinusLength):
        (WebCore::blendMixedTypes):
        (WebCore::blend):
        * platform/animation/Animation.cpp: add a compositeOperation member.
        (WebCore::Animation::Animation):
        (WebCore::Animation::operator=):
        (WebCore::Animation::animationsMatch const):
        * platform/animation/Animation.h: add a compositeOperation member.
        (WebCore::Animation::isCompositeOperationSet const):
        (WebCore::Animation::isEmpty const):
        (WebCore::Animation::clearCompositeOperation):
        (WebCore::Animation::clearAll):
        (WebCore::Animation::compositeOperation const):
        (WebCore::Animation::setCompositeOperation):
        (WebCore::Animation::initialCompositeOperation):
        * platform/animation/AnimationUtilities.h: support additivity blending for more types.
        (WebCore::blend):
        * platform/graphics/transforms/AffineTransform.cpp:
        (WebCore::AffineTransform::blend):
        * platform/graphics/transforms/RotateTransformOperation.cpp:
        (WebCore::RotateTransformOperation::blend):
        * platform/graphics/transforms/ScaleTransformOperation.cpp:
        (WebCore::blendScaleComponent): scale is the rare operation where additivity and accumulation yield different
        results.
        (WebCore::ScaleTransformOperation::blend):
        * platform/graphics/transforms/TransformationMatrix.cpp:
        (WebCore::blendFloat):
        (WebCore::TransformationMatrix::blend):
        * rendering/style/BasicShapes.cpp:
        (WebCore::BasicShapeInset::blend const): some WPT showed that we clip blended inset() values to be non-negative.
        * rendering/style/KeyframeList.h: add a compositeOperation member to KeyframeValue.
        (WebCore::KeyframeValue::compositeOperation const):
        (WebCore::KeyframeValue::setCompositeOperation):

2021-11-07  Don Olmstead  <don.olmstead@sony.com>

        Non-unified build fixes, early November 2021 edition take two
        https://bugs.webkit.org/show_bug.cgi?id=232801

        Unreviewed non-unified build fixes.

        * Modules/WebGPU/GPUColorWrite.h:
        * Modules/WebGPU/GPUSupportedLimits.h:
        * Modules/WebGPU/GPUValidationError.h:
        * css/parser/CSSParserIdioms.h:

2021-11-07  Antti Koivisto  <antti@apple.com>

        Pass MatchedProperties PropertyCascade setters
        https://bugs.webkit.org/show_bug.cgi?id=232799

        Reviewed by Alan Bujtas.

        Reduce the number of arguments and make it easier to expand.

        * style/PropertyCascade.cpp:
        (WebCore::Style::PropertyCascade::setPropertyInternal):
        (WebCore::Style::PropertyCascade::set):
        (WebCore::Style::PropertyCascade::setDeferred):
        (WebCore::Style::PropertyCascade::addMatch):
        * style/PropertyCascade.h:

2021-11-07  Myles C. Maxfield  <mmaxfield@apple.com>

        [WebGPU] Add internal WebGPU API interface
        https://bugs.webkit.org/show_bug.cgi?id=232792

        Reviewed by Dean Jackson.

        Tiny fixup.

        No new tests because there is no behavior change.

        * Modules/WebGPU/GPUCompilationInfo.cpp:
        (WebCore::GPUCompilationInfo::messages const):

2021-11-07  Antti Koivisto  <antti@apple.com>

        Use narrower types for style scope ordinal and cascade layer priority
        https://bugs.webkit.org/show_bug.cgi?id=232797

        Reviewed by Alan Bujtas.

        This shrinks critical ElementRuleCollector data structures like MatchedRule.

        64k layers ought to be enough for anybody (and 256 scopes).

        * style/ElementRuleCollector.cpp:
        (WebCore::Style::ElementRuleCollector::matchSlottedPseudoElementRules):
        (WebCore::Style::ElementRuleCollector::matchPartPseudoElementRulesForScope):

        Check the scope depth limits.

        * style/ElementRuleCollector.h:
        * style/RuleSet.h:
        (WebCore::Style::RuleSet::cascadeLayerPriorityForIdentifier const):
        (WebCore::Style::RuleSet::cascadeLayerPriorityFor const):

        Add a type alias and make it uint16_t.

        * style/RuleSetBuilder.cpp:
        (WebCore::Style::RuleSetBuilder::updateCascadeLayerPriorities):
        * style/StyleScopeOrdinal.h:
        (WebCore::Style::operator++):
        (WebCore::Style::operator--):

        Use int8_t. No realistic case requires more than a handful.

2021-11-07  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] bidi boundary does not necessarily mean soft wrapping opportunity
        https://bugs.webkit.org/show_bug.cgi?id=232793

        Reviewed by Antti Koivisto.

        Prior to bidi support, we only split non-whitespace content at soft break opportunities e.g. hyphen.

        * layout/formattingContexts/inline/InlineLineBuilder.cpp:
        (WebCore::Layout::endsWithSoftWrapOpportunity): Now we call findNextBreakablePosition on those rare bidi boundaries.
        Could add a "break reason" to InlineTextItem if it turns out to be a perf issue.

2021-11-06  Tyler Wilcock  <tyler_w@apple.com>

        AX: WebKit1 PluginViewBase objects with an associated widget()->platformWidget() should be considered attachments
        https://bugs.webkit.org/show_bug.cgi?id=232759

        Reviewed by Chris Fleizach.

        In https://bugs.webkit.org/show_bug.cgi?id=229556 (AX: Make PDFs
        loaded via <embed> accessible), we changed AccessibilityRenderObject::isAttachment
        to return false if the underlying object represented a PluginViewBase
        under the assumption that if a PluginViewBase existed, the object must
        be a WebKit2 plugin. That assumption is wrong, because in certain
        scenarios an object can be a WebKit1 PluginViewBase (e.g. attachments
        inserted by WebKit1 webviews).

        This patch changes isAttachment to only return false if the
        PluginViewBase doesn't also have an associated platformWidget, which
        should be present in WebKit1 only.

        This patch also fixes a bug in the Mac -[WebAccessibilityObjectWrapper
        subrole]. For objects with a role of group and no children, we
        returned a subrole of AXEmptyGroup. However, we didn't check for the
        presence of renderWidgetChildren that a group may have.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isAttachment const):
        Consider PluginViewBase objects with an associated platformWidget to
        be attachments.
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper subrole]):
        Don't return AXEmptyGroup subrole for objects with
        renderWidgetChildren.

2021-11-06  Myles C. Maxfield  <mmaxfield@apple.com>

        Fix GTK build after r285381.
        https://bugs.webkit.org/show_bug.cgi?id=232657

        Unreviewed.

        No new tests because there is no behavior change.

        * Modules/WebGPU/GPUShaderModuleDescriptor.h:

2021-11-06  Simon Fraser  <simon.fraser@apple.com>

        Improve ScrollAnimation logging
        https://bugs.webkit.org/show_bug.cgi?id=232789

        Reviewed by Wenson Hsieh.

        Add ScrollAnimation::debugDescription() and implement in concrete subclasses so each
        can dump more information about the animation. In particular, the destination of
        a momentum scroll is useful for debugging.

        Improve logging at some locations that start animations.

        * platform/ScrollAnimation.cpp:
        (WebCore::operator<<):
        * platform/ScrollAnimation.h:
        * platform/ScrollAnimationKinetic.cpp:
        (WebCore::ScrollAnimationKinetic::debugDescription const):
        * platform/ScrollAnimationKinetic.h:
        * platform/ScrollAnimationMomentum.cpp:
        (WebCore::ScrollAnimationMomentum::debugDescription const):
        * platform/ScrollAnimationMomentum.h:
        * platform/ScrollAnimationSmooth.cpp:
        (WebCore::ScrollAnimationSmooth::debugDescription const):
        * platform/ScrollAnimationSmooth.h:
        * platform/ScrollingEffectsController.cpp:
        (WebCore::ScrollingEffectsController::startAnimatedScrollToDestination):
        (WebCore::ScrollingEffectsController::startMomentumScrollWithInitialVelocity):
        * platform/ScrollingEffectsController.h:
        * platform/mac/ScrollAnimationRubberBand.h:
        * platform/mac/ScrollAnimationRubberBand.mm:
        (WebCore::ScrollAnimationRubberBand::debugDescription const):
        * platform/mac/ScrollingEffectsController.mm:
        (WebCore::ScrollingEffectsController::startRubberBandAnimation): The return value isn't used
        by the caller but is a convenient way to avoid an unused variable warning.

2021-11-06  Myles C. Maxfield  <mmaxfield@apple.com>

        Fixing style checks in WebGPU bindings code
        https://bugs.webkit.org/show_bug.cgi?id=232790

        Unreviewed.

        No new tests because there is no behavior change.

        * Modules/WebGPU/GPUCompilationMessage.cpp:
        * Modules/WebGPU/GPUComputePipeline.h:
        * Modules/WebGPU/GPUDevice.h:

2021-11-06  Joonghun Park  <jh718.park@samsung.com>

        font-synthesis inline/computed style should be in canonical order.
        https://bugs.webkit.org/show_bug.cgi?id=186344

        Reviewed by Myles C. Maxfield.

        Per the spec, https://drafts.csswg.org/css-fonts/#font-synthesis.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::fontSynthesisFromStyle):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeFontSynthesis):

2021-11-05  Myles C. Maxfield  <mmaxfield@apple.com>

        [WebGPU] Bindings Part 8: Bring back the remaining bindings code
        https://bugs.webkit.org/show_bug.cgi?id=232700

        Reviewed by Dean Jackson.

        This is the last chunk of the bindings code, brought back from r280467.
        This chunk includes all of the remaining pieces.
        The objects have no methods in them - those will come later.

        No new tests because there is no behavior change yet.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/WebGPU/GPUCanvasCompositingAlphaMode.h: Copied from Source/WebCore/Modules/WebGPU/GPUCommandBuffer.h.
        * Modules/WebGPU/GPUCanvasCompositingAlphaMode.idl: Copied from Source/WebCore/Modules/WebGPU/GPUCommandBuffer.h.
        * Modules/WebGPU/GPUCanvasConfiguration.h: Copied from Source/WebCore/Modules/WebGPU/GPUCommandBuffer.h.
        * Modules/WebGPU/GPUCanvasConfiguration.idl: Copied from Source/WebCore/Modules/WebGPU/GPUCommandBuffer.h.
        * Modules/WebGPU/GPUCanvasContext.cpp: Copied from Source/WebCore/Modules/WebGPU/GPUCommandBuffer.h.
        (WebCore::GPUCanvasContext::canvas):
        (WebCore::GPUCanvasContext::configure):
        (WebCore::GPUCanvasContext::unconfigure):
        (WebCore::GPUCanvasContext::getPreferredFormat):
        (WebCore::GPUCanvasContext::getCurrentTexture):
        * Modules/WebGPU/GPUCanvasContext.h: Copied from Source/WebCore/Modules/WebGPU/GPUCommandBuffer.h.
        (WebCore::GPUCanvasContext::create):
        * Modules/WebGPU/GPUCanvasContext.idl: Copied from Source/WebCore/Modules/WebGPU/GPUCommandBuffer.h.
        * Modules/WebGPU/GPUCommandBuffer.h:
        (WebCore::GPUCommandBuffer::GPUCommandBuffer): Deleted.
        * Modules/WebGPU/GPUDevice.cpp:
        (WebCore::GPUDevice::pushErrorScope):
        (WebCore::GPUDevice::popErrorScope):
        * Modules/WebGPU/GPUDevice.h:
        (WebCore::GPUDevice::lost):
        * Modules/WebGPU/GPUDeviceError.idl: Copied from Source/WebCore/Modules/WebGPU/GPUCommandBuffer.h.
        * Modules/WebGPU/GPUDeviceLost.idl: Copied from Source/WebCore/Modules/WebGPU/GPUCommandBuffer.h.
        * Modules/WebGPU/GPUDeviceLostInfo.cpp: Copied from Source/WebCore/Modules/WebGPU/GPUCommandBuffer.h.
        (WebCore::GPUDeviceLostInfo::GPUDeviceLostInfo):
        (WebCore::GPUDeviceLostInfo::reason const):
        (WebCore::GPUDeviceLostInfo::message const):
        * Modules/WebGPU/GPUDeviceLostInfo.h: Copied from Source/WebCore/Modules/WebGPU/GPUCommandBuffer.h.
        (WebCore::GPUDeviceLostInfo::create):
        * Modules/WebGPU/GPUDeviceLostInfo.idl: Copied from Source/WebCore/Modules/WebGPU/GPUCommandBuffer.h.
        * Modules/WebGPU/GPUDeviceLostReason.h: Copied from Source/WebCore/Modules/WebGPU/GPUCommandBuffer.h.
        * Modules/WebGPU/GPUDeviceLostReason.idl: Copied from Source/WebCore/Modules/WebGPU/GPUCommandBuffer.h.
        * Modules/WebGPU/GPUDeviceUncapturedError.idl: Copied from Source/WebCore/Modules/WebGPU/GPUCommandBuffer.h.
        * Modules/WebGPU/GPUError.h: Copied from Source/WebCore/Modules/WebGPU/GPUCommandBuffer.h.
        * Modules/WebGPU/GPUErrorFilter.h: Copied from Source/WebCore/Modules/WebGPU/GPUCommandBuffer.h.
        * Modules/WebGPU/GPUErrorFilter.idl: Copied from Source/WebCore/Modules/WebGPU/GPUCommandBuffer.h.
        * Modules/WebGPU/GPUOutOfMemoryError.h: Copied from Source/WebCore/Modules/WebGPU/GPUCommandBuffer.h.
        (WebCore::GPUOutOfMemoryError::create):
        * Modules/WebGPU/GPUOutOfMemoryError.idl: Copied from Source/WebCore/Modules/WebGPU/GPUCommandBuffer.h.
        * Modules/WebGPU/GPUUncapturedErrorEvent.cpp: Copied from Source/WebCore/Modules/WebGPU/GPUCommandBuffer.h.
        (WebCore::GPUUncapturedErrorEvent::GPUUncapturedErrorEvent):
        (WebCore::GPUUncapturedErrorEvent::error const):
        * Modules/WebGPU/GPUUncapturedErrorEvent.h: Copied from Source/WebCore/Modules/WebGPU/GPUCommandBuffer.h.
        (WebCore::GPUUncapturedErrorEvent::create):
        * Modules/WebGPU/GPUUncapturedErrorEvent.idl: Copied from Source/WebCore/Modules/WebGPU/GPUCommandBuffer.h.
        * Modules/WebGPU/GPUUncapturedErrorEventInit.h: Copied from Source/WebCore/Modules/WebGPU/GPUCommandBuffer.h.
        * Modules/WebGPU/GPUUncapturedErrorEventInit.idl: Copied from Source/WebCore/Modules/WebGPU/GPUCommandBuffer.h.
        * Modules/WebGPU/GPUValidationError.cpp: Copied from Source/WebCore/Modules/WebGPU/GPUCommandBuffer.h.
        (WebCore::GPUValidationError::GPUValidationError):
        (WebCore::GPUValidationError::message const):
        * Modules/WebGPU/GPUValidationError.h: Copied from Source/WebCore/Modules/WebGPU/GPUCommandBuffer.h.
        (WebCore::GPUValidationError::create):
        * Modules/WebGPU/GPUValidationError.idl: Copied from Source/WebCore/Modules/WebGPU/GPUCommandBuffer.h.
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:

2021-11-05  Myles C. Maxfield  <mmaxfield@apple.com>

        [WebGPU] Bindings Part 7: Bring back command encoder bindings code
        https://bugs.webkit.org/show_bug.cgi?id=232661

        Reviewed by Dean Jackson.

        This is the seventh chunk of bindings code, brought back from r280467.
        This chunk includes the command encoder objects.
        The objects have no methods inside them yet - those will come later.

        No new tests because there is no behavior change yet.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/WebGPU/GPUColorDict.h: Copied from Source/WebCore/Modules/WebGPU/GPURenderPipeline.cpp.
        * Modules/WebGPU/GPUColorDict.idl: Copied from Source/WebCore/Modules/WebGPU/GPURequestAdapterOptions.idl.
        * Modules/WebGPU/GPUCommandBuffer.cpp: Copied from Source/WebCore/Modules/WebGPU/GPUShaderModule.cpp.
        (WebCore::GPUCommandBuffer::label const):
        (WebCore::GPUCommandBuffer::setLabel):
        * Modules/WebGPU/GPUCommandBuffer.h: Copied from Source/WebCore/Modules/WebGPU/GPUExtent3DDict.h.
        (WebCore::GPUCommandBuffer::create):
        (WebCore::GPUCommandBuffer::GPUCommandBuffer):
        * Modules/WebGPU/GPUCommandBuffer.idl: Copied from Source/WebCore/Modules/WebGPU/GPURequestAdapterOptions.idl.
        * Modules/WebGPU/GPUCommandBufferDescriptor.h: Copied from Source/WebCore/Modules/WebGPU/GPUShaderModule.cpp.
        * Modules/WebGPU/GPUCommandBufferDescriptor.idl: Copied from Source/WebCore/Modules/WebGPU/GPUPowerPreference.idl.
        * Modules/WebGPU/GPUCommandEncoder.cpp: Added.
        (WebCore::GPUCommandEncoder::label const):
        (WebCore::GPUCommandEncoder::setLabel):
        (WebCore::GPUCommandEncoder::beginRenderPass):
        (WebCore::GPUCommandEncoder::beginComputePass):
        (WebCore::GPUCommandEncoder::copyBufferToBuffer):
        (WebCore::GPUCommandEncoder::copyBufferToTexture):
        (WebCore::GPUCommandEncoder::copyTextureToBuffer):
        (WebCore::GPUCommandEncoder::copyTextureToTexture):
        (WebCore::GPUCommandEncoder::fillBuffer):
        (WebCore::GPUCommandEncoder::pushDebugGroup):
        (WebCore::GPUCommandEncoder::popDebugGroup):
        (WebCore::GPUCommandEncoder::insertDebugMarker):
        (WebCore::GPUCommandEncoder::writeTimestamp):
        (WebCore::GPUCommandEncoder::resolveQuerySet):
        (WebCore::GPUCommandEncoder::finish):
        * Modules/WebGPU/GPUCommandEncoder.h: Added.
        (WebCore::GPUCommandEncoder::create):
        * Modules/WebGPU/GPUCommandEncoder.idl: Added.
        * Modules/WebGPU/GPUCommandEncoderDescriptor.h: Copied from Source/WebCore/Modules/WebGPU/GPUShaderModule.cpp.
        * Modules/WebGPU/GPUCommandEncoderDescriptor.idl: Copied from Source/WebCore/Modules/WebGPU/GPUPowerPreference.idl.
        * Modules/WebGPU/GPUCompilationMessage.h:
        (WebCore::GPUCompilationMessage::GPUCompilationMessage): Deleted.
        * Modules/WebGPU/GPUComputePassDescriptor.h: Copied from Source/WebCore/Modules/WebGPU/GPURenderPipeline.cpp.
        * Modules/WebGPU/GPUComputePassDescriptor.idl: Copied from Source/WebCore/Modules/WebGPU/GPURequestAdapterOptions.idl.
        * Modules/WebGPU/GPUComputePassEncoder.cpp: Added.
        (WebCore::GPUComputePassEncoder::label const):
        (WebCore::GPUComputePassEncoder::setLabel):
        (WebCore::GPUComputePassEncoder::setPipeline):
        (WebCore::GPUComputePassEncoder::dispatch):
        (WebCore::GPUComputePassEncoder::dispatchIndirect):
        (WebCore::GPUComputePassEncoder::beginPipelineStatisticsQuery):
        (WebCore::GPUComputePassEncoder::endPipelineStatisticsQuery):
        (WebCore::GPUComputePassEncoder::endPass):
        (WebCore::GPUComputePassEncoder::setBindGroup):
        (WebCore::GPUComputePassEncoder::pushDebugGroup):
        (WebCore::GPUComputePassEncoder::popDebugGroup):
        (WebCore::GPUComputePassEncoder::insertDebugMarker):
        * Modules/WebGPU/GPUComputePassEncoder.h: Copied from Source/WebCore/Modules/WebGPU/GPURenderPipeline.h.
        (WebCore::GPUComputePassEncoder::create):
        * Modules/WebGPU/GPUComputePassEncoder.idl: Copied from Source/WebCore/Modules/WebGPU/GPUDevice.idl.
        * Modules/WebGPU/GPUComputePassTimestampLocation.h: Copied from Source/WebCore/Modules/WebGPU/GPUShaderModule.cpp.
        * Modules/WebGPU/GPUComputePassTimestampLocation.idl: Copied from Source/WebCore/Modules/WebGPU/GPUPowerPreference.idl.
        * Modules/WebGPU/GPUComputePassTimestampWrite.h: Copied from Source/WebCore/Modules/WebGPU/GPUExtent3DDict.h.
        * Modules/WebGPU/GPUComputePassTimestampWrite.idl: Copied from Source/WebCore/Modules/WebGPU/GPURequestAdapterOptions.idl.
        * Modules/WebGPU/GPUDevice.cpp:
        (WebCore::GPUDevice::createShaderModule):
        (WebCore::GPUDevice::createComputePipeline):
        (WebCore::GPUDevice::createRenderPipeline):
        (WebCore::GPUDevice::createComputePipelineAsync):
        (WebCore::GPUDevice::createRenderPipelineAsync):
        (WebCore::GPUDevice::createCommandEncoder):
        (WebCore::GPUDevice::createRenderBundleEncoder):
        (WebCore::GPUDevice::createQuerySet):
        * Modules/WebGPU/GPUDevice.h:
        * Modules/WebGPU/GPUDevice.idl:
        * Modules/WebGPU/GPUExtent3DDict.h:
        * Modules/WebGPU/GPUImageCopyBuffer.h: Copied from Source/WebCore/Modules/WebGPU/GPUShaderModule.cpp.
        * Modules/WebGPU/GPUImageCopyBuffer.idl: Copied from Source/WebCore/Modules/WebGPU/GPUPowerPreference.idl.
        * Modules/WebGPU/GPUImageCopyExternalImage.h: Copied from Source/WebCore/Modules/WebGPU/GPUExtent3DDict.h.
        * Modules/WebGPU/GPUImageCopyExternalImage.idl: Copied from Source/WebCore/Modules/WebGPU/GPURequestAdapterOptions.idl.
        * Modules/WebGPU/GPUImageCopyTexture.h: Copied from Source/WebCore/Modules/WebGPU/GPUExtent3DDict.h.
        * Modules/WebGPU/GPUImageCopyTexture.idl: Copied from Source/WebCore/Modules/WebGPU/GPURequestAdapterOptions.idl.
        * Modules/WebGPU/GPUImageCopyTextureTagged.h: Copied from Source/WebCore/Modules/WebGPU/GPURenderPipeline.cpp.
        * Modules/WebGPU/GPUImageCopyTextureTagged.idl: Copied from Source/WebCore/Modules/WebGPU/GPURequestAdapterOptions.idl.
        * Modules/WebGPU/GPUImageDataLayout.h: Copied from Source/WebCore/Modules/WebGPU/GPUShaderModule.cpp.
        * Modules/WebGPU/GPUImageDataLayout.idl: Copied from Source/WebCore/Modules/WebGPU/GPURequestAdapterOptions.idl.
        * Modules/WebGPU/GPULoadOp.h: Copied from Source/WebCore/Modules/WebGPU/GPUShaderModule.cpp.
        * Modules/WebGPU/GPULoadOp.idl: Copied from Source/WebCore/Modules/WebGPU/GPUShaderModule.cpp.
        * Modules/WebGPU/GPUOrigin2DDict.h: Copied from Source/WebCore/Modules/WebGPU/GPUExtent3DDict.h.
        * Modules/WebGPU/GPUOrigin2DDict.idl: Copied from Source/WebCore/Modules/WebGPU/GPURequestAdapterOptions.idl.
        * Modules/WebGPU/GPUOrigin3DDict.h: Copied from Source/WebCore/Modules/WebGPU/GPUExtent3DDict.h.
        * Modules/WebGPU/GPUOrigin3DDict.idl: Copied from Source/WebCore/Modules/WebGPU/GPURequestAdapterOptions.idl.
        * Modules/WebGPU/GPUPipelineStatisticName.h: Copied from Source/WebCore/Modules/WebGPU/GPURenderPipeline.cpp.
        * Modules/WebGPU/GPUPipelineStatisticName.idl: Copied from Source/WebCore/Modules/WebGPU/GPURequestAdapterOptions.idl.
        * Modules/WebGPU/GPUPowerPreference.idl:
        * Modules/WebGPU/GPUProgrammablePassEncoder.idl: Copied from Source/WebCore/Modules/WebGPU/GPURequestAdapterOptions.idl.
        * Modules/WebGPU/GPUQuerySet.cpp: Copied from Source/WebCore/Modules/WebGPU/GPURenderPipeline.cpp.
        (WebCore::GPUQuerySet::label const):
        (WebCore::GPUQuerySet::setLabel):
        (WebCore::GPUQuerySet::destroy):
        * Modules/WebGPU/GPUQuerySet.h: Copied from Source/WebCore/Modules/WebGPU/GPUExtent3DDict.h.
        (WebCore::GPUQuerySet::create):
        * Modules/WebGPU/GPUQuerySet.idl: Copied from Source/WebCore/Modules/WebGPU/GPURequestAdapterOptions.idl.
        * Modules/WebGPU/GPUQuerySetDescriptor.h: Copied from Source/WebCore/Modules/WebGPU/GPUExtent3DDict.h.
        * Modules/WebGPU/GPUQuerySetDescriptor.idl: Copied from Source/WebCore/Modules/WebGPU/GPURequestAdapterOptions.idl.
        * Modules/WebGPU/GPUQueryType.h: Copied from Source/WebCore/Modules/WebGPU/GPUShaderModule.cpp.
        * Modules/WebGPU/GPUQueryType.idl: Copied from Source/WebCore/Modules/WebGPU/GPUPowerPreference.idl.
        * Modules/WebGPU/GPUQueue.cpp: Copied from Source/WebCore/Modules/WebGPU/GPUTexture.cpp.
        (WebCore::GPUQueue::label const):
        (WebCore::GPUQueue::setLabel):
        (WebCore::GPUQueue::submit):
        (WebCore::GPUQueue::onSubmittedWorkDone):
        (WebCore::GPUQueue::writeBuffer):
        (WebCore::GPUQueue::writeTexture):
        (WebCore::GPUQueue::copyExternalImageToTexture):
        * Modules/WebGPU/GPUQueue.h: Copied from Source/WebCore/Modules/WebGPU/GPURenderPipeline.h.
        (WebCore::GPUQueue::create):
        * Modules/WebGPU/GPUQueue.idl: Added.
        * Modules/WebGPU/GPURenderBundle.cpp: Copied from Source/WebCore/Modules/WebGPU/GPUShaderModule.cpp.
        (WebCore::GPURenderBundle::label const):
        (WebCore::GPURenderBundle::setLabel):
        * Modules/WebGPU/GPURenderBundle.h: Copied from Source/WebCore/Modules/WebGPU/GPUExtent3DDict.h.
        (WebCore::GPURenderBundle::create):
        * Modules/WebGPU/GPURenderBundle.idl: Copied from Source/WebCore/Modules/WebGPU/GPURequestAdapterOptions.idl.
        * Modules/WebGPU/GPURenderBundleDescriptor.h: Copied from Source/WebCore/Modules/WebGPU/GPUShaderModule.cpp.
        * Modules/WebGPU/GPURenderBundleDescriptor.idl: Copied from Source/WebCore/Modules/WebGPU/GPUPowerPreference.idl.
        * Modules/WebGPU/GPURenderBundleEncoder.cpp: Added.
        (WebCore::GPURenderBundleEncoder::label const):
        (WebCore::GPURenderBundleEncoder::setLabel):
        (WebCore::GPURenderBundleEncoder::setPipeline):
        (WebCore::GPURenderBundleEncoder::setIndexBuffer):
        (WebCore::GPURenderBundleEncoder::setVertexBuffer):
        (WebCore::GPURenderBundleEncoder::draw):
        (WebCore::GPURenderBundleEncoder::drawIndexed):
        (WebCore::GPURenderBundleEncoder::drawIndirect):
        (WebCore::GPURenderBundleEncoder::drawIndexedIndirect):
        (WebCore::GPURenderBundleEncoder::setBindGroup):
        (WebCore::GPURenderBundleEncoder::pushDebugGroup):
        (WebCore::GPURenderBundleEncoder::popDebugGroup):
        (WebCore::GPURenderBundleEncoder::insertDebugMarker):
        (WebCore::GPURenderBundleEncoder::finish):
        * Modules/WebGPU/GPURenderBundleEncoder.h: Added.
        (WebCore::GPURenderBundleEncoder::create):
        * Modules/WebGPU/GPURenderBundleEncoder.idl: Copied from Source/WebCore/Modules/WebGPU/GPURequestAdapterOptions.idl.
        * Modules/WebGPU/GPURenderBundleEncoderDescriptor.h: Copied from Source/WebCore/Modules/WebGPU/GPUShaderModule.cpp.
        * Modules/WebGPU/GPURenderBundleEncoderDescriptor.idl: Copied from Source/WebCore/Modules/WebGPU/GPURequestAdapterOptions.idl.
        * Modules/WebGPU/GPURenderEncoderBase.idl: Copied from Source/WebCore/Modules/WebGPU/GPUDevice.idl.
        * Modules/WebGPU/GPURenderPassColorAttachment.h: Copied from Source/WebCore/Modules/WebGPU/GPUExtent3DDict.h.
        * Modules/WebGPU/GPURenderPassColorAttachment.idl: Copied from Source/WebCore/Modules/WebGPU/GPURequestAdapterOptions.idl.
        * Modules/WebGPU/GPURenderPassDepthStencilAttachment.h: Copied from Source/WebCore/Modules/WebGPU/GPUExtent3DDict.h.
        * Modules/WebGPU/GPURenderPassDepthStencilAttachment.idl: Copied from Source/WebCore/Modules/WebGPU/GPUPowerPreference.idl.
        * Modules/WebGPU/GPURenderPassDescriptor.h: Copied from Source/WebCore/Modules/WebGPU/GPUExtent3DDict.h.
        * Modules/WebGPU/GPURenderPassDescriptor.idl: Copied from Source/WebCore/Modules/WebGPU/GPURequestAdapterOptions.idl.
        * Modules/WebGPU/GPURenderPassEncoder.cpp: Added.
        (WebCore::GPURenderPassEncoder::label const):
        (WebCore::GPURenderPassEncoder::setLabel):
        (WebCore::GPURenderPassEncoder::setPipeline):
        (WebCore::GPURenderPassEncoder::setIndexBuffer):
        (WebCore::GPURenderPassEncoder::setVertexBuffer):
        (WebCore::GPURenderPassEncoder::draw):
        (WebCore::GPURenderPassEncoder::drawIndexed):
        (WebCore::GPURenderPassEncoder::drawIndirect):
        (WebCore::GPURenderPassEncoder::drawIndexedIndirect):
        (WebCore::GPURenderPassEncoder::setBindGroup):
        (WebCore::GPURenderPassEncoder::pushDebugGroup):
        (WebCore::GPURenderPassEncoder::popDebugGroup):
        (WebCore::GPURenderPassEncoder::insertDebugMarker):
        (WebCore::GPURenderPassEncoder::setViewport):
        (WebCore::GPURenderPassEncoder::setScissorRect):
        (WebCore::GPURenderPassEncoder::setBlendConstant):
        (WebCore::GPURenderPassEncoder::setStencilReference):
        (WebCore::GPURenderPassEncoder::beginOcclusionQuery):
        (WebCore::GPURenderPassEncoder::endOcclusionQuery):
        (WebCore::GPURenderPassEncoder::beginPipelineStatisticsQuery):
        (WebCore::GPURenderPassEncoder::endPipelineStatisticsQuery):
        (WebCore::GPURenderPassEncoder::executeBundles):
        (WebCore::GPURenderPassEncoder::endPass):
        * Modules/WebGPU/GPURenderPassEncoder.h: Added.
        (WebCore::GPURenderPassEncoder::create):
        * Modules/WebGPU/GPURenderPassEncoder.idl: Copied from Source/WebCore/Modules/WebGPU/GPUDevice.idl.
        * Modules/WebGPU/GPURenderPassLayout.h: Copied from Source/WebCore/Modules/WebGPU/GPUExtent3DDict.h.
        * Modules/WebGPU/GPURenderPassLayout.idl: Copied from Source/WebCore/Modules/WebGPU/GPURequestAdapterOptions.idl.
        * Modules/WebGPU/GPURenderPassTimestampLocation.h: Copied from Source/WebCore/Modules/WebGPU/GPUShaderModule.cpp.
        * Modules/WebGPU/GPURenderPassTimestampLocation.idl: Copied from Source/WebCore/Modules/WebGPU/GPUPowerPreference.idl.
        * Modules/WebGPU/GPURenderPassTimestampWrite.h: Copied from Source/WebCore/Modules/WebGPU/GPUExtent3DDict.h.
        * Modules/WebGPU/GPURenderPassTimestampWrite.idl: Copied from Source/WebCore/Modules/WebGPU/GPURequestAdapterOptions.idl.
        * Modules/WebGPU/GPURenderPipeline.cpp:
        (WebCore::GPURenderPipeline::label const):
        (WebCore::GPURenderPipeline::setLabel):
        * Modules/WebGPU/GPURenderPipeline.h:
        (WebCore::GPURenderPipeline::label const): Deleted.
        (WebCore::GPURenderPipeline::setLabel): Deleted.
        * Modules/WebGPU/GPURequestAdapterOptions.idl:
        * Modules/WebGPU/GPUShaderModule.cpp:
        (WebCore::GPUShaderModule::label const):
        (WebCore::GPUShaderModule::setLabel):
        * Modules/WebGPU/GPUShaderModule.h:
        (WebCore::GPUShaderModule::label const): Deleted.
        (WebCore::GPUShaderModule::setLabel): Deleted.
        * Modules/WebGPU/GPUStoreOp.h: Copied from Source/WebCore/Modules/WebGPU/GPUShaderModule.cpp.
        * Modules/WebGPU/GPUStoreOp.idl: Copied from Source/WebCore/Modules/WebGPU/GPUShaderModule.cpp.
        * Modules/WebGPU/GPUTexture.cpp:
        (WebCore::GPUTexture::label const):
        (WebCore::GPUTexture::setLabel):
        (WebCore::GPUTexture::createView const):
        (WebCore::GPUTexture::destroy):
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:

2021-11-05  Myles C. Maxfield  <mmaxfield@apple.com>

        [WebGPU] Bindings Part 6: Bring back compilation bindings code
        https://bugs.webkit.org/show_bug.cgi?id=232657

        Reviewed by Dean Jackson.

        This is the sixth chunk of bindings code, brought back from r280467.
        This chunk includes the objects related to shader compilation.
        The objects have no methods inside them yet - those will come later.

        No new tests because there is no behavior change yet.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/WebGPU/GPUBlendComponent.h: Added.
        * Modules/WebGPU/GPUBlendComponent.idl: Added.
        * Modules/WebGPU/GPUBlendFactor.h: Added.
        * Modules/WebGPU/GPUBlendFactor.idl: Added.
        * Modules/WebGPU/GPUBlendOperation.h: Added.
        * Modules/WebGPU/GPUBlendOperation.idl: Added.
        * Modules/WebGPU/GPUBlendState.h: Added.
        * Modules/WebGPU/GPUBlendState.idl: Added.
        * Modules/WebGPU/GPUColorTargetState.h: Added.
        * Modules/WebGPU/GPUColorTargetState.idl: Added.
        * Modules/WebGPU/GPUColorWrite.h: Added.
        * Modules/WebGPU/GPUColorWrite.idl: Added.
        * Modules/WebGPU/GPUCompilationInfo.cpp: Added.
        (WebCore::GPUCompilationInfo::messages const):
        * Modules/WebGPU/GPUCompilationInfo.h: Added.
        (WebCore::GPUCompilationInfo::create):
        * Modules/WebGPU/GPUCompilationInfo.idl: Added.
        * Modules/WebGPU/GPUCompilationMessage.cpp: Added.
        (WebCore::GPUCompilationMessage::message const):
        (WebCore::GPUCompilationMessage::type const):
        (WebCore::GPUCompilationMessage::lineNum const):
        (WebCore::GPUCompilationMessage::linePos const):
        (WebCore::GPUCompilationMessage::offset const):
        (WebCore::GPUCompilationMessage::length const):
        * Modules/WebGPU/GPUCompilationMessage.h: Added.
        (WebCore::GPUCompilationMessage::create):
        (WebCore::GPUCompilationMessage::GPUCompilationMessage):
        * Modules/WebGPU/GPUCompilationMessage.idl: Added.
        * Modules/WebGPU/GPUCompilationMessageType.h: Added.
        * Modules/WebGPU/GPUCompilationMessageType.idl: Added.
        * Modules/WebGPU/GPUComputePipeline.cpp: Added.
        (WebCore::GPUComputePipeline::label const):
        (WebCore::GPUComputePipeline::setLabel):
        (WebCore::GPUComputePipeline::getBindGroupLayout):
        * Modules/WebGPU/GPUComputePipeline.h: Added.
        (WebCore::GPUComputePipeline::create):
        * Modules/WebGPU/GPUComputePipeline.idl: Added.
        * Modules/WebGPU/GPUComputePipelineDescriptor.h: Added.
        * Modules/WebGPU/GPUComputePipelineDescriptor.idl: Added.
        * Modules/WebGPU/GPUCullMode.h: Added.
        * Modules/WebGPU/GPUCullMode.idl: Added.
        * Modules/WebGPU/GPUDepthStencilState.h: Added.
        * Modules/WebGPU/GPUDepthStencilState.idl: Added.
        * Modules/WebGPU/GPUFragmentState.h: Added.
        * Modules/WebGPU/GPUFragmentState.idl: Added.
        * Modules/WebGPU/GPUFrontFace.h: Added.
        * Modules/WebGPU/GPUFrontFace.idl: Added.
        * Modules/WebGPU/GPUIndexFormat.h: Added.
        * Modules/WebGPU/GPUIndexFormat.idl: Added.
        * Modules/WebGPU/GPUMultisampleState.h: Added.
        * Modules/WebGPU/GPUMultisampleState.idl: Added.
        * Modules/WebGPU/GPUPipelineBase.idl: Added.
        * Modules/WebGPU/GPUPipelineDescriptorBase.h: Added.
        * Modules/WebGPU/GPUPipelineDescriptorBase.idl: Added.
        * Modules/WebGPU/GPUPrimitiveState.h: Added.
        * Modules/WebGPU/GPUPrimitiveState.idl: Added.
        * Modules/WebGPU/GPUPrimitiveTopology.h: Added.
        * Modules/WebGPU/GPUPrimitiveTopology.idl: Added.
        * Modules/WebGPU/GPUProgrammableStage.h: Added.
        * Modules/WebGPU/GPUProgrammableStage.idl: Added.
        * Modules/WebGPU/GPURenderPipeline.cpp: Added.
        (WebCore::GPURenderPipeline::getBindGroupLayout):
        * Modules/WebGPU/GPURenderPipeline.h: Added.
        (WebCore::GPURenderPipeline::create):
        (WebCore::GPURenderPipeline::label const):
        (WebCore::GPURenderPipeline::setLabel):
        * Modules/WebGPU/GPURenderPipeline.idl: Added.
        * Modules/WebGPU/GPURenderPipelineDescriptor.h: Added.
        * Modules/WebGPU/GPURenderPipelineDescriptor.idl: Added.
        * Modules/WebGPU/GPUShaderModule.cpp: Added.
        (WebCore::GPUShaderModule::compilationInfo):
        * Modules/WebGPU/GPUShaderModule.h: Added.
        (WebCore::GPUShaderModule::create):
        (WebCore::GPUShaderModule::label const):
        (WebCore::GPUShaderModule::setLabel):
        * Modules/WebGPU/GPUShaderModule.idl: Added.
        * Modules/WebGPU/GPUShaderModuleDescriptor.h: Added.
        * Modules/WebGPU/GPUShaderModuleDescriptor.idl: Added.
        * Modules/WebGPU/GPUStencilFaceState.h: Added.
        * Modules/WebGPU/GPUStencilFaceState.idl: Added.
        * Modules/WebGPU/GPUStencilOperation.h: Added.
        * Modules/WebGPU/GPUStencilOperation.idl: Added.
        * Modules/WebGPU/GPUVertexAttribute.h: Added.
        * Modules/WebGPU/GPUVertexAttribute.idl: Added.
        * Modules/WebGPU/GPUVertexBufferLayout.h: Added.
        * Modules/WebGPU/GPUVertexBufferLayout.idl: Added.
        * Modules/WebGPU/GPUVertexFormat.h: Added.
        * Modules/WebGPU/GPUVertexFormat.idl: Added.
        * Modules/WebGPU/GPUVertexState.h: Added.
        * Modules/WebGPU/GPUVertexState.idl: Added.
        * Modules/WebGPU/GPUVertexStepMode.h: Added.
        * Modules/WebGPU/GPUVertexStepMode.idl: Added.
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:

2021-11-04  Myles C. Maxfield  <mmaxfield@apple.com>

        [WebGPU] Bindings Part 5: Bring back Pipeline bindings code
        https://bugs.webkit.org/show_bug.cgi?id=232612

        Reviewed by Dean Jackson.

        This is the fifth chunk of bindings code, brought back from r280467.
        This chunk includes the PipelineLayout object. Interestingly, it
        doesn't actually have any methods. Its presence is just used when
        creating pipelines.

        No new tests because there is no behavior change yet.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/WebGPU/GPUAdapter.cpp:
        (WebCore::GPUAdapter::requestDevice):
        * Modules/WebGPU/GPUBindGroup.cpp: Copied from Source/WebCore/Modules/WebGPU/GPUAdapter.cpp.
        (WebCore::GPUBindGroup::label const):
        (WebCore::GPUBindGroup::setLabel):
        * Modules/WebGPU/GPUBindGroup.h: Copied from Source/WebCore/Modules/WebGPU/GPUAdapter.cpp.
        (WebCore::GPUBindGroup::create):
        * Modules/WebGPU/GPUBindGroup.idl: Copied from Source/WebCore/Modules/WebGPU/GPUAdapter.cpp.
        * Modules/WebGPU/GPUBindGroupDescriptor.h: Copied from Source/WebCore/Modules/WebGPU/GPUAdapter.cpp.
        * Modules/WebGPU/GPUBindGroupDescriptor.idl: Copied from Source/WebCore/Modules/WebGPU/GPUAdapter.cpp.
        * Modules/WebGPU/GPUBindGroupEntry.h: Copied from Source/WebCore/Modules/WebGPU/GPUAdapter.cpp.
        * Modules/WebGPU/GPUBindGroupEntry.idl: Copied from Source/WebCore/Modules/WebGPU/GPUAdapter.cpp.
        * Modules/WebGPU/GPUBindGroupLayout.cpp: Copied from Source/WebCore/Modules/WebGPU/GPUAdapter.cpp.
        (WebCore::GPUBindGroupLayout::label const):
        (WebCore::GPUBindGroupLayout::setLabel):
        * Modules/WebGPU/GPUBindGroupLayout.h: Copied from Source/WebCore/Modules/WebGPU/GPUAdapter.cpp.
        (WebCore::GPUBindGroupLayout::create):
        * Modules/WebGPU/GPUBindGroupLayout.idl: Copied from Source/WebCore/Modules/WebGPU/GPUAdapter.cpp.
        * Modules/WebGPU/GPUBindGroupLayoutDescriptor.h: Copied from Source/WebCore/Modules/WebGPU/GPUAdapter.cpp.
        * Modules/WebGPU/GPUBindGroupLayoutDescriptor.idl: Copied from Source/WebCore/Modules/WebGPU/GPUAdapter.cpp.
        * Modules/WebGPU/GPUBindGroupLayoutEntry.h: Copied from Source/WebCore/Modules/WebGPU/GPUAdapter.cpp.
        * Modules/WebGPU/GPUBindGroupLayoutEntry.idl: Copied from Source/WebCore/Modules/WebGPU/GPUAdapter.cpp.
        * Modules/WebGPU/GPUBufferBinding.h: Copied from Source/WebCore/Modules/WebGPU/GPUAdapter.cpp.
        * Modules/WebGPU/GPUBufferBinding.idl: Copied from Source/WebCore/Modules/WebGPU/GPUAdapter.cpp.
        * Modules/WebGPU/GPUBufferBindingLayout.h: Copied from Source/WebCore/Modules/WebGPU/GPUAdapter.cpp.
        * Modules/WebGPU/GPUBufferBindingLayout.idl: Copied from Source/WebCore/Modules/WebGPU/GPUAdapter.cpp.
        * Modules/WebGPU/GPUBufferBindingType.h: Copied from Source/WebCore/Modules/WebGPU/GPUAdapter.cpp.
        * Modules/WebGPU/GPUBufferBindingType.idl: Copied from Source/WebCore/Modules/WebGPU/GPUAdapter.cpp.
        * Modules/WebGPU/GPUDevice.cpp:
        (WebCore::GPUDevice::createBindGroupLayout):
        (WebCore::GPUDevice::createPipelineLayout):
        (WebCore::GPUDevice::createBindGroup):
        * Modules/WebGPU/GPUDevice.h:
        * Modules/WebGPU/GPUDevice.idl:
        * Modules/WebGPU/GPUExternalTextureBindingLayout.h: Copied from Source/WebCore/Modules/WebGPU/GPUAdapter.cpp.
        * Modules/WebGPU/GPUExternalTextureBindingLayout.idl: Copied from Source/WebCore/Modules/WebGPU/GPUAdapter.cpp.
        * Modules/WebGPU/GPUPipelineLayout.cpp: Copied from Source/WebCore/Modules/WebGPU/GPUAdapter.cpp.
        (WebCore::GPUPipelineLayout::label const):
        (WebCore::GPUPipelineLayout::setLabel):
        * Modules/WebGPU/GPUPipelineLayout.h: Copied from Source/WebCore/Modules/WebGPU/GPUAdapter.cpp.
        (WebCore::GPUPipelineLayout::create):
        * Modules/WebGPU/GPUPipelineLayout.idl: Copied from Source/WebCore/Modules/WebGPU/GPUDevice.idl.
        * Modules/WebGPU/GPUPipelineLayoutDescriptor.h: Copied from Source/WebCore/Modules/WebGPU/GPUAdapter.cpp.
        * Modules/WebGPU/GPUPipelineLayoutDescriptor.idl: Copied from Source/WebCore/Modules/WebGPU/GPUAdapter.cpp.
        * Modules/WebGPU/GPUSamplerBindingLayout.h: Copied from Source/WebCore/Modules/WebGPU/GPUAdapter.cpp.
        * Modules/WebGPU/GPUSamplerBindingLayout.idl: Copied from Source/WebCore/Modules/WebGPU/GPUAdapter.cpp.
        * Modules/WebGPU/GPUSamplerBindingType.h: Copied from Source/WebCore/Modules/WebGPU/GPUAdapter.cpp.
        * Modules/WebGPU/GPUSamplerBindingType.idl: Copied from Source/WebCore/Modules/WebGPU/GPUAdapter.cpp.
        * Modules/WebGPU/GPUShaderStage.h: Copied from Source/WebCore/Modules/WebGPU/GPUAdapter.cpp.
        * Modules/WebGPU/GPUShaderStage.idl: Copied from Source/WebCore/Modules/WebGPU/GPUAdapter.cpp.
        * Modules/WebGPU/GPUStorageTextureAccess.h: Copied from Source/WebCore/Modules/WebGPU/GPUAdapter.cpp.
        * Modules/WebGPU/GPUStorageTextureAccess.idl: Copied from Source/WebCore/Modules/WebGPU/GPUAdapter.cpp.
        * Modules/WebGPU/GPUStorageTextureBindingLayout.h: Copied from Source/WebCore/Modules/WebGPU/GPUAdapter.cpp.
        * Modules/WebGPU/GPUStorageTextureBindingLayout.idl: Copied from Source/WebCore/Modules/WebGPU/GPUAdapter.cpp.
        * Modules/WebGPU/GPUTextureBindingLayout.h: Copied from Source/WebCore/Modules/WebGPU/GPUAdapter.cpp.
        * Modules/WebGPU/GPUTextureBindingLayout.idl: Copied from Source/WebCore/Modules/WebGPU/GPUAdapter.cpp.
        * Modules/WebGPU/GPUTextureSampleType.h: Copied from Source/WebCore/Modules/WebGPU/GPUAdapter.cpp.
        * Modules/WebGPU/GPUTextureSampleType.idl: Copied from Source/WebCore/Modules/WebGPU/GPUAdapter.cpp.
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:

2021-11-04  Myles C. Maxfield  <mmaxfield@apple.com>

        [WebGPU] Bindings part 4: Bring back Sampler bindings code
        https://bugs.webkit.org/show_bug.cgi?id=232610

        Reviewed by Dean Jackson.

        This is the fourth chunk of bindings code, brought back from r280467.
        This chunk includes the Sampler object. Interestingly, it doesn't actually
        have any methods. Its presence is just used inside bind groups.

        No new tests because there is no behavior change yet.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/WebGPU/GPUAddressMode.h: Copied from Source/WebCore/Modules/WebGPU/GPUDevice.idl.
        * Modules/WebGPU/GPUAddressMode.idl: Copied from Source/WebCore/Modules/WebGPU/GPUDevice.idl.
        * Modules/WebGPU/GPUCompareFunction.h: Copied from Source/WebCore/Modules/WebGPU/GPUDevice.idl.
        * Modules/WebGPU/GPUCompareFunction.idl: Copied from Source/WebCore/Modules/WebGPU/GPUDevice.idl.
        * Modules/WebGPU/GPUDevice.cpp:
        (WebCore::GPUDevice::createSampler):
        * Modules/WebGPU/GPUDevice.h:
        * Modules/WebGPU/GPUDevice.idl:
        * Modules/WebGPU/GPUFilterMode.h: Copied from Source/WebCore/Modules/WebGPU/GPUDevice.idl.
        * Modules/WebGPU/GPUFilterMode.idl: Copied from Source/WebCore/Modules/WebGPU/GPUDevice.idl.
        * Modules/WebGPU/GPUSampler.cpp: Copied from Source/WebCore/Modules/WebGPU/GPUDevice.idl.
        (WebCore::GPUSampler::label const):
        (WebCore::GPUSampler::setLabel):
        * Modules/WebGPU/GPUSampler.h: Copied from Source/WebCore/Modules/WebGPU/GPUDevice.idl.
        (WebCore::GPUSampler::create):
        * Modules/WebGPU/GPUSampler.idl: Copied from Source/WebCore/Modules/WebGPU/GPUDevice.idl.
        * Modules/WebGPU/GPUSamplerDescriptor.h: Copied from Source/WebCore/Modules/WebGPU/GPUDevice.idl.
        * Modules/WebGPU/GPUSamplerDescriptor.idl: Copied from Source/WebCore/Modules/WebGPU/GPUDevice.idl.
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:

2021-11-04  Myles C. Maxfield  <mmaxfield@apple.com>

        [WebGPU] Bindings Part 3: Bring back Texture bindings code
        https://bugs.webkit.org/show_bug.cgi?id=232609

        Reviewed by Dean Jackson.

        This is the third chunk of bindings code, brought back from r280467.
        This chunk includes the Texture object. Its methods are just stubbed out
        and do nothing - those implementations will come later.

        No new tests because there is no behavior change yet.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/WebGPU/GPUDevice.cpp:
        (WebCore::GPUDevice::createTexture):
        (WebCore::GPUDevice::importExternalTexture):
        * Modules/WebGPU/GPUDevice.h:
        * Modules/WebGPU/GPUDevice.idl:
        * Modules/WebGPU/GPUExtent3DDict.h: Copied from Source/WebCore/Modules/WebGPU/GPUDevice.idl.
        * Modules/WebGPU/GPUExtent3DDict.idl: Copied from Source/WebCore/Modules/WebGPU/GPUDevice.idl.
        * Modules/WebGPU/GPUExternalTexture.cpp: Copied from Source/WebCore/Modules/WebGPU/GPUDevice.idl.
        (WebCore::GPUExternalTexture::label const):
        (WebCore::GPUExternalTexture::setLabel):
        * Modules/WebGPU/GPUExternalTexture.h: Copied from Source/WebCore/Modules/WebGPU/GPUDevice.idl.
        (WebCore::GPUExternalTexture::create):
        * Modules/WebGPU/GPUExternalTexture.idl: Copied from Source/WebCore/Modules/WebGPU/GPUDevice.idl.
        * Modules/WebGPU/GPUExternalTextureDescriptor.h: Copied from Source/WebCore/Modules/WebGPU/GPUDevice.idl.
        * Modules/WebGPU/GPUExternalTextureDescriptor.idl: Copied from Source/WebCore/Modules/WebGPU/GPUDevice.idl.
        * Modules/WebGPU/GPUTexture.cpp: Copied from Source/WebCore/Modules/WebGPU/GPUDevice.idl.
        (WebCore::GPUTexture::createView const):
        (WebCore::GPUTexture::destroy):
        (WebCore::GPUTexture::label const):
        (WebCore::GPUTexture::setLabel):
        * Modules/WebGPU/GPUTexture.h: Copied from Source/WebCore/Modules/WebGPU/GPUDevice.idl.
        (WebCore::GPUTexture::create):
        * Modules/WebGPU/GPUTexture.idl: Copied from Source/WebCore/Modules/WebGPU/GPUDevice.idl.
        * Modules/WebGPU/GPUTextureAspect.h: Copied from Source/WebCore/Modules/WebGPU/GPUDevice.idl.
        * Modules/WebGPU/GPUTextureAspect.idl: Copied from Source/WebCore/Modules/WebGPU/GPUDevice.idl.
        * Modules/WebGPU/GPUTextureDescriptor.h: Copied from Source/WebCore/Modules/WebGPU/GPUDevice.idl.
        * Modules/WebGPU/GPUTextureDescriptor.idl: Copied from Source/WebCore/Modules/WebGPU/GPUDevice.idl.
        * Modules/WebGPU/GPUTextureDimension.h: Copied from Source/WebCore/Modules/WebGPU/GPUDevice.idl.
        * Modules/WebGPU/GPUTextureDimension.idl: Copied from Source/WebCore/Modules/WebGPU/GPUDevice.idl.
        * Modules/WebGPU/GPUTextureFormat.h: Added.
        * Modules/WebGPU/GPUTextureFormat.idl: Added.
        * Modules/WebGPU/GPUTextureUsage.h: Copied from Source/WebCore/Modules/WebGPU/GPUDevice.idl.
        * Modules/WebGPU/GPUTextureUsage.idl: Copied from Source/WebCore/Modules/WebGPU/GPUDevice.idl.
        * Modules/WebGPU/GPUTextureView.cpp: Copied from Source/WebCore/Modules/WebGPU/GPUDevice.idl.
        (WebCore::GPUTextureView::label const):
        (WebCore::GPUTextureView::setLabel):
        * Modules/WebGPU/GPUTextureView.h: Copied from Source/WebCore/Modules/WebGPU/GPUDevice.idl.
        (WebCore::GPUTextureView::create):
        * Modules/WebGPU/GPUTextureView.idl: Copied from Source/WebCore/Modules/WebGPU/GPUDevice.idl.
        * Modules/WebGPU/GPUTextureViewDescriptor.h: Copied from Source/WebCore/Modules/WebGPU/GPUDevice.idl.
        * Modules/WebGPU/GPUTextureViewDescriptor.idl: Copied from Source/WebCore/Modules/WebGPU/GPUDevice.idl.
        * Modules/WebGPU/GPUTextureViewDimension.h: Copied from Source/WebCore/Modules/WebGPU/GPUDevice.idl.
        * Modules/WebGPU/GPUTextureViewDimension.idl: Copied from Source/WebCore/Modules/WebGPU/GPUDevice.idl.
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:

2021-11-04  Myles C. Maxfield  <mmaxfield@apple.com>

        [WebGPU] Bindings part 2: Bring back Buffer bindings code
        https://bugs.webkit.org/show_bug.cgi?id=232560

        Reviewed by Alex Christensen.

        This is the second chunk of bindings code, brought back from r280467.
        This chunk includes the Buffer object. Its methods are just stubbed out
        and do nothing - those implementations will come later.

        No new tests because there is no behavior change yet.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/WebGPU/GPUBuffer.cpp: Copied from Source/WebCore/Modules/WebGPU/GPUDevice.cpp.
        (WebCore::GPUBuffer::label const):
        (WebCore::GPUBuffer::setLabel):
        (WebCore::GPUBuffer::mapAsync):
        (WebCore::GPUBuffer::getMappedRange):
        (WebCore::GPUBuffer::unmap):
        (WebCore::GPUBuffer::destroy):
        * Modules/WebGPU/GPUBuffer.h: Copied from Source/WebCore/Modules/WebGPU/GPUDevice.cpp.
        (WebCore::GPUBuffer::create):
        * Modules/WebGPU/GPUBuffer.idl: Copied from Source/WebCore/Modules/WebGPU/GPUDevice.idl.
        * Modules/WebGPU/GPUBufferDescriptor.h: Copied from Source/WebCore/Modules/WebGPU/GPUDevice.cpp.
        * Modules/WebGPU/GPUBufferDescriptor.idl: Copied from Source/WebCore/Modules/WebGPU/GPUDevice.idl.
        * Modules/WebGPU/GPUBufferUsage.h: Copied from Source/WebCore/Modules/WebGPU/GPUDevice.cpp.
        * Modules/WebGPU/GPUBufferUsage.idl: Copied from Source/WebCore/Modules/WebGPU/GPUDevice.idl.
        * Modules/WebGPU/GPUDevice.cpp:
        (WebCore::GPUDevice::destroy):
        (WebCore::GPUDevice::createBuffer):
        * Modules/WebGPU/GPUDevice.h:
        * Modules/WebGPU/GPUDevice.idl:
        * Modules/WebGPU/GPUIntegralTypes.h: Copied from Source/WebCore/Modules/WebGPU/GPUDevice.cpp.
        * Modules/WebGPU/GPUMapMode.h: Copied from Source/WebCore/Modules/WebGPU/GPUDevice.cpp.
        * Modules/WebGPU/GPUMapMode.idl: Copied from Source/WebCore/Modules/WebGPU/GPUDevice.idl.
        * Modules/applepay/ApplePayCancelEvent.cpp:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:

2021-11-04  Myles C. Maxfield  <mmaxfield@apple.com>

        [WebGPU] Bindings part 1: Bring back Adapter/Device bindings code
        https://bugs.webkit.org/show_bug.cgi?id=232550

        Reviewed by Alex Christensen.

        This is the first chunk of bindings code, brought back from r280467.
        This chunk includes the Adapter and Device object. The Device object
        has no methods inside it yet - those will come later.

        No new tests because there is no behavior change yet.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/WebGPU/GPU.cpp: Added.
        (WebCore::GPU::requestAdapter):
        * Modules/WebGPU/GPU.h: Added.
        (WebCore::GPU::create):
        * Modules/WebGPU/GPU.idl: Added.
        * Modules/WebGPU/GPUAdapter.cpp: Added.
        (WebCore::GPUAdapter::name const):
        (WebCore::GPUAdapter::features const):
        (WebCore::GPUAdapter::limits const):
        (WebCore::GPUAdapter::isFallbackAdapter const):
        (WebCore::GPUAdapter::requestDevice):
        * Modules/WebGPU/GPUAdapter.h: Added.
        (WebCore::GPUAdapter::create):
        * Modules/WebGPU/GPUAdapter.idl: Added.
        * Modules/WebGPU/GPUDevice.cpp: Added.
        (WebCore::GPUDevice::label const):
        (WebCore::GPUDevice::setLabel):
        (WebCore::GPUDevice::features const):
        (WebCore::GPUDevice::limits const):
        * Modules/WebGPU/GPUDevice.h: Added.
        (WebCore::GPUDevice::create):
        (WebCore::GPUDevice::GPUDevice):
        * Modules/WebGPU/GPUDevice.idl: Added.
        * Modules/WebGPU/GPUDeviceDescriptor.h: Added.
        * Modules/WebGPU/GPUDeviceDescriptor.idl: Added.
        * Modules/WebGPU/GPUFeatureName.h: Added.
        * Modules/WebGPU/GPUFeatureName.idl: Added.
        * Modules/WebGPU/GPUObjectBase.idl: Added.
        * Modules/WebGPU/GPUObjectDescriptorBase.h: Added.
        * Modules/WebGPU/GPUObjectDescriptorBase.idl: Added.
        * Modules/WebGPU/GPUPowerPreference.h: Added.
        * Modules/WebGPU/GPUPowerPreference.idl: Added.
        * Modules/WebGPU/GPUPredefinedColorSpace.h: Added.
        * Modules/WebGPU/GPUPredefinedColorSpace.idl: Added.
        * Modules/WebGPU/GPURequestAdapterOptions.h: Added.
        * Modules/WebGPU/GPURequestAdapterOptions.idl: Added.
        * Modules/WebGPU/GPUSupportedFeatures.cpp: Added.
        (WebCore::GPUSupportedFeatures::initializeSetLike const):
        * Modules/WebGPU/GPUSupportedFeatures.h: Added.
        (WebCore::GPUSupportedFeatures::create):
        * Modules/WebGPU/GPUSupportedFeatures.idl: Added.
        * Modules/WebGPU/GPUSupportedLimits.cpp: Added.
        (WebCore::GPUSupportedLimits::maxTextureDimension1D const):
        (WebCore::GPUSupportedLimits::maxTextureDimension2D const):
        (WebCore::GPUSupportedLimits::maxTextureDimension3D const):
        (WebCore::GPUSupportedLimits::maxTextureArrayLayers const):
        (WebCore::GPUSupportedLimits::maxBindGroups const):
        (WebCore::GPUSupportedLimits::maxDynamicUniformBuffersPerPipelineLayout const):
        (WebCore::GPUSupportedLimits::maxDynamicStorageBuffersPerPipelineLayout const):
        (WebCore::GPUSupportedLimits::maxSampledTexturesPerShaderStage const):
        (WebCore::GPUSupportedLimits::maxSamplersPerShaderStage const):
        (WebCore::GPUSupportedLimits::maxStorageBuffersPerShaderStage const):
        (WebCore::GPUSupportedLimits::maxStorageTexturesPerShaderStage const):
        (WebCore::GPUSupportedLimits::maxUniformBuffersPerShaderStage const):
        (WebCore::GPUSupportedLimits::maxUniformBufferBindingSize const):
        (WebCore::GPUSupportedLimits::maxStorageBufferBindingSize const):
        (WebCore::GPUSupportedLimits::minUniformBufferOffsetAlignment const):
        (WebCore::GPUSupportedLimits::minStorageBufferOffsetAlignment const):
        (WebCore::GPUSupportedLimits::maxVertexBuffers const):
        (WebCore::GPUSupportedLimits::maxVertexAttributes const):
        (WebCore::GPUSupportedLimits::maxVertexBufferArrayStride const):
        (WebCore::GPUSupportedLimits::maxInterStageShaderComponents const):
        (WebCore::GPUSupportedLimits::maxComputeWorkgroupStorageSize const):
        (WebCore::GPUSupportedLimits::maxComputeInvocationsPerWorkgroup const):
        (WebCore::GPUSupportedLimits::maxComputeWorkgroupSizeX const):
        (WebCore::GPUSupportedLimits::maxComputeWorkgroupSizeY const):
        (WebCore::GPUSupportedLimits::maxComputeWorkgroupSizeZ const):
        (WebCore::GPUSupportedLimits::maxComputeWorkgroupsPerDimension const):
        * Modules/WebGPU/GPUSupportedLimits.h: Added.
        (WebCore::GPUSupportedLimits::create):
        * Modules/WebGPU/GPUSupportedLimits.idl: Added.
        * Modules/WebGPU/NavigatorGPU.idl: Added.
        * Modules/applepay/PaymentCoordinator.cpp:
        * Modules/mediasource/SourceBuffer.h:
        * Modules/webauthn/PublicKeyCredentialRequestOptions.h:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:
        * bindings/scripts/CodeGenerator.pm:
        (ProcessDocument):
        * dom/EventTargetFactory.in:
        * page/Navigator.idl:
        * page/NavigatorBase.cpp:
        (WebCore::NavigatorBase::NavigatorBase):
        * page/NavigatorBase.h:
        (WebCore::NavigatorBase::gpu):
        * page/WorkerNavigator.idl:

2021-11-06  Simon Fraser  <simon.fraser@apple.com>

        WheelEventDeltaFilter::shouldApplyFilteringForEvent can be a static function
        https://bugs.webkit.org/show_bug.cgi?id=232786

        Reviewed by Wenson Hsieh.

        This function just looks at event phase. It can be static.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::defaultWheelEventHandler):
        * page/WheelEventDeltaFilter.cpp:
        (WebCore::WheelEventDeltaFilter::shouldApplyFilteringForEvent):
        (WebCore::WheelEventDeltaFilter::shouldApplyFilteringForEvent const): Deleted.
        * page/WheelEventDeltaFilter.h:

2021-11-06  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Process all replacement, control and opaque inline items.
        https://bugs.webkit.org/show_bug.cgi?id=232772

        Reviewed by Antti Koivisto.

        Keep track of each inline item position in the paragraph content (including the opaque items with nullopt position) in a vector.
        (This offset vector is always in sync with the InlineItems vector (i.e. nth value refers to the nth inline item)
        Note that it needs to grow together with the InlineItems as we split inline text content on bidi boundaries.)

        1. Walk the InlineItems up to the bidi end position and assign the computed bidi level to each entry.
        2. Split the inline text item on the bidi boundary as needed.
        3. Post-process the opaque items (items that are not part of the paragraph content).

        * layout/formattingContexts/inline/InlineItemsBuilder.cpp:
        (WebCore::Layout::buildBidiParagraph):
        (WebCore::Layout::InlineItemsBuilder::breakAndComputeBidiLevels):
        * layout/formattingContexts/inline/InlineTextItem.cpp:
        (WebCore::Layout::InlineTextItem::split):
        (WebCore::Layout::InlineTextItem::splitAt): Deleted.
        * layout/formattingContexts/inline/InlineTextItem.h:

2021-11-06  Antti Koivisto  <antti@apple.com>

        Remove separate classes for CSS wide keywords (initial/inherit/unset/revert)
        https://bugs.webkit.org/show_bug.cgi?id=232750

        Reviewed by Sam Weinig.

        Remove CSSInitialValue, CSSInheritedValue, CSSRevertValue and CSSUnsetValue classes.
        They can all be handled by CSSPrimitiveValue.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDeprecatedCSSOMValueCustom.cpp:
        (WebCore::toJSNewlyCreated):

        Avoid changing the class type visible in CSSOM.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::renderTextDecorationStyleFlagsToCSSValue):
        (WebCore::renderTextDecorationSkipToCSSValue):
        * css/CSSInheritedValue.cpp: Removed.
        * css/CSSInheritedValue.h: Removed.
        * css/CSSInitialValue.cpp: Removed.
        * css/CSSInitialValue.h: Removed.
        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::isCSSWideKeyword const):
        * css/CSSPrimitiveValue.h:
        * css/CSSRevertValue.cpp: Removed.
        * css/CSSRevertValue.h: Removed.
        * css/CSSUnsetValue.cpp: Removed.
        * css/CSSUnsetValue.h: Removed.
        * css/CSSValue.cpp:
        (WebCore::CSSValue::cssValueType const):
        (WebCore::CSSValue::equals const):
        (WebCore::CSSValue::cssText const):
        (WebCore::CSSValue::destroy):
        (WebCore::CSSValue::treatAsInheritedValue const):
        (WebCore::CSSValue::treatAsInitialValue const):
        (WebCore::CSSValue::isInitialValue const):
        (WebCore::CSSValue::isImplicitInitialValue const):
        (WebCore::CSSValue::isInheritValue const):
        (WebCore::CSSValue::isUnsetValue const):
        (WebCore::CSSValue::isRevertValue const):
        (WebCore::CSSValue::isCSSWideKeyword const):
        * css/CSSValue.h:
        (WebCore::CSSValue::CSSValue):
        (WebCore::CSSValue::isInheritedValue const): Deleted.
        (WebCore::CSSValue::isInitialValue const): Deleted.
        (WebCore::CSSValue::isUnsetValue const): Deleted.
        (WebCore::CSSValue::isRevertValue const): Deleted.
        (WebCore::CSSValue::isGlobalKeyword const): Deleted.
        * css/CSSValuePool.cpp:
        (WebCore::StaticCSSValuePool::StaticCSSValuePool):
        * css/CSSValuePool.h:
        (WebCore::CSSValuePool::createImplicitInitialValue):
        (WebCore::CSSValuePool::createInheritedValue): Deleted.
        (WebCore::CSSValuePool::createExplicitInitialValue): Deleted.
        (WebCore::CSSValuePool::createUnsetValue): Deleted.
        (WebCore::CSSValuePool::createRevertValue): Deleted.
        * css/DeprecatedCSSOMPrimitiveValue.h:
        (WebCore::DeprecatedCSSOMPrimitiveValue::isCSSWideKeyword const):
        * css/SelectorChecker.cpp:
        * css/StyleProperties.cpp:
        (WebCore::StyleProperties::borderRadiusValue const):
        (WebCore::StyleProperties::pageBreakPropertyValue const):
        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::parseKeywordValue):
        * css/parser/CSSParserIdioms.h:
        (WebCore::isCSSWideKeyword):
        (WebCore::isValidCustomIdentifier):

        Separate the concept of valid custom identifier from that of CSS-wide keyword. The former also excludes the obsolete "default" keyword.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::maybeConsumeCSSWideKeyword):
        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::consumeCustomIdent):
        (WebCore::CSSPropertyParserHelpers::consumeCounterStyleNameInPrelude):
        (WebCore::CSSPropertyParserHelpers::concatenateFamilyName):
        (WebCore::CSSPropertyParserHelpers::isCSSWideKeyword): Deleted.
        * editing/EditingStyle.cpp:
        (WebCore::fontWeightIsBold):
        * editing/cocoa/HTMLConverter.mm:
        (HTMLConverterCaches::propertyValueForNode):
        (HTMLConverterCaches::floatPropertyValueForNode):
        (HTMLConverterCaches::colorPropertyValueForNode):
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::createSharedCellStyle const):
        * style/ElementRuleCollector.cpp:
        (WebCore::Style::ElementRuleCollector::addMatchedProperties):
        * style/PropertyCascade.cpp:
        (WebCore::Style::PropertyCascade::addMatch):
        (WebCore::Style::PropertyCascade::resolveDirectionAndWritingMode const):
        * style/StyleBuilder.cpp:
        (WebCore::Style::Builder::applyProperty):
        (WebCore::Style::Builder::resolveValue):
        * svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::parseAttribute):

2021-11-06  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Build the paragraph content when all the inline items are processed
        https://bugs.webkit.org/show_bug.cgi?id=232771

        Reviewed by Antti Koivisto.

        This patch simplifies the inline collection logic and helps with the upcoming "resolve the bidi ranges" patch.

        * layout/formattingContexts/inline/InlineItemsBuilder.cpp:
        (WebCore::Layout::InlineItemsBuilder::build):
        (WebCore::Layout::buildBidiParagraph): Let's build the paragraph content at once.
        (WebCore::Layout::InlineItemsBuilder::breakAndComputeBidiLevels):
        (WebCore::Layout::InlineItemsBuilder::handleTextContent):
        (WebCore::Layout::InlineItemsBuilder::handleInlineBoxStart):
        (WebCore::Layout::InlineItemsBuilder::handleInlineBoxEnd):
        (WebCore::Layout::InlineItemsBuilder::handleInlineLevelBox):
        (WebCore::Layout::InlineItemsBuilder::enterBidiContext): Deleted.
        (WebCore::Layout::InlineItemsBuilder::exitBidiContext): Deleted.
        (WebCore::Layout::InlineItemsBuilder::buildPreviousTextContent): Deleted.
        * layout/formattingContexts/inline/InlineItemsBuilder.h:
        (WebCore::Layout::InlineItemsBuilder::hasSeenBidiContent const):

2021-11-05  Simon Fraser  <simon.fraser@apple.com>

        Simplify code that makes use of WheelEventDeltaFilter
        https://bugs.webkit.org/show_bug.cgi?id=232536

        Reviewed by Wenson Hsieh.

        Push the decision about which kinds of wheel events to apply filtering to down into
        WheelEventDeltaFilter, which simplifies call sites. WheelEventDeltaFilterMac::updateFromEvent()
        now determines when to call into m_predominantAxisFilter based on the event phase. We
        also simplify the timing logic by computing WallTime from when the WheelEventDeltaFilterMac
        is constructed.

        EventHandler code is cleaned up to simplify the logic a little but the behavior should
        be the same.

        Test: fast/scrolling/mac/wheel-event-deltas-are-not-filtered.html

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleWheelEventInternal):
        (WebCore::EventHandler::handleWheelEventInAppropriateEnclosingBox):
        (WebCore::EventHandler::clearLatchedState):
        (WebCore::EventHandler::defaultWheelEventHandler): Move the filtering code out of the latching
        #ifdef.
        (WebCore::EventHandler::recordWheelEventForDeltaFilter): Deleted.
        * page/EventHandler.h:
        * page/WheelEventDeltaFilter.cpp:
        (WebCore::WheelEventDeltaFilter::shouldApplyFilteringForEvent const):
        (WebCore::WheelEventDeltaFilter::eventCopyWithFilteredDeltas const):
        (WebCore::BasicWheelEventDeltaFilter::updateFromEvent):
        (WebCore::BasicWheelEventDeltaFilter::updateWithDelta):
        (WebCore::BasicWheelEventDeltaFilter::reset):
        (WebCore::BasicWheelEventDeltaFilter::dominantAxis const):
        (WebCore::WheelEventDeltaFilter::isFilteringDeltas const): Deleted.
        (WebCore::BasicWheelEventDeltaFilter::updateFromDelta): Deleted.
        (WebCore::BasicWheelEventDeltaFilter::beginFilteringDeltas): Deleted.
        (WebCore::BasicWheelEventDeltaFilter::endFilteringDeltas): Deleted.
        (WebCore::BasicWheelEventDeltaFilter::dominantScrollGestureDirection const): Deleted.
        * page/WheelEventDeltaFilter.h:
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::determineWheelEventTarget):
        (WebCore::EventHandler::recordWheelEventForDeltaFilter): Deleted.
        * page/mac/WheelEventDeltaFilterMac.h:
        * page/mac/WheelEventDeltaFilterMac.mm:
        (WebCore::WheelEventDeltaFilterMac::WheelEventDeltaFilterMac):
        (WebCore::WheelEventDeltaFilterMac::updateFromEvent):
        (WebCore::WheelEventDeltaFilterMac::reset):
        (WebCore::WheelEventDeltaFilterMac::beginFilteringDeltas): Deleted.
        (WebCore::WheelEventDeltaFilterMac::updateFromDelta): Deleted.
        (WebCore::WheelEventDeltaFilterMac::endFilteringDeltas): Deleted.
        * platform/PlatformWheelEvent.h:
        (WebCore::PlatformWheelEvent::copyWithDeltaAndVelocity const): Take a FloatSize for the delta.
        (WebCore::PlatformWheelEvent::copyWithDeltasAndVelocity const): Deleted.

2021-11-05  Simon Fraser  <simon.fraser@apple.com>

        Make it possible to avoid retargeting a ScrollingMomentumCalculator
        https://bugs.webkit.org/show_bug.cgi?id=232778

        Reviewed by Wenson Hsieh.
        
        Calling -[_NSScrollingMomentumCalculator setDestinationOrigin:] to the same origin it's
        already targeting has side effects related to rubber-banding which a future patch needs to
        avoid. However, ScrollingMomentumCalculator is structured to expect that
        setRetargetedScrollOffset() is called, otherwise m_retargetedScrollOffset is left unset.

        Fix so that if the ScrollingMomentumCalculator's destination is already correct when no
        retargeting is necessary. We continue to store the std::optional m_retargetedScrollOffset,
        but always initialize m_initialDestinationOffset.

        Now ScrollAnimationMomentum::startAnimatedScrollWithInitialVelocity() can avoid
        calling setRetargetedScrollOffset() if the modifier function doesn't alter the
        target scroll offset.

        ScrollingMomentumCalculatorMac had some undesirable behavior in the
        !gEnablePlatformMomentumScrollingPrediction code path; we need to ensure that
        _NSScrollingMomentumCalculator agrees about the predicted destination.

        Tested by existing scroll snap tests.

        * platform/ScrollAnimationMomentum.cpp:
        (WebCore::ScrollAnimationMomentum::startAnimatedScrollWithInitialVelocity):
        (WebCore::ScrollAnimationMomentum::updateScrollExtents):
        * platform/ScrollingEffectsController.cpp:
        (WebCore::ScrollingEffectsController::startMomentumScrollWithInitialVelocity):
        * platform/ScrollingMomentumCalculator.cpp:
        (WebCore::ScrollingMomentumCalculator::setRetargetedScrollOffset):
        (WebCore::BasicScrollingMomentumCalculator::BasicScrollingMomentumCalculator):
        (WebCore::BasicScrollingMomentumCalculator::linearlyInterpolatedOffsetAtProgress):
        (WebCore::BasicScrollingMomentumCalculator::initializeInterpolationCoefficientsIfNecessary):
        (WebCore::BasicScrollingMomentumCalculator::initializeSnapProgressCurve):
        * platform/ScrollingMomentumCalculator.h:
        (WebCore::ScrollingMomentumCalculator::destinationScrollOffset const):
        (WebCore::ScrollingMomentumCalculator::destinationScrollOffsetDidChange):
        (WebCore::ScrollingMomentumCalculator::retargetedScrollOffset const): Deleted.
        (WebCore::ScrollingMomentumCalculator::retargetedScrollOffsetDidChange): Deleted.
        * platform/mac/ScrollingMomentumCalculatorMac.h:
        * platform/mac/ScrollingMomentumCalculatorMac.mm:
        (WebCore::ScrollingMomentumCalculatorMac::ScrollingMomentumCalculatorMac):
        (WebCore::ScrollingMomentumCalculatorMac::scrollOffsetAfterElapsedTime):
        (WebCore::ScrollingMomentumCalculatorMac::predictedDestinationOffset):
        (WebCore::ScrollingMomentumCalculatorMac::destinationScrollOffsetDidChange):
        (WebCore::ScrollingMomentumCalculatorMac::setMomentumCalculatorDestinationOffset):
        (WebCore::ScrollingMomentumCalculatorMac::requiresMomentumScrolling):
        (WebCore::ScrollingMomentumCalculatorMac::ensurePlatformMomentumCalculator):
        (WebCore::ScrollingMomentumCalculatorMac::retargetedScrollOffsetDidChange): Deleted.

2021-11-05  Megan Gardner  <megan_gardner@apple.com>

        Lookup for text would not show after clicking the page and using key commands to launch.
        https://bugs.webkit.org/show_bug.cgi?id=232766
        rdar://74562619

        Reviewed by Wenson Hsieh.

        When triggering the lookup command with command-control-D or the triple finger tap on mac, if you have previously
        clicked the page, the lookup would time out and the popover would never show. This was because after clicking on the page, 
        an invisible caret selection would exist, which would change the path taken for highlighting and temporarily selecting text to 
        be sent to data detectors. 
        The solution was to set ignoreSelectionChanges on the temporary selection, and also to stop propagating temporary selection changes to accessibility, as 
        that should not be necessary and that is the code that cause a sync message (RootViewToScreen) to be sent to the UI process while it was sync awaiting our
        reply to the sync message (DidPerformImmediateActionHitTest) sent earlier for the original request for data detectors.

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::updateAndRevealSelection):
        * page/TextIndicator.cpp:
        (WebCore::TextIndicator::createWithRange):

2021-11-05  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Mail compose becomes unresponsive after pasting in text and attempting to type
        https://bugs.webkit.org/show_bug.cgi?id=232764
        rdar://84669661

        Reviewed by Geoff Garen.

        After some recent changes in UIKit, keyboard code now calls into `-requestDocumentContext:completionHandler:`
        after inserting text with the software keyboard, and specifically requests sentence-granularity text context
        near the selection. This triggered an existing bug in WebKit, where we hang underneath
        `WebPage::requestDocumentEditingContext` when trying to move backwards by sentence granularity, when computing
        `contextBeforeStart`; this hang occurs because it's possible for the logic in `nextSentenceBoundaryInDirection`
        (inside WebCore) to return a visible position that is in the opposite direction, relative to the given starting
        position and direction. In turn, this means we end up revisiting visible positions while moving to the next
        sentence boundary.

        To prevent this, we make two minor adjustments in editing code. First, in `nextSentenceBoundaryInDirection()`,
        we use `result` instead of the given `vp` when trying to find the next sentence boundary, in the case where the
        given visible position is not already within a sentence. This was presumably the original intent of this code,
        which is to "iterate to the start of the next sentence (when moving downstream) or the end of the previous
        sentence (when moving upstream)". However, since `vp` is currently used here instead, we end up moving in the
        wrong direction and return the start of the current sentence when moving downstream, or the end of the current
        sentence when moving upstream.

        Fixing this issue is actually already sufficient in order to address the hangs encountered in the radar;
        however, the test case still hits subsequent debug assertions in `moveByGranularityRespectingWordBoundary`, due
        to `atBoundaryOfGranularity` never returning `true`, even for visible positions that are at the start or end of
        sentences. In lieu of debug assertions, this causes `-requestDocumentContext` to effectively ignore the given
        granularity and traverse too far in either direction, due to `atBoundaryOfGranularity` always being `false` (we
        avoid infinitely looping and bail because after fixing the first bug above, `nextPosition` eventually becomes
        null).

        To address this assertion, we make a second tweak to `atBoundaryOfGranularity` that allows us to return `true`
        if the given position is already at a sentence boundary (instead of marching to the previous or next sentence
        and then moving in the opposite direction). The latter was added in r253561 to fix some corner cases where
        `startOfSentence()` or `endOfSentence()` would end up moving us past the next (or previous) sentence, but this
        seems to break some existing scenarios where the given position is already at the start or end of the sentence.

        Test: DocumentEditingContext.RequestSentencesAfterTextInsertion

        * editing/VisibleUnits.cpp:
        (WebCore::atBoundaryOfGranularity):
        (WebCore::nextSentenceBoundaryInDirection):

        See above for more details.

2021-11-05  Patrick Griffis  <pgriffis@igalia.com>

        [GLIB] Be more careful about calling LowPowerModeNotifier's callback
        https://bugs.webkit.org/show_bug.cgi?id=232767

        Reviewed by Michael Catanzaro.

        This callback is expected to only be called when the value changes
        otherwise it will hit asserts elsewhere such as in NetworkCache.

        * platform/LowPowerModeNotifier.h:
        * platform/glib/LowPowerModeNotifierGLib.cpp:
        (WebCore::LowPowerModeNotifier::LowPowerModeNotifier):
        (WebCore::LowPowerModeNotifier::isLowPowerModeEnabled const):

2021-11-05  Nikolaos Mouchtaris  <nmouchtaris@apple.com>

        Make scroll bar mode an enum class
        https://bugs.webkit.org/show_bug.cgi?id=232651

        Reviewed by Simon Fraser.

        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::scrollingMode const):
        * html/HTMLFrameOwnerElement.h:
        (WebCore::HTMLFrameOwnerElement::scrollingMode const):
        * page/Frame.cpp:
        (WebCore::Frame::createView):
        * page/Frame.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::resetScrollbars):
        (WebCore::FrameView::init):
        (WebCore::FrameView::updateCanHaveScrollbars):
        (WebCore::FrameView::applyOverflowToViewport):
        (WebCore::FrameView::calculateScrollbarModesForLayout):
        (WebCore::FrameView::adjustScrollbarsForLayout):
        (WebCore::FrameView::performFixedWidthAutoSize):
        (WebCore::FrameView::performSizeToContentAutoSize):
        (WebCore::FrameView::isScrollable):
        (WebCore::FrameView::enableAutoSizeMode):
        * page/SpatialNavigation.cpp:
        (WebCore::canScrollInDirection):
        * page/scrolling/ScrollingCoordinatorTypes.h:
        * page/scrolling/ScrollingTreeScrollingNode.h:
        * platform/ScrollTypes.cpp:
        (WebCore::operator<<):
        * platform/ScrollTypes.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::setCanHaveScrollbars):
        (WebCore::ScrollView::updateScrollbars):
        (WebCore::ScrollView::platformScrollbarModes const):
        * platform/ScrollView.h:
        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::horizontalScrollbarMode const):
        (WebCore::ScrollableArea::verticalScrollbarMode const):
        (WebCore::ScrollableArea::canHaveScrollbars const):
        * platform/ios/wak/WAKScrollView.mm:
        (-[WAKScrollView horizontalScrollingMode]):
        (-[WAKScrollView verticalScrollingMode]):
        * rendering/RenderFrameBase.cpp:
        (WebCore::RenderFrameBase::performLayoutWithFlattening):
        * rendering/RenderIFrame.cpp:
        (WebCore::RenderIFrame::flattenFrame const):
        * rendering/RenderLayer.cpp:
        (WebCore::frameElementAndViewPermitScroll):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::computePageTiledBackingCoverage):

2021-11-05  Alex Christensen  <achristensen@webkit.org>

        Restructure WKContentRuleList Action storage during compilation and interpretation
        https://bugs.webkit.org/show_bug.cgi?id=232692

        Reviewed by Brady Eidson.

        This uses a std::variant of each type's metadata instead of an enum type and a String.
        This is necessary cleanup before implementing actions with more complex metadata.

        I also separated out DeserializedAction, which is deserialized from the compiled WKContentRuleList
        from Action, which is parsed from the JSON and doesn't have an identifier.

        This is covered by numerous tests, which also needed syntax updating for the new structure types.
        There is no change in behavior and the serialization and deserialization is all the same.

        * contentextensions/ContentExtension.cpp:
        (WebCore::ContentExtensions::ContentExtension::findFirstIgnorePreviousRules const):
        (WebCore::ContentExtensions::ContentExtension::compileGlobalDisplayNoneStyleSheet):
        * contentextensions/ContentExtensionActions.h:
        (WebCore::ContentExtensions::ActionWithoutMetadata::isolatedCopy):
        (WebCore::ContentExtensions::ActionWithoutMetadata::operator== const):
        (WebCore::ContentExtensions::ActionWithoutMetadata::serialize const):
        (WebCore::ContentExtensions::ActionWithoutMetadata::deserialize):
        (WebCore::ContentExtensions::ActionWithoutMetadata::serializedLength):
        (WebCore::ContentExtensions::ActionWithStringMetadata::isolatedCopy):
        (WebCore::ContentExtensions::ActionWithStringMetadata::operator== const):
        (WebCore::ContentExtensions::ActionWithStringMetadata::serialize const):
        (WebCore::ContentExtensions::ActionWithStringMetadata::deserialize):
        (WebCore::ContentExtensions::ActionWithStringMetadata::serializedLength):
        (WebCore::ContentExtensions::hasStringArgument): Deleted.
        * contentextensions/ContentExtensionCompiler.cpp:
        (WebCore::ContentExtensions::resolvePendingDisplayNoneActions):
        (WebCore::ContentExtensions::serializeActions):
        (WebCore::ContentExtensions::serializeString): Deleted.
        * contentextensions/ContentExtensionParser.cpp:
        (WebCore::ContentExtensions::loadAction):
        * contentextensions/ContentExtensionRule.cpp:
        (WebCore::ContentExtensions::deserializeString):
        (WebCore::ContentExtensions::serializeString):
        (WebCore::ContentExtensions::stringSerializedLength):
        (WebCore::ContentExtensions::VariantDeserializerHelper::serializedLength):
        (WebCore::ContentExtensions::Action::deserialize):
        (WebCore::ContentExtensions::Action::serializedLength):
        (WebCore::ContentExtensions::Action::isolatedCopy const):
        (WebCore::ContentExtensions::Action::deserializeType): Deleted.
        * contentextensions/ContentExtensionRule.h:
        (WebCore::ContentExtensions::Action::Action):
        (WebCore::ContentExtensions::Action::operator== const):
        (WebCore::ContentExtensions::Action::operator!= const):
        (WebCore::ContentExtensions::Action::data const):
        (WebCore::ContentExtensions::DeserializedAction::DeserializedAction):
        (WebCore::ContentExtensions::DeserializedAction::actionID const):
        (WebCore::ContentExtensions::Action::type const): Deleted.
        (WebCore::ContentExtensions::Action::actionID const): Deleted.
        (WebCore::ContentExtensions::Action::stringArgument const): Deleted.
        * contentextensions/ContentExtensionsBackend.cpp:
        (WebCore::ContentExtensions::ContentExtensionsBackend::actionsForResourceLoad const):
        (WebCore::ContentExtensions::ContentExtensionsBackend::processContentRuleListsForLoad):
        (WebCore::ContentExtensions::ContentExtensionsBackend::processContentRuleListsForPingLoad):

2021-11-05  Nikolaos Mouchtaris  <nmouchtaris@apple.com>

        Make scroll elasticity an enum class
        https://bugs.webkit.org/show_bug.cgi?id=232646

        Reviewed by Simon Fraser.

        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        * page/Page.cpp:
        (WebCore::Page::Page):
        * page/Page.h:
        * page/scrolling/ScrollingCoordinatorTypes.h:
        * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.mm:
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::allowsHorizontalStretching const):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::allowsVerticalStretching const):
        * platform/ScrollTypes.cpp:
        (WebCore::operator<<):
        * platform/ScrollTypes.h:
        * platform/ScrollableArea.h:
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::allowsVerticalStretching const):
        (WebCore::ScrollAnimatorMac::allowsHorizontalStretching const):
        * rendering/RenderLayerScrollableArea.cpp:
        (WebCore::RenderLayerScrollableArea::setHasHorizontalScrollbar):
        (WebCore::RenderLayerScrollableArea::setHasVerticalScrollbar):

2021-11-05  Devin Rousso  <drousso@apple.com>

        [css-values-4] viewport units should be floats
        https://bugs.webkit.org/show_bug.cgi?id=231644
        <rdar://problem/84172685>

        Reviewed by Tim Horton.

        Views can be fractional pixels wide. We should not round, especially since viewport units
        are used as percentage values (e.g. `50dvh` is "50% of the height of the current viewport").

        Tests: CSSViewportUnits.EmptyUnobscuredSizeOverrides
               CSSViewportUnits.SameUnobscuredSizeOverrides
               CSSViewportUnits.DifferentUnobscuredSizeOverrides

        * page/FrameView.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::setSizeForCSSSmallViewportUnits):
        (WebCore::FrameView::overrideWidthForCSSSmallViewportUnits):
        (WebCore::FrameView::sizeForCSSSmallViewportUnits const):
        (WebCore::FrameView::setSizeForCSSLargeViewportUnits):
        (WebCore::FrameView::overrideWidthForCSSLargeViewportUnits):
        (WebCore::FrameView::sizeForCSSLargeViewportUnits const):
        (WebCore::FrameView::calculateSizeForCSSViewportUnitsOverride const):
        (WebCore::FrameView::sizeForCSSDynamicViewportUnits const):
        (WebCore::FrameView::sizeForCSSDefaultViewportUnits const):

        * rendering/RenderView.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::sizeForCSSSmallViewportUnits const):
        (WebCore::RenderView::sizeForCSSLargeViewportUnits const):
        (WebCore::RenderView::sizeForCSSDynamicViewportUnits const):
        (WebCore::RenderView::sizeForCSSDefaultViewportUnits const):

2021-11-05  Antoine Quint  <graouts@webkit.org>

        [Media Controls] Volume button orientation is always stuck to right-to-left
        https://bugs.webkit.org/show_bug.cgi?id=232761

        Reviewed by Dean Jackson.

        * Modules/modern-media-controls/controls/media-controls.js:
        (MediaControls.prototype.set usesLTRUserInterfaceLayoutDirection):

2021-11-05  Kiet Ho  <tho22@apple.com>

        Implement parsing and animation support for offset-path
        https://bugs.webkit.org/show_bug.cgi?id=231801

        Reviewed by Simon Fraser.

        Implements parsing and animation support for offset-path based on clip-path.
        offset-path additionally supports ray() shape, which will be implemented in a future patch.

        Tests: imported/w3c/web-platform-tests/css/motion/inheritance.html
               imported/w3c/web-platform-tests/css/motion/offset-path-serialization.html
               imported/w3c/web-platform-tests/css/motion/animation/offset-path-interpolation-001.html
               imported/w3c/web-platform-tests/css/motion/animation/offset-path-interpolation-002.html
               imported/w3c/web-platform-tests/css/motion/animation/offset-path-interpolation-003.html
               imported/w3c/web-platform-tests/css/motion/animation/offset-path-interpolation-004.html
               imported/w3c/web-platform-tests/css/motion/animation/offset-path-interpolation-005.html
               imported/w3c/web-platform-tests/css/motion/parsing/offset-path-computed.html
               imported/w3c/web-platform-tests/css/motion/parsing/offset-path-parsing-invalid.html
               imported/w3c/web-platform-tests/css/motion/parsing/offset-path-parsing-valid.html

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * animation/CSSPropertyAnimation.cpp:
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):
        Added animation support for offset-path.
        * css/BasicShapeFunctions.cpp:
        (WebCore::copySVGPathByteStream):
        (WebCore::valueForBasicShape): Added enum to specify conversions done on the
        resulting SVG path. So far, the only available conversion is converting relative
        draw commands in a path to absolute. This is required when getting the computed value of
        offset-path.
        * css/BasicShapeFunctions.h:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForPathOperation): Moved logic to get value of PathOperation
        into a separate method.
        (WebCore::ComputedStyleExtractor::valueForPropertyInStyle): Added support for
        offset-path.
        * css/CSSProperties.json: Added entry for offset-path.
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumePathOperation): Renamed from consumeClipPath.
        (WebCore::CSSPropertyParser::parseSingleValue): Added support for parsing offset-path.
        * rendering/style/RenderStyle.h: Added support for offset-path.
        (WebCore::RenderStyle::offsetPath const):
        (WebCore::RenderStyle::setOffsetPath):
        (WebCore::RenderStyle::initialOffsetPath):
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator== const):
        * rendering/style/StyleRareNonInheritedData.h: Added storage space for offset-path.
        * style/StyleBuilderConverter.h:
        (WebCore::Style::BuilderConverter::convertPathOperation): Renamed from convertClipPath
        * svg/SVGPathAbsoluteConverter.cpp: Added helper class to convert relative draw
        commands in an SVG path to absolute.
        (WebCore::SVGPathAbsoluteConverter::SVGPathAbsoluteConverter):
        (WebCore::SVGPathAbsoluteConverter::incrementPathSegmentCount):
        (WebCore::SVGPathAbsoluteConverter::continueConsuming):
        (WebCore::SVGPathAbsoluteConverter::moveTo):
        (WebCore::SVGPathAbsoluteConverter::lineTo):
        (WebCore::SVGPathAbsoluteConverter::curveToCubic):
        (WebCore::SVGPathAbsoluteConverter::closePath):
        (WebCore::SVGPathAbsoluteConverter::lineToHorizontal):
        (WebCore::SVGPathAbsoluteConverter::lineToVertical):
        (WebCore::SVGPathAbsoluteConverter::curveToCubicSmooth):
        (WebCore::SVGPathAbsoluteConverter::curveToQuadratic):
        (WebCore::SVGPathAbsoluteConverter::curveToQuadraticSmooth):
        (WebCore::SVGPathAbsoluteConverter::arcTo):
        * svg/SVGPathAbsoluteConverter.h: Added.
        * svg/SVGPathUtilities.cpp:
        (WebCore::convertSVGPathByteStreamToAbsoluteCoordinates):
        * svg/SVGPathUtilities.h:

2021-11-05  Antoine Quint  <graouts@webkit.org>

        [Media Controls] range buttons don't prevent scrolling while dragging
        https://bugs.webkit.org/show_bug.cgi?id=232757
        <rdar://problem/83637971>

        Reviewed by Dean Jackson.

        Since we are using Pointer Events to implement the dragging interaction for RangeButton,
        we need to set `touch-action: none` to prevent any default user-agent behavior.

        * Modules/modern-media-controls/controls/range-button.css:
        (button.range):

2021-11-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        AX: rename actionVerb() as localizedActionVerb()
        https://bugs.webkit.org/show_bug.cgi?id=232711
        <rdar://problem/85015496>

        Reviewed by Andres Gonzalez.

        Since it's returning the localized name. In ATSPI there are two methods in the action interface GetName and
        GetLocalizedName, so this patch also adds actionVerb() returning the unlocalized action name.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::localizedActionVerb const):
        (WebCore::AccessibilityObject::actionVerb const):
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::localizedActionVerb const):
        * accessibility/AccessibilityObjectInterface.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::tabChildren):
        (WebCore::AccessibilityRenderObject::actionVerb const): Deleted.
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/atk/WebKitAccessibleHyperlink.cpp:
        (webkitAccessibleHyperlinkActionGetName):
        * accessibility/atk/WebKitAccessibleInterfaceAction.cpp:
        (webkitAccessibleActionGetName):
        * accessibility/isolatedtree/AXIsolatedObject.cpp:
        (WebCore::AXIsolatedObject::initializeAttributeData):
        * accessibility/isolatedtree/AXIsolatedObject.h:
        * accessibility/isolatedtree/AXIsolatedTree.h:

2021-11-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][a11y] Embedded objects are not correctly handled by text interface with ATSPI
        https://bugs.webkit.org/show_bug.cgi?id=232622

        Reviewed by Andres Gonzalez.

        Make sure text iterator is emitting object replacement characters when converting offsets to/from visible positions.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::visiblePositionForIndex const):
        (WebCore::AccessibilityRenderObject::indexForVisiblePosition const):
        * accessibility/atspi/AccessibilityObjectTextAtspi.cpp:
        (WebCore::AccessibilityObjectAtspi::boundsForSelection const):
        * editing/Editing.cpp:
        (WebCore::indexForVisiblePosition):
        (WebCore::visiblePositionForIndex):
        * editing/Editing.h:

2021-11-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. [GTK][WPE] Fix compile warning after r284675

        * accessibility/AXObjectCache.cpp:

2021-11-04  Cameron McCormack  <heycam@apple.com>

        Factor out didDraw / didDrawEntireCanvas calls in canvas drawing functions
        https://bugs.webkit.org/show_bug.cgi?id=232527
        <rdar://problem/84834950>

        Reviewed by Antti Koivisto.

        No behavior change except for in drawImage, where the
        paintCurrentFrameInContext code path now will check whether to call
        didDrawEntireCanvas.

        * html/canvas/CanvasRenderingContext2DBase.cpp:
        (WebCore::CanvasRenderingContext2DBase::fillInternal):
        (WebCore::CanvasRenderingContext2DBase::strokeInternal):
        (WebCore::CanvasRenderingContext2DBase::fillRect):
        (WebCore::CanvasRenderingContext2DBase::strokeRect):
        (WebCore::CanvasRenderingContext2DBase::drawImage):
        (WebCore::CanvasRenderingContext2DBase::didDraw):
        (WebCore::CanvasRenderingContext2DBase::drawTextUnchecked):
        * html/canvas/CanvasRenderingContext2DBase.h:

2021-11-04  Cameron McCormack  <heycam@apple.com>

        Avoid sending video data to Web process for canvas.drawImage(video)
        https://bugs.webkit.org/show_bug.cgi?id=230766
        <rdar://problem/83576009>

        Reviewed by Simon Fraser.

        Using nativeImageForCurrentTime() to get the image to paint on to the
        canvas results in a ShareableBitmap being created to send to the
        Web process, the identifier for which we then send back to the GPU
        process for the drawImage() call. But if we use
        paintCurrentFrameInContext(), this uses the PaintFrameForMedia
        message, which just sends the MediaPlayer ID and avoids the bitmap
        creation.

        * html/canvas/CanvasRenderingContext2DBase.cpp:
        (WebCore::CanvasRenderingContext2DBase::drawImage):
        * platform/graphics/ImageBuffer.h:
        (WebCore::ImageBuffer::isRemote const):

2021-11-04  Cameron McCormack  <heycam@apple.com>

        Nested run loops under MediaPlayerPrivateAVFoundationObjC::waitForVideoOutputMediaDataWillChange can cause hang when timeout fires
        https://bugs.webkit.org/show_bug.cgi?id=232695
        <rdar://problem/85004449>

        Reviewed by Jer Noble.

        It's possible for MediaPlayerPrivateAVFoundationObjC::waitForVideoOutputMediaDataWillChange
        to be called re-entrantly, if the RunLoop::run call ends up processing
        an event that also wants to synchronously update the media image. This
        can cause a hang:

        1. Enter the outer waitForVideoOutputMediaDataWillChange call.
        2. Set up the outer timeout timer.
        3. Call RunLoop::run.
            3.1. Enter the inner waitForVideoOutputMediaDataWillChange call.
            3.2. Set up the inner timeout timer.
            3.3. Call RunLoop::run.
                3.3.1. Wait for new RunLoop events, and none arrive.
                3.3.2. The outer timeout timer fires, calling RunLoop::stop.
            3.4. Return from waitForVideoOutputMediaDataWillChange, cancelling
                 the inner timeout timer.
            3.5. Wait for more events on the run loop, forever.

        To avoid this, we can set up a single timeout timer, and track the
        nesting level of our RunLoop::run calls. The innermost RunLoop::run call
        will finish either by the timer firing (which calls RunLoop::stop) or by
        the video data updating (which also calls RunLoop::stop, under
        outputMediaDataWillChange). Either way, once the innermost
        RunLoop::run call is finished, we know we can stop processing all of
        the ancestor RunLoop:run calls.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::waitForVideoOutputMediaDataWillChange):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::outputMediaDataWillChange):

2021-11-04  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Use objectReplacementCharacter to mark atomic inline box position.
        https://bugs.webkit.org/show_bug.cgi?id=232718

        Reviewed by Antti Koivisto.

        objectReplacementCharacter is input to the bidi code as atomic inline level box marker.

        * layout/formattingContexts/inline/InlineItemsBuilder.cpp:
        (WebCore::Layout::InlineItemsBuilder::handleInlineLevelBox):
        (WebCore::Layout::InlineItemsBuilder::buildPreviousTextContent): Take the atomic inline level boxes into account when building previous content for bidi processing.

2021-11-04  Kate Cheney  <katherine_cheney@apple.com>

        Form action with a redirect should report correct blocked URI
        https://bugs.webkit.org/show_bug.cgi?id=232660
        <rdar://problem/84969024>

        Reviewed by Brent Fulgham.

        We currently report the blocked URI as the target of a redirect, per
        the spec it should actually be the initiating url.

        Test: http/tests/security/contentSecurityPolicy/form-action-redirect-with-correct-blocked-uri.html

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::willSendRequest):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::checkIfFormActionAllowedByCSP const):
        * loader/FrameLoader.h:
        * page/csp/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::allowResourceFromSource const):
        (WebCore::ContentSecurityPolicy::allowFormAction const):
        * page/csp/ContentSecurityPolicy.h:

2021-11-04  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Migrate from CTFontCopyVariationAxes() to CTFontCopyVariationAxesInternal() if possible
        https://bugs.webkit.org/show_bug.cgi?id=232690

        Reviewed by Simon Fraser and Cameron McCormack.

        CTFontCopyVariationAxesInternal() is faster than CTFontCopyVariationAxes(), but the strings
        it provides are not localized. Luckily, we don't actually use the strings in the common case,
        so we can migrate to CTFontCopyVariationAxesInternal() safely.

        No new tests because there is no behavior change.

        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::variationAxes):
        (WebCore::defaultVariationValues):
        (WebCore::preparePlatformFont):
        * platform/graphics/cocoa/FontCacheCoreText.h:
        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        (WebCore::FontPlatformData::variationAxes const):

2021-11-04  Nikolaos Mouchtaris  <nmouchtaris@apple.com>

        Make scrollbar orientation an enum class
        https://bugs.webkit.org/show_bug.cgi?id=232648

        Reviewed by Simon Fraser.

        * accessibility/AccessibilityScrollbar.cpp:
        (WebCore::AccessibilityScrollbar::orientation const):
        * css/SelectorChecker.h:
        * css/SelectorCheckerTestFunctions.h:
        (WebCore::scrollbarMatchesHorizontalPseudoClass):
        (WebCore::scrollbarMatchesVerticalPseudoClass):
        * page/FrameView.cpp:
        (WebCore::FrameView::horizontalScrollbarHiddenByStyle const):
        (WebCore::FrameView::verticalScrollbarHiddenByStyle const):
        (WebCore::FrameView::performSizeToContentAutoSize):
        (WebCore::FrameView::adjustScrollStepForFixedContent):
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::scrollableAreaScrollbarLayerDidChange):
        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::scroll):
        (WebCore::ScrollAnimator::deltaFromStep):
        (WebCore::ScrollAnimator::handleWheelEvent):
        * platform/ScrollTypes.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::setHasHorizontalScrollbar):
        (WebCore::ScrollView::setHasVerticalScrollbar):
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::scroll):
        (WebCore::ScrollableArea::scrollToOffsetWithoutAnimation):
        (WebCore::ScrollableArea::didAddScrollbar):
        (WebCore::ScrollableArea::willRemoveScrollbar):
        (WebCore::ScrollableArea::doPostThumbMoveSnapping):
        * platform/ScrollableArea.h:
        (WebCore::offsetForOrientation):
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::pressedPartScrollDirection):
        (WebCore::Scrollbar::moveThumb):
        (WebCore::Scrollbar::mouseMoved):
        (WebCore::Scrollbar::mouseDown):
        * platform/ScrollbarThemeComposite.cpp:
        (WebCore::ScrollbarThemeComposite::splitTrack):
        (WebCore::ScrollbarThemeComposite::trackPosition):
        (WebCore::ScrollbarThemeComposite::trackLength):
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::registerScrollbar):
        (WebCore::ScrollbarThemeMac::hasButtons):
        (WebCore::ScrollbarThemeMac::hasThumb):
        (WebCore::buttonRepaintRect):
        (WebCore::ScrollbarThemeMac::backButtonRect):
        (WebCore::ScrollbarThemeMac::forwardButtonRect):
        (WebCore::ScrollbarThemeMac::trackRect):
        * platform/mac/ScrollbarsControllerMac.mm:
        (-[WebScrollerImpDelegate layer]):
        (-[WebScrollerImpDelegate setUpAlphaAnimation:scrollerPainter:part:animateAlphaTo:duration:]):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::hasAutoScrollbar const):
        (WebCore::RenderBox::hasAlwaysPresentScrollbar const):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateOverflowControlsLayers):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateOverflowControlsLayers):
        (WebCore::RenderLayerCompositor::destroyRootLayer):
        * rendering/RenderLayerScrollableArea.cpp:
        (WebCore::RenderLayerScrollableArea::clear):
        (WebCore::RenderLayerScrollableArea::destroyScrollbar):
        (WebCore::RenderLayerScrollableArea::setHasHorizontalScrollbar):
        (WebCore::RenderLayerScrollableArea::setHasVerticalScrollbar):
        (WebCore::RenderLayerScrollableArea::updateScrollbarPresenceAndState):
        (WebCore::RenderLayerScrollableArea::updateScrollbarsAfterLayout):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::layout):
        (WebCore::RenderListBox::scrollToRevealElementAtListIndex):
        (WebCore::RenderListBox::setScrollTop):
        (WebCore::RenderListBox::createScrollbar):
        (WebCore::RenderListBox::destroyScrollbar):
        * rendering/RenderScrollbar.cpp:
        (WebCore::RenderScrollbar::RenderScrollbar):
        (WebCore::RenderScrollbar::updateScrollbarParts):
        (WebCore::RenderScrollbar::buttonRect const):
        (WebCore::RenderScrollbar::trackRect const):
        (WebCore::RenderScrollbar::trackPieceRectWithMargins const):
        (WebCore::RenderScrollbar::minimumThumbLength const):
        * rendering/RenderScrollbarPart.cpp:
        (WebCore::RenderScrollbarPart::layout):
        * rendering/RenderScrollbarTheme.cpp:
        (WebCore::RenderScrollbarTheme::buttonSizesAlongTrackAxis):
        (WebCore::RenderScrollbarTheme::hasButtons):
        (WebCore::RenderScrollbarTheme::constrainTrackRectToTrackPieces):

2021-11-04  Alex Christensen  <achristensen@webkit.org>

        [ iOS ] TestWebKitAPI.WebKitLegacy.AudioSessionCategoryIOS is crashing
        https://bugs.webkit.org/show_bug.cgi?id=232676

        Reviewed by Eric Carlson.

        In WebKitLegacy on iOS, WebCoreAVFPullDelegate.initWithPlayer is being called on the web thread,
        but outputMediaDataWillChange is being called on the main run loop then accessing _player in a non-thread-safe manner.
        To fix this, I call callOnMainThread to access _player on the web thread.  To fix the assertion that happens after this
        fix, I made MediaPlayerPrivateAVFoundationObjC::outputMediaDataWillChange able to be called on the non-main run loop.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::outputMediaDataWillChange):
        (-[WebCoreAVFPullDelegate outputMediaDataWillChange:]):

2021-11-04  Antti Koivisto  <antti@apple.com>

        Remove isMatchingHostPseudoClass state from ElementRuleCollector
        https://bugs.webkit.org/show_bug.cgi?id=232715

        Reviewed by Simon Fraser.

        Style scope ordinal that we already pass to SelectorChecker contains the same information.

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::match const):

        Check the ordinal.

        (WebCore::SelectorChecker::matchHostPseudoClass const):

        Just check for shadow root as it is hard to reason why the assert is correct.

        * css/SelectorChecker.h:
        * style/ElementRuleCollector.cpp:
        (WebCore::Style::ElementRuleCollector::matchHostPseudoClassRules):
        (WebCore::Style::ElementRuleCollector::ruleMatches):
        * style/ElementRuleCollector.h:

2021-11-04  Antti Koivisto  <antti@apple.com>

        :host::part(foo) selector does not select elements inside shadow roots
        https://bugs.webkit.org/show_bug.cgi?id=232261
        <rdar://problem/84894922>

        Reviewed by Simon Fraser.

        We need to also look for ::part rules from the element's own scope.

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::match const):

        Rename mayMatchHostPseudoClass -> mustMatchHostPseudoClass for clarity.

        (WebCore::localContextForParent):
        (WebCore::SelectorChecker::matchRecursively const):

        Split ShadowDescendant and ShadowPartDescendant handling as they are sufficiently different.
        Set nextContext.mustMatchHostPseudoClass bit for ::part rules coming from the Element's scope as
        it is the only way they can match.

        (WebCore::SelectorChecker::checkOne const):

        No name mapping for rules from the element's own scope.

        * style/ElementRuleCollector.cpp:
        (WebCore::Style::ElementRuleCollector::matchPartPseudoElementRules):
        (WebCore::Style::ElementRuleCollector::matchPartPseudoElementRulesForScope):

        Also check ::part rules from the element scope.

        * style/ElementRuleCollector.h:

2021-11-04  Andres Gonzalez  <andresg_22@apple.com>

        Fix for AXObjectCache::postPlatformNotification in isolated tree mode, debug builds.
        https://bugs.webkit.org/show_bug.cgi?id=232682
        <rdar://problem/84991736>

        Reviewed by Chris Fleizach.

        In debug builds AXObjectCache::postPlatformNotification was calling the
        object's wrapper accessibilityIsIgnored, which in turn calls
        updateBackingStore. Since postPlatformNotification runs on the main
        thread, and calls into the platform's wrapper should happen on the
        secondary thread, this is hitting the asserts in
        AXIsolatedTree::applyPendingChanges to prevent this situation.
        Instead of calling through the wrapper, this patch adds a utility
        function to exercise the same core methods invoked by
        accessibilityIsIgnored on the AX object directly, and hence avoiding the
        problem above.

        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::postPlatformNotification):

2021-11-03  Antoine Quint  <graouts@webkit.org>

        REGRESSION (r268932): CPU usage higher than expected with sibling elements running WebAnimations
        https://bugs.webkit.org/show_bug.cgi?id=228833
        <rdar://problem/81573075>

        Reviewed by Antti Koivisto.

        Test: webanimations/no-style-updates-for-animated-sibling-elements-accelerated.html

        Elements that have any type of animations, and not just CSS Transitions and CSS Animations,
        should not be eligible for style sharing.

        * style/StyleSharingResolver.cpp:
        (WebCore::Style::SharingResolver::canShareStyleWithElement const):

2021-11-04  Martin Robinson  <mrobinson@webkit.org>

        implement transform: perspective(none)
        https://bugs.webkit.org/show_bug.cgi?id=231361
        <rdar://problem/84124161>

        Reviewed by Simon Fraser.

        Add support for perspective(none) and update test results
        to show newly passing tests.

        No new tests. This is covered by the existing WPT tests:
            - imported/w3c/web-platform-tests/css/css-transforms/parsing/transform-valid.html
            - imported/w3c/web-platform-tests/css/css-transforms/animation/transform-interpolation-001.html

        * css/TransformFunctions.cpp:
        (WebCore::transformsForValue): Accept a "none" keyword as an input and be a bit more stringent
        about what kind of numbers are accepted. These should be rejected earlier in consumePerspective.
        This can now hold an Undefined length which indicates perspective: none.
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumePerspective): Accept "none" and clean up the code a little, using ValueRange
        instead of a manual check for numerical values. Also make the code structure a little more
        consistent.
        * platform/graphics/transforms/PerspectiveTransformOperation.h: Update assertion, because
        Undefined means perpsective: none now.
        * platform/graphics/transforms/PerspectiveTransformOperation.cpp:
        (WebCore::PerspectiveTransformOperation::blend): Handle the case of perspective: none for
        either values.

2021-11-03  Megan Gardner  <megan_gardner@apple.com>

        TextIndicators are flipped when spanning more than one line.
        https://bugs.webkit.org/show_bug.cgi?id=232688

        We regressed this in https://bugs.webkit.org/show_bug.cgi?id=225557 when text indicators were factored
        out to be used for App Highlights. We need to restore the geomitry flipping behavior to have the text
        indicatores show up correctly.

        Reviewed by Tim Horton.

        * page/cocoa/WebTextIndicatorLayer.mm:
        (-[WebTextIndicatorLayer initWithFrame:textIndicator:margin:offset:]):
        (-[WebTextIndicatorLayer isFlipped]): Deleted.
        * page/mac/TextIndicatorWindow.mm:
        (-[WebTextIndicatorView isFlipped]):
        (WebCore::TextIndicatorWindow::setTextIndicator):

2021-11-03  Alex Christensen  <achristensen@webkit.org>

        Remove QuickTimePluginReplacement and YouTubePluginReplacement
        https://bugs.webkit.org/show_bug.cgi?id=232400

        Reviewed by Chris Dumez.

        They were disabled at runtime in https://trac.webkit.org/changeset/275911/webkit

        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/plugins/PluginReplacement.h: Removed.
        * Modules/plugins/QuickTimePluginReplacement.css: Removed.
        * Modules/plugins/QuickTimePluginReplacement.h: Removed.
        * Modules/plugins/QuickTimePluginReplacement.idl: Removed.
        * Modules/plugins/QuickTimePluginReplacement.js: Removed.
        * Modules/plugins/QuickTimePluginReplacement.mm: Removed.
        * Modules/plugins/YouTubePluginReplacement.cpp: Removed.
        * Modules/plugins/YouTubePluginReplacement.h: Removed.
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSPluginElementFunctions.cpp:
        (WebCore::pluginScriptObject):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::createElementRenderer):
        (WebCore::HTMLPlugInElement::didAddUserAgentShadowRoot):
        (WebCore::HTMLPlugInElement::requestObject):
        (): Deleted.
        (WebCore::registrar): Deleted.
        (WebCore::pluginReplacementForType): Deleted.
        (WebCore::HTMLPlugInElement::scriptObjectForPluginReplacement): Deleted.
        * html/HTMLPlugInElement.h:
        (WebCore::HTMLPlugInElement::pluginReplacementScriptObject): Deleted.
        * html/shadow/ShadowPseudoIds.cpp:
        (WebCore::ShadowPseudoIds::webkitPluginReplacement): Deleted.
        * html/shadow/ShadowPseudoIds.h:
        * html/shadow/YouTubeEmbedShadowElement.cpp: Removed.
        * html/shadow/YouTubeEmbedShadowElement.h: Removed.
        * page/Settings.yaml:

2021-11-03  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Clean up StructureStubInfo initialization
        https://bugs.webkit.org/show_bug.cgi?id=232652

        Reviewed by Saam Barati.

        * inspector/InspectorOverlay.cpp:
        (WebCore::InspectorOverlay::fontForLayoutLabel):

2021-11-03  Tyler Wilcock  <tyler_w@apple.com>

        AX: WKAccessibilityWebPageObjectMac.mm should expose accessibilityChildrenInNavigationOrder and NSAccessibilityChildrenInNavigationOrderAttribute
        https://bugs.webkit.org/show_bug.cgi?id=232654

        Reviewed by Chris Fleizach.

        Some clients expect accessibilityChildrenInNavigationOrder and 
        NSAccessibilityChildrenInNavigationOrderAttribute to be available,
        and WKAccessibilityWebPageObjectMac didn't expose them.

        * accessibility/mac/WebAccessibilityObjectWrapperMac.h:
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        Move #define NSAccessibilityChildrenInNavigationOrderAttribute to
        header so it can be used in the WebKit layer.

2021-11-03  Joonghun Park  <jh718.park@samsung.com>

        border-radius inline style should serialize with valid syntax
        https://bugs.webkit.org/show_bug.cgi?id=183994

        This patch have border-radius property serializes in canonical order
        as specified in https://drafts.csswg.org/css-backgrounds/#border-radius.

        Reviewed by Darin Adler.

        * css/StyleProperties.cpp:
        (WebCore::StyleProperties::getPropertyValue const):
        (WebCore::StyleProperties::borderRadiusValue const):
        * css/StyleProperties.h:
        * css/parser/CSSPropertyParser.cpp:

2021-11-03  David Kilzer  <ddkilzer@apple.com>

        Fix consistency issues with localized strings and regenerate localizable.strings
        <https://webkit.org/b/232642>

        Reviewed by Megan Gardner.

        * en.lproj/Localizable.strings:
        - Regenerate the file using update-webkit-localizable-strings.
        - List of strings realphabetized, except as noted below.
        ("%@ (%@ Internet plug-in)"): Delete.
        - Removed in r285047 for Bug 232462.

        * platform/LocalizedStrings.cpp:
        (WebCore::addTextTrackKindEasyReaderSuffix):
        - Fix unlocalized string that regressed in r278202 for
          Bug 226361.
        (WebCore::useBlockedPlugInContextMenuTitle):
        - Remove unneeded call to WebCore::formatLocalizedString() since
          there are no placeholders to replace.

        * platform/cocoa/LocalizedStringsCocoa.mm:
        (WebCore::contextMenuItemTagSearchWeb):
        (WebCore::contextMenuItemTagShowFonts):
        - Switch from calling WebCore::localizedNSString() directly to
          using WEB_UI_NSSTRING() so these strings will be found by
          update-webkit-localizable-strings.

2021-11-03  Rob Buis  <rbuis@igalia.com>

        Return nullopt in aspect-ratio+intrinsic width case
        https://bugs.webkit.org/show_bug.cgi?id=230769

        Reviewed by Javier Fernandez.

        Return nullopt in aspect-ratio+intrinsic width case, while
        calculating preferred widths we do not know the container width yet,
        so we can't determine the logical height reliably from it.

        Test: fast/css-grid-layout/aspect-ratio-auto-repeat-crash.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::availableLogicalHeightForPercentageComputation const):

2021-11-03  Alex Christensen  <achristensen@webkit.org>

        [ iOS ] TestWebKitAPI.WebKitLegacy.AudioSessionCategoryIOS is crashing
        https://bugs.webkit.org/show_bug.cgi?id=232676

        Reviewed by Eric Carlson.

        In r284743 we changed types from raw pointers to WeakPtr, but accessing them in layoutSublayers is not thread safe.
        Remove some unsafe early returns.

        * platform/ios/VideoFullscreenInterfaceAVKit.mm:
        (-[WebAVPlayerLayer layoutSublayers]):
        (-[WebAVPlayerLayer resolveBounds]):

2021-11-03  Chris Dumez  <cdumez@apple.com>

        Clicking a link should preconnect to destination as first party
        https://bugs.webkit.org/show_bug.cgi?id=232668

        Reviewed by Alex Christensen.

        Clicking a link should preconnect to destination as first party, not third-party. Otherwise, the
        preconnect is wasted when session isolation based on registrable domain is enabled. This is a
        follow-up to r284730.

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::handleClick):
        * loader/LinkLoader.cpp:
        (WebCore::LinkLoader::preconnectIfNeeded):
        * loader/LoaderStrategy.h:

2021-11-03  Devin Rousso  <drousso@apple.com>

        [Modern Media Controls] should show tracks button/menu for <audio>
        https://bugs.webkit.org/show_bug.cgi?id=232597

        Reviewed by Eric Carlson.

        There's nothing preventing `<audio>` from having multiple `<source>`. We should have a
        language picker for `<audio>` just like what we have for `<video>`.

        Tests: media/modern-media-controls/tracks-support/audio-multiple-tracks.html
               media/modern-media-controls/tracks-support/audio-single-track.html

        * Modules/modern-media-controls/controls/inline-media-controls.js:
        (InlineMediaControls.prototype._rightContainerButtons):

2021-11-03  Chris Dumez  <cdumez@apple.com>

        Javascript URLs do not run in the right context when using frame targeting
        https://bugs.webkit.org/show_bug.cgi?id=232382

        Reviewed by Alex Christensen.

        Javascript URLs did not run in the right context when using frame targeting
        (e.g. `<a target="foo" src="javascript:...">`). We would previously run the
        JavaScript URL in the context of the anchor instead of the target frame/window.

        Also, we would fail to open a new popup when there is no existing frame with
        the given target name.

        This patch fixes the issue by doing the executeJavaScriptURL() call later,
        inside of FrameLoader::loadWithNavigationAction(), once we've already resolved
        the target frame and created a new window if necessary.

        This aligns our behavior with both Chrome and Firefox.

        Tests: fast/frames/javascript-url-anchor-target-new-window.html
               fast/frames/javascript-url-anchor-target.html
               fast/frames/javascript-url-form-target-new-window.html
               fast/frames/javascript-url-form-target.html

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::executeJavaScriptURL):
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::handleClick):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::submit):
        * loader/FormSubmission.cpp:
        (WebCore::FormSubmission::requestURL const):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::changeLocation):
        (WebCore::FrameLoader::submitForm):
        (WebCore::FrameLoader::loadURL):
        (WebCore::FrameLoader::loadWithNavigationAction):
        (WebCore::FrameLoader::loadPostRequest):
        (WebCore::FrameLoader::continueLoadAfterNewWindowPolicy):
        * loader/NavigationAction.h:
        (WebCore::NavigationAction::shouldReplaceDocumentIfJavaScriptURL const):
        (WebCore::NavigationAction::setShouldReplaceDocumentIfJavaScriptURL):
        * loader/NavigationScheduler.cpp:
        (WebCore::NavigationScheduler::scheduleFormSubmission):

2021-11-03  Antti Koivisto  <antti@apple.com>

        ::slotted element style not invalidated correctly in nested case
        https://bugs.webkit.org/show_bug.cgi?id=232665

        Reviewed by Simon Fraser.

        We fail to invalidate ::slotted style if the assigned node is not from the current host scope.

        * style/StyleInvalidator.cpp:
        (WebCore::Style::invalidateAssignedElements):

        Invalidate more accurately by following assigned node chain recursively instead of just invalidating all host children.

        (WebCore::Style::Invalidator::invalidateIfNeeded):

        Remove the unnecessary and incorrect m_didInvalidateHostChildren optimization.

        * style/StyleInvalidator.h:

2021-11-03  Jer Noble  <jer.noble@apple.com>

        [iOS] AVAssetResourceLoadingRequest.request does not include a Range: header on iOS 15.
        https://bugs.webkit.org/show_bug.cgi?id=232195
        <rdar://84574375>

        Reviewed by Darin Adler.

        Explicitly add a Range: header for Blob requests which do not have one (but otherwise should).

        Test: platform/mac/media/video-blob-request-contains-range-header.html

        Drive-by fix: to allow this change to be testable, we must revert a change which calls all the
        network delegate callbacks with empty data. This was necessary at the time because (at least for
        Cocoa ports) media loading happened outside WebCore's loader path. Currently, all http(s), data,
        blob, and custom protocol schemes are loaded through WebCore, leaving file:// URLs as the
        remaining protocol type that needs custom handling, and only on Cocoa ports.

        Further drive-by fix: WebKitLegacy's network delegate client operates synchronously during
        requestResource(), so WebCoreNSURLSession must synthesize an error if that method returns a 
        nil resource.

        * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.mm:
        (WebCore::WebCoreAVFResourceLoader::startLoading):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::loadResource):
        * platform/network/cocoa/WebCoreNSURLSession.mm:
        (-[WebCoreNSURLSessionDataTask _restart]):

2021-11-03  Antti Koivisto  <antti@apple.com>

        ::slotted shouldn't match an active <slot>
        https://bugs.webkit.org/show_bug.cgi?id=232664

        Reviewed by Simon Fraser.

        https://drafts.csswg.org/css-scoping/#slotted-pseudo

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne const):

        Avoid matching <slot>.

2021-11-03  Chris Lord  <clord@igalia.com>

        [GTK][WPE] Use the display refresh to drive scrolling animations (sync scroll)
        https://bugs.webkit.org/show_bug.cgi?id=232077

        Reviewed by Simon Fraser.

        Service sync scroll animations as part of the scroll phase in
        Page::updateRendering, which is driven by the display refresh.

        No new tests, covered by existing tests.

        * dom/Document.cpp:
        (WebCore::serviceScrollAnimationForScrollableArea):
        (WebCore::Document::runScrollSteps):
        * page/FrameView.cpp:
        (WebCore::FrameView::didStartScrollAnimation):
        * page/FrameView.h:
        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::ScrollAnimator):
        (WebCore::ScrollAnimator::startAnimationCallback):
        (WebCore::ScrollAnimator::stopAnimationCallback):
        (WebCore::ScrollAnimator::serviceScrollAnimation):
        (WebCore::ScrollAnimator::scrollControllerAnimationTimerFired): Deleted.
        * platform/ScrollAnimator.h:
        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::didStartScrollAnimation):
        * platform/ScrollingEffectsController.cpp:
        (WebCore::ScrollingEffectsController::retargetAnimatedScrollBy):
        * rendering/RenderLayerScrollableArea.cpp:
        (WebCore::RenderLayerScrollableArea::didStartScrollAnimation):
        * rendering/RenderLayerScrollableArea.h:
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::didStartScrollAnimation):
        * rendering/RenderListBox.h:

2021-11-03  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Display box builder should take visual order into account when computing horizontal positions
        https://bugs.webkit.org/show_bug.cgi?id=232655

        Reviewed by Antti Koivisto.

        In this patch we turn logical horizontal positions into "physical" positions based on the visual order of the runs.
        With this change, now IFC can render simple RTL content.

        * layout/formattingContexts/inline/InlineDisplayContentBuilder.cpp:
        (WebCore::Layout::InlineDisplayContentBuilder::createBoxesAndUpdateGeometryForLineContent): Move shared code to displayBoxRect. 

2021-11-03  Antti Koivisto  <antti@apple.com>

        Use Style::ScopeOrdinal for finding the right scope for ::part matching
        https://bugs.webkit.org/show_bug.cgi?id=232562

        Reviewed by Simon Fraser.

        We are already passing the scope ordinal to the selector checker so we can use it consistently to find
        the right scope.

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::matchRecursively const):

        Find the right scope based on the scope ordinal.
        Simplify allowMultiplePseudoElements check, invalid cases are not allowed by the parser.

        (WebCore::SelectorChecker::checkOne const):

        Find the right scope based on the scope ordinal.

        * css/SelectorChecker.h:
        * dom/ShadowRoot.h:
        * style/ElementRuleCollector.cpp:
        (WebCore::Style::ElementRuleCollector::matchPartPseudoElementRulesForScope):

        Compute the scope ordinal for nested scopes.
        Make iterative instead of recursive.

        (WebCore::Style::ElementRuleCollector::ruleMatches):
        (WebCore::Style::ElementRuleCollector::matchAllRules):

        Flush all remaining rules.

        * style/ElementRuleCollector.h:
        * style/StyleScope.cpp:
        (WebCore::Style::Scope::forOrdinal):
        (WebCore::Style::assignedSlotForScopeOrdinal):
        (WebCore::Style::hostForScopeOrdinal):

        Add helpers.

        * style/StyleScope.h:
        * style/StyleScopeOrdinal.h:
        (WebCore::Style::operator--):

        We now use values less than ContainingHost to present enclosing scopes, similar to slotted matching.

2021-11-02  Brady Eidson  <beidson@apple.com>

        Notifications on iOS enabled at compile-time, disabled at runtime
        https://bugs.webkit.org/show_bug.cgi?id=232649

        Reviewed by Tim Horton.

        No new tests (Changing compiled behavior but definitely not runtime behavior)

        * Modules/notifications/Notification.idl:
        * Modules/notifications/NotificationPermission.idl:
        * Modules/notifications/NotificationPermissionCallback.idl:
        * bindings/js/WebCoreBuiltinNames.h:

2021-11-02  Caitln Potter  <caitp@igalia.com>

        [WebIDL] Support [Exposed=*] extended attribute
        https://bugs.webkit.org/show_bug.cgi?id=231082

        Reviewed by Chris Dumez.

        Adds a shorthand to expose interfaces/attributes on Window, Workers*,
        and the forthcoming ShadowRealm global object.

        See https://github.com/heycam/webidl/issues/468 and
        https://github.com/heycam/webidl/pull/526 for details.

        * bindings/scripts/CodeGenerator.pm:
        (shouldPropertyBeExposed):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateRuntimeEnableConditionalStringForExposed):
        * bindings/scripts/IDLParser.pm:
        (parseExtendedAttributeRest2):
        * bindings/scripts/preprocess-idls.pl:
        * bindings/scripts/test/AudioWorkletGlobalScopeConstructors.idl:
        * bindings/scripts/test/DOMWindowConstructors.idl:
        * bindings/scripts/test/DedicatedWorkerGlobalScopeConstructors.idl:
        * bindings/scripts/test/ExposedStar.idl: Added.
        * bindings/scripts/test/JS/JSDOMWindow.cpp:
        (WebCore::jsDOMWindow_ExposedStarConstructorGetter):
        (WebCore::JSC_DEFINE_CUSTOM_GETTER):
        * bindings/scripts/test/JS/JSDedicatedWorkerGlobalScope.cpp:
        (WebCore::jsDedicatedWorkerGlobalScope_ExposedStarConstructorGetter):
        (WebCore::JSC_DEFINE_CUSTOM_GETTER):
        * bindings/scripts/test/JS/JSExposedStar.cpp: Added.
        (WebCore::JSExposedStarDOMConstructor::prototypeForStructure):
        (WebCore::JSExposedStarDOMConstructor::initializeProperties):
        (WebCore::JSExposedStarPrototype::finishCreation):
        (WebCore::JSExposedStar::JSExposedStar):
        (WebCore::JSExposedStar::finishCreation):
        (WebCore::JSExposedStar::createPrototype):
        (WebCore::JSExposedStar::prototype):
        (WebCore::JSExposedStar::getConstructor):
        (WebCore::JSC_DEFINE_CUSTOM_GETTER):
        (WebCore::jsExposedStarPrototypeFunction_operationForAllContextsBody):
        (WebCore::JSC_DEFINE_HOST_FUNCTION):
        (WebCore::jsExposedStarPrototypeFunction_operationJustForWindowContextsBody):
        (WebCore::jsExposedStarPrototypeFunction_operationJustForWorkerContextsBody):
        (WebCore::JSExposedStar::subspaceForImpl):
        (WebCore::JSExposedStar::analyzeHeap):
        (WebCore::toJSNewlyCreated):
        (WebCore::toJS):
        (WebCore::JSExposedStar::toWrapped):
        * bindings/scripts/test/JS/JSExposedStar.h: Added.
        (WebCore::JSExposedStar::create):
        (WebCore::JSExposedStar::createStructure):
        (WebCore::JSExposedStar::subspaceFor):
        (WebCore::JSExposedStar::wrapped const):
        (WebCore::toJS):
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSPaintWorkletGlobalScope.cpp:
        (WebCore::jsPaintWorkletGlobalScope_ExposedStarConstructorGetter):
        (WebCore::JSC_DEFINE_CUSTOM_GETTER):
        * bindings/scripts/test/JS/JSServiceWorkerGlobalScope.cpp:
        (WebCore::jsServiceWorkerGlobalScope_ExposedStarConstructorGetter):
        (WebCore::JSC_DEFINE_CUSTOM_GETTER):
        * bindings/scripts/test/PaintWorkletGlobalScopeConstructors.idl:
        * bindings/scripts/test/ServiceWorkerGlobalScopeConstructors.idl:
        * bindings/scripts/test/SupplementalDependencies.dep:

2021-11-02  Don Olmstead  <don.olmstead@sony.com>

        Non-unified build fixes early November 2021 edition
        https://bugs.webkit.org/show_bug.cgi?id=232589

        Unreviewed non-unified build fixes.

        * Modules/push-api/PushSubscriptionData.h:
        * animation/CSSPropertyAnimation.cpp:
        * animation/CSSPropertyAnimation.h:
        * animation/CSSTransition.cpp:
        * animation/WebAnimation.cpp:
        * css/SelectorFilter.cpp:
        * dom/Attr.cpp:
        * dom/ComposedTreeIterator.cpp:
        * editing/BreakBlockquoteCommand.cpp:
        * editing/InsertParagraphSeparatorCommand.cpp:
        * editing/SplitElementCommand.cpp:
        * editing/SplitTextNodeContainingElementCommand.cpp:
        * html/HTMLSummaryElement.cpp:
        * html/HTMLTitleElement.cpp:
        * html/track/VTTCue.cpp:
        * inspector/DOMPatchSupport.cpp:
        * inspector/InspectorNodeFinder.cpp:
        * inspector/agents/InspectorPageAgent.cpp:
        * layout/formattingContexts/inline/InlineItemsBuilder.cpp:
        * page/ResizeObservation.cpp:
        * page/scrolling/ScrollingCoordinatorTypes.h:
        * rendering/RenderCounter.cpp:
        * rendering/svg/RenderSVGModelObject.cpp:
        * rendering/svg/SVGResources.cpp:
        * rendering/svg/SVGRootInlineBox.cpp:
        * rendering/svg/SVGTextChunk.cpp:
        * style/ElementRuleCollector.cpp:
        * style/PageRuleCollector.h:

2021-11-02  Gabriel Nava Marino  <gnavamarino@apple.com>

        Crash in RenderLayer::rebuildZOrderLists
        https://bugs.webkit.org/show_bug.cgi?id=230229

        Reviewed by Simon Fraser.

        Test: fast/layers/render-layer-rebuild-z-order-lists.html

        To avoid operating on nullptr, allocate posZOrderList if it is null,
        similar to how it is done in RenderLayer::collectLayers.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::rebuildZOrderLists):

2021-11-02  Robin Morisset  <rmorisset@apple.com>

        Regression (r284330): [ macOS wk1 Debug ] webaudio/AudioBuffer/huge-buffer.html is a flaky timeout
        https://bugs.webkit.org/show_bug.cgi?id=232244
        <rdar://problem/84616427>

        Reviewed by Yusuke Suzuki.

        The test is verifying that trying to allocate an AudioBuffer with 4GB channels fails cleanly.
        It used to work automatically, as AudioBuffer relies on Float32Array under the hood, which was limited to 2GB.
        Since r284330, ArrayBuffers can be up to 4GB, so it now takes very long to OOM, and sometimes timeout.
        I use the same solution which I used for PixelBuffers in r284330: just test that the length is reasonable
        and if it is not then abort as if the allocation of the Float32Array had failed.

        No new tests: covered by LayoutTests/webaudio/AudioBuffer/huge-buffer.html

        * Modules/webaudio/AudioBuffer.cpp:
        (WebCore::AudioBuffer::AudioBuffer):
        * Modules/webaudio/AudioBuffer.h:

2021-11-02  Don Olmstead  <don.olmstead@sony.com>

        SVG elements should include SVGElementInlines not ElementInlines
        https://bugs.webkit.org/show_bug.cgi?id=232637

        Reviewed by Yusuke Suzuki.

        Replace usages of ElementInlines.h with SVGElementInlines.h in WebCore/svg. Add
        SVGElementInlines.h to files that need them when compiled without unified builds.

        * svg/SVGAElement.cpp:
        * svg/SVGAltGlyphElement.cpp:
        * svg/SVGAnimationElement.cpp:
        * svg/SVGFEImageElement.cpp:
        * svg/SVGFilterPrimitiveStandardAttributes.cpp:
        * svg/SVGFontFaceNameElement.cpp:
        * svg/SVGFontFaceUriElement.cpp:
        * svg/SVGHKernElement.cpp:
        * svg/SVGImageElement.cpp:
        * svg/SVGMaskElement.cpp:
        * svg/SVGPatternElement.cpp:
        * svg/SVGStyleElement.cpp:
        * svg/SVGTRefElement.cpp:
        * svg/SVGTSpanElement.cpp:
        * svg/SVGTextElement.cpp:
        * svg/SVGTextPathElement.cpp:
        * svg/SVGVKernElement.cpp:
        * svg/animation/SVGSMILElement.cpp:
        * svg/properties/SVGAttributeAnimator.cpp:

2021-11-02  Don Olmstead  <don.olmstead@sony.com>

        [MSVC] Remove unused friend class in filter code
        https://bugs.webkit.org/show_bug.cgi?id=232636

        Reviewed by Yusuke Suzuki.

        In r284857 the WTF prefix was removed from ParallelJobs in filter code. During a
        non-unified build MSVC thinks that there is a WebCore::ParallelJobs due to a friend
        declaration in filter code and fails to build. Remove the friend declaration as they are
        not used.

        * platform/graphics/filters/FEGaussianBlur.h:
        * platform/graphics/filters/FETurbulence.h:

2021-11-02  Antti Koivisto  <antti@apple.com>

        [LFC][Integration] Provide bidi properties when constructing TextRun
        https://bugs.webkit.org/show_bug.cgi?id=232632

        Reviewed by Alan Bujtas.

        Enable correct painting of bidi text runs.

        * layout/integration/InlineIteratorBoxModernPath.h:
        (WebCore::InlineIterator::BoxModernPath::createTextRun const):
        (WebCore::InlineIterator::BoxModernPath::renderText const):
        (WebCore::InlineIterator::BoxModernPath::direction const):

2021-11-02  Kate Cheney  <katherine_cheney@apple.com>

        PCM: Safari on iOS and macOS are not sending ad click attribution reports for Private Click Measurement
        https://bugs.webkit.org/show_bug.cgi?id=228104
        <rdar://problem/80991209>

        Reviewed by John Wilander.

        No new tests. Several existing tests would timeout with the removal of
        m_firePendingAttributionRequestsTimer.startOneShot(m_isRunningTest ? 0_s : seconds)
        if the fix wasn't in place.

        * loader/PrivateClickMeasurement.cpp:
        (WebCore::randomlyBetweenTwentyFourAndFortyEightHours):
        (WebCore::PrivateClickMeasurement::attributeAndGetEarliestTimeToSend):
        * loader/PrivateClickMeasurement.h:

2021-11-02  Tyler Wilcock  <tyler_w@apple.com>

        AX: WebKit needs to include NSAccessibilityChildrenInNavigationOrderAttribute in accessibilityAttributeNames
        https://bugs.webkit.org/show_bug.cgi?id=232595

        Reviewed by Andres Gonzalez.

        This patch adds NSAccessibilityChildrenInNavigationOrderAttribute
        (a.k.a. AXChildrenInNavigationOrder) to
        WebAccessibilityObjectWrapperMac::accessibilityAttributeNames. The Mac
        wrapper supported this attribute prior to this patch, but we didn't
        advertise that we supported it because we didn't include it in our
        exported attribute names.

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        Add NSAccessibilityChildrenInNavigationOrderAttribute to list of base
        supported attributes.

2021-11-02  Antti Koivisto  <antti@apple.com>

        [LFC][Integration] Add support for IFC preferred width computation
        https://bugs.webkit.org/show_bug.cgi?id=232621

        Reviewed by Alan Bujtas.

        The functionality is behind a #define and not enabled yet.

        * layout/formattingContexts/inline/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::computedIntrinsicWidthConstraints):

        Return the cached value if it exists.

        * layout/formattingContexts/inline/InlineFormattingContext.h:
        * layout/integration/LayoutIntegrationLineLayout.cpp:
        (WebCore::LayoutIntegration::LineLayout::computeIntrinsicWidthConstraints):

        Interface with IFC.

        * layout/integration/LayoutIntegrationLineLayout.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::computeAndSetLineLayoutPath):

        Factor into a function.

        (WebCore::RenderBlockFlow::layoutInlineChildren):
        (WebCore::RenderBlockFlow::computeInlinePreferredLogicalWidths const):
        (WebCore::RenderBlockFlow::tryComputePreferredWidthsUsingModernPath):

        Test if we the content can use the IFC preferred width computation. This way the
        feature can be enabled incrementally.

        * rendering/RenderBlockFlow.h:

2021-11-02  Chris Lord  <clord@igalia.com>

        [GTK][WPE] Use the display refresh to drive scrolling animations (async scroll)
        https://bugs.webkit.org/show_bug.cgi?id=232432

        Reviewed by Simon Fraser.

        Implement missing API in nicosia async scroll path to have scroll
        animations driven by the display refresh instead of a 60Hz timer.

        No new tests, covered by existing tests.

        * page/scrolling/nicosia/ScrollingCoordinatorNicosia.cpp:
        (WebCore::ScrollingCoordinatorNicosia::didCompleteRenderingUpdate):
        (WebCore::ScrollingCoordinatorNicosia::hasNodeWithAnimatedScrollChanged):
        * page/scrolling/nicosia/ScrollingCoordinatorNicosia.h:
        * page/scrolling/nicosia/ScrollingTreeFrameScrollingNodeNicosia.cpp:
        (WebCore::ScrollingTreeFrameScrollingNodeNicosia::serviceScrollAnimation):
        * page/scrolling/nicosia/ScrollingTreeFrameScrollingNodeNicosia.h:
        * page/scrolling/nicosia/ScrollingTreeOverflowScrollingNodeNicosia.cpp:
        (WebCore::ScrollingTreeOverflowScrollingNodeNicosia::serviceScrollAnimation):
        * page/scrolling/nicosia/ScrollingTreeOverflowScrollingNodeNicosia.h:
        * page/scrolling/nicosia/ScrollingTreeScrollingNodeDelegateNicosia.cpp:
        (WebCore::ScrollingTreeScrollingNodeDelegateNicosia::startAnimationCallback):
        (WebCore::ScrollingTreeScrollingNodeDelegateNicosia::stopAnimationCallback):
        (WebCore::ScrollingTreeScrollingNodeDelegateNicosia::serviceScrollAnimation):
        (WebCore::ScrollingTreeScrollingNodeDelegateNicosia::animationTimerFired): Deleted.
        * page/scrolling/nicosia/ScrollingTreeScrollingNodeDelegateNicosia.h:

2021-11-02  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Line should keep track of whether the content needs visual reordering
        https://bugs.webkit.org/show_bug.cgi?id=232601

        Reviewed by Antti Koivisto.

        * layout/formattingContexts/inline/InlineLine.cpp:
        (WebCore::Layout::Line::initialize):
        (WebCore::Layout::Line::append):
        * layout/formattingContexts/inline/InlineLine.h:
        (WebCore::Layout::Line::contentNeedsBidiReordering const):

2021-11-02  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Pass in the visual order list to display box construction
        https://bugs.webkit.org/show_bug.cgi?id=232600

        Reviewed by Antti Koivisto.

        In this patch we compute the visual order for the bidi runs if needed. This visual order is then passed
        in to the display box builder so that the final display boxes are constructed in the right order (horizontal positions are not yet adjusted). 

        * layout/formattingContexts/inline/InlineDisplayContentBuilder.cpp:
        (WebCore::Layout::InlineDisplayContentBuilder::createBoxesAndUpdateGeometryForLineContent):
        * layout/formattingContexts/inline/InlineLine.h:
        (WebCore::Layout::Line::contentNeedsBidiReordering const):
        * layout/formattingContexts/inline/InlineLineBuilder.cpp:
        (WebCore::Layout::LineBuilder::layoutInlineContent):
        * layout/formattingContexts/inline/InlineLineBuilder.h:

2021-11-02  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Use the isLineSpanningInlineBoxStart line run type to update spanning inline box geometry
        https://bugs.webkit.org/show_bug.cgi?id=232578

        Reviewed by Antti Koivisto.

        Now that we have dedicated LineSpanningInlineBoxStart line run type, let's use it to update the associated inline box geometry. 

        * layout/formattingContexts/inline/InlineDisplayContentBuilder.cpp:
        (WebCore::Layout::InlineDisplayContentBuilder::build):
        (WebCore::Layout::InlineDisplayContentBuilder::createBoxesAndUpdateGeometryForLineContent): Move the update logic over here from the createBoxesAndUpdateGeometryForLineSpanningInlineBoxes loop.
        (WebCore::Layout::InlineDisplayContentBuilder::createBoxesAndUpdateGeometryForLineSpanningInlineBoxes): Deleted.
        * layout/formattingContexts/inline/InlineDisplayContentBuilder.h:

2021-11-01  Don Olmstead  <don.olmstead@sony.com>

        [Curl] Fix -Wreorder-ctor in CurlRequest
        https://bugs.webkit.org/show_bug.cgi?id=232591

        Reviewed by Ross Kirsling.

        Reorder member initializer list in CurlRequest::CurlRequest to follow the ordering of
        members in its declaration.

        * platform/network/curl/CurlRequest.cpp:
        (WebCore::CurlRequest::CurlRequest):

2021-11-01  Don Olmstead  <don.olmstead@sony.com>

        [AX] Fix signature of childrenChanged when !ENABLE(ACCESSIBILITY)
        https://bugs.webkit.org/show_bug.cgi?id=232590
        <rdar://problem/84904540>

        Unreviewed build fix.

        In r285092 the signature of childrenChanged went from AXCoreObject* to AccessibilityObject*
        but wasn't updated when accessibility is disabled.

        * accessibility/AXObjectCache.h:
        (WebCore::AXObjectCache::checkedStateChanged):
        (WebCore::AXObjectCache::childrenChanged):

2021-11-01  Don Olmstead  <don.olmstead@sony.com>

        [Curl] Explicitly disable libcurl's internal cookie support
        https://bugs.webkit.org/show_bug.cgi?id=232586

        Reviewed by Ross Kirsling.

        Explicitly disable the cookie engine inside curl.

        * platform/network/curl/CurlContext.cpp:
        (WebCore::CurlHandle::CurlHandle):

2021-11-01  Michael Smith  <mike@w3.org>

        [WebInspector][CORS] Show HTTP status code in CORS messages.
        https://bugs.webkit.org/show_bug.cgi?id=231928

        Reviewed by Darin Adler

        Make the HTTP status be included in all CORS messages that might
        get logged to the Inspector console when a 4xx or 5xx error occurs.
        That means these:

        * Failed to load resource: Origin foo is not allowed by
        Access-Control-Allow-Origin

        * Failed to load resource: Preflight response is not successful

        The change makes those messages read as follows (in the case of,
        for example, a 500 error):

        * Failed to load resource: Origin foo is not allowed by
        Access-Control-Allow-Origin. Status code: 500

        * Failed to load resource: Preflight response is not successful.
        Status code: 500

        Tests: Updates 100+ existing tests, by changing expected messages.

        * loader/CrossOriginAccessControl.cpp:
        (WebCore::passesAccessControlCheck):
        (WebCore::validatePreflightResponse):

2021-11-01  Fujii Hironori  <Hironori.Fujii@sony.com>

        [CMake] Can't stat Source/WebCore/Modules/webgpu: No such file or directory
        https://bugs.webkit.org/show_bug.cgi?id=232583

        Reviewed by Konstantin Tokarev.

        r285096 removed WebCore/Modules/webgpu directory.

        * CMakeLists.txt: Removed Modules/webgpu directory from
        WebCore_IDL_INCLUDES and WebCore_PRIVATE_INCLUDE_DIRECTORIES.
        * PlatformMac.cmake:

2021-11-01  Myles C. Maxfield  <mmaxfield@apple.com>

        Rename GPUDevice to GPUPrewarming because it conflicts with WebGPU's GPUDevice
        https://bugs.webkit.org/show_bug.cgi?id=232549

        Reviewed by Tim Horton.

        We should have called it GPUPrewarming from the beginning, because that's what it does.

        No new tests because there is no behavior change.

        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * page/ProcessWarming.cpp:
        * platform/graphics/gpu/GPUPrewarming.h: Renamed from Source/WebCore/platform/graphics/gpu/GPUDevice.h.
        * platform/graphics/gpu/cocoa/GPUPrewarmingMetal.mm: Renamed from Source/WebCore/platform/graphics/gpu/cocoa/GPUDeviceMetal.mm.

2021-11-01  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Stop measuring text while collecting inline items when content needs bidi split
        https://bugs.webkit.org/show_bug.cgi?id=232571

        Reviewed by Antti Koivisto.

        When we know we are going to do bidi processing, these inline item width results will most likely become stale at breakAndComputeBidiLevels.

        * layout/formattingContexts/inline/InlineItemsBuilder.cpp:
        (WebCore::Layout::InlineItemsBuilder::breakAndComputeBidiLevels):
        (WebCore::Layout::InlineItemsBuilder::handleTextContent):
        (WebCore::Layout::InlineItemsBuilder::enterBidiContext):
        (WebCore::Layout::InlineItemsBuilder::exitBidiContext):
        (WebCore::Layout::InlineItemsBuilder::buildPreviousTextContent):
        * layout/formattingContexts/inline/InlineItemsBuilder.h:
        (WebCore::Layout::InlineItemsBuilder::isBiDiContent const):

2021-11-01  Devin Rousso  <drousso@apple.com>

        [ iOS15 EWS ] TestWebKitAPI.CSSViewportUnits.SameUnobscuredSizeOverrides flaky fails on EWS
        https://bugs.webkit.org/show_bug.cgi?id=232158
        <rdar://problem/84555218>

        Reviewed by Megan Gardner.

        Tests: CSSViewportUnits.AllSame
               CSSViewportUnits.EmptyUnobscuredSizeOverrides
               CSSViewportUnits.SameUnobscuredSizeOverrides
               CSSViewportUnits.DifferentUnobscuredSizeOverrides

        * page/FrameView.cpp:
        (WebCore::FrameView::sizeForCSSDynamicViewportUnits const):
        This should use `unobscuredContentRectIncludingScrollbars` to match `DOMWindow::inner{width,height}`.
        I think I accidentally left in the old code when I was testing some other configurations
        while working on r284628.

2021-11-01  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Start using ubidi to find bidi boundaries
        https://bugs.webkit.org/show_bug.cgi?id=232552

        Reviewed by Antti Koivisto.

        In this patch, we start using ubidi to find the bidi boundaries in the paragraph content.
        We also set the bidi levels on the associated inline item range. Later we'll be using these levels
        to compute the visual order (after line breaking).
        (see breakAndComputeBidiLevels for details)

        * layout/formattingContexts/inline/InlineItem.h:
        (WebCore::Layout::InlineItem::setBidiLevel):
        * layout/formattingContexts/inline/InlineItemsBuilder.cpp:
        (WebCore::Layout::InlineItemsBuilder::breakAndComputeBidiLevels):
        * layout/formattingContexts/inline/InlineTextItem.cpp:
        (WebCore::Layout::InlineTextItem::splitAt):
        * layout/formattingContexts/inline/InlineTextItem.h:

2021-11-01  Chris Dumez  <cdumez@apple.com>

        Crash under HIDDevice::HIDDevice()
        https://bugs.webkit.org/show_bug.cgi?id=232567
        <rdar://79414185>

        Reviewed by Simon Fraser.

        Make sure we null check values returned by IOHIDDeviceGetProperty() before calling
        CFNumberGetValue() on them.

        * platform/mac/HIDDevice.cpp:
        (WebCore::getDevicePropertyAsInt):
        (WebCore::HIDDevice::HIDDevice):

2021-11-01  Chris Dumez  <cdumez@apple.com>

        Align XSLTProcessor with Blink and get closer to Gecko in the process
        https://bugs.webkit.org/show_bug.cgi?id=232485

        Reviewed by Alex Christensen.

        Align XSLTProcessor with Blink and get closer to Gecko (and the specification [1]) in the process.
        The changes include making the parameters mandatory and non-nullable, as well as treating null
        as the empty string for some parameters.

        [1] https://dom.spec.whatwg.org/#xsltprocessor

        No new tests, rebaselined existing test.

        * xml/XSLTProcessor.cpp:
        (WebCore::XSLTProcessor::transformToDocument):
        (WebCore::XSLTProcessor::transformToFragment):
        * xml/XSLTProcessor.h:
        (WebCore::XSLTProcessor::importStylesheet):
        * xml/XSLTProcessor.idl:

2021-11-01  Ayumi Kojima  <ayumi_kojima@apple.com>

        Unreviewed, reverting r285055.

        Reverting because this commit may have caused
        webgl/1.0.x/conformance/textures/misc/texture-corner-case-
        videos.html and webgl/2.0.y/conformance/textures/misc/texture-
        corner-case-videos.html to time out

        Reverted changeset:

        "Avoid sending video data to Web process for
        canvas.drawImage(video)"
        https://bugs.webkit.org/show_bug.cgi?id=230766
        https://commits.webkit.org/r285055

2021-11-01  Alan Bujtas  <zalan@apple.com>

        Addressing post-commit comment (r285093).

        * layout/formattingContexts/inline/InlineItemsBuilder.cpp:
        (WebCore::Layout::InlineItemsBuilder::handleInlineBoxStart):
        (WebCore::Layout::InlineItemsBuilder::handleInlineBoxEnd):

2021-11-01  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Introduce paragraph content building to InlineItemsBuilder::handleTextContent
        https://bugs.webkit.org/show_bug.cgi?id=232546

        Reviewed by Antti Koivisto.

        Let's check for directional control characters in text content and build
        the paragraph content accordingly. Now that we've got both the inline box and
        the text bidi content (atomic inline level boxes are still missing) breakInlineItemsAtBidiBoundaries
        can start calling into ubidi to find content boundaries.

        * layout/formattingContexts/inline/InlineItemsBuilder.cpp:
        (WebCore::Layout::InlineItemsBuilder::handleTextContent):
        (WebCore::Layout::InlineItemsBuilder::enterBidiContext):
        (WebCore::Layout::InlineItemsBuilder::buildPreviousTextContent):
        * layout/formattingContexts/inline/InlineItemsBuilder.h:
        * layout/integration/LayoutIntegrationCoverage.cpp:
        (WebCore::LayoutIntegration::canUseForFontAndText):

2021-11-01  Daniel Kolesa  <dkolesa@igalia.com>

        Fix build with GCC 8.4 on Ubuntu 18.04
        https://bugs.webkit.org/show_bug.cgi?id=232305

        Reviewed by Adrian Perez de Castro.

        Fix build with GCC 8.4 on Ubuntu 18.04

        Thes sections of the code trigger an internal compiler error with
        GCC 8.4, segfaulting the compiler. This adds a workaround that
        makes it work again.

        * Modules/async-clipboard/ClipboardItemBindingsDataSource.cpp:
        (WebCore::ClipboardItemBindingsDataSource::collectDataForWriting):

2021-10-31  Antti Koivisto  <antti@apple.com>

        Fix :host invalidation when combined with pseudo classes in descendant position
        https://bugs.webkit.org/show_bug.cgi?id=232544

        Reviewed by Simon Fraser.

        * style/RuleSet.cpp:
        (WebCore::Style::isHostSelectorMatchingInShadowTree):

        Make more readable and accurate.

        (WebCore::Style::RuleSet::addRule):

        Compute m_hasHostPseudoClassRulesMatchingInShadowTree before bailing out for pseudo elements.

2021-10-31  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo] New GraphicsLayer for GPU process mode
        https://bugs.webkit.org/show_bug.cgi?id=228308

        Reviewed by Don Olmstead.

        * PlatformWinCairo.cmake:
        * platform/graphics/RemoteGraphicsContextGLProxyBase.cpp:
        * platform/graphics/RemoteGraphicsContextGLProxyBase.h:
        * platform/graphics/wc/RemoteGraphicsContextGLProxyBaseWC.cpp: Added.
        (WebCore::RemoteGraphicsContextGLProxyBase::platformInitialize):
        (WebCore::RemoteGraphicsContextGLProxyBase::platformLayer const):
        (WebCore::RemoteGraphicsContextGLProxyBase::setPlatformLayer):
        * platform/graphics/wc/WCPlatformLayer.h: Added.
        * platform/graphics/win/GraphicsContextWin.cpp:
        (WebCore::GraphicsContext::getWindowsContext): DisplayList
        GraphicsContext doesn't have a HDC. Do nothing for DisplayList
        context.
        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:
        (WebCore::MediaPlayerPrivateMediaFoundation::Direct3DPresenter::paintCurrentFrame):
        Paint a frame by using GraphicsContext::drawNativeImage instead of
        Cairo API for DisplayList.

2021-10-31  Cameron McCormack  <heycam@apple.com>

        Update Web IDL links to new URL
        https://bugs.webkit.org/show_bug.cgi?id=232533
        <rdar://problem/84842937>

        Reviewed by Sam Weinig.

        * Modules/mediastream/OverconstrainedError.idl:
        * bindings/js/JSCallbackData.cpp:
        * bindings/js/JSDOMAbstractOperations.h:
        * bindings/js/JSDOMConvertPromise.h:
        * bindings/scripts/CodeGenerator.pm:
        * bindings/scripts/CodeGeneratorJS.pm:
        (AddMapLikeAttributesAndOperationIfNeeded):
        (AddSetLikeAttributesAndOperationIfNeeded):
        (GenerateGetOwnPropertySlot):
        (GenerateGetOwnPropertySlotByIndex):
        (GenerateDeletePropertyCommon):
        (GenerateDeleteProperty):
        (GenerateDeletePropertyByIndex):
        (GenerateNamedDeleterDefinition):
        (AttributeShouldBeOnInstance):
        (OperationShouldBeOnInstance):
        (GenerateDictionaryImplementationContent):
        (GenerateAttributeSetterBodyDefinition):
        (GenerateOperationBodyDefinition):
        (GenerateDefaultToJSONOperationDefinition):
        (GenerateConstructorHelperMethods):
        * bindings/scripts/IDLAttributes.json:
        * bindings/scripts/IDLParser.pm:
        * bindings/scripts/preprocess-idls.pl:
        * dom/ExceptionCode.h:

2021-10-31  Myles C. Maxfield  <mmaxfield@apple.com>

        Remove some straggling files after r280467
        https://bugs.webkit.org/show_bug.cgi?id=232541

        Reviewed by Sam Weinig.

        Somehow I must have missed some files.

        No new tests because there is no behavior change.

        * Modules/webgpu/WHLSL/AST/WHLSLStatement.cpp: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLStatementList.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLType.cpp: Removed.
        * Modules/webgpu/WHLSL/WHLSLProgram.cpp: Removed.

2021-10-31  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Keep track of the text box offset in ubidi's paragraph content
        https://bugs.webkit.org/show_bug.cgi?id=232540

        Reviewed by Antti Koivisto.

        This hashmap helps to map bidi boundary positions back to inline items.

        The paragraph content string holds the InlineTextBox content (and injected control characters)
        in DOM order. InlineTextItems hold start/end positions relative to their InlineTextBoxes.
        We'll use this hashmap to figure out which InlineTextItems need splitting at bidi boundaries.

        * layout/formattingContexts/inline/InlineItemsBuilder.cpp:
        (WebCore::Layout::InlineItemsBuilder::handleInlineBox):
        (WebCore::Layout::InlineItemsBuilder::enterBidiContext):
        (WebCore::Layout::InlineItemsBuilder::exitBidiContext):
        * layout/formattingContexts/inline/InlineItemsBuilder.h:

2021-10-31  Simon Fraser  <simon.fraser@apple.com>

        Scroll animations should run at 120Hz on 120Hz displays
        https://bugs.webkit.org/show_bug.cgi?id=232534

        Reviewed by Tim Horton.

        Scroll animations on the scrolling thread were driven by a 60Hz timer in
        ScrollingTreeScrollingNodeDelegateMac. Replace that with a mechanism that drives them from
        ThreadedScrollingTree::displayDidRefreshOnScrollingThread(), which is called at the maximum
        display refresh frequency.

        We leverage startAnimationCallback/stopAnimationCallback which update the HashSet of
        animating nodes on scrolling tree, and iterate this set in the callback to service the
        animations.
        
        Change some ScrollingTree terminology from "AnimatedScroll" to "ScrollAnimation" to indicate
        that they are about all kinds of scroll animations (e.g. rubberbanding), not just animated
        scrolls.

        A side effect of removing the ScrollingTreeScrollingNodeDelegateMac was that there was no
        code path that triggered continual "displayDidRefresh" notifications (which originate in the
        UI process). We need something to keep the displayDidRefresh notifications coming. To fix
        this, have ScrollingCoordinatorMac call scheduleRenderingUpdate() when an animation starts,
        and in each rendering update while there are active animations. This doesn't trigger
        additional rendering updates; these will happen anyway as a side effect of scrolling tree
        scrolls bouncing to the main thread. Also worth noting is that the scrolling thread will get
        120Hz updates, even if we're only triggering main thread rendering updates, because of
        existing WebPageProxy hasActiveAnimatedScroll state.

        Exercised by existing tests.

        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::isScrollAnimationInProgressForNode):
        (WebCore::ScrollingTree::setScrollAnimationInProgressForNode):
        (WebCore::ScrollingTree::hasNodeWithActiveScrollAnimations):
        (WebCore::ScrollingTree::nodesWithActiveScrollAnimations):
        (WebCore::ScrollingTree::isAnimatedScrollInProgressForNode): Deleted.
        (WebCore::ScrollingTree::setAnimatedScrollInProgressForNode): Deleted.
        (WebCore::ScrollingTree::hasNodeWithActiveAnimatedScroll): Deleted.
        * page/scrolling/ScrollingTree.h:
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::willStartAnimatedScroll):
        (WebCore::ScrollingTreeScrollingNode::didStopAnimatedScroll):
        (WebCore::ScrollingTreeScrollingNode::setScrollAnimationInProgress):
        * page/scrolling/ScrollingTreeScrollingNode.h:
        * page/scrolling/ScrollingTreeScrollingNodeDelegate.h:
        * page/scrolling/ThreadedScrollingTree.cpp:
        (WebCore::ThreadedScrollingTree::scrollingThreadIsActive):
        (WebCore::ThreadedScrollingTree::serviceScrollAnimations):
        (WebCore::ThreadedScrollingTree::displayDidRefreshOnScrollingThread):
        * page/scrolling/ThreadedScrollingTree.h:
        * page/scrolling/mac/ScrollingCoordinatorMac.h:
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::didCompleteRenderingUpdate):
        (WebCore::ScrollingCoordinatorMac::hasNodeWithAnimatedScrollChanged):
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h:
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeMac::startAnimatedScrollToPosition):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::serviceScrollAnimation):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::currentScrollPositionChanged):
        * page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.h:
        * page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.mm:
        (WebCore::ScrollingTreeOverflowScrollingNodeMac::serviceScrollAnimation):
        * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.h:
        * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.mm:
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::createTimer):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::startAnimationCallback):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::stopAnimationCallback):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::serviceScrollAnimation):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::scrollControllerAnimationTimerFired): Deleted.
        * page/scrolling/nicosia/ScrollingTreeScrollingNodeDelegateNicosia.cpp:
        (WebCore::ScrollingTreeScrollingNodeDelegateNicosia::animationTimerFired):
        (WebCore::ScrollingTreeScrollingNodeDelegateNicosia::serviceScrollAnimation):
        * page/scrolling/nicosia/ScrollingTreeScrollingNodeDelegateNicosia.h:

2021-10-31  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add unicode-bidi control characters
        https://bugs.webkit.org/show_bug.cgi?id=232538

        Reviewed by Antti Koivisto.

        This is preparation for injecting entering/exiting control characters into the paragraph string used by ubidi.

        * layout/formattingContexts/inline/InlineItemsBuilder.cpp:
        (WebCore::Layout::InlineItemsBuilder::handleInlineBox):
        (WebCore::Layout::InlineItemsBuilder::enterBidiContext):
        (WebCore::Layout::InlineItemsBuilder::exitBidiContext):
        * layout/formattingContexts/inline/InlineItemsBuilder.h:

2021-10-31  Andres Gonzalez  <andresg_22@apple.com>

        Move handling of ChildrenChanged notifications out of the AccessibilityObjects into AXObjectCache.
        https://bugs.webkit.org/show_bug.cgi?id=232503
        <rdar://problem/84820154>

        Reviewed by Chris Fleizach.

        ChildrenChanged notifications were handled in
        AXObjectCache::performDeferredCacheUpdate by calling into an AX object
        method. While in principle this may seem as a good design, it obscures
        significantly what exactly happens in response to a notification. This
        is aggravated by the fact that the object's handlers may call back into
        the AXObjectCache to post or further defer notifications to platform
        clients.
        This patch atempts to straightline this flow by handling the
        ChildrenChanged notifications in AXObjectCache.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::textChanged):
        (WebCore::AXObjectCache::handleChildrenChanged):
        The name indicates that this is the actual handler for the notification
        as opposed as the other childrenChanged(...) methods that just queue
        the notifications for a later time.

        (WebCore::AXObjectCache::childrenChanged):
        (WebCore::AXObjectCache::notificationPostTimerFired):
        (WebCore::AXObjectCache::handleAriaRoleChanged):
        (WebCore::AXObjectCache::recomputeIsIgnored):
        (WebCore::AXObjectCache::performDeferredCacheUpdate):
        * accessibility/AXObjectCache.h:
        * accessibility/AccessibilityMenuList.cpp:
        (WebCore::AccessibilityMenuList::childrenChanged):
        Deleted, now handled in AXObjectCache::handleChildrenChanged.
        * accessibility/AccessibilityMenuList.h:
        * accessibility/AccessibilityMenuListPopup.cpp:
        (WebCore::AccessibilityMenuListPopup::handleChildrenChanged):
        (WebCore::AccessibilityMenuListPopup::childrenChanged):
        Renamed handleChildrenChanged. It is the only AXObject subclass that
        still has this method to update its children. It does not post or
        schedule any platform client notification.

        * accessibility/AccessibilityMenuListPopup.h:
        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::updateAccessibilityRole):
        (WebCore::AccessibilityNodeObject::childrenChanged): Deleted.
        * accessibility/AccessibilityNodeObject.h:
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::hasIgnoredValueChanged):
        (WebCore::AccessibilityObject::notifyIfIgnoredValueChanged):
        Renamed hasIgnoredValueChanged since the actual notifications are posted
        in AXObjectCache.

        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::updateAccessibilityRole):
        * accessibility/AccessibilityObjectInterface.h:
        Several methods can now be removed from the AXCoreObject interface since
        they are internal to the AXObject class hierarchy.

        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::addChildren):
        * accessibility/isolatedtree/AXIsolatedObject.cpp:
        Now able to delete several unnecessary methods from the isolated objects.
        (WebCore::AXIsolatedObject::childrenChanged): Deleted.
        (WebCore::AXIsolatedObject::updateAccessibilityRole): Deleted.
        (WebCore::AXIsolatedObject::lastKnownIsIgnoredValue): Deleted.
        (WebCore::AXIsolatedObject::setLastKnownIsIgnoredValue): Deleted.
        (WebCore::AXIsolatedObject::notifyIfIgnoredValueChanged): Deleted.
        * accessibility/isolatedtree/AXIsolatedObject.h:

2021-10-31  Cameron McCormack  <heycam@apple.com>

        Change some bitwise OR operators to logical OR
        https://bugs.webkit.org/show_bug.cgi?id=232537
        <rdar://problem/84845378>

        Reviewed by Alexey Proskuryakov.

        * html/canvas/CanvasRenderingContext2DBase.cpp:
        (WebCore::CanvasRenderingContext2DBase::translate):
        (WebCore::CanvasRenderingContext2DBase::transform):
        (WebCore::CanvasRenderingContext2DBase::setTransform):
        (WebCore::validateRectForCanvas):
        (WebCore::CanvasRenderingContext2DBase::canDrawText):

2021-10-30  Myles C. Maxfield  <mmaxfield@apple.com>

        Migrate the first few callers from ImageBuffer::truncatedLogicalSize() to ImageBuffer::logicalSize()
        https://bugs.webkit.org/show_bug.cgi?id=232528

        Reviewed by Tim Horton.

        These are the callers which seem obviously correct to migrate from truncatedLogicalSize() to logicalSize(),
        because these are the callers that immediately cast the result to FloatSize. That means, before this patch,
        these callers are going from float -> int -> float.

        This patch is the fourth step in https://bugs.webkit.org/show_bug.cgi?id=225377. There is no situation where
        truncating the logical size is meaningful - we either want the float logical size, or we want the physical
        number of texels in the image (which is the logical size, times the resolution, rounded up to an int size).
        Eventually, we should move all callers off of truncatedLogicalSize() and on to either logicalSize() or
        a yet-to-be-written physicalSize()/texelCount()/bikeshedName().

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawImageBuffer):
        (WebCore::GraphicsContext::drawConsumingImageBuffer):
        * platform/graphics/displaylists/DisplayListImageBuffer.h:
        (WebCore::DisplayList::ImageBuffer::ImageBuffer):
        * platform/graphics/filters/FEBlend.cpp:
        (WebCore::FEBlend::platformApplySoftware):
        * platform/graphics/filters/FEComposite.cpp:
        (WebCore::FEComposite::platformApplySoftware):
        * rendering/CSSFilter.cpp:
        (WebCore::CSSFilter::allocateBackingStoreIfNeeded):
        * rendering/svg/RenderSVGResourcePattern.cpp:
        (WebCore::RenderSVGResourcePattern::buildPattern):

2021-10-30  Wenson Hsieh  <wenson_hsieh@apple.com>

        Layer tree should not be stuck in frozen state after explicitly stopping a page load
        https://bugs.webkit.org/show_bug.cgi?id=232532
        rdar://84522357

        Reviewed by Tim Horton.

        Add WEBCORE_EXPORT to a method. See WebKit/ChangeLog for more details.

        Test: http/tests/navigation/unfreeze-layer-tree-after-stopping-load.html

        * loader/FrameLoader.h:

2021-10-30  Chris Dumez  <cdumez@apple.com>

        [ BigSur wk2 Debug arm64 ] webaudio/AudioBufferSource/audiobuffersource-playbackrate.html is a flaky crash
        https://bugs.webkit.org/show_bug.cgi?id=232500
        <rdar://problem/84816843>

        Reviewed by Eric Carlson.

        The call to HashSet::remove() may cause a memory allocation so we need to extend the scope of the
        DisableMallocRestrictionsForCurrentThreadScope to avoid assertion hits in debug builds.

        No new tests, unskipped existing test.

        * Modules/webaudio/AudioSummingJunction.cpp:
        (WebCore::AudioSummingJunction::removeOutput):

2021-10-30  Brandon Stewart  <brandonstewart@apple.com>

        Selection extend() should trigger exception with no ranges
        https://bugs.webkit.org/show_bug.cgi?id=232420

        Reviewed by Chris Dumez.

        The 'extend' method in the Selection API should throw an exception upon
        being called if there are no ranges present in the Selection object.

        https://w3c.github.io/selection-api/#dom-selection-extend

        Test: imported/w3c/web-platform-tests/selection/extend-exception.html

        * page/DOMSelection.cpp:
        (WebCore::DOMSelection::extend):

2021-10-30  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add bidi level to InlineDisplay::Box
        https://bugs.webkit.org/show_bug.cgi?id=232531

        Reviewed by Antti Koivisto.

        InlineItem -> Line::Run -> InlineDisplay::Box.

        * layout/formattingContexts/inline/InlineDisplayContentBuilder.cpp:
        (WebCore::Layout::InlineDisplayContentBuilder::build):
        (WebCore::Layout::InlineDisplayContentBuilder::createBoxesAndUpdateGeometryForLineContent):
        (WebCore::Layout::InlineDisplayContentBuilder::createBoxesAndUpdateGeometryForLineSpanningInlineBoxes):
        * layout/formattingContexts/inline/InlineLine.cpp:
        (WebCore::Layout::Line::appendTextContent):
        (WebCore::Layout::m_bidiLevel):
        (WebCore::Layout::Line::Run::Run):
        (WebCore::Layout::Line::Run::expand):
        * layout/formattingContexts/inline/InlineLine.h:
        (WebCore::Layout::Line::Run::bidiLevel const):
        * layout/formattingContexts/inline/display/InlineDisplayBox.h:
        (WebCore::InlineDisplay::Box::Box):
        (WebCore::InlineDisplay::Box::bidiLevel const):
        * layout/integration/InlineIteratorBoxModernPath.h:
        (WebCore::InlineIterator::BoxModernPath::bidiLevel const):
        * layout/integration/LayoutIntegrationPagination.cpp:
        (WebCore::LayoutIntegration::makeAdjustedContent):

2021-10-30  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add skeleton implementation for bidi content handling
        https://bugs.webkit.org/show_bug.cgi?id=232524

        Reviewed by Antti Koivisto.

        Add dedicated functions for inline content types that need separate bidi handling (text vs. inline box vs. atomic etc).

        * layout/formattingContexts/inline/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::collectContentIfNeeded):
        * layout/formattingContexts/inline/InlineFormattingState.h:
        (WebCore::Layout::InlineFormattingState::addInlineItems):
        (WebCore::Layout::InlineFormattingState::addInlineItem): Deleted.
        * layout/formattingContexts/inline/InlineItemsBuilder.cpp:
        (WebCore::Layout::InlineItemsBuilder::build):
        (WebCore::Layout::InlineItemsBuilder::collectInlineItems):
        (WebCore::Layout::InlineItemsBuilder::breakInlineItemsAtBidiBoundaries):
        (WebCore::Layout::InlineItemsBuilder::handleTextContent):
        (WebCore::Layout::InlineItemsBuilder::handleInlineBox):
        (WebCore::Layout::InlineItemsBuilder::handleInlineLevelBox):
        (WebCore::Layout::InlineItemsBuilder::createAndAppendTextItems): Deleted.
        * layout/formattingContexts/inline/InlineItemsBuilder.h:
        (WebCore::Layout::InlineItemsBuilder::root const):
        (WebCore::Layout::InlineItemsBuilder::formattingState const): Deleted.

2021-10-30  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] InlineItem should not cross bidi level boundary
        https://bugs.webkit.org/show_bug.cgi?id=232509

        Reviewed by Antti Koivisto.

        Every inline item has a bidi level even when the content is not considered strictly as bidi (i.e. we don't call into ubidi to figure level information).

        * layout/formattingContexts/inline/InlineItem.h:
        (WebCore::Layout::InlineItem::bidiLevel const):
        (WebCore::Layout::InlineItem::InlineItem):
        * layout/formattingContexts/inline/InlineItemsBuilder.cpp:
        (WebCore::Layout::InlineItemsBuilder::createAndAppendTextItems):
        * layout/formattingContexts/inline/InlineSoftLineBreakItem.h:
        (WebCore::Layout::InlineSoftLineBreakItem::createSoftLineBreakItem):
        (WebCore::Layout::InlineSoftLineBreakItem::InlineSoftLineBreakItem):
        * layout/formattingContexts/inline/InlineTextItem.cpp:
        (WebCore::Layout::InlineTextItem::InlineTextItem):
        (WebCore::Layout::InlineTextItem::left const):
        (WebCore::Layout::InlineTextItem::right const):
        * layout/formattingContexts/inline/InlineTextItem.h:
        (WebCore::Layout::InlineTextItem::createWhitespaceItem):
        (WebCore::Layout::InlineTextItem::createNonWhitespaceItem):
        (WebCore::Layout::InlineTextItem::createEmptyItem):

2021-10-29  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Move InlineTextItem construction to InlineItemsBuilder
        https://bugs.webkit.org/show_bug.cgi?id=232498

        Reviewed by Antti Koivisto.

        This is in preparation for adding bidi support.

        * layout/formattingContexts/inline/InlineItemsBuilder.cpp:
        (WebCore::Layout::moveToNextNonWhitespacePosition):
        (WebCore::Layout::moveToNextBreakablePosition):
        (WebCore::Layout::InlineItemsBuilder::build):
        (WebCore::Layout::InlineItemsBuilder::createAndAppendTextItems):
        * layout/formattingContexts/inline/InlineItemsBuilder.h:
        * layout/formattingContexts/inline/InlineTextItem.cpp:
        (WebCore::Layout::InlineTextItem::InlineTextItem):
        (WebCore::Layout::InlineTextItem::left const):
        (WebCore::Layout::InlineTextItem::right const):
        (): Deleted.
        (WebCore::Layout::moveToNextNonWhitespacePosition): Deleted.
        (WebCore::Layout::moveToNextBreakablePosition): Deleted.
        (WebCore::Layout::InlineTextItem::createAndAppendTextItems): Deleted.
        * layout/formattingContexts/inline/InlineTextItem.h:
        (WebCore::Layout::InlineTextItem::InlineTextItem): Deleted.
        (WebCore::Layout::InlineTextItem::left const): Deleted.
        (WebCore::Layout::InlineTextItem::right const): Deleted.

2021-10-29  Myles C. Maxfield  <mmaxfield@apple.com>

        Rename ImageBuffer.logicalSize to ImageBuffer.truncatedLogicalSize
        https://bugs.webkit.org/show_bug.cgi?id=232515
        <rdar://problem/84829689>

        Reviewed by Tim Horton.

        This is a purely mechanical change, and is the first step in
        https://bugs.webkit.org/show_bug.cgi?id=225377. Once we have both logicalSize()
        and truncatedLogicalSize(), we can start migrating callers to the correct one
        and away from the trucated one.

        I did this rename by adding truncatedImageSize, and then temporarily renaming
        logicalSize() to some dummy value - to force compilation failures at every call
        to logicalSize(). Then, once compiling found all the call sites, I renamed it
        back to just logicalSize().

        No new tests because there is no behavior change.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::dumpImageBitmap):
        * html/CanvasBase.cpp:
        (WebCore::CanvasBase::setImageBuffer const):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::toMediaSample):
        * html/ImageBitmap.cpp:
        (WebCore::ImageBitmap::createPromise):
        * html/ImageBitmapBacking.cpp:
        (WebCore::ImageBitmapBacking::width const):
        (WebCore::ImageBitmapBacking::height const):
        * html/canvas/CanvasRenderingContext2DBase.cpp:
        (WebCore::CanvasRenderingContext2DBase::putImageData):
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::LRUImageBufferCache::imageBuffer):
        * page/PageColorSampler.cpp:
        (WebCore::sampleColor):
        * platform/graphics/ConcreteImageBuffer.h:
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawImageBuffer):
        (WebCore::GraphicsContext::drawConsumingImageBuffer):
        * platform/graphics/ImageBuffer.h:
        * platform/graphics/ShadowBlur.cpp:
        (WebCore::ScratchBuffer::WTF_REQUIRES_LOCK):
        * platform/graphics/displaylists/DisplayListImageBuffer.h:
        (WebCore::DisplayList::ImageBuffer::ImageBuffer):
        * platform/graphics/filters/FEBlend.cpp:
        (WebCore::FEBlend::platformApplySoftware):
        * platform/graphics/filters/FEColorMatrix.cpp:
        (WebCore::FEColorMatrix::platformApplySoftware):
        * platform/graphics/filters/FEComposite.cpp:
        (WebCore::FEComposite::platformApplySoftware):
        * platform/graphics/filters/FEDropShadow.cpp:
        (WebCore::FEDropShadow::platformApplySoftware):
        * rendering/CSSFilter.cpp:
        (WebCore::CSSFilter::allocateBackingStoreIfNeeded):
        * rendering/svg/RenderSVGResourcePattern.cpp:
        (WebCore::RenderSVGResourcePattern::buildPattern):

2021-10-29  Jean-Yves Avenard  <jya@apple.com>

        Have PlatformMediaResourceClient use SharedBuffer
        https://bugs.webkit.org/show_bug.cgi?id=232422
        rdar://84558835

        Reviewed by Alex Christensen.

        When playing a non-mse media element, the download gets controlled by a
        MediaResource into a WebCoreNSURLSession to be used by the media framework.
        The data got copied at least three times along the way due to the
        multi-threaded nature of the framework and the need for thread
        safety.
        The situation was made worse when the content server didn't support
        range-request: as a RangeResponseGenerator is then used by the
        WebCoreNSURLSession which downloads the entire media to be played and
        keep it in memory.

        By modifying the various actors between a MediaResource and WebCoreNSURLSession
        to use SharedBuffers ; we can remove most copies and allocation.
        This also completely eliminates the need for new memory buffer allocations and
        copies by the RangeResponseGenerator object.

        With WK2 and the GPU process, it allows for the memory to be allocated once
        and only be assigned to the content process by using SharedMemory wrapped
        in a SharedBuffer.

        In the future, by refactoring CachedRawResourceClient to use SharedBuffers,
        we could remove further allocation/copies. We could likely get the data from the
        network process all the way to the final client in the GPU process without
        a single copy. This is tracked in bug 232424.

        No change in observable behaviour. Covered by all the existing media tests.

        * platform/SharedBuffer.cpp:
        (WebCore::SharedBufferDataView::size const):
        (WebCore::SharedBufferDataView::trim): Add ability to trim a SharedBufferDataView.
        This allows to avoid having to copy into a new buffer.
        (WebCore::SharedBufferDataView::createSharedBuffer const): Cross declarations
        makes it difficult to add a new SharedBuffer constructor that would take a
        SharedBufferDataView.
        * platform/SharedBuffer.h: Add new methods.
        * platform/cocoa/SharedBufferCocoa.mm: Update to allow for end trimming
        information.
        (-[WebCoreSharedBufferData initWithDataSegment:position:endTrim:]):
        (-[WebCoreSharedBufferData length]):
        (WebCore::SharedBuffer::DataSegment::createNSData const):
        (WebCore::SharedBufferDataView::createNSData const):
        (-[WebCoreSharedBufferData initWithDataSegment:position:]): Deleted.
        * platform/graphics/PlatformMediaResourceLoader.h:
        (WebCore::PlatformMediaResourceClient::dataReceived): Add a new API using
        a SharedBuffer. We keep the old one taking a pointer/size due to a WebKit
        implementation details which allows us to save an intermediary allocation/copy
        when used with SharedMemory.
        * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.mm:
        (WebCore::PlatformResourceMediaLoader::dataReceived):
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (CachedResourceStreamingClient::dataReceived): Update to use SharedBuffer.
        * platform/network/cocoa/RangeResponseGenerator.mm:
        (WebCore::RangeResponseGenerator::giveResponseToTaskIfBytesInRangeReceived):
        * platform/network/cocoa/WebCoreNSURLSession.h: Change prototypes.
        Fly-by fix, property countOfBytesReceived needed to be atomic.
        * platform/network/cocoa/WebCoreNSURLSession.mm:
        (WebCore::WebCoreNSURLSessionDataTaskClient::dataReceived):
        (-[WebCoreNSURLSessionDataTask resource:receivedData:]):
        (-[WebCoreNSURLSessionDataTask resource:receivedRedirect:request:completionHandler:]):

2021-10-29  Kate Cheney  <katherine_cheney@apple.com>

        Crash setting up AVCaptureSession
        https://bugs.webkit.org/show_bug.cgi?id=232507
        <rdar://problem/84820282>

        Reviewed by Jer Noble.

        * platform/mediastream/RealtimeMediaSourceCenter.h:
        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::setupSession):

2021-10-29  Cameron McCormack  <heycam@apple.com>

        Avoid sending video data to Web process for canvas.drawImage(video)
        https://bugs.webkit.org/show_bug.cgi?id=230766
        <rdar://problem/83576009>

        Reviewed by Simon Fraser.

        Using nativeImageForCurrentTime() to get the image to paint on to the
        canvas results in a ShareableBitmap being created to send to the
        Web process, the identifier for which we then send back to the GPU
        process for the drawImage() call. But if we use
        paintCurrentFrameInContext(), this uses the PaintFrameForMedia
        message, which just sends the MediaPlayer ID and avoids the bitmap
        creation.

        * html/canvas/CanvasRenderingContext2DBase.cpp:
        (WebCore::CanvasRenderingContext2DBase::drawImage):
        * platform/graphics/ImageBuffer.h:
        (WebCore::ImageBuffer::isRemote const):

2021-10-29  Antti Koivisto  <antti@apple.com>

        Allow :is/:where after all pseudo elements
        https://bugs.webkit.org/show_bug.cgi?id=232434

        Reviewed by Dean Jackson.

        Any subselectors that are not legal in the context will be removed by the forgiving parsing.
        This matches the behavior in other engines and the discussion in https://github.com/w3c/csswg-drafts/issues/5093.

        The validity check is moved from the compound selector level to the simple selector level. This way if we are
        inside forgiving selector list parsing, it can recover and continue.

        * css/parser/CSSSelectorParser.cpp:
        (WebCore::isLogicalCombinationPseudoClass):
        (WebCore::isPseudoClassValidAfterPseudoElement):
        (WebCore::isSimpleSelectorValidAfterPseudoElement):

        :is(), :where(), and so on are always legal but their content is necessarily not.

        (WebCore::CSSSelectorParser::consumeCompoundSelector):

        Set the preceding pseudo-element as parser state.

        (WebCore::CSSSelectorParser::consumeSimpleSelector):

        Check if the pseudo-class or pseudo-element is valid immediately after consuming it.

        (WebCore::CSSSelectorParser::consumePseudo):

        Disallow nesting in all cases.

        (WebCore::CSSSelectorParser::DisallowPseudoElementsScope::DisallowPseudoElementsScope): Deleted.
        (WebCore::CSSSelectorParser::DisallowPseudoElementsScope::~DisallowPseudoElementsScope): Deleted.

        Just use SetForScope.

        * css/parser/CSSSelectorParser.h:

2021-10-29  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Introduce InlineItemsBuilder
        https://bugs.webkit.org/show_bug.cgi?id=232487

        Reviewed by Antti Koivisto.

        This builder is going to be used for constructing bidi compatible inline items.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * layout/formattingContexts/inline/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::collectContentIfNeeded):
        * layout/formattingContexts/inline/InlineItemsBuilder.cpp: Added.
        (WebCore::Layout::InlineItemsBuilder::InlineItemsBuilder):
        (WebCore::Layout::InlineItemsBuilder::build):
        * layout/formattingContexts/inline/InlineItemsBuilder.h: Added.
        (WebCore::Layout::InlineItemsBuilder::root const):
        (WebCore::Layout::InlineItemsBuilder::formattingState const):

2021-10-29  Darin Adler  <darin@apple.com>

        Create constants for all special frame names used in anchor target attribute values and elsewhere
        https://bugs.webkit.org/show_bug.cgi?id=232488

        Reviewed by Anders Carlsson.

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::handleClick): Use isBlankTargetFrameName.
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::submit): Ditto.

        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::openURLExternally): Use
        blankTargetFrameName and selfTargetFrameName.
        * inspector/agents/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::navigate): Ditto.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadURLIntoChildFrame): Use selfTargetFrameName.
        (WebCore::FrameLoader::loadURL): Use selfTargetFrameName and blankTargetFrameName.
        (WebCore::FrameLoader::loadPostRequest): Use blankTargetFrameName.
        (WebCore::FrameLoader::continueLoadAfterNewWindowPolicy): Ditto.
        (WebCore::createWindow): Use isBlankTargetFrameName.

        * loader/NavigationScheduler.cpp:
        (WebCore::NavigationScheduler::scheduleLocationChange): Use selfTargetFrameName.

        * mathml/MathMLElement.cpp:
        (WebCore::MathMLElement::defaultEventHandler): Use selfTargetFrameName.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::createWindow): Use selfTargetFrameName.
        (WebCore::DOMWindow::open): Use isTopTargetFrameName and isParentTargetFrameName.

        * page/FrameTree.cpp:
        (WebCore::FrameTree::uniqueChildName const): Use isBlankTargetFrameName.
        (WebCore::FrameTree::find const): Use isSelfTargetFrameName, isTopTargetFrameName,
        isParentTargetFrameName, and isBlankTargetFrameName.
        (WebCore::blankTargetFrameName): Added.
        (WebCore::selfTargetFrameName): Added.
        (WebCore::isBlankTargetFrameName): Added.
        (WebCore::isParentTargetFrameName): Added.
        (WebCore::isSelfTargetFrameName): Added.
        (WebCore::isTopTargetFrameName): Added.

        * page/FrameTree.h: Add declarations.

        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::defaultEventHandler): Use blankTargetFrameName.

2021-10-29  Alex Christensen  <achristensen@webkit.org>

        Remove code inside ENABLE(NETSCAPE_PLUGIN_API)
        https://bugs.webkit.org/show_bug.cgi?id=232462

        Reviewed by Anders Carlsson.

        * Headers.cmake:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::ScriptController):
        (WebCore::ScriptController::clearScriptObjects):
        (WebCore::ScriptController::windowScriptNPObject): Deleted.
        * bindings/js/ScriptController.h:
        * bindings/js/ScriptControllerMac.mm:
        (WebCore::ScriptController::createScriptInstanceForWidget):
        * bridge/NP_jsobject.cpp: Removed.
        * bridge/NP_jsobject.h: Removed.
        * bridge/c/CRuntimeObject.cpp: Removed.
        * bridge/c/CRuntimeObject.h: Removed.
        * bridge/c/c_class.cpp: Removed.
        * bridge/c/c_class.h: Removed.
        * bridge/c/c_instance.cpp: Removed.
        * bridge/c/c_instance.h: Removed.
        * bridge/c/c_runtime.cpp: Removed.
        * bridge/c/c_runtime.h: Removed.
        * bridge/c/c_utility.cpp: Removed.
        * bridge/c/c_utility.h: Removed.
        * bridge/npruntime.cpp: Removed.
        * bridge/npruntime_impl.h: Removed.
        * bridge/npruntime_internal.h: Removed.
        * bridge/npruntime_priv.h: Removed.
        * html/HTMLPlugInElement.cpp:
        * page/Frame.cpp:
        * plugins/npapi.h: Removed.
        * plugins/npfunctions.h: Removed.
        * plugins/npruntime.h: Removed.
        * plugins/nptypes.h: Removed.

2021-10-29  Ayumi Kojima  <ayumi_kojima@apple.com>

        Unreviewed, reverting r285038.

        Reverting the commit because it broke the open source test
        runs and also caused an impanct on EWS queues

        Reverted changeset:

        "Create constants for all special frame names used in anchor
        target attribute values and elsewhere"
        https://bugs.webkit.org/show_bug.cgi?id=232488
        https://commits.webkit.org/r285038

2021-10-29  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, revert r284440, r284397, r284359

        r284359 causes Twitter using CPU 100%.
        We reverted r284440 and r284397 too since they rely on r284359 change.

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::init):
        * css/CSSProperties.json:
        * css/LengthFunctions.cpp:
        (WebCore::valueForLength):
        (WebCore::floatValueForLength):
        * css/LengthFunctions.h:
        (WebCore::minimumValueForLength):
        * css/calc/CSSCalcValue.cpp:
        (WebCore::createCSS):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeFlexBasis):
        (WebCore::CSSPropertyParser::consumeFlex):
        * platform/Length.cpp:
        (WebCore::operator<<):
        * platform/Length.h:
        (WebCore::Length::initialize):
        (WebCore::Length::isContent const): Deleted.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeReplacedLogicalWidthUsing const):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::computeMainAxisExtentForChild):
        (WebCore::RenderFlexibleBox::childMainSizeIsDefinite):
        (WebCore::RenderFlexibleBox::childHasComputableAspectRatioAndCrossSizeIsConsideredDefinite):
        (WebCore::RenderFlexibleBox::computeInnerFlexBaseSizeForChild):
        (WebCore::RenderFlexibleBox::computeFlexItemMinMaxSizes):
        (WebCore::RenderFlexibleBox::constructFlexItem):
        (WebCore::RenderFlexibleBox::layoutAndPlaceChildren):
        (WebCore::RenderFlexibleBox::applyStretchAlignmentToChild):
        (WebCore::ScopedUnboundedBoxWithFlexBasisAsChildMainSize::ScopedUnboundedBoxWithFlexBasisAsChildMainSize): Deleted.
        (WebCore::ScopedUnboundedBoxWithFlexBasisAsChildMainSize::~ScopedUnboundedBoxWithFlexBasisAsChildMainSize): Deleted.
        (WebCore::RenderFlexibleBox::computeFlexBaseSizeForChild): Deleted.
        * rendering/RenderFlexibleBox.h:
        * style/StyleBuilderConverter.h:
        (WebCore::Style::BuilderConverter::convertLengthSizing):

2021-10-29  Sihui Liu  <sihui_liu@apple.com>

        Release FileSystemStorageHandle when it is not in use
        https://bugs.webkit.org/show_bug.cgi?id=232363

        Reviewed by Youenn Fablet.

        When FileSystemHandle is destroyed, its corresponding FileSystemStorageHandle should be destroyed as it will
        not be used any more. Also, stop creating a new FileSystemHandle or FileSystemSyncAccessHandle if context 
        already stops.

        * Modules/filesystemaccess/FileSystemDirectoryHandle.cpp:
        (WebCore::FileSystemDirectoryHandle::create):
        (WebCore::FileSystemDirectoryHandle::FileSystemDirectoryHandle):
        (WebCore::FileSystemDirectoryHandle::getFileHandle):
        (WebCore::FileSystemDirectoryHandle::getDirectoryHandle):
        (WebCore::FileSystemDirectoryHandle::getHandle):
        * Modules/filesystemaccess/FileSystemDirectoryHandle.h:
        * Modules/filesystemaccess/FileSystemFileHandle.cpp:
        (WebCore::FileSystemFileHandle::create):
        (WebCore::FileSystemFileHandle::FileSystemFileHandle):
        (WebCore::FileSystemFileHandle::createSyncAccessHandle):
        * Modules/filesystemaccess/FileSystemFileHandle.h:
        * Modules/filesystemaccess/FileSystemHandle.cpp:
        (WebCore::FileSystemHandle::FileSystemHandle):
        * Modules/filesystemaccess/FileSystemHandle.h:
        * Modules/filesystemaccess/FileSystemStorageConnection.h:
        * Modules/filesystemaccess/FileSystemSyncAccessHandle.cpp:
        (WebCore::FileSystemSyncAccessHandle::create):
        (WebCore::FileSystemSyncAccessHandle::FileSystemSyncAccessHandle):
        * Modules/filesystemaccess/FileSystemSyncAccessHandle.h:
        * Modules/filesystemaccess/WorkerFileSystemStorageConnection.cpp:
        (WebCore::WorkerFileSystemStorageConnection::closeHandle):
        * Modules/filesystemaccess/WorkerFileSystemStorageConnection.h:
        * Modules/storage/StorageManager.cpp:
        (WebCore::StorageManager::fileSystemAccessGetDirectory):

2021-10-29  Darin Adler  <darin@apple.com>

        Create constants for all special frame names used in anchor target attribute values and elsewhere
        https://bugs.webkit.org/show_bug.cgi?id=232488

        Reviewed by Anders Carlsson.

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::handleClick): Use isBlankTargetFrameName.
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::submit): Ditto.

        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::openURLExternally): Use
        blankTargetFrameName and selfTargetFrameName.
        * inspector/agents/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::navigate): Ditto.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadURLIntoChildFrame): Use selfTargetFrameName.
        (WebCore::FrameLoader::loadURL): Use selfTargetFrameName and blankTargetFrameName.
        (WebCore::FrameLoader::loadPostRequest): Use blankTargetFrameName.
        (WebCore::FrameLoader::continueLoadAfterNewWindowPolicy): Ditto.
        (WebCore::createWindow): Use isBlankTargetFrameName.

        * loader/NavigationScheduler.cpp:
        (WebCore::NavigationScheduler::scheduleLocationChange): Use selfTargetFrameName.

        * mathml/MathMLElement.cpp:
        (WebCore::MathMLElement::defaultEventHandler): Use selfTargetFrameName.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::createWindow): Use selfTargetFrameName.
        (WebCore::DOMWindow::open): Use isTopTargetFrameName and isParentTargetFrameName.

        * page/FrameTree.cpp:
        (WebCore::FrameTree::uniqueChildName const): Use isBlankTargetFrameName.
        (WebCore::FrameTree::find const): Use isSelfTargetFrameName, isTopTargetFrameName,
        isParentTargetFrameName, and isBlankTargetFrameName.
        (WebCore::blankTargetFrameName): Added.
        (WebCore::selfTargetFrameName): Added.
        (WebCore::isBlankTargetFrameName): Added.
        (WebCore::isParentTargetFrameName): Added.
        (WebCore::isSelfTargetFrameName): Added.
        (WebCore::isTopTargetFrameName): Added.

        * page/FrameTree.h: Add declarations.

        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::defaultEventHandler): Use blankTargetFrameName.

2021-10-29  Aditya Keerthi  <akeerthi@apple.com>

        REGRESSION (r283269) disneyplus.com time remaining bar shows an extra line/bar
        https://bugs.webkit.org/show_bug.cgi?id=232461
        rdar://84561981

        Reviewed by Antti Koivisto.

        The "time remaining" bar on disneyplus.com is implemented using a
        <progress> element. Some elements, including <progress>, drop their
        native appearance depending on which CSS properties are set. For
        example, setting a custom background color on a <progress> element
        prevents us from drawing the native progress bar. This behavior is
        implemented by changing the used value of 'appearance' to 'none'.

        Prior to r283269, there was no distinction between the specified and
        used value for 'appearance'. The logic to set the used value of
        'appearance' to 'none' resulted in the used value being exposed to
        the page. In particular, getComputedStyle() returned the used value for
        for 'appearance' (rather than the specified value), contrary to the
        specification. To fix, r283269 split up the specified value (appearance)
        and the used value (effectiveAppearance) into distinct fields in
        RenderStyle.

        <progress> elements are shadow roots, containing a
        '-webkit-progress-inner-element' in their shadow tree. This element has
        a '-webkit-appearance: inherit' declaration in the UA stylesheet. The
        change in r283269 made it so that the 'none' value obtained as a result
        of styling the <progress> is not inherited by
        '-webkit-progress-inner-element', as it is not the specified value in
        the parent style. Consequently, the '-webkit-progress-inner-element'
        has 'appearance: progress-bar', causing a second bar to show up on
        disneyplus.com.

        To fix, remove the '-webkit-appearance: inherit' declaration for
        '-webkit-progress-inner-element' in the UA stylesheet. The declaration
        was originally added in r124754, to support the 'AuthorShadowDOM'
        feature, but is no longer necessary as it is not possible to attach
        a shadow root to <progress> elements. This change ensures that
        '-webkit-progress-inner-element' has a specified/used 'appearance: none',
        and does not draw an additional progress bar.

        Test: fast/dom/HTMLProgressElement/progress-element-styled-drop-appearance.html

        * css/html.css:
        (progress::-webkit-progress-inner-element):

2021-10-29  Antti Koivisto  <antti@apple.com>

        Make :-webkit-any() a synonym of :is()
        https://bugs.webkit.org/show_bug.cgi?id=232482

        Reviewed by Simon Fraser.

        :-webkit-any() is an obscure obsolete subset version of the standard :is(). It can become a full synonym.
        Another obsolete version :matches() is already a full synonym.

        The main difference is that :is allows complex selectors and uses forgiving parsing.

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne const):
        * css/parser/CSSSelectorParser.cpp:
        (WebCore::CSSSelectorParser::consumePseudo):
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::addPseudoClassType):

2021-10-29  Ayumi Kojima  <ayumi_kojima@apple.com>

        Unreviewed, reverting r285007.

        Reverting r285007 because it caused storage/filesystemaccess
        /sync-access-handle-basics-worker.html to constantly fail.

        Reverted changeset:

        "Release FileSystemStorageHandle when it is not in use"
        https://bugs.webkit.org/show_bug.cgi?id=232363
        https://commits.webkit.org/r285007

2021-10-29  Youenn Fablet  <youenn@apple.com>

        Ensure synchronized rendering of incoming audio tracks
        https://bugs.webkit.org/show_bug.cgi?id=232375

        Reviewed by Eric Carlson.

        WebRTC incoming audio tracks are guaranteed to be synchronized based on the audio module clock.
        Previously, we were mixing all audio tracks together, but we were not handling synchronization of tracks that have the same clock.
        This can cause some lower quality audio rendering.
        To prevent this, all WebRTC incoming audio tracks are now mixed together in a single track that is then mixed with all other non synchronized tracks.
        To do so we introduce IncomingAudioMediaStreamTrackRendererUnit which will receive all incoming audio tracks.
        It then sends the mix to the actual AudioMediaStreamTrackRendererUnit.
        To ensure tight synchronization, we introduce AudioSampleDataSource::pullAvailableSampleChunk which reads data using the provided timestamp relative to the input offset.
        We do a refactoring to make it easy to either use IncomingAudioMediaStreamTrackRendererUnit or AudioMediaStreamTrackRendererUnit by having a base class called BaseAudioMediaStreamTrackRendererUnit.

        Manually tested.

        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        * Modules/mediastream/libwebrtc/LibWebRTCRtpReceiverBackend.cpp:
        * Modules/mediastream/libwebrtc/LibWebRTCRtpReceiverBackend.h:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/EmptyClients.cpp:
        * platform/audio/cocoa/AudioSampleDataSource.h:
        * platform/audio/cocoa/AudioSampleDataSource.mm:
        * platform/mediastream/AudioMediaStreamTrackRenderer.cpp:
        * platform/mediastream/AudioMediaStreamTrackRenderer.h:
        * platform/mediastream/AudioTrackPrivateMediaStream.cpp:
        * platform/mediastream/RealtimeIncomingAudioSource.cpp:
        * platform/mediastream/RealtimeIncomingAudioSource.h:
        * platform/mediastream/cocoa/AudioMediaStreamTrackRendererCocoa.cpp:
        * platform/mediastream/cocoa/AudioMediaStreamTrackRendererCocoa.h:
        * platform/mediastream/cocoa/AudioMediaStreamTrackRendererUnit.h:
        * platform/mediastream/cocoa/BaseAudioMediaStreamTrackRendererUnit.h: Added.
        * platform/mediastream/cocoa/IncomingAudioMediaStreamTrackRendererUnit.cpp: Added.
        * platform/mediastream/cocoa/IncomingAudioMediaStreamTrackRendererUnit.h: Added.
        * platform/mediastream/libwebrtc/LibWebRTCAudioModule.cpp:
        * platform/mediastream/libwebrtc/LibWebRTCAudioModule.h:
        * platform/mediastream/libwebrtc/LibWebRTCProvider.cpp:
        * platform/mediastream/libwebrtc/LibWebRTCProvider.h:
        * platform/mediastream/mac/RealtimeIncomingAudioSourceCocoa.cpp:

2021-10-29  Youenn Fablet  <youenn@apple.com>

        Fix potential race in AudioMediaStreamTrackRendererCocoa::pushSamples
        https://bugs.webkit.org/show_bug.cgi?id=232430

        Reviewed by Eric Carlson.

        In case we start a AudioMediaStreamTrackRendererCocoa, and we quickly stop it, there may be a time
        where we create an AudioSampleDataSource from a background thread, then hop to main thread.
        We would then register it to the rendering unit even if the AudioMediaStreamTrackRendererCocoa is cleared.
        The AudioSampleDataSource would then be kept registered with no data which would be wasteful in terms of CPU.
        To fix this, we keep m_dataSource but introduce a m_registeredDataSource.
        m_registeredDataSource is only manipulated in main thread and is the one that is registered/unregistered to the rendering unit.
        m_dataSource is only accessed from background thread.

        Manually tested and covered by added assertion in AudioMediaStreamTrackRendererCocoa destructor.

        * platform/mediastream/cocoa/AudioMediaStreamTrackRendererCocoa.cpp:
        (WebCore::AudioMediaStreamTrackRendererCocoa::~AudioMediaStreamTrackRendererCocoa):
        (WebCore::AudioMediaStreamTrackRendererCocoa::clear):
        (WebCore::AudioMediaStreamTrackRendererCocoa::setRegisteredDataSource):
        (WebCore::AudioMediaStreamTrackRendererCocoa::pushSamples):
        (WebCore::pollSamplesCount): Deleted.
        * platform/mediastream/cocoa/AudioMediaStreamTrackRendererCocoa.h:

2021-10-29  Youenn Fablet  <youenn@apple.com>

        LocalAudioMediaStreamTrackRendererInternalUnit should clip audio data
        https://bugs.webkit.org/show_bug.cgi?id=232428

        Reviewed by Eric Carlson.

        When using a bluetooth speaker, unclipped audio data triggers distortion, contrary to built-in speakers.
        To prevent this, we clip audio data just before rendering for float audio samples.

        Manually tested.

        * platform/mediastream/cocoa/AudioMediaStreamTrackRendererInternalUnit.cpp:

2021-10-29  Youenn Fablet  <youenn@apple.com>

        AudioMediaStreamTrackRendererUnit::render should handle the case of failing to pull samples from the first source
        https://bugs.webkit.org/show_bug.cgi?id=232429

        Reviewed by Eric Carlson.

        In case we fail to pull samples from the first source, we should copy the data of the second source,
        and so on until we actually copy data. Then we can start mixing data.
        In case all pulls fail, we now output silence.

        * platform/mediastream/cocoa/AudioMediaStreamTrackRendererUnit.cpp:

2021-10-29  Martin Robinson  <mrobinson@webkit.org>

        opacity should flatten when combined with transform-style: preserve-3d
        https://bugs.webkit.org/show_bug.cgi?id=73267

        Reviewed by Simon Fraser.

        No new tests. This is covered by the existing WPT test:
            - imported/w3c/web-platform-tests/css/css-transforms/preserve-3d-flat-grouping-properties.html

        * style/StyleAdjuster.cpp:
        (WebCore::Style::Adjuster::adjust const):

2021-10-28  Tim Horton  <timothy_horton@apple.com>

        Yahoo.com has fragments of wrongly-scaled content throughout when using CGDisplayListImageBufferBackend
        https://bugs.webkit.org/show_bug.cgi?id=232459

        Reviewed by Dean Jackson.

        * platform/graphics/GraphicsContext.h:
        Add a WEBCORE_EXPORT that the compiler now wants.

        * platform/graphics/cg/GraphicsContextCG.h:
        Add a `final` that was missing; not sure why the compiler didn't complain
        about the lack of `final` OR `override`, but it does now!
        Change getCTM and setCTM to `override` instead of `final` so that
        GraphicsContextCGDisplayList can override them.

2021-10-28  Gabriel Nava Marino  <gnavamarino@apple.com>

        Negative length returned by TextUtil::midWordBreak with surrogate pair
        https://bugs.webkit.org/show_bug.cgi?id=232053

        Reviewed by Alan Bujtas.

        When the substring does not fit, the right side is supposed to be the start
        of the surrogate pair if applicable. However, if the start of the surrogate
        pair falls to the left of the startPosition, we will end up returning a
        negative length. Instead, bail out at this point since we know that our
        middle point (which becomes the right) falls before the start position.
        We are not going to find a non-empty fitting content anymore in here.

        * layout/formattingContexts/inline/text/TextUtil.cpp:
        (WebCore::Layout::TextUtil::breakWord):

2021-10-28  Nikos Mouchtaris  <nmouchtaris@apple.com>

        if border-radius includes a var(), the value is not readable from .style
        https://bugs.webkit.org/show_bug.cgi?id=230389

        Reviewed by Myles Maxfield.
        
        Return correct string for shorthand CSS values set by var. Add extra checks for if all 
        longhand properties are pending values and if the requested shorthand property was set
        to a variable. 

        Test: css3/short-hand-var-serialization.html

        * css/StyleProperties.cpp:
        (WebCore::StyleProperties::getPropertyValue const):

2021-10-28  Chris Dumez  <cdumez@apple.com>

        Add stubs for the Web Locks API
        https://bugs.webkit.org/show_bug.cgi?id=232438

        Reviewed by Geoffrey Garen.

        Add stubs for the Web Locks API:
        - https://wicg.github.io/web-locks/#api

        No new tests, rebaselined existing tests.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/web-locks/NavigatorLocks.idl: Added.
        * Modules/web-locks/WebLock.cpp: Added.
        (WebCore::WebLock::create):
        (WebCore::WebLock::WebLock):
        * Modules/web-locks/WebLock.h: Added.
        (WebCore::WebLock::name const):
        (WebCore::WebLock::mode const):
        * Modules/web-locks/WebLock.idl: Added.
        * Modules/web-locks/WebLockGrantedCallback.h: Added.
        * Modules/web-locks/WebLockGrantedCallback.idl: Added.
        * Modules/web-locks/WebLockManager.cpp: Added.
        (WebCore::WebLockManager::create):
        (WebCore::WebLockManager::WebLockManager):
        (WebCore::WebLockManager::request):
        (WebCore::WebLockManager::query):
        * Modules/web-locks/WebLockManager.h: Added.
        * Modules/web-locks/WebLockManager.idl: Added.
        * Modules/web-locks/WebLockMode.h: Added.
        * Modules/web-locks/WebLockMode.idl: Added.
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:
        * page/Navigator.idl:
        * page/NavigatorBase.cpp:
        (WebCore::NavigatorBase::locks):
        * page/NavigatorBase.h:
        * page/WorkerNavigator.idl:

2021-10-28  Myles C. Maxfield  <mmaxfield@apple.com>

        The space glyph in the Filicudi font is not substituted by shaping in the complex text codepath, thereby breaking the visual effect of the font
        https://bugs.webkit.org/show_bug.cgi?id=232293

        Reviewed by Darin Adler.

        Filicudi is a color font where the background of the glyphs is filled with a
        repeating pattern of colored vertical stripes. Each glyph has multiple
        alternates which change the phase of this repeating background pattern. The
        font also has shaping rules to select the right alternate glyph based on the
        previous glyph, so that the phases line up correctly and you get a nice
        repeating pattern throughout the whole line of text.

        You can see this in action here:
        https://fonts.adobe.com/fonts/tipoteca-series#fonts-section

        In the complex text codepath, though, after shaping, we were clobbering the
        glyph used by the space character. We were overwriting it to be the glyph
        that would have been used if there were no shaping. This means that the phase
        of the repeating background for the space glyph was wrong, which broke the
        visual effect of the repeating background on a full line of text.

        The solution is to just stop clobbering the space glyph - but continue to
        clobber the space width. If we stop clobbering the space glyph, then the
        repeating background starts working again. We have to continue to clobber the
        spaceWidth because different parts of webkit measure text in differently-sized
        chunks. For example, computing the preferred widths measures word-by-word, but
        painting - which requires measuring - measures the entire run. In order to have
        these different strategies measure consistently, we have to clobber the widths
        of all the space characters to set them consistently. These space width
        adjustments are small - they're usually due to slight kerning of characters
        like "T" around a space.

        Clobbering one but not the other seems a bit scary, but I think in practice it
        will actually be an improvement, because:
        1) These glyphs we're dealing with here are almost always invisible, so
               clobbering / not clobbering won't have much effect
        2) Because the width adjustments are usually small, the chance for a mismatch
               causing broken rendering is also small.

        Long term, though, we'll stop clobbering space widths, too, because IFC will
        help us be more deliberate about the chunks we measure text in. So, I think
        this patch is both A) an improvement upon what we're shipping today, and
        B) a step in the right future direction.

        Test: fast/text/complex-space-glyph.html

        * platform/graphics/ComplexTextController.cpp:
        (WebCore::ComplexTextController::adjustGlyphsAndAdvances):

2021-10-28  Sihui Liu  <sihui_liu@apple.com>

        Release FileSystemStorageHandle when it is not in use
        https://bugs.webkit.org/show_bug.cgi?id=232363

        Reviewed by Youenn Fablet.

        When FileSystemHandle is destroyed, its corresponding FileSystemStorageHandle should be destroyed as it will
        not be used any more. Also, stop creating a new FileSystemHandle or FileSystemSyncAccessHandle if context 
        already stops.

        * Modules/filesystemaccess/FileSystemDirectoryHandle.cpp:
        (WebCore::FileSystemDirectoryHandle::create):
        (WebCore::FileSystemDirectoryHandle::FileSystemDirectoryHandle):
        (WebCore::FileSystemDirectoryHandle::getFileHandle):
        (WebCore::FileSystemDirectoryHandle::getDirectoryHandle):
        (WebCore::FileSystemDirectoryHandle::getHandle):
        * Modules/filesystemaccess/FileSystemDirectoryHandle.h:
        * Modules/filesystemaccess/FileSystemFileHandle.cpp:
        (WebCore::FileSystemFileHandle::create):
        (WebCore::FileSystemFileHandle::FileSystemFileHandle):
        (WebCore::FileSystemFileHandle::createSyncAccessHandle):
        * Modules/filesystemaccess/FileSystemFileHandle.h:
        * Modules/filesystemaccess/FileSystemHandle.cpp:
        (WebCore::FileSystemHandle::FileSystemHandle):
        * Modules/filesystemaccess/FileSystemHandle.h:
        * Modules/filesystemaccess/FileSystemStorageConnection.h:
        * Modules/filesystemaccess/FileSystemSyncAccessHandle.cpp:
        (WebCore::FileSystemSyncAccessHandle::create):
        (WebCore::FileSystemSyncAccessHandle::FileSystemSyncAccessHandle):
        * Modules/filesystemaccess/FileSystemSyncAccessHandle.h:
        * Modules/filesystemaccess/WorkerFileSystemStorageConnection.cpp:
        (WebCore::WorkerFileSystemStorageConnection::closeHandle):
        * Modules/filesystemaccess/WorkerFileSystemStorageConnection.h:
        * Modules/storage/StorageManager.cpp:
        (WebCore::StorageManager::fileSystemAccessGetDirectory):

2021-10-28  Andres Gonzalez  <andresg_22@apple.com>

        Isolated tree mode: Dispatch all calls to [WebAccessibilityObjectWrapper accessibilityAttributeValue] in WTR::AccessibilityUIElement to the AX thread.
        https://bugs.webkit.org/show_bug.cgi?id=232415
        <rdar://problem/84738483>

        Reviewed by Chris Fleizach.

        Added ASSERTS to verify that AXIsolatedTree::nodeForID and
        applyPendingChanges are called on the AX thread in isolated tree mode 2.

        * accessibility/isolatedtree/AXIsolatedTree.cpp:
        (WebCore::AXIsolatedTree::nodeForID const):
        (WebCore::AXIsolatedTree::applyPendingChanges):

2021-10-28  Nikolaos Mouchtaris  <nmouchtaris@apple.com>

        [Debug] imported/w3c/web-platform-tests/html/canvas/element/path-objects/2d.path.ellipse.basics.html is asserting
        https://bugs.webkit.org/show_bug.cgi?id=218671

        Reviewed by Simon Fraser.

        Add extra check to assert that was failing due to floating point precision error.

        * html/canvas/CanvasPath.cpp:
        (WebCore::normalizeAngles):

2021-10-28  Tim Horton  <timothy_horton@apple.com>

        DOM GPUP: Yahoo.com has fragments of wrongly-scaled content throughout
        https://bugs.webkit.org/show_bug.cgi?id=232356
        <rdar://83884813>

        Reviewed by Simon Fraser.

        * platform/graphics/ConcreteImageBuffer.h:
        * platform/graphics/ImageBufferBackend.cpp:
        (WebCore::ImageBufferBackend::calculateBaseTransform):
        Delegate baseTransform computation to the backend, so that it
        can also compute it itself when applyBaseTransformToContext() is called.

        Multiply resolutionScale into the base transform.

        (WebCore::ImageBufferBackend::applyBaseTransformToContext const):
        Apply the base transform to the context via recordable GraphicsContext
        methods, so that getCTM() returns an accurate CTM that matches the one
        on the replay side.

        Also, apply the device scale factor like setupContext() used to do,
        but *before* setting the CTM so that we don't double-scale.
        In the future we should consider making applyDeviceScaleFactor() *not*
        actually scale the context, instead only touching the CG base CTM;
        I went the opposite direction in r284902 in order to reduce change
        to non-DisplayList clients, but this is a bit messy.

        * platform/graphics/ImageBufferBackend.h:
        (WebCore::ImageBufferBackend::originAtBottomLeftCorner const):
        Add a virtual originAtBottomLeftCorner getter; oddly we need it both
        dynamically (from ImageBufferBackend::calculateBaseTransform) and
        statically (from ConcreteImageBuffer::baseTransform(), which has to
        be callable before the backend is actually realized), so we have both
        this virtual method and the existing static bit.

        * platform/graphics/cg/ImageBufferCGBackend.cpp:
        (WebCore::ImageBufferCGBackend::setupContext const): Deleted.
        * platform/graphics/cg/ImageBufferCGBackend.h:
        * platform/graphics/cg/ImageBufferCGBitmapBackend.cpp:
        (WebCore::ImageBufferCGBitmapBackend::ImageBufferCGBitmapBackend):
        * platform/graphics/cg/ImageBufferIOSurfaceBackend.cpp:
        (WebCore::ImageBufferIOSurfaceBackend::ImageBufferIOSurfaceBackend):
        (WebCore::ImageBufferIOSurfaceBackend::context const):
        Replace setupContext() with a call to applyBaseTransformToContext(),
        which supercedes it.

        * platform/graphics/displaylists/DisplayListRecorder.cpp:
        (WebCore::DisplayList::Recorder::Recorder):
        Map the initial clip back out to base coordinates through the initialCTM;
        I missed this in r284888 because the initialCTM was just a flip, but
        now that it includes a scale this is critical.

2021-10-28  Myles C. Maxfield  <mmaxfield@apple.com>

        [watchOS] Fix logging
        https://bugs.webkit.org/show_bug.cgi?id=232423

        Reviewed by Eric Carlson.

        OSStatus is typedef'ed to an SInt32. On watchOS, SInt32 is typedef'ed to be a signed long.
        A signed long on watchOS is 4 bytes long. On non-watchOS, SInt32 is typedef'ed to be a signed int.
        So, if we want to use printf formatting strings, we have to cast the OSStatus to an int.

        No new tests because there is no behavior change.

        * platform/cocoa/MediaUtilities.cpp:
        (WebCore::createAudioFormatDescription):
        (WebCore::createAudioSampleBuffer):

2021-10-28  Alan Bujtas  <zalan@apple.com>

        REGRESSION(r281422): PLT5 regressed by 1% overall
        https://bugs.webkit.org/show_bug.cgi?id=232391
        <rdar://82530500>

        Reviewed by Antti Koivisto.

        <sub>/<sup> inline boxes with non-integral vertical values and with integral positioned child inline boxes may trigger unexpected vertical overflow.

        * rendering/LegacyRootInlineBox.cpp:
        (WebCore::LegacyRootInlineBox::verticalPositionForBox):

2021-10-28  Aditya Keerthi  <akeerthi@apple.com>

        REGRESSION (r282451): [iOS] Cannot override background of search inputs with 'appearance: textfield'
        https://bugs.webkit.org/show_bug.cgi?id=231503
        rdar://84110684

        Reviewed by Wenson Hsieh.

        r282451 made search inputs with 'appearance: textfield' always have the
        standard text input background color. This change was necessary to fix
        search input styling on sites that did not customize search input
        backgrounds, but relied on 'appearance: textfield' to obtain the
        appropriate styling.

        However, the change also made it so that any customization to the
        background color on top of the UA default was not honored. To fix,
        check if the background color differs from the UA default prior to
        making the adjustment.

        Test: fast/forms/ios/form-control-refresh/search/textfield-appearance-background-styled.html

        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::adjustTextFieldStyle const):

2021-10-28  Youenn Fablet  <youenn@apple.com>

        Fix CARingBuffer mix mode
        https://bugs.webkit.org/show_bug.cgi?id=232427

        Reviewed by Eric Carlson.

        Like done for Copy, we need to use the destination offset to write data properly.

        Covered by API test.

        * platform/audio/cocoa/CARingBuffer.cpp:

2021-10-28  Youenn Fablet  <youenn@apple.com>

        [ Mac wk1 ] 2 media-capabilities/webrtc tests are flaky failures
        https://bugs.webkit.org/show_bug.cgi?id=232283
        <rdar://problem/84637007>

        Reviewed by Eric Carlson.

        Migrate WebRTC H265 and VP9 flags from runtime enabled features to page settings.
        WK1 and WK2 will call Page::settingsDidChange when updating settings so that these settings are pushed to its LibWebRTCProvider.
        This makes sure that in WK1, test runs with the correct settings.

        Covered by existing tests.

        * page/Page.cpp:
        * page/Page.h:
        * page/RuntimeEnabledFeatures.h:
        * testing/Internals.cpp:

2021-10-28  Antti Koivisto  <antti@apple.com>

        Support ::before and ::after pseudo elements after ::slotted
        https://bugs.webkit.org/show_bug.cgi?id=178237

        Reviewed by Ryosuke Niwa.

        Change the way we resolve ::slotted to improve compatibility. We now traverse through the assigned slot chain in
        a single pass, similar to ::part matching.

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::selectorText const):
        * css/CSSSelector.h:

        Add a new selection relation ShadowSlotted, similar to the existing ShadowDescendant and ShadowPartDescendant,
        for switching scopes during selector matching.

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::matchRecursively const):

        Find the right scope to continue matching on ShadowSlotted relation. Pass in the scope ordinal to find the scope.

        (WebCore::SelectorChecker::checkOne const):

        Match the ::slotted() element.

        * css/SelectorChecker.h:
        * css/SelectorFilter.cpp:
        (WebCore::collectSelectorHashes):
        * css/parser/CSSParserSelector.h:
        (WebCore::CSSParserSelector::needsImplicitShadowCombinatorForMatching const):
        * css/parser/CSSSelectorParser.cpp:
        (WebCore::isPseudoClassValidAfterPseudoElement):
        (WebCore::isTreeAbidingPseudoElement):

        Add a spec-termed helper.

        (WebCore::isSimpleSelectorValidAfterPseudoElement):
        (WebCore::CSSSelectorParser::splitCompoundAtImplicitShadowCrossingCombinator):

        Insert ShadowSlotted relation for ::slotted().

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::fragmentRelationForSelectorRelation):
        (WebCore::SelectorCompiler::constructFragmentsInternal):
        * style/ElementRuleCollector.cpp:
        (WebCore::Style::ElementRuleCollector::clearMatchedRules):
        (WebCore::Style::ElementRuleCollector::matchSlottedPseudoElementRules):

        Simply get the rules from scopes in the assinged slot chaing and match against them.
        No need for two passes.

        (WebCore::Style::ElementRuleCollector::ruleMatches):
        (WebCore::Style::ElementRuleCollector::collectMatchingRulesForList):
        (WebCore::Style::ElementRuleCollector::collectSlottedPseudoElementRulesForSlot): Deleted.

        Not needed anymore.

        (WebCore::Style::findSlottedPseudoElementSelector): Deleted.
        * style/ElementRuleCollector.h:
        * style/RuleFeature.cpp:
        (WebCore::Style::RuleFeatureSet::computeNextMatchElement):

2021-10-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        AX: AXValueChanged is only sent for range elements when value is changed with the keyboard
        https://bugs.webkit.org/show_bug.cgi?id=232298
        <rdar://problem/84653767>

        Reviewed by Andres Gonzalez.

        It should always be sent.

        Test: accessibility/gtk/html-slider-indicator.html

        * html/InputType.cpp:
        (WebCore::InputType::setValue): Send AXValueChanged for range elements.
        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::handleKeydownEvent): Remove the AXValueChanged notification from here.

2021-10-28  Youenn Fablet  <youenn@apple.com>

        Fetch API: Network process leaks when blobs are unused
        https://bugs.webkit.org/show_bug.cgi?id=232371
        <rdar://problem/84704184>

        Reviewed by Geoffrey Garen.

        Make sure to unregister the internal URL when the blob gets destroyed.

        Test: http/wpt/fetch/blob-gc.html

        * fileapi/Blob.cpp:
        * fileapi/ThreadableBlobRegistry.h:
        * testing/Internals.cpp:
        * testing/Internals.h:
        * testing/Internals.idl:

2021-10-27  Gabriel Nava Marino  <gnavamarino@apple.com>

        Assertions in findFirstSlotElement hit when removing two slots with the same name in a single shadow tree
        https://bugs.webkit.org/show_bug.cgi?id=232409

        Reviewed by Ryosuke Niwa.

        When resolveSlotsAfterSlotMutation is called during removeAllChildrenWithScriptAssertion,
        it can clear slot.element but not slot.elementCount, which is decremented for each
        slot element in removeSlotElementByName. When multiple slots elements are removed in
        removeAllChildrenWithScriptAssertion, this results in slot.element being null but
        slot.elementCount not being zero in findFirstSlotElement called within destroyRenderTreeIfNeeded.

        This patch removes assertions in findFirstSlotElement which wrongly asserted this condition to never happen.

        Test: fast/shadow-dom/slot-removal-same-name.html

        * dom/SlotAssignment.cpp:
        (WebCore::SlotAssignment::findFirstSlotElement):

2021-10-27  Chris Dumez  <cdumez@apple.com>

        Disable relaxation of BroadcastChannel origin partitioning based on storage access
        https://bugs.webkit.org/show_bug.cgi?id=232401

        Reviewed by John Wilander.

        Disable relaxation of BroadcastChannel origin partitioning based on storage access (r282366).
        Only Gecko does this at the moment and it appears they want to drop this behavior.

        This patch is a revert of the behavior added in r282366.

        * dom/BroadcastChannel.cpp:
        (WebCore::shouldPartitionOrigin):

2021-10-27  Kiet Ho  <tho22@apple.com>

        Add discrete animation support between PathOperations
        https://bugs.webkit.org/show_bug.cgi?id=232366

        Reviewed by Simon Fraser.

        Updated the code responsible for blending two PathOperations to account for discrete animation.
        Implemented PropertyWrapperClipPath::canInterpolate, used to determine if a CSS transition is possible
        (if animation between two PathOperations is discrete, then canInterpolate() is false, and no transitions
        are created).

        Tests: imported/w3c/web-platform-tests/css/css-masking/animations/clip-path-composition.html
               imported/w3c/web-platform-tests/css/css-masking/animations/clip-path-interpolation-001.html
               imported/w3c/web-platform-tests/css/css-masking/animations/clip-path-interpolation-002.html

        * animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFunc):

2021-10-27  Chris Dumez  <cdumez@apple.com>

        autofocus IDL attribute should be exposed on all HTML or SVG elements
        https://bugs.webkit.org/show_bug.cgi?id=232349

        Reviewed by Darin Adler.

        autofocus IDL attribute should be exposed on all HTML or SVG elements:
        - https://html.spec.whatwg.org/multipage/dom.html#htmlorsvgelement
        - https://html.spec.whatwg.org/multipage/interaction.html#dom-fe-autofocus
        - https://html.spec.whatwg.org/multipage/interaction.html#the-autofocus-attribute

        Previously, WebKit only exposed the autofocus attribute on form control elements.

        No new tests, rebaselined existing tests.

        * dom/Element.cpp:
        (WebCore::shouldAutofocus):
        (WebCore::Element::insertedIntoAncestor):
        * html/HTMLButtonElement.idl:
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::insertedIntoAncestor):
        (WebCore::shouldAutofocus): Deleted.
        * html/HTMLInputElement.idl:
        * html/HTMLKeygenElement.idl:
        * html/HTMLOrForeignElement.idl:
        * html/HTMLSelectElement.idl:
        * html/HTMLTextAreaElement.idl:
        * svg/svgattrs.in:

2021-10-27  Kate Cheney  <katherine_cheney@apple.com>

        REGRESSION (r284650-284661): [iOS15 Sim] imported/w3c/web-platform-tests/content-security-policy/script-src/script-src-multiple-policies-multiple-hashing-algorithms.html is a text failure
        https://bugs.webkit.org/show_bug.cgi?id=232120
        <rdar://problem/84529888>

        Reviewed by Brent Fulgham.

        Flaky test was caused by a race condition between 2 error messages in
        the test. To fix the flakiness, this patch fixes a bug so the test
        will now pass.

        This adds support for multiple CSP policies with different hashes for the
        same script, e.g. one for sha256 and one for sha384. Instead of
        sending the hash from one algorithm to check against all policies, we
        now send hashes from all specified algorithms and make sure each
        policy allows at least one of them.

        * page/csp/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::findHashOfContentInPolicies const):
        * page/csp/ContentSecurityPolicyDirectiveList.cpp:
        (WebCore::checkUnsafeHashes):
        (WebCore::checkHashes):
        (WebCore::ContentSecurityPolicyDirectiveList::violatedDirectiveForUnsafeHashScript const):
        (WebCore::ContentSecurityPolicyDirectiveList::violatedDirectiveForUnsafeHashStyle const):
        (WebCore::ContentSecurityPolicyDirectiveList::violatedDirectiveForScriptHash const):
        (WebCore::ContentSecurityPolicyDirectiveList::violatedDirectiveForStyleHash const):
        (WebCore::checkHash): Deleted.
        * page/csp/ContentSecurityPolicyDirectiveList.h:
        * page/csp/ContentSecurityPolicySourceList.cpp:
        (WebCore::ContentSecurityPolicySourceList::matches const):
        * page/csp/ContentSecurityPolicySourceList.h:
        * page/csp/ContentSecurityPolicySourceListDirective.cpp:
        (WebCore::ContentSecurityPolicySourceListDirective::allows const):
        (WebCore::ContentSecurityPolicySourceListDirective::allowUnsafeHashes const):
        * page/csp/ContentSecurityPolicySourceListDirective.h:

2021-10-27  Chris Dumez  <cdumez@apple.com>

        JavaScript URL result should be treated as UTF-8 bytes
        https://bugs.webkit.org/show_bug.cgi?id=232380

        Reviewed by Darin Adler.

        JavaScript URL result should be treated as UTF-8 bytes:
        - https://github.com/whatwg/html/pull/6781

        No new tests, rebaselined existing test.

        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::replaceDocumentWithResultOfExecutingJavascriptURL):

2021-10-27  Martin Robinson  <mrobinson@webkit.org>

        Eliminate duplicated platform-specific code in ScrollingTreeStickyNode
        https://bugs.webkit.org/show_bug.cgi?id=231571

        Reviewed by Simon Fraser.

        Abstract code from the Nicosia and Cooca version of ScrollingTreeStickyNode,
        so that it can be shared by both ports.

        No new tests. This should not change any behavior.

        * Headers.cmake:
        * PlatformMac.cmake:
        * PlatformPlayStation.cmake:
        * Sources.txt:
        * SourcesCocoa.txt:
        * SourcesGTK.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * page/scrolling/ScrollingTreeStickyNode.cpp: Renamed from Source/WebCore/page/scrolling/nicosia/ScrollingTreeStickyNode.cpp.
        (WebCore::ScrollingTreeStickyNode::commitStateBeforeChildren):
        (WebCore::ScrollingTreeStickyNode::dumpProperties const):
        * page/scrolling/ScrollingTreeStickyNode.h: Copied from Source/WebCore/page/scrolling/nicosia/ScrollingTreeStickyNode.h.
        * page/scrolling/cocoa/ScrollingTreeFixedNode.mm:
        (WebCore::ScrollingTreeFixedNode::applyLayerPositions):
        * page/scrolling/cocoa/ScrollingTreeStickyNode.mm: Removed.
        (WebCore::ScrollingTreeStickyNode::create): Deleted.
        (WebCore::ScrollingTreeStickyNode::ScrollingTreeStickyNode): Deleted.
        (WebCore::ScrollingTreeStickyNode::~ScrollingTreeStickyNode): Deleted.
        (WebCore::ScrollingTreeStickyNode::commitStateBeforeChildren): Deleted.
        (WebCore::ScrollingTreeStickyNode::computeLayerPosition const): Deleted.
        (WebCore::ScrollingTreeStickyNode::applyLayerPositions): Deleted.
        (WebCore::ScrollingTreeStickyNode::scrollDeltaSinceLastCommit const): Deleted.
        (WebCore::ScrollingTreeStickyNode::dumpProperties const): Deleted.
        * page/scrolling/cocoa/ScrollingTreeStickyNodeCocoa.h: Renamed from Source/WebCore/page/scrolling/cocoa/ScrollingTreeStickyNode.h.
        * page/scrolling/cocoa/ScrollingTreeStickyNodeCocoa.mm: Added.
        (WebCore::ScrollingTreeStickyNodeCocoa::create):
        (WebCore::ScrollingTreeStickyNodeCocoa::ScrollingTreeStickyNodeCocoa):
        (WebCore::ScrollingTreeStickyNodeCocoa::commitStateBeforeChildren):
        (WebCore::ScrollingTreeStickyNodeCocoa::applyLayerPositions):
        (WebCore::ScrollingTreeStickyNodeCocoa::layerTopLeft const):
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        * page/scrolling/mac/ScrollingTreeMac.mm:
        (ScrollingTreeMac::createScrollingTreeNode):
        * page/scrolling/nicosia/ScrollingTreeNicosia.cpp:
        (WebCore::ScrollingTreeNicosia::createScrollingTreeNode):
        * page/scrolling/nicosia/ScrollingTreeStickyNodeNicosia.cpp: Added.
        (WebCore::ScrollingTreeStickyNodeNicosia::create):
        (WebCore::ScrollingTreeStickyNodeNicosia::ScrollingTreeStickyNodeNicosia):
        (WebCore::ScrollingTreeStickyNodeNicosia::commitStateBeforeChildren):
        (WebCore::ScrollingTreeStickyNodeNicosia::applyLayerPositions):
        (WebCore::ScrollingTreeStickyNodeNicosia::layerTopLeft const):
        * page/scrolling/nicosia/ScrollingTreeStickyNodeNicosia.h: Renamed from Source/WebCore/page/scrolling/nicosia/ScrollingTreeStickyNode.h.
        * platform/TextureMapper.cmake:

2021-10-26  Tim Horton  <timothy_horton@apple.com>

        [GPU Process] `DisplayList::Recorder::getCTM` should include the device scale factor
        https://bugs.webkit.org/show_bug.cgi?id=230647

        Reviewed by Simon Fraser.

        New test: BifurcatedGraphicsContextTests.ApplyDeviceScaleFactor

        * platform/graphics/displaylists/DisplayListRecorder.cpp:
        (WebCore::DisplayList::Recorder::getCTM const):
        (WebCore::DisplayList::Recorder::applyDeviceScaleFactor):
        applyDeviceScaleFactor previously did not apply the scale to the CTM,
        causing the DisplayList::Recorder's idea of the CTM to get out of sync
        with the context being replayed into.

        We don't call GraphicsContext::scale() directly (like GraphicsContextCG does)
        because applyDeviceScaleFactor on the replay side will apply the scale
        to the replayed context's CTM.

2021-10-26  Chris Dumez  <cdumez@apple.com>

        Changing the src attribute of the <img> element inside an ImageDocument does not trigger a load
        https://bugs.webkit.org/show_bug.cgi?id=232323

        Reviewed by Alex Christensen.

        Changing the src attribute of the <img> element inside an ImageDocument does not trigger a load.
        This is because when constructing the ImageDocument, we set that <img> element's ImageLoader into
        manual loading mode so that we can feed it the network response we already have instead of triggering
        a new load.

        To address the issue, we now reset the <img> element's ImageLoader to automatic loading mode once
        we've set its initial src attribute. Setting the src attribute is what ends up calling
        ImageLoader::updateFromElement(), which checks the |manual loading| flag. This way, any later attempt
        to change the src attribute will actually trigger an automatic load.

        No new tests, unskipped existing test.

        * html/ImageDocument.cpp:
        (WebCore::ImageDocument::createDocumentStructure):

2021-10-26  Sihui Liu  <sihui_liu@apple.com>

        FileSystemHandle should be ContextDestructionObserver
        https://bugs.webkit.org/show_bug.cgi?id=231250
        <rdar://problem/84164797>

        Reviewed by Youenn Fablet.

        Make FileSystemHandle and FileSystemSyncAccessHandle ActiveDOMObject to close them when context stops.

        * Modules/filesystemaccess/FileSystemDirectoryHandle.cpp:
        (WebCore::FileSystemDirectoryHandle::create):
        (WebCore::FileSystemDirectoryHandle::FileSystemDirectoryHandle):
        (WebCore::FileSystemDirectoryHandle::getFileHandle):
        (WebCore::FileSystemDirectoryHandle::getDirectoryHandle):
        (WebCore::FileSystemDirectoryHandle::removeEntry):
        (WebCore::FileSystemDirectoryHandle::resolve):
        (WebCore::FileSystemDirectoryHandle::getHandleNames):
        (WebCore::FileSystemDirectoryHandle::getHandle):
        * Modules/filesystemaccess/FileSystemDirectoryHandle.h:
        * Modules/filesystemaccess/FileSystemFileHandle.cpp:
        (WebCore::FileSystemFileHandle::create):
        (WebCore::FileSystemFileHandle::FileSystemFileHandle):
        (WebCore::FileSystemFileHandle::createSyncAccessHandle):
        (WebCore::FileSystemFileHandle::getSize):
        (WebCore::FileSystemFileHandle::truncate):
        (WebCore::FileSystemFileHandle::flush):
        (WebCore::FileSystemFileHandle::close):
        * Modules/filesystemaccess/FileSystemFileHandle.h:
        * Modules/filesystemaccess/FileSystemHandle.cpp:
        (WebCore::FileSystemHandle::FileSystemHandle):
        (WebCore::FileSystemHandle::isSameEntry const):
        (WebCore::FileSystemHandle::move):
        (WebCore::FileSystemHandle::activeDOMObjectName const):
        (WebCore::FileSystemHandle::stop):
        * Modules/filesystemaccess/FileSystemHandle.h:
        (WebCore::FileSystemHandle::isClosed const):
        * Modules/filesystemaccess/FileSystemHandle.idl:
        * Modules/filesystemaccess/FileSystemSyncAccessHandle.cpp:
        (WebCore::FileSystemSyncAccessHandle::create):
        (WebCore::FileSystemSyncAccessHandle::FileSystemSyncAccessHandle):
        (WebCore::FileSystemSyncAccessHandle::~FileSystemSyncAccessHandle):
        (WebCore::FileSystemSyncAccessHandle::isClosingOrClosed const):
        (WebCore::FileSystemSyncAccessHandle::close):
        (WebCore::FileSystemSyncAccessHandle::closeInternal):
        (WebCore::FileSystemSyncAccessHandle::didClose):
        (WebCore::FileSystemSyncAccessHandle::activeDOMObjectName const):
        (WebCore::FileSystemSyncAccessHandle::stop):
        * Modules/filesystemaccess/FileSystemSyncAccessHandle.h:
        * Modules/filesystemaccess/FileSystemSyncAccessHandle.idl:
        * Modules/storage/StorageManager.cpp:
        (WebCore::StorageManager::fileSystemAccessGetDirectory):

2021-10-26  Chris Dumez  <cdumez@apple.com>

        error event should be fired at <style> element when @import rule fails parsing due to MIME type
        https://bugs.webkit.org/show_bug.cgi?id=232313

        Reviewed by Darin Adler.

        StyleRuleImport was failing to check the result of StyleSheetContents::parseAuthorStyleSheet()
        to make sure parsing actually succeeded and was thus not notifying its owner <style> element
        of the failure.

        No new tests, unskipped / rebaselined existing tests.

        * css/StyleRuleImport.cpp:
        (WebCore::StyleRuleImport::setCSSStyleSheet):

2021-10-26  Chris Dumez  <cdumez@apple.com>

        html/semantics/embedded-content/the-img-element/adoption.html is timing out
        https://bugs.webkit.org/show_bug.cgi?id=232320

        Reviewed by Darin Adler.

        When an <img> moves to a new document, we're supposed to update the image's data.
        In HTMLImageElement::didMoveToNewDocument(), we would call HTMLPictureElement::sourcesChanged()
        if the <img> element has a parent <picture> element, which would update the image's data.
        However, in the absence of a parent <picture> element, we would do nothing. This patch calls
        selectImageSource() when the <img> element as a src / srcset attribute to make sure the
        image data gets updated.

        No new tests, rebaselined existing test.

        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::didMoveToNewDocument):

2021-10-26  Tim Horton  <timothy_horton@apple.com>

        DisplayList::Recorder's clipBounds() becomes empty if a flip is applied to the CTM
        https://bugs.webkit.org/show_bug.cgi?id=232134

        Reviewed by Darin Adler.

        New test: BifurcatedGraphicsContextTests.TransformedClip

        * platform/graphics/displaylists/DisplayListRecorder.cpp:
        (WebCore::DisplayList::Recorder::clip):
        (WebCore::DisplayList::Recorder::clipPath):
        (WebCore::DisplayList::Recorder::clipBounds const):
        Instead of updating clipBounds any time the CTM changes, store
        clipBounds in base coordinates and map through the CTM when retrieved.

        This matches CG's behavior and makes the clipBounds much sturdier.
        For example, previously, applying a `scale(1, -1)` to the context
        would immediately result in the clipBounds' height becoming negative,
        making the bounds empty and confusing anything that reads from it.

        (WebCore::DisplayList::Recorder::ContextState::translate):
        (WebCore::DisplayList::Recorder::ContextState::rotate):
        (WebCore::DisplayList::Recorder::ContextState::scale):
        (WebCore::DisplayList::Recorder::ContextState::setCTM):
        (WebCore::DisplayList::Recorder::ContextState::concatCTM):
        Stop updating the clipBounds when the CTM changes, this is no longer necessary.

        * platform/graphics/displaylists/DisplayListRecorderImpl.cpp:
        (WebCore::DisplayList::RecorderImpl::extentFromLocalBounds):
        Since the clipBounds is now in base space, map the display list
        item bounds to base space /before/ intersecting it with clipBounds.

        * platform/graphics/displaylists/DisplayListRecorder.h:
        Drive-by add a default parameter so getCTM can be called on the subclass the same way it can on GraphicsContext.

        * platform/graphics/transforms/AffineTransform.h: Fix a typo.

2021-10-26  Chris Dumez  <cdumez@apple.com>

        <link> elements should be able to fire more than one load / error event
        https://bugs.webkit.org/show_bug.cgi?id=232309

        Reviewed by Darin Adler.

        We had logic to only fire a single load / error event for <link> elements, even
        though they could do several loads. This logic is not part of the specification
        and was causing us to fail some WPT tests.

        No new tests, unskipped existing tests.

        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::HTMLLinkElement):
        (WebCore::HTMLLinkElement::notifyLoadedSheetAndAllCriticalSubresources):
        * html/HTMLLinkElement.h:

2021-10-26  Ziran Sun  <zsun@igalia.com>

        Fix CSS serialization affecting grid-auto-flow
        https://bugs.webkit.org/show_bug.cgi?id=232240

        Reviewed by Sergio Villar Senin.

        This is to fix the serialization issue of grid-auto-flow where the word 'row' has been
        included necessarily.

        This Change is an import of chromium CL at
        https://chromium-review.googlesource.com/c/chromium/src/+/3179598

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::valueForPropertyInStyle):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeGridAutoFlow):

2021-10-26  Gabriel Nava Marino  <gnavamarino@apple.com>

        ASSERT(parent->element()) triggered in Styleable::fromRenderer
        https://bugs.webkit.org/show_bug.cgi?id=232185

        Reviewed by Tim Nguyen and Antti Koivisto.

        The marker renderer can be set as a child of RenderMultiColumnFlowThread
        instead of RenderListItem in some instances. RenderMultiColumnFlowThread is
        an anonymous box and doesn't have an associated element, so we instead should
        loop through the parents until we find the RenderListItem which does have an
        associated element.

        Test: fast/animation/css-animation-marker-crash.html

        * style/Styleable.cpp:
        (WebCore::Styleable::fromRenderer):

2021-10-26  Philippe Normand  <pnormand@igalia.com>

        REGRESSION(242280@main) fast/mediastream/captureStream/canvas3d.html is timing out
        https://bugs.webkit.org/show_bug.cgi?id=231061
        <rdar://problem/84012523>

        Reviewed by Xabier Rodriguez-Calvar.

        Implement WebGL canvas sampling for GStreamer ports.

        * platform/graphics/opengl/GraphicsContextGLOpenGL.cpp:
        (WebCore::GraphicsContextGLOpenGL::paintCompositedResultsToMediaSample):

2021-10-26  Antti Koivisto  <antti@apple.com>

        Fix ::part(foo):hover
        https://bugs.webkit.org/show_bug.cgi?id=232301

        Reviewed by Alan Bujtas.

        We fail to match on shadow tree border if the right side of ::part() has other selectors.

        Tests: imported/w3c/web-platform-tests/css/css-shadow-parts/invalidation-part-pseudo.html

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::selectorText const):
        * css/CSSSelector.h:

        Add a new ShadowPartDescendant relation type that behaves like the existing ShadowDescendant relation
        except it is only used for ::part.

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::matchRecursively const):

        We can now identify the ::part case easily from the relation type.

        (WebCore::canMatchHoverOrActiveInQuirksMode):
        * css/SelectorFilter.cpp:
        (WebCore::collectSelectorHashes):
        * css/parser/CSSParserSelector.h:
        (WebCore::CSSParserSelector::hasShadowDescendant const): Deleted.
        * css/parser/CSSSelectorParser.cpp:
        (WebCore::CSSSelectorParser::splitCompoundAtImplicitShadowCrossingCombinator):

        Use ShadowPartDescendant as appropriate.

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::fragmentRelationForSelectorRelation):
        (WebCore::SelectorCompiler::constructFragmentsInternal):
        * style/RuleFeature.cpp:
        (WebCore::Style::RuleFeatureSet::computeNextMatchElement):

2021-10-26  Antti Koivisto  <antti@apple.com>

        Serialize :part() argument as identifier
        https://bugs.webkit.org/show_bug.cgi?id=232297

        Reviewed by Youenn Fablet.

        WPT fix.

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::selectorText const):

2021-10-26  Youenn Fablet  <youenn@apple.com>

        Only one AudioSampleDataSource::pullSamples is needed
        https://bugs.webkit.org/show_bug.cgi?id=232145

        Reviewed by Eric Carlson.

        Update CoreAudioSharedUnit::provideSpeakerData to use pullSamples taking an AudioBufferList as parameter.
        Remove the no longer necessary AudioSampleDataSource::pullSamples and rename pullSamplesInternal in pullSamples.
        Update header to forward declare more classes.
        This is a refactoring, no change of behavior.

        * platform/audio/cocoa/AudioSampleDataSource.h:
        * platform/audio/cocoa/AudioSampleDataSource.mm:
        (WebCore::AudioSampleDataSource::pullSamples):
        (WebCore::AudioSampleDataSource::pullSamplesInternal): Deleted.
        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
        (WebCore::CoreAudioSharedUnit::provideSpeakerData):

2021-10-26  Youenn Fablet  <youenn@apple.com>

        Beef up worker termination handling in ReadableStream routines
        https://bugs.webkit.org/show_bug.cgi?id=231500
        <rdar://83687915>

        Reviewed by Darin Adler.

        Add some termination/exception checks after getting values from global objects.
        Covered by existing tests.

        * bindings/js/ReadableStream.cpp:
        (WebCore::ReadableStream::create):
        (WebCore::ReadableStream::lock):
        * bindings/js/ReadableStreamDefaultController.cpp:
        (WebCore::invokeReadableStreamDefaultControllerFunction):
        (WebCore::ReadableStreamDefaultController::enqueue):

2021-10-26  Youenn Fablet  <youenn@apple.com>

        Decrease WebRTC latency by pulling data more often
        https://bugs.webkit.org/show_bug.cgi?id=232143

        Reviewed by Eric Carlson.

        We were previously pulling 10 ms chunks by groups of 5, we then redunced to 3.
        Let's reduce to 1 to further reduce WebRTC remote audio track latency.
        This triggers scheduling of 100 tasks per second instead of 33 previously.

        * platform/mediastream/libwebrtc/LibWebRTCAudioModule.h:

2021-10-26  Antti Koivisto  <antti@apple.com>

        [CSS Cascade Layers] Media queries should be able to affect layer order
        https://bugs.webkit.org/show_bug.cgi?id=232238

        Reviewed by Simon Fraser.

        Cases like

        @media (min-width: 500px) { @layer a, b; }
        @media (min-width: 200px) { @layer b, a; }

        should work as expected.

        Tests: imported/w3c/web-platform-tests/css/css-cascade/layer-media-query.html

        * style/RuleSetBuilder.cpp:
        (WebCore::Style::RuleSetBuilder::addRulesFromSheet):
        (WebCore::Style::RuleSetBuilder::addChildRules):

        Disable dynamic media query evaluation for now when we see a @layer rule within a media query.

        * style/RuleSetBuilder.h:

        Tests: imported/w3c/web-platform-tests/css/css-cascade/layer-media-query.html

        * style/RuleSetBuilder.cpp:
        (WebCore::Style::RuleSetBuilder::addRulesFromSheet):
        (WebCore::Style::RuleSetBuilder::addChildRules):
        * style/RuleSetBuilder.h:

2021-10-26  Adrian Perez de Castro  <aperez@igalia.com>

        Multiple build issues with ENABLE_VIDEO=OFF
        https://bugs.webkit.org/show_bug.cgi?id=232264

        Reviewed by Carlos Garcia Campos.

        No new tests needed.

        * accessibility/AXObjectCache.cpp:
        (WebCore::isSimpleImage): Guard usage of HTMLMediaElement with ENABLE(VIDEO).
        * page/EventHandler.cpp:
        (WebCore::EventHandler::textRecognitionCandidateElement const): Ditto.
        * platform/graphics/BifurcatedGraphicsContext.cpp: Ditto.
        * platform/graphics/displaylists/DisplayListRecorder.h: Guard usage of MediaPlayer with
        ENABLE(VIDEO).
        * platform/graphics/displaylists/DisplayListRecorderImpl.cpp: Ditto.
        * platform/graphics/displaylists/DisplayListRecorderImpl.h: Ditto.

2021-10-26  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WebCore] Remove unneeded WTF:: namespace prefix
        https://bugs.webkit.org/show_bug.cgi?id=232226

        Reviewed by Myles C. Maxfield.

        * Modules/applepay/ApplePaySessionError.h:
        * Modules/applepay/PaymentCoordinator.cpp:
        (WebCore::PaymentCoordinator::canMakePaymentsWithActiveCard):
        (WebCore::PaymentCoordinator::openPaymentSetup):
        * Modules/applepay/PaymentCoordinator.h:
        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.h:
        * Modules/encryptedmedia/CDM.h:
        * Modules/encryptedmedia/MediaKeySession.h:
        * Modules/encryptedmedia/MediaKeyStatusMap.cpp:
        (WebCore::MediaKeyStatusMap::Iterator::next):
        * Modules/encryptedmedia/MediaKeyStatusMap.h:
        * Modules/encryptedmedia/MediaKeys.h:
        * Modules/encryptedmedia/NavigatorEME.cpp:
        (WebCore::NavigatorEME::requestMediaKeySystemAccess):
        (WebCore::tryNextSupportedConfiguration):
        * Modules/encryptedmedia/legacy/LegacyCDM.h:
        * Modules/entriesapi/DOMFileSystem.h:
        * Modules/entriesapi/FileSystemDirectoryEntry.h:
        * Modules/fetch/FetchHeaders.cpp:
        (WebCore::fillHeaderMap):
        (WebCore::FetchHeaders::Iterator::next):
        * Modules/fetch/FetchHeaders.h:
        * Modules/fetch/FetchResponse.h:
        * Modules/filesystemaccess/FileSystemDirectoryHandle.cpp:
        (WebCore::FileSystemDirectoryHandleIterator::advance):
        * Modules/filesystemaccess/FileSystemDirectoryHandle.h:
        * Modules/gamepad/GamepadManager.h:
        * Modules/indexeddb/IDBActiveDOMObject.h:
        (WebCore::IDBActiveDOMObject::callFunctionOnOriginThread):
        * Modules/indexeddb/IDBDatabaseIdentifier.h:
        * Modules/indexeddb/IDBIndex.cpp:
        (WebCore::IDBIndex::doOpenCursor):
        (WebCore::IDBIndex::doOpenKeyCursor):
        (WebCore::IDBIndex::doGetAll):
        (WebCore::IDBIndex::doGetAllKeys):
        * Modules/indexeddb/IDBIndex.h:
        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::doOpenCursor):
        (WebCore::IDBObjectStore::doOpenKeyCursor):
        (WebCore::IDBObjectStore::doDelete):
        (WebCore::IDBObjectStore::doGetAll):
        (WebCore::IDBObjectStore::doGetAllKeys):
        * Modules/indexeddb/IDBObjectStore.h:
        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
        (WebCore::IDBServer::v1RecordsTableSchema):
        (WebCore::IDBServer::v1RecordsTableSchemaAlternate):
        (WebCore::IDBServer::v2RecordsTableSchema):
        (WebCore::IDBServer::v2RecordsTableSchemaAlternate):
        (WebCore::IDBServer::v1IndexRecordsTableSchema):
        (WebCore::IDBServer::v1IndexRecordsTableSchemaAlternate):
        (WebCore::IDBServer::v2IndexRecordsTableSchema):
        (WebCore::IDBServer::v2IndexRecordsTableSchemaAlternate):
        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::putOrAdd):
        * Modules/mediasession/MediaSession.cpp:
        (WebCore::platformCommandForMediaSessionAction):
        * Modules/mediasession/MediaSession.h:
        * Modules/mediasession/MediaSessionCoordinatorPrivate.h:
        (WebCore::MediaSessionCoordinatorPrivate::loggerPtr const):
        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::applyConstraints):
        * Modules/mediastream/RTCRtpReceiver.cpp:
        * Modules/mediastream/RTCRtpSender.cpp:
        * Modules/mediastream/UserMediaClient.h:
        * Modules/mediastream/UserMediaController.h:
        (WebCore::UserMediaController::addDeviceChangeObserver):
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::LibWebRTCPeerConnectionBackend::existingTransceiver):
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.h:
        * Modules/paymentrequest/PaymentHandler.h:
        * Modules/paymentrequest/PaymentRequest.cpp:
        (WebCore::PaymentRequest::show):
        * Modules/paymentrequest/PaymentResponse.cpp:
        (WebCore::PaymentResponse::retry):
        * Modules/push-api/PushSubscription.cpp:
        (WebCore::PushSubscription::toJSON const):
        * Modules/push-api/PushSubscriptionJSON.h:
        * Modules/speech/SpeechRecognitionCaptureSource.h:
        * Modules/speech/SpeechRecognitionCaptureSourceImpl.h:
        * Modules/streams/ReadableStreamSource.cpp:
        (WebCore::ReadableStreamSource::start):
        (WebCore::ReadableStreamSource::pull):
        * Modules/webaudio/AudioWorkletNode.cpp:
        (WebCore::AudioWorkletNode::initializeAudioParameters):
        * Modules/webaudio/AudioWorkletNode.h:
        * Modules/webaudio/AudioWorkletNodeOptions.h:
        * Modules/webaudio/AudioWorkletThread.h:
        * Modules/webaudio/MediaStreamAudioSourceCocoa.cpp:
        (WebCore::MediaStreamAudioSource::consumeAudio):
        * Modules/webaudio/OfflineAudioContext.cpp:
        (WebCore::OfflineAudioContext::finishedRendering):
        * Modules/webaudio/OfflineAudioContext.h:
        * Modules/webdatabase/SQLResultSetRowList.cpp:
        (WebCore::SQLResultSetRowList::item const):
        * Modules/webdatabase/SQLResultSetRowList.h:
        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::sendFrame):
        * Modules/websockets/WebSocketChannel.h:
        * Modules/webxr/WebXRHand.cpp:
        (WebCore::WebXRHand::Iterator::next):
        * Modules/webxr/WebXRHand.h:
        * Modules/webxr/WebXRInputSourceArray.cpp:
        (WebCore::WebXRInputSourceArray::handleAddedOrUpdatedInputSources):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::firstAccessibleObjectFromNode):
        (WebCore::Accessibility::appendChildrenToArray):
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityObjectInterface.h:
        * accessibility/AccessibilityScrollView.cpp:
        (WebCore::AccessibilityScrollView::removeChildScrollbar):
        * accessibility/atk/WebKitAccessible.cpp:
        (webkitAccessibleGetIndexInParent):
        * accessibility/atk/WebKitAccessibleInterfaceText.cpp:
        (numberOfReplacedElementsBeforeOffset):
        * accessibility/isolatedtree/AXIsolatedTree.h:
        * animation/DocumentTimeline.cpp:
        (WebCore::DocumentTimeline::animationCanBeRemoved):
        * bindings/IDLTypes.h:
        * bindings/js/DOMPromiseProxy.h:
        * bindings/js/JSCustomElementInterface.cpp:
        (WebCore::JSCustomElementInterface::invokeCallback):
        * bindings/js/JSCustomElementInterface.h:
        (WebCore::JSCustomElementInterface::invokeCallback):
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSValueInWrappedObject.h:
        (WebCore::cachedPropertyValue):
        * bindings/js/ScriptController.h:
        * bridge/c/c_utility.h:
        * contentextensions/CombinedURLFilters.cpp:
        (WebCore::ContentExtensions::CombinedURLFilters::addPattern):
        * contentextensions/ContentExtensionsBackend.cpp:
        (WebCore::ContentExtensions::ContentExtensionsBackend::forEach):
        * contentextensions/ContentExtensionsDebugging.h:
        * contentextensions/DFACombiner.cpp:
        (WebCore::ContentExtensions::DFACombiner::combineDFAs):
        * contentextensions/DFACombiner.h:
        * contentextensions/ImmutableNFANodeBuilder.h:
        * contentextensions/NFANode.h:
        * contentextensions/Term.h:
        (WebCore::ContentExtensions::Term::hash const):
        * crypto/CryptoAlgorithm.cpp:
        (WebCore::CryptoAlgorithm::dispatchOperationInWorkQueue):
        * crypto/CryptoAlgorithm.h:
        * crypto/keys/CryptoKeyRSA.h:
        * css/CSSCrossfadeValue.cpp:
        (WebCore::CSSCrossfadeValue::traverseSubresources const):
        * css/CSSCrossfadeValue.h:
        * css/CSSFilterImageValue.cpp:
        (WebCore::CSSFilterImageValue::traverseSubresources const):
        * css/CSSFilterImageValue.h:
        * css/CSSFontFaceSrcValue.cpp:
        (WebCore::CSSFontFaceSrcValue::traverseSubresources const):
        * css/CSSFontFaceSrcValue.h:
        * css/CSSFontSelector.h:
        * css/CSSImageSetValue.cpp:
        (WebCore::CSSImageSetValue::traverseSubresources const):
        * css/CSSImageSetValue.h:
        * css/CSSImageValue.cpp:
        (WebCore::CSSImageValue::traverseSubresources const):
        * css/CSSImageValue.h:
        * css/CSSValue.cpp:
        (WebCore::CSSValue::traverseSubresources const):
        * css/CSSValue.h:
        * css/CSSValueList.cpp:
        (WebCore::CSSValueList::traverseSubresources const):
        * css/CSSValueList.h:
        * css/StyleProperties.cpp:
        (WebCore::StyleProperties::traverseSubresources const):
        * css/StyleProperties.h:
        * css/StyleSheetContents.cpp:
        (WebCore::traverseRulesInVector):
        (WebCore::StyleSheetContents::traverseRules const):
        (WebCore::StyleSheetContents::traverseSubresources const):
        * css/StyleSheetContents.h:
        * css/makeprop.pl:
        * css/makevalues.pl:
        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::parseTransformTranslateArguments):
        (WebCore::parseTransformAngleArgument):
        (WebCore::parseTransformNumberArguments):
        (WebCore::transformCanLikelyUseFastPath):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::isAppleLegacyCssValueKeyword):
        (WebCore::cssValueKeywordID):
        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::consumeFontFamilyRaw):
        * cssjit/SelectorCompiler.h:
        (WebCore::SelectorCompiler::ruleCollectorSimpleSelectorChecker):
        (WebCore::SelectorCompiler::querySelectorSimpleSelectorChecker):
        (WebCore::SelectorCompiler::ruleCollectorSelectorCheckerWithCheckingContext):
        (WebCore::SelectorCompiler::querySelectorSelectorCheckerWithCheckingContext):
        * dom/Document.cpp:
        (WebCore::processColorSchemeString):
        (WebCore::Document::matchingAnimations):
        * dom/Document.h:
        * dom/FullscreenManager.h:
        * dom/InlineStyleSheetOwner.h:
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::ScriptElement):
        * dom/ScriptElement.h:
        * dom/ScriptExecutionContext.h:
        (WebCore::ScriptExecutionContext::Task::Task):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::styleAttributeChanged):
        * dom/UserGestureIndicator.h:
        (WebCore::UserGestureToken::addDestructionObserver):
        * dom/ViewportArguments.cpp:
        * dom/ViewportArguments.h:
        * editing/Editor.cpp:
        (WebCore::Editor::fontAttributesAtSelectionStart):
        * editing/SmartReplace.cpp:
        (WebCore::getSmartSet):
        * editing/TextManipulationController.cpp:
        (WebCore::TextManipulationController::parse):
        * editing/TextManipulationController.h:
        * editing/mac/DictionaryLookup.h:
        * editing/markup.cpp:
        (WebCore::removeSubresourceURLAttributes):
        (WebCore::sanitizeMarkup):
        * editing/markup.h:
        * fileapi/AsyncFileStream.cpp:
        (WebCore::AsyncFileStream::perform):
        (WebCore::AsyncFileStream::getSize):
        (WebCore::AsyncFileStream::openForRead):
        (WebCore::AsyncFileStream::read):
        * fileapi/AsyncFileStream.h:
        * fileapi/File.cpp:
        (WebCore::File::lastModified const):
        * fileapi/ThreadableBlobRegistry.cpp:
        * html/Autofill.cpp:
        (WebCore::AutofillData::createFromHTMLFormControlElement):
        * html/DOMTokenList.h:
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::HTMLImageElement):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::waitForPreparedForInlineThen):
        (WebCore::HTMLMediaElement::setVideoFullscreenLayer):
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::waitForPreparedForInlineThen):
        (WebCore::HTMLMediaElement::setVideoFullscreenLayer):
        * html/HTMLSlotElement.cpp:
        (WebCore::HTMLSlotElement::assignedNodes const):
        (WebCore::HTMLSlotElement::assignedElements const):
        * html/LinkIconType.h:
        * html/SubmitEvent.cpp:
        (WebCore::SubmitEvent::create):
        * html/URLSearchParams.cpp:
        (WebCore::URLSearchParams::URLSearchParams):
        (WebCore::URLSearchParams::create):
        (WebCore::URLSearchParams::Iterator::next):
        * html/URLSearchParams.h:
        (WebCore::URLSearchParams::pairs const):
        * html/canvas/WebGL2RenderingContext.h:
        * html/canvas/WebGLBuffer.h:
        * html/canvas/WebGLContextObject.h:
        * html/canvas/WebGLFramebuffer.h:
        * html/canvas/WebGLObject.h:
        * html/canvas/WebGLProgram.h:
        * html/canvas/WebGLQuery.h:
        * html/canvas/WebGLRenderbuffer.h:
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::ensureNotNull const):
        * html/canvas/WebGLRenderingContextBase.h:
        * html/canvas/WebGLSampler.h:
        * html/canvas/WebGLShader.h:
        * html/canvas/WebGLSharedObject.h:
        * html/canvas/WebGLSync.h:
        * html/canvas/WebGLTexture.h:
        * html/canvas/WebGLTransformFeedback.h:
        * html/canvas/WebGLVertexArrayObject.h:
        * html/canvas/WebGLVertexArrayObjectBase.h:
        * html/canvas/WebGLVertexArrayObjectOES.cpp:
        (WebCore::WebGLVertexArrayObjectOES::deleteObjectImpl):
        * html/canvas/WebGLVertexArrayObjectOES.h:
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::createForeignAttributesMap):
        * html/parser/ParsingUtilities.h:
        (WebCore::skipExactlyIgnoringASCIICase):
        * html/track/VTTScanner.cpp:
        (WebCore::VTTScanner::scan):
        (WebCore::VTTScanner::scanRun):
        * html/track/WebVTTTokenizer.cpp:
        (WebCore::equalLiteral):
        (WebCore::WebVTTTokenizer::nextToken):
        * inspector/CommandLineAPIHost.h:
        * inspector/DOMPatchSupport.cpp:
        (WebCore::DOMPatchSupport::innerPatchChildren):
        * inspector/InspectorController.h:
        * inspector/InspectorFrontendClient.h:
        * inspector/WorkerInspectorController.h:
        * layout/formattingContexts/inline/InlineContentBreaker.cpp:
        (WebCore::Layout::hasTrailingTextContent):
        * layout/formattingContexts/inline/InlineLine.cpp:
        (WebCore::Layout::Line::visuallyCollapseHangingOverflow):
        (WebCore::Layout::Line::appendTextContent):
        (WebCore::Layout::Line::addTrailingHyphen):
        * layout/formattingContexts/inline/InlineLineBuilder.cpp:
        (WebCore::Layout::LineBuilder::initialize):
        * layout/formattingContexts/table/TableGrid.h:
        * layout/formattingContexts/table/TableLayout.cpp:
        (WebCore::Layout::distributeAvailableSpace):
        * layout/integration/InlineIteratorLogicalOrderTraversal.cpp:
        (WebCore::InlineIterator::makeTextLogicalOrderCacheIfNeeded):
        (WebCore::InlineIterator::makeLineLogicalOrderCache):
        * layout/integration/LayoutIntegrationCoverage.cpp:
        (WebCore::LayoutIntegration::canUseForLineLayoutWithReason):
        * loader/ApplicationManifestLoader.h:
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::contentFilterDidBlock):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::clear):
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:
        * loader/LoaderStrategy.h:
        * loader/ResourceLoadStatistics.cpp:
        (WebCore::hasHadRecentUserInteraction):
        * loader/appcache/ApplicationCacheStorage.h:
        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::create):
        * loader/archive/cf/LegacyWebArchive.h:
        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::singleton):
        (WebCore::MemoryCache::add):
        (WebCore::MemoryCache::revalidationFailed):
        (WebCore::MemoryCache::resourceForRequestImpl):
        (WebCore::MemoryCache::forEachResource):
        (WebCore::MemoryCache::forEachSessionResource):
        (WebCore::MemoryCache::remove):
        * loader/cache/MemoryCache.h:
        * loader/mac/LoaderNSURLExtras.h:
        * page/CaptionUserPreferencesMediaAF.cpp:
        (WebCore::trackDisplayName):
        * page/ChromeClient.h:
        (WebCore::ChromeClient::showShareSheet):
        (WebCore::ChromeClient::showContactPicker):
        (WebCore::ChromeClient::exitVideoFullscreenForVideoElement):
        (WebCore::ChromeClient::hasStorageAccess):
        (WebCore::ChromeClient::requestStorageAccess):
        (WebCore::ChromeClient::shouldAllowDeviceOrientationAndMotionAccess):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::createWindow):
        (WebCore::DOMWindow::showModalDialog):
        * page/DOMWindow.h:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::updateMouseEventTargetNode):
        * page/FrameView.cpp:
        (WebCore::FrameView::applyRecursivelyWithVisibleRect):
        * page/FrameView.h:
        * page/IntersectionObserverEntry.h:
        (WebCore::IntersectionObserverEntry::create):
        * page/Page.cpp:
        (WebCore::Page::forEachPage):
        (WebCore::Page::updateRendering):
        (WebCore::Page::doAfterUpdateRendering):
        (WebCore::Page::whenUnnested):
        * page/Page.h:
        * page/PointerCaptureController.cpp:
        (WebCore::PointerCaptureController::dispatchEventForTouchAtIndex):
        * page/PointerCaptureController.h:
        * page/ResourceUsageThread.cpp:
        (WebCore::ResourceUsageThread::waitUntilObservers):
        (WebCore::ResourceUsageThread::threadBody):
        * page/RuntimeEnabledFeatures.h:
        * page/SecurityOriginData.h:
        * page/SuspendableTimer.h:
        * page/UserMessageHandlerDescriptor.h:
        * page/WheelEventTestMonitor.cpp:
        (WebCore::WheelEventTestMonitor::setTestCallbackAndStartMonitoring):
        * page/WheelEventTestMonitor.h:
        * page/WindowFeatures.cpp:
        (WebCore::processFeaturesString):
        * page/WindowFeatures.h:
        * page/csp/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::allowJavaScriptURLs const):
        (WebCore::ContentSecurityPolicy::allowInlineEventHandlers const):
        (WebCore::ContentSecurityPolicy::allowNonParserInsertedScripts const):
        (WebCore::ContentSecurityPolicy::allowInlineScript const):
        (WebCore::ContentSecurityPolicy::allowInlineStyle const):
        (WebCore::ContentSecurityPolicy::allowFrameAncestors const):
        (WebCore::ContentSecurityPolicy::allowPluginType const):
        (WebCore::ContentSecurityPolicy::allowObjectFromSource const):
        (WebCore::ContentSecurityPolicy::allowChildFrameFromSource const):
        (WebCore::ContentSecurityPolicy::allowResourceFromSource const):
        (WebCore::ContentSecurityPolicy::allowConnectToSource const):
        (WebCore::ContentSecurityPolicy::allowBaseURI const):
        (WebCore::ContentSecurityPolicy::reportViolation const):
        (WebCore::ContentSecurityPolicy::logToConsole const):
        * page/csp/ContentSecurityPolicy.h:
        * page/scrolling/ScrollingThread.cpp:
        (WebCore::ScrollingThread::ScrollingThread):
        * page/scrolling/ScrollingTree.h:
        * page/scrolling/nicosia/ScrollingTreeNicosia.cpp:
        (WebCore::ScrollingTreeNicosia::scrollingNodeForPoint):
        * page/scrolling/nicosia/ScrollingTreeScrollingNodeDelegateNicosia.cpp:
        (WebCore::ScrollingTreeScrollingNodeDelegateNicosia::createTimer):
        (WebCore::ScrollingTreeScrollingNodeDelegateNicosia::startAnimationCallback):
        * platform/AbortableTaskQueue.h:
        * platform/CPUMonitor.h:
        * platform/FileMonitor.cpp:
        (WebCore::FileMonitor::FileMonitor):
        * platform/FileMonitor.h:
        * platform/LowPowerModeNotifier.h:
        * platform/MainThreadSharedTimer.cpp:
        (WebCore::MainThreadSharedTimer::setFiredFunction):
        * platform/MainThreadSharedTimer.h:
        * platform/PODInterval.h:
        * platform/RemoteCommandListener.h:
        * platform/ScrollAnimationMomentum.cpp:
        (WebCore::ScrollAnimationMomentum::startAnimatedScrollWithInitialVelocity):
        * platform/ScrollAnimationMomentum.h:
        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::createTimer):
        * platform/ScrollingEffectsController.h:
        * platform/SharedBuffer.h:
        * platform/SharedTimer.h:
        * platform/Timer.h:
        (WebCore::Timer::schedule):
        (WebCore::Timer::Timer):
        (WebCore::DeferrableOneShotTimer::DeferrableOneShotTimer):
        * platform/WebGLStateTracker.h:
        * platform/audio/cocoa/AudioSampleDataSource.h:
        * platform/audio/cocoa/WebAudioBufferList.cpp:
        (WebCore:: const):
        * platform/audio/cocoa/WebAudioBufferList.h:
        * platform/audio/gstreamer/AudioDestinationGStreamer.cpp:
        (WebCore::AudioDestinationGStreamer::handleMessage):
        * platform/audio/gstreamer/AudioFileReaderGStreamer.cpp:
        (WebCore::AudioFileReader::handleMessage):
        * platform/audio/mac/AudioHardwareListenerMac.h:
        * platform/cf/RunLoopObserver.h:
        * platform/cocoa/PlaybackSessionModelMediaElement.h:
        * platform/cocoa/PowerSourceNotifier.h:
        * platform/cocoa/SystemBattery.h:
        * platform/cocoa/VideoFullscreenModelVideoElement.h:
        (WebCore::VideoFullscreenModelVideoElement::setVideoFullscreenLayer):
        (WebCore::VideoFullscreenModelVideoElement::waitForPreparedForInlineThen):
        * platform/encryptedmedia/CDMInstance.h:
        (WebCore::CDMInstance::setLogger):
        * platform/encryptedmedia/CDMInstanceSession.h:
        (WebCore::CDMInstanceSession::setLogger):
        * platform/encryptedmedia/CDMPrivate.h:
        (WebCore::CDMPrivate::setLogger):
        * platform/encryptedmedia/CDMProxy.cpp:
        (WebCore::KeyStore::containsKeyID const):
        (WebCore::KeyStore::add):
        (WebCore::KeyStore::unref):
        * platform/encryptedmedia/CDMRestrictions.h:
        (WebCore::CDMRestrictions::decode):
        * platform/gamepad/GamepadConstants.cpp:
        (WebCore::standardGamepadMappingString):
        (WebCore::xrStandardGamepadMappingString):
        * platform/gamepad/GamepadConstants.h:
        * platform/glib/FileMonitorGLib.cpp:
        (WebCore::FileMonitor::FileMonitor):
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::decode):
        * platform/graphics/FontCache.h:
        * platform/graphics/GLContext.cpp:
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::traverse):
        * platform/graphics/GraphicsLayer.h:
        * platform/graphics/GraphicsTypesGL.h:
        (GCGLSpan<GCGLvoid>::GCGLSpan):
        * platform/graphics/ImageDecoder.h:
        (WebCore::ImageDecoder::setEncodedDataStatusChangeCallback):
        * platform/graphics/IntRect.h:
        * platform/graphics/IntSize.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::setVideoFullscreenLayer):
        (WebCore::MediaPlayer::performTaskAtMediaTime):
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerEnums.h:
        (WTF::LogArgument<WebCore::MediaPlayerEnums::ReadyState>::toString):
        (WTF::LogArgument<WebCore::MediaPlayerEnums::NetworkState>::toString):
        (WTF::LogArgument<WebCore::MediaPlayerEnums::BufferingPolicy>::toString):
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::setVideoFullscreenLayer):
        * platform/graphics/Path.h:
        (WebCore::Path::strokeBoundingRect):
        * platform/graphics/PlatformLayer.h:
        * platform/graphics/PlatformTimeRanges.h:
        * platform/graphics/RemoteVideoSample.h:
        (WebCore::RemoteVideoSample::encode const):
        * platform/graphics/ShadowBlur.h:
        * platform/graphics/SourceBufferPrivate.cpp:
        (WebCore::removeSamplesFromTrackBuffer):
        * platform/graphics/VideoLayerManager.h:
        * platform/graphics/WidthCache.h:
        (WebCore::operator==):
        * platform/graphics/angle/ExtensionsGLANGLE.h:
        * platform/graphics/angle/TemporaryANGLESetting.h:
        * platform/graphics/avfoundation/CDMFairPlayStreaming.h:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::seekCompleted):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        (WebCore::MediaPlayerPrivateAVFoundation::Notification::Notification):
        (WebCore::MediaPlayerPrivateAVFoundation::Notification::Function<void):
        (WebCore::MediaPlayerPrivateAVFoundation::Notification::WTF::Function<void): Deleted.
        * platform/graphics/avfoundation/objc/CDMInstanceFairPlayStreamingAVFObjC.h:
        * platform/graphics/avfoundation/objc/ImageDecoderAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:
        * platform/graphics/avfoundation/objc/SourceBufferParserAVFObjC.h:
        * platform/graphics/avfoundation/objc/VideoLayerManagerObjC.h:
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::updateAnimations):
        * platform/graphics/cairo/GraphicsContextCairo.h:
        * platform/graphics/cg/ImageBufferCGBackend.cpp:
        (WebCore::ImageBufferCGBackend::createFlusher):
        * platform/graphics/cg/SubimageCacheWithTimer.h:
        (WebCore::SubimageCacheWithTimer::SubimageCacheHash::hash):
        * platform/graphics/cocoa/IOSurface.h:
        * platform/graphics/cocoa/MediaEngineConfigurationFactoryCocoa.cpp:
        (WebCore::createMediaPlayerDecodingConfigurationCocoa):
        * platform/graphics/cocoa/MediaEngineConfigurationFactoryCocoa.h:
        * platform/graphics/cocoa/SourceBufferParser.h:
        * platform/graphics/cocoa/SourceBufferParserWebM.cpp:
        (WebCore::SourceBufferParserWebM::isContentTypeSupported):
        (WebCore::SourceBufferParserWebM::SourceBufferParserWebM):
        (WebCore::SourceBufferParserWebM::OnEbml):
        * platform/graphics/cocoa/SourceBufferParserWebM.h:
        (WebCore::SourceBufferParserWebM::loggerPtr const):
        * platform/graphics/cocoa/VP9UtilitiesCocoa.h:
        * platform/graphics/cv/GraphicsContextGLCVANGLE.h:
        * platform/graphics/displaylists/DisplayList.cpp:
        (WebCore::DisplayList::DisplayList::description const):
        * platform/graphics/displaylists/DisplayList.h:
        * platform/graphics/displaylists/DisplayListImageBuffer.h:
        (WebCore::DisplayList::ImageBuffer::ImageBuffer):
        * platform/graphics/displaylists/InMemoryDisplayList.cpp:
        (WebCore::DisplayList::InMemoryDisplayList::InMemoryDisplayList):
        * platform/graphics/filters/FEGaussianBlur.cpp:
        (WebCore::accelerateBoxBlur):
        (WebCore::FEGaussianBlur::platformApply):
        * platform/graphics/filters/FELighting.cpp:
        (WebCore::FELighting::platformApplyGeneric):
        * platform/graphics/filters/FELighting.h:
        * platform/graphics/filters/FEMorphology.cpp:
        (WebCore::FEMorphology::platformApply):
        * platform/graphics/filters/FETurbulence.cpp:
        (WebCore::FETurbulence::platformApplySoftware):
        * platform/graphics/gstreamer/GStreamerCommon.cpp:
        (WebCore::simpleBusMessageCallback):
        * platform/graphics/gstreamer/GStreamerRegistryScanner.cpp:
        (WebCore::GStreamerRegistryScanner::isCodecSupported const):
        * platform/graphics/gstreamer/ImageDecoderGStreamer.h:
        * platform/graphics/gstreamer/MainThreadNotifier.h:
        * platform/graphics/gstreamer/MediaEngineConfigurationFactoryGStreamer.cpp:
        (WebCore::createMediaPlayerDecodingConfigurationGStreamer):
        (WebCore::createMediaPlayerEncodingConfigurationGStreamer):
        * platform/graphics/gstreamer/MediaEngineConfigurationFactoryGStreamer.h:
        * platform/graphics/gstreamer/TextSinkGStreamer.h:
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.h:
        * platform/graphics/gstreamer/eme/CDMProxyThunder.cpp:
        * platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.cpp:
        (constructed):
        * platform/graphics/gstreamer/mse/AppendPipeline.cpp:
        (WebCore::AppendPipeline::appsrcEndOfAppendCheckerProbe):
        (WebCore::AppendPipeline::resetParserState):
        (WebCore::AppendPipeline::handleAppsinkNewSampleFromStreamingThread):
        * platform/graphics/gstreamer/mse/AppendPipeline.h:
        * platform/graphics/nicosia/NicosiaPlatformLayer.h:
        * platform/graphics/opengl/ExtensionsGLOpenGL.h:
        * platform/graphics/opengl/ExtensionsGLOpenGLCommon.cpp:
        (WebCore::ExtensionsGLOpenGLCommon::getTranslatedShaderSourceANGLE):
        * platform/graphics/opengl/GraphicsContextGLOpenGL.h:
        * platform/graphics/opengl/TemporaryOpenGLSetting.h:
        * platform/graphics/texmap/GraphicsContextGLTextureMapper.cpp:
        (WebCore::GraphicsContextGLOpenGL::GraphicsContextGLOpenGL):
        * platform/graphics/texmap/TextureMapperContextAttributes.cpp:
        (WebCore::threadSpecificAttributes):
        * platform/graphics/texmap/TextureMapperPlatformLayerProxy.cpp:
        (WebCore::TextureMapperPlatformLayerProxy::dropCurrentBufferWhilePreservingTexture):
        * platform/graphics/texmap/TextureMapperShaderProgram.h:
        * platform/graphics/win/Direct2DOperations.cpp:
        (WebCore::Direct2D::drawWithShadow):
        (WebCore::Direct2D::drawWithoutShadow):
        * platform/graphics/win/Direct2DOperations.h:
        * platform/graphics/win/FontPlatformDataCGWin.cpp:
        (WebCore::FontPlatformData::hash const):
        (WebCore::FontPlatformData::platformIsEqual const):
        * platform/graphics/win/PlatformContextDirect2D.cpp:
        (WebCore::PlatformContextDirect2D::PlatformContextDirect2D):
        * platform/graphics/win/PlatformContextDirect2D.h:
        (WebCore::PlatformContextDirect2D::PlatformContextDirect2D):
        * platform/graphics/win/SharedGDIObject.h:
        (WebCore::SharedGDIObject::hash const):
        * platform/gtk/CursorGtk.cpp:
        (WebCore::fallbackCursor):
        * platform/gtk/GtkUtilities.cpp:
        (WebCore::wallTimeForEvent):
        * platform/gtk/PlatformScreenGtk.cpp:
        (WebCore::screenDPIObserverHandlersMap):
        * platform/ios/VideoFullscreenInterfaceAVKit.h:
        * platform/ios/wak/WebCoreThreadRun.cpp:
        * platform/mac/PowerObserverMac.cpp:
        (WebCore::PowerObserver::PowerObserver):
        * platform/mac/PowerObserverMac.h:
        * platform/mediacapabilities/MediaEngineConfigurationFactory.h:
        * platform/mediarecorder/MediaRecorderPrivateAVFImpl.cpp:
        (WebCore::MediaRecorderPrivateAVFImpl::audioSamplesAvailable):
        * platform/mediarecorder/MediaRecorderPrivateAVFImpl.h:
        * platform/mediarecorder/MediaRecorderPrivateMock.cpp:
        (WebCore::MediaRecorderPrivateMock::audioSamplesAvailable):
        * platform/mediarecorder/MediaRecorderPrivateMock.h:
        * platform/mediastream/MediaConstraints.cpp:
        (WebCore::StringConstraint::find const):
        (WebCore::MediaTrackConstraintSetMap::forEach const):
        (WebCore::MediaTrackConstraintSetMap::filter const):
        (WebCore::MediaConstraints::isConstraintSet):
        * platform/mediastream/MediaConstraints.h:
        (WebCore::NumericConstraint::find const):
        * platform/mediastream/RealtimeMediaSource.h:
        * platform/mediastream/gstreamer/GStreamerDisplayCaptureDeviceManager.cpp:
        (WebCore::GStreamerDisplayCaptureDeviceManager::computeCaptureDevices):
        (WebCore::GStreamerDisplayCaptureDeviceManager::createDisplayCaptureSource):
        * platform/mock/GeolocationClientMock.h:
        * platform/mock/MediaEngineConfigurationFactoryMock.h:
        * platform/mock/ScrollbarsControllerMock.cpp:
        (WebCore::ScrollbarsControllerMock::ScrollbarsControllerMock):
        * platform/mock/ScrollbarsControllerMock.h:
        * platform/network/BlobRegistryImpl.cpp:
        (WebCore::writeFilePathsOrDataBuffersToFile):
        * platform/network/CookieStorage.h:
        * platform/network/DataURLDecoder.h:
        * platform/network/HTTPParsers.cpp:
        (WebCore::skipWhile):
        (WebCore::skipCharacter):
        * platform/network/NetworkStateNotifier.cpp:
        (WebCore::NetworkStateNotifier::addListener):
        * platform/network/NetworkStateNotifier.h:
        * platform/network/cf/CookieStorageCFNet.cpp:
        (WebCore::cookieChangeCallbackMap):
        (WebCore::startObservingCookieChanges):
        * platform/network/cocoa/CookieStorageObserver.h:
        * platform/network/curl/CookieJarDB.cpp:
        (WebCore::CookieJarDB::setCookie):
        * platform/network/curl/CookieStorageCurl.cpp:
        (WebCore::startObservingCookieChanges):
        * platform/network/curl/CookieUtil.cpp:
        (WebCore::CookieUtil::domainMatch):
        (WebCore::CookieUtil::parseExpiresMS):
        (WebCore::CookieUtil::parseCookieAttributes):
        * platform/network/curl/CurlRequestScheduler.cpp:
        (WebCore::CurlRequestScheduler::callOnWorkerThread):
        (WebCore::CurlRequestScheduler::executeTasks):
        * platform/network/curl/CurlRequestScheduler.h:
        * platform/network/curl/CurlStream.cpp:
        (WebCore::CurlStream::CurlStream):
        * platform/network/curl/CurlStream.h:
        (WebCore::CurlStream::create):
        * platform/network/curl/CurlStreamScheduler.cpp:
        (WebCore::CurlStreamScheduler::callOnWorkerThread):
        (WebCore::CurlStreamScheduler::callClientOnMainThread):
        (WebCore::CurlStreamScheduler::executeTasks):
        * platform/network/curl/CurlStreamScheduler.h:
        * platform/network/soup/URLSoup.h:
        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::destroyCollationFunction):
        (WebCore::callCollationFunction):
        (WebCore::SQLiteDatabase::setCollationFunction):
        * platform/sql/SQLiteDatabase.h:
        * platform/text/TextCodec.h:
        * platform/text/TextCodecSingleByte.cpp:
        * platform/text/enchant/TextCheckerEnchant.h:
        * platform/text/hyphen/HyphenationLibHyphen.cpp:
        (WebCore::lastHyphenLocation):
        * platform/xr/PlatformXR.h:
        (PlatformXR::Device::FrameData::LayerData::encode const):
        (PlatformXR::Device::FrameData::LayerData::decode):
        * rendering/LayerAncestorClippingStack.cpp:
        (WebCore::LayerAncestorClippingStack::lastOverflowScrollProxyNodeID const):
        * rendering/LegacyInlineTextBox.cpp:
        * rendering/LegacyRootInlineBox.cpp:
        * rendering/ReferencedSVGResources.cpp:
        (WebCore::ReferencedSVGResources::addClientForTarget):
        * rendering/RenderBlock.h:
        * rendering/RenderBox.cpp:
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::ensureReferencedSVGResources):
        * rendering/RenderIterator.h:
        * rendering/RenderLayer.cpp:
        (WebCore::showLayerTree):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::traverseVisibleNonCompositedDescendantLayers):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::updateFromElement):
        * rendering/RenderListBox.h:
        * rendering/RenderOverflow.h:
        * rendering/style/StyleGridData.h:
        * style/RuleFeature.h:
        * style/StyleInvalidator.h:
        * style/StyleScopeRuleSets.h:
        * style/StyleUpdate.h:
        * testing/TypeConversions.h:
        (WebCore::TypeConversions::testLongRecord const):
        (WebCore::TypeConversions::setTestLongRecord):
        (WebCore::TypeConversions::testNodeRecord const):
        (WebCore::TypeConversions::setTestNodeRecord):
        (WebCore::TypeConversions::testSequenceRecord const):
        (WebCore::TypeConversions::setTestSequenceRecord):
        * testing/WebFakeXRInputController.h:
        * testing/js/WebCoreTestSupport.cpp:
        (WebCoreTestSupport::setMockGamepadDetails):
        (WebCoreTestSupport::setAdditionalSupportedImageTypesForTesting):
        * testing/js/WebCoreTestSupport.h:
        * workers/WorkerOrWorkletThread.cpp:
        (WebCore::WorkerOrWorkletThread::start):
        * workers/WorkerOrWorkletThread.h:
        (WebCore::WorkerOrWorkletThread::thread const):
        * workers/WorkerRunLoop.cpp:
        (WebCore::WorkerDedicatedRunLoop::runInMode):
        * workers/WorkerScriptLoader.h:
        * workers/WorkerThread.h:
        * workers/service/ExtendableEvent.cpp:
        (WebCore::ExtendableEvent::whenAllExtendLifetimePromisesAreSettled):
        * workers/service/ExtendableEvent.h:
        * workers/service/SWClientConnection.cpp:
        (WebCore::dispatchToContextThreadIfNecessary):
        * workers/service/ServiceWorkerClientData.h:
        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::jobFailedWithException):
        (WebCore::ServiceWorkerContainer::jobResolvedWithRegistration):
        (WebCore::ServiceWorkerContainer::jobResolvedWithUnregistrationResult):
        * workers/service/context/SWContextManager.cpp:
        (WebCore::SWContextManager::forEachServiceWorkerThread):
        (WebCore::SWContextManager::postTaskToServiceWorker):
        * workers/service/context/SWContextManager.h:
        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::forEachClientForOrigin):
        * workers/service/server/SWServer.h:
        * workers/service/server/SWServerJobQueue.cpp:
        (WebCore::SWServerJobQueue::removeAllJobsMatching):
        * workers/service/server/SWServerJobQueue.h:
        * workers/service/server/SWServerRegistration.cpp:
        (WebCore::SWServerRegistration::forEachConnection):
        * workers/service/server/SWServerRegistration.h:

2021-10-26  Antoine Quint  <graouts@webkit.org>

        Refactor CSSToStyleMap::mapAnimationTimingFunction() to use TimingFunction::createFromCSSValue()
        https://bugs.webkit.org/show_bug.cgi?id=232246

        Reviewed by Dean Jackson.

        * css/CSSToStyleMap.cpp:
        (WebCore::CSSToStyleMap::mapAnimationTimingFunction):

2021-10-25  Nikolaos Mouchtaris  <nmouchtaris@apple.com>

        Fix issue for transform-origin in SVG
        https://bugs.webkit.org/show_bug.cgi?id=232189

        Reviewed by Simon Fraser.

        Add temp fix to use previously ignored transform-origin in SVGGraphicsElement::animatedLocalTransform 
        if not explicitly set in style. Proper fix to come: https://bugs.webkit.org/show_bug.cgi?id=232128.

        Tests: imported/w3c/web-platform-tests/svg/styling/render/transform-origin-not-explicit-style-ref.svg
               imported/w3c/web-platform-tests/svg/styling/render/transform-origin-not-explicit-style.svg

        * svg/SVGGraphicsElement.cpp:
        (WebCore::SVGGraphicsElement::animatedLocalTransform const):

2021-10-25  Chris Fleizach  <cfleizach@apple.com>

        WebKit should use img@title as label even if img@alt is exlicitly empty
        https://bugs.webkit.org/show_bug.cgi?id=173870
        <rdar://problem/33010427>

        Reviewed by Andres Gonzalez.

        alt="" usually means to ignore an image. However, when it also carries other
        descriptive attributes, that is probably the wrong decision.
        Other browsers are not ignoring these images, WebKit should follow suit.
        
        This issue has been raised with
        https://github.com/w3c/accname/issues/27

        Test: accessibility/img-no-alt-not-ignored-with-title.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::computeAccessibilityIsIgnored const):

2021-10-25  Ayumi Kojima  <ayumi_kojima@apple.com>

        Unreviewed, reverting r284742.

        Reverting because this commit may have casued a regression on
        imported/w3c/web-platform-tests/speech-api/SpeechSynthesis-
        speak-events.html

        Reverted changeset:

        "AX: Unify speech synthesizer platform usage for Mac/iOS"
        https://bugs.webkit.org/show_bug.cgi?id=231895
        https://commits.webkit.org/r284742

2021-10-25  Chris Dumez  <cdumez@apple.com>

        Form navigations with target=_blank should not have an opener
        https://bugs.webkit.org/show_bug.cgi?id=232243

        Reviewed by Sam Weinig.

        Form navigations with target=_blank should not have an opener (unless rel="opener" is specified
        on the <form>), similarly to link navigations. This is a bit better for security as Web developers
        may not realize that popups opened via target=_blank get an opener link by default and do things
        like post messages to their opener, or navigate it. Not having an opener relationship also enables
        us to process-swap in more cases for better site isolation.

        This behavior is behind the same experimental feature flag as the behavior for anchors with target=_blank
        since WebKit is the only engine implementing this at the moment (despite this behavior having been
        standardized).

        No new tests, updated existing tests.

        * html/HTMLFormElement.cpp:
        (WebCore::parseFormRelAttributes):
        (WebCore::HTMLFormElement::submit):

2021-10-25  Alex Christensen  <achristensen@webkit.org>

        WebKit ought to be able to play videos without Content-Length HTTP header fields and without range support
        https://bugs.webkit.org/show_bug.cgi?id=232174

        Reviewed by Geoff Garen.

        AVFoundation doesn't like it when you give it a range like 0-1/* because it doesn't know the content length.
        To work around this, wait until the entire video is loaded then respond with a known length.
        This isn't great, but it's better than not playing the video at all.

        In order to fix this, I noticed that the setHTTPHeaderField and setHTTPStatusCode calls were not being reflected in the new NSURLResponse,
        so I added a call to initNSURLResponse to update the NSURLResponse.  I'm concerned about what other videos were not having the synthesized
        response updated, and I'm surprised non-range-response-supporting videos played without this change.

        This makes it so we can play videos like https://trac.webkit.org/export/284633/webkit/trunk/Tools/TestWebKitAPI/Tests/WebKit/test.mp4
        which can play in Chrome and Firefox.  Covered by an API test.

        * platform/network/cf/ResourceResponse.h:
        * platform/network/cocoa/RangeResponseGenerator.mm:
        (WebCore::synthesizedResponseForRange):
        (WebCore::RangeResponseGenerator::giveResponseToTaskIfBytesInRangeReceived):
        * platform/network/cocoa/WebCoreNSURLSession.mm:
        (-[WebCoreNSURLSessionDataTask resource:receivedResponse:completionHandler:]):

2021-10-25  Andres Gonzalez  <andresg_22@apple.com>

        Remove childrenInitialized() from the AXCoreObject interface.
        https://bugs.webkit.org/show_bug.cgi?id=232241
        <rdar://problem/84613750>

        Reviewed by Chris Fleizach.

        Follow up to https://bugs.webkit.org/show_bug.cgi?id=232130

        AXCoreObject::childrenInitialized is an internal housekeeping method to
        the AccessibilityObject class hierarchy, thus it is unnecessary to
        expose in the AXCoreObject interface.

        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::childrenInitialized const):
        * accessibility/AccessibilityObjectInterface.h:
        (WebCore::AXCoreObject::isDescendantOfObject const): No need to check
        for childrenInitialized in this function.
        * accessibility/isolatedtree/AXIsolatedObject.h:

2021-10-25  Tyler Wilcock  <tyler_w@apple.com>

        AX: Keyboard-focusable leaf nodes with labels should be accessible elements on iOS
        https://bugs.webkit.org/show_bug.cgi?id=232126

        Reviewed by Andres Gonzalez.

        Consider any focusable leaf node that has a label to be an
        accessible element on iOS. See Google Maps JS API usecase
        in: https://bugs.webkit.org/show_bug.cgi?id=223492

        Test: accessibility/ios-simulator/keyboard-focusable-leaf-nodes.html

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper determineIsAccessibilityElement]):
        Rather than returning false as a fallback, call an element accessible
        if it focusable, has a label, and is a leaf node (has no accessible
        children).
        (-[WebAccessibilityObjectWrapper accessibilityLabel]):
        Don't compute `axTitle`, `axDescription`, `interactiveDescription`, and 
        `interactiveVideoDescription` until we actually need them (this is
        a refactor unrelated to the patch title).

2021-10-25  Ziran Sun  <zsun@igalia.com>

        [CSS-grid] Need to set prefer width dirty for the child that has constraints to the grid area
        https://bugs.webkit.org/show_bug.cgi?id=232140

        Reviewed by Sergio Villar Senin.

        For a child with relative width constraints to the grid area, such as percentaged paddings, we reset the
        overridingContainingBlockContentSizeForChild value for columns when we are executing a definite strategy
        for columns. Since we have updated the overridingContainingBlockContentSizeForChild inline-axis/width value
        in GridTrackSizingAlgorithmStrategy::minContentForChild, we might need to recompute the child's relative
        width. For some cases, we probably will not be able to do it during the RenderGrid::layoutGridItems() function
        as the grid area does't change there any more. Since we are doing a layout inside
        GridTrackSizingAlgorithmStrategy::logicalHeightForChild() function, this CL takes the advantage and set the
        preferredLogicalWidth dirty before this layout call.

        * rendering/GridTrackSizingAlgorithm.cpp:
        (WebCore::GridTrackSizingAlgorithmStrategy::minContentForChild const):

2021-10-25  Gabriel Nava Marino  <gnavamarino@apple.com>

        ASSERT(node) triggered after surroundNodeRangeWithElement for node without editable style
        https://bugs.webkit.org/show_bug.cgi?id=232133

        Reviewed by Wenson Hsieh.
        
        If the last styled node was not parent node of a current text node, but we 
        wish to style the text node, we will add a style span to surround the text node.
        However, this requires the parent to have an editable style, or
        we will not properly insert the span in the right location, which
        later leads to a traversal into an invalid node. This change
        makes it so we return early if the parent node does not have an
        editable style, but modifying the existing
        CompositeEditCommand::insertNodeBefore to return a boolean in the
        early return case.

        Test: fast/editing/apply-relative-font-style-change-crash-003.html

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::surroundNodeRangeWithElement):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::insertNodeBefore):
        * editing/CompositeEditCommand.h:

2021-10-25  Darin Adler  <darin@apple.com>

        Restore strict parsing behavior in parseStringArrayFromDictionaryToUInt16Vector
        https://bugs.webkit.org/show_bug.cgi?id=232218

        Reviewed by Sam Weinig.

        * platform/graphics/cocoa/HEVCUtilitiesCocoa.mm:
        (WebCore::parseStringArrayFromDictionaryToUInt16Vector): Make sure the entire parse
        fails if any of the elements in the array are either not strings, or do not parse
        successfully as a uint16_t.

2021-10-25  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Check across inline box boundaries for breakable position
        https://bugs.webkit.org/show_bug.cgi?id=232219

        Reviewed by Antti Koivisto.

        This patch expands the "can we break before" check across multiple runs.
        There are cases when, while the content is break-all, we need to look at adjacent runs to decided whether the
        run boundary is a valid breaking position.
        e.g
        <div style="width: 1ch; word-break: break-all"><span>X</span><span>.</span></div>
          'break-all' tells us to break after 'X]' but the punctuation character prevents us to do so.
          This should work even when the content is in separate runs ([X][.] e.g. inline-box boundary or simply
          they represent individual DOM nodes)

        * layout/formattingContexts/inline/InlineContentBreaker.cpp:
        (WebCore::Layout::canBreakBefore):
        (WebCore::Layout::findLastValidBreakingPosition): Let's find the last valid breaking position in this run including the run end boundary.
        (WebCore::Layout::midWordBreak):
        (WebCore::Layout::InlineContentBreaker::tryBreakingTextRun const):
        (WebCore::Layout::previousTextRunIndex): Deleted.

2021-10-25  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Rename TextUtil::midWordBreak to breakWord
        https://bugs.webkit.org/show_bug.cgi?id=232217

        Reviewed by Antti Koivisto.

        This function may "break" the content at the left/right boundary. This is also in preparation for
        using midWordBreak term to indicate a position somewhere within the word boundary.

        * layout/formattingContexts/inline/InlineContentBreaker.cpp:
        (WebCore::Layout::midWordBreak):
        (WebCore::Layout::InlineContentBreaker::tryBreakingTextRun const):
        * layout/formattingContexts/inline/text/TextUtil.cpp:
        (WebCore::Layout::TextUtil::breakWord):
        (WebCore::Layout::TextUtil::midWordBreak): Deleted.
        * layout/formattingContexts/inline/text/TextUtil.h:

2021-10-25  Chris Lord  <clord@igalia.com>

        [GTK][WPE] REGRESSION(r284596): Scrolling sometimes jumps to the top of the page during smooth mouse-wheel scrolling
        https://bugs.webkit.org/show_bug.cgi?id=232229

        Reviewed by Carlos Garcia Campos.

        Make sure that retargeting a smooth scroll animation before a frame
        callback is called works correctly.

        Test: fast/scrolling/gtk/repeated-mouse-wheel-smooth.html

        * platform/ScrollAnimationSmooth.cpp:
        (WebCore::ScrollAnimationSmooth::startAnimatedScrollToDestination):

2021-10-25  Ziran Sun  <zsun@igalia.com>

        [css-writing-modes] Fix sizing of orthogonal elements with percentage margins
        https://bugs.webkit.org/show_bug.cgi?id=231951

        Reviewed by Manuel Rego Casasnovas.

        This is to modify RenderBox::FillAvailableMeasure() to handle the case of
        orthogonal elements when computing the margins. Spec reference is at        
        https://www.w3.org/TR/css-writing-modes-3/#dimension-mapping

        The change is an import of Chromium CL at
        https://chromium-review.googlesource.com/c/chromium/src/+/968522/        

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::fillAvailableMeasure const):

2021-10-24  Kimmo Kinnunen  <kkinnunen@apple.com>

        ImageBitmap should report its memory cost
        https://bugs.webkit.org/show_bug.cgi?id=187964

        Reviewed by Simon Fraser.

        Add memory cost reporting for ImageBitmap. In order to avoid storing a lock, computing the
        memory cost many times and querying the thread-unsafe image buffer, compute it only when the
        image buffer updates and cache the value.

        It is unclear how to test this with current infrastructure.

        * html/ImageBitmap.cpp:
        (WebCore::ImageBitmap::ImageBitmap):
        (WebCore::ImageBitmap::takeImageBitmapBacking):
        (WebCore::ImageBitmap::updateMemoryCost):
        (WebCore::ImageBitmap::memoryCost const):
        * html/ImageBitmap.h:
        * html/ImageBitmap.idl:

2021-10-24  Lauro Moura  <lmoura@igalia.com>

        [GLIB] REGRESSION(r284670): Tentative LTS build fix

        Unreviewed build fix.

        * platform/glib/LowPowerModeNotifierGLib.cpp:
        (WebCore::LowPowerModeNotifier::LowPowerModeNotifier):

2021-10-24  Jean-Yves Avenard  <jya@apple.com>

        Fix typo in MediaPlayerPrivateAVFoundationObjC::updateVideoTracks()
        https://bugs.webkit.org/show_bug.cgi?id=232194

        Reviewed by Darin Adler.

        Reset video tracks' properties when video tracks are changing rather
        than the audio ones.

        There should be no observable changes, resetting the audio track properties
        would have been a no-op as AudioTrackPrivateAVFObjC is just a wrapper around
        AVPlayerItemTrack and properties are kept in sync thorough playback.
        Not calling resetPropertiesFromTrack on the video track wouldn't have mattered
        as the operation is called when the track is constructed above in the
        determineChangedTracksFromNewTracksAndOldItems method.
        So this code only improves readability, and could be removed entirely.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::updateVideoTracks):
        * platform/graphics/avfoundation/objc/VideoTrackPrivateAVFObjC.h:

2021-10-24  Tyler Wilcock  <tyler_w@apple.com>

        AX: AccessibilityObject::m_haveChildren and AXCoreObject::hasChildren() are misleadingly named
        https://bugs.webkit.org/show_bug.cgi?id=232130

        Reviewed by Chris Fleizach.

        The names of `AccessibilityObject::m_haveChildren` and `AXCoreObject::hasChildren()`
        imply that the given object has one or more children. However, what these
        really indicate is whether the object has tried to initialize its children.
        Both `m_haveChildren` and `hasChildren()` can be true for objects that have no children,
        which is confusing.

        This patch:

          - Renames `m_haveChildren` to `m_childrenInitialized` and
            `hasChildren()` to `childrenInitialized()`.

          - Removes `AXPropertyName::HasChildren` rather than
            renaming it because isolated object children are always initialized.

          - Fixes a bug in `AccessibilityRenderObject::updateRoleAfterChildrenCreation`
            caused by the poor names (we intended to change the role if there
            were no children, not if `!hasChildren()`).

        * accessibility/AccessibilityARIAGrid.cpp:
        (WebCore::AccessibilityARIAGrid::addChildren):
        * accessibility/AccessibilityListBox.cpp:
        (WebCore::AccessibilityListBox::addChildren):
        (WebCore::AccessibilityListBox::selectedChildren):
        (WebCore::AccessibilityListBox::visibleChildren):
        * accessibility/AccessibilityMenuList.cpp:
        (WebCore::AccessibilityMenuList::addChildren):
        * accessibility/AccessibilityMenuListPopup.cpp:
        (WebCore::AccessibilityMenuListPopup::addChildren):
        (WebCore::AccessibilityMenuListPopup::childrenChanged):
        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::addChildren):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::updateChildrenIfNecessary):
        (WebCore::AccessibilityObject::clearChildren):
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityObjectInterface.h:
        (WebCore::AXCoreObject::isDescendantOfObject const):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::addCanvasChildren):
        (WebCore::AccessibilityRenderObject::updateRoleAfterChildrenCreation):
        (WebCore::AccessibilityRenderObject::addChildren):
        (WebCore::AccessibilityRenderObject::ariaListboxVisibleChildren):
        * accessibility/AccessibilityScrollView.cpp:
        (WebCore::AccessibilityScrollView::addChildren):
        * accessibility/AccessibilitySlider.cpp:
        (WebCore::AccessibilitySlider::addChildren):
        * accessibility/AccessibilitySpinButton.cpp:
        (WebCore::AccessibilitySpinButton::incrementButton):
        (WebCore::AccessibilitySpinButton::decrementButton):
        (WebCore::AccessibilitySpinButton::addChildren):
        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::addChildren):
        * accessibility/AccessibilityTableColumn.cpp:
        (WebCore::AccessibilityTableColumn::addChildren):
        * accessibility/AccessibilityTableHeaderContainer.cpp:
        (WebCore::AccessibilityTableHeaderContainer::addChildren):
        * accessibility/isolatedtree/AXIsolatedObject.cpp:
        Stop setting `AXPropertyName::HasChildren` because it no longer exists.
        (WebCore::AXIsolatedObject::initializeAttributeData):
        * accessibility/isolatedtree/AXIsolatedObject.h:
        * accessibility/isolatedtree/AXIsolatedTree.h:
        Delete `AXPropertyName::HasChildren`.

2021-10-24  Fujii Hironori  <Hironori.Fujii@sony.com>

        The code decoding std::optional<ImagePaintingOptions> can't be compiled by PlayStation due to the ImagePaintingOptions template constructor
        https://bugs.webkit.org/show_bug.cgi?id=231980
        <rdar://problem/84478389>

        Reviewed by Darin Adler.

        r284566 didn't actually fix the problem. The problem was that the
        first template argument of ImagePaintingOptions template construct
        can instantiated with std::optional<ImagePaintingOptions>. It
        should be a type of that setOption can take.

        * platform/graphics/ImagePaintingOptions.h: Added a template
        variable isOptionType, and use it for SFINAE.

2021-10-24  Darin Adler  <darin@apple.com>

        [Cocoa] Adopt bridge_cast and makeVector in a few more places, including cases where adoptCF/NS was used incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=232200

        Reviewed by Anders Carlsson.

        * platform/cocoa/SharedBufferCocoa.mm:
        (WebCore::SharedBuffer::create): Use bridge_cast.
        (WebCore::SharedBuffer::append): Ditto.
        (WebCore::SharedBuffer::createNSData const): Ditto. Here we are replacing
        a leakRef/adoptNS pair, so this fixes an ARC incompatibility.
        (WebCore::SharedBuffer::createCFData const): Ditto. Here we are replacing
        a leakRef/adoptCF pair, so this fixes an ARC incompatibility.
        (WebCore::SharedBuffer::createFromReadingFile): Tweaked coding style.

        * platform/graphics/cocoa/HEVCUtilitiesCocoa.mm:
        (WebCore::parseStringArrayFromDictionaryToUInt16Vector): Use dynamic_cf_cast,
        dynamic_objc_cast, and makeVector to reduce code without behavior changes.

        * platform/mac/PasteboardWriter.mm:
        (WebCore::toUTI): Use bridge_cast.
        (WebCore::toUTIUnlessAlreadyUTI): Use bridge_cast after doing adoptCF
        rather than first casting and then doing an adoptNS, relying on it doing the
        correct thing for a CF object. This fixes an ARC incompatibility.
        (WebCore::createPasteboardWriter): Ditto.

2021-10-24  Alexey Shvayka  <shvaikalesh@gmail.com>

        Assertions in IDBTransaction::request*() methods fail on cross-realm methods
        https://bugs.webkit.org/show_bug.cgi?id=230128

        Reviewed by Sihui Liu.

        Except when used with constructors, [CallWith=GlobalObject] WebIDL attribute passes
        _current_ global object [1], one that the function was created in.

        A method from another realm has different ScriptExecutionContext than the IDBTransaction,
        and it's fine: function's global object is used only for IDBKey parsing and structure
        cloning as per spec [2].

        This patch removes incorrect assertions, fixing IDBObjectStore / IDBIndex cross-realm
        methods not to crash --debug build, and removes now unused JSGlobalObject parameters.

        [1] https://html.spec.whatwg.org/multipage/webappapis.html#concept-current-everything
        [2] https://www.w3.org/TR/IndexedDB/#ref-for-retrieve-a-value-from-an-object-store

        Tests: imported/w3c/web-platform-tests/IndexedDB/idbindex-cross-realm-methods.html
               imported/w3c/web-platform-tests/IndexedDB/idbobjectstore-cross-realm-methods.html

        * Modules/indexeddb/IDBCursor.cpp:
        (WebCore::IDBCursor::deleteFunction):
        * Modules/indexeddb/IDBCursor.h:
        * Modules/indexeddb/IDBCursor.idl:
        * Modules/indexeddb/IDBIndex.cpp:
        (WebCore::IDBIndex::doOpenCursor):
        (WebCore::IDBIndex::openCursor):
        (WebCore::IDBIndex::doOpenKeyCursor):
        (WebCore::IDBIndex::openKeyCursor):
        (WebCore::IDBIndex::count):
        (WebCore::IDBIndex::doCount):
        (WebCore::IDBIndex::get):
        (WebCore::IDBIndex::doGet):
        (WebCore::IDBIndex::getKey):
        (WebCore::IDBIndex::doGetKey):
        (WebCore::IDBIndex::doGetAll):
        (WebCore::IDBIndex::getAll):
        (WebCore::IDBIndex::doGetAllKeys):
        (WebCore::IDBIndex::getAllKeys):
        * Modules/indexeddb/IDBIndex.h:
        * Modules/indexeddb/IDBIndex.idl:
        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::doOpenCursor):
        (WebCore::IDBObjectStore::openCursor):
        (WebCore::IDBObjectStore::doOpenKeyCursor):
        (WebCore::IDBObjectStore::openKeyCursor):
        (WebCore::IDBObjectStore::get):
        (WebCore::IDBObjectStore::getKey):
        (WebCore::IDBObjectStore::putOrAdd):
        Use IDBObjectStore's context instead of _current_ global object for private browsing
        check as per recommendation for spec authors [1]. This doesn't seem to be observable.

        (WebCore::IDBObjectStore::deleteFunction):
        (WebCore::IDBObjectStore::doDelete):
        (WebCore::IDBObjectStore::clear):
        (WebCore::IDBObjectStore::createIndex):
        (WebCore::IDBObjectStore::count):
        (WebCore::IDBObjectStore::doCount):
        (WebCore::IDBObjectStore::doGetAll):
        (WebCore::IDBObjectStore::getAll):
        (WebCore::IDBObjectStore::doGetAllKeys):
        (WebCore::IDBObjectStore::getAllKeys):
        * Modules/indexeddb/IDBObjectStore.h:
        * Modules/indexeddb/IDBObjectStore.idl:
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::requestOpenCursor):
        (WebCore::IDBTransaction::doRequestOpenCursor):
        (WebCore::IDBTransaction::requestGetAllObjectStoreRecords):
        (WebCore::IDBTransaction::requestGetAllIndexRecords):
        (WebCore::IDBTransaction::requestGetRecord):
        (WebCore::IDBTransaction::requestGetValue):
        (WebCore::IDBTransaction::requestGetKey):
        (WebCore::IDBTransaction::requestIndexRecord):
        (WebCore::IDBTransaction::requestCount):
        (WebCore::IDBTransaction::requestDeleteRecord):
        (WebCore::IDBTransaction::requestClearObjectStore):
        (WebCore::IDBTransaction::requestPutOrAdd):
        * Modules/indexeddb/IDBTransaction.h:
        * inspector/agents/InspectorIndexedDBAgent.cpp:

2021-10-24  Tyler Wilcock  <tyler_w@apple.com>

        AX: Any addition of children should funnel through AccessibilityObject::addChild
        https://bugs.webkit.org/show_bug.cgi?id=231914

        Reviewed by Chris Fleizach.

        All addition of children now goes through
        AccessibilityObject::addChild. This is good for two reasons:

        1. It ensures we aren't inserting ignored elements into the tree.
        `insertChild` (downstream of `addChild`) checks this. Prior to this
        patch, there were cases where we could insert ignored children into the
        tree because no check was made.

        2. We can reliably set state on the child based on the state of the
        parent at insertion time. For example, children can set a flag if
        any of their ancestors have an application or document role, which can
        be useful for some AX clients.

        * accessibility/AccessibilityARIAGrid.cpp:
        (WebCore::AccessibilityARIAGrid::addTableCellChild):
        (WebCore::AccessibilityARIAGrid::addChildren):
        * accessibility/AccessibilityLabel.cpp:
        (WebCore::AccessibilityLabel::insertChild):
        Add DescendIfIgnored parameter.

        * accessibility/AccessibilityLabel.h:
        * accessibility/AccessibilityListBox.cpp:
        (WebCore::AccessibilityListBox::addChildren):
        * accessibility/AccessibilityMenuList.cpp:
        (WebCore::AccessibilityMenuList::addChildren):
        * accessibility/AccessibilityMenuListOption.cpp:
        (WebCore::AccessibilityMenuListOption::AccessibilityMenuListOption):
        (WebCore::AccessibilityMenuListOption::isVisible const):
        (WebCore::AccessibilityMenuListOption::elementRect const):
        * accessibility/AccessibilityMenuListOption.h:
        (WebCore::AccessibilityMenuListOption::setParent):
        (WebCore::AccessibilityMenuListOption::parentObject const):
        Add missing `parentObject` (and corresponding `setParent`) methods.
        Prior to this patch, these objects always returned `nullptr` from
        the `AccessibilityObject::parentObject()`.
        * accessibility/AccessibilityMenuListPopup.cpp:
        (WebCore::AccessibilityMenuListPopup::addChildren):

        * accessibility/AccessibilityObject.cpp:
        (WebCore::isTableComponent): Added.
        (WebCore::AccessibilityObject::insertChild):
        (WebCore::AccessibilityObject::addChild):
        Add DescendIfIgnored::{Yes, No} to control whether or not
        these functions descend to and add the child's children if the given
        child is ignored.

        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityObjectInterface.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::addImageMapChildren):
        (WebCore::AccessibilityRenderObject::addTextFieldChildren):
        (WebCore::AccessibilityRenderObject::addRemoteSVGChildren):
        * accessibility/AccessibilityScrollView.cpp:
        (WebCore::AccessibilityScrollView::addChildScrollbar):
        * accessibility/AccessibilitySlider.cpp:
        (WebCore::AccessibilitySlider::addChildren):
        * accessibility/AccessibilitySpinButton.cpp:
        (WebCore::AccessibilitySpinButton::addChildren):
        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::addChildren):
        (WebCore::AccessibilityTable::addTableCellChild):
        * accessibility/AccessibilityTableColumn.cpp:
        (WebCore::AccessibilityTableColumn::addChildren):
        * accessibility/AccessibilityTableHeaderContainer.cpp:
        (WebCore::AccessibilityTableHeaderContainer::addChildren):
        * accessibility/AccessibilityTableRow.cpp:
        (WebCore::AccessibilityTableRow::addChildren):
        * accessibility/isolatedtree/AXIsolatedObject.cpp:
        (WebCore::AXIsolatedObject::addChild):
        (WebCore::AXIsolatedObject::insertChild):
        Add DescendIfIgnored parameter.

        * accessibility/isolatedtree/AXIsolatedObject.h:

2021-10-24  Alexey Shvayka  <shvaikalesh@gmail.com>

        document.open() and friends use incorrect document as a source for reseted document's URL
        https://bugs.webkit.org/show_bug.cgi?id=230131

        Reviewed by Chris Dumez.

        With this patch, Document's open() / write() / writeln() methods receive entry global
        object's document [1] as an argument, which is used to perform same-origin security check
        and to set the URL of reseted document from. Aligns WebKit with Blink and Gecko.

        Instead of maintaining consistency with FirstWindow, EntryDocument is named to match
        the spec and because it's not always the "first" (topmost) document, but rather a document
        of closest <script> or inline event handler.

        ResponsibleDocument is removed because it's now unused and, in terms of implementation,
        a poor man's IncumbentWindow. Also, the spec describes different concept by that name [2].

        [1] https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#opening-the-input-stream:entry-global-object
        [2] https://html.spec.whatwg.org/multipage/webappapis.html#responsible-document

        Tests: http/tests/security/aboutBlank/security-context-grandchildren-lexical.html
               http/tests/security/aboutBlank/security-context-grandchildren-write-lexical.html
               http/tests/security/aboutBlank/security-context-grandchildren-writeln-lexical.html
               imported/w3c/web-platform-tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/url-entry-document-sync-call.window.html

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::responsibleDocument): Deleted.
        * bindings/js/JSDOMWindowBase.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateCallWith):
        * bindings/scripts/IDLAttributes.json:
        * dom/Document+HTML.idl:
        * dom/Document.cpp:
        (WebCore::Document::open):
        (WebCore::Document::write):
        (WebCore::Document::writeln):
        * dom/Document.h:

2021-10-24  Rob Buis  <rbuis@igalia.com>

        [css-contain] Support contain:style for counters
        https://bugs.webkit.org/show_bug.cgi?id=226458

        Reviewed by Antti Koivisto.

        Remove unneeded logic from r284642 change.

        * rendering/RenderCounter.cpp:
        (WebCore::previousInPreOrder):

2021-10-23  Rob Buis  <rbuis@igalia.com>

        Null check in traverseNodesForSerialization
        https://bugs.webkit.org/show_bug.cgi?id=230704

        Reviewed by Wenson Hsieh.

        Pass startNode by value instead of by pointer to
        traverseNodesForSerialization.

        Test: editing/pasteboard/copy-with-shadow-tree-crash.html

        * editing/markup.cpp:
        (WebCore::StyledMarkupAccumulator::serializeNodes):
        (WebCore::StyledMarkupAccumulator::traverseNodesForSerialization):

2021-10-23  Alan Bujtas  <zalan@apple.com>

        Addressing post-commit review (r284744).

        * layout/formattingContexts/inline/InlineContentBreaker.cpp:
        (WebCore::Layout::midWordBreak):

2021-10-23  Chris Dumez  <cdumez@apple.com>

        Add support for rel="noopener/noreferrer" on <form> elements
        https://bugs.webkit.org/show_bug.cgi?id=232170

        Reviewed by Darin Adler.

        Add support for rel="opener/noopener/noreferrer" on <form> elements:
        - https://html.spec.whatwg.org/multipage/links.html#get-an-element's-noopener
        - https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#form-submission-algorithm:get-an-element's-noopener
        - https://html.spec.whatwg.org/multipage/forms.html#dom-form-rel
        - https://html.spec.whatwg.org/multipage/links.html#linkTypes

        This patch also adds support for the rel and relList attributes on <form>.

        Test: fast/forms/form-relList.html

        * html/HTMLFormElement.cpp:
        (WebCore::parseFormRelAttributes):
        (WebCore::HTMLFormElement::submit):
        (WebCore::HTMLFormElement::parseAttribute):
        (WebCore::HTMLFormElement::relList):
        * html/HTMLFormElement.h:
        * html/HTMLFormElement.idl:
        * loader/FormSubmission.h:
        (WebCore::FormSubmission::newFrameOpenerPolicy const):
        (WebCore::FormSubmission::setNewFrameOpenerPolicy):
        (WebCore::FormSubmission::referrerPolicy const):
        (WebCore::FormSubmission::setReferrerPolicy):
        * loader/NavigationScheduler.cpp:

2021-10-23  Alan Bujtas  <zalan@apple.com>

        LFC][IFC] Unexpected content wrap when the containing block width is relative (take 2)
        https://bugs.webkit.org/show_bug.cgi?id=232192

        Reviewed by Antti Koivisto.

        This is a more generic workaround (see r279678) for the block vs. inline measuring issue
        where the block width is stored in a LayoutUnit while the inline layout uses float exclusively.
        The implicit float flooring at computing the block width may produce an unexpectedly short available space.
        e.g
          <div style="font-family: Monospace; width: 3ch; overflow-wrap: anywhere">foobar</div>

          assume the resolved 3ch is: 17.79999999px (float).
          It should allow us to put [foo] on the first line.
          However during a float -> LayoutUnit conversion, the resolved value becomes 17.79px.
          This floored value leads to an early, unexpected breaking position at [fo].

        * layout/formattingContexts/inline/InlineContentBreaker.cpp:
        (WebCore::Layout::InlineContentBreaker::processInlineContent):
        (WebCore::Layout::InlineContentBreaker::processOverflowingContentWithText const):
        * layout/formattingContexts/inline/InlineLineBuilder.cpp:
        (WebCore::Layout::LineBuilder::handleFloatContent):
        (WebCore::Layout::availableWidth):
        (WebCore::Layout::LineBuilder::handleInlineContent):
        (WebCore::Layout::LineBuilder::rebuildLineForTrailingSoftHyphen):

2021-10-23  Chris Dumez  <cdumez@apple.com>

        anchor.relList.supports("opener") should return true
        https://bugs.webkit.org/show_bug.cgi?id=232182

        Reviewed by Darin Adler.

        anchor.relList.supports("opener") should return true since we support "opener" on
        anchor elements.

        No new tests, updated existing test.

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::relList):

2021-10-23  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Breaking before hyphen is only allowed when line-break is loose
        https://bugs.webkit.org/show_bug.cgi?id=232191

        Reviewed by Antti Koivisto.

        This is in preparation for enabling the fix for webkit.org/b/232192.

        Two hyphenation related WPT tests (line-break-normal-hyphens-002.html, line-break-strict-hyphens-002.html)
        simply pass because of a LayoutUnit (block width) vs. float (measured text width) precision mismatching bug.
        This precision issue makes the line breaking code believe that fewer characters fit the line
        producing the expected results for those two tests.
        Let's fix the line breaking logic first by adding "breaks before hyphens" rules,
        so that when webkit.org/b/232192 is addressed, we won't be seeing any WPT regressions.

        * layout/formattingContexts/inline/InlineContentBreaker.cpp:
        (WebCore::Layout::midWordBreak):

2021-10-23  David Kilzer  <ddkilzer@apple.com>

        WebAVPlayerController should use WeakPtr<> for C++ instance variables
        <https://webkit.org/b/231919>

        Reviewed by Eric Carlson.

        * platform/ios/PlaybackSessionInterfaceAVKit.h:
        (WebCore::PlaybackSessionInterfaceAVKit):
        - Make RefCounted-class also subclass CanMakeWeakPtr<>.

        * platform/ios/WebAVPlayerController.h:
        - Add comments that `delegate` and `playbackSessionInterface`
          instance variables are held weakly.  The compiler won't allow
          `weak` to be used on non-Objective-C types, though.

        * platform/ios/WebAVPlayerController.mm:
        - Add WeakPtr<> instance variables for `delegate` and
          `playbackSessionInterface` properties.
        (-[WebAVPlayerController delegate]): Add.
        (-[WebAVPlayerController setDelegate:]): Add.
        (-[WebAVPlayerController playbackSessionInterface]): Add.
        (-[WebAVPlayerController setPlaybackSessionInterface:]): Add.
        - Implement getter/setter methods for `delegate` and
          `playbackSessionInterface` properties that use WeakPtr<>
          instance variables.

2021-10-23  Chris Fleizach  <cfleizach@apple.com>

        AX: Unify speech synthesizer platform usage for Mac/iOS
        https://bugs.webkit.org/show_bug.cgi?id=231895
        <rdar://problem/84372479>

        Reviewed by Andres Gonzalez.

        AVSpeechSynthesizer has been fully supported on macOS for a number of years. This allows us to unify platform usage.

        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/cocoa/PlatformSpeechSynthesizerCocoa.mm: Renamed from Source/WebCore/platform/ios/PlatformSpeechSynthesizerIOS.mm.
        (getAVSpeechUtteranceDefaultSpeechRate):
        (getAVSpeechUtteranceMaximumSpeechRate):
        (-[WebSpeechSynthesisWrapper initWithSpeechSynthesizer:]):
        (-[WebSpeechSynthesisWrapper mapSpeechRateToPlatformRate:]):
        (-[WebSpeechSynthesisWrapper speakUtterance:]):
        (-[WebSpeechSynthesisWrapper pause]):
        (-[WebSpeechSynthesisWrapper resume]):
        (-[WebSpeechSynthesisWrapper cancel]):
        (-[WebSpeechSynthesisWrapper speechSynthesizer:didStartSpeechUtterance:]):
        (-[WebSpeechSynthesisWrapper speechSynthesizer:didFinishSpeechUtterance:]):
        (-[WebSpeechSynthesisWrapper speechSynthesizer:didPauseSpeechUtterance:]):
        (-[WebSpeechSynthesisWrapper speechSynthesizer:didContinueSpeechUtterance:]):
        (-[WebSpeechSynthesisWrapper speechSynthesizer:didCancelSpeechUtterance:]):
        (-[WebSpeechSynthesisWrapper speechSynthesizer:willSpeakRangeOfSpeechString:utterance:]):
        (WebCore::PlatformSpeechSynthesizer::PlatformSpeechSynthesizer):
        (WebCore::PlatformSpeechSynthesizer::~PlatformSpeechSynthesizer):
        (WebCore::PlatformSpeechSynthesizer::initializeVoiceList):
        (WebCore::PlatformSpeechSynthesizer::pause):
        (WebCore::PlatformSpeechSynthesizer::resume):
        (WebCore::PlatformSpeechSynthesizer::speak):
        (WebCore::PlatformSpeechSynthesizer::cancel):
        (WebCore::PlatformSpeechSynthesizer::resetState):
        * platform/mac/PlatformSpeechSynthesizerMac.mm: Removed.

2021-10-22  Jean-Yves Avenard  <jya@apple.com>

        video appears blank with only audio playing if video element isn't appended to the dom tree
        https://bugs.webkit.org/show_bug.cgi?id=232124
        rdar://83438282

        Reviewed by Eric Carlson.

        If the renderer isn't accelerated, the current playback policity is to
        not have the video tracks visible on screen.
        The HTMLMediaElement could only check if the renderer was accelerated if
        it was part of the DOM.
        On iPhone, for historical reasons, inline playback isn't allowed but
        will play fullscreen instead.

        This is a temporary workaround until bug 232125 is comlpeted which would provide
        a more elegant and universal solution.

        Test: media/video-element-fullscreen-not-in-dom-accelerated-iphone.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerRenderingCanBeAccelerated):
        * html/HTMLMediaElement.h:
        * testing/Internals.cpp:
        (WebCore::Internals::mediaPlayerRenderingCanBeAccelerated):
        * testing/Internals.h:
        * testing/Internals.idl:

2021-10-22  Said Abou-Hallawa  <said@apple.com>

        [GPU Process] REGRESSION: Drawing a large SVG image on a canvas may take too much memory
        https://bugs.webkit.org/show_bug.cgi?id=230886
        rdar://83628607

        Reviewed by Simon Fraser.

        For the GPUProcess rendering on a canvas, we have to draw the SVGImage to
        a temporary ImageBuffer, get a NativeImage from this ImageBuffer and send
        it to GPUProcess through a DrawNativeImage display list item.

        The fix is:

        1. Make sure the size of temporary ImageBuffer is scaled to the Graphics
           Context CTM. 
        2. Clamp the scaled size to the MaxClampedArea. So ImageBuffer::create()
           returns a valid ImageBuffer.
        3. Scale the destination GraphicsContext to the reciprocal of the scaling 
           factor before drawing the NativeImage.

        Test: fast/canvas/canvas-draw-large-svg-image.html

        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::drawAsNativeImage):

2021-10-22  Gabriel Nava Marino  <gnavamarino@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=232177
        Check if start and end positions are still valid after updating them through mergeEndWithNextIfIdentical

        Reviewed by Alan Bujtas.

        We currently check if start and end positions are still valid after
        updating them through mergeEndWithNextIfIdentical, but not through
        mergeStartWithPreviousIfIdentical. Add this check to avoid trying to
        deref a nullptr in ApplyStyleCommand::mergeEndWithNextIfIdentical.

        Test: fast/editing/create-link-inline-style-change-crash-001.html

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyInlineStyle):

2021-10-22  Simon Fraser  <simon.fraser@apple.com>

        Content offset in this codepen when switching tabs
        https://bugs.webkit.org/show_bug.cgi?id=231989

        Reviewed by Tim Horton.

        There were two problems that occurred with async-scrollable iframes when their associated
        WKWebView was removed and re-added to the view hierarchy (e.g. when switching tabs).
        These resulted in misplaced position:fixed content, and the first user scroll in the 
        iframe causing the scroll position to jump back to the top.

        The positon:fixed issue was caused by an ordering problem in
        ScrollingTreeFrameScrollingNode::commitStateBeforeChildren() which resulted in the layout
        viewport being computed incorrectly; we called updateViewportForCurrentScrollPosition()
        before setting the min and max scroll position, so we'd always clamp the layout viewport to
        a location of 0,0.

        The second scroll position reset issue was caused by the ScrollingTreeScrollingNode's
        m_currentScrollPosition reverting to a stale after re-attaching the iframe's scrolling
        subtree. ScrollingTreeScrollingNode::commitStateBeforeChildren() has code to set
        m_currentScrollPosition from the state tree node's scroll position on first commit;
        the issue was that ScrollingStateScrollingNode's scrollPosition() was not updated on every
        scroll, only when something triggered a scrolling tree commit.

        Fix by updating ScrollingStateScrollingNode's scrollPosition() for frame nodes on detach
        (overflow scrolling nodes have their scroll positions updated eagerly).

        Both fixes are tested by the ScrollingCoordinatorTests.ScrollingTreeAfterDetachReattach API test.

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::frameViewWillBeDetached):
        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollingCoordinator::frameViewWillBeDetached):
        * page/scrolling/ScrollingStateScrollingNode.cpp:
        (WebCore::ScrollingStateScrollingNode::hasScrollPositionRequest const):
        * page/scrolling/ScrollingStateScrollingNode.h:
        * page/scrolling/ScrollingStateTree.cpp:
        (WebCore::ScrollingStateTree::insertNode):
        * page/scrolling/ScrollingTreeFrameScrollingNode.cpp:
        (WebCore::ScrollingTreeFrameScrollingNode::commitStateBeforeChildren):
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::commitStateBeforeChildren):
        (WebCore::ScrollingTreeScrollingNode::dumpProperties const):
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::commitTreeStateIfNeeded):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::detachRootLayer):

2021-10-22  Eric Carlson  <eric.carlson@apple.com>

        [Cocoa] Fairplay encrypted video fails to play when loaded in a display:none element
        https://bugs.webkit.org/show_bug.cgi?id=232155
        rdar://83419159

        Reviewed by Jer Noble.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::currentRenderingMode const): MediaRenderingMode
        was changed from an `enum` to an `enum class` so its values can be logged.
        (WebCore::MediaPlayerPrivateAVFoundation::preferredRenderingMode const): Only return
        `MediaRenderingMode::MediaRenderingToContext` if we have been asked to paint once
        readyState is HaveMetadata or higher.
        (WebCore::MediaPlayerPrivateAVFoundation::setUpVideoRendering): MediaRenderingMode change.
        (WebCore::MediaPlayerPrivateAVFoundation::setNeedsRenderingModeChanged): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundation::prepareForRendering): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundation::setPageIsVisible): Ditto.
        (WebCore::convertEnumerationToString): MediaRenderingMode logging function.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        (WebCore::MediaPlayerPrivateAVFoundation::haveBeenAskedToPaint const):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::hasAvailableVideoFrame const): MediaRenderingMode change.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::paint): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::updateLastPixelBuffer): Set m_haveBeenAskedToPaint.

2021-10-22  Ian Anderson  <iana@apple.com>

        Add a module map file for PrivateFrameworks/WebKitLegacy
        https://bugs.webkit.org/show_bug.cgi?id=230735

        Reviewed by David Kilzer.

        Change a few quoted includes to framework style angle includes to
        support modularization.
        Make sure to define the TARGET_ macros before using them.

        * platform/ios/WebItemProviderPasteboard.h:
        * platform/ios/wak/WAKAppKitStubs.h:
        * platform/ios/wak/WAKResponder.h:
        * platform/ios/wak/WAKView.h:
        * platform/ios/wak/WAKWindow.h:
        * platform/ios/wak/WKContentObservation.h:
        * platform/ios/wak/WebCoreThreadMessage.h:

2021-10-22  Chris Dumez  <cdumez@apple.com>

        Preconnect to link's target on click
        https://bugs.webkit.org/show_bug.cgi?id=232147

        Reviewed by Alex Christensen.

        Preconnect to link's target on click, for reduced page load time. This is a confirmed
        progression on some of our page load time benchmarks.

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::handleClick):

2021-10-22  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r284713.
        https://bugs.webkit.org/show_bug.cgi?id=232187

        Broke some Apple internal builds

        Reverted changeset:

        "Add a module map file for PrivateFrameworks/WebKitLegacy"
        https://bugs.webkit.org/show_bug.cgi?id=230735
        https://commits.webkit.org/r284713

2021-10-22  Joonghun Park  <pjh0718@gmail.com>

        Integer interpolation in animations should be rounded towards positive infinity, not away from zero.
        https://bugs.webkit.org/show_bug.cgi?id=232013

        Currently, interpolation of <integer> is rounding away from 0.
        The interpolation's result should be rounded according to the spec,
        https://drafts.csswg.org/css-values-4/#combine-integers, which is

        "the result is converted to an <integer> by rounding
        to the nearest integer, with values halfway between
        adjacent integers rounded towards positive infinity."

        This patch also removes redundant static_cast<double>s
        and potential overflow(e.g.'to' is the maximum integer and 'from' is
        the minimum integer) from blend in AnimationUtilities.h.

        Reviewed by Darin Adler.

        Tests: animations/animation-order-overflow.html
               animations/animation-z-order-overflow.html
               imported/w3c/web-platform-tests/css/css-values/integer_interpolation_round_half_towards_positive_infinity_order.html
               imported/w3c/web-platform-tests/css/css-values/integer_interpolation_round_half_towards_positive_infinity_z_index.html

        * platform/animation/AnimationUtilities.h:
        (WebCore::blend):

2021-10-22  Kiet Ho  <tho22@apple.com>

        Rename ClipPathOperation to PathOperation
        https://bugs.webkit.org/show_bug.cgi?id=232167

        Reviewed by Simon Fraser.

        No functional changes, no tests required.

        * Headers.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFunc):
        * css/CSSBasicShapes.cpp:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::valueForPropertyInStyle):
        * rendering/PathOperation.h: Renamed from Source/WebCore/rendering/ClipPathOperation.h.
        (WebCore::PathOperation::operator!= const):
        (WebCore::PathOperation::isSameType const):
        (WebCore::PathOperation::PathOperation):
        * rendering/ReferencedSVGResources.cpp:
        (WebCore::ReferencedSVGResources::referencedSVGResourceIDs):
        (WebCore::ReferencedSVGResources::referencedClipperRenderer):
        * rendering/ReferencedSVGResources.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::hitTestClipPath const):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::willCompositeClipPath const):
        (WebCore::RenderLayer::computeClipPath const):
        (WebCore::RenderLayer::setupClipPath):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateMaskingLayerGeometry):
        (WebCore::RenderLayerBacking::updateMaskingLayer):
        * rendering/style/BasicShapes.cpp:
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::clipPath const):
        (WebCore::RenderStyle::initialClipPath):
        (WebCore::RenderStyle::setClipPath):
        * rendering/style/StyleRareNonInheritedData.h:
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::isPointInCSSClippingArea):
        (WebCore::SVGRenderSupport::clipContextToCSSClippingArea):
        (WebCore::SVGRenderSupport::pointInClippingArea):
        * rendering/svg/SVGRenderTreeAsText.cpp:
        (WebCore::writeResources):
        * rendering/svg/SVGRenderingContext.cpp:
        (WebCore::SVGRenderingContext::prepareToRenderSVGContent):
        * rendering/svg/SVGResources.cpp:
        (WebCore::SVGResources::buildCachedResources):
        * style/StyleBuilderConverter.h:
        (WebCore::Style::BuilderConverter::convertClipPath):

2021-10-22  Ian Anderson  <iana@apple.com>

        Add a module map file for PrivateFrameworks/WebKitLegacy
        https://bugs.webkit.org/show_bug.cgi?id=230735

        Reviewed by David Kilzer.

        Change a few quoted includes to framework style angle includes to
        support modularization.
        Make sure to define the TARGET_ macros before using them.

        * platform/ios/WebItemProviderPasteboard.h:
        * platform/ios/wak/WAKAppKitStubs.h:
        * platform/ios/wak/WAKResponder.h:
        * platform/ios/wak/WAKView.h:
        * platform/ios/wak/WAKWindow.h:
        * platform/ios/wak/WKContentObservation.h:
        * platform/ios/wak/WebCoreThreadMessage.h:

2021-10-22  Alicia Boya García  <aboya@igalia.com>

        [MSE][GStreamer] Honor MP4 edit lists, bis
        https://bugs.webkit.org/show_bug.cgi?id=231019

        Reviewed by Xabier Rodriguez-Calvar.

        This patch takes into consideration the GstSegment attached to a
        sample to offset the PTS and DTS. This ensures accurate timestamps are
        obtained for MP4 files containing edit lists (commonly necessary for
        files containing video with B frames to have PTS starting at zero).

        Before this was implemented, a workaround was in place based on a
        heuristic (DTS = 0 && PTS > 0 && PTS < 0.1). The workaround is
        preserved for the sake of content without proper edit lists, but
        any edit list takes preference.

        The time fudge factor has been modified from 0.083 seconds up to
        0.100 seconds to accomodate the size of the empty edit in test.mp4
        used by Web Platform Tests.

        This test fixes improves expectation results and fixes two subtests in
        imported/w3c/web-platform-tests/media-source/mediasource-remove.html.

        This is a reworked version that avoids using gst_sample_set_buffer()
        which is not available on GStreamer 1.14, and fixes an issue where
        frames that would get a negative DTS were not being enqueued properly.

        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::currentTimeFudgeFactor):
        * platform/graphics/SourceBufferPrivate.h:
        (WebCore::SourceBufferPrivate::timeFudgeFactor const):
        * platform/graphics/gstreamer/GStreamerCommon.h:
        (WebCore::toGstClockTime):
        * platform/graphics/gstreamer/MediaSampleGStreamer.cpp:
        (WebCore::MediaSampleGStreamer::MediaSampleGStreamer):
        * platform/graphics/gstreamer/mse/AppendPipeline.cpp:
        (WebCore::bufferTimeToStreamTime):
        (WebCore::AppendPipeline::appsinkNewSample):

2021-10-22  Alex Christensen  <achristensen@webkit.org>

        Remove release assertion in MediaResourceClient::responseReceived
        https://bugs.webkit.org/show_bug.cgi?id=232121

        Reviewed by David Kilzer.

        I tried and was unable to reproduce this, even with multipart responses which can call didReceiveResponse multiple times in the same load.
        In any case, it's clear where the crash is and that this assertion can be hit.  Not continuing with the response is better than crashing.
        Keep the debug assertion because if it is hit, we want to notice.

        * platform/network/cocoa/RangeResponseGenerator.mm:

2021-10-22  Antti Koivisto  <antti@apple.com>

        Factor style resolver context arguments into a struct
        https://bugs.webkit.org/show_bug.cgi?id=232137

        Reviewed by Antoine Quint.

        Add Style::ResolutionContext struct and use it to consistently pass around all context argument needed
        for resolving style instead of just passing around individual arguments as separate function parameter.

        An immediately benefit is that we can remove the stateful setOverrideDocumentElementStyle hack.
        This also makes the style system more flexible and extensible for future work.

        Most of the patch is mechanically replacing a parent style argument in various places with a context
        struct argument.

        * animation/AnimationEffect.h:
        * animation/CSSAnimation.cpp:
        (WebCore::CSSAnimation::create):
        * animation/CSSAnimation.h:
        * animation/CSSTransition.cpp:
        (WebCore::CSSTransition::create):
        (WebCore::CSSTransition::resolve):
        * animation/CSSTransition.h:
        * animation/DeclarativeAnimation.cpp:
        (WebCore::DeclarativeAnimation::initialize):
        * animation/DeclarativeAnimation.h:
        * animation/KeyframeEffect.cpp:
        (WebCore::KeyframeEffect::updateBlendingKeyframes):
        (WebCore::KeyframeEffect::computeDeclarativeAnimationBlendingKeyframes):
        (WebCore::KeyframeEffect::computeCSSAnimationBlendingKeyframes):
        (WebCore::KeyframeEffect::apply):
        (WebCore::KeyframeEffect::setAnimatedPropertiesInStyle):
        * animation/KeyframeEffect.h:
        * animation/KeyframeEffectStack.cpp:
        (WebCore::KeyframeEffectStack::applyKeyframeEffects):
        * animation/KeyframeEffectStack.h:
        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::resolve):
        (WebCore::WebAnimation::commitStyles):
        * animation/WebAnimation.h:
        * css/MediaQueryMatcher.cpp:
        (WebCore::MediaQueryMatcher::documentElementUserAgentStyle const):
        * css/StyleMedia.cpp:
        (WebCore::StyleMedia::matchMedium const):
        * dom/Document.cpp:
        (WebCore::Document::styleForElementIgnoringPendingStylesheets):
        * dom/Element.cpp:
        (WebCore::Element::resolveStyle):
        (WebCore::Element::resolveCustomStyle):
        * dom/Element.h:
        * html/HTMLTitleElement.cpp:
        (WebCore::HTMLTitleElement::computedTextWithDirection):
        * html/shadow/DateTimeFieldElement.cpp:
        (WebCore::DateTimeFieldElement::resolveCustomStyle):
        * html/shadow/DateTimeFieldElement.h:
        * html/shadow/SliderThumbElement.cpp:
        (WebCore::SliderThumbElement::resolveCustomStyle):
        (WebCore::SliderContainerElement::resolveCustomStyle):
        * html/shadow/SliderThumbElement.h:
        * html/shadow/TextControlInnerElements.cpp:
        (WebCore::TextControlInnerContainer::resolveCustomStyle):
        (WebCore::TextControlInnerElement::resolveCustomStyle):
        (WebCore::TextControlInnerTextElement::resolveCustomStyle):
        (WebCore::TextControlPlaceholderElement::resolveCustomStyle):
        (WebCore::SearchFieldResultsButtonElement::resolveCustomStyle):
        (WebCore::SearchFieldCancelButtonElement::resolveCustomStyle):
        * html/shadow/TextControlInnerElements.h:
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::computeFirstLineStyle const):
        (WebCore::RenderElement::getUncachedPseudoStyle const):
        * rendering/style/KeyframeList.cpp:
        (WebCore::KeyframeList::fillImplicitKeyframes):
        * style/StyleResolver.cpp:
        (WebCore::Style::Resolver::Resolver):
        (WebCore::Style::Resolver::styleForElement):
        (WebCore::Style::Resolver::styleForKeyframe):
        (WebCore::Style::Resolver::keyframeStylesForAnimation):
        (WebCore::Style::Resolver::pseudoStyleForElement):
        * style/StyleResolver.h:
        (WebCore::Style::Resolver::overrideDocumentElementStyle const): Deleted.
        (WebCore::Style::Resolver::setOverrideDocumentElementStyle): Deleted.
        * style/StyleTreeResolver.cpp:
        (WebCore::Style::TreeResolver::Scope::Scope):
        (WebCore::Style::TreeResolver::Scope::~Scope):
        (WebCore::Style::TreeResolver::styleForStyleable):
        (WebCore::Style::TreeResolver::resolveElement):
        (WebCore::Style::TreeResolver::resolvePseudoStyle):
        (WebCore::Style::TreeResolver::makeResolveContext):
        (WebCore::Style::TreeResolver::makeResolveContextForPseudoElement):
        (WebCore::Style::TreeResolver::parentBoxStyleForPseudoElement const):
        (WebCore::Style::TreeResolver::createAnimatedElementUpdate):
        (WebCore::Style::TreeResolver::parentBoxStyleForPseudo const): Deleted.
        * style/StyleTreeResolver.h:
        * style/Styleable.cpp:
        (WebCore::Styleable::updateCSSAnimations const):
        (WebCore::updateCSSTransitionsForStyleableAndProperty):
        * style/Styleable.h:
        (WebCore::Styleable::applyKeyframeEffects const):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::resolveCustomStyle):
        * svg/SVGElement.h:
        * svg/SVGElementRareData.h:
        (WebCore::SVGElementRareData::overrideComputedStyle):
        * testing/Internals.cpp:
        (WebCore::Internals::highlightPseudoElementColor):

2021-10-22  Sihui Liu  <sihui_liu@apple.com>

        Followup to r284652: ensure file handle is closed in web process
        https://bugs.webkit.org/show_bug.cgi?id=232127

        Reviewed by Youenn Fablet.

        Covered by test: storage/filesystemaccess/sync-access-handle-close-worker.html  

        * Modules/filesystemaccess/FileSystemSyncAccessHandle.cpp:
        (WebCore::FileSystemSyncAccessHandle::~FileSystemSyncAccessHandle): make sure file handle is closed when
        FileSystemSyncAccessHandle is destroyed.
        (WebCore::FileSystemSyncAccessHandle::closeInternal):
        (WebCore::FileSystemSyncAccessHandle::close):
        * Modules/filesystemaccess/FileSystemSyncAccessHandle.h:

2021-10-22  Ayumi Kojima  <ayumi_kojima@apple.com>

        Unreviewed, reverting r284606.

        Reverting because this commit caused accessibility/ios-
        simulator/accessibility-aria-table-children.html to fail

        Reverted changeset:

        "AX: Any addition of children should funnel through
        AccessibilityObject::addChild"
        https://bugs.webkit.org/show_bug.cgi?id=231914
        https://commits.webkit.org/r284606

2021-10-22  Ayumi Kojima  <ayumi_kojima@apple.com>

        Unreviewed, reverting r284654.

        Reverting because this commit caused scrolling tests to fail

        Reverted changeset:

        "Content offset in this codepen when switching tabs"
        https://bugs.webkit.org/show_bug.cgi?id=231989
        https://commits.webkit.org/r284654

2021-10-22  Simon Fraser  <simon.fraser@apple.com>

        Do GrpahicsContext and EventRegion clipping-related save/restore via RAII objects
        https://bugs.webkit.org/show_bug.cgi?id=231985

        Reviewed by Antti Koivisto.

        Remove all but one of the bare context.save() calls in RenderLayer by passing a
        GraphicsContextStateSaver to clipToRect() and setupClipPath().

        Also pass a EventRegionContextStateSaver for the equivalent save/restore on EventRegionContext.

        This allows us to remove restoreClip() entirely.

        * rendering/EventRegion.h:
        (WebCore::EventRegionContextStateSaver::EventRegionContextStateSaver):
        (WebCore::EventRegionContextStateSaver::~EventRegionContextStateSaver):
        (WebCore::EventRegionContextStateSaver::pushClip):
        (WebCore::EventRegionContextStateSaver::context const):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::clipToRect):
        (WebCore::RenderLayer::paintLayerWithEffects):
        (WebCore::RenderLayer::setupClipPath):
        (WebCore::RenderLayer::applyFilters):
        (WebCore::RenderLayer::paintLayerContents):
        (WebCore::RenderLayer::paintTransformedLayerIntoFragments):
        (WebCore::RenderLayer::paintBackgroundForFragments):
        (WebCore::RenderLayer::paintForegroundForFragments):
        (WebCore::RenderLayer::paintForegroundForFragmentsWithPhase):
        (WebCore::RenderLayer::paintOutlineForFragments):
        (WebCore::RenderLayer::paintMaskForFragments):
        (WebCore::RenderLayer::paintChildClippingMaskForFragments):
        (WebCore::RenderLayer::paintOverflowControlsForFragments):
        (WebCore::RenderLayer::restoreClip): Deleted.
        * rendering/RenderLayer.h:

2021-10-22  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Check the parent style for content wrapping when collecting wrap opportunities
        https://bugs.webkit.org/show_bug.cgi?id=232056

        Reviewed by Antti Koivisto.

        See the comment in LineBuilder::handleInlineContent.

        * layout/formattingContexts/inline/InlineLineBuilder.cpp:
        (WebCore::Layout::LineBuilder::handleInlineContent):

2021-10-22  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add missing isAtSoftWrapOpportunity check when between two whitespace inline items
        https://bugs.webkit.org/show_bug.cgi?id=232055

        Reviewed by Antti Koivisto.

        Due to the isWrappingAllowed checks in isAtSoftWrapOpportunity() to speed up line breaking,
        we may end up with adjacent whitespace content with different wrapping styles (embedded in separate inline boxes).
        e.g. <span style="white-space: no-wrap">XXX </span><span style="white-space: normal"> X</span

        Test: fast/inline/white-space-nowrap-and-normal-inline-box.html

        * layout/formattingContexts/inline/InlineContentBreaker.cpp:
        (WebCore::Layout::isVisuallyEmptyWhitespaceContent):
        * layout/formattingContexts/inline/InlineLineBuilder.cpp:
        (WebCore::Layout::isAtSoftWrapOpportunity):

2021-10-22  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add support for checking leading collapsible whitespace in InlineContentBreaker::processOverflowingContent
        https://bugs.webkit.org/show_bug.cgi?id=232091

        Reviewed by Antti Koivisto.

        This patch ensures that the leading collapsible whitespace on the continuous run is taken
        into account when checking if the otherwise overflowing content may fit the line.
        e.g.
        <span style="white-space: nowrap">no_wrap </span><span> yes_wrap</span>
        The " yes_wrap" content has a collapsible leading whitespace here.
        (This is also a preparation for fixing a regression and a WPT test.)

        * layout/formattingContexts/inline/InlineContentBreaker.cpp:
        (WebCore::Layout::isVisuallyEmptyWhitespaceContent):
        (WebCore::Layout::InlineContentBreaker::processOverflowingContent const):
        (WebCore::Layout::InlineContentBreaker::ContinuousContent::append):
        (WebCore::Layout::InlineContentBreaker::ContinuousContent::reset):
        * layout/formattingContexts/inline/InlineContentBreaker.h:
        (WebCore::Layout::InlineContentBreaker::ContinuousContent::leadingCollapsibleWidth const):
        (WebCore::Layout::InlineContentBreaker::ContinuousContent::trailingCollapsibleWidth const):
        (WebCore::Layout::InlineContentBreaker::ContinuousContent::hasCollapsibleContent const):
        (WebCore::Layout::InlineContentBreaker::ContinuousContent::isFullyCollapsible const):
        (WebCore::Layout::InlineContentBreaker::ContinuousContent::collapsibleLogicalWidth const): Deleted.
        (WebCore::Layout::InlineContentBreaker::ContinuousContent::nonCollapsibleLogicalWidth const): Deleted.
        (WebCore::Layout::InlineContentBreaker::ContinuousContent::hasTrailingCollapsibleContent const): Deleted.

2021-10-22  Alan Bujtas  <zalan@apple.com>

        FontCascade::widthForSimpleText fails to produce matching measured width for monospace font
        https://bugs.webkit.org/show_bug.cgi?id=232104
        <rdar://83991027>

        Reviewed by Antti Koivisto.

        Adjust widthForSimpleText to match WidthIterator's logic as the comment says:

          "This is needed only to match the result of the slow path
           Same glyph widths but different floating point arithmetic can produce different run width."
        (see r213008)

        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::widthForSimpleText const):

2021-10-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][a11y] Localized role name doesn't work with ATSPI enabled
        https://bugs.webkit.org/show_bug.cgi?id=232136

        Reviewed by Adrian Perez de Castro.

        I switched to use SortedArrayMap in AccessibilityAtspi::localizedRoleName() but I didn't realize the array was
        not actually sorted. We just need to sort it for SortedArrayMap to work as expected.

        * accessibility/atspi/AccessibilityAtspi.cpp:

2021-10-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][a11y] Add implementation of text interface when building with ATSPI
        https://bugs.webkit.org/show_bug.cgi?id=230258

        Reviewed by Adrian Perez de Castro.

        * SourcesGTK.txt:
        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::postTextStateChangeNotification):
        (WebCore::AXObjectCache::postTextReplacementNotification):
        (WebCore::AXObjectCache::postTextReplacementNotificationForTextControl):
        (WebCore::AXObjectCache::enqueuePasswordValueChangeNotification):
        * accessibility/AXObjectCache.h:
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::textIteratorBehaviorForTextRange const):
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::indexForVisiblePosition const):
        * accessibility/atspi/AXObjectCacheAtspi.cpp:
        (WebCore::AXObjectCache::postTextStateChangePlatformNotification):
        (WebCore::AXObjectCache::postTextReplacementPlatformNotificationForTextControl):
        (WebCore::AXObjectCache::postTextReplacementPlatformNotification):
        (WebCore::AXObjectCache::nodeTextChangePlatformNotification): Deleted.
        * accessibility/atspi/AccessibilityAtspi.cpp:
        (WebCore::AccessibilityAtspi::textChanged):
        (WebCore::AccessibilityAtspi::textAttributesChanged):
        (WebCore::AccessibilityAtspi::textCaretMoved):
        (WebCore::AccessibilityAtspi::textSelectionChanged):
        * accessibility/atspi/AccessibilityAtspi.h:
        * accessibility/atspi/AccessibilityAtspiEnums.h:
        * accessibility/atspi/AccessibilityObjectAtspi.cpp:
        (WebCore::roleIsTextType):
        (WebCore::AccessibilityObjectAtspi::interfacesForObject):
        (WebCore::AccessibilityObjectAtspi::path):
        (WebCore::AccessibilityObjectAtspi::buildInterfaces const):
        * accessibility/atspi/AccessibilityObjectAtspi.h:
        * accessibility/atspi/AccessibilityObjectTextAtspi.cpp: Added.
        (WebCore::AccessibilityObjectAtspi::atspiBoundaryToTextGranularity):
        (WebCore::AccessibilityObjectAtspi::atspiGranularityToTextGranularity):
        (WebCore::offsetMapping):
        (WebCore::UTF16OffsetToUTF8):
        (WebCore::UTF8OffsetToUTF16):
        (WebCore::AccessibilityObjectAtspi::text const):
        (WebCore::AccessibilityObject::getLengthForTextRange const):
        (WebCore::AccessibilityObject::allowsTextRanges const):
        (WebCore::AccessibilityObjectAtspi::textInserted):
        (WebCore::AccessibilityObjectAtspi::textDeleted):
        (WebCore::AccessibilityObjectAtspi::boundaryOffset const):
        (WebCore::AccessibilityObjectAtspi::textAtOffset const):
        (WebCore::AccessibilityObjectAtspi::characterAtOffset const):
        (WebCore::AccessibilityObjectAtspi::boundsForRange const):
        (WebCore::AccessibilityObjectAtspi::textExtents const):
        (WebCore::AccessibilityObjectAtspi::offsetAtPoint const):
        (WebCore::AccessibilityObjectAtspi::boundsForSelection const):
        (WebCore::AccessibilityObjectAtspi::selectedRange const):
        (WebCore::AccessibilityObjectAtspi::selectionBounds const):
        (WebCore::AccessibilityObjectAtspi::setSelectedRange):
        (WebCore::AccessibilityObjectAtspi::selectRange):
        (WebCore::AccessibilityObjectAtspi::selectionChanged):
        (WebCore::AccessibilityObjectAtspi::textAttributes const):
        (WebCore::AccessibilityObjectAtspi::textAttributesWithUTF8Offset const):
        (WebCore::AccessibilityObjectAtspi::textAttributesChanged):
        (WebCore::AccessibilityObjectAtspi::scrollToMakeVisible const):
        (WebCore::AccessibilityObjectAtspi::scrollToPoint const):
        * editing/atspi/FrameSelectionAtspi.cpp:
        (WebCore::FrameSelection::notifyAccessibilityForSelectionChange):
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::setInnerTextValue):

2021-10-22  Youenn Fablet  <youenn@apple.com>

        Audio over peer connection becomes latent when changing the output
        https://bugs.webkit.org/show_bug.cgi?id=231110
        <rdar://problem/84049005>

        Reviewed by Eric Carlson.

        Add support for detecting change of timeline by looking at sample times. This happens when changing audio output.
        Make AudioMediaStreamTrackRendererInternalUnit call a callback to let the unit deal with it.
        When switching output, audio data is kept growing but is not read for some time by the remote unit, even though the remote unit is running.
        The unit can ask its sources to update their offset to not keep extra buffered data.

        Manually tested.

        * platform/audio/cocoa/AudioSampleDataSource.h:
        * platform/mediastream/cocoa/AudioMediaStreamTrackRendererCocoa.cpp:
        * platform/mediastream/cocoa/AudioMediaStreamTrackRendererCocoa.h:
        * platform/mediastream/cocoa/AudioMediaStreamTrackRendererInternalUnit.cpp:
        * platform/mediastream/cocoa/AudioMediaStreamTrackRendererInternalUnit.h:
        * platform/mediastream/cocoa/AudioMediaStreamTrackRendererUnit.cpp:
        * platform/mediastream/cocoa/AudioMediaStreamTrackRendererUnit.h:

2021-10-22  Antti Koivisto  <antti@apple.com>

        Remove Style::Resolver::m_isDeleted
        https://bugs.webkit.org/show_bug.cgi?id=232089

        Reviewed by Kimmo Kinnunen.

        Not useful anymore.

        * style/StyleResolver.cpp:
        (WebCore::Style::Resolver::~Resolver):
        (WebCore::Style::Resolver::styleForElement):
        (WebCore::Style::Resolver::styleForKeyframe):
        (WebCore::Style::Resolver::styleForPage):
        * style/StyleResolver.h:

2021-10-22  Patrick Griffis  <pgriffis@igalia.com>

        [GTK] Rewrite LowPowerModeNotifier to use GPowerProfileMonitor
        https://bugs.webkit.org/show_bug.cgi?id=231958

        Reviewed by Carlos Garcia Campos.

        This replaces the previous direct use of UPower with some advantages:

        - Fixes support while being sandboxed without UPower DBus access
        - Respects a system-wide low power mode rather than only being
          enabled when the battery is low

        I decided to remove the old behavior entirely as it is a very
        different behavior than the new one and subjectively worse.

        * platform/LowPowerModeNotifier.h:
        * platform/glib/LowPowerModeNotifierGLib.cpp:
        (WebCore::LowPowerModeNotifier::LowPowerModeNotifier):
        (WebCore::LowPowerModeNotifier::powerSaverEnabledNotifyCallback):
        (WebCore::LowPowerModeNotifier::~LowPowerModeNotifier):

2021-10-22  Kimmo Kinnunen  <kkinnunen@apple.com>

        WebGL low-power and high-performance contexts should use different ANGLE Metal EGLDisplays
        https://bugs.webkit.org/show_bug.cgi?id=231012
        <rdar://problem/83971417>

        Reviewed by Dean Jackson.

        Use per-power preference EGLDisplay when creating Metal
        contexts.

        Adds a new API test.

        * platform/RuntimeApplicationChecks.cpp:
        (WebCore::setAuxiliaryProcessTypeForTesting):
        * platform/RuntimeApplicationChecks.h:
        Add a test function to reset the process type after test has set a specific type and then
        run to completion. process for the duration of the test. The volatile context flag in
        GraphicsContextGLOpenGL depends on condition isWebProcess || isGPUProcess.
        * platform/graphics/angle/GraphicsContextGLANGLE.cpp:
        (WebCore::GraphicsContextGLOpenGL::releaseThreadResources):
        * platform/graphics/cocoa/GraphicsContextGLOpenGLCocoa.mm:
        (WebCore::initializeEGLDisplay):
        (WebCore::GraphicsContextGLOpenGL::GraphicsContextGLOpenGL):
        (WebCore::GraphicsContextGLOpenGL::setContextVisibility):
        (WebCore::GraphicsContextGLOpenGL::displayWasReconfigured):
        * platform/graphics/opengl/GraphicsContextGLOpenGL.h:

2021-10-21  Cathie Chen  <cathiechen@igalia.com>

        The intrisic size of picture image inside a template is always zero
        https://bugs.webkit.org/show_bug.cgi?id=227682

        Reviewed by Darin Adler.

        When the picture element is inside a template element, it belongs to a template document which does not
        have frame or RenderView, this would affect the source selection and size calculation. Though it calls
        sourcesChanged to adjust the source in HTMLPictureElement::didMoveToNewDocument, but at this point
        the image element is still inside the template document, so it does not help with this scenario. To
        fix it, call sourcesChanged in HTMLImageElement::didMoveToNewDocument instead.

        Test: fast/picture/picture-inside-template.html

        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::didMoveToNewDocument):
        * html/HTMLPictureElement.cpp:
        (WebCore::HTMLPictureElement::didMoveToNewDocument): Deleted.
        * html/HTMLPictureElement.h:

2021-10-21  Gabriel Nava Marino  <gnavamarino@apple.com>

        Two null box iterators from different paths fail to compare equal
        https://bugs.webkit.org/show_bug.cgi?id=232093

        Reviewed by Antti Koivisto.

        Test: fast/clip/clip-hit-null-iterator-path-comparison.html

        * layout/integration/InlineIteratorBox.cpp:
        (WebCore::InlineIterator::BoxIterator::operator== const):

2021-10-21  Saam Barati  <sbarati@apple.com>

        Clean up some code around checking the state of Watchpoints
        https://bugs.webkit.org/show_bug.cgi?id=232111

        Reviewed by Yusuke Suzuki.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::getOwnPropertySlot):

2021-10-21  Chris Dumez  <cdumez@apple.com>

        Form submission should be cancelled if the form gets detached from inside the formdata event handler
        https://bugs.webkit.org/show_bug.cgi?id=232114

        Reviewed by Alex Christensen.

        Per the HTML specification [1], form submission should abort if the form cannot navigate (which is true
        when the form is detached). The algorithm in the specification does the check twice, once at the very
        beginning (Step 1 in the spec), and again after calling the "constructing the entry list" algorithm
        (step 9 in the spec). The reason we need to do the check again is that the "constructing the entry list"
        algorithm fires the "formdata" event and may thus run JavaScript and the JS can detach the form element.

        In HTMLFormElement::submit(), we were doing only the "form is connected" check only at the beginning
        of the function and failing to do so after constructing the FormSubmission object (which ends up constructing
        the entry list). This patch fixes that.

        [1] https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#concept-form-submit

        Test: fast/forms/remove-form-inside-formdata-event.html

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::submit):

2021-10-21  Chris Dumez  <cdumez@apple.com>

        RELEASE_ASSERT(result) under FormSubmission::create()
        https://bugs.webkit.org/show_bug.cgi?id=232112

        Reviewed by Geoffrey Garen.

        form.submit() should early return if the form's |constructing entry list| flag is true, as per:
        - https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#concept-form-submit (Step 2)

        We were missing this check. As a result, we would call FormSubmission::create(), which would call
        form.constructEntryList(). This would end up returning an unexpected nullptr because the
        form's |constructing entry list| flag is set and we would hit the `RELEASE_ASSERT(result)` in
        FormSubmission::create().

        Test: fast/forms/submit-form-inside-formdata-event.html

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::submit):
        * loader/FormSubmission.cpp:
        (WebCore::FormSubmission::create):

2021-10-21  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r275641): [ iPad Debug ] accessibility/ios-simulator/scroll-in-overflow-div.html is asserting
        https://bugs.webkit.org/show_bug.cgi?id=228622

        Reviewed by Alan Bujtas.

        The test was hitting ASSERT(!m_visibleContentStatusDirty). It seems harmless to clear
        repaint rects when m_visibleContentStatusDirty is true.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::clearRepaintRects):

2021-10-21  Simon Fraser  <simon.fraser@apple.com>

        Content offset in this codepen when switching tabs
        https://bugs.webkit.org/show_bug.cgi?id=231989

        Reviewed by Tim Horton.

        There were two problems that occurred with async-scrollable iframes when their associated
        WKWebView was removed and re-added to the view hierarchy (e.g. when switching tabs).
        These resulted in misplaced position:fixed content, and the first user scroll in the 
        iframe causing the scroll position to jump back to the top.

        The positon:fixed issue was caused by an ordering problem in
        ScrollingTreeFrameScrollingNode::commitStateBeforeChildren() which resulted in the layout
        viewport being computed incorrectly; we called updateViewportForCurrentScrollPosition()
        before setting the min and max scroll position, so we'd always clamp the layout viewport to
        a location of 0,0.

        The second scroll position reset issue was caused by the ScrollingTreeScrollingNode's
        m_currentScrollPosition reverting to a stale after re-attaching the iframe's scrolling
        subtree. ScrollingTreeScrollingNode::commitStateBeforeChildren() has code to set
        m_currentScrollPosition from the state tree node's scroll position on first commit;
        the issue was that ScrollingStateScrollingNode's scrollPosition() was not updated on every
        scroll, only when something triggered a scrolling tree commit.

        Fix by silently updating ScrollingStateScrollingNode's scrollPosition() when we get
        notifications back from the scrolling thread that a scroll happened.

        Both fixes are tested by the ScrollingCoordinatorTests.ScrollingTreeAfterDetachReattach API test.

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::updateScrollPositionAfterAsyncScroll):
        * page/scrolling/ScrollingStateScrollingNode.cpp:
        (WebCore::ScrollingStateScrollingNode::syncScrollPosition):
        (WebCore::ScrollingStateScrollingNode::hasScrollPositionRequest const):
        * page/scrolling/ScrollingStateScrollingNode.h:
        * page/scrolling/ScrollingStateTree.cpp:
        (WebCore::ScrollingStateTree::insertNode):
        * page/scrolling/ScrollingTreeFrameScrollingNode.cpp:
        (WebCore::ScrollingTreeFrameScrollingNode::commitStateBeforeChildren): We need to check
        state.hasScrollPositionRequest(), otherwise the "cancel animated scroll request" that comes
        out of Page::stopKeyboardScrollAnimation() prevents scroll position restoration.
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::commitStateBeforeChildren):
        (WebCore::ScrollingTreeScrollingNode::dumpProperties const):
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::commitTreeStateIfNeeded):

2021-10-21  Sihui Liu  <sihui_liu@apple.com>

        FileSystemSyncAccessHandle should close platform file handle on close()
        https://bugs.webkit.org/show_bug.cgi?id=232067
        <rdar://problem/84517013>

        Reviewed by Youenn Fablet.

        This patch also ensures no request is sent after close() is called.

        Test: storage/filesystemaccess/sync-access-handle-close-worker.html

        * Modules/filesystemaccess/FileSystemFileHandle.cpp:
        (WebCore::FileSystemFileHandle::createSyncAccessHandle):
        * Modules/filesystemaccess/FileSystemSyncAccessHandle.cpp:
        (WebCore::FileSystemSyncAccessHandle::FileSystemSyncAccessHandle):
        (WebCore::FileSystemSyncAccessHandle::~FileSystemSyncAccessHandle):
        (WebCore::FileSystemSyncAccessHandle::isClosingOrClosed const):
        (WebCore::FileSystemSyncAccessHandle::truncate):
        (WebCore::FileSystemSyncAccessHandle::getSize):
        (WebCore::FileSystemSyncAccessHandle::flush):
        (WebCore::FileSystemSyncAccessHandle::close):
        (WebCore::FileSystemSyncAccessHandle::didClose):
        (WebCore::FileSystemSyncAccessHandle::read):
        (WebCore::FileSystemSyncAccessHandle::write):
        * Modules/filesystemaccess/FileSystemSyncAccessHandle.h:

2021-10-21  Dean Jackson  <dino@apple.com>

        [WebXR] WebXR on Cocoa doesn't work with multisampled contexts
        https://bugs.webkit.org/show_bug.cgi?id=226687
        <rdar://problem/78910868>

        Reviewed by Tim Horton.

        If the WebXR session requested an anti-aliased context, we'd
        end up with an incomplete framebuffer because we were never
        initialising the multisample buffers. This would assert on
        debug builds and produce no output on release builds.

        Fix this by initialising the multisample buffers, ensuring
        we're targeting them in startFrame, and do the resolution
        in endFrame.

        * Modules/webxr/WebXROpaqueFramebuffer.cpp:
        (WebCore::WebXROpaqueFramebuffer::startFrame):
        (WebCore::WebXROpaqueFramebuffer::endFrame): While here, use NEAREST
        sampling on the multisample resolution, the way we do in WebGL.

2021-10-21  Rob Buis  <rbuis@igalia.com>

        [css-contain] Support contain:style for counters
        https://bugs.webkit.org/show_bug.cgi?id=226458

        Reviewed by Antti Koivisto.

        Parse contain: style and use it (if set) to scope
        counter-increment to the element's sub-tree [1].

        Tests: imported/w3c/web-platform-tests/css/css-contain/contain-style-counters-001.html
               imported/w3c/web-platform-tests/css/css-contain/contain-style-counters-002.html
               imported/w3c/web-platform-tests/css/css-contain/contain-style-counters-003.html
               imported/w3c/web-platform-tests/css/css-contain/contain-style-counters-004.html

        [1] https://drafts.csswg.org/css-contain-2/#containment-style

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::valueForPropertyInStyle):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeContain):
        * rendering/RenderCounter.cpp:
        (WebCore::ancestorStyleContainmentObject):
        (WebCore::previousInPreOrder):
        (WebCore::previousSiblingOrParentElement):
        (WebCore::makeCounterNode):
        (WebCore::RenderCounter::rendererSubtreeAttached):
        * rendering/RenderObject.cpp:
        (WebCore::shouldApplyStyleContainment):
        * rendering/RenderObject.h:
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::containsStyle const):
        * rendering/style/RenderStyleConstants.h:
        * style/StyleBuilderCustom.h:
        (WebCore::Style::BuilderCustom::applyValueContain):

2021-10-19  Darin Adler  <darin@apple.com>

        [Cocoa] Merge and simplify the nsColor family of functions
        https://bugs.webkit.org/show_bug.cgi?id=231992

        Reviewed by Anders Carlsson.

        - Added a CocoaColor type that is NS/UIColor.
        - Renamed platformColor to cocoaColor to be less vague.
        - Removed nsColor.
        - Added cocoaColorOrNil.
        - Merged colorFromNSColor and colorFromUIColor into a single
          colorFromCocoaColor function.

        * WebCore.xcodeproj/project.pbxproj: Removed ColorIOS.h.

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (AXAttributeStringSetStyle): Use cocoaColor instead of nsColor.

        * editing/cocoa/FontAttributesCocoa.mm:
        (WebCore::FontAttributes::createDictionary const): Use cocoaColor
        instead of platformColor.
        * editing/cocoa/FontShadowCocoa.mm:
        (WebCore::FontShadow::createShadow const): Ditto.

        * editing/cocoa/HTMLConverter.mm:
        (HTMLConverter::_colorForElement): Use cocoaColor instead of
        platformColor.
        (WebCore::editingAttributedString): Use cocoaColor instead of
        nsColor.

        * platform/cocoa/DragImageCocoa.mm:
        (WebCore::createDragImageForLink): Use colorFromCocoaColor
        instead of colorFromNSColor.
        (WebCore::createDragImageForColor): Use cocoaColor instead of
        nsColor.

        * platform/graphics/cocoa/ColorCocoa.h: Added an include of
        "Color.h" so this functions as an addition to that header
        instead of something independent. Added a WebCore::CocoaColor
        type, like the one we already have in WebKit, to cut down on
        the need to do #if and #else so much. Renamed the
        platformColor function to cocoaColor, added a
        cocoaColorOrNil function, and renamed both colorFromNSColor
        and colorFromUIColor to colorFromCocoaColor and moved here.

        * platform/graphics/cocoa/ColorCocoa.mm:
        (WebCore::cocoaColor): Renamed the iOS platformColor to this.
        (WebCore::cocoaColorOrNil): Added.

        * platform/graphics/mac/ColorMac.h: Include of "ColorCocoa.h"
        instead of "Color.h" here. Moved colorFromNSColor and nsColor.

        * platform/graphics/mac/ColorMac.mm:
        (WebCore::colorFromCocoaColor): Renamed from colorFromNSColor.
        (WebCore::cocoaColor): Renamed from nsColor.

        * platform/ios/ColorIOS.h: Removed.

        * platform/ios/ColorIOS.mm:
        (WebCore::colorFromCocoaColor): Renamed from colorFromUIColor.

        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::PlatformPasteboard::setColor): Use cocoaColor instead
        of +[UIColor colorWithCGColor:] and cachedCGColor.

        * platform/mac/LocalDefaultSystemAppearance.mm:
        (WebCore::LocalDefaultSystemAppearance::LocalDefaultSystemAppearance):
        Use cocoaColor instead of nsColor.

        * platform/mac/PlatformPasteboardMac.mm:
        (WebCore::PlatformPasteboard::color): Use colorFromCocoaColor
        instead of colorFromNSColor.
        (WebCore::PlatformPasteboard::setColor): Use cocoaColor instead
        of nsColor.

        * platform/mac/ThemeMac.mm:
        (WebCore::drawCellFocusRingWithFrameAtTime): Use colorFromCocoaColor
        instead of colorFromNSColor.
        * platform/mac/WebCoreNSFontManagerExtras.mm:
        (WebCore::computedFontAttributeChanges): DItto.

        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::systemFocusRingColor): Use
        colorFromCocoaColor instead of colorFromUIColor.
        (WebCore::attachmentActionColor): Use cocoaColor instead of
        +[UIColor colorWithCGColor:] and cachedCGColor and return a
        RetainPtr to avoid autorelease.
        (WebCore::RenderAttachmentInfo::RenderAttachmentInfo): Update for
        the user of the RetainPtr.

        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::platformActiveSelectionBackgroundColor const):
        Use colorFromCocoaColor instead of colorFromNSColor.
        (WebCore::RenderThemeMac::platformInactiveSelectionBackgroundColor const): Ditto.
        (WebCore::RenderThemeMac::platformActiveSelectionForegroundColor const): Ditto.
        (WebCore::RenderThemeMac::platformInactiveSelectionForegroundColor const): Ditto.
        (WebCore::RenderThemeMac::platformActiveListBoxSelectionBackgroundColor const): Ditto.
        (WebCore::RenderThemeMac::platformInactiveListBoxSelectionBackgroundColor const): Ditto.
        (WebCore::RenderThemeMac::platformActiveListBoxSelectionForegroundColor const): Ditto.
        (WebCore::RenderThemeMac::platformInactiveListBoxSelectionForegroundColor const): Ditto.
        (WebCore::RenderThemeMac::platformFocusRingColor const): Ditto.
        (WebCore::RenderThemeMac::platformTextSearchHighlightColor const): Ditto.
        (WebCore::RenderThemeMac::platformDefaultButtonTextColor const): Ditto.
        (WebCore::titleTextColorForAttachment): Ditto.
        (WebCore::AttachmentLayout::layOutTitle): Removed incorrect cast that said it
        was casting a CGColorRef to an NSColor *, which are not toll-free bridged. This
        code just needs a CGColorRef in a dictionary, so we just need to cast to id,
        not to a NSColor *.
        (WebCore::AttachmentLayout::layOutSubtitle): Ditto.
        (WebCore::paintAttachmentTitleBackground): Use colorFromCocoaColor instead of
        colorFromNSColor.

2021-10-21  Devin Rousso  <drousso@apple.com>

        [css-values-4] Support small (sv*), large (lv*) and dynamic (dv*) viewport units
        https://bugs.webkit.org/show_bug.cgi?id=219287
        <rdar://problem/71857370>

        Reviewed by Simon Fraser.

        Spec: <https://drafts.csswg.org/css-values-4/#viewport-variants>

        Tests: CSSViewportUnits.AllSame
               CSSViewportUnits.EmptyUnobscuredSizeOverrides
               CSSViewportUnits.SameUnobscuredSizeOverrides
               CSSViewportUnits.DifferentUnobscuredSizeOverrides

        * css/CSSUnits.h:
        * css/CSSUnits.cpp:
        (WebCore::operator<<):
        * css/CSSPrimitiveValue.h:
        (WebCore::CSSPrimitiveValue::isViewportPercentageLength):
        (WebCore::CSSPrimitiveValue::isViewportPercentageWidth): Deleted.
        (WebCore::CSSPrimitiveValue::isViewportPercentageHeight): Deleted.
        (WebCore::CSSPrimitiveValue::isViewportPercentageMax): Deleted.
        (WebCore::CSSPrimitiveValue::isViewportPercentageMin): Deleted.
        * css/CSSPrimitiveValue.cpp:
        (WebCore::isValidCSSUnitTypeForDoubleConversion):
        (WebCore::isStringType):
        (WebCore::CSSPrimitiveValue::cleanup):
        (WebCore::CSSPrimitiveValue::computeUnzoomedNonCalcLengthDouble):
        (WebCore::CSSPrimitiveValue::computeNonCalcLengthDouble):
        (WebCore::CSSPrimitiveValue::unitTypeString):
        (WebCore::CSSPrimitiveValue::formatNumberForCustomCSSText const):
        (WebCore::CSSPrimitiveValue::equals const):
        * css/CSSToLengthConversionData.h:
        * css/CSSToLengthConversionData.cpp:
        (WebCore::CSSToLengthConversionData::defaultViewportFactor const): Added.
        (WebCore::CSSToLengthConversionData::smallViewportFactor const): Added.
        (WebCore::CSSToLengthConversionData::largeViewportFactor const): Added.
        (WebCore::CSSToLengthConversionData::dynamicViewportFactor const): Added.
        (WebCore::CSSToLengthConversionData::viewportWidthFactor const): Deleted.
        (WebCore::CSSToLengthConversionData::viewportHeightFactor const): Deleted.
        (WebCore::CSSToLengthConversionData::viewportMinFactor const): Deleted.
        (WebCore::CSSToLengthConversionData::viewportMaxFactor const): Deleted.
        * css/parser/CSSParserToken.cpp:
        (WebCore::cssPrimitiveValueUnitFromTrie):
        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::consumeLengthRawWithKnownTokenTypeDimension):
        * css/calc/CSSCalcCategoryMapping.cpp:
        (WebCore::calcUnitCategory):
        (WebCore::calculationCategoryForCombination):
        (WebCore::hasDoubleValue):
        Add support for parsing the following and converting them to their underlying value:
        - `svw` "small viewport width" is the width of the viewport if all UA interfaces are maximized
        - `svh` "small viewport height" is the height of the viewport if all UA interfaces are maximized
        - `svmin` "small viewport small dimension" is `min(svw, svh)`
        - `svmax` "small viewport large dimension" is `max(svw, svh)`
        - `lvw` "large viewport width" is the width of the viewport if all UA interfaces are minimized
        - `lvh` "large viewport height" is the height of the viewport if all UA interfaces are minimized
        - `lvmin` "large viewport small dimension" is `min(lvw, lvh)`
        - `lvmax` "large viewport large dimension" is `max(lvw, lvh)`
        - `dvw` "dynamic viewport width" is the width of the viewport with all UA interfaces being in whatever state they are currently in
        - `dvh` "dynamic viewport height" is the height of the viewport with all UA interfaces being in whatever state they are currently in
        - `dvmin` "dynamic viewport small dimension" is `min(dvw, dvh)`
        - `dvmax` "dynamic viewport large dimension" is `max(dvw, dvh)`
        The existing `vw`/`vh`/`vmin`/`vmax` correspond to the "UA-default viewport", which WebKit
        considers equivalent to the "large viewport" `lvw`/`lvh`/`lvmin`/`lvmax`.

        * page/FrameView.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::unobscuredContentSizeChanged):
        (WebCore::FrameView::performSizeToContentAutoSize):
        (WebCore::FrameView::enableAutoSizeMode):
        (WebCore::FrameView::clearSizeOverrideForCSSSmallViewportUnits): Added.
        (WebCore::FrameView::setSizeForCSSSmallViewportUnits): Added.
        (WebCore::FrameView::overrideWidthForCSSSmallViewportUnits): Added.
        (WebCore::FrameView::resetOverriddenWidthForCSSSmallViewportUnits): Added.
        (WebCore::FrameView::overrideSizeForCSSSmallViewportUnits): Added.
        (WebCore::FrameView::sizeForCSSSmallViewportUnits const): Added.
        (WebCore::FrameView::clearSizeOverrideForCSSLargeViewportUnits): Renamed from `clearViewportSizeOverrideForCSSViewportUnits`.
        (WebCore::FrameView::setSizeForCSSLargeViewportUnits): Renamed from `setViewportSizeForCSSViewportUnits`.
        (WebCore::FrameView::overrideWidthForCSSLargeViewportUnits): Renamed from `overrideViewportWidthForCSSViewportUnits`.
        (WebCore::FrameView::resetOverriddenWidthForCSSLargeViewportUnits): Renamed from `resetOverriddenViewportWidthForCSSViewportUnits`.
        (WebCore::FrameView::overrideSizeForCSSLargeViewportUnits): Renamed from `overrideViewportSizeForCSSViewportUnits`.
        (WebCore::FrameView::sizeForCSSLargeViewportUnits const): Renamed from `viewportSizeForCSSViewportUnits`.
        (WebCore::FrameView::calculateSizeForCSSViewportUnitsOverride const): Added.
        (WebCore::FrameView::sizeForCSSDynamicViewportUnits const): Added.
        (WebCore::FrameView::sizeForCSSDefaultViewportUnits const): Added.
        * rendering/RenderView.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::sizeForCSSSmallViewportUnits const): Added.
        (WebCore::RenderView::sizeForCSSLargeViewportUnits const): Renamed from `viewportSizeForCSSViewportUnits`.
        (WebCore::RenderView::sizeForCSSDynamicViewportUnits const): Added.
        (WebCore::RenderView::sizeForCSSDefaultViewportUnits const): Added.
        For "small viewport" `svw`/`svh`/`svmin`/`svmax`, add support for a new `IntSize` member
        that is propagated from the UIProcess. If not set, fall back to "UA-default viewport" `vw`/`vh`/`vmin`/`vmax`.
        For "large viewport" `lvw`/`lvh`/`lvmin`/`lvmax`, use the same value as "UA-default viewport" `vw`/`vh`/`vmin`/`vmax`.
        For "dynamic viewport" `dvw`/`dvh`/`dvmin`/`dvmax`, use the same value as `window.inner*`.
        Drive-by: Rename `viewportSizeForCSSViewportUnits` to `sizeForCSSLargeViewportUnits` for clarity.

        * platform/graphics/FloatSize.h:
        (WebCore::FloatSize::minDimension const): Added.
        (WebCore::FloatSize::maxDimension const): Added.
        * platform/graphics/IntSize.h:
        (WebCore::IntSize::minDimension const): Added.
        (WebCore::IntSize::maxDimension const): Added.
        Add utility/helper methods for returning the minimum/maximum of the width vs height.

        * css/DeprecatedCSSOMPrimitiveValue.cpp:
        (WebCore::DeprecatedCSSOMPrimitiveValue::primitiveType const):
        Don't `ASSERT_NOT_REACHED` now that there are new unit types.

2021-10-21  Aditya Keerthi  <akeerthi@apple.com>

        [macOS] Update appearance of <datalist> indicator
        https://bugs.webkit.org/show_bug.cgi?id=232031
        rdar://84474135

        Reviewed by Wenson Hsieh.

        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintListButtonForInput):

        Use CoreUI to paint the indicator on Big Sur and Monterey.

2021-10-21  Devin Rousso  <drousso@apple.com>

        REGRESSION(r283864): Apple Pay named images are missing
        https://bugs.webkit.org/show_bug.cgi?id=232050
        <rdar://problem/84413831>

        Reviewed by Andy Estes.

        `NamedImageGeneratedImage` already does a translate before calling into `drawNamedImage`, so
        there's no reason to pass along the location of the named image. Instead, just pass the size.

        Tests: fast/css/webkit-named-image/apple-pay-logo-black/offset.html
               fast/css/webkit-named-image/apple-pay-logo-white/offset.html

        * platform/Theme.h:
        * platform/Theme.cpp:
        (WebCore::Theme::drawNamedImage const):
        * platform/cocoa/ThemeCocoa.h:
        * platform/cocoa/ThemeCocoa.mm:
        (WebCore::drawApplePayButton):
        (WebCore::ThemeCocoa::drawNamedImage const):

        * platform/graphics/NamedImageGeneratedImage.cpp:
        (WebCore::NamedImageGeneratedImage::draw):
        (WebCore::NamedImageGeneratedImage::drawPattern):

2021-10-21  Tyler Wilcock  <tyler_w@apple.com>

        AX: Remove redundant insert of autofill button child in AccessibilityRenderObject::addTextFieldChildren
        https://bugs.webkit.org/show_bug.cgi?id=232033

        Reviewed by Chris Fleizach.

        Autofill buttons are represented in the DOM, so there's no reason
        to also insert it in AccessibilityRenderObject::addTextFieldChildren.
        This results in duplicate objects for this button in the AX tree.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::addTextFieldChildren):
        Remove redundant insertion of autofill button element into the
        accessibility tree.

2021-10-21  Tyler Wilcock  <tyler_w@apple.com>

        AX: Any addition of children should funnel through AccessibilityObject::addChild
        https://bugs.webkit.org/show_bug.cgi?id=231914

        Reviewed by Chris Fleizach.

        All addition of children now goes through
        AccessibilityObject::addChild. This is good for two reasons:

        1. It ensures we aren't inserting ignored elements into the tree.
        `insertChild` (downstream of `addChild`) checks this. Prior to this
        patch, there were cases where we could insert ignored children into the
        tree because no check was made.

        2. We can reliably set state on the child based on the state of the
        parent at insertion time. For example, children can set a flag if
        any of their ancestors have an application or document role, which can
        be useful for some AX clients.

        * accessibility/AccessibilityARIAGrid.cpp:
        (WebCore::AccessibilityARIAGrid::addTableCellChild):
        (WebCore::AccessibilityARIAGrid::addChildren):
        * accessibility/AccessibilityListBox.cpp:
        (WebCore::AccessibilityListBox::addChildren):
        * accessibility/AccessibilityMenuList.cpp:
        (WebCore::AccessibilityMenuList::addChildren):
        * accessibility/AccessibilityMenuListPopup.cpp:
        (WebCore::AccessibilityMenuListPopup::addChildren):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::isAutofillButton):
        (WebCore::isTableComponent):
        (WebCore::AccessibilityObject::insertChild):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::addImageMapChildren):
        (WebCore::AccessibilityRenderObject::addTextFieldChildren):
        (WebCore::AccessibilityRenderObject::addRemoteSVGChildren):
        * accessibility/AccessibilityScrollView.cpp:
        (WebCore::AccessibilityScrollView::addChildScrollbar):
        * accessibility/AccessibilitySlider.cpp:
        (WebCore::AccessibilitySlider::addChildren):
        * accessibility/AccessibilitySpinButton.cpp:
        (WebCore::AccessibilitySpinButton::addChildren):
        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::addChildren):
        (WebCore::AccessibilityTable::addTableCellChild):
        * accessibility/AccessibilityTableColumn.cpp:
        (WebCore::AccessibilityTableColumn::addChildren):
        * accessibility/AccessibilityTableHeaderContainer.cpp:
        (WebCore::AccessibilityTableHeaderContainer::addChildren):
        * accessibility/AccessibilityTableRow.cpp:
        (WebCore::AccessibilityTableRow::addChildren):

2021-10-21  Antti Koivisto  <antti@apple.com>

        Move Style::Resolver::State out of header
        https://bugs.webkit.org/show_bug.cgi?id=232074

        Reviewed by Antoine Quint.

        It is an implementation detail.

        * style/PageRuleCollector.cpp:
        (WebCore::Style::PageRuleCollector::isLeftPage const):
        * style/PageRuleCollector.h:
        (WebCore::Style::PageRuleCollector::PageRuleCollector):

        Provide just the root text direction instead of the State.

        * style/StyleResolver.cpp:
        (WebCore::Style::Resolver::State::State):
        (WebCore::Style::Resolver::State::element const):
        (WebCore::Style::Resolver::State::setStyle):
        (WebCore::Style::Resolver::State::style const):
        (WebCore::Style::Resolver::State::takeStyle):
        (WebCore::Style::Resolver::State::setParentStyle):
        (WebCore::Style::Resolver::State::parentStyle const):
        (WebCore::Style::Resolver::State::rootElementStyle const):
        (WebCore::Style::Resolver::State::userAgentAppearanceStyle const):
        (WebCore::Style::Resolver::State::setUserAgentAppearanceStyle):
        (WebCore::Style::Resolver::styleForPage):
        * style/StyleResolver.h:
        (WebCore::Style::Resolver::State::State): Deleted.
        (WebCore::Style::Resolver::State::element const): Deleted.
        (WebCore::Style::Resolver::State::style const): Deleted.
        (WebCore::Style::Resolver::State::takeStyle): Deleted.
        (WebCore::Style::Resolver::State::parentStyle const): Deleted.
        (WebCore::Style::Resolver::State::rootElementStyle const): Deleted.
        (WebCore::Style::Resolver::State::userAgentAppearanceStyle const): Deleted.
        (WebCore::Style::Resolver::State::setUserAgentAppearanceStyle): Deleted.

2021-10-21  Antoine Quint  <graouts@webkit.org>

        CSSPropertyZoom needs wrapper that ensures it's always blended into a positive value.
        https://bugs.webkit.org/show_bug.cgi?id=232020
        <rdar://problem/84469930>

        Reviewed by Antti Koivisto.

        Test: webanimations/zoom-animation-crash.html

        The "zoom" CSS property is expected to be always larger than 0, so let's ensure we do not allow
        values <= 0 while blending. To do so we repurpose NonNegativeFloatPropertyWrapper to now take
        an argument specifying if the blended value should be non-negative or positive.

        * animation/CSSPropertyAnimation.cpp:
        (WebCore::FloatPropertyWrapper::FloatPropertyWrapper):
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):
        (WebCore::NonNegativeFloatPropertyWrapper::NonNegativeFloatPropertyWrapper): Deleted.

2021-10-21  Antoine Quint  <graouts@webkit.org>

        Pass CompositeOperation to CSSPropertyAnimation::blendProperties and through more blending functions
        https://bugs.webkit.org/show_bug.cgi?id=232069

        Reviewed by Antti Koivisto.

        In preparation for support of CompositeOperation when blending, we need to pass it down from blendProperties()
        to other blending functions. Currently we only ever pass Replace so there is no change in behavior.

        * animation/CSSPropertyAnimation.cpp:
        (WebCore::CSSPropertyBlendingContext::CSSPropertyBlendingContext):
        (WebCore::AnimationPropertyWrapperBase::canInterpolate const):
        (WebCore::CSSPropertyAnimation::blendProperties):
        (WebCore::CSSPropertyAnimation::canPropertyBeInterpolated):
        * animation/CSSPropertyAnimation.h:
        * animation/KeyframeEffect.cpp:
        (WebCore::KeyframeEffect::setAnimatedPropertiesInStyle):
        * platform/LengthSize.h:
        (WebCore::blend):
        * platform/animation/AnimationUtilities.h:
        (WebCore::BlendingContext::BlendingContext):
        * platform/graphics/transforms/AffineTransform.cpp:
        (WebCore::AffineTransform::blend):
        * platform/graphics/transforms/AffineTransform.h:
        * platform/graphics/transforms/RotateTransformOperation.cpp:
        (WebCore::RotateTransformOperation::blend):
        * platform/graphics/transforms/TransformOperation.h:
        * platform/graphics/transforms/TransformationMatrix.cpp:
        (WebCore::blendFloat):
        (WebCore::TransformationMatrix::blend2):
        (WebCore::TransformationMatrix::blend4):
        (WebCore::TransformationMatrix::blend):
        * platform/graphics/transforms/TransformationMatrix.h:

2021-10-21  Chris Lord  <clord@igalia.com>

        [GTK] Slow scrolling (not matching GTK native scroll amount)
        https://bugs.webkit.org/show_bug.cgi?id=197100

        Reviewed by Simon Fraser.

        Fix up behaviour with interrupting smooth scrolling, mainly on
        keyboard-initiated scrolling, but also for the mouse-wheel. When
        interrupting a smooth scroll, the animation curve is now changed from
        ease-in-out to ease-out and the duration is recalculated.

        No new tests, covered by existing tests.

        * platform/ScrollAnimation.h:
        (WebCore::ScrollAnimation::destinationOffset const):
        * platform/ScrollAnimationSmooth.cpp:
        (WebCore::ScrollAnimationSmooth::ScrollAnimationSmooth):
        (WebCore::ScrollAnimationSmooth::startAnimatedScrollToDestination):
        (WebCore::ScrollAnimationSmooth::retargetActiveAnimation):
        (WebCore::ScrollAnimationSmooth::animateScroll):
        (WebCore::ScrollAnimationSmooth::startOrRetargetAnimation): Deleted.
        * platform/ScrollAnimationSmooth.h:
        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::scroll):
        * platform/ScrollingEffectsController.cpp:
        (WebCore::ScrollingEffectsController::retargetAnimatedScrollBy):
        (WebCore::ScrollingEffectsController::handleWheelEvent):
        * platform/ScrollingEffectsController.h:

2021-10-20  Brady Eidson  <beidson@apple.com>

        WebKit Managed Notifications: Skeleton NotificationProvider
        https://bugs.webkit.org/show_bug.cgi?id=231786

        Reviewed by Alex Christensen.

        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setBuiltInNotificationsEnabled):
        (WebCore::RuntimeEnabledFeatures::builtInNotificationsEnabled const):

2021-10-20  Beth Dakin  <bdakin@apple.com> and Dana Estra <destra@apple.com>

        macOS key-driven smooth scrolling does not stop when focus changes
        https://bugs.webkit.org/show_bug.cgi?id=228302

        Reviewed by Simon Fraser.

        Call stopKeyboardScrollAnimation() on the old FrameView after changing Frame focus.
        * page/FocusController.cpp:
        (WebCore::FocusController::setFocusedFrame):

        Call stopKeyboardScrollAnimation() when the window visibility / active state changes.
        * page/Page.cpp:
        (WebCore::Page::setActivityState):
        (WebCore::Page::stopKeyboardScrollAnimation):
        * page/Page.h:

        Plumbing to get to ScrollingEffectsController, which can invoke keyUp.
        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::stopKeyboardScrollAnimation):
        * platform/ScrollAnimator.h:
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::stopKeyboardScrollAnimation):
        * platform/ScrollableArea.h:

2021-10-20  Fujii Hironori  <Hironori.Fujii@sony.com>

        The code decoding std::optional<ImagePaintingOptions> can't be compiled by PlayStation due to the ImagePaintingOptions template constructor
        https://bugs.webkit.org/show_bug.cgi?id=231980

        Reviewed by Ross Kirsling.

        PlayStation clang can't compile the following code.
        > std::optional<ImagePaintingOptions> val;
        > decoder >> val;

        It reports the following error.
        > include\type_traits:3825:31: error: no member named 'value' in 'std::is_convertible<optional<WebCore::ImagePaintingOptions> &, WebCore::ImagePaintingOptions>'

        * platform/graphics/ImagePaintingOptions.h:
        (WebCore::ImagePaintingOptions::ImagePaintingOptions): Use SFINAE
        for the first template constructor not to conflict with the second
        one.

2021-10-20  Sihui Liu  <sihui_liu@apple.com>

        Remove useless definition from IDBDatabase.idl
        https://bugs.webkit.org/show_bug.cgi?id=231997

        Reviewed by Chris Dumez.

        DOMStringList is also iterable in WebKit now, so we don't need to keep this definition for compatibility (see
        https://github.com/w3c/IndexedDB/issues/85#issuecomment-272587319).

        Covered by existing test storage/indexeddb/transaction-basics.html, which verifies that DOMStringList can be 
        argument for IDBDatabase.transaction().

        * Modules/indexeddb/IDBDatabase.idl:

2021-10-20  Sihui Liu  <sihui_liu@apple.com>

        Share code between JSDOMIterator and JSDOMAsyncIterator
        https://bugs.webkit.org/show_bug.cgi?id=231437
        <rdar://problem/84306323>

        Reviewed by Youenn Fablet.

        * bindings/js/JSDOMAsyncIterator.h:
        (WebCore::jsPair): Deleted.
        (WebCore::iteratorCreate): Deleted.
        * bindings/js/JSFileSystemDirectoryHandleIterator.h:

2021-10-20  Rob Buis  <rbuis@igalia.com>

        Fix percentages on orthogonal replaced children
        https://bugs.webkit.org/show_bug.cgi?id=46496

        Reviewed by Darin Adler.

        Modify computeReplacedLogicalWidthUsing to make it aware of the orthogonal flow case
        when dealing with calc/percentages.

        This patch also removes an outdated comment from computeReplacedLogicalHeightUsing.

        Test: imported/w3c/web-platform-tests/wpt/css/css-writing-modes/sizing-percentages-replaced-orthogonal-001.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeReplacedLogicalWidthUsing const):
        (WebCore::RenderBox::computeReplacedLogicalHeightUsing const):

2021-10-20  Ross Kirsling  <ross.kirsling@sony.com>

        Mac CMake build should not need to include iOS headers
        https://bugs.webkit.org/show_bug.cgi?id=231998

        Reviewed by Alex Christensen.

        * PlatformMac.cmake:
        * platform/ios/WebItemProviderPasteboard.h:

2021-10-20  Antti Koivisto  <antti@apple.com>

        fast/images/text-recognition/mac/select-rotated-transparent-image-overlay.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=232008
        rdar://84276269

        Reviewed by Alan Bujtas.

        Other browsers and WPT tests imported/w3c/web-platform-tests/css/css-pseudo/highlight-painting-003.html
        and imported/w3c/web-platform-tests/css/css-pseudo/highlight-painting-004.html agree with our new painting
        behavior. Change the test instead of changing the behavior back.

        Also fix the legacy line layout to have the same painting behavior.

        * layout/integration/InlineIteratorLine.cpp:
        (WebCore::InlineIterator::Line::blockDirectionPointInLine const):

        Fix to use selectionTopForHitTesting as the point needs to be within the hittable line.

        * rendering/LegacyRootInlineBox.cpp:
        (WebCore::LegacyRootInlineBox::selectionTop const):

        For consistency also make the legacy selection painting behavior match.

2021-10-20  Antti Koivisto  <antti@apple.com>

        Don't re-evaluate viewport dependent media queries if the viewport doesn't change
        https://bugs.webkit.org/show_bug.cgi?id=231949
        rdar://77240171

        Reviewed by Alan Bujtas.

        If there are many viewport dependent rules (some pages have thousands) re-evaluating can take a while.
        It is currently done unconditionally before layout.

        * css/MediaQueryEvaluator.cpp:
        (WebCore::mediaQueryViewportStateForDocument):
        * css/MediaQueryEvaluator.h:
        * style/StyleScope.cpp:
        (WebCore::Style::Scope::evaluateMediaQueriesForViewportChange):

        Save the viewport state so we can test if anything that affects media query results has changed since the last time.

        * style/StyleScope.h:

2021-10-20  Yusuke Suzuki  <ysuzuki@apple.com>

        AudioArray should ensure 32byte alignment
        https://bugs.webkit.org/show_bug.cgi?id=232011

        Reviewed by Eric Carlson.

        When enabling libpas on x86[1], we observed occasional test failure in webaudio/AudioNode/tail-processing.html test.
        We found that while the input & kernel has the exact same values, vDSP_conv in WebAudio DirectConvolver.cpp generates
        slightly different outputs (like a error)! This is because vDSP_conv is switching underlying implementation based on
        input & kernel alignments: AVX2 implementation requires 32byte alignment while SSE implementation requires 16byte alignment.
        And unfortunately, these implementation has very slightly different results.

        Previously we are setting 16byte alignment in bmalloc in AudioArray. But luckily, in many cases, it was getting 32byte
        alignment. So we are always taking AVX2 implementation and the result can be identical if the input is the same.
        However, by switching to libpas, AudioArray can get 16byte aligned (but 32byte aligned) memory actually, and in that
        case, we use different implementation in vDSP_conv. So the result now depends on what alignment the allocated AudioArray gets.
        The test is running the same kernel to the same input independently, and comparing the outputs. It should be identical,
        however, if one gets 16byte aligned array while the other gets 32byte aligned array, then the result will be different,
        which is the observed failure.

        We use 32byte alignment, which is our vectorized math's maximum alignment requirement to ensure the result is deterministic
        and not depending on the allocated array's alignment.

        [1]: https://bugs.webkit.org/show_bug.cgi?id=231815

        * platform/audio/AudioArray.h:
        (WebCore::AudioArray::resize):

2021-10-20  Simon Fraser  <simon.fraser@apple.com>

        Make ScrollingStateTreeAsTextBehavior an enum class for use with OptionSet<>
        https://bugs.webkit.org/show_bug.cgi?id=232002

        Reviewed by Alan Bujtas.

        Make ScrollingStateTreeAsTextBehavior an enum class, and replace ScrollingStateTreeAsTextBehavior
        with OptionSet<ScrollingStateTreeAsTextBehavior>.

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::scrollingStateTreeAsText const):
        (WebCore::AsyncScrollingCoordinator::scrollingTreeAsText const):
        * page/scrolling/AsyncScrollingCoordinator.h:
        (WebCore::AsyncScrollingCoordinator::scrollingStateTreeAsText):
        (WebCore::AsyncScrollingCoordinator::scrollingTreeAsText):
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::scrollingStateTreeAsText const):
        (WebCore::ScrollingCoordinator::scrollingTreeAsText const):
        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollingCoordinator::scrollingStateTreeAsText):
        (WebCore::ScrollingCoordinator::scrollingTreeAsText):
        * page/scrolling/ScrollingCoordinatorTypes.h:
        * page/scrolling/ScrollingStateFixedNode.cpp:
        (WebCore::ScrollingStateFixedNode::dumpProperties const):
        * page/scrolling/ScrollingStateFixedNode.h:
        * page/scrolling/ScrollingStateFrameHostingNode.cpp:
        (WebCore::ScrollingStateFrameHostingNode::dumpProperties const):
        * page/scrolling/ScrollingStateFrameHostingNode.h:
        * page/scrolling/ScrollingStateFrameScrollingNode.cpp:
        (WebCore::ScrollingStateFrameScrollingNode::dumpProperties const):
        * page/scrolling/ScrollingStateFrameScrollingNode.h:
        * page/scrolling/ScrollingStateNode.cpp:
        (WebCore::ScrollingStateNode::dumpProperties const):
        (WebCore::ScrollingStateNode::dump const):
        (WebCore::ScrollingStateNode::scrollingStateTreeAsText const):
        * page/scrolling/ScrollingStateNode.h:
        (WebCore::ScrollingStateNode::scrollingStateTreeAsText):
        * page/scrolling/ScrollingStateOverflowScrollProxyNode.cpp:
        (WebCore::ScrollingStateOverflowScrollProxyNode::dumpProperties const):
        * page/scrolling/ScrollingStateOverflowScrollProxyNode.h:
        * page/scrolling/ScrollingStateOverflowScrollingNode.cpp:
        (WebCore::ScrollingStateOverflowScrollingNode::dumpProperties const):
        * page/scrolling/ScrollingStateOverflowScrollingNode.h:
        * page/scrolling/ScrollingStatePositionedNode.cpp:
        (WebCore::ScrollingStatePositionedNode::dumpProperties const):
        * page/scrolling/ScrollingStatePositionedNode.h:
        * page/scrolling/ScrollingStateScrollingNode.cpp:
        (WebCore::ScrollingStateScrollingNode::dumpProperties const):
        * page/scrolling/ScrollingStateScrollingNode.h:
        * page/scrolling/ScrollingStateStickyNode.cpp:
        (WebCore::ScrollingStateStickyNode::dumpProperties const):
        * page/scrolling/ScrollingStateStickyNode.h:
        * page/scrolling/ScrollingStateTree.cpp:
        (showScrollingStateTree):
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::commitTreeState):
        (WebCore::ScrollingTree::scrollingTreeAsText):
        * page/scrolling/ScrollingTree.h:
        (WebCore::ScrollingTree::scrollingTreeAsText):
        * page/scrolling/ScrollingTreeFrameHostingNode.cpp:
        (WebCore::ScrollingTreeFrameHostingNode::dumpProperties const):
        * page/scrolling/ScrollingTreeFrameHostingNode.h:
        * page/scrolling/ScrollingTreeFrameScrollingNode.cpp:
        (WebCore::ScrollingTreeFrameScrollingNode::dumpProperties const):
        * page/scrolling/ScrollingTreeFrameScrollingNode.h:
        * page/scrolling/ScrollingTreeNode.cpp:
        (WebCore::ScrollingTreeNode::dumpProperties const):
        (WebCore::ScrollingTreeNode::dump const):
        * page/scrolling/ScrollingTreeNode.h:
        * page/scrolling/ScrollingTreeOverflowScrollingNode.cpp:
        (WebCore::ScrollingTreeOverflowScrollingNode::dumpProperties const):
        * page/scrolling/ScrollingTreeOverflowScrollingNode.h:
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::dumpProperties const):
        * page/scrolling/ScrollingTreeScrollingNode.h:
        * page/scrolling/cocoa/ScrollingTreeFixedNode.h:
        * page/scrolling/cocoa/ScrollingTreeFixedNode.mm:
        (WebCore::ScrollingTreeFixedNode::dumpProperties const):
        * page/scrolling/cocoa/ScrollingTreeOverflowScrollProxyNode.h:
        * page/scrolling/cocoa/ScrollingTreeOverflowScrollProxyNode.mm:
        (WebCore::ScrollingTreeOverflowScrollProxyNode::dumpProperties const):
        * page/scrolling/cocoa/ScrollingTreePositionedNode.h:
        * page/scrolling/cocoa/ScrollingTreePositionedNode.mm:
        (WebCore::ScrollingTreePositionedNode::dumpProperties const):
        * page/scrolling/cocoa/ScrollingTreeStickyNode.h:
        * page/scrolling/cocoa/ScrollingTreeStickyNode.mm:
        (WebCore::ScrollingTreeStickyNode::dumpProperties const):
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::commitTreeStateIfNeeded):
        * page/scrolling/nicosia/ScrollingTreeFixedNode.cpp:
        (WebCore::ScrollingTreeFixedNode::dumpProperties const):
        * page/scrolling/nicosia/ScrollingTreeFixedNode.h:
        * page/scrolling/nicosia/ScrollingTreeOverflowScrollProxyNode.cpp:
        (WebCore::ScrollingTreeOverflowScrollProxyNode::dumpProperties const):
        * page/scrolling/nicosia/ScrollingTreeOverflowScrollProxyNode.h:
        * page/scrolling/nicosia/ScrollingTreePositionedNode.cpp:
        (WebCore::ScrollingTreePositionedNode::dumpProperties const):
        * page/scrolling/nicosia/ScrollingTreePositionedNode.h:
        * page/scrolling/nicosia/ScrollingTreeStickyNode.cpp:
        (WebCore::ScrollingTreeStickyNode::dumpProperties const):
        * page/scrolling/nicosia/ScrollingTreeStickyNode.h:

2021-10-20  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Sometimes "arbitrary mid work break" does not mean "any position"
        https://bugs.webkit.org/show_bug.cgi?id=232001

        Reviewed by Antti Koivisto.

        Add a partial (and oversimplified) (XB/XA) type of line breaking for word-break: break-all.
        This is governed by https://unicode.org/reports/tr14/.
        We should really implement something similar to Blink's kBreakAllLineBreakClassTable (which is based on WebKit's lineBreakTable).

        * layout/formattingContexts/inline/InlineContentBreaker.cpp:
        (WebCore::Layout::midWordBreak):
        (WebCore::Layout::InlineContentBreaker::tryBreakingTextRun const):

2021-10-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        AX: Build with isolated tree enable is broken since r284075
        https://bugs.webkit.org/show_bug.cgi?id=231667
        <rdar://problem/84191590>

        Reviewed by Andres Gonzalez.

        The problem seems to be that AXPropertyValueVariant contains the same type twice (in 64 bit systems) AXID
        (size_t -> long unsigned int) and uint64_t -> long unsigned int. That's actually allowed but makes the access
        ambiguous. Since uint64_t is only used for SessionID, we can explicitly use SessionID instead.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::sessionID const):
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityObjectInterface.h:
        * accessibility/isolatedtree/AXIsolatedObject.cpp:
        (WebCore::AXIsolatedObject::initializeAttributeData):
        (WebCore::AXIsolatedObject::sessionID const):
        (WebCore::AXIsolatedObject::sessionIDAttributeValue const):
        * accessibility/isolatedtree/AXIsolatedObject.h:
        * accessibility/isolatedtree/AXIsolatedTree.h:
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):

2021-10-20  Youenn Fablet  <youenn@apple.com>

        Add support for requestVideoFrameCallback API and MediaStreamTrack-based backend support
        https://bugs.webkit.org/show_bug.cgi?id=231803

        Reviewed by Eric Carlson.

        Update WebIDL to expose https://wicg.github.io/video-rvfc/ API.
        Put them behind a runtime flag.

        Add support for the algorithms, including the integration with the 'update the rendering' algorithm.
        Add initial support for video elements backed by MediaStream content.
        We expose a limited set of metadata currently, follow-up patches should add support for other video backends and more metadata.
        This support should still enable to optimize a bit MediaStreamTrack -> canvas pipelines.

        Tests: fast/mediastream/getUserMedia-rvfc.html
               imported/w3c/web-platform-tests/video-rvfc/idlharness.window.html
               imported/w3c/web-platform-tests/video-rvfc/request-video-frame-callback-before-xr-session.https.html
               imported/w3c/web-platform-tests/video-rvfc/request-video-frame-callback-dom.html
               imported/w3c/web-platform-tests/video-rvfc/request-video-frame-callback-during-xr-session.https.html
               imported/w3c/web-platform-tests/video-rvfc/request-video-frame-callback-parallel.html
               imported/w3c/web-platform-tests/video-rvfc/request-video-frame-callback-repeating.html
               imported/w3c/web-platform-tests/video-rvfc/request-video-frame-callback-webrtc.https.html
               imported/w3c/web-platform-tests/video-rvfc/request-video-frame-callback.html
               webrtc/peerConnection-rvfc.html

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Headers.cmake:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        * dom/Document.h:
        * html/HTMLMediaElement.h:
        * html/HTMLVideoElement+RequestVideoFrameCallback.idl: Added.
        * html/HTMLVideoElement.cpp:
        * html/HTMLVideoElement.h:
        * html/VideoFrameMetadata.idl: Added.
        * html/VideoFrameRequestCallback.h: Added.
        * html/VideoFrameRequestCallback.idl: Added.
        * page/Page.cpp:
        * page/Page.h:
        * platform/VideoFrameMetadata.h: Added.
        * platform/graphics/MediaPlayer.cpp:
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:

2021-10-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        AX: Make indexForVisiblePosition consistent with visiblePositionForIndex
        https://bugs.webkit.org/show_bug.cgi?id=231950

        Reviewed by Andres Gonzalez.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::indexForVisiblePosition const): Use the same early return checks of
        visiblePositionForIndex and remove the requirement of node being the highest editable root.
        * editing/Editing.cpp:
        (WebCore::indexForVisiblePosition): Return early if given position is null.

2021-10-20  Youenn Fablet  <youenn@apple.com>

        WebRTC p2p call, VP9-SVC only low layer decoded on receiver side
        https://bugs.webkit.org/show_bug.cgi?id=231071
        <rdar://problem/83763291>

        Reviewed by Eric Carlson.

        Add Internals API to check whether VP9 VTB is used or not.

        Test: webrtc/vp9-svc.html

        * Modules/mediastream/PeerConnectionBackend.h:
        * Modules/mediastream/RTCPeerConnection.cpp:
        * Modules/mediastream/RTCPeerConnection.h:
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h:
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.h:
        * Modules/mediastream/libwebrtc/LibWebRTCStatsCollector.cpp:
        * Modules/mediastream/libwebrtc/LibWebRTCStatsCollector.h:
        * testing/Internals.cpp:
        * testing/Internals.h:
        * testing/Internals.idl:

2021-10-20  John Cunningham  <johncunningham@apple.com>

        Avoid null pointer dereference when creating ImageBitmap from a null image.
        https://bugs.webkit.org/show_bug.cgi?id=231794

        Reviewed by Said Abou-Hallawa.

        If the image is null, we can reject the promise earlier. Default to sRGB when a
        BitmapImage's nativeImage is null.

        Test: fast/canvas/createImageBitmap-invalid-image-blob-crash.html

        * html/ImageBitmap.cpp:
        (WebCore::ImageBitmap::createFromBuffer):
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::colorSpace):

2021-10-19  Antoine Quint  <graouts@webkit.org>

        Support more CSS properties for ::marker
        https://bugs.webkit.org/show_bug.cgi?id=231972

        Reviewed by Simon Fraser.

        Support additional text properties for ::marker.

        * style/PropertyAllowlist.cpp:
        (WebCore::Style::isValidMarkerStyleProperty):

2021-10-19  Ben Nham  <nham@apple.com>

        Add NetworkProcess stubs for push subscriptions
        https://bugs.webkit.org/show_bug.cgi?id=231922

        Reviewed by Youenn Fablet.

        Both PushManager and PushSubscription now send their subscription requests to NetworkProcess
        via ServiceWorkerRegistration => ServiceWorkerContainer => SWClientConnection.

        * Headers.cmake:
        * Modules/push-api/PushManager.cpp:
        (WebCore::PushManager::subscribe):
        (WebCore::PushManager::getSubscription):
        (WebCore::PushManager::permissionState):
        * Modules/push-api/PushPermissionState.h:
        * Modules/push-api/PushSubscription.cpp:
        (WebCore::PushSubscription::PushSubscription):
        (WebCore::PushSubscription::unsubscribe):
        * Modules/push-api/PushSubscription.h:
        * Modules/push-api/PushSubscriptionData.cpp:
        (WebCore::PushSubscriptionData::isolatedCopy const):
        * Modules/push-api/PushSubscriptionData.h:
        (WebCore::PushSubscriptionData::encode const):
        (WebCore::PushSubscriptionData::decode):
        * Modules/push-api/PushSubscriptionOptions.cpp:
        (WebCore::PushSubscriptionOptions::PushSubscriptionOptions):
        (WebCore::PushSubscriptionOptions::userVisibleOnly const):
        * Modules/push-api/PushSubscriptionOptions.h:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * testing/Internals.cpp:
        (WebCore::Internals::createPushSubscription):
        * testing/Internals.h:
        * testing/Internals.idl:
        * workers/service/SWClientConnection.h:
        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::createPushSubscriptionFromData):
        (WebCore::ServiceWorkerContainer::subscribeToPushService):
        (WebCore::ServiceWorkerContainer::unsubscribeFromPushService):
        (WebCore::ServiceWorkerContainer::getPushSubscription):
        (WebCore::ServiceWorkerContainer::getPushPermissionState):
        * workers/service/ServiceWorkerContainer.h:
        * workers/service/ServiceWorkerRegistration.cpp:
        (WebCore::ServiceWorkerRegistration::subscribeToPushService):
        (WebCore::ServiceWorkerRegistration::unsubscribeFromPushService):
        (WebCore::ServiceWorkerRegistration::getPushSubscription):
        (WebCore::ServiceWorkerRegistration::getPushPermissionState):
        * workers/service/ServiceWorkerRegistration.h:
        * workers/service/ServiceWorkerRegistration.idl:
        * workers/service/WorkerSWClientConnection.cpp:
        (WebCore::WorkerSWClientConnection::~WorkerSWClientConnection):
        (WebCore::WorkerSWClientConnection::subscribeToPushService):
        (WebCore::WorkerSWClientConnection::unsubscribeFromPushService):
        (WebCore::WorkerSWClientConnection::getPushSubscription):
        (WebCore::WorkerSWClientConnection::getPushPermissionState):
        * workers/service/WorkerSWClientConnection.h:

2021-10-19  Don Olmstead  <don.olmstead@sony.com>

        Non-unified build fixes, mid October 2021 edition
        https://bugs.webkit.org/show_bug.cgi?id=231915

        Unreviewed non-unified build fixes.

        * animation/KeyframeEffectStack.cpp:
        * bindings/js/JSDOMWindowBase.cpp:
        * dom/ActiveDOMObject.cpp:
        * html/DOMFormData.cpp:
        * html/HTMLDialogElement.cpp:
        * html/HTMLOutputElement.cpp:
        * html/ResetInputType.cpp:
        * page/DragController.cpp:
        * page/EventHandler.cpp:
        * rendering/updating/RenderTreeBuilderFirstLetter.cpp:

2021-10-19  Jigen Zhou  <jigen.zhou@sony.com>

        r284315 can cause build break.
        https://bugs.webkit.org/show_bug.cgi?id=231923

        Reviewed by Michael Catanzaro.

        Class 'WebCore::RenderBlockFlow' was forward declared in header file
        InlineIteratorLogicalOrderTraversal.h, but template
        leafBoxesInLogicalOrder that was added by r284315 has access to RenderBlockFLow's method
        style() and can cause build break in our local webkit build.

        The build can be fixed when the concreate declaration of class
        RenderBlockFlow is included in InlineIteratorLogicalOrderTraversal.h.

        * layout/integration/InlineIteratorLogicalOrderTraversal.h:

2021-10-19  Ross Kirsling  <ross.kirsling@sony.com>

        [CMake] Align OptionsMac with Xcode build
        https://bugs.webkit.org/show_bug.cgi?id=231982

        Reviewed by Don Olmstead.

        * PlatformMac.cmake:
        Add support for new files.

        * platform/mediastream/cocoa/DisplayCaptureSourceCocoa.cpp:
        Fix for r284295 -- ReplayKit is iOS and its headers shouldn't be included on Mac.

2021-10-19  Ben Nham  <nham@apple.com>

        Unreviewed build fix for non-unified build.

        * Modules/webaudio/RealtimeAnalyser.h:

2021-10-19  Alexey Proskuryakov  <ap@apple.com>

        Eagerly resolve python3 path in Makefiles
        https://bugs.webkit.org/show_bug.cgi?id=231979

        Reviewed by Jonathan Bedard.

        * DerivedSources.make:

2021-10-19  Simon Fraser  <simon.fraser@apple.com>

        Regression(r284336): [ iOS 15 ] system-preview/badge.html is image failing
        https://bugs.webkit.org/show_bug.cgi?id=231916

        Reviewed by Antti Koivisto.
        
        In r284336 I made clip-path not apply to non-RenderBoxes, which disabled it on inlines,
        breaking the system-preview/badge.html test.

        The spec says it applies to all elements, so this behavior change was incorrect.

        Revert back to using calculateLayerBounds() as the fallback rect to use for inlines, and add
        tests for this. This rectangle is obviously incorrect (for example, it's affected by text
        shadow), but leave it for now until https://github.com/w3c/csswg-drafts/issues/6383 is
        resolved.

        I also failed to see that computeClipPath() was already computing the reference box
        internally, so clean up the code with some comments to make it more clear that the result of
        calculateLayerBounds() is used only as the fallback for inlines, as well as for the buffer
        bounds for the applyClippingToContext() code path.

        Tests: css3/masking/clip-path-on-inline.html
               css3/masking/clip-path-on-split-inline.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::computeClipPath const):
        (WebCore::RenderLayer::setupClipPath):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateMaskingLayerGeometry):

2021-10-19  David Kilzer  <ddkilzer@apple.com>

        Fix leak of CGColorSpaceRef in FilterEffectRendererCoreImage::sharedCIContext()
        <https://webkit.org/b/231902>
        <rdar://problem/84375203>

        Reviewed by Wenson Hsieh.

        * platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:
        (WebCore::FilterEffectRendererCoreImage::sharedCIContext):
        - Use adoptCF() to fix the leak.

2021-10-19  Alex Christensen  <achristensen@webkit.org>

        Origin of opaque blob: URLs ends up as empty string
        https://bugs.webkit.org/show_bug.cgi?id=231942

        Reviewed by Tim Horton.

        It should be "null" instead of "".
        This matches Chrome and Firefox.
        Covered by a PR to WPT included in this patch.

        * page/SecurityOrigin.cpp:
        (WebCore::shouldTreatAsUniqueOrigin):

2021-10-19  Youenn Fablet  <youenn@apple.com>

        Guarantee order of WebSocket events in case of being resumed
        https://bugs.webkit.org/show_bug.cgi?id=231664

        Reviewed by Chris Dumez.

        Introduce a WebSocket task source as per spec.
        This aligns with https://html.spec.whatwg.org/multipage/web-sockets.html where the user agent is expected to a queue task
        when closing handshake is started and so on.

        By queuing an event loop task to fire WebSocket events, we ensure ordering of events even in case of resuming, while simplifying the implementation.
        This makes it use the event loop which is extra nice if we resolve promises in event listeners.

        A follow-up patch should refactor code so that WebSocket::didReceiveMessageError can directly fire the close event without having to wait for a didClose call.

        Covered by existing tests.

        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::WebSocket):
        (WebCore::WebSocket::suspend):
        (WebCore::WebSocket::resume):
        (WebCore::WebSocket::stop):
        (WebCore::WebSocket::dispatchOrQueueEvent):
        (WebCore::WebSocket::resumeTimerFired): Deleted.
        * Modules/websockets/WebSocket.h:
        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::send):
        * dom/TaskSource.h:

2021-10-19  Antoine Quint  <graouts@webkit.org>

        REGRESSION(r284313): ::marker accelerated animations are broken
        https://bugs.webkit.org/show_bug.cgi?id=231906
        <rdar://problem/84383279>

        Reviewed by Antti Koivisto.

        Test: webanimations/marker-opacity-animation-no-effect.html

        We incorrectly supported animations for all known CSS properties on a ::marker since we added
        support for animation of ::marker, and with r284313 we started returning the correct renderer
        for ::marker pseudo-elements which meant that accelerated opacity animations started running
        for the first time.

        We now correctly ignore disallowed properties for ::marker when animating with those changes.

        First, in Style::Resolver::styleForKeyframe(), we pass the relevant allowlist to the MatchResult's
        authorDeclarations when adding the keyframe properties.

        Then, in KeyframeEffect::isCurrentlyAffectingProperty() we call isValidMarkerStyleProperty() in
        case we're being called for a ::marker pseudo-element.

        To be able to obtain the allowlist and call isValidMarkerStyleProperty() in those two questions,
        we had to refactor the related code into a dedicated PropertyAllowlist file and enum.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * animation/KeyframeEffect.cpp:
        (WebCore::KeyframeEffect::isCurrentlyAffectingProperty const):
        * style/ElementRuleCollector.cpp:
        (WebCore::Style::ElementRuleCollector::transferMatchedRules):
        * style/ElementRuleCollector.h:
        * style/PropertyAllowlist.cpp: Added.
        (WebCore::Style::propertyAllowlistForPseudoId):
        (WebCore::Style::isValidMarkerStyleProperty):
        (WebCore::Style::isValidCueStyleProperty):
        * style/PropertyAllowlist.h: Added.
        * style/PropertyCascade.cpp:
        (WebCore::Style::PropertyCascade::addMatch):
        (WebCore::Style::isValidMarkerStyleProperty): Deleted.
        (WebCore::Style::isValidCueStyleProperty): Deleted.
        * style/RuleData.cpp:
        (WebCore::Style::determinePropertyAllowlist):
        (WebCore::Style::RuleData::RuleData):
        (WebCore::Style::determinePropertyAllowlistType): Deleted.
        * style/RuleData.h:
        (WebCore::Style::RuleData::propertyAllowlist const):
        (): Deleted.
        (WebCore::Style::RuleData::propertyAllowlistType const): Deleted.
        * style/StyleResolver.cpp:
        (WebCore::Style::Resolver::styleForKeyframe):

2021-10-19  Alex Christensen  <achristensen@webkit.org>

        Use JSONValues instead of a JSC::VM to parse WKContentRuleLists
        https://bugs.webkit.org/show_bug.cgi?id=231704

        Reviewed by Brady Eidson.

        This makes the parser much simpler and easier to see what is going on.
        It probably also saves some memory because we don't need to make a VM just to parse JSON.
        Covered by existing tests.  There are extensive tests for invalid input, and there is only
        one change in the error reported: we used to say the top level has to be an object, then
        we would say that it has to be an array.  JavaScript arrays are objects, but JSON arrays aren't.
        Valid input continues to parse the same, and invalid input continues to fail to parse, but the
        error is more accurate now.

        * contentextensions/ContentExtensionError.cpp:
        (WebCore::ContentExtensions::contentExtensionErrorCategory):
        * contentextensions/ContentExtensionError.h:
        * contentextensions/ContentExtensionParser.cpp:
        (WebCore::ContentExtensions::getStringList):
        (WebCore::ContentExtensions::getDomainList):
        (WebCore::ContentExtensions::getTypeFlags):
        (WebCore::ContentExtensions::loadTrigger):
        (WebCore::ContentExtensions::loadAction):
        (WebCore::ContentExtensions::loadRule):
        (WebCore::ContentExtensions::loadEncodedRules):
        (WebCore::ContentExtensions::parseRuleList):

2021-10-19  Chris Dumez  <cdumez@apple.com>

        Drop assertion in RegistrationDatabase::importRecords()
        https://bugs.webkit.org/show_bug.cgi?id=231960

        Reviewed by Alex Christensen.

        Drop assertion in RegistrationDatabase::importRecords(). This can happen when deleting service
        worker scripts on disk but not clearing the service worker database.
        The code properly deal with this so there is no need to crash in debug builds.

        * workers/service/server/RegistrationDatabase.cpp:
        (WebCore::RegistrationDatabase::importRecords):

2021-10-19  Tyler Wilcock  <tyler_w@apple.com>

        AX: Fix broken spec links in AccessibilityObject.cpp and AccessibilityTree.cpp
        https://bugs.webkit.org/show_bug.cgi?id=231932

        Reviewed by Chris Fleizach.

        Fix broken spec links.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::initializeRoleMap):
        (WebCore::AccessibilityObject::buttonRoleType const):
        * accessibility/AccessibilityTree.cpp:
        (WebCore::AccessibilityTree::isTreeValid const):

2021-10-19  David Kilzer  <ddkilzer@apple.com>

        Fix leak of object returned from MTLCreateSystemDefaultDevice()
        <https://webkit.org/b/231899>
        <rdar://problem/84373621>

        Reviewed by Anders Carlsson.

        * platform/graphics/cocoa/GraphicsContextGLOpenGLCocoa.mm:
        (WebCore::platformSupportsMetal):
        * testing/Internals.mm:
        (WebCore::Internals::platformSupportsMetal):
        - Use adoptNS() to fix the leak.

2021-10-19  Chris Dumez  <cdumez@apple.com>

        cachedCGColor() and nsColor() should return smart pointers
        https://bugs.webkit.org/show_bug.cgi?id=231909

        Reviewed by Tim Horton.

        r276283 attempted to make cachedCGColor() and nsColor() thread-safe but the fix was incomplete
        since those functions return unretained objects that can be released from the cache on any
        other thread. This patch updates cachedCGColor() and nsColor() to return a RetainPtr to address
        the issue.

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (AXAttributeStringSetStyle):
        * editing/cocoa/FontAttributesCocoa.mm:
        (WebCore::FontAttributes::createDictionary const):
        * editing/cocoa/FontShadowCocoa.mm:
        (WebCore::FontShadow::createShadow const):
        * editing/cocoa/HTMLConverter.mm:
        (HTMLConverter::convert):
        (HTMLConverter::_colorForElement):
        (HTMLConverter::computedAttributesForElement):
        (HTMLConverter::_fillInBlock):
        (HTMLConverter::_processElement):
        (WebCore::editingAttributedString):
        * platform/graphics/Color.h:
        * platform/graphics/avfoundation/objc/LocalSampleBufferDisplayLayer.mm:
        (WebCore::LocalSampleBufferDisplayLayer::initialize):
        * platform/graphics/ca/PlatformCALayer.cpp:
        (WebCore::PlatformCALayer::drawTextAtPoint const):
        * platform/graphics/ca/cocoa/PlatformCAFiltersCocoa.mm:
        (WebCore::PlatformCAFilters::setFiltersOnLayer):
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:
        (WebCore::PlatformCALayerCocoa::setBackgroundColor):
        (WebCore::PlatformCALayerCocoa::setBorderColor):
        * platform/graphics/cg/ColorCG.cpp:
        (WebCore::cachedCGColor):
        * platform/graphics/cg/GradientCG.cpp:
        (WebCore::Gradient::createCGGradient):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::setCGFillColor):
        (WebCore::setCGShadow):
        (WebCore::GraphicsContextCG::didUpdateState):
        * platform/graphics/cocoa/ColorCocoa.h:
        * platform/graphics/cocoa/ColorCocoa.mm:
        (WebCore::platformColor):
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::addAttributesForCustomFontPalettes):
        * platform/graphics/cocoa/GraphicsContextCocoa.mm:
        (WebCore::drawFocusRingAtTime):
        (WebCore::colorForMarkerLineStyle):
        (WebCore::GraphicsContextCG::drawDotsForDocumentMarker):
        * platform/graphics/mac/ColorMac.h:
        * platform/graphics/mac/ColorMac.mm:
        (WTF::RetainPtr<NSColor>>::createValueForKey):
        (WebCore::nsColor):
        * platform/mac/LocalDefaultSystemAppearance.mm:
        (WebCore::LocalDefaultSystemAppearance::LocalDefaultSystemAppearance):
        * platform/mac/PlatformPasteboardMac.mm:
        (WebCore::PlatformPasteboard::setColor):
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::setUpOverhangAreaBackground):
        * platform/mac/ThemeMac.mm:
        (WebCore::drawCellFocusRingWithFrameAtTime):
        * rendering/RenderThemeMac.mm:
        (WebCore::AttachmentLayout::layOutTitle):
        (WebCore::AttachmentLayout::layOutSubtitle):
        * testing/cocoa/WebViewVisualIdentificationOverlay.mm:
        (-[WebViewVisualIdentificationOverlay initWithWebView:kind:deprecated:]):
        (drawPattern):

2021-10-19  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Rename Line::removeCollapsibleContent to removeTrimmableContent
        https://bugs.webkit.org/show_bug.cgi?id=231930

        Reviewed by Antti Koivisto.

        "Trimming" is closer to spec language.

        * layout/formattingContexts/inline/InlineLine.cpp:
        (WebCore::Layout::Line::removeTrimmableContent):
        (WebCore::Layout::Line::removeCollapsibleContent): Deleted.
        * layout/formattingContexts/inline/InlineLine.h:
        * layout/formattingContexts/inline/InlineLineBuilder.cpp:
        (WebCore::Layout::LineBuilder::close):

2021-10-19  Youenn Fablet  <youenn@apple.com>

        [ wk2 ] 2 page-cache layout-tests are flakey crashing
        https://bugs.webkit.org/show_bug.cgi?id=224558
        <rdar://problem/76652825>

        Reviewed by Eric Carlson.

        Covered by updated test.

        * Modules/mediastream/PeerConnectionBackend.cpp:
        srflx candidates can be exposed even in case of filtering enabled.
        * testing/MockLibWebRTCPeerConnection.cpp:
        Backend should now handle the mDNS filtering itself.

2021-10-19  Rob Buis  <rbuis@igalia.com>

        Remove support for some SVG properties
        https://bugs.webkit.org/show_bug.cgi?id=227897

        Reviewed by Simon Fraser.

        Remove support for the SVG properties color-profile, color-rendering
        and enable-background. We never had support for these apart from parsing
        them and they are removed from the SVG2 specification.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::valueForPropertyInStyle):
        * css/CSSProperties.json:
        * css/SVGCSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::svgPropertyValue):
        * css/SVGCSSValueKeywords.in:
        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):
        (WebCore::CSSParserFastPaths::isKeywordPropertyID):
        * rendering/style/SVGRenderStyle.cpp:
        (WebCore::SVGRenderStyle::diff const):
        * rendering/style/SVGRenderStyle.h:
        (WebCore::SVGRenderStyle::setColorInterpolationFilters):
        (WebCore::SVGRenderStyle::colorInterpolationFilters const):
        (WebCore::SVGRenderStyle::setBitDefaults):
        (WebCore::SVGRenderStyle::InheritedFlags::operator== const):
        (WebCore::SVGRenderStyle::setColorRendering): Deleted.
        (WebCore::SVGRenderStyle::colorRendering const): Deleted.
        * svg/SVGElement.cpp:
        (WebCore::createAttributeNameToCSSPropertyIDMap):
        * svg/properties/SVGPropertyAnimatorFactory.h:
        (WebCore::SVGPropertyAnimatorFactory::attributeAnimatorCreator):
        * svg/svgattrs.in:

2021-10-19  Youenn Fablet  <youenn@apple.com>

        Expose MediaCapabilities to Workers
        https://bugs.webkit.org/show_bug.cgi?id=231574

        Reviewed by Eric Carlson.

        Expose Media Capabilities to workers by hopping to main thread and using worker responsible document for gathering Media Capabilities, then hopping back to worker.
        MediaCapabilities will store the promises when waiting for media capabilities gathering by document.

        We remove CustomEnabled since it is not supported in Workers and we are now exposing encoding info for WebRTC anyway.

        Tests: imported/w3c/web-platform-tests/media-capabilities/encodingInfo.any.html
               imported/w3c/web-platform-tests/media-capabilities/encodingInfo.any.worker.html

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/mediacapabilities/MediaCapabilities.cpp:
        * Modules/mediacapabilities/MediaCapabilities.h:
        * Modules/mediacapabilities/MediaCapabilities.idl:
        * Modules/mediacapabilities/NavigatorMediaCapabilities.cpp:
        * Modules/mediacapabilities/NavigatorMediaCapabilities.h:
        * Modules/mediacapabilities/WorkerNavigator+MediaCapabilities.idl: Added.
        * Modules/mediacapabilities/WorkerNavigatorMediaCapabilities.cpp: Added.
        * Modules/mediacapabilities/WorkerNavigatorMediaCapabilities.h: Added.
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/ScriptExecutionContext.cpp:
        * dom/ScriptExecutionContext.h:
        * platform/MediaCapabilitiesDecodingInfo.h:
        * platform/MediaCapabilitiesEncodingInfo.h:
        * platform/MediaCapabilitiesInfo.h:
        * platform/mediacapabilities/AudioConfiguration.h:
        * platform/mediacapabilities/MediaConfiguration.h:
        * platform/mediacapabilities/MediaDecodingConfiguration.h:
        * platform/mediacapabilities/MediaEncodingConfiguration.h:
        * platform/mediacapabilities/VideoConfiguration.h:

2021-10-18  Sergio Villar Senin  <svillar@igalia.com>

        [css-flexbox] Add flex-basis: content support
        https://bugs.webkit.org/show_bug.cgi?id=221479

        Reviewed by Javier Fernandez.

        Add support for the content keyword as a valid value for the flex-basis property.
        It indicates an automated size based on the contents of the flex item. It's typically
        equivalent to the max-content size but it has some adjustments for aspect ratios,
        orthogonal flows and intrinsic sizing constraints.

        Apart from adding the parsing support, it required very little adjustments in the
        flexbox code after the refactoring in r284359.

        This makes WebKit pass all of the flex-basis:content tests in WPT. We're talking
        about 6 tests testing the feature and 6 subtests related to parsing.

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue): Handle Content in switch.
        (WebCore::CSSPrimitiveValue::init): Initialization for content CSS value.
        * css/CSSProperties.json:
        * css/LengthFunctions.cpp: Replaced LengthOrAuto by LengthSizing.
        (WebCore::valueForLength): Handle Content in switch.
        (WebCore::floatValueForLength): Ditto.
        * css/LengthFunctions.h:
        (WebCore::minimumValueForLength): Ditto.
        * css/calc/CSSCalcValue.cpp:
        (WebCore::createCSS): Ditto.
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeFlexBasis): Consume CSSValueContent.
        (WebCore::CSSPropertyParser::consumeFlex): Ditto.
        * platform/Length.cpp:
        (WebCore::operator<<): Added printing support for content.
        * platform/Length.h:
        (WebCore::Length::initialize): Added enum for content.
        (WebCore::Length::isContent const): New method.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeReplacedLogicalWidthUsing const): Handle content in switch.
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::childMainSizeIsDefinite): Treat content as indefinite lenght.
        (WebCore::RenderFlexibleBox::childHasComputableAspectRatioAndCrossSizeIsConsideredDefinite):
        Flex basis must be either auto or content.
        (WebCore::RenderFlexibleBox::computeFlexBaseSizeForChild): Compute flex-basis using max-content
        if flex-basis:content is specified.
        * style/StyleBuilderConverter.h:
        (WebCore::Style::BuilderConverter::convertLengthSizing): Handle content in switch.

2021-10-19  Cameron McCormack  <heycam@apple.com>

        Ensure CanvasRenderingContext2D.drawImage(video) uses the right color space
        https://bugs.webkit.org/show_bug.cgi?id=229025
        <rdar://problem/81828490>

        Reviewed by Sam Weinig.

        When GPU process media handling is disabled (and in the GPU process
        when it is handling a NativeImageForCurrentTime message),
        MediaPlayer::nativeImageForCurrentTime is used to get the video frame
        image. We make this return an image with the right color space on
        Apple platforms in PixelBufferConformerCV::createImageFromPixelBuffer.

        For now, we avoid using the correct color space when passing
        HTMLVideoElements to WebGLRenderingContext.texImage2D. The
        specification is unclear about what color space the texture data
        should be in, and implementations are currently interoperable in not
        converting the RGB color space of the video (such as Rec.601, Rec.709,
        etc.) into sRGB. To avoid the conversion, and effectively reinterpret
        the video RGB colors as sRGB, we make the ImageBuffer the video is
        drawn into have a matching color space, as it's the raw RGB values
        from the ImageBuffer that are uploade as the texture.

        (An alternative to this could be passing an argument through
        nativeImageForCurrentTime and paintCurrentFrameInContext, which says
        to avoid doing the conversion from video RGB to sRGB, but that needs a
        fair amount of plumbing.)

        If https://github.com/KhronosGroup/WebGL/issues/2165 is resolved, the
        changes to LRUImageBufferCache in this commit can be reverted, so that
        video frames are drawn into sRGB ImageBuffers again. (We'd also need
        something to make the copyToPlatformTexture() call in
        texImageSourceHelper do the correct color conversion somehow.)

        The now differing behavior between CanvasRenderingContext2D.drawImage
        and WebGLRenderingContext.texImage2D means that the WebGL conformance
        suite textures/misc/texture-corner-case-videos.html test fails, since
        it checks for incorrect 2D canvas video frame color conversion.

        Tests: imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-video.html
               imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-video.html

        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::colorSpace const): New function that
        exposes the color space of the current frame of the video.
        * html/HTMLVideoElement.h:
        * html/ImageBitmap.cpp:
        (WebCore::ImageBitmap::createPromise): Create the ImageBuffer in a
        color space that matches the video, not always sRGB.
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::drawImageIntoBuffer):
        (WebCore::WebGLRenderingContextBase::videoFrameToImage): Use an
        ImageBuffer whose color space matches the video frame's color space.
        (WebCore::WebGLRenderingContextBase::LRUImageBufferCache::imageBuffer):
        Add a DestinationColorSpace argument, so that the LRU cache is keyed
        off both size and color space.
        * html/canvas/WebGLRenderingContextBase.h:
        * platform/cocoa/CoreVideoSoftLink.cpp:
        * platform/cocoa/CoreVideoSoftLink.h: Add SPIs that let us get or
        compute a CGColorSpace from a CVPixelBuffer. Remove
        CVImageBufferGetColorSpace, which is unsused.
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::colorSpace):
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::colorSpace):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::MediaPlayerPrivateAVFoundationCF::colorSpace):
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::colorSpace): Expose the
        color space of the current image. While we strictly only need the pixel
        buffer to be up to date, we call updateLastImage() since it has the
        UpdateSynchronously behavior, and the caller to colorSpace() will use
        the image soon anyway.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::colorSpace):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::colorSpace):
        * platform/graphics/cg/ColorSpaceCG.h:
        * platform/graphics/cv/CVUtilities.h:
        * platform/graphics/cv/CVUtilities.mm:
        (WebCore::createCGColorSpaceForCVPixelBuffer): New function to produce
        a CGColorSpace for a CVPixelBuffer. On macOS, this is stored as an
        attachment on the CVPixelBuffer. On iOS, we must call SPI to create a
        CGColorSpace based on the other color space information in the
        attachments. (It's possible we should cache the results of this
        function for a given set of color space attachments, since
        CVImageBufferCreateColorSpaceFromAttachments can end up creating a new
        CGColorSpace object every time it's called.)
        * platform/graphics/cv/PixelBufferConformerCV.cpp:
        (WebCore::PixelBufferConformerCV::createImageFromPixelBuffer): Create
        the CGImage in a color space matching the CVPixelBuffer.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::colorSpace):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        * platform/graphics/holepunch/MediaPlayerPrivateHolePunch.h:
        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:
        (WebCore::MediaPlayerPrivateMediaFoundation::colorSpace):
        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.h:
        * platform/mock/mediasource/MockMediaPlayerMediaSource.cpp:
        (WebCore::MockMediaPlayerMediaSource::colorSpace):
        * platform/mock/mediasource/MockMediaPlayerMediaSource.h:
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::drawInternal):

2021-10-19  Kyle Piddington  <kpiddington@apple.com>
        Query EGL_BIND_TO_TEXTURE_TARGET_ANGLE to determine 2D/rectangular texture usage
        https://bugs.webkit.org/show_bug.cgi?id=231468

        Refactor GraphicsContextGLCocoa to hold a reference to 
        BIND_TO_TEXTURE_TARGET. This refactor is neccesary to support dropping 
        TEXTURE_RECT support from the Metal backend, as support is incomplete, and unnecessary 

        Reviewed by Kenneth Russell.

        * Modules/webxr/WebXROpaqueFramebuffer.cpp:
        (WebCore::WebXROpaqueFramebuffer::startFrame):
        * platform/graphics/cocoa/GraphicsContextGLOpenGLCocoa.mm:
        (WebCore::GraphicsContextGLOpenGL::~GraphicsContextGLOpenGL):
        (WebCore::GraphicsContextGLOpenGL::drawingBufferTextureTarget):
        (WebCore::GraphicsContextGLOpenGL::drawingBufferTextureTargetQueryForDrawingTarget):
        (WebCore::GraphicsContextGLOpenGL::EGLDrawingBufferTextureTargetForDrawingTarget):
        (WebCore::GraphicsContextGLOpenGL::allocateAndBindDisplayBufferBacking):
        (WebCore::GraphicsContextGLOpenGL::bindDisplayBufferBacking):
        (WebCore::GraphicsContextGLOpenGL::readCompositedResults):
        (WebCore::GraphicsContextGLOpenGL::drawingBufferTextureTargetQuery): Deleted.
        (WebCore::GraphicsContextGLOpenGL::EGLDrawingBufferTextureTarget): Deleted.
        * platform/graphics/cv/GraphicsContextGLCVANGLE.cpp:
        (WebCore::GraphicsContextGLCVANGLE::GraphicsContextGLCVANGLE):
        (WebCore::GraphicsContextGLCVANGLE::copyPixelBufferToTexture):
        * platform/graphics/opengl/GraphicsContextGLOpenGL.h:

2021-10-18  Antoine Quint  <graouts@webkit.org>

        box-shadow and text-shadow do not yield float values while interpolating
        https://bugs.webkit.org/show_bug.cgi?id=230347
        <rdar://problem/83319111>

        Reviewed by Simon Fraser.

        ShadowData members used integer values rather than floats and thus could not represent
        float values while interpolating. We now use float values.

        Test: imported/w3c/web-platform-tests/css/css-backgrounds/box-shadow-calc.html

        * animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFunc):
        (WebCore::shadowForBlending):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::valueForFilter):
        * display/css/DisplayBoxDecorationPainter.cpp:
        (WebCore::Display::BoxDecorationPainter::paintBoxShadow const):
        * editing/Editor.cpp:
        (WebCore::Editor::fontAttributesAtSelectionStart):
        * platform/LengthPoint.h:
        (WebCore::LengthPoint::isZero const):
        * platform/mac/WebCoreNSFontManagerExtras.mm:
        (WebCore::computedFontAttributeChanges):
        * rendering/LegacyEllipsisBox.cpp:
        (WebCore::LegacyEllipsisBox::paint):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::applyBoxShadowForBackground):
        (WebCore::RenderBoxModelObject::boxShadowShouldBeAppliedToBackground const):
        (WebCore::RenderBoxModelObject::paintBoxShadow):
        * rendering/TextBoxPainter.cpp:
        (WebCore::TextBoxPainter::debugTextShadow const):
        * rendering/TextDecorationPainter.cpp:
        (WebCore::TextDecorationPainter::paintTextDecoration):
        * rendering/TextPainter.cpp:
        (WebCore::ShadowApplier::shadowIsCompletelyCoveredByText):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::setTextShadow):
        (WebCore::RenderStyle::shadowExtent):
        (WebCore::RenderStyle::shadowInsetExtent):
        (WebCore::RenderStyle::getShadowHorizontalExtent):
        (WebCore::RenderStyle::getShadowVerticalExtent):
        * rendering/style/ShadowData.cpp:
        (WebCore::ShadowData::ShadowData):
        (WebCore::calculateShadowExtent):
        * rendering/style/ShadowData.h:
        (WebCore::ShadowData::ShadowData):
        (WebCore::ShadowData::x const):
        (WebCore::ShadowData::y const):
        (WebCore::ShadowData::location const):
        (WebCore::ShadowData::radius const):
        (WebCore::ShadowData::paintingExtent const):
        (WebCore::ShadowData::spread const):
        * style/StyleBuilderCustom.h:
        (WebCore::Style::BuilderCustom::applyTextOrBoxShadowValue):

2021-10-18  Cameron McCormack  <heycam@apple.com>

        Make createImageBitmap() take EXIF orientation into account correctly
        https://bugs.webkit.org/show_bug.cgi?id=231063
        <rdar://problem/83753956>

        Reviewed by Myles Maxfield and Said Abou-Hallawa.

        Test: imported/w3c/web-platform-tests/html/canvas/element/manual/imagebitmap/createImageBitmap-exif-orientation.html

        This makes us treat {imageOrientation:"none"} as meaning "apply EXIF
        orientation without any additional transformation", and
        {imageOrientation:"flipY"} as meaning "apply EXIF orientation and then
        apply an additional vertical flip". This behavior matches Firefox;
        https://github.com/whatwg/html/issues/7210 is open on clarifying this
        behavior in the HTML spec.

        * html/ImageBitmap.cpp:
        (WebCore::ImageBitmap::createPromise):
        (WebCore::ImageBitmap::createFromBuffer):
        (WebCore::imageOrientationForOrientation): Deleted.
        * html/ImageBitmapOptions.h:
        (WebCore::ImageBitmapOptions::resolvedImageOrientation const):
        * html/ImageBitmapOptions.idl:
        * platform/graphics/ImageOrientation.h:
        (WebCore::ImageOrientation::withFlippedY const):

2021-10-18  Jean-Yves Avenard  <jya@apple.com>

        WebM with invalid size should fail to load with error
        https://bugs.webkit.org/show_bug.cgi?id=231886
        rdar://77969801

        Reviewed by Jer Noble.

        libwebm for some elements are using a std::string or a std::vector<uint8_t>
        to store their content. Those have infallible memory allocators.
        We limit the size we allow the parser to use to some reasonable values.

        Test: media/media-webm-invalid-check.html

        * platform/graphics/cocoa/SourceBufferParserWebM.cpp:
        (WebCore::SourceBufferParserWebM::OnElementBegin):

2021-10-18  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Adjust the logical right side of the line when box-decoration-break: clone is present
        https://bugs.webkit.org/show_bug.cgi?id=231873

        Reviewed by Antti Koivisto.

        This patch adds support for "box-decoration-break: clone" cases when the inline box is either not line spanning or
        it shows up first on the line.

        * layout/formattingContexts/inline/InlineLine.cpp:
        (WebCore::Layout::Line::initialize):
        (WebCore::Layout::Line::appendInlineBoxStart):
        (WebCore::Layout::Line::appendInlineBoxEnd):
        (WebCore::Layout::Line::appendTextContent):
        * layout/formattingContexts/inline/InlineLine.h:
        (WebCore::Layout::Line::contentLogicalRight const):
        (WebCore::Layout::Line::inlineBoxListWithClonedDecorationEnd const):
        (WebCore::Layout::Line::lineSpanningInlineBoxRunEnds const): Deleted.
        * layout/formattingContexts/inline/InlineLineBoxBuilder.cpp:
        (WebCore::Layout::LineBoxBuilder::constructAndAlignInlineLevelBoxes):
        * layout/formattingContexts/inline/InlineLineBuilder.cpp:
        (WebCore::Layout::LineBuilder::handleInlineContent):

2021-10-18  Eric Carlson  <eric.carlson@apple.com>

        [macOS] Refactor CGDisplayStreamCaptureSource::createDisplayStream
        https://bugs.webkit.org/show_bug.cgi?id=231920
        <rdar://problem/84393654>

        Reviewed by Jer Noble.

        No new tests, no functional change.

        * platform/mediastream/mac/CGDisplayStreamCaptureSource.cpp:
        (WebCore::CGDisplayStreamCaptureSource::startDisplayStream): Don't pass the frame
        available handler or capture queue to createDisplayStream.
        (WebCore::CGDisplayStreamCaptureSource::frameAvailableHandler): Remove a blank line.
        (WebCore::CGDisplayStreamCaptureSource::captureQueue): New accessor.
        * platform/mediastream/mac/CGDisplayStreamCaptureSource.h:

        * platform/mediastream/mac/CGDisplayStreamScreenCaptureSource.h:
        * platform/mediastream/mac/CGDisplayStreamScreenCaptureSource.mm:
        (WebCore::CGDisplayStreamScreenCaptureSource::createDisplayStream): Parameters removed.

2021-10-18  Alex Christensen  <achristensen@webkit.org>

        Remove "using namespace XPath;" from XPathGrammar.cpp
        https://bugs.webkit.org/show_bug.cgi?id=231318

        Reviewed by Chris Dumez.

        I did this by editing XPathGrammar.y and re-running bison.
        We have the output of bison checked in to our repo to not have bison as a build dependency of WebKit.

        * xml/XPathGrammar.cpp:
        (xpathyylex):
        (xpathyyerror):
        (yysyntax_error):
        * xml/XPathGrammar.y:
        * xml/XPathResult.cpp:
        (WebCore::XPathResult::XPathResult):

2021-10-18  Chris Dumez  <cdumez@apple.com>

        Add a callback to know when the service worker loads via -[WKWebView _loadServiceWorker:]
        https://bugs.webkit.org/show_bug.cgi?id=231771
        <rdar://problem/84274364>

        Reviewed by Alex Christensen.

        * loader/FrameLoaderClient.h:
        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::willSettleRegistrationPromise):
        (WebCore::ServiceWorkerContainer::jobFailedWithException):
        (WebCore::ServiceWorkerContainer::jobResolvedWithRegistration):
        (WebCore::ServiceWorkerContainer::jobFailedLoadingScript):
        * workers/service/ServiceWorkerContainer.h:

2021-10-15  Sergio Villar Senin  <svillar@igalia.com>

        [css-flexbox] Do not clamp flex base size with {min|max}-{height|width}
        https://bugs.webkit.org/show_bug.cgi?id=225590
        <rdar://problem/78100329>

        Reviewed by Manuel Rego Casasnovas.

        When computing flex base size we should not clamp it with neither min-{height|width}
        nor max-{height|width}. That would be done later and will be called the hypothetical
        main size.

        For most of the cases we were already doing it, however there are some particular cases
        in which we have to call the generic layout code which does clamp the sizes using min
        and max sizes. In order to make those code paths work, we reset the min|max values to
        their initial ones (so they effectively become inactive) and then we set the original
        values back after computing the base size.

        This is a reland of r279271 which was pretty similar but caused a visual regression in
        GMail. After r284359 this is no longer a problem of this patch.

        This fixes 3 WPT flexbox tests.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::ScopedUnboundedBoxWithFlexBasisAsChildMainSize::ScopedUnboundedBoxWithFlexBasisAsChildMainSize):
        renamed from ScopedFlexBasisAsChildMainSize. Resets min|max-size to their initial values.
        (WebCore::ScopedUnboundedBoxWithFlexBasisAsChildMainSize::~ScopedUnboundedBoxWithFlexBasisAsChildMainSize):
        ditto. Restores min|max-size original values.
        (WebCore::RenderFlexibleBox::computeFlexBaseSizeForChild):
        (WebCore::ScopedFlexBasisAsChildMainSize::ScopedFlexBasisAsChildMainSize): Deleted.
        (WebCore::ScopedFlexBasisAsChildMainSize::~ScopedFlexBasisAsChildMainSize): Deleted.

2021-10-18  Tyler Wilcock  <tyler_w@apple.com>

        AX: Return AXEmptyGroup subrole for groups with no accessible content
        https://bugs.webkit.org/show_bug.cgi?id=231528

        Reviewed by Andres Gonzalez.

        Return a subrole of "AXEmptyGroup" for groups without any exposed
        children. WebKit can calculate this more efficiently than AX clients,
        so it makes more sense to do here.

        Test: accessibility/mac/empty-group-computation.html

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper subrole]):

2021-10-18  Alex Christensen  <achristensen@webkit.org>

        Revert r284216
        https://webkit.org/b/231523
        <rdar://84342878>

        * CMakeLists.txt:
        * Configurations/WebCore.xcconfig:
        * Sources.txt:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:

2021-10-18  Antti Koivisto  <antti@apple.com>

        background-clip:text doesn't paint correctly for inline box spanning multiple lines
        https://bugs.webkit.org/show_bug.cgi?id=231891

        Reviewed by Alan Bujtas.

        'background-clip: text' paints to a wrong position if the inline box spans multiple lines.

        Test: fast/inline/inline-background-clip-text-multiline.html

        * rendering/InlineBoxPainter.cpp:
        (WebCore::InlineBoxPainter::paintFillLayer):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintFillLayer):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::getBackgroundRoundedRect const):
        (WebCore::RenderBoxModelObject::backgroundRoundedRectAdjustedForBleedAvoidance const):

        No need to pass box size separately as it now always matches the passed in border rect.

        (WebCore::RenderBoxModelObject::paintFillLayerExtended):

        The 'rect' parameter used to be either the border box rect of the box being painted or,
        in the case of multiline inline box background image, the image strip being painted.

        Make the 'rect' parameter to always be the border box and pass the background image strip
        separately.

        Use the background image strip only during background image painting.

        * rendering/RenderBoxModelObject.h:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):

2021-10-18  Kimmo Kinnunen  <kkinnunen@apple.com>

        Cocoa GraphicsContextGLOpenGL should not use WebGLLayer
        https://bugs.webkit.org/show_bug.cgi?id=231804

        Reviewed by Dean Jackson.

        Move the "swap chain", e.g. the display buffer IOSurface
        from WebGLLayer to GraphicsContextGLOpenGL.
        Instantiate WebGLLayer only in new class WebProcessGraphicsContextGLOpenGL,
        which is used when WebGL is run in-process in WebContent process.
        Simply set the CALayer.contents when new display buffer is ready and
        call "setNeedsDisplay" directly.

        No new tests, a refactor.

        * PlatformMac.cmake:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/RemoteGraphicsContextGLProxyBase.h:
        * platform/graphics/cocoa/GraphicsContextGLOpenGLCocoa.mm:
        (WebCore::GraphicsContextGLOpenGL::GraphicsContextGLOpenGL):
        (WebCore::GraphicsContextGLOpenGL::~GraphicsContextGLOpenGL):
        (WebCore::GraphicsContextGLOpenGL::isValid const):
        (WebCore::GraphicsContextGLOpenGL::reshapeDisplayBufferBacking):
        (WebCore::GraphicsContextGLOpenGL::prepareForDisplay):
        (WebCore::GraphicsContextGLOpenGL::readCompositedResults):
        (WebCore::GraphicsContextGLOpenGL::paintCompositedResultsToMediaSample):
        (WebCore::GraphicsContextGLOpenGL::create): Deleted.
        (WebCore::GraphicsContextGLOpenGL::createForGPUProcess): Deleted.
        GraphicsContextGLOpenGL for GPUProcess is now a new class, described
        in WebKit ChangeLog.

        * platform/graphics/cocoa/RemoteGraphicsContextGLProxyBaseCocoa.mm:
        (WebCore::RemoteGraphicsContextGLProxyBase::platformInitialize):
        (WebCore::RemoteGraphicsContextGLProxyBase::paintCompositedResultsToMediaSample):
        (WebCore::RemoteGraphicsContextGLProxyBase::platformSwapChain): Deleted.
        * platform/graphics/cocoa/WebGLLayer.h:
        * platform/graphics/cocoa/WebGLLayer.mm:
        (-[WebGLLayer initWithDevicePixelRatio:contentsOpaque:]):
        (-[WebGLLayer display]):
        (-[WebGLLayer swapChain]): Deleted.
        (-[WebGLLayer prepareForDisplay]): Deleted.
        (WebGLLayerSwapChain::present): Deleted.
        CALayer.contents and setNeedsDisplay is called directly when
        a graphics context has new display buffer.

        * platform/graphics/cocoa/WebProcessGraphicsContextGLOpenGLCocoa.mm: Added.
        (WebCore::GraphicsContextGLOpenGL::create):
        * platform/graphics/opengl/GraphicsContextGLOpenGL.cpp:
        (WebCore::GraphicsContextGLOpenGL::isValid const):
        Add a new function that checks if the constructor exited early.
        Before, m_contextObj would be consulted but this is not protected
        so it's not so useful. Also it wasn't very accurate, as some constructor
        early exists ran after m_contextObj was set. Use m_texture to detect
        fully constructed object for now.

        * platform/graphics/opengl/GraphicsContextGLOpenGL.h:
        * platform/graphics/texmap/GraphicsContextGLTextureMapper.cpp:
        (WebCore::GraphicsContextGLOpenGL::create):
        (WebCore::GraphicsContextGLOpenGL::createForGPUProcess): Deleted.
        GraphicsContextGLOpenGL for GPUProcess is now a new class, described
        in WebKit ChangeLog. Remove the HostWindow arguments for
        GraphicsContextGLOpenGL, it's not used.

2021-10-18  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] fast/mediastream/video-rotation tests are failing due to missing TestController::takeViewPortSnapshot
        https://bugs.webkit.org/show_bug.cgi?id=231059

        Reviewed by Xabier Rodriguez-Calvar.

        Add video orientation and mirroring support to the GStreamer mock video source, all the way
        to the media player. The video sink had to be adapted, to catch tag events and trigger
        orientation update in the player.

        * platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp:
        (webKitGLVideoSinkSetMediaPlayerPrivate):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::getVideoOrientation):
        (WebCore::MediaPlayerPrivateGStreamer::updateVideoOrientation):
        (WebCore::MediaPlayerPrivateGStreamer::updateVideoSizeAndOrientationFromCaps):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        * platform/graphics/gstreamer/MediaSampleGStreamer.cpp:
        (WebCore::MediaSampleGStreamer::MediaSampleGStreamer):
        (WebCore::MediaSampleGStreamer::createImageSample):
        * platform/graphics/gstreamer/MediaSampleGStreamer.h:
        (WebCore::MediaSampleGStreamer::create):
        (WebCore::MediaSampleGStreamer::createImageSample):
        * platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:
        * platform/mediastream/gstreamer/MockRealtimeVideoSourceGStreamer.cpp:
        (WebCore::MockRealtimeVideoSourceGStreamer::updateSampleBuffer):

2021-10-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][a11y] Add implementation of component interface when building with ATSPI
        https://bugs.webkit.org/show_bug.cgi?id=230257

        Reviewed by Adrian Perez de Castro.

        * SourcesGTK.txt:
        * accessibility/atspi/AccessibilityAtspiEnums.h:
        * accessibility/atspi/AccessibilityObjectAtspi.cpp:
        (WebCore::AccessibilityObjectAtspi::interfacesForObject):
        (WebCore::AccessibilityObjectAtspi::path):
        (WebCore::AccessibilityObjectAtspi::buildInterfaces const):
        * accessibility/atspi/AccessibilityObjectComponentAtspi.cpp: Added.
        (WebCore::AccessibilityObjectAtspi::hitTest const):
        (WebCore::AccessibilityObjectAtspi::elementRect const):
        (WebCore::AccessibilityObjectAtspi::focus const):
        (WebCore::AccessibilityObjectAtspi::opacity const):
        (WebCore::AccessibilityObjectAtspi::scrollToMakeVisible const):
        (WebCore::AccessibilityObjectAtspi::scrollToPoint const):
        * accessibility/atspi/AccessibilityRootAtspi.cpp:
        (WebCore::AccessibilityRootAtspi::registerObject):
        (WebCore::AccessibilityRootAtspi::serialize const):
        (WebCore::AccessibilityRootAtspi::frameRect const):
        * accessibility/atspi/AccessibilityRootAtspi.h:
        * accessibility/atspi/xml/Component.xml:

2021-10-18  Tim Nguyen  <ntim@apple.com>

        Fix mouse selection on modal <dialog> text nodes
        https://bugs.webkit.org/show_bug.cgi?id=231741

        Reviewed by Antti Koivisto.

        Tests:
        - editing/selection/modal-dialog-select-paragraph.html (tests this bug)
        - imported/w3c/web-platform-tests/inert/inert-node-is-unselectable.tentative.html (tests what
        the canStartSelection check was supposed to fix)

        The inert check in Node::canStartSelection() was too restrictive, which caused this bug to happen because
        we set the root node as inert and then reset it for the modal <dialog> itself, causing the text in the
        <dialog> to be unselectable. Instead, just mirror how -webkit-user-select: none; is implemented by
        introducing RenderStyle::userSelectIncludingInert().

        * dom/Node.cpp:
        (WebCore::computeEditabilityFromComputedStyle):
        (WebCore::Node::canStartSelection const):
        * dom/Position.cpp:
        (WebCore::Position::nodeIsUserSelectNone):
        (WebCore::Position::nodeIsUserSelectAll):
        (WebCore::Position::isCandidate const):
        (WebCore::Position::nodeIsInertOrUserSelectNone): Deleted.
        * dom/Position.h:
        * dom/PositionIterator.cpp:
        (WebCore::PositionIterator::isCandidate const):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::updateSelectionForMouseDownDispatchingSelectStart):
        (WebCore::EventHandler::canMouseDownStartSelect):
        (WebCore::EventHandler::selectCursor):
        * page/Frame.cpp:
        (WebCore::Frame::rangeForPoint):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::selectionColor const):
        (WebCore::RenderElement::selectionBackgroundColor const):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects const):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::collectSelectionGeometriesInternal):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::userSelectIncludingInert const):

2021-10-18  Enrique Ocaña González  <eocanha@igalia.com>

        [GLIB][GStreamer] test http/tests/security/webaudio-render-remote-audio-allowed-crossorigin-redirect.html is a flaky timeout since r278004
        https://bugs.webkit.org/show_bug.cgi?id=229219
        <rdar://problem/82059333>

        Reviewed by Philippe Normand.

        Forward EOS from webaudio appsink to the main pipeline. For some reason, some intermediate
        GstBin isn't forwarding the GST_MESSAGE_EOS emitted by the appsink added by webaudio, so
        the code at MediaPlayerPrivateGStreamer::handleMessage() can't detect EOS properly and signal
        it to the player and the HTMLMediaElement.

        * platform/audio/gstreamer/AudioSourceProviderGStreamer.cpp:
        (WebCore::AudioSourceProviderGStreamer::handleNewDeinterleavePad): Listen to the EOS signal of each created appsink and forward it to the main pipeline bus as GST_MESSAGE_EOS.
        (WebCore::AudioSourceProviderGStreamer::handleRemovedDeinterleavePad): Remove the signal handler on pad destruction.

2021-10-18  Kiet Ho  <tho22@apple.com>

        Implement parsing and animation support for offset-distance, offset-position, offset-anchor
        https://bugs.webkit.org/show_bug.cgi?id=231491

        Reviewed by Antoine Quint.

        Tests: imported/w3c/web-platform-tests/css/motion/animation/offset-anchor-composition.html
               imported/w3c/web-platform-tests/css/motion/animation/offset-anchor-interpolation.html
               imported/w3c/web-platform-tests/css/motion/animation/offset-distance-composition.html
               imported/w3c/web-platform-tests/css/motion/animation/offset-distance-interpolation.html
               imported/w3c/web-platform-tests/css/motion/animation/offset-position-composition.html
               imported/w3c/web-platform-tests/css/motion/animation/offset-position-interpolation.html
               imported/w3c/web-platform-tests/css/motion/inheritance.html
               imported/w3c/web-platform-tests/css/motion/offset-supports-calc.html
               imported/w3c/web-platform-tests/css/motion/parsing/offset-anchor-computed.html
               imported/w3c/web-platform-tests/css/motion/parsing/offset-anchor-parsing-valid.html
               imported/w3c/web-platform-tests/css/motion/parsing/offset-distance-computed.html
               imported/w3c/web-platform-tests/css/motion/parsing/offset-distance-parsing-valid.html
               imported/w3c/web-platform-tests/css/motion/parsing/offset-position-computed.html
               imported/w3c/web-platform-tests/css/motion/parsing/offset-position-parsing-valid.html

        * animation/CSSPropertyAnimation.cpp:
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForPosition):
        (WebCore::valueForPositionOrAuto):
        (WebCore::ComputedStyleExtractor::valueForPropertyInStyle):
        * css/CSSProperties.json:
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumePositionOrAuto):
        (WebCore::CSSPropertyParser::parseSingleValue):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::offsetDistance const):
        (WebCore::RenderStyle::setOffsetDistance):
        (WebCore::RenderStyle::initialOffsetDistance):
        (WebCore::RenderStyle::offsetPosition const):
        (WebCore::RenderStyle::setOffsetPosition):
        (WebCore::RenderStyle::initialOffsetPosition):
        (WebCore::RenderStyle::offsetAnchor const):
        (WebCore::RenderStyle::setOffsetAnchor):
        (WebCore::RenderStyle::initialOffsetAnchor):
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator== const):
        * rendering/style/StyleRareNonInheritedData.h:
        * style/StyleBuilderConverter.h:
        (WebCore::Style::BuilderConverter::convertPosition):
        (WebCore::Style::BuilderConverter::convertPositionOrAuto):

2021-09-24  Sergio Villar Senin  <svillar@igalia.com>

        [css-flexbox] Improve & simplify the flex-basis computation
        https://bugs.webkit.org/show_bug.cgi?id=230755

        Reviewed by Manuel Rego Casasnovas.

        The flex-basis computation code was a bit convoluted. It had some pre-computations for items
        with intrinsic main size that were causing several issues due to reentrancy. Actually those
        computations where not needed at all for the flex basis computation but for a later stage, the
        computation of the hyphotetical main size in which we need to compute 'min-{width|height}: auto'.

        That's why the code that was executed before the flex-basis computation is now part of
        computeFlexItemMinMaxSizes(). As we are no longer doing a layout before computing the flex-basis,
        a layout has to be added to those cases in which the main size is the block size of the child. Apart
        from that the flex-basis computation uses a newly defined RAII class to set the main size of the item
        to the value specified by flex-basis which is what the specs mandate.

        Last but not least, the computeInnerFlexBaseSizeForChild() method was renamed to computeFlexBaseSizeForChild()
        which fits better with the terminology used in the specs.

        Flex basis computation is already covered by the WPT test suite, there is no need for extra tests. This patch
        fixes the only flex-basis-* test case that was not passing.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::computeMainAxisExtentForChild): Removed obsolete comment. Added
        a layoutIfNeeded() as we cannot be sure that the item was already laid out any more.
        (WebCore::ScopedFlexBasisAsMainSize::ScopedFlexBasisAsChildMainSize): New RAII class.
        (WebCore::ScopedFlexBasisAsMainSize::~ScopedFlexBasisAsChildMainSize):
        (WebCore::RenderFlexibleBox::computeFlexBaseSizeForChild): Renamed from computeInnerFlexBaseSizeForChild.
        (WebCore::RenderFlexibleBox::computeFlexItemMinMaxSizes): Added relayoutChildren parameter.
        (WebCore::RenderFlexibleBox::constructFlexItem): Moved code to computeFlexItemMinMaxSizes().
        (WebCore::RenderFlexibleBox::layoutAndPlaceChildren):
        (WebCore::RenderFlexibleBox::computeInnerFlexBaseSizeForChild): Deleted.
        * rendering/RenderFlexibleBox.h:

2021-10-18  Philippe Normand  <pnormand@igalia.com>

        [MediaStream] Mock video source background not fully filled for custom video resolution
        https://bugs.webkit.org/show_bug.cgi?id=231863

        Reviewed by Xabier Rodriguez-Calvar.

        The video frame buffer matches the captureSize, so its background should do the same.
        this->size() is the final size of the media source, applied to the frame buffer before
        notification to observers.

        * platform/mock/MockRealtimeVideoSource.cpp:
        (WebCore::MockRealtimeVideoSource::generateFrame):

2021-10-17  Dean Jackson  <dino@apple.com>

        [WebXR] Stubs for WebXR Hand Input Module
        https://bugs.webkit.org/show_bug.cgi?id=231123
        <rdar://problem/83802135>

        Reviewed by Sam Weinig.

        Add the IDL and stub implementations for the WebXR
        Hand Input module:
        https://immersive-web.github.io/webxr-hand-input/

        The important class is WebXRHand, which is owned by
        and accessible from the WebXRInputSource, which
        itself is owned by the WebXRSession.

        Test: http/wpt/webxr/xrHandInput_gc.html

        * CMakeLists.txt: Add new files.
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

        * Modules/webxr/WebXRSession.idl: Add a custom mark function that creates an opaque root.
        * bindings/js/JSWebXRSessionCustom.cpp:

        * Modules/webxr/WebXRFrame+HandInput.idl: Add new hand-related methods.
        * Modules/webxr/WebXRFrame.cpp:
        (WebCore::WebXRFrame::getJointPose):
        (WebCore::WebXRFrame::fillJointRadii):
        (WebCore::WebXRFrame::fillPoses):
        * Modules/webxr/WebXRFrame.h:

        * Modules/webxr/WebXRHand.cpp: New files.
        (WebCore::WebXRHand::create):
        (WebCore::WebXRHand::WebXRHand):
        (WebCore::WebXRHand::get):
        (WebCore::WebXRHand::Iterator::Iterator):
        (WebCore::WebXRHand::Iterator::next):
        (WebCore::WebXRHand::session):
        * Modules/webxr/WebXRHand.h:
        (WebCore::WebXRHand::size):
        (WebCore::WebXRHand::createIterator):
        * Modules/webxr/WebXRHand.idl:

        * Modules/webxr/WebXRInputSource+HandInput.idl: Add WebXRHand accessor.
        * Modules/webxr/WebXRInputSource.cpp:
        (WebCore::WebXRInputSource::update):
        * Modules/webxr/WebXRInputSource.h:
        (WebCore::WebXRInputSource::hand const):

        * Modules/webxr/WebXRJointPose.cpp: New files.
        (WebCore::WebXRJointPose::create):
        (WebCore::WebXRJointPose::WebXRJointPose):
        * Modules/webxr/WebXRJointPose.h:
        (WebCore::WebXRJointPose::radius const):
        * Modules/webxr/WebXRJointPose.idl:

        * Modules/webxr/WebXRJointSpace.cpp: New files.
        (WebCore::WebXRJointSpace::create):
        (WebCore::WebXRJointSpace::WebXRJointSpace):
        (WebCore::WebXRJointSpace::nativeOrigin const):
        * Modules/webxr/WebXRJointSpace.h:
        (WebCore::WebXRJointSpace::jointName const):
        * Modules/webxr/WebXRJointSpace.idl:

        * Modules/webxr/WebXRSpace.h: New virtual identifier for joint space subclass.
        (WebCore::WebXRSpace::isJointSpace const):

        * Modules/webxr/WebXRSystem.cpp: Add a comment regarding the testing of
        optional features (where the "hand-tracking" feature should be checked).
        (WebCore::WebXRSystem::resolveRequestedFeatures const):

        * Modules/webxr/XRHandJoint.h: New file.
        * Modules/webxr/XRHandJoint.idl:

        * bindings/js/WebCoreBuiltinNames.h: Expose new mappings from published names
        to internal names.

        * platform/xr/PlatformXR.h: Add "simulateHands" field to frame data for testing.
        * testing/FakeXRInputSourceInit.h: And similarly to the fake input source.
        * testing/FakeXRInputSourceInit.idl:

        * testing/WebFakeXRInputController.cpp: Allow the test system to fake a hand.
        (WebCore::WebFakeXRInputController::WebFakeXRInputController):
        (WebCore::WebFakeXRInputController::getFrameData):
        * testing/WebFakeXRInputController.h:

2021-10-17  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r270850): Reference clip path clips in the wrong place when inside non-visible overflow
        https://bugs.webkit.org/show_bug.cgi?id=231852
        <rdar://83186229>

        Reviewed by Tim Horton.

        When clipping CSS boxes with reference clip paths we need to give RenderSVGResourceClipper two
        different rectangles; the objectBoundingBox that is used to compute clip path geometry,
        and the bounds of the clipped content, so that the buffer-based clipping code path
        can create an ImageBuffer of the appropriate size.

        Previously, we confounded these two rectangles, resulting in various bugs.

        Tests: css3/masking/reference-clip-path-bounds.html
               css3/masking/reference-clip-path-objectBoundingBox-buffer-clip.html
               css3/masking/reference-clip-path-objectBoundingBox-path-clip.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::setupClipPath):
        * rendering/svg/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::applyResource):
        (WebCore::RenderSVGResourceClipper::applyClippingToContext):
        * rendering/svg/RenderSVGResourceClipper.h:

2021-10-17  Tyler Wilcock  <tyler_w@apple.com>

        AX: WebKit should not expose redundant AXGroups with missing role when the label is the same as the contents
        https://bugs.webkit.org/show_bug.cgi?id=169924

        Reviewed by Chris Fleizach.

        Don't expose groups with redundant accessibility text on the Mac.
        Here's an example of one such group:

        <div aria-label="1">1</div>

        This group is not useful to accessibility clients. Instead, we
        expose the text contents directly.

        Test: accessibility/ignore-redundant-accessibility-text-groups.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::textUnderElement const):
        Instead of asserting when we try to get the text of an element in a
        document that needs a style update, return an empty string.

        * accessibility/mac/AccessibilityObjectMac.mm:
        (WebCore::shouldIgnoreGroup): Added.
        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject const):

2021-10-17  Antti Koivisto  <antti@apple.com>

        [LFC][Integration] Support background-clip:text on inline boxes
        https://bugs.webkit.org/show_bug.cgi?id=231877

        Reviewed by Alan Bujtas.

        Implement text mask painting.

        Test: fast/inline/inline-background-clip-text.html

        * layout/integration/InlineIteratorBoxLegacyPath.h:
        (WebCore::InlineIterator::BoxLegacyPath::firstLeafBoxForInlineBox const):
        (WebCore::InlineIterator::BoxLegacyPath::lastLeafBoxForInlineBox const):
        * layout/integration/InlineIteratorBoxModernPath.h:
        (WebCore::InlineIterator::BoxModernPath::firstLeafBoxForInlineBox const):
        (WebCore::InlineIterator::BoxModernPath::lastLeafBoxForInlineBox const):
        (WebCore::InlineIterator::BoxModernPath::isWithinInlineBox):
        * layout/integration/InlineIteratorInlineBox.cpp:
        (WebCore::InlineIterator::InlineBox::firstLeafBox const):
        (WebCore::InlineIterator::InlineBox::lastLeafBox const):
        (WebCore::InlineIterator::InlineBox::endLeafBox const):

        Add iterator support for getting leaf boxes of an inline box.

        * layout/integration/InlineIteratorInlineBox.h:
        * layout/integration/LayoutIntegrationCoverage.cpp:
        (WebCore::LayoutIntegration::printReason):
        (WebCore::LayoutIntegration::canUseForRenderInlineChild):
        * layout/integration/LayoutIntegrationCoverage.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintMaskForTextFillBox):

        Paint the mask directly using TextBoxPainter instead of recursing to the general painting code.

        * rendering/TextBoxPainter.cpp:
        (WebCore::TextBoxPainter::TextBoxPainter):
        * rendering/TextBoxPainter.h:

2021-10-16  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Adjust the logical right side of the line with line spanning inline boxes
        https://bugs.webkit.org/show_bug.cgi?id=231862

        Reviewed by Antti Koivisto.

        This patch is in preparation for supporting "box-decoration-break: clone".

        1. The line spanning inline box takes up space on the line (see line logical width)
        2. The inline box may be getting closed on the line (do not double account for the end width, see handleInlineContent )
        3. When we commit the inline box closing, turn the ending into just a normal run (see appendInlineBoxEnd )

        * layout/formattingContexts/inline/InlineLine.cpp:
        (WebCore::Layout::Line::initialize):
        (WebCore::Layout::Line::appendInlineBoxStart):
        (WebCore::Layout::Line::appendInlineBoxEnd):
        (WebCore::Layout::Line::appendTextContent):
        (WebCore::Layout::Line::appendNonReplacedInlineLevelBox):
        (WebCore::Layout::Line::appendLineBreak):
        (WebCore::Layout::Line::appendWordBreakOpportunity):
        * layout/formattingContexts/inline/InlineLine.h:
        (WebCore::Layout::Line::contentLogicalRight const):
        (WebCore::Layout::Line::lineSpanningInlineBoxRunEnds const):
        (WebCore::Layout::Line::lastRunLogicalRight const):
        * layout/formattingContexts/inline/InlineLineBuilder.cpp:
        (WebCore::Layout::LineBuilder::handleInlineContent):
        (WebCore::Layout::LineBuilder::rebuildLineForTrailingSoftHyphen):

2021-10-16  Robin Morisset  <rmorisset@apple.com>

        Allow WASM to use up to 4GB
        https://bugs.webkit.org/show_bug.cgi?id=229353
        rdar://81603447

        Reviewed by Yusuke Suzuki.

        Some parts of WebCore use TypedArrays, and would not build after I made the length() function on typed arrays return UCPURegister instead of uint32_t.
        Most fixes were trivial, the only exception is SerializedScriptValue.cpp, where I had to increment the version number, as ArrayBuffer (and ArrayBufferViews) now write/read their length in a 64-bit field (and same for the byteOffset of ArrayBufferView).

        I also had to add a test in PixelBuffer.cpp that the size of the ArrayBuffer it will try to allocate is < INT32_MAX.
        Otherwise, the test LayoutTests/fast/shapes/shape-outside-floats/shape-outside-imagedata-overflow.html which checks that very large images are properly rejected without crashing, would timeout.

        No new tests, as the code is already extensively covered by existing tests, and I implemented no new features.

        * Modules/webaudio/AudioBuffer.cpp:
        (WebCore::AudioBuffer::copyFromChannel):
        (WebCore::AudioBuffer::copyToChannel):
        * Modules/webaudio/RealtimeAnalyser.cpp:
        (WebCore::RealtimeAnalyser::getByteFrequencyData):
        (WebCore::RealtimeAnalyser::getFloatTimeDomainData):
        (WebCore::RealtimeAnalyser::getByteTimeDomainData):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::dumpArrayBufferView):
        (WebCore::CloneSerializer::dumpImageBitmap):
        (WebCore::CloneSerializer::dumpIfTerminal):
        (WebCore::CloneDeserializer::readArrayBufferImpl):
        (WebCore::CloneDeserializer::readArrayBuffer):
        (WebCore::CloneDeserializer::readArrayBufferViewImpl):
        (WebCore::CloneDeserializer::readArrayBufferView):
        * bindings/js/SerializedScriptValue.h:
        (WebCore::SerializedScriptValue::encode const):
        (WebCore::SerializedScriptValue::decode):
        * fileapi/NetworkSendQueue.cpp:
        (WebCore::NetworkSendQueue::enqueue):
        * platform/graphics/PixelBuffer.cpp:
        (WebCore::PixelBuffer::tryCreate):
        * platform/graphics/iso/ISOBox.h:

2021-10-16  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Adjust the logical left side of the line with line spanning inline boxes
        https://bugs.webkit.org/show_bug.cgi?id=231851

        Reviewed by Antti Koivisto.

        This is in preparation for supporting "box-decoration-break: clone", where the
        line spanning inline boxes do take up some space on the line with their horizontal margin, border and padding.

        Test: fast/inline/inline-box-with-left-decoration-clone.html

        * layout/formattingContexts/inline/InlineLine.cpp:
        (WebCore::Layout::Line::initialize):
        (WebCore::Layout::Line::Run::Run):
        * layout/formattingContexts/inline/InlineLine.h:

2021-10-16  Tim Horton  <timothy_horton@apple.com>

        Unreviewed, reverting r284143.

        Caused a series of assertions in layout tests in EWS

        Reverted changeset:

        "Scroll To Text Fragment directive parsing"
        https://bugs.webkit.org/show_bug.cgi?id=231410
        https://commits.webkit.org/r284143

2021-10-16  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add "line spanning line box start items" to Line
        https://bugs.webkit.org/show_bug.cgi?id=231551

        Reviewed by Antti Koivisto.

        This patch is in preparation for supporting box-decoration-break: clone, where the line spanning
        inline boxes may take up space on the line (border/padding).
        This patch moves the construction of the spanning inline boxes to an earlier step, from LineBox to Line.

        * layout/formattingContexts/inline/InlineLineBuilder.cpp:
        (WebCore::Layout::LineBuilder::initialize):

2021-10-16  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Move overflowing content creation to LineBuilder::initialize
        https://bugs.webkit.org/show_bug.cgi?id=231540

        Reviewed by Antti Koivisto.

        LineBuilder::initialize is going to handle all overflowing content initialization.
        This is in preparation for adding spanning inline box items to the line (to support box-decoration-break: clone).

        * layout/formattingContexts/inline/InlineLineBuilder.cpp:
        (WebCore::Layout::LineBuilder::layoutInlineContent):
        (WebCore::Layout::LineBuilder::computedIntrinsicWidth):
        (WebCore::Layout::LineBuilder::initialize):
        (WebCore::Layout::LineBuilder::placeInlineContent):
        (WebCore::Layout::LineBuilder::candidateContentForLine):
        * layout/formattingContexts/inline/InlineLineBuilder.h:
        * layout/formattingContexts/inline/InlineTextItem.h:
        (WebCore::Layout::InlineTextItem::right const):

2021-10-16  Antti Koivisto  <antti@apple.com>

        Use inline iterator for SVG reverse BiDI reordering
        https://bugs.webkit.org/show_bug.cgi?id=231858

        Reviewed by Alan Bujtas.

        Share code.

        * layout/integration/InlineIteratorLogicalOrderTraversal.cpp:
        (WebCore::InlineIterator::makeLineLogicalOrderCache):
        (WebCore::InlineIterator::nextLeafOnLineInLogicalOrder):
        (WebCore::InlineIterator::previousLeafOnLineInLogicalOrder):

        No need to test for the cache, it is always there.

        * layout/integration/InlineIteratorLogicalOrderTraversal.h:
        (WebCore::InlineIterator::leafBoxesInLogicalOrder):

        Make template and move to header.

        * rendering/LegacyInlineFlowBox.cpp:
        (WebCore::LegacyInlineFlowBox::collectLeafBoxesInLogicalOrder const): Deleted.

        Not needed anymore.

        * rendering/LegacyInlineFlowBox.h:
        * rendering/svg/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBox::computePerCharacterLayoutInformation):
        (WebCore::reverseInlineBoxRangeAndValueListsIfNeeded):
        (WebCore::SVGRootInlineBox::reorderValueListsToLogicalOrder):
        (WebCore::SVGRootInlineBox::reorderValueLists): Deleted.

        Call the generic version.

        * rendering/svg/SVGRootInlineBox.h:

2021-10-16  Simon Fraser  <simon.fraser@apple.com>

        Make sure child layers of top layer elements are rendered and correctly z-ordered (top-layer-stacking.html fails)
        https://bugs.webkit.org/show_bug.cgi?id=231832

        Reviewed by Antoine Quint.
        
        Top layer elements should create CSS stacking context, per https://fullscreen.spec.whatwg.org/#rendering

        I decided to call isInTopLayerOrBackdrop() twice to avoid calling it every time this function
        is called. It's a cheap function.

        Test: fast/layers/dialog-is-stacking-context.html

        * style/StyleAdjuster.cpp:
        (WebCore::Style::Adjuster::adjust const):

2021-10-15  Antoine Quint  <graouts@webkit.org>

        Accelerated animations on ::backdrop shouldn't affect <dialog> (backdrop-animate-002.html fails)
        https://bugs.webkit.org/show_bug.cgi?id=230008
        <rdar://problem/82975766>

        Reviewed by Simon Fraser and Tim Nguyen.

        We did not know how to access the ::backdrop renderer when running accelerated animations. To do so we now
        implement full support to access the renderer for known pseudo-elements on Styleable with a new renderer()
        method, including ::backdrop. We also make Styleable::fromRenderer() aware of ::backdrop such that the various
        call sites for this function that deal with accelerated transform animations access the right element.

        * animation/KeyframeEffect.cpp:
        (WebCore::KeyframeEffect::renderer const):
        * style/Styleable.cpp:
        (WebCore::Styleable::fromRenderer):
        (WebCore::Styleable::renderer const):
        * style/Styleable.h:
        (WebCore::Styleable::fromRenderer): Deleted.

2021-10-15  Antoine Quint  <graouts@webkit.org>

        CSS Animations creation and sorting is incorrect and may lead to crash
        https://bugs.webkit.org/show_bug.cgi?id=231812
        <rdar://problem/82980774>

        Reviewed by Dean Jackson.

        When we parse CSS properties related to CSS Animations, we create as many Animation objects as the maximum number
        of values in one of the CSS Animations properties. These Animation objects are stored in an AnimationList which
        is owned by RenderStyle and that we use to store all provided values such that they can be read back through the
        computed style.

        Upon finishing parsing those CSS properties, RenderStyle::adjustAnimations() is called and does two things that
        were not quite correct.
        
        First, it would attempt to remove animations that were in fact created for no good reason using the
        Animation::isEmpty() method. That method was not quite right as it was only checking if the animation
        name wasn't set but not whether the animation was explicitly marked as a "none" animation. This meant
        that "none" animations could be considered as bogus animations and any animations after that one would
        be mistakenly cleared.

        Second, it would finish process the list of remaning animations by making sure that mis-matched CSS properties,
        for instance three values for animation-duration and four values for animation-name, would be correctly represented
        throughout the Animation objects. However, the function performing this work, AnimationList::fillUnsetProperties(),
        used to reset the animation's name in case it wasn't explicitly set, which meant that Animation objects that did not
        have a matching animation-name would end up with a valid one. This meant that further down the line, in
        Styleable::updateCSSAnimations(), we couldn't distinguish Animation objects that were created without a
        matching animation-name and discard those.

        We've fixed those incorrect behaviors and we now have the expected number of animations created resulting in an additional
        WPT PASS result.

        Additionally, this also showed some issues around sorting CSS Animations in compareCSSAnimations() where we weren't
        making a pointer comparison. This is now fixed and we now pass another WPT PASS result.

        Test: webanimations/css-animation-sorting-crash.html

        * animation/WebAnimationUtilities.cpp:
        (WebCore::compareCSSAnimations):
        * platform/animation/Animation.h:
        (WebCore::Animation::isEmpty const):
        * platform/animation/AnimationList.cpp:
        (WebCore::AnimationList::fillUnsetProperties):

2021-10-15  Antti Koivisto  <antti@apple.com>

        [LFC][Integration] Enable inline boxes with borders
        https://bugs.webkit.org/show_bug.cgi?id=231562

        Reviewed by Alan Bujtas.

        * layout/integration/LayoutIntegrationCoverage.cpp:
        (WebCore::LayoutIntegration::printReason):
        (WebCore::LayoutIntegration::canUseForRenderInlineChild):
        * layout/integration/LayoutIntegrationCoverage.h:

2021-10-15  Simon Fraser  <simon.fraser@apple.com>

        Rename some keyboard-scrolling-related functions on ScrollingEffectsController for clarity
        https://bugs.webkit.org/show_bug.cgi?id=231842

        Reviewed by Beth Dakin.

        Rename beginKeyboardScrolling/stopKeyboardScrolling to willBegin and didStop to make
        it clear that they are responding to KeyboardScrollingAnimator state changes.

        Add the imperative ScrollingEffectsController::stopKeyboardScrolling() which will get
        hooked up soon.

        * platform/KeyboardScrollingAnimator.cpp:
        (WebCore::KeyboardScrollingAnimator::updateKeyboardScrollPosition):
        (WebCore::KeyboardScrollingAnimator::beginKeyboardScrollGesture):
        * platform/ScrollingEffectsController.cpp:
        (WebCore::ScrollingEffectsController::willBeginKeyboardScrolling):
        (WebCore::ScrollingEffectsController::didStopKeyboardScrolling):
        (WebCore::ScrollingEffectsController::stopKeyboardScrolling):
        (WebCore::ScrollingEffectsController::beginKeyboardScrolling): Deleted.
        * platform/ScrollingEffectsController.h:

2021-10-15  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r284245.
        https://bugs.webkit.org/show_bug.cgi?id=231848

        Caused

        Reverted changeset:

        "AX: WebKit should not expose redundant AXGroups with missing
        role when the label is the same as the contents"
        https://bugs.webkit.org/show_bug.cgi?id=169924
        https://commits.webkit.org/r284245

2021-10-15  Ross Kirsling  <ross.kirsling@sony.com>

        Realize Mac CMake build of WebCore and WebKit
        https://bugs.webkit.org/show_bug.cgi?id=231749

        Reviewed by Alex Christensen.

        * CMakeLists.txt:
        * PlatformMac.cmake:

2021-10-15  Eric Carlson  <eric.carlson@apple.com>

        [iOS] Support getDisplayMedia
        https://bugs.webkit.org/show_bug.cgi?id=231455
        <rdar://problem/84044495>

        Reviewed by Youenn Fablet and Jer Noble.

        Implement screen capture for iOS using ReplayKit. ReplayKit only captures when the 
        host application is in the foreground, so the MediaStream track is muted when the
        app is backgrounded.

        getDisplayMedia availability to JavaScript is controlled by the `ScreenCaptureEnabled`
        setting, which is disabled by default on iOS.

        I haven't figured out how to test this automatically yet because ReplayKit always
        shows its own modal user prompt before it allows capture to begin.

        * SourcesCocoa.txt: Add ReplayKitCaptureSource.mm. Rename DisplayCaptureSourceMac.cpp
        to DisplayCaptureSourceCocoa.cpp.

        * WebCore.xcodeproj/project.pbxproj: Add new files.

        * en.lproj/Localizable.strings: Add localizable strings for getDisplayMedia prompt.

        * platform/graphics/cv/ImageTransferSessionVT.h:
        * platform/graphics/cv/ImageTransferSessionVT.mm:
        (WebCore::ImageTransferSessionVT::convertCMSampleBuffer): Add an optional MediaTime parameter.
        (WebCore::ImageTransferSessionVT::createMediaSample): Add a MediaTime parameter.

        * platform/mediastream/ios/ReplayKitCaptureSource.h: Added.
        * platform/mediastream/ios/ReplayKitCaptureSource.mm: Added.
        (-[WebCoreReplayKitScreenRecorderHelper initWithCallback:]):
        (-[WebCoreReplayKitScreenRecorderHelper disconnect]):
        (-[WebCoreReplayKitScreenRecorderHelper observeValueForKeyPath:ofObject:change:context:]):
        (WebCore::ReplayKitCaptureSource::isAvailable): Check ReplayKit availability.
        (WebCore::ReplayKitCaptureSource::create):
        (WebCore::ReplayKitCaptureSource::ReplayKitCaptureSource):
        (WebCore::ReplayKitCaptureSource::~ReplayKitCaptureSource):
        (WebCore::ReplayKitCaptureSource::start): Start screen capture only.
        (WebCore::ReplayKitCaptureSource::screenRecorderDidOutputVideoSample): Retain the
        the new frame, set intrinsic size to the image size.
        (WebCore::ReplayKitCaptureSource::captureStateDidChange): Update observer if interruption
        state or recorder state changes so it can update the track's 'muted' state.
        (WebCore::ReplayKitCaptureSource::stop): Stop capture.
        (WebCore::ReplayKitCaptureSource::generateFrame):
        (WebCore::ReplayKitCaptureSource::verifyCaptureIsActive): ReplayKit doesn't notify 
        when capture is paused, so watch for changes by monitoring the frame count.
        (WebCore::ReplayKitCaptureSource::startCaptureWatchdogTimer): Start the timer that
        will monitor for capture pausing/resuming.
        (WebCore::screenDeviceUUID):
        (WebCore::screenDevice):
        (WebCore::ReplayKitCaptureSource::screenCaptureDeviceWithPersistentID):
        (WebCore::ReplayKitCaptureSource::screenCaptureDevices):

        * platform/mediastream/mac/CGDisplayStreamCaptureSource.cpp:
        (WebCore::CGDisplayStreamCaptureSource::generateFrame): DisplayCaptureSourceMac was
        renamed DisplayCaptureSourceCocoa.
        (WebCore::CGDisplayStreamCaptureSource::newFrame): Take a RetainPtr<IOSurfaceRef>
        instead of a DisplaySurface.
        (WebCore::CGDisplayStreamCaptureSource::frameAvailableHandler): Ditto.
        * platform/mediastream/mac/CGDisplayStreamCaptureSource.h:
        (WebCore::CGDisplayStreamCaptureSource::DisplaySurface::DisplaySurface): Deleted.
        (WebCore::CGDisplayStreamCaptureSource::DisplaySurface::~DisplaySurface): Deleted.
        (WebCore::CGDisplayStreamCaptureSource::DisplaySurface::operator=): Deleted.
        (WebCore::CGDisplayStreamCaptureSource::DisplaySurface::ioSurface const): Deleted.

        * platform/mediastream/mac/CGDisplayStreamScreenCaptureSource.h:
        * platform/mediastream/mac/CGDisplayStreamScreenCaptureSource.mm:
        (WebCore::CGDisplayStreamScreenCaptureSource::create): DisplayCaptureSourceMac was
        renamed DisplayCaptureSourceCocoa.

        * platform/mediastream/mac/DisplayCaptureManagerCocoa.cpp:
        (WebCore::DisplayCaptureManagerCocoa::updateDisplayCaptureDevices): Use 
        ReplayKitCaptureSource on iOS.

        * platform/mediastream/mac/DisplayCaptureSourceCocoa.cpp: Renamed from Source/WebCore/platform/mediastream/mac/DisplayCaptureSourceMac.cpp.
        (WebCore::DisplayCaptureSourceCocoa::create):
        (WebCore::DisplayCaptureSourceCocoa::DisplayCaptureSourceCocoa):
        (WebCore::DisplayCaptureSourceCocoa::~DisplayCaptureSourceCocoa):
        (WebCore::DisplayCaptureSourceCocoa::capabilities):
        (WebCore::DisplayCaptureSourceCocoa::settings):
        (WebCore::DisplayCaptureSourceCocoa::settingsDidChange):
        (WebCore::DisplayCaptureSourceCocoa::startProducingData):
        (WebCore::DisplayCaptureSourceCocoa::stopProducingData):
        (WebCore::DisplayCaptureSourceCocoa::elapsedTime):
        (WebCore::DisplayCaptureSourceCocoa::updateFrameSize):
        (WebCore::DisplayCaptureSourceCocoa::emitFrame): Support capturer returning a CMSampleBuffer.
        (WebCore::DisplayCaptureSourceCocoa::setLogger):
        (WebCore::DisplayCaptureSourceCocoa::Capturer::setLogger): Set the capturer's logger.
        (WebCore::DisplayCaptureSourceCocoa::Capturer::logChannel const):
        (WebCore::DisplayCaptureSourceCocoa::Capturer::Observer::~Observer):
        (WebCore::DisplayCaptureSourceCocoa::Capturer::setObserver):
        (WebCore::DisplayCaptureSourceCocoa::Capturer::capturerIsRunningChanged):
        * platform/mediastream/mac/DisplayCaptureSourceCocoa.h: Renamed from Source/WebCore/platform/mediastream/mac/DisplayCaptureSourceMac.h.

        * platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp:
        (WebCore::DisplayCaptureSourceFactoryMac::createDisplayCaptureSource): DisplayCaptureSourceMac
        renamed to DisplayCaptureSourceCocoa.

        * platform/mock/MockRealtimeMediaSourceCenter.cpp:
        (WebCore::MockDisplayCapturer::generateFrame): Ditto.

2021-10-15  Aditya Keerthi  <akeerthi@apple.com>

        [iOS] Support accent-color for button-like controls
        https://bugs.webkit.org/show_bug.cgi?id=231764
        rdar://84261821

        Reviewed by Tim Horton.

        Apply accent-color to buttons, date inputs, and <select> elements.

        Tests: fast/css/accent-color/button.html
               fast/css/accent-color/date.html
               fast/css/accent-color/submit.html

        * html/HTMLButtonElement.cpp:
        (WebCore::HTMLButtonElement::isExplicitlySetSubmitButton const):

        Return true if the author has explicitly made the <button> a
        submit button. This is necessary, as submit buttons have an appearance
        that is different from a standard button on iOS.

        * html/HTMLButtonElement.h:
        * rendering/RenderThemeIOS.h:
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::adjustMenuListButtonStyle const):
        (WebCore::RenderThemeIOS::isSubmitStyleButton const):
        (WebCore::RenderThemeIOS::adjustButtonLikeControlStyle const):
        (WebCore::RenderThemeIOS::adjustButtonStyle const):
        (WebCore::RenderThemeIOS::adjustPressedStyle const): Deleted.

2021-10-15  Antti Koivisto  <antti@apple.com>

        [LFC][Integration] Factor line logical order traversal out of iterator
        https://bugs.webkit.org/show_bug.cgi?id=231800

        Reviewed by Alan Bujtas.

        Similar to text logical order traversal, use standalone traversal functions with order cache
        owned by the caller.

        Make the code generic so it will work with IFC BiDi.

        Factor all traversal functions to a file of their own, InlineIteratorLogicalOrderTraversal.h/cpp.

        * Headers.cmake:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Position.cpp:
        * editing/CompositeEditCommand.cpp:
        * editing/TextIterator.h:
        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::leftVisuallyDistinctCandidate const):
        (WebCore::VisiblePosition::rightVisuallyDistinctCandidate const):
        * editing/VisibleUnits.cpp:
        (WebCore::previousTextOrLineBreakRun):
        (WebCore::nextTextOrLineBreakRun):
        (WebCore::startTextOrLineBreakRun):
        (WebCore::endTextOrLineBreakRun):
        (WebCore::logicallyPreviousRun):
        (WebCore::logicallyNextRun):
        (WebCore::wordBreakIteratorForMinOffsetBoundary):
        (WebCore::wordBreakIteratorForMaxOffsetBoundary):
        (WebCore::startPositionForLine):
        (WebCore::endPositionForLine):
        * layout/integration/InlineIteratorBox.cpp:
        (WebCore::InlineIterator::LeafBoxIterator::traversePreviousOnLineIgnoringLineBreak):
        (WebCore::InlineIterator::LeafBoxIterator::traverseNextOnLineInLogicalOrder): Deleted.
        (WebCore::InlineIterator::LeafBoxIterator::traversePreviousOnLineInLogicalOrder): Deleted.
        * layout/integration/InlineIteratorBox.h:
        (WebCore::InlineIterator::BoxIterator::BoxIterator):
        * layout/integration/InlineIteratorBoxLegacyPath.h:
        (WebCore::InlineIterator::BoxLegacyPath::BoxLegacyPath):
        (WebCore::InlineIterator::BoxLegacyPath::traverseNextOnLineInLogicalOrder): Deleted.
        (WebCore::InlineIterator::BoxLegacyPath::traversePreviousOnLineInLogicalOrder): Deleted.
        (WebCore::InlineIterator::BoxLegacyPath::initializeLogicalOrderCacheForLine): Deleted.
        (WebCore::InlineIterator::BoxLegacyPath::traverseNextInlineBoxInCacheOrder): Deleted.
        (WebCore::InlineIterator::BoxLegacyPath::traversePreviousInlineBoxInCacheOrder): Deleted.
        * layout/integration/InlineIteratorBoxModernPath.h:
        (WebCore::InlineIterator::BoxModernPath::traverseNextOnLineInLogicalOrder): Deleted.
        (WebCore::InlineIterator::BoxModernPath::traversePreviousOnLineInLogicalOrder): Deleted.
        * layout/integration/InlineIteratorLine.cpp:
        (WebCore::InlineIterator::Line::logicalStartRun const): Deleted.
        (WebCore::InlineIterator::Line::logicalEndRun const): Deleted.
        (WebCore::InlineIterator::Line::logicalStartRunWithNode const): Deleted.
        (WebCore::InlineIterator::Line::logicalEndRunWithNode const): Deleted.
        * layout/integration/InlineIteratorLine.h:
        * layout/integration/InlineIteratorLineLegacyPath.h:
        (WebCore::InlineIterator::LineIteratorLegacyPath::logicalStartRun const): Deleted.
        (WebCore::InlineIterator::LineIteratorLegacyPath::logicalEndRun const): Deleted.
        * layout/integration/InlineIteratorLineModernPath.h:
        (WebCore::InlineIterator::LineIteratorModernPath::logicalStartRun const): Deleted.
        (WebCore::InlineIterator::LineIteratorModernPath::logicalEndRun const): Deleted.
        * layout/integration/InlineIteratorLogicalOrderTraversal.cpp: Added.
        (WebCore::InlineIterator::makeTextLogicalOrderCacheIfNeeded):
        (WebCore::InlineIterator::updateTextLogicalOrderCacheIfNeeded):
        (WebCore::InlineIterator::firstTextBoxInLogicalOrderFor):
        (WebCore::InlineIterator::nextTextBoxInLogicalOrder):
        (WebCore::InlineIterator::makeLineLogicalOrderCacheIfNeeded):
        (WebCore::InlineIterator::updateLineLogicalOrderCacheIfNeeded):
        (WebCore::InlineIterator::firstLeafOnLineInLogicalOrder):
        (WebCore::InlineIterator::lastLeafOnLineInLogicalOrder):
        (WebCore::InlineIterator::nextLeafOnLineInLogicalOrder):
        (WebCore::InlineIterator::previousLeafOnLineInLogicalOrder):
        (WebCore::InlineIterator::firstLeafOnLineInLogicalOrderWithNode):
        (WebCore::InlineIterator::lastLeafOnLineInLogicalOrderWithNode):
        * layout/integration/InlineIteratorLogicalOrderTraversal.h: Added.
        * layout/integration/InlineIteratorTextBox.cpp:
        (WebCore::InlineIterator::firstTextBoxInLogicalOrderFor): Deleted.
        (WebCore::InlineIterator::nextTextBoxInLogicalOrder): Deleted.
        * layout/integration/InlineIteratorTextBox.h:
        (): Deleted.
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::positionForPointWithInlineChildren):
        * rendering/RenderText.cpp:

2021-10-15  Andres Gonzalez  <andresg_22@apple.com>

        Calls to AXCoreObject::widget() have to be dispatch to the main thread in isolated tree mode.
        https://bugs.webkit.org/show_bug.cgi?id=231766
        <rdar://problem/84271039>

        Reviewed by Chris Fleizach.

        This patch fixes several dozens of tests that were crashing or timing out in isolated tree mode.

        The WebAccessibilityObjectWrapper was calling the widget() method on the
        AX thread, which creates problems because this object is not thread
        safe and it is created on the main thread. To avoid this problem, we
        have to dispatch those calls to the main thread. Since widget() is
        called very often now, for every request of the children of a leaf node,
        added AXCoreObject::isWidget() to be able to check for it without having
        to return the Widget object. The IsWidget property is cached in the
        AXIsolatedObject, hence limiting the number of times we have to hit the
        main thread.

        * accessibility/AccessibilityNodeObject.cpp:
        Removed include header that is not used in this cpp.

        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityObjectInterface.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isWidget const):
        (WebCore::AccessibilityRenderObject::widget const):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/isolatedtree/AXIsolatedObject.cpp:
        (WebCore::AXIsolatedObject::initializeAttributeData):
        (WebCore::AXIsolatedObject::widget const):
        * accessibility/isolatedtree/AXIsolatedObject.h:
        * accessibility/isolatedtree/AXIsolatedTree.h:
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper renderWidgetChildren]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
        (isMatchingPlugin):

2021-10-15  BJ Burg  <bburg@apple.com>

        [Cocoa] Web Inspector: handle Promise objects returned from evaluateScriptInExtensionTab
        https://bugs.webkit.org/show_bug.cgi?id=231709
        <rdar://problem/84224179>

        Reviewed by Timothy Hatcher.

        New API test: WKInspectorExtension.EvaluateScriptInExtensionTabCanReturnPromises

        * inspector/InspectorFrontendAPIDispatcher.cpp:
        (WebCore::InspectorFrontendAPIDispatcher::evaluateOrQueueExpression):
        Add JSLockHolders for when we are poking at the result value.

2021-10-15  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r284244.
        https://bugs.webkit.org/show_bug.cgi?id=231813

        Introduced

        Reverted changeset:

        "AX: Return AXEmptyGroup subrole for groups with no accessible
        content"
        https://bugs.webkit.org/show_bug.cgi?id=231528
        https://commits.webkit.org/r284244

2021-10-15  Kate Cheney  <katherine_cheney@apple.com>

        CSP: Implement src-elem and src-attr directives
        https://bugs.webkit.org/show_bug.cgi?id=231751
        <rdar://problem/83332874>

        Reviewed by Brent Fulgham.

        Implement script-src-elem, script-src-attr, style-src-elem, and
        style-src-attr directives. *-elem directives specify load policy for
        <script> and <style> elements. *-attr directives specify load policy
        for inline event handlers or inline style applied to individual DOM elements.

        To match behavior of wpt tests and other browsers, we should report
        the violated directive as accurately as possible even if a more
        general directive was specified in the policy. For example, reporting
        the violated directive as script-src even if default-src was
        specified, and script-src-elem even if only script-src was specified.
        To do this I added a nameForReporting() method in the
        ContentSecurityPolicySourceListDirective class that gets set when we
        check the load for violations.

        Console messages should not change, in fact, we should consider making
        them more specific in the future.

        * page/csp/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::allowJavaScriptURLs const):
        (WebCore::ContentSecurityPolicy::allowInlineEventHandlers const):
        (WebCore::ContentSecurityPolicy::allowInlineScript const):
        (WebCore::ContentSecurityPolicy::allowInlineStyle const):
        We can reuse the check for unsafe hashes to determine if we should
        report a style-src-elem or style-src-attr violation.

        (WebCore::ContentSecurityPolicy::reportViolation const):
        * page/csp/ContentSecurityPolicyDirective.cpp:
        (WebCore::ContentSecurityPolicyDirective::~ContentSecurityPolicyDirective):
        Need a destructor now that we have virtual functions.

        * page/csp/ContentSecurityPolicyDirective.h:
        (WebCore::ContentSecurityPolicyDirective::nameForReporting const):
        * page/csp/ContentSecurityPolicyDirectiveList.cpp:
        (WebCore::ContentSecurityPolicyDirectiveList::create):
        unsafe-eval should still have script-src as a violated directive.

        (WebCore::ContentSecurityPolicyDirectiveList::operativeDirective const):
        (WebCore::ContentSecurityPolicyDirectiveList::operativeDirectiveScript const):
        (WebCore::ContentSecurityPolicyDirectiveList::operativeDirectiveStyle const):
        elem/attr directives fall back to their respective general directives
        if the more specific ones do not exist.

        (WebCore::ContentSecurityPolicyDirectiveList::violatedDirectiveForUnsafeEval const):
        (WebCore::ContentSecurityPolicyDirectiveList::violatedDirectiveForUnsafeHashScript const):
        (WebCore::ContentSecurityPolicyDirectiveList::violatedDirectiveForUnsafeHashStyle const):
        (WebCore::ContentSecurityPolicyDirectiveList::violatedDirectiveForParserInsertedScript const):
        (WebCore::ContentSecurityPolicyDirectiveList::violatedDirectiveForUnsafeInlineScriptElement const):
        (WebCore::ContentSecurityPolicyDirectiveList::violatedDirectiveForUnsafeInlineScriptAttribute const):
        (WebCore::ContentSecurityPolicyDirectiveList::violatedDirectiveForUnsafeInlineStyleElement const):
        (WebCore::ContentSecurityPolicyDirectiveList::violatedDirectiveForUnsafeInlineStyleAttribute const):
        (WebCore::ContentSecurityPolicyDirectiveList::violatedDirectiveForScriptHash const):
        (WebCore::ContentSecurityPolicyDirectiveList::violatedDirectiveForStyleHash const):
        (WebCore::ContentSecurityPolicyDirectiveList::violatedDirectiveForScriptNonce const):
        (WebCore::ContentSecurityPolicyDirectiveList::violatedDirectiveForStyleNonce const):
        (WebCore::ContentSecurityPolicyDirectiveList::violatedDirectiveForChildContext const):
        (WebCore::ContentSecurityPolicyDirectiveList::violatedDirectiveForConnectSource const):
        (WebCore::ContentSecurityPolicyDirectiveList::violatedDirectiveForFont const):
        (WebCore::ContentSecurityPolicyDirectiveList::violatedDirectiveForFrame const):
        (WebCore::ContentSecurityPolicyDirectiveList::violatedDirectiveForImage const):
        (WebCore::ContentSecurityPolicyDirectiveList::violatedDirectiveForManifest const):
        (WebCore::ContentSecurityPolicyDirectiveList::violatedDirectiveForMedia const):
        (WebCore::ContentSecurityPolicyDirectiveList::violatedDirectiveForObjectSource const):
        (WebCore::ContentSecurityPolicyDirectiveList::violatedDirectiveForScript const):
        (WebCore::ContentSecurityPolicyDirectiveList::violatedDirectiveForStyle const):
        (WebCore::ContentSecurityPolicyDirectiveList::addDirective):
        (WebCore::ContentSecurityPolicyDirectiveList::strictDynamicIncluded):
        (WebCore::ContentSecurityPolicyDirectiveList::violatedDirectiveForUnsafeInlineScript const): Deleted.
        (WebCore::ContentSecurityPolicyDirectiveList::violatedDirectiveForUnsafeInlineStyle const): Deleted.
        * page/csp/ContentSecurityPolicyDirectiveList.h:
        * page/csp/ContentSecurityPolicyDirectiveNames.cpp:
        * page/csp/ContentSecurityPolicyDirectiveNames.h:
        * page/csp/ContentSecurityPolicySourceListDirective.h:
        (WebCore::ContentSecurityPolicySourceListDirective::setNameForReporting):

2021-10-15  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r276370): Elements with animated transform property might not properly rendered
        https://bugs.webkit.org/show_bug.cgi?id=230753

        Reviewed by Myles C. Maxfield.

        The change in r276370 was incorrect, resulting in the geometry map being used when
        an element had a transform and `transform-style: preserves-3d`.

        Fix by going back to testing for the presence of the various transform properties which
        affect geometry. hasTransformRelatedProperty() is still useful as a fast bit-check.

        Test: fast/repaint/transform-preserve-3d-repaint.html

        * rendering/RenderGeometryMap.cpp:
        (WebCore::canMapBetweenRenderersViaLayers):

2021-10-15  Tyler Wilcock  <tyler_w@apple.com>

        AX: role="math" elements are no longer considered to have presentational children
        https://bugs.webkit.org/show_bug.cgi?id=231756

        Reviewed by Chris Fleizach and Darin Adler.

        As of WAI-ARIA 1.2, role="math" elements are no longer considered to
        have presentational children.

        Test: accessibility/math-has-non-presentational-children.html

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::canHaveChildren const):
        Allow AccessibilityRole::DocumentMath elements to have children.

2021-10-15  Tyler Wilcock  <tyler_w@apple.com>

        AX: WebKit should not expose redundant AXGroups with missing role when the label is the same as the contents
        https://bugs.webkit.org/show_bug.cgi?id=169924

        Reviewed by Andres Gonzalez.

        Don't expose groups with redundant accessibility text on the Mac.
        Here's an example of one such group:

        <div aria-label="1">1</div>

        This group is not useful to accessibility clients. Instead, we
        expose the text contents directly.

        Test: accessibility/ignore-redundant-accessibility-text-groups.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::textUnderElement const):
        Instead of asserting when we try to get the text of an element in a
        document that needs a style update, return an empty string.

        * accessibility/mac/AccessibilityObjectMac.mm:
        (WebCore::shouldIgnoreGroup): Added.
        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject const):

2021-10-15  Tyler Wilcock  <tyler_w@apple.com>

        AX: Return AXEmptyGroup subrole for groups with no accessible content
        https://bugs.webkit.org/show_bug.cgi?id=231528

        Reviewed by Andres Gonzalez.

        Return a subrole of "AXEmptyGroup" for groups without any exposed
        children. WebKit can calculate this more efficiently than AX clients,
        so it makes more sense to do here.

        Test: accessibility/mac/empty-group-computation.html

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper subrole]):

2021-10-15  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Do not break the word-wrap: break-word content on inline box boundary
        https://bugs.webkit.org/show_bug.cgi?id=231761

        Reviewed by Antti Koivisto.

        When the text content is breakable at arbitrary position and it is not the overflowing content (the overflowing content is not breakable)
        we just return the text run as the trailing run as it surely fits e.g.

        <span style="word-wrap: break-word">this_content_is_breakable</span>and_this_content_overflows

        1. There's no soft wrapping opportunity between the two text runs (they form a continuous set)
        2. The trailing run overflow but can't be split
        we go backwards on the set to find a breakable one. In this case the first text run is breakable (see CSS property) and
        since we know it fits the line we just simply declare the end of the run as the breaking position.
        However we should try to keep the runs and their adjacent inline box boundary runs together and instead find the end of the </span> as
        the breaking position. It's mostly noticeable when the inline box has some visual decoration e.g. border.

        Test: fast/inline/wordbreak-at-inline-box-boundary.html

        * layout/formattingContexts/inline/InlineContentBreaker.cpp:
        (WebCore::Layout::InlineContentBreaker::tryBreakingTextRun const):
        (WebCore::Layout::InlineContentBreaker::tryBreakingPreviousNonOverflowingRuns const):

2021-10-15  Alexey Shvayka  <shvaikalesh@gmail.com>

        [WebIDL] JSDOMBuiltinConstructor instances should support subclassing
        https://bugs.webkit.org/show_bug.cgi?id=231689

        Reviewed by Youenn Fablet.

        This patch:

        1. Removes JSDOMObjectInspector and related conditional createJSObject() / callConstructor()
           overloads: they aren't necessary because code generator guarantees that built-in constructors
           are called only on JSDOMObjectInspector<JSClass>::isBuiltin objects.

        2. Implements proper subclassing [1] for built-in constructors, ensuring exception checking
           and rare cases are kept off the fast path. For simplicity and consistency with JSC built-ins
           and setSubclassStructureIfNeeded(), getFunctionRealm() is called before "prototype" lookup,
           which is non-observable.

        3. Further improves constructor's fast path by replacing slowish argument-copying
           callFunctionWithCurrentArguments() with ArgList(CallFrame*) constructor.

        [1] https://webidl.spec.whatwg.org/#internally-create-a-new-object-implementing-the-interface (step 3)

        Tests: imported/w3c/web-platform-tests/streams/queuing-strategies.any.js
               imported/w3c/web-platform-tests/streams/readable-streams/general.any.js
               imported/w3c/web-platform-tests/streams/transform-streams/general.any.js

        * bindings/js/JSDOMBuiltinConstructor.h:
        (WebCore::JSDOMBuiltinConstructor<JSClass>::getDOMStructureForJSObject):
        (WebCore::JSDOMBuiltinConstructor<JSClass>::construct):
        (WebCore::JSDOMBuiltinConstructor<JSClass>::callConstructor): Deleted.
        (WebCore::createJSObject): Deleted.
        * bindings/js/JSDOMBuiltinConstructorBase.cpp:
        (WebCore::JSDOMBuiltinConstructorBase::callFunctionWithCurrentArguments): Deleted.
        * bindings/js/JSDOMBuiltinConstructorBase.h:
        * bindings/js/JSDOMWrapper.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        (AddJSBuiltinIncludesIfNeeded):
        Removes [JSBuiltin] check because it's superseded by HasJSBuiltinConstructor helper.

        * bindings/scripts/IDLAttributes.json:
        Removes unused [JSBuiltinConstructor] extended attribute:
        [JSBuiltin] on constructor() or interface should be used instead.

2021-10-15  Michael Catanzaro  <mcatanzaro@gnome.org>

        [WPE][GTK] Update user agent browser versions
        https://bugs.webkit.org/show_bug.cgi?id=231772

        Reviewed by Carlos Garcia Campos.

        * platform/UserAgentQuirks.cpp:
        (WebCore::UserAgentQuirks::stringForQuirk):
        * platform/glib/UserAgentGLib.cpp:
        (WebCore::buildUserAgentString):

2021-10-15  Robin Morisset  <rmorisset@apple.com>

        Revert r284230, my last fixes to the watch build make it break tests
        https://bugs.webkit.org/show_bug.cgi?id=231797

        Unreviewed.

        Revert "Allow WASM to use up to 4GB"

        * Modules/webaudio/AudioBuffer.cpp:
        (WebCore::AudioBuffer::copyFromChannel):
        (WebCore::AudioBuffer::copyToChannel):
        * Modules/webaudio/RealtimeAnalyser.cpp:
        (WebCore::RealtimeAnalyser::getByteFrequencyData):
        (WebCore::RealtimeAnalyser::getFloatTimeDomainData):
        (WebCore::RealtimeAnalyser::getByteTimeDomainData):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::dumpArrayBufferView):
        (WebCore::CloneSerializer::dumpImageBitmap):
        (WebCore::CloneSerializer::dumpIfTerminal):
        (WebCore::CloneSerializer::write):
        (WebCore::CloneDeserializer::read):
        (WebCore::CloneDeserializer::readArrayBuffer):
        (WebCore::CloneDeserializer::readArrayBufferView):
        (WebCore::CloneDeserializer::readImageBitmap):
        (WebCore::CloneDeserializer::readArrayBufferImpl): Deleted.
        (WebCore::CloneDeserializer::readArrayBufferViewImpl): Deleted.
        * bindings/js/SerializedScriptValue.h:
        (WebCore::SerializedScriptValue::encode const):
        (WebCore::SerializedScriptValue::decode):
        * fileapi/NetworkSendQueue.cpp:
        (WebCore::NetworkSendQueue::enqueue):
        * platform/graphics/PixelBuffer.cpp:
        (WebCore::PixelBuffer::tryCreate):
        * platform/graphics/iso/ISOBox.h:

2021-10-14  Youenn Fablet  <youenn@apple.com>

        MediaCapabilities should enqueue a task to resolve promises
        https://bugs.webkit.org/show_bug.cgi?id=231569

        Reviewed by Eric Carlson.

        * Modules/mediacapabilities/MediaCapabilities.cpp:
        We should resolve promises inside an event loop task.
        To do this, instead of enqueuing a task to do some work that can be asynchronous, we do the asynchronous work and then enqueue a task to resolve the promise.

2021-10-14  Rob Buis  <rbuis@igalia.com>

        Fix grid-auto-repeat-dynamic-003.html
        https://bugs.webkit.org/show_bug.cgi?id=231592

        Reviewed by Alan Bujtas.

        Also call dirtyForLayoutFromPercentageHeightDescendants when laying out inline children, since
        they may have a percentage height dependency as well as grid-auto-repeat-dynamic-003.html shows.

        Test: imported/w3c/web-platform-tests/css/css-grid/grid-definition/grid-auto-repeat-dynamic-003.html

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::layoutBlock):
        (WebCore::RenderBlockFlow::layoutBlockChildren):

2021-10-14  Sihui Liu  <sihui_liu@apple.com>

        Add UNUSED_PARAM to WebSpeechRecognizerTaskMock.mm
        https://bugs.webkit.org/show_bug.cgi?id=231788

        Reviewed by Simon Fraser.

        * Modules/speech/cocoa/WebSpeechRecognizerTaskMock.mm:
        (-[WebSpeechRecognizerTaskMock initWithIdentifier:locale:doMultipleRecognitions:reportInterimResults:maxAlternatives:delegateCallback:]):
        (-[WebSpeechRecognizerTaskMock audioSamplesAvailable:]):

2021-10-14  Aditya Keerthi  <akeerthi@apple.com>

        [iOS] Support accent-color for controls without text
        https://bugs.webkit.org/show_bug.cgi?id=231762
        rdar://84261702

        Reviewed by Tim Horton.

        Add support for 'accent-color' on checkboxes, radio buttons,
        <input type=range>, <progress> elements, and the <datalist>
        indicator button.

        * rendering/RenderThemeIOS.h:
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::controlTintColor):
        (WebCore::RenderThemeIOS::checkboxRadioBackgroundColor):
        (WebCore::RenderThemeIOS::paintCheckbox):
        (WebCore::RenderThemeIOS::paintRadio):
        (WebCore::RenderThemeIOS::paintProgressBarWithFormControlRefresh):
        (WebCore::RenderThemeIOS::paintListButton):
        (WebCore::RenderThemeIOS::paintSliderTicks):
        (WebCore::RenderThemeIOS::paintSliderTrackWithFormControlRefresh):

2021-10-14  Robin Morisset  <rmorisset@apple.com>

        Allow WASM to use up to 4GB
        https://bugs.webkit.org/show_bug.cgi?id=229353
        rdar://81603447

        Reviewed by Yusuke Suzuki.

        Some parts of WebCore use TypedArrays, and would not build after I made the length() function on typed arrays return UCPURegister instead of uint32_t.
        Most fixes were trivial, the only exception is SerializedScriptValue.cpp, where I had to increment the version number, as ArrayBuffer (and ArrayBufferViews) now write/read their length in a 64-bit field (and same for the byteOffset of ArrayBufferView).

        I also had to add a test in PixelBuffer.cpp that the size of the ArrayBuffer it will try to allocate is < INT32_MAX.
        Otherwise, the test LayoutTests/fast/shapes/shape-outside-floats/shape-outside-imagedata-overflow.html which checks that very large images are properly rejected without crashing, would timeout.

        No new tests, as the code is already extensively covered by existing tests, and I implemented no new features.

        * Modules/webaudio/AudioBuffer.cpp:
        (WebCore::AudioBuffer::copyFromChannel):
        (WebCore::AudioBuffer::copyToChannel):
        * Modules/webaudio/RealtimeAnalyser.cpp:
        (WebCore::RealtimeAnalyser::getByteFrequencyData):
        (WebCore::RealtimeAnalyser::getFloatTimeDomainData):
        (WebCore::RealtimeAnalyser::getByteTimeDomainData):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::dumpArrayBufferView):
        (WebCore::CloneSerializer::dumpImageBitmap):
        (WebCore::CloneSerializer::dumpIfTerminal):
        (WebCore::CloneDeserializer::readArrayBufferImpl):
        (WebCore::CloneDeserializer::readArrayBuffer):
        (WebCore::CloneDeserializer::readArrayBufferViewImpl):
        (WebCore::CloneDeserializer::readArrayBufferView):
        * bindings/js/SerializedScriptValue.h:
        (WebCore::SerializedScriptValue::encode const):
        (WebCore::SerializedScriptValue::decode):
        * fileapi/NetworkSendQueue.cpp:
        (WebCore::NetworkSendQueue::enqueue):
        * platform/graphics/PixelBuffer.cpp:
        (WebCore::PixelBuffer::tryCreate):
        * platform/graphics/iso/ISOBox.h:

2021-10-14  Chris Dumez  <cdumez@apple.com>

        Service workers running on the main thread should use the main VM
        https://bugs.webkit.org/show_bug.cgi?id=231753

        Reviewed by Geoffrey Garen.

        ervice workers running on the main thread should use the main VM. This makes life easier for injected
        bundle clients and there is no strong reason to use a separate VM since VMs are mainly used for thread
        safety / isolation.

        No new tests, extended existing API test.

        * workers/WorkerOrWorkletGlobalScope.cpp:
        (WebCore::WorkerOrWorkletGlobalScope::isContextThread const):
        WorkerOrWorkletThread::thread() returns null when the service worker is running on the main thread.
        Update WorkerOrWorkletGlobalScope::isContextThread() to deal with that and properly treats the
        main thread as the context thread in this case.

        * workers/WorkerOrWorkletScriptController.cpp:
        (WebCore::WorkerOrWorkletScriptController::WorkerOrWorkletScriptController):
        (WebCore::WorkerOrWorkletScriptController::scheduleExecutionTermination):

2021-10-14  Aditya Keerthi  <akeerthi@apple.com>

        [iOS] Paint <datalist> indicator in RenderTheme
        https://bugs.webkit.org/show_bug.cgi?id=231755
        rdar://84261604

        Reviewed by Tim Horton.

        Currently, the <datalist> indicator is painted using the 'content'
        property and an SVG image. With the existing implementation, it is
        not possible to tint the indicator, when an accent-color is supplied.
        To support control tinting, and better align with the way other native
        controls are painted, move the painting into RenderTheme.

        Covered by existing tests.

        * css/html.css:
        (input::-webkit-list-button):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::paint):
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::paintListButton):
        * rendering/RenderThemeIOS.h:
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::isControlStyled const):

        Do not draw the native indicator if the style has content or the
        content has explicitly been set to none. This ensures we maintain
        compatibility for pages that still use 'content' to customize the
        indicator.

        (WebCore::RenderThemeIOS::paintListButton):

        Draw the indicator. The path is taken directly from the SVG.

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::RenderStyle):
        * rendering/style/RenderStyle.h:

        Add setHasExplicitlyClearedContent / hasExplicitlyClearedContent to
        detect whether the author has explicitly cleared content, in which
        case we do not paint the native indicator.

        (WebCore::RenderStyle::setHasExplicitlyClearedContent):
        (WebCore::RenderStyle::hasExplicitlyClearedContent const):
        (WebCore::RenderStyle::NonInheritedFlags::operator== const):
        * style/StyleBuilderCustom.h:
        (WebCore::Style::BuilderCustom::applyInitialContent):
        (WebCore::Style::BuilderCustom::applyValueContent):
        * style/StyleResolver.cpp:
        (WebCore::Style::elementTypeHasAppearanceFromUAStyle):

        Add the datalist button to the list of element types that have
        appearance from UA style, so that we can determine whether or not to
        drop native appearance.

2021-10-14  Kate Cheney  <katherine_cheney@apple.com>

        Adopt attribution AVCaptureSession SPI for GPU process
        https://bugs.webkit.org/show_bug.cgi?id=231621
        <rdar://problem/80748535>

        Reviewed by Eric Carlson.

        No new tests. Manually tested by checking App Privacy Report data.

        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/mediastream/RealtimeMediaSourceCenter.h:
        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::setupSession):

2021-10-14  Alex Christensen  <achristensen@webkit.org>

        Reduce memory use of AdAttributionDaemon
        https://bugs.webkit.org/show_bug.cgi?id=231523

        Reviewed by Brady Eidson.

        This makes a new library, libWebCoreStatic.a, which contains the pieces of WebCore that adattributiond needs.
        That way, adattributiond doesn't need to link to WebKit.framework, which greatly reduces its memory use and
        puts it below the jetsam threshold.

        * CMakeLists.txt:
        * Configurations/WebCore.xcconfig:
        * Sources.txt:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:

2021-10-14  Alex Christensen  <achristensen@webkit.org>

        Remove Variant.h
        https://bugs.webkit.org/show_bug.cgi?id=231744

        Reviewed by Darin Adler.

        * Modules/async-clipboard/ClipboardItemBindingsDataSource.h:
        * Modules/fetch/FetchBody.h:
        * Modules/fetch/FetchHeaders.h:
        * Modules/indexeddb/IDBCursor.h:
        * Modules/indexeddb/IDBGetAllResult.h:
        * Modules/indexeddb/IDBKey.h:
        * Modules/indexeddb/IDBKeyData.h:
        * Modules/indexeddb/IDBKeyPath.h:
        * Modules/indexeddb/IDBRequest.cpp:
        * Modules/mediacontrols/MediaControlsHost.cpp:
        * Modules/mediacontrols/MediaControlsHost.h:
        * Modules/mediastream/MediaTrackConstraints.h:
        * Modules/mediastream/RTCIceServer.h:
        * Modules/paymentrequest/PaymentMethodChangeEvent.h:
        * Modules/paymentrequest/PaymentRequest.h:
        * Modules/push-api/PushEventInit.h:
        * Modules/push-api/PushSubscription.h:
        * Modules/push-api/PushSubscriptionOptionsInit.h:
        * Modules/speech/SpeechRecognitionUpdate.h:
        * Modules/webaudio/AudioContextOptions.h:
        * Modules/webaudio/AudioNode.h:
        * Modules/webxr/WebXRWebGLLayer.h:
        * accessibility/AccessibilityObjectInterface.h:
        * accessibility/isolatedtree/AXIsolatedObject.h:
        * accessibility/mac/WebAccessibilityObjectWrapperBase.h:
        * animation/AnimationEffect.h:
        * animation/EffectTiming.h:
        * animation/OptionalEffectTiming.h:
        * bindings/IDLTypes.h:
        * bindings/js/BufferSource.h:
        * bindings/js/JSDOMConvertUnion.h:
        * bindings/js/JSValueInWrappedObject.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        (AddToIncludesForIDLType):
        * crypto/CryptoAlgorithm.h:
        * crypto/CryptoKey.h:
        * crypto/SubtleCrypto.h:
        * crypto/algorithms/CryptoAlgorithmAES_KW.cpp:
        * crypto/algorithms/CryptoAlgorithmHMAC.cpp:
        * crypto/algorithms/CryptoAlgorithmRSAES_PKCS1_v1_5.cpp:
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp:
        * crypto/algorithms/CryptoAlgorithmRSA_OAEP.cpp:
        * crypto/algorithms/CryptoAlgorithmRSA_PSS.cpp:
        * crypto/parameters/CryptoAlgorithmEcdsaParams.h:
        * crypto/parameters/CryptoAlgorithmHmacKeyParams.h:
        * crypto/parameters/CryptoAlgorithmRsaHashedImportParams.h:
        * crypto/parameters/CryptoAlgorithmRsaHashedKeyGenParams.h:
        * css/CSSCustomPropertyValue.h:
        * css/CSSFontFaceSet.h:
        * css/CSSStyleDeclaration.cpp:
        * css/DOMMatrixReadOnly.h:
        * css/FontFace.h:
        * css/StyleRule.h:
        * css/parser/CSSPropertyParserHelpers.h:
        * css/typedom/CSSNumericValue.h:
        * css/typedom/CSSUnparsedValue.cpp:
        * css/typedom/CSSUnparsedValue.h:
        * dom/ContainerNode.cpp:
        * dom/DocumentMarker.h:
        * dom/EventTarget.h:
        * dom/MessageEvent.h:
        * dom/Node.cpp:
        * editing/AlternativeTextController.h:
        * fileapi/Blob.h:
        * fileapi/NetworkSendQueue.h:
        * html/DOMFormData.h:
        * html/HTMLAllCollection.cpp:
        * html/ImageBitmap.cpp:
        * html/URLSearchParams.h:
        * html/canvas/CanvasStyle.h:
        * inspector/InspectorCanvas.cpp:
        * inspector/InspectorCanvas.h:
        * inspector/InspectorCanvasCallTracer.cpp:
        * inspector/InspectorShaderProgram.cpp:
        * inspector/InspectorShaderProgram.h:
        * inspector/agents/InspectorCanvasAgent.cpp:
        * layout/integration/InlineIteratorBox.h:
        * layout/integration/InlineIteratorLine.h:
        * page/DOMWindow.cpp:
        * page/DiagnosticLoggingClient.h:
        * page/IntersectionObserver.h:
        * page/Performance.h:
        * page/PerformanceMeasureOptions.h:
        * page/scrolling/ScrollingCoordinator.h:
        * platform/PasteboardCustomData.h:
        * platform/SharedBuffer.h:
        * platform/audio/AudioStreamDescription.h:
        * platform/generic/KeyedDecoderGeneric.cpp:
        * platform/graphics/DecodingOptions.h:
        * platform/graphics/FontCascadeDescription.h:
        * platform/graphics/FontPalette.h:
        * platform/graphics/FontPaletteValues.h:
        * platform/graphics/Gradient.h:
        * platform/graphics/InlinePathData.h:
        * platform/graphics/cocoa/SourceBufferParser.h:
        * platform/graphics/cocoa/SourceBufferParserWebM.h:
        * platform/graphics/displaylists/DisplayListItems.h:
        * platform/graphics/texmap/TextureMapperPlatformLayerBuffer.h:
        * platform/network/DNS.h:
        * platform/network/FormData.h:
        * platform/network/curl/CurlSSLHandle.h:
        * platform/sql/SQLValue.h:
        * platform/sql/SQLiteStatement.cpp:
        * platform/xr/PlatformXR.h:
        * testing/TypeConversions.h:
        * workers/service/ExtendableMessageEvent.h:
        * workers/service/ServiceWorkerTypes.h:
        * xml/XMLHttpRequest.h:

2021-10-14  Aditya Keerthi  <akeerthi@apple.com>

        CSSProperties.json should not require a 'converter' for color properties
        https://bugs.webkit.org/show_bug.cgi?id=231376

        Reviewed by Antti Koivisto.

        r283742 used StyleBuilderCustom to implement 'accent-color' as
        specifying 'auto-functions' and 'color-property' resulted in an
        incorrect value setter.

        Upon further investigation, specifying 'converter: SVGColor'
        solved the issue, as the CSSPrimitiveValue was then correctly
        converted into a Color.

        Rather than renaming the converter for use with non-SVG color
        properties, this patch removes the existing color converter entirely,
        as the need for color conversion can be inferred from the existence
        of 'color-property'.

        * css/CSSProperties.json:

        Remove now unecessary 'converter', and use 'auto-functions' for
        'accent-color' rather than 'custom'.

        * css/makeprop.pl:
        (generateValueSetter):

        Perform Color conversion from CSSPrimitiveValue if 'color-property'
        is specified.

        * style/StyleBuilderConverter.h:
        (WebCore::Style::BuilderConverter::convertSVGColor): Deleted.
        * style/StyleBuilderCustom.h:
        (WebCore::Style::BuilderCustom::applyInitialAccentColor): Deleted.
        (WebCore::Style::BuilderCustom::applyInheritAccentColor): Deleted.
        (WebCore::Style::BuilderCustom::applyValueAccentColor): Deleted.

2021-10-14  Antoine Quint  <graouts@webkit.org>

        Remove DocumentTimeline::isRunningAnimationOnRenderer()
        https://bugs.webkit.org/show_bug.cgi?id=231759

        Reviewed by Darin Adler.

        This function has no call site.

        * animation/DocumentTimeline.cpp:
        (WebCore::DocumentTimeline::isRunningAnimationOnRenderer const): Deleted.
        * animation/DocumentTimeline.h:

2021-10-14  Per Arne Vollan  <pvollan@apple.com>

        [AppleWin] Controls are not being rendered
        https://bugs.webkit.org/show_bug.cgi?id=231769
        <rdar://problem/83670287>

        Reviewed by Fujii Hironori.

        Controls are not being rendered because the LocalWindowsContext destructor is no longer blitting the bitmap contents to the hdc.
        The test in GraphicsContext::getWindowsContext needs to match the test in GraphicsContext::releaseWindowsContext.

        * platform/graphics/win/GraphicsContextWin.cpp:
        (WebCore::GraphicsContext::getWindowsContext):

2021-10-14  Antti Koivisto  <antti@apple.com>

        [LFC][Integration] Enable inline boxes with background
        https://bugs.webkit.org/show_bug.cgi?id=231556

        Reviewed by Alan Bujtas.

        We can now paint them.

        * layout/integration/LayoutIntegrationCoverage.cpp:
        (WebCore::LayoutIntegration::printReason):
        (WebCore::LayoutIntegration::canUseForRenderInlineChild):
        * layout/integration/LayoutIntegrationCoverage.h:

2021-10-14  Myles C. Maxfield  <mmaxfield@apple.com>

        All the SDKVariant.xcconfig files should match
        https://bugs.webkit.org/show_bug.cgi?id=231663

        Reviewed by Youenn Fablet.

        No new tests because there was no behavior change.

        * Configurations/SDKVariant.xcconfig:

2021-10-14  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] tryBreakingTextRun should not take std::nullopt "available width" to indicate that the run is not overflowing
        https://bugs.webkit.org/show_bug.cgi?id=231743

        Reviewed by Antti Koivisto.

        Let's not use magic value to indicate that the candidate run for breaking does not overflow the line (available width is nullopt -> infinite available width -> never overflow).

        * layout/formattingContexts/inline/InlineContentBreaker.cpp:
        (WebCore::Layout::InlineContentBreaker::tryBreakingTextRun const):
        (WebCore::Layout::InlineContentBreaker::tryBreakingOverflowingRun const):
        (WebCore::Layout::InlineContentBreaker::tryBreakingPreviousNonOverflowingRuns const):
        (WebCore::Layout::InlineContentBreaker::tryBreakingNextOverflowingRuns const):
        * layout/formattingContexts/inline/InlineContentBreaker.h:
        * layout/integration/LayoutIntegrationCoverage.cpp:
        (WebCore::LayoutIntegration::canUseForRenderInlineChild):

2021-10-14  Antti Koivisto  <antti@apple.com>

        [CSS Cascade Layers] Layer should have higher priority than its descendant layers
        https://bugs.webkit.org/show_bug.cgi?id=231725

        Reviewed by Simon Fraser.

        The spec was updated in https://github.com/w3c/csswg-drafts/commit/a6fc16e1b65868c6f984918cc76ad9b238e7139e

        "Cascade layers are sorted by the order in which they first are declared, with nested layers grouped
        within their parent layers before any unlayered rules."

        * style/RuleSetBuilder.cpp:
        (WebCore::Style::RuleSetBuilder::updateCascadeLayerPriorities):

        Change the sorting order so parents sort after their children.
        
        * style/RuleSetBuilder.h:

2021-10-14  Tim Horton  <timothy_horton@apple.com>

        Further adjust style of alternate form control design
        https://bugs.webkit.org/show_bug.cgi?id=231723
        <rdar://84227020>

        Reviewed by Dean Jackson.

        * css/parser/CSSParserContext.cpp:
        (WebCore::CSSParserContext::CSSParserContext):
        Enable some features used in the new stylesheet. Eventually we should
        make a bare WebCore::Settings (with the WebCore-level defaults) and
        initialize everything that comes from Settings from there.

        * rendering/RenderThemeIOS.h:
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::adjustStyleForAlternateFormControlDesignTransition const):
        (WebCore::RenderThemeIOS::adjustCheckboxStyle const):
        (WebCore::RenderThemeIOS::adjustRadioStyle const):
        (WebCore::RenderThemeIOS::adjustMenuListButtonStyle const):
        (WebCore::RenderThemeIOS::adjustButtonStyle const):
        (WebCore::RenderThemeIOS::adjustColorWellStyle const):
        Adjust the style to use an optimized mode when a transform transition is
        underway, or the element is hovered. This currently affects all transform
        transitions on these controls, but should be adjusted to only affect
        ones installed by the UA style sheet.

        * style/InspectorCSSOMWrappers.cpp:
        (WebCore::Style::InspectorCSSOMWrappers::collectDocumentWrappers):
        I failed to add the new sheet to the Web Inspector in r284008; do so now.

2021-10-14  Tim Nguyen  <ntim@apple.com>

        Don't run focusing steps on disconnected or inert <dialog>
        https://bugs.webkit.org/show_bug.cgi?id=231721

        Reviewed by Antti Koivisto.

        Marked relevant WPTs as passing.

        * html/HTMLDialogElement.cpp:
        (WebCore::HTMLDialogElement::runFocusingSteps):

2021-10-14  Alexey Shvayka  <shvaikalesh@gmail.com>

        AudioContext::getOutputTimestamp() uses incorrect global object as a high-res timestamp origin
        https://bugs.webkit.org/show_bug.cgi?id=230138

        Reviewed by Chris Dumez.

        Although the spec [1] does not explicitly mention which global object to use, there is
        a recommendation for web spec authors to use _relevant_ [2], unlike ECMA standards.

        This patch fixes getOutputTimestamp() to use AudioContext's global object to compute
        `performanceTime`. Aligns WebKit with Blink and Gecko in case of cross-realm method call.

        [1] https://webaudio.github.io/web-audio-api/#dom-audiocontext-getoutputtimestamp
        [2] https://html.spec.whatwg.org/multipage/webappapis.html#concept-current-everything

        Test: imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-getoutputtimestamp-cross-realm.html

        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::getOutputTimestamp):
        * Modules/webaudio/AudioContext.h:
        * Modules/webaudio/AudioContext.idl:

2021-10-14  Aditya Keerthi  <akeerthi@apple.com>

        REGRESSION (r283858): Intense white hover state appears on playback controls on Netflix/YouTube
        https://bugs.webkit.org/show_bug.cgi?id=231719
        rdar://84213404

        Reviewed by Tim Horton.

        The playback controls on Netflix/YouTube are buttons that have a
        non-'none' appearance value, but a used value of 'none' due to author
        styles. In WebKit, and other engines, setting a background or text
        color different from the UA style makes the used value 'none' and
        drops native appearance.

        The used value (effectiveAppearance) is set to none by comparing the
        element's style to the UA style in RenderTheme::adjustStyle. However, when
        style is adjusted during animation, the UA style is not passed in to the
        method (see r273003). Consequently, we are unable to compare styles and
        end up setting the 'effectiveAppearance' to 'appearance' (the computed value)
        after r283858. Since the 'appearance' is not 'none', a native button is
        briefly displayed during a hover animation, resulting in a white flash.

        This was not an issue before r283858, as that change added logic to
        always update the effectiveAppearance in RenderTheme::adjustStyle.
        Before the change, the effectiveAppearance would simply be carried over
        from the style before animation, and would remain 'none'.

        To fix, only update the effectiveAppearance if its current value is
        incorrect (auto, or styled). Additionally, use effectiveAppearance
        more consistently, to ensure we do not incorrectly treat
        style.appearance() as the used value.

        Test: fast/forms/button-animation-appearance.html

        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::adjustStyle):

2021-10-14  Yusuke Suzuki  <ysuzuki@apple.com>

        Remove std::iterator usage
        https://bugs.webkit.org/show_bug.cgi?id=231728

        Reviewed by Keith Miller.

        * dom/ElementIterator.h:
        * dom/SimpleRange.h:
        * platform/Timer.cpp:
        (WebCore::TimerBase::heapDecreaseKey):
        (WebCore::TimerBase::heapPopMin):
        (WebCore::TimerBase::heapDeleteNullMin):

2021-10-14  Simon Fraser  <simon.fraser@apple.com>

        Move KeyboardScroll into platform code
        https://bugs.webkit.org/show_bug.cgi?id=231712

        Reviewed by Beth Dakin.

        KeyboardScroll is used by platform/KeyboardScrollingAnimator.*, and itself only uses
        platform types, so it can also be in platform. This fixes a layering violation.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/KeyboardScroll.cpp: Renamed from Source/WebCore/page/KeyboardScroll.cpp.
        * platform/KeyboardScroll.h: Renamed from Source/WebCore/page/KeyboardScroll.h.

2021-10-14  David Kilzer  <ddkilzer@apple.com>

        WebCore::CaptionUserPreferencesMediaAF should use a weak observer with CFNotificationCenter
        <https://webkit.org/b/231550>
        <rdar://problem/84129338>

        Reviewed by Darin Adler.

        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        - Add CaptionUserPreferencesMediaAF.mm.

        * page/CaptionUserPreferences.cpp:
        (WebCore::CaptionUserPreferences::create): Add.
        * page/CaptionUserPreferences.h:
        (WebCore::CaptionUserPreferences):
        - Make subclass of RefCounted<> and CanMakeWeakPtr<>.
        (WebCore::CaptionUserPreferences::create): Add.
        (WebCore::CaptionUserPreferences::CaptionUserPreferences):
        - Move constructor to protected visiblity with explicit keyword,
          and add static create() method.

        * page/CaptionUserPreferencesMediaAF.cpp:
        (WebCore::userCaptionPreferencesChangedNotificationCallback):
        - Update to use extractCaptionUserPreferencesMediaAF() for
          Cococa platforms.  Note that -> is used for two different
          `userPreferences` variable types based on the platform.
        (WebCore::CaptionUserPreferencesMediaAF::create): Add.
        (WebCore::CaptionUserPreferencesMediaAF::CaptionUserPreferencesMediaAF):
        - Move initialization of m_listeningForPreferenceChanges to
          class definition.
        (WebCore::CaptionUserPreferencesMediaAF::~CaptionUserPreferencesMediaAF):
        - Update to use m_weakObserver as observer for Cocoa platforms.
        (WebCore::CaptionUserPreferencesMediaAF::setInterestedInCaptionPreferenceChanges):
        - Update to use m_weakObserver as observer and
          _CFNotificationObserverIsObjC in suspension behavior for Cocoa
          platforms.

        * page/CaptionUserPreferencesMediaAF.h:
        (WebCore::CaptionUserPreferencesMediaAF::create): Add.
        (WebCore::CaptionUserPreferencesMediaAF::CaptionUserPreferencesMediaAF):
        - Move constructor to private visiblity, and add static create()
          method.
        (WebCore::CaptionUserPreferencesMediaAF::extractCaptionUserPreferencesMediaAF): Add.
        (WebCore::CaptionUserPreferencesMediaAF::createWeakObserver): Add.
        (WebCore::CaptionUserPreferencesMediaAF::m_weakObserver):
        - Add m_weakObserver instance variable for use with
          CFNotificationCenter.
        (WebCore::CaptionUserPreferencesMediaAF::m_listeningForPreferenceChanges):
        - Move initialization of m_listeningForPreferenceChanges here
          from the constructor.

        * page/cocoa/CaptionUserPreferencesMediaAFCocoa.mm: Add.
        (-[WebCaptionUserPreferencesMediaAFWeakObserver initWithWeakPtr:]):
        (-[WebCaptionUserPreferencesMediaAFWeakObserver userPreferences]):
        - Declare and implement
          WebCaptionUserPreferencesMediaAFWeakObserver class for use as
          a weak CFNotificationCenter observer.
        (WebCore::CaptionUserPreferencesMediaAF::createWeakObserver): Add.
        - Helper method to call from C++ that creates weak observer
          object from Objective-C++.
        (WebCore::CaptionUserPreferencesMediaAF::extractCaptionUserPreferencesMediaAF): Add.
        - Helper method to extract RefPtr<CaptionUserPreferencesMediaAF>
          from CFNotification observer parameter.

        * page/PageGroup.cpp:
        (WebCore::PageGroup::ensureCaptionPreferences):
        - Switch to using new create() methods.

        * page/PageGroup.h:
        (WebCore::PageGroup::m_captionPreferences):
        - Change from std::unique_ptr<> to RefPtr<>.

2021-10-14  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Apply the line-gap font metrics when computing the layout bounds for inline boxes
        https://bugs.webkit.org/show_bug.cgi?id=231699

        Reviewed by Antti Koivisto.

        As per https://www.w3.org/TR/css-inline-3/#inline-height 
        "If line-height computes to normal and either text-edge is leading or this is the root inline box, the font's
        line gap metric may also be incorporated into A and D by adding half to each side as half-leading."
        We don't have text-edge implemented yet and since the its initial value is 'leading', the line-gap adjustment should be applied to
        both the root and the non-root inline boxes unconditionally.

        Test: fast/inline/fallback-font-with-line-spacing.html

        * layout/formattingContexts/inline/InlineLineBoxBuilder.cpp:
        (WebCore::Layout::LineBoxBuilder::adjustVerticalGeometryForInlineBoxWithFallbackFonts const):

2021-10-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Move getCurrentExecutablePath() and getCurrentExecutableName() to FileSystem
        https://bugs.webkit.org/show_bug.cgi?id=231732

        Reviewed by Michael Catanzaro.

        * platform/graphics/gstreamer/GStreamerCommon.cpp:
        (WebCore::ensureGStreamerInitialized):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        * platform/graphics/gstreamer/mse/AppendPipeline.cpp:
        * platform/text/hyphen/HyphenationLibHyphen.cpp:
        (WebCore::topLevelPath):

2021-10-14  Rob Buis  <rbuis@igalia.com>

        Refactor RenderSVGBlock
        https://bugs.webkit.org/show_bug.cgi?id=231477

        Reviewed by Manuel Rego Casasnovas.

        Refactor common code from RenderSVGBlock subclasses into RenderSVGBlock.

        * rendering/svg/RenderSVGBlock.cpp:
        (WebCore::RenderSVGBlock::clippedOverflowRect const):
        (WebCore::RenderSVGBlock::computeVisibleRectInContainer const):
        (WebCore::RenderSVGBlock::computeFloatVisibleRectInContainer const):
        (WebCore::RenderSVGBlock::mapLocalToContainer const):
        (WebCore::RenderSVGBlock::pushMappingToContainer const):
        (WebCore::RenderSVGBlock::nodeAtPoint):
        * rendering/svg/RenderSVGBlock.h:
        * rendering/svg/RenderSVGForeignObject.cpp:
        (WebCore::RenderSVGForeignObject::clippedOverflowRect const): Deleted.
        (WebCore::RenderSVGForeignObject::computeFloatVisibleRectInContainer const): Deleted.
        (WebCore::RenderSVGForeignObject::computeVisibleRectInContainer const): Deleted.
        (WebCore::RenderSVGForeignObject::nodeAtPoint): Deleted.
        (WebCore::RenderSVGForeignObject::mapLocalToContainer const): Deleted.
        (WebCore::RenderSVGForeignObject::pushMappingToContainer const): Deleted.
        * rendering/svg/RenderSVGForeignObject.h:
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::clippedOverflowRect const): Deleted.
        (WebCore::RenderSVGText::computeVisibleRectInContainer const): Deleted.
        (WebCore::RenderSVGText::computeFloatVisibleRectInContainer const): Deleted.
        (WebCore::RenderSVGText::mapLocalToContainer const): Deleted.
        (WebCore::RenderSVGText::pushMappingToContainer const): Deleted.
        (WebCore::RenderSVGText::nodeAtPoint): Deleted.
        * rendering/svg/RenderSVGText.h:

2021-10-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Bump GLib version to 2.58.3
        https://bugs.webkit.org/show_bug.cgi?id=231726

        Reviewed by Philippe Normand.

        Use g_enum_to_string().

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::updateBufferingStatus):

2021-10-14  Tim Nguyen  <ntim@apple.com>

        Remove useless isConnected() check from HTMLDialogElement::close()
        https://bugs.webkit.org/show_bug.cgi?id=231722

        Reviewed by Antti Koivisto.

        No behavior change.

        Element::focus() already early returns if the element is disconnected, so it is redundant.

        * html/HTMLDialogElement.cpp:
        (WebCore::HTMLDialogElement::close):

2021-10-13  Rob Buis  <rbuis@igalia.com>

        Determine viewport distances for lazy image loading
        https://bugs.webkit.org/show_bug.cgi?id=203557

        Reviewed by Simon Fraser.

        Determine appropriate lazy image loading viewport distances
        for desktop and mobile devices by using a lazy load distance
        of one viewport in all directions.

        * html/LazyLoadImageObserver.cpp:
        (WebCore::LazyLoadImageObserver::intersectionObserver):

2021-10-13  Jean-Yves Avenard  <jya@apple.com>

        Compilation error: error: definition of implicit copy assignment operator in AppHighlightRangeData.h
        https://bugs.webkit.org/show_bug.cgi?id=231717
        rdar://problem/84230745

        Reviewed by Tim Horton.

        Per C++11 and later:
        “The generation of the implicitly-defined copy assignment operator is
        deprecated if T has a user-declared destructor or user-declared copy
        constructor.”
        A copy constructor is defined, so we need to declare a copy assignement operator.

        * Modules/highlight/AppHighlightRangeData.h: Add copy assignment operator.

2021-10-13  Simon Fraser  <simon.fraser@apple.com>

        Use PlatformKeyboardEvent in KeyboardScrollingAnimator to fix a layering violation
        https://bugs.webkit.org/show_bug.cgi?id=231711

        Reviewed by Beth Dakin.

        KeyboardScrollingAnimator lives in platform/ so should not know about dom/KeyboardEvent.
        Have it use PlatformKeyboardEvent instead.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::stopKeyboardScrolling):
        (WebCore::EventHandler::startKeyboardScrolling): Null check the view. Use the platform event.
        * platform/KeyboardScrollingAnimator.cpp:
        (WebCore::keyboardScrollingKeyFromEvent):
        (WebCore::KeyboardScrollingAnimator::keyboardScrollForKeyboardEvent const):
        (WebCore::KeyboardScrollingAnimator::beginKeyboardScrollGesture):
        * platform/KeyboardScrollingAnimator.h:

2021-10-13  Megan Gardner  <megan_gardner@apple.com>

        Scroll To Text Fragment directive parsing
        https://bugs.webkit.org/show_bug.cgi?id=231410

        Reviewed by Chris Dumez.

        Text directive parsing for 
        https://wicg.github.io/scroll-to-text-fragment/
 
        Make a new class to handle the parsing of the text directive.
        The parsing is defined in the linked spec. 
        The directive should be stored on Document and in a future
        patch the matching algorithm will find the text and scroll
        and highlight it.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.h:
        (WebCore::Document::setFragmentDirective):
        (WebCore::Document::fragmentDirective const):
        * dom/FragmentDirectiveParser.cpp: Added.
        (WebCore::FragmentDirectiveParser::create):
        (WebCore::FragmentDirectiveParser::FragmentDirectiveParser):
        (WebCore::FragmentDirectiveParser::parseFragmentDirective):
        * dom/FragmentDirectiveParser.h: Added.
        (WebCore::FragmentDirectiveParser::parsedTextDirectives):
        (WebCore::FragmentDirectiveParser::fragmentDirective):
        (WebCore::FragmentDirectiveParser::urlFragment):
        (WebCore::FragmentDirectiveParser::isValid):
        * page/FrameView.cpp:
        (WebCore::FrameView::scrollToFragment):
        * platform/Logging.h:

2021-10-13  Chris Dumez  <cdumez@apple.com>

        Drop makeWeakPtr() and use WeakPtr { } directly
        https://bugs.webkit.org/show_bug.cgi?id=231679

        Reviewed by Darin Adler.

        * Modules/filesystemaccess/FileSystemSyncAccessHandle.cpp:
        (WebCore::FileSystemSyncAccessHandle::truncate):
        (WebCore::FileSystemSyncAccessHandle::getSize):
        (WebCore::FileSystemSyncAccessHandle::flush):
        (WebCore::FileSystemSyncAccessHandle::close):
        * dom/Element.cpp:
        (WebCore::Element::addShadowRoot):

2021-10-13  Gabriel Nava Marino  <gnavamarino@apple.com>

        ASSERT hit in surrogatePairAwareIndex and surrogatePairAwareStart lambdas for text with unpaired surrogates.
        https://bugs.webkit.org/show_bug.cgi?id=231606

        Reviewed by Darin Adler and Myles C. Maxfield.

        * layout/formattingContexts/inline/text/TextUtil.cpp:
        (WebCore::Layout::TextUtil::midWordBreak):
        Account for unpaired surrogates in TextUtil::MidWordBreak TextUtil::midWordBreak

2021-10-13  Megan Gardner  <megan_gardner@apple.com>

        Remove adjustForIOSCaretWhenScrolling() code
        https://bugs.webkit.org/show_bug.cgi?id=230454

        Reviewed by Simon Fraser.

        The "adjustForIOSCaretWhenScrolling" code attempted to over-scroll horizontally at the start
        or end of an overflow scroll in order to make space for the caret to show. However, it was
        wrong in various ways. It always did this, even for scrollers with no visible caret. It was
        web-detectable that the scrollX for a scroller could end up as -2. And removing the code
        doesn't result in obviously incorrect behavior.

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::revealSelection):
        * rendering/RenderLayerScrollableArea.cpp:
        (WebCore::RenderLayerScrollableArea::scrollTo):
        (WebCore::RenderLayerScrollableArea::updateScrollInfoAfterLayout):
        * rendering/RenderLayerScrollableArea.h:

2021-10-13  Simon Fraser  <simon.fraser@apple.com>

        Use a ScrollAnimation for rubber-banding
        https://bugs.webkit.org/show_bug.cgi?id=231695

        Reviewed by Tim Horton.

        The animation that runs when rubber-banding (when you momentum-scroll into an edge,
        or stretch and release) was code in updateRubberBandAnimatingState(). Repackage
        that code as a ScrollAnimation subclass, which allows it to share code with other
        types of scroll animation.

        ScrollAnimationRubberBand needs to do non-clamped scrolls, so add a way for ScrollAnimations
        to state that they allow this.
        
        Standardize the capitalization of RubberBand.

        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::scrollTo):
        * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.h:
        * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.mm:
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::willDoProgrammaticScroll):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::didStopRubberBandAnimation):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::didStopRubberbandSnapAnimation): Deleted.
        * platform/ScrollAnimation.cpp:
        (WebCore::operator<<):
        * platform/ScrollAnimation.h:
        (WebCore::ScrollAnimation::clamping const):
        * platform/ScrollingEffectsController.cpp:
        (WebCore::ScrollingEffectsController::startMomentumScrollWithInitialVelocity): Need to be sure
        to stop() any existing animation.
        (WebCore::ScrollingEffectsController::scrollAnimationDidUpdate):
        (WebCore::ScrollingEffectsController::scrollAnimationWillStart):
        (WebCore::ScrollingEffectsController::scrollAnimationDidEnd):
        * platform/ScrollingEffectsController.h:
        (WebCore::ScrollingEffectsControllerClient::willStartRubberBandAnimation):
        (WebCore::ScrollingEffectsControllerClient::didStopRubberBandAnimation):
        (WebCore::ScrollingEffectsControllerClient::willStartRubberBandSnapAnimation): Deleted.
        (WebCore::ScrollingEffectsControllerClient::didStopRubberbandSnapAnimation): Deleted.
        * platform/mac/ScrollAnimationRubberBand.h: Added.
        * platform/mac/ScrollAnimationRubberBand.mm: Added.
        (elasticDeltaForTimeDelta):
        (WebCore::roundTowardZero):
        (WebCore::roundToDevicePixelTowardZero):
        (WebCore::ScrollAnimationRubberBand::ScrollAnimationRubberBand):
        (WebCore::ScrollAnimationRubberBand::startRubberBandAnimation):
        (WebCore::ScrollAnimationRubberBand::retargetActiveAnimation):
        (WebCore::ScrollAnimationRubberBand::updateScrollExtents):
        (WebCore::ScrollAnimationRubberBand::serviceAnimation):
        * platform/mac/ScrollingEffectsController.mm:
        (WebCore::ScrollingEffectsController::handleWheelEvent):
        (WebCore::ScrollingEffectsController::updateRubberBandAnimatingState):
        (WebCore::ScrollingEffectsController::stopRubberBanding):
        (WebCore::ScrollingEffectsController::startRubberBandAnimation):
        (WebCore::ScrollingEffectsController::stopRubberBandAnimation):
        (WebCore::ScrollingEffectsController::willStartRubberBandAnimation):
        (WebCore::ScrollingEffectsController::didStopRubberBandAnimation):
        (WebCore::ScrollingEffectsController::startRubberBandAnimationIfNecessary):
        (WebCore::elasticDeltaForTimeDelta): Deleted.
        (WebCore::roundTowardZero): Deleted.
        (WebCore::roundToDevicePixelTowardZero): Deleted.
        (WebCore::ScrollingEffectsController::stopRubberbanding): Deleted.
        (WebCore::ScrollingEffectsController::startRubberbandAnimation): Deleted.
        (WebCore::ScrollingEffectsController::stopRubberbandAnimation): Deleted.
        (WebCore::ScrollingEffectsController::startRubberbandAnimationIfNecessary): Deleted.

2021-10-13  Jean-Yves Avenard  <jya@apple.com>

        Clearly distinguish serial from concurrent WorkQueue
        https://bugs.webkit.org/show_bug.cgi?id=231418
        rdar://problem/84021977

        Reviewed by Chris Dumez.

        Replace instances of WorkQueue being constructed as a concurrent one
        with ConcurrentWorkQueue.
        Remove the now unnecessary use of WorkQueue::Type::Serial in constructor.

        Fly-by fix: make use of NeverDestroyed in some methods.

        No change in observable behaviour.

        * platform/graphics/ImageSource.cpp:
        (WebCore::ImageSource::decodingQueue):
        * platform/graphics/filters/FEConvolveMatrix.cpp:
        (WebCore::FEConvolveMatrix::platformApplySoftware):
        * platform/mediastream/libwebrtc/LibWebRTCAudioModule.cpp:
        (WebCore::LibWebRTCAudioModule::LibWebRTCAudioModule):
        * platform/mediastream/mac/MockRealtimeVideoSourceMac.mm:
        (WebCore::MockRealtimeVideoSourceMac::MockRealtimeVideoSourceMac):
        * platform/network/BlobRegistryImpl.cpp:
        (WebCore::blobUtilityQueue):
        * platform/network/DataURLDecoder.cpp:
        (WebCore::DataURLDecoder::decodeQueue):
        * storage/StorageQuotaManager.cpp:
        (WebCore::StorageQuotaManager::StorageQuotaManager):
        * workers/service/server/RegistrationDatabase.cpp:
        (WebCore::registrationDatabaseWorkQueue):

2021-10-13  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Preserved tab is not a word separator
        https://bugs.webkit.org/show_bug.cgi?id=231687

        Reviewed by Antti Koivisto.

        The 'tab' character is not considered a word separator in the word-spacing sense. When the preserved whitespace sequence
        has the mix of word separators (regular space) and non-separators, we use incorrect 'x' position to compute the width of the 'tab' character (tab width is position sensitive).
        This patch fixes it by splitting the whitespace sequence at word-separator boundary (e.g [space][space][tab] will produce 2 individual InlineTextItems [space][space] and [tab]). 

        Test: fast/text/preserved-white-space-with-word-spacing.html

        * layout/formattingContexts/inline/InlineLineBuilder.cpp:
        (WebCore::Layout::LineBuilder::candidateContentForLine):
        * layout/formattingContexts/inline/InlineTextItem.cpp:
        (WebCore::Layout::moveToNextNonWhitespacePosition):
        (WebCore::Layout::InlineTextItem::createAndAppendTextItems):

2021-10-13  Sihui Liu  <sihui_liu@apple.com>

        Implement FileSystemHandle move()
        https://bugs.webkit.org/show_bug.cgi?id=231676
        <rdar://problem/84199823>

        Reviewed by Youenn Fablet.

        Provide a way to move an existing file to a new place in Origin Private File System.

        Tests: storage/filesystemaccess/handle-move-worker.html
               storage/filesystemaccess/handle-move.html

        * Modules/filesystemaccess/FileSystemHandle.cpp:
        (WebCore::FileSystemHandle::move):
        * Modules/filesystemaccess/FileSystemHandle.h:
        * Modules/filesystemaccess/FileSystemHandle.idl:
        * Modules/filesystemaccess/FileSystemStorageConnection.h:
        * Modules/filesystemaccess/WorkerFileSystemStorageConnection.cpp:
        (WebCore::WorkerFileSystemStorageConnection::move):
        * Modules/filesystemaccess/WorkerFileSystemStorageConnection.h:

2021-10-13  Gabriel Nava Marino  <gnavamarino@apple.com>

        Skip fallbackFontsForRunWithIterator for empty runs
        https://bugs.webkit.org/show_bug.cgi?id=231542

        Reviewed by Alan Bujtas.

        * layout/formattingContexts/inline/text/TextUtil.cpp:
        (WebCore::Layout::TextUtil::fallbackFontsForRun):

2021-10-13  Tim Nguyen  <ntim@apple.com>

        Remove unused ElementTraversal.h include from HTMLDialogElement.cpp
        https://bugs.webkit.org/show_bug.cgi?id=231691

        Reviewed by Simon Fraser.

        Added it with <dialog> focusing steps (bug 227537), forgot to remove when I switched to
        descendantsOfType in the same bug.

        * html/HTMLDialogElement.cpp:

2021-10-13  Tim Nguyen  <ntim@apple.com>

        Implement <dialog> focusing steps
        https://bugs.webkit.org/show_bug.cgi?id=227537

        Reviewed by Darin Adler.

        https://html.spec.whatwg.org/multipage/interactive-elements.html#dialog-focusing-steps

        * dom/Document.h:
        (WebCore::Document::flushAutofocusCandidates):
        (WebCore::Document::clearAutofocusCandidates):
        * html/HTMLDialogElement.cpp:
        (WebCore::HTMLDialogElement::show):
        (WebCore::HTMLDialogElement::showModal):
        (WebCore::HTMLDialogElement::close):
        (WebCore::HTMLDialogElement::runFocusingSteps):
        * html/HTMLDialogElement.h:

2021-10-13  Aditya Keerthi  <akeerthi@apple.com>

        [macOS] Add support for accent-color
        https://bugs.webkit.org/show_bug.cgi?id=231464
        rdar://84049511

        Reviewed by Tim Horton.

        Enable customizing the tint color of checkboxes, radio buttons, select
        elements and progress elements using the 'accent-color' property.

        accent-color support on macOS is implemented by setting the tintColor
        of the current NSAppearance prior to painting controls. This approach
        is already used to support dark mode, and is now extended to support
        accent-color.

        Note that <input type=range> does not support accent-color as the
        current style is non-native. In order to support accent-color, the
        design of the control must first be updated. Similarly, the <datalist>
        indicator is not painted using native API, and does not currently
        support accent-color.

        Tests: fast/css/accent-color/checkbox.html
               fast/css/accent-color/datalist.html
               fast/css/accent-color/progress.html
               fast/css/accent-color/radio.html
               fast/css/accent-color/range.html
               fast/css/accent-color/select.html
               fast/css/accent-color/text.html

        * platform/Theme.cpp:
        (WebCore::Theme::paint):
        * platform/Theme.h:
        * platform/adwaita/ThemeAdwaita.cpp:
        (WebCore::ThemeAdwaita::paint):
        * platform/adwaita/ThemeAdwaita.h:
        * platform/mac/LocalDefaultSystemAppearance.h:
        (WebCore::LocalDefaultSystemAppearance::LocalDefaultSystemAppearance):

        Add a tintColor (optional) parameter to tint the appearance.

        * platform/mac/LocalDefaultSystemAppearance.mm:
        (WebCore::LocalDefaultSystemAppearance::LocalDefaultSystemAppearance):

        Use NSAppearance SPI to set the tint color of the current appearance.

        If the tint color is invalid (accent-color: auto) no tint color is set,
        resulting in the system/app default color being used.

        * platform/mac/ThemeMac.h:
        * platform/mac/ThemeMac.mm:
        (WebCore::ThemeMac::paint):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::paint):
        * rendering/RenderThemeAdwaita.cpp:
        (WebCore::RenderThemeAdwaita::paintMenuList):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintProgressBar):
        (WebCore::RenderThemeMac::paintCellAndSetFocusedElementNeedsRepaintIfNecessary):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::effectiveAccentColor const):

        Resolve the specified accent-color to one that is usable by the theme.
        'auto' resolves to an invalid color so that the system (or app) default
        may be used.

        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::effectiveAccentColor const):
        (WebCore::RenderStyle::accentColor const):
        (WebCore::RenderStyle::hasAutoAccentColor const):

2021-10-13  Antti Koivisto  <antti@apple.com>

        [LFC][Integration] Move text box logical order cache to the caller
        https://bugs.webkit.org/show_bug.cgi?id=231669

        Reviewed by Alan Bujtas.

        Don't maintain this rarely used cache internally in the iterator. Instead move it to the caller.

        Also make the code non-legacy specific so it will work with future IFC BiDi.

        * dom/Position.cpp:
        (WebCore::Position::upstream const):
        (WebCore::Position::downstream const):
        (WebCore::searchAheadForBetterMatch):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::deleteInsignificantText):
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::advance):
        (WebCore::TextIterator::handleTextNode):
        (WebCore::TextIterator::handleTextRun):
        (WebCore::TextIterator::revertToRemainingTextRun):
        (WebCore::TextIterator::handleTextNodeFirstLetter):
        * editing/TextIterator.h:
        * layout/integration/InlineIteratorBoxLegacyPath.h:
        (WebCore::InlineIterator::BoxLegacyPath::traverseNextTextBox):
        (WebCore::InlineIterator::BoxLegacyPath::traverseNextTextBoxInTextOrder): Deleted.
        * layout/integration/InlineIteratorBoxModernPath.h:
        (WebCore::InlineIterator::BoxModernPath::traverseNextTextBoxInTextOrder): Deleted.
        * layout/integration/InlineIteratorTextBox.cpp:
        (WebCore::InlineIterator::firstTextBoxInLogicalOrderFor):
        (WebCore::InlineIterator::nextTextBoxInLogicalOrder):

        Traverse using free functions instead of members.

        (WebCore::InlineIterator::TextBox::nextTextBoxInTextOrder const): Deleted.
        (WebCore::InlineIterator::TextBoxIterator::traverseNextTextBoxInTextOrder): Deleted.
        (WebCore::InlineIterator::firstTextBoxInTextOrderFor): Deleted.
        * layout/integration/InlineIteratorTextBox.h:
        * rendering/LegacyInlineTextBox.h:
        (WebCore::LegacyInlineTextBox::compareByStart): Deleted.
        * rendering/RenderText.cpp:
        (WebCore::containsOffset):

2021-10-13  Antti Koivisto  <antti@apple.com>

        [LFC][Integration] Add concept of integration root and stop using InitialContainingBlock
        https://bugs.webkit.org/show_bug.cgi?id=231662

        Reviewed by Alan Bujtas.

        Stop using InitialContainingBlock in integration as it makes no logical sense.

        (WebCore::LayoutIntegration::BoxTree::BoxTree):

        Set the IntegrationBlockContainer flag.

        (WebCore::LayoutIntegration::BoxTree::updateStyle):
        (WebCore::LayoutIntegration::rootBoxStyle): Deleted.
        * layout/integration/LayoutIntegrationBoxTree.h:
        (WebCore::LayoutIntegration::BoxTree::rootLayoutBox const):
        (WebCore::LayoutIntegration::BoxTree::rootLayoutBox):
        * layout/layouttree/LayoutBox.cpp:
        (WebCore::Layout::Box::establishesBlockFormattingContext const):

        An integration block container without a parent establishes a block formatting context.

        (WebCore::Layout::Box::isBlockContainer const):
        * layout/layouttree/LayoutBox.h:
        (WebCore::Layout::Box::setIsIntegrationBlockContainer):

        Add a flag.

2021-10-13  Chris Dumez  <cdumez@apple.com>

        MessagePort messages sent in iframe unload event not received
        https://bugs.webkit.org/show_bug.cgi?id=231167
        <rdar://problem/84095357>

        Reviewed by Alex Christensen.

        When removing an iframe from the document, frameDetached() was stopping all ActiveDOMObjects
        before firing the "unload" event instead of after. As a result, MessagePorts would be closed
        before the "unload" event handler had a chance to run and any attempt to post messages on
        MessagePorts then would fail.

        Test: fast/frames/message-port-postMessage-unload-event.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::frameDetached):

2021-10-13  Aditya Keerthi  <akeerthi@apple.com>

        Unprefix -webkit-appearance
        https://bugs.webkit.org/show_bug.cgi?id=231534
        rdar://84112934

        Reviewed by Wenson Hsieh.

        Make '-webkit-appearance' a parse time alias of 'appearance', as
        specified in https://www.w3.org/TR/css-ui-4/#appearance-switching.

        The remaining test failures deal with <compat-auto> keywords and
        non-standard values. For example, we cannot remove '-apple-pay-button'
        as a valid value, since sites use it to render an Apple Pay button.
        Remaining failures will be addressed on a case-by-case basis to avoid
        compatibility issues. Note that this is an open spec issue (Issue 7 on
        the spec linked above).

        Most importantly, this change allows authors to use 'appearance: none'
        and 'appearance: auto' to control the appearance of widgets.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::valueForPropertyInStyle):
        * css/CSSProperties.json:
        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):
        (WebCore::CSSParserFastPaths::isKeywordPropertyID):

2021-10-13  Simon Fraser  <simon.fraser@apple.com>

        [WK1] Tests for smooth scrolling of a window fail
        https://bugs.webkit.org/show_bug.cgi?id=191357

        Reviewed by Sam Weinig.
        
        The scrolling functions around ScrollView are a maze of twisty passages, with no clear
        bottleneck functions, and aliasing of scroll position between ScrollableArea, ScrollAnimator
        and the platform widget in WK1.

        Fallout from this was that animation-driven scrolling, which ends up in
        ScrollView::scrollTo(), did nothing if there was a platform widget.

        In addition, there was no feedback that updated ScrollAnimator's notion of scroll position
        when the platform widget scrolled, causing repeated animated scrolls to fail.

        Cleaning up the mess will take time; for now, just patch ScrollView::scrollTo() to do
        something if there's a platform widget, and have ScrollView::scrollOffsetChangedViaPlatformWidget()
        push the new position to the scroll animator.

        Tested by tests in imported/w3c/web-platform-tests/css/cssom-view/

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::scrollOffsetChangedViaPlatformWidget):
        (WebCore::ScrollView::scrollTo):
        (WebCore::ScrollView::setScrollPosition):
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::scrollPositionChanged): Just some auto.

2021-10-12  Alexey Proskuryakov  <ap@apple.com>

        Invoke build scripts with python3 explicitly
        https://bugs.webkit.org/show_bug.cgi?id=231587

        Reviewed by Jonathan Bedard.

        Much of the work to support Python 3 was done years ago, but we need this to
        actually use Python 3 on macOS.

        * DerivedSources.make:
        * css/makeSelectorPseudoClassAndCompatibilityElementMap.py:
        * css/makeSelectorPseudoElementsMap.py:
        * html/parser/create-html-entity-table:
        (convert_entity_to_cpp_name): Deleted.
        (convert_value_to_int): Deleted.
        (offset_table_entry): Deleted.
        * platform/network/create-http-header-name-table:
        (HTTPHeaderName): Deleted.

2021-10-13  Alex Christensen  <achristensen@webkit.org>

        Remove WTF::Variant and WTF::get
        https://bugs.webkit.org/show_bug.cgi?id=231675

        Reviewed by Chris Dumez.

        We are now using std::variant and std::get instead.

        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp:
        (WebCore::ApplePayPaymentHandler::handlesIdentifier):
        (WebCore::ApplePayPaymentHandler::validateMerchant):
        (WebCore::ApplePayPaymentHandler::didAuthorizePayment):
        (WebCore::ApplePayPaymentHandler::didSelectPaymentMethod):
        (WebCore::ApplePayPaymentHandler::didChangeCouponCode):
        * Modules/async-clipboard/ClipboardItemBindingsDataSource.cpp:
        (WebCore::ClipboardItemBindingsDataSource::invokeCompletionHandler):
        (WebCore::ClipboardItemBindingsDataSource::ClipboardItemTypeLoader::sanitizeDataIfNeeded):
        * Modules/cache/DOMCache.cpp:
        (WebCore::DOMCache::requestFromInfo):
        * Modules/fetch/FetchBody.h:
        (WebCore::FetchBody::blobBody const):
        (WebCore::FetchBody::formDataBody):
        (WebCore::FetchBody::formDataBody const):
        (WebCore::FetchBody::arrayBufferBody const):
        (WebCore::FetchBody::arrayBufferViewBody const):
        (WebCore::FetchBody::textBody):
        (WebCore::FetchBody::textBody const):
        (WebCore::FetchBody::urlSearchParamsBody const):
        * Modules/fetch/FetchHeaders.cpp:
        (WebCore::fillHeaderMap):
        * Modules/fetch/FetchRequest.cpp:
        (WebCore::FetchRequest::create):
        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::createObjectStore):
        (WebCore::IDBDatabase::transaction):
        * Modules/indexeddb/IDBKey.cpp:
        (WebCore::IDBKey::isValid const):
        (WebCore::IDBKey::compare const):
        * Modules/indexeddb/IDBKey.h:
        (WebCore::IDBKey::array const):
        (WebCore::IDBKey::string const):
        (WebCore::IDBKey::date const):
        (WebCore::IDBKey::number const):
        (WebCore::IDBKey::binary const):
        * Modules/indexeddb/IDBKeyData.cpp:
        (WebCore::IDBKeyData::IDBKeyData):
        (WebCore::IDBKeyData::maybeCreateIDBKey const):
        (WebCore::IDBKeyData::isolatedCopy):
        (WebCore::IDBKeyData::encode const):
        (WebCore::IDBKeyData::decode):
        (WebCore::IDBKeyData::compare const):
        (WebCore::IDBKeyData::loggingString const):
        (WebCore::IDBKeyData::operator== const):
        (WebCore::IDBKeyData::size const):
        * Modules/indexeddb/IDBKeyData.h:
        (WebCore::IDBKeyData::hash const):
        (WebCore::IDBKeyData::string const):
        (WebCore::IDBKeyData::date const):
        (WebCore::IDBKeyData::number const):
        (WebCore::IDBKeyData::binary const):
        (WebCore::IDBKeyData::array const):
        (WebCore::IDBKeyData::encode const):
        (WebCore::IDBKeyData::decode):
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::addTransceiver):
        (WebCore::certificateTypeFromAlgorithmIdentifier):
        * Modules/mediastream/RTCRtpSFrameTransform.cpp:
        (WebCore::RTCRtpSFrameTransform::setEncryptionKey):
        * animation/AnimationEffect.cpp:
        (WebCore::AnimationEffect::updateTiming):
        * animation/KeyframeEffect.cpp:
        (WebCore::processIterableKeyframes):
        (WebCore::processPropertyIndexedKeyframes):
        (WebCore::KeyframeEffect::create):
        * bindings/js/IDBBindingUtilities.cpp:
        (WebCore::injectIDBKeyIntoScriptValue):
        (WebCore::maybeCreateIDBKeyFromScriptValueAndKeyPath):
        (WebCore::canInjectIDBKeyIntoScriptValue):
        * crypto/SubtleCrypto.cpp:
        (WebCore::normalizeCryptoAlgorithmParameters):
        (WebCore::SubtleCrypto::exportKey):
        (WebCore::SubtleCrypto::wrapKey):
        * crypto/algorithms/CryptoAlgorithmAES_CBC.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::importKey):
        * crypto/algorithms/CryptoAlgorithmAES_CFB.cpp:
        (WebCore::CryptoAlgorithmAES_CFB::importKey):
        * crypto/algorithms/CryptoAlgorithmAES_CTR.cpp:
        (WebCore::CryptoAlgorithmAES_CTR::importKey):
        * crypto/algorithms/CryptoAlgorithmAES_GCM.cpp:
        (WebCore::CryptoAlgorithmAES_GCM::importKey):
        * crypto/algorithms/CryptoAlgorithmAES_KW.cpp:
        (WebCore::CryptoAlgorithmAES_KW::importKey):
        * crypto/algorithms/CryptoAlgorithmECDH.cpp:
        (WebCore::CryptoAlgorithmECDH::importKey):
        * crypto/algorithms/CryptoAlgorithmECDSA.cpp:
        (WebCore::CryptoAlgorithmECDSA::importKey):
        * crypto/algorithms/CryptoAlgorithmHKDF.cpp:
        (WebCore::CryptoAlgorithmHKDF::importKey):
        * crypto/algorithms/CryptoAlgorithmHMAC.cpp:
        (WebCore::CryptoAlgorithmHMAC::importKey):
        * crypto/algorithms/CryptoAlgorithmPBKDF2.cpp:
        (WebCore::CryptoAlgorithmPBKDF2::importKey):
        * crypto/algorithms/CryptoAlgorithmRSAES_PKCS1_v1_5.cpp:
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::importKey):
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp:
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::importKey):
        * crypto/algorithms/CryptoAlgorithmRSA_OAEP.cpp:
        (WebCore::CryptoAlgorithmRSA_OAEP::importKey):
        * crypto/algorithms/CryptoAlgorithmRSA_PSS.cpp:
        (WebCore::CryptoAlgorithmRSA_PSS::importKey):
        * css/CSSCustomPropertyValue.cpp:
        (WebCore::CSSCustomPropertyValue::equals const):
        * css/CSSCustomPropertyValue.h:
        * css/StyleRule.h:
        * css/parser/CSSParser.cpp:
        (WebCore::CSSParser::parseValueWithVariableReferences):
        * dom/DocumentMarker.h:
        (WebCore::DocumentMarker::description const):
        * dom/DocumentMarkerController.cpp:
        (WebCore::shouldInsertAsSeparateMarker):
        * dom/Element.cpp:
        (WebCore::Element::scrollIntoView):
        (WebCore::Element::animate):
        * editing/AlternativeTextController.cpp:
        (WebCore::AlternativeTextController::timerFired):
        (WebCore::AlternativeTextController::respondToMarkerAtEndOfWord):
        (WebCore::AlternativeTextController::removeDictationAlternativesForMarker):
        (WebCore::AlternativeTextController::dictationAlternativesForMarker):
        * editing/Editor.cpp:
        (WebCore::Editor::advanceToNextMisspelling):
        * html/canvas/CanvasStyle.cpp:
        (WebCore::CanvasStyle::isEquivalentColor const):
        (WebCore::CanvasStyle::isEquivalent const):
        * html/canvas/CanvasStyle.h:
        (WebCore::CanvasStyle::overrideAlpha const):
        (WebCore::CanvasStyle::canvasGradient const):
        (WebCore::CanvasStyle::canvasPattern const):
        (WebCore::CanvasStyle::color const):
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::InspectorScopedShaderProgramHighlight::saveBlendValue):
        (WebCore::InspectorScopedShaderProgramHighlight::hasBufferBinding):
        (WebCore::InspectorScopedShaderProgramHighlight::hasFramebufferParameterAttachment):
        * html/track/VTTCue.cpp:
        (WebCore::VTTCue::setLine):
        (WebCore::VTTCue::setPosition):
        * inspector/agents/InspectorIndexedDBAgent.cpp:
        * layout/integration/InlineIteratorBox.cpp:
        (WebCore::InlineIterator::Box::modernPath const):
        (WebCore::InlineIterator::Box::legacyPath const):
        * layout/integration/InlineIteratorBox.h:
        (WebCore::InlineIterator::Box::legacyInlineBox const):
        (WebCore::InlineIterator::Box::inlineBox const):
        * page/ios/FrameIOS.mm:
        (WebCore::Frame::interpretationsForCurrentRoot const):
        * platform/PasteboardCustomData.cpp:
        (WebCore::copyPlatformData):
        (WebCore::PasteboardCustomData::readBuffer const):
        (WebCore::PasteboardCustomData::readString const):
        (WebCore::PasteboardCustomData::forEachPlatformString const):
        (WebCore::PasteboardCustomData::forEachPlatformStringOrBuffer const):
        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::takeData):
        * platform/audio/cocoa/CAAudioStreamDescription.cpp:
        (WebCore::CAAudioStreamDescription::operator== const):
        * platform/audio/cocoa/CAAudioStreamDescription.h:
        (WebCore::toCAAudioStreamDescription):
        * platform/cocoa/MediaUtilities.cpp:
        (WebCore::createAudioFormatDescription):
        * platform/generic/KeyedDecoderGeneric.cpp:
        * platform/graphics/DecodingOptions.h:
        (WebCore::DecodingOptions::isAuto const):
        (WebCore::DecodingOptions::isSynchronous const):
        (WebCore::DecodingOptions::isAsynchronous const):
        (WebCore::DecodingOptions::sizeForDrawing const):
        * platform/graphics/Path.cpp:
        (WebCore::Path::apply const):
        (WebCore::Path::addQuadCurveTo):
        (WebCore::Path::addBezierCurveTo):
        * platform/graphics/Path.h:
        (WebCore::Path::inlineData const):
        (WebCore::Path::inlineData):
        * platform/graphics/displaylists/DisplayListItems.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfTrack):
        * platform/graphics/texmap/TextureMapperPlatformLayerBuffer.h:
        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::createItemProviderRegistrationList):
        * platform/mac/PlatformPasteboardMac.mm:
        (WebCore::PlatformPasteboard::write):
        (WebCore::createPasteboardItem):
        * platform/mediastream/mac/MockAudioSharedUnit.mm:
        (WebCore::MockAudioSharedUnit::resetSampleRate):
        * platform/mediastream/mac/WebAudioSourceProviderCocoa.mm:
        (WebCore::WebAudioSourceProviderCocoa::receivedNewAudioSamples):
        * platform/mock/MockMediaDevice.h:
        (WebCore::MockMediaDevice::type const):
        (WebCore::MockMediaDevice::speakerProperties const):
        * platform/mock/MockRealtimeAudioSource.cpp:
        (WebCore::MockRealtimeAudioSource::MockRealtimeAudioSource):
        (WebCore::MockRealtimeAudioSource::startProducingData):
        * platform/mock/MockRealtimeMediaSourceCenter.cpp:
        (WebCore::MockDisplayCapturer::intrinsicSize const):
        * platform/mock/MockRealtimeVideoSource.cpp:
        (WebCore::MockRealtimeVideoSource::MockRealtimeVideoSource):
        (WebCore::MockRealtimeVideoSource::generatePresets):
        (WebCore::MockRealtimeVideoSource::capabilities):
        (WebCore::MockRealtimeVideoSource::mockDisplayType const):
        * platform/network/DNS.h:
        (WebCore::IPAddress::ipv4Address const):
        (WebCore::IPAddress::ipv6Address const):
        * platform/network/FormData.cpp:
        (WebCore::FormData::appendMultiPartKeyValuePairItems):
        (WebCore::FormData::appendNonMultiPartKeyValuePairItems):
        * platform/network/curl/CurlSSLHandle.h:
        * platform/xr/PlatformXR.h:
        (PlatformXR::Device::FrameData::View::encode const):
        * rendering/RenderBlockFlow.h:
        (WebCore::RenderBlockFlow::legacyLineLayout const):
        (WebCore::RenderBlockFlow::legacyLineLayout):
        (WebCore::RenderBlockFlow::modernLineLayout const):
        (WebCore::RenderBlockFlow::modernLineLayout):
        * rendering/RenderReplaced.cpp:
        (WebCore::draggedContentContainsReplacedElement):
        * style/StyleBuilder.cpp:
        (WebCore::Style::Builder::applyProperty):
        * workers/service/ServiceWorkerJobData.cpp:
        (WebCore::ServiceWorkerJobData::serviceWorkerPageIdentifier const):
        * workers/service/context/ServiceWorkerThread.cpp:
        (WebCore::ServiceWorkerThread::queueTaskToPostMessage):
        * workers/service/server/SWServerJobQueue.cpp:
        (WebCore::SWServerJobQueue::cancelJobsFromServiceWorker):

2021-10-13  Chris Dumez  <cdumez@apple.com>

        Stop using makeWeakPtr() in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=231651

        Reviewed by Alex Christensen.

        Stop using makeWeakPtr() in WebCore and use WeakPtr { } directly instead.

        * dom/BroadcastChannel.cpp:
        (WebCore::BroadcastChannel::MainThreadBridge::MainThreadBridge):
        * dom/DataTransferItemList.cpp:
        (WebCore::DataTransferItemList::add):
        (WebCore::DataTransferItemList::ensureItems const):
        (WebCore::DataTransferItemList::didSetStringData):
        * dom/Document.cpp:
        (WebCore::Document::buildAccessKeyCache):
        (WebCore::Document::collectRangeDataFromRegister):
        (WebCore::Document::determineActiveThemeColorMetaElement):
        (WebCore::Document::setActiveSpeechRecognition):
        (WebCore::Document::appendAutofocusCandidate):
        (WebCore::Document::setMediaElementShowingTextTrack):
        (WebCore::DocumentParserYieldToken::DocumentParserYieldToken):
        (WebCore::Document::addIntersectionObserver):
        (WebCore::Document::updateIntersectionObservations):
        (WebCore::Document::addResizeObserver):
        (WebCore::Document::updateMainArticleElementAfterLayout):
        (WebCore::Document::setPictureInPictureElement):
        * dom/Document.h:
        (WebCore::Document::setContextDocument):
        (WebCore::Document::setTemplateDocumentHost):
        * dom/DocumentParser.cpp:
        (WebCore::DocumentParser::DocumentParser):
        * dom/EventLoop.h:
        (WebCore::EventLoopTaskGroup::EventLoopTaskGroup):
        (WebCore::EventLoopTask::EventLoopTask):
        * dom/EventSender.h:
        (WebCore::EventSender<T>::dispatchEventSoon):
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::addEventListener):
        * dom/FullscreenManager.cpp:
        (WebCore::FullscreenManager::setFullscreenRenderer):
        * dom/IdleCallbackController.cpp:
        (WebCore::IdleCallbackController::IdleCallbackController):
        * dom/MessagePort.cpp:
        (WebCore::MessagePort::virtualHasPendingActivity const):
        * dom/RadioButtonGroups.cpp:
        (WebCore::RadioButtonGroup::setCheckedButton):
        * dom/ScriptedAnimationController.cpp:
        (WebCore::ScriptedAnimationController::ScriptedAnimationController):
        * dom/SlotAssignment.cpp:
        (WebCore::SlotAssignment::addSlotElementByName):
        (WebCore::SlotAssignment::resolveSlotsAfterSlotMutation):
        (WebCore::SlotAssignment::assignToSlot):
        * editing/CustomUndoStep.cpp:
        (WebCore::CustomUndoStep::CustomUndoStep):
        * editing/EditCommand.cpp:
        (WebCore::EditCommand::setParent):
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::FrameSelection):
        * editing/TextManipulationController.cpp:
        (WebCore::TextManipulationController::TextManipulationController):
        (WebCore::TextManipulationController::observeParagraphs):
        * editing/ios/EditorIOS.mm:
        (WebCore::Editor::setDictationPhrasesAsChildOfElement):
        * fileapi/FileReaderLoader.cpp:
        (WebCore::FileReaderLoader::FileReaderLoader):
        * html/CustomPaintImage.cpp:
        (WebCore::CustomPaintImage::CustomPaintImage):
        * html/FormAssociatedElement.cpp:
        (WebCore::FormAssociatedElement::FormAssociatedElement):
        (WebCore::FormAssociatedElement::setForm):
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::setRootEditableElementForSelectionOnMouseDown):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::submit):
        (WebCore::HTMLFormElement::registerFormElement):
        (WebCore::HTMLFormElement::registerImgElement):
        (WebCore::HTMLFormElement::defaultButton const):
        (WebCore::HTMLFormElement::addToPastNamesMap):
        * html/HTMLFrameOwnerElement.cpp:
        (WebCore::HTMLFrameOwnerElement::setContentFrame):
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::HTMLImageElement):
        (WebCore::HTMLImageElement::insertedIntoAncestor):
        (WebCore::HTMLImageElement::setPictureElement):
        (WebCore::HTMLImageElement::setSourceElement):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerCreateResourceLoader):
        * html/HTMLMediaElement.h:
        * html/InputType.h:
        (WebCore::InputType::InputType):
        * html/MediaElementSession.cpp:
        (WebCore::MediaSessionObserver::MediaSessionObserver):
        * html/OffscreenCanvas.cpp:
        (WebCore::OffscreenCanvas::setPlaceholderCanvas):
        * html/URLSearchParams.cpp:
        (WebCore::URLSearchParams::URLSearchParams):
        * html/parser/HTMLScriptRunner.cpp:
        (WebCore::HTMLScriptRunner::HTMLScriptRunner):
        * html/shadow/DateTimeEditElement.cpp:
        (WebCore::DateTimeEditElement::DateTimeEditElement):
        * html/shadow/DateTimeFieldElement.cpp:
        (WebCore::DateTimeFieldElement::DateTimeFieldElement):
        * html/shadow/MediaControlTextTrackContainerElement.cpp:
        (WebCore::MediaControlTextTrackContainerElement::MediaControlTextTrackContainerElement):
        * html/track/TextTrackCue.cpp:
        (WebCore::TextTrackCueBox::TextTrackCueBox):
        * html/track/TrackBase.cpp:
        (WebCore::TrackBase::setTrackList):
        * html/track/TrackListBase.h:
        (WebCore::TrackListBase::setOpaqueRootObserver):
        * inspector/InspectorFrontendAPIDispatcher.cpp:
        (WebCore::InspectorFrontendAPIDispatcher::InspectorFrontendAPIDispatcher):
        * inspector/InspectorOverlay.cpp:
        (WebCore::InspectorOverlay::setGridOverlayForNode):
        * inspector/agents/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::bind):
        * inspector/agents/InspectorLayerTreeAgent.cpp:
        (WebCore::InspectorLayerTreeAgent::bindPseudoElement):
        * inspector/agents/InspectorNetworkAgent.cpp:
        (WebCore::InspectorNetworkAgent::enable):
        * inspector/agents/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::frameId):
        * inspector/agents/InspectorWorkerAgent.cpp:
        (WebCore::InspectorWorkerAgent::connectToWorkerInspectorProxy):
        * layout/formattingContexts/table/TableGrid.cpp:
        (WebCore::Layout::TableGrid::Slot::Slot):
        * layout/layouttree/LayoutBox.cpp:
        (WebCore::Layout::Box::setCachedGeometryForLayoutState const):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::tryLoadingSubstituteData):
        (WebCore::DocumentLoader::contentFilterDidBlock):
        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::setFrame):
        * loader/FrameLoader.cpp:
        (WebCore::PageLevelForbidScope::PageLevelForbidScope):
        (WebCore::FrameLoader::setOpener):
        (WebCore::FrameLoader::loadFrameRequest):
        * loader/FrameNetworkingContext.h:
        (WebCore::FrameNetworkingContext::FrameNetworkingContext):
        * loader/LinkLoader.cpp:
        (WebCore::LinkLoader::preconnectIfNeeded):
        * loader/LinkPreloadResourceClients.cpp:
        (WebCore::LinkPreloadResourceClient::LinkPreloadResourceClient):
        * loader/MediaResourceLoader.cpp:
        (WebCore::MediaResourceLoader::MediaResourceLoader):
        * loader/NetscapePlugInStreamLoader.cpp:
        (WebCore::NetscapePlugInStreamLoader::NetscapePlugInStreamLoader):
        * loader/PolicyChecker.cpp:
        (WebCore::FrameLoader::PolicyChecker::checkNavigationPolicy):
        (WebCore::FrameLoader::PolicyChecker::checkNewWindowPolicy):
        * loader/SubframeLoader.cpp:
        (WebCore::FrameLoader::SubframeLoader::loadPlugin):
        * loader/appcache/ApplicationCache.cpp:
        (WebCore::ApplicationCache::setGroup):
        (WebCore::ApplicationCache::setManifestResource):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::update):
        * loader/appcache/ApplicationCacheHost.cpp:
        (WebCore::ApplicationCacheHost::setDOMApplicationCache):
        (WebCore::ApplicationCacheHost::setCandidateApplicationCacheGroup):
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::load):
        * loader/cache/CachedResourceLoader.h:
        (WebCore::CachedResourceLoader::setDocument):
        * loader/ios/LegacyPreviewLoader.mm:
        (WebCore::LegacyPreviewLoader::previewConverterDidStartConverting):
        * page/DOMWindowExtension.cpp:
        (WebCore::DOMWindowExtension::DOMWindowExtension):
        * page/DOMWindowProperty.cpp:
        (WebCore::DOMWindowProperty::DOMWindowProperty):
        * page/EventHandler.cpp:
        (WebCore::widgetForElement):
        (WebCore::EventHandler::updateLastScrollbarUnderMouse):
        * page/Frame.cpp:
        (WebCore::Frame::Frame):
        * page/FrameDestructionObserver.cpp:
        (WebCore::FrameDestructionObserver::observeFrame):
        * page/FrameTree.cpp:
        (WebCore::FrameTree::FrameTree):
        (WebCore::FrameTree::appendChild):
        * page/FrameView.cpp:
        (WebCore::FrameView::updateEmbeddedObject):
        * page/FrameViewLayoutContext.cpp:
        (WebCore::FrameViewLayoutContext::layout):
        (WebCore::FrameViewLayoutContext::setSubtreeLayoutRoot):
        * page/ImageOverlayController.cpp:
        (WebCore::ImageOverlayController::ImageOverlayController):
        (WebCore::ImageOverlayController::selectionQuadsDidChange):
        * page/IntersectionObserver.cpp:
        (WebCore::IntersectionObserver::IntersectionObserver):
        (WebCore::IntersectionObserver::observe):
        * page/Page.cpp:
        (WebCore::Page::updateRendering):
        (WebCore::Page::doAfterUpdateRendering):
        (WebCore::Page::updateElementsWithTextRecognitionResults):
        (WebCore::Page::setServiceWorkerGlobalScope):
        * page/PointerLockController.cpp:
        (WebCore::PointerLockController::elementWasRemoved):
        (WebCore::PointerLockController::documentDetached):
        (WebCore::PointerLockController::didAcquirePointerLock):
        * page/Quirks.cpp:
        (WebCore::Quirks::Quirks):
        (WebCore::Quirks::triggerOptionalStorageAccessQuirk const):
        * page/ResizeObservation.cpp:
        (WebCore::ResizeObservation::ResizeObservation):
        * page/ResizeObserver.cpp:
        (WebCore::ResizeObserver::ResizeObserver):
        (WebCore::ResizeObserver::observe):
        * page/UndoItem.cpp:
        (WebCore::UndoItem::setUndoManager):
        * page/WheelEventTestMonitor.cpp:
        (WebCore::WheelEventTestMonitor::scheduleCallbackCheck):
        * page/ios/ContentChangeObserver.cpp:
        (WebCore::ContentChangeObserver::didFinishTransition):
        * page/ios/ContentChangeObserver.h:
        (WebCore::ContentChangeObserver::setHiddenTouchTarget):
        * page/mac/EventHandlerMac.mm:
        (WebCore::scrollableAreaForEventTarget):
        (WebCore::scrollableAreaForContainerNode):
        (WebCore::EventHandler::determineWheelEventTarget):
        * page/mac/ImageOverlayControllerMac.mm:
        (WebCore::ImageOverlayController::updateDataDetectorHighlights):
        (WebCore::ImageOverlayController::elementUnderMouseDidChange):
        * page/scrolling/ScrollLatchingController.cpp:
        (WebCore::ScrollLatchingController::updateAndFetchLatchingStateForFrame):
        * platform/NowPlayingManager.cpp:
        (WebCore::NowPlayingManager::addClient):
        * platform/PreviewConverter.cpp:
        (WebCore::PreviewConverter::addClient):
        (WebCore::PreviewConverter::didAddClient):
        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::createTimer):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::ProhibitScrollingWhenChangingContentSizeForScope::ProhibitScrollingWhenChangingContentSizeForScope):
        * platform/Widget.cpp:
        (WebCore::Widget::setParent):
        * platform/audio/PlatformMediaSessionManager.cpp:
        (WebCore::PlatformMediaSessionManager::addSession):
        (WebCore::PlatformMediaSessionManager::sessionWillEndPlayback):
        (WebCore::PlatformMediaSessionManager::setCurrentSession):
        * platform/audio/cocoa/MediaSessionManagerCocoa.mm:
        (WebCore::MediaSessionManagerCocoa::sessionWillEndPlayback):
        * platform/audio/glib/MediaSessionManagerGLib.cpp:
        (WebCore::MediaSessionManagerGLib::sessionWillEndPlayback):
        * platform/audio/gstreamer/AudioFileReaderGStreamer.cpp:
        (WebCore::AudioFileReader::decodeAudioForBusCreation):
        * platform/audio/gstreamer/AudioSourceProviderGStreamer.cpp:
        (WebCore::AudioSourceProviderGStreamer::setClient):
        * platform/audio/mac/SharedRoutingArbitrator.mm:
        (WebCore::SharedRoutingArbitrator::beginRoutingArbitrationForToken):
        * platform/encryptedmedia/CDMProxy.cpp:
        (WebCore::CDMInstanceSessionProxy::CDMInstanceSessionProxy):
        * platform/encryptedmedia/clearkey/CDMClearKey.cpp:
        (WebCore::CDMInstanceSessionClearKey::updateLicense):
        (WebCore::CDMInstanceSessionClearKey::removeSessionData):
        * platform/graphics/AudioTrackPrivate.h:
        (WebCore::AudioTrackPrivate::setClient):
        * platform/graphics/InbandTextTrackPrivate.h:
        (WebCore::InbandTextTrackPrivate::setClient):
        * platform/graphics/VideoTrackPrivate.h:
        (WebCore::VideoTrackPrivate::setClient):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        * platform/graphics/avfoundation/SampleBufferDisplayLayer.h:
        (WebCore::SampleBufferDisplayLayer::SampleBufferDisplayLayer):
        * platform/graphics/avfoundation/objc/AVOutputDeviceMenuControllerTargetPicker.mm:
        (WebCore::AVOutputDeviceMenuControllerTargetPicker::AVOutputDeviceMenuControllerTargetPicker):
        * platform/graphics/avfoundation/objc/AVPlaybackTargetPicker.h:
        (WebCore::AVPlaybackTargetPicker::AVPlaybackTargetPicker):
        * platform/graphics/avfoundation/objc/AVRoutePickerViewTargetPicker.mm:
        (WebCore::AVRoutePickerViewTargetPicker::AVRoutePickerViewTargetPicker):
        * platform/graphics/avfoundation/objc/CDMInstanceFairPlayStreamingAVFObjC.mm:
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::createSession):
        * platform/graphics/avfoundation/objc/CDMSessionAVFoundationObjC.mm:
        (WebCore::CDMSessionAVFoundationObjC::CDMSessionAVFoundationObjC):
        * platform/graphics/avfoundation/objc/LocalSampleBufferDisplayLayer.mm:
        (-[WebAVSampleBufferStatusChangeListener initWithParent:]):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::MediaPlayerPrivateAVFoundationObjC):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createVideoOutput):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createSession):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::EffectiveRateChangedListener::EffectiveRateChangedListener):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setCDMSession):
        * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.mm:
        (WebCore::MediaSourcePrivateAVFObjC::MediaSourcePrivateAVFObjC):
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::SourceBufferPrivateAVFObjC):
        (WebCore::SourceBufferPrivateAVFObjC::setCDMSession):
        * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.mm:
        (WebCore::PlatformResourceMediaLoader::create):
        * platform/graphics/gstreamer/ImageDecoderGStreamer.cpp:
        (WebCore::ImageDecoderGStreamer::InnerDecoder::handleMessage):
        (WebCore::ImageDecoderGStreamer::InnerDecoder::preparePipeline):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfTrack):
        (WebCore::MediaPlayerPrivateGStreamer::updateTracks):
        (WebCore::MediaPlayerPrivateGStreamer::handleStreamCollectionMessage):
        (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        * platform/graphics/gstreamer/eme/CDMThunder.cpp:
        (WebCore::CDMInstanceSessionThunder::CDMInstanceSessionThunder):
        * platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.cpp:
        (webKitMediaCommonEncryptionDecryptGetCDMProxyDecryptionClient):
        * platform/graphics/gstreamer/mse/AppendPipeline.cpp:
        (WebCore::AppendPipeline::makeWebKitTrack):
        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::setMaskLayer):
        (WebCore::TextureMapperLayer::setReplicaLayer):
        (WebCore::TextureMapperLayer::setBackdropLayer):
        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:
        (WebCore::MediaPlayerPrivateMediaFoundation::MediaPlayerPrivateMediaFoundation):
        * platform/ios/PreviewConverterIOS.mm:
        (-[WebPreviewConverterDelegate initWithDelegate:]):
        * platform/ios/VideoFullscreenInterfaceAVKit.mm:
        (-[WebAVPlayerViewControllerDelegate setFullscreenInterface:]):
        * platform/ios/WebCoreMotionManager.mm:
        (-[WebCoreMotionManager sendAccelerometerData:]):
        (-[WebCoreMotionManager sendMotionData:withHeading:]):
        * platform/mac/DataDetectorHighlight.mm:
        (WebCore::DataDetectorHighlight::DataDetectorHighlight):
        * platform/mac/PlaybackSessionInterfaceMac.mm:
        (WebCore::PlaybackSessionInterfaceMac::PlaybackSessionInterfaceMac):
        * platform/mac/VideoFullscreenInterfaceMac.mm:
        (WebCore::VideoFullscreenInterfaceMac::setVideoFullscreenModel):
        (WebCore::VideoFullscreenInterfaceMac::setVideoFullscreenChangeObserver):
        * platform/mediarecorder/cocoa/MediaRecorderPrivateWriterCocoa.mm:
        (WebCore::MediaRecorderPrivateWriter::compressedVideoOutputBufferCallback):
        (WebCore::MediaRecorderPrivateWriter::compressedAudioOutputBufferCallback):
        * platform/mediastream/AudioTrackPrivateMediaStream.cpp:
        (WebCore::AudioTrackPrivateMediaStream::createRenderer):
        * platform/mediastream/libwebrtc/LibWebRTCDTMFSenderBackend.h:
        * platform/mediastream/mac/MediaStreamTrackAudioSourceProviderCocoa.cpp:
        (WebCore::MediaStreamTrackAudioSourceProviderCocoa::MediaStreamTrackAudioSourceProviderCocoa):
        * platform/network/cocoa/CookieStorageObserver.h:
        * platform/network/cocoa/RangeResponseGenerator.mm:
        (WebCore::RangeResponseGenerator::giveResponseToTaskIfBytesInRangeReceived):
        (WebCore::RangeResponseGenerator::MediaResourceClient::MediaResourceClient):
        * plugins/DOMMimeType.cpp:
        (WebCore::DOMMimeType::DOMMimeType):
        * plugins/DOMMimeTypeArray.cpp:
        (WebCore::DOMMimeTypeArray::DOMMimeTypeArray):
        * plugins/DOMPlugin.cpp:
        (WebCore::DOMPlugin::DOMPlugin):
        * plugins/DOMPluginArray.cpp:
        (WebCore::DOMPluginArray::DOMPluginArray):
        * rendering/FloatingObjects.cpp:
        (WebCore::FloatingObject::FloatingObject):
        (WebCore::ComputeFloatOffsetAdapter::ComputeFloatOffsetAdapter):
        (WebCore::FindNextFloatLogicalBottomAdapter::FindNextFloatLogicalBottomAdapter):
        (WebCore::FloatingObjects::FloatingObjects):
        * rendering/FloatingObjects.h:
        (WebCore::FloatingObject::setOriginatingLine):
        * rendering/Grid.cpp:
        (WebCore::Grid::insert):
        * rendering/HighlightData.h:
        (WebCore::RenderRange::RenderRange):
        * rendering/LayerAncestorClippingStack.h:
        (WebCore::CompositedClipData::CompositedClipData):
        * rendering/LegacyInlineBox.h:
        (WebCore::LegacyInlineBox::LegacyInlineBox):
        * rendering/LegacyRootInlineBox.cpp:
        (WebCore::LegacyRootInlineBox::setLineBreakInfo):
        * rendering/LegacyRootInlineBox.h:
        (WebCore::LegacyRootInlineBox::appendFloat):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::updateCachedEnclosingFragmentedFlow const):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::setMultiColumnFlow):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::ContinuationChainNode::ContinuationChainNode):
        (WebCore::RenderBoxModelObject::setFirstLetterRemainingText):
        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::setInnerRenderer):
        (WebCore::RenderButton::setText):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::setBackdropRenderer):
        * rendering/RenderFragmentedFlow.cpp:
        (WebCore::RenderFragmentedFlow::updateFragmentsFragmentedFlowPortionRect):
        * rendering/RenderFragmentedFlow.h:
        * rendering/RenderFullScreen.h:
        * rendering/RenderImageResource.cpp:
        (WebCore::RenderImageResource::initialize):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updatePagination):
        (WebCore::RenderLayer::setBackingProviderLayer):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::BackingSharingState::appendSharingLayer):
        (WebCore::RenderLayerCompositor::attachScrollingNode):
        * rendering/RenderLayoutState.cpp:
        (WebCore::RenderLayoutState::propagateLineGridInfo):
        (WebCore::RenderLayoutState::establishLineGrid):
        * rendering/RenderListItem.h:
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::RenderListMarker):
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::setInnerRenderer):
        (RenderMenuList::setText):
        * rendering/RenderMultiColumnSpannerPlaceholder.cpp:
        (WebCore::RenderMultiColumnSpannerPlaceholder::RenderMultiColumnSpannerPlaceholder):
        * rendering/RenderScrollbar.cpp:
        (WebCore::RenderScrollbar::RenderScrollbar):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::willInsertTableSection):
        (WebCore::RenderTable::addCaption):
        (WebCore::RenderTable::updateColumnCache const):
        (WebCore::RenderTable::recalcSections const):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::setInlineWrapperForDisplayContents):
        * rendering/RenderTextFragment.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::RepaintRegionAccumulator::RepaintRegionAccumulator):
        (WebCore::RenderView::layerChildrenChangedDuringStyleChange):
        * rendering/mathml/RenderMathMLFenced.h:
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGHitTestCycleDetectionScope::SVGHitTestCycleDetectionScope):
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::childFlowStateChangesAndAffectsParentBlock):
        (WebCore::RenderTreeBuilder::destroyAndCleanUpAnonymousWrappers):
        * rendering/updating/RenderTreeBuilderBlock.cpp:
        (WebCore::RenderTreeBuilder::Block::detach):
        * rendering/updating/RenderTreeBuilderFirstLetter.cpp:
        (WebCore::RenderTreeBuilder::FirstLetter::updateStyle):
        (WebCore::RenderTreeBuilder::FirstLetter::createRenderers):
        * rendering/updating/RenderTreeBuilderMultiColumn.cpp:
        (WebCore::RenderTreeBuilder::MultiColumn::multiColumnDescendantInserted):
        * rendering/updating/RenderTreePosition.cpp:
        (WebCore::RenderTreePosition::computeNextSibling):
        * rendering/updating/RenderTreePosition.h:
        (WebCore::RenderTreePosition::RenderTreePosition):
        * rendering/updating/RenderTreeUpdaterGeneratedContent.cpp:
        (WebCore::RenderTreeUpdater::GeneratedContent::updateQuotesUpTo):
        (WebCore::RenderTreeUpdater::GeneratedContent::updateBackdropRenderer):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::addReferencingElement):
        * svg/SVGElementRareData.h:
        (WebCore::SVGElementRareData::setCorrespondingElement):
        * svg/SVGViewElement.h:
        * svg/SVGViewSpec.cpp:
        (WebCore::SVGViewSpec::SVGViewSpec):
        * testing/Internals.cpp:
        (WebCore::Internals::xrTest):
        * testing/MockCDMFactory.cpp:
        (WebCore::MockCDMFactory::createCDM):
        (WebCore::MockCDM::createInstance):
        (WebCore::MockCDMInstance::createSession):
        * workers/WorkerFontLoadRequest.cpp:
        (WebCore::WorkerFontLoadRequest::load):
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::importScripts):
        (WebCore::WorkerGlobalScope::setMainScriptSourceProvider):
        * workers/WorkerOrWorkletScriptController.cpp:
        (WebCore::WorkerOrWorkletScriptController::initScriptWithSubclass):
        * workers/WorkerRunLoop.cpp:
        (WebCore::WorkerMainRunLoop::setGlobalScope):
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::evaluateScriptIfNecessary):
        * workers/service/server/RegistrationDatabase.cpp:
        (WebCore::RegistrationDatabase::RegistrationDatabase):
        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::addRegistration):
        * workers/service/server/SWServerWorker.cpp:
        (WebCore::SWServerWorker::SWServerWorker):
        * worklets/WorkletGlobalScope.cpp:
        (WebCore::WorkletGlobalScope::WorkletGlobalScope):
        * worklets/WorkletPendingTasks.cpp:
        (WebCore::WorkletPendingTasks::WorkletPendingTasks):
        * xml/DOMParser.cpp:
        (WebCore::DOMParser::DOMParser):

2021-10-13  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Crash in WebCore::MediaPlayerPrivateGStreamer::sourceSetup when loading reddit video
        https://bugs.webkit.org/show_bug.cgi?id=231519

        Reviewed by Xabier Rodriguez-Calvar.

        Since this GStreamer commit:
        https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/commit/52bca104e447309898ca8904b3914211ec7d4114

        and starting from GStreamer 1.20, the playbin::source-setup signal is emitted before the
        source element is added to the pipeline, so this gave us the opportunity to refactor our
        code handling the downloadbuffer configuration, using the existing deep-element-added signal
        handler.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::~MediaPlayerPrivateGStreamer):
        (WebCore::MediaPlayerPrivateGStreamer::sourceSetup):
        (WebCore::MediaPlayerPrivateGStreamer::configureDownloadBuffer):
        (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin):
        (WebCore::MediaPlayerPrivateGStreamer::uriDecodeBinElementAddedCallback): Deleted.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:

2021-10-13  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Do not break at the inline box boundary when wrapping is not allowed
        https://bugs.webkit.org/show_bug.cgi?id=231581

        Reviewed by Antti Koivisto.

        This patch ensures that we don't consider whitespace characters as soft wrap opportunities when wrapping is not allowed.

        Test: fast/inline/no-soft-wrap-opportunity-at-inline-box.html

        * layout/formattingContexts/inline/InlineContentBreaker.cpp:
        (WebCore::Layout::InlineContentBreaker::processOverflowingContent const):
        (WebCore::Layout::isWrappableRun):
        (WebCore::Layout::InlineContentBreaker::isWrappingAllowed): Deleted.
        * layout/formattingContexts/inline/InlineLineBuilder.cpp:
        (WebCore::Layout::isAtSoftWrapOpportunity):
        (WebCore::Layout::LineBuilder::handleInlineContent):
        * layout/formattingContexts/inline/text/TextUtil.cpp:
        (WebCore::Layout::TextUtil::isWrappingAllowed):
        * layout/formattingContexts/inline/text/TextUtil.h:

2021-10-13  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, THUNDER build fix

        * platform/graphics/gstreamer/eme/CDMThunder.cpp: Include PrintStream.h, required for boolForPrinting().

2021-10-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK build with ATSPI enabled after r284009

        * accessibility/atspi/AccessibilityRootAtspi.cpp:
        (WebCore::AccessibilityRootAtspi::create):
        (WebCore::AccessibilityRootAtspi::AccessibilityRootAtspi):
        * accessibility/atspi/AccessibilityRootAtspi.h:

2021-10-13  Alicia Boya García  <aboya@igalia.com>

        Unreviewed, reverting r283609

        Build failure with GStreamer 1.14 and regression causing frame
        corruption.

        Reverted changeset:

        "[MSE][GStreamer] Honor MP4 edit lists"
        https://bugs.webkit.org/show_bug.cgi?id=231019
        https://commits.webkit.org/r283609

2021-10-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK build with ATSPI enabled after r283851

        * accessibility/atspi/AccessibilityObjectAtspi.cpp: Inlcude ElementInlines.h for getIdAttribute().

2021-10-13  Youenn Fablet  <youenn@apple.com>

        Add support for WebRTC media capabilities
        https://bugs.webkit.org/show_bug.cgi?id=231568

        Reviewed by Eric Carlson.

        Add WebRTC decoding and encoding type.
        In case webrtc type is used, forward the call to LibWebRTCProvider.
        LibWebRTCProvider then gets underlying RTC capabilities to expose media capabilities.
        It also adds dedicated support for powerEfficient value.
        All information is already exposed in existing Media Capabilities or RTCRtpSender/Receiver getCapabilities so we do not increase fingerprinting here.

        Tests: imported/w3c/web-platform-tests/media-capabilities/decodingInfo.any.html
               imported/w3c/web-platform-tests/media-capabilities/decodingInfo.any.worker.html
               imported/w3c/web-platform-tests/media-capabilities/decodingInfo.webrtc.html
               imported/w3c/web-platform-tests/media-capabilities/decodingInfoEncryptedMedia.http.html
               imported/w3c/web-platform-tests/media-capabilities/decodingInfoEncryptedMedia.https.html
               imported/w3c/web-platform-tests/media-capabilities/encodingInfo.html
               imported/w3c/web-platform-tests/media-capabilities/encodingInfo.webrtc.html
               imported/w3c/web-platform-tests/media-capabilities/idlharness.any.html
               imported/w3c/web-platform-tests/media-capabilities/idlharness.any.worker.html

        * Modules/mediacapabilities/MediaCapabilities.cpp:
        * Modules/mediacapabilities/MediaDecodingType.idl:
        * Modules/mediacapabilities/MediaEncodingType.idl:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSMediaCapabilitiesCustom.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        * platform/graphics/cocoa/MediaEngineConfigurationFactoryCocoa.cpp:
        * platform/mediacapabilities/MediaCapabilitiesLogging.h:
        * platform/mediacapabilities/MediaDecodingType.h:
        * platform/mediacapabilities/MediaEncodingType.h:
        * platform/mediastream/libwebrtc/LibWebRTCProvider.cpp:
        * platform/mediastream/libwebrtc/LibWebRTCProvider.h:
        * platform/mock/MediaEngineConfigurationFactoryMock.cpp:

2021-10-13  Martin Robinson  <mrobinson@webkit.org>

        Sticky element inside another sticky element does not redraw properly on scroll
        https://bugs.webkit.org/show_bug.cgi?id=199915
        <rdar://problem/53375284>

        Reviewed by Simon Fraser.

        When calculating layer position for sticky nodes in the scrolling tree, take into
        account situations where the sticky parents of sticky nodes don't stick (due to
        sizing). This was handled properly in layout, but not in the scrolling tree, which
        caused these kinds of nodes to jump around.

        Test: scrollingcoordinator/mac/nested-sticky-with-nonsticking-sticky-parent.html

        * page/scrolling/ScrollingStateStickyNode.cpp:
        (WebCore::ScrollingStateStickyNode::computeLayerPosition const):
        (WebCore::ScrollingStateStickyNode::scrollDeltaSinceLastCommit const):
        * page/scrolling/ScrollingStateStickyNode.h:
        * page/scrolling/cocoa/ScrollingTreeStickyNode.mm:
        (WebCore::ScrollingTreeStickyNode::computeLayerPosition const):
        * page/scrolling/nicosia/ScrollingTreeStickyNode.cpp:
        (WebCore::ScrollingTreeStickyNode::computeLayerPosition const):
        (WebCore::ScrollingTreeStickyNode::scrollDeltaSinceLastCommit const):
        * page/scrolling/nicosia/ScrollingTreeStickyNode.h:

2021-10-12  Jer Noble  <jer.noble@apple.com>

        [Build-time perf] Forward-declare more things in Document.h
        https://bugs.webkit.org/show_bug.cgi?id=231489

        Reviewed by Myles C. Maxfield.

        Move the folowing enumerations outside their classes so that they can be forward-declared:
        - MediaProducer::MediaStateFlags -> MediaProducerMediaStateFlags
        - MediaProducer::MediaCaptureKind -> MediaProducerMediaCaptureKind
        - MediaProducer::MutedState -> MediaProducerMutedState
        - StyleColor::Options -> StyleColorOptions
        - MutationObserver::{MutationType,ObservationFlags,DeliveryFlags} -> MutationObserverOptionType

        Additionally, make MutationObserverOptions a OptionSet<MutationObserverOptionType>, and update
        callsites to use OptionSet methods for setting and checking flags.

        Move inlined methods to DocumentInlines.h and PageInlines.h and mark the declarations as `inline`.

        On this machine, this shows a reduction from ~1.2s compilation time for Document.h to ~1.0s, most
        of the remainder due to the inclusion of Node.h (via ContainerNode.h) and ScriptExecutionContext.h.

        * Modules/airplay/WebMediaSessionManager.cpp:
        (WebCore::flagsAreSet):
        (WebCore::mediaProducerStateString):
        (WebCore::WebMediaSessionManager::showPlaybackTargetPicker):
        (WebCore::WebMediaSessionManager::clientStateDidChange):
        (WebCore::WebMediaSessionManager::configurePlaybackTargetClients):
        (WebCore::WebMediaSessionManager::configurePlaybackTargetMonitoring):
        (WebCore::WebMediaSessionManager::configureWatchdogTimer):
        * Modules/airplay/WebMediaSessionManager.h:
        (WTF::LogArgument<WebCore::MediaProducerMediaStateFlags>::toString):
        (WTF::LogArgument<WebCore::MediaProducer::MediaStateFlags>::toString): Deleted.
        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::mediaState const):
        * Modules/mediastream/MediaStream.h:
        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::mediaState const):
        (WebCore::sourceCaptureState):
        (WebCore::MediaStreamTrack::captureState):
        (WebCore::MediaStreamTrack::updateCaptureAccordingToMutedState):
        (WebCore::MediaStreamTrack::updateToPageMutedState):
        (WebCore::trackMatchesKind):
        (WebCore::MediaStreamTrack::endCapture):
        * Modules/mediastream/MediaStreamTrack.h:
        * Modules/mediastream/RTCController.cpp:
        * Modules/mediastream/UserMediaRequest.cpp:
        * Modules/permissions/PermissionStatus.cpp:
        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::mediaState const):
        (WebCore::AudioContext::visibilityStateChanged):
        * Modules/webaudio/AudioContext.h:
        * WebCore.xcodeproj/project.pbxproj:
        * accessibility/AXObjectCache.h:
        * accessibility/AccessibilityObject.cpp:
        * bindings/js/JSLazyEventListener.cpp:
        * bindings/js/ScriptController.cpp:
        * css/StyleColor.cpp:
        (WebCore::StyleColor::colorFromKeyword):
        * css/StyleColor.h:
        * dom/CharacterData.cpp:
        (WebCore::canUseSetDataOptimization):
        * dom/ChildListMutationScope.h:
        (WebCore::ChildListMutationScope::ChildListMutationScope):
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::removeAllChildrenWithScriptAssertion):
        * dom/Document.cpp:
        (WebCore::Document::resetVisitedLinkColor):
        (WebCore::Document::setRTCNetworkManager):
        (WebCore::Document::updateIsPlayingMedia):
        (WebCore::Document::enqueueSecurityPolicyViolationEvent):
        (WebCore::Document::styleColorOptions const):
        (WebCore::Document::playbackTargetPickerClientStateDidChange):
        (WebCore::Document::stopMediaCapture):
        * dom/Document.h:
        (WebCore::Document::hasMutationObservers const):
        (WebCore::Document::addMutationObserverTypes):
        (WebCore::Document::getOverrideStyle):
        (WebCore::Document::charset const): Deleted.
        (WebCore::Document::encoding const): Deleted.
        (WebCore::Document::setRTCNetworkManager): Deleted.
        (WebCore::Document::hasMutationObserversOfType const): Deleted.
        (WebCore::Document::isSameOriginAsTopDocument const): Deleted.
        (WebCore::Document::isCapturing const): Deleted.
        (WebCore::Document::textEncoding const): Deleted.
        (WebCore::Document::templateDocument const): Deleted.
        (WebCore::Document::existingAXObjectCache const): Deleted.
        (WebCore::Document::create): Deleted.
        (WebCore::Document::invalidateAccessKeyCache): Deleted.
        (WebCore::Node::scriptExecutionContext const): Deleted.
        * dom/DocumentInlines.h:
        (WebCore::Document::encoding const):
        (WebCore::Document::charset const):
        (WebCore::Document::isCapturing const):
        (WebCore::Document::hasMutationObserversOfType const):
        (WebCore::Document::isSameOriginAsTopDocument const):
        * dom/MutationObserver.cpp:
        (WebCore::MutationObserver::validateOptions):
        (WebCore::MutationObserver::observe):
        * dom/MutationObserver.h:
        * dom/MutationObserverInterestGroup.cpp:
        (WebCore::MutationObserverInterestGroup::createIfNeeded):
        * dom/MutationObserverInterestGroup.h:
        (WebCore::MutationObserverInterestGroup::createForChildListMutation):
        (WebCore::MutationObserverInterestGroup::createForCharacterDataMutation):
        (WebCore::MutationObserverInterestGroup::createForAttributesMutation):
        (WebCore::MutationObserverInterestGroup::hasOldValue const):
        * dom/MutationObserverRegistration.cpp:
        (WebCore::MutationObserverRegistration::shouldReceiveMutationFrom const):
        * dom/MutationObserverRegistration.h:
        (WebCore::MutationObserverRegistration::isSubtree const):
        (WebCore::MutationObserverRegistration::deliveryOptions const):
        (WebCore::MutationObserverRegistration::mutationTypes const):
        * dom/Node.cpp:
        (WebCore::collectMatchingObserversForMutation):
        (WebCore::Node::registeredMutationObservers):
        * dom/Node.h:
        * dom/ProcessingInstruction.cpp:
        * dom/ScriptElement.cpp:
        * dom/SecurityPolicyViolationEvent.h:
        (WebCore::SecurityPolicyViolationEventInit::SecurityPolicyViolationEventInit):
        (WebCore::SecurityPolicyViolationEventInit::encode const):
        (WebCore::SecurityPolicyViolationEventInit::decode):
        (WebCore::SecurityPolicyViolationEvent::Init::encode const): Deleted.
        (WebCore::SecurityPolicyViolationEvent::Init::decode): Deleted.
        * html/HTMLLinkElement.cpp:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::shouldOverrideBackgroundPlaybackRestriction const):
        (WebCore::HTMLMediaElement::updateMediaState):
        (WebCore::HTMLMediaElement::mediaState const):
        * html/HTMLMediaElement.h:
        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::playbackStateChangePermitted const):
        (WebCore::MediaElementSession::mediaStateDidChange):
        * html/MediaElementSession.h:
        * inspector/InspectorInstrumentation.h:
        * inspector/agents/InspectorDOMAgent.cpp:
        * inspector/agents/InspectorNetworkAgent.cpp:
        * loader/CrossOriginOpenerPolicy.h:
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::enqueueSecurityPolicyViolationEvent):
        * loader/DocumentLoader.h:
        * loader/DocumentWriter.cpp:
        * loader/FormSubmission.cpp:
        * loader/FrameLoader.cpp:
        * loader/cache/CachedResourceLoader.cpp:
        * page/ChromeClient.h:
        (WebCore::ChromeClient::isPlayingMediaDidChange):
        (WebCore::ChromeClient::playbackTargetPickerClientStateDidChange):
        * page/Frame.cpp:
        * page/FrameView.cpp:
        (WebCore::FrameView::styleColorOptions const):
        * page/FrameView.h:
        * page/MediaProducer.h:
        * page/Page.cpp:
        (WebCore::Page::updateIsPlayingMedia):
        (WebCore::Page::setMuted):
        (WebCore::Page::stopMediaCapture):
        (WebCore::Page::playbackTargetPickerClientStateDidChange):
        * page/Page.h:
        (WebCore::Page::mediaState const):
        (WebCore::Page::mutedState const):
        (WebCore::Page::isAudioMuted const): Deleted.
        (WebCore::Page::isMediaCaptureMuted const): Deleted.
        * page/PageInlines.h: Copied from Source/WebCore/dom/DocumentInlines.h.
        (WebCore::Page::isAudioMuted const):
        (WebCore::Page::isMediaCaptureMuted const):
        * page/PageSerializer.cpp:
        * page/csp/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::reportViolation const):
        * page/csp/ContentSecurityPolicyClient.h:
        * platform/graphics/MediaPlayer.cpp:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::styleColorOptions const):
        * rendering/RenderObject.h:
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::calculateHighlightColor const):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::activeSelectionBackgroundColor const):
        (WebCore::RenderTheme::inactiveSelectionBackgroundColor const):
        (WebCore::RenderTheme::transformSelectionBackgroundColor const):
        (WebCore::RenderTheme::activeSelectionForegroundColor const):
        (WebCore::RenderTheme::inactiveSelectionForegroundColor const):
        (WebCore::RenderTheme::activeListBoxSelectionBackgroundColor const):
        (WebCore::RenderTheme::inactiveListBoxSelectionBackgroundColor const):
        (WebCore::RenderTheme::activeListBoxSelectionForegroundColor const):
        (WebCore::RenderTheme::inactiveListBoxSelectionForegroundColor const):
        (WebCore::RenderTheme::platformActiveSelectionBackgroundColor const):
        (WebCore::RenderTheme::platformActiveSelectionForegroundColor const):
        (WebCore::RenderTheme::platformInactiveSelectionBackgroundColor const):
        (WebCore::RenderTheme::platformInactiveSelectionForegroundColor const):
        (WebCore::RenderTheme::platformActiveListBoxSelectionBackgroundColor const):
        (WebCore::RenderTheme::platformActiveListBoxSelectionForegroundColor const):
        (WebCore::RenderTheme::platformInactiveListBoxSelectionBackgroundColor const):
        (WebCore::RenderTheme::platformInactiveListBoxSelectionForegroundColor const):
        (WebCore::RenderTheme::colorCache const):
        (WebCore::RenderTheme::systemColor const):
        (WebCore::RenderTheme::textSearchHighlightColor const):
        (WebCore::RenderTheme::platformTextSearchHighlightColor const):
        (WebCore::RenderTheme::appHighlightColor const):
        (WebCore::RenderTheme::platformAppHighlightColor const):
        (WebCore::RenderTheme::defaultButtonTextColor const):
        (WebCore::RenderTheme::platformDefaultButtonTextColor const):
        (WebCore::RenderTheme::focusRingColor const):
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::platformFocusRingColor const):
        (WebCore::RenderTheme::supportsSelectionForegroundColors const):
        (WebCore::RenderTheme::supportsListBoxSelectionForegroundColors const):
        * rendering/RenderThemeIOS.h:
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::platformActiveSelectionBackgroundColor const):
        (WebCore::RenderThemeIOS::platformInactiveSelectionBackgroundColor const):
        (WebCore::RenderThemeIOS::platformFocusRingColor const):
        (WebCore::RenderThemeIOS::platformAppHighlightColor const):
        (WebCore::RenderThemeIOS::systemColor const):
        (WebCore::RenderThemeIOS::checkboxRadioBorderColor):
        (WebCore::RenderThemeIOS::checkboxRadioBackgroundColor):
        (WebCore::RenderThemeIOS::checkboxRadioIndicatorColor):
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::platformActiveSelectionBackgroundColor const):
        (WebCore::RenderThemeMac::platformInactiveSelectionBackgroundColor const):
        (WebCore::RenderThemeMac::transformSelectionBackgroundColor const):
        (WebCore::RenderThemeMac::supportsSelectionForegroundColors const):
        (WebCore::RenderThemeMac::platformActiveSelectionForegroundColor const):
        (WebCore::RenderThemeMac::platformInactiveSelectionForegroundColor const):
        (WebCore::RenderThemeMac::platformActiveListBoxSelectionBackgroundColor const):
        (WebCore::RenderThemeMac::platformInactiveListBoxSelectionBackgroundColor const):
        (WebCore::RenderThemeMac::platformActiveListBoxSelectionForegroundColor const):
        (WebCore::RenderThemeMac::platformInactiveListBoxSelectionForegroundColor const):
        (WebCore::RenderThemeMac::platformFocusRingColor const):
        (WebCore::RenderThemeMac::platformTextSearchHighlightColor const):
        (WebCore::RenderThemeMac::platformAppHighlightColor const):
        (WebCore::RenderThemeMac::platformDefaultButtonTextColor const):
        (WebCore::RenderThemeMac::systemColor const):
        (WebCore::RenderThemeMac::adjustMenuListStyle const):
        * rendering/StyledMarkedText.cpp:
        (WebCore::resolveStyleForMarkedText):
        * rendering/TextPaintStyle.cpp:
        (WebCore::computeTextPaintStyle):
        * testing/Internals.cpp:
        (WebCore::Internals::setPageMuted):
        (WebCore::Internals::pageMediaState):
        (WebCore::Internals::systemColorForCSSValue):
        * xml/parser/XMLDocumentParserLibxml2.cpp:

2021-10-12  Ross Kirsling  <ross.kirsling@sony.com>

        Non-unified build fixes, October 2021 edition.
        https://bugs.webkit.org/show_bug.cgi?id=231654

        Reviewed by Don Olmstead.

        * accessibility/AccessibilityMenuListOption.cpp:
        * bindings/js/JSDOMAsyncIterator.h:
        (WebCore::JSIterator>::next):
        (WebCore::JSIterator>::runNextSteps):
        * css/SelectorFilter.cpp:
        * css/typedom/CSSUnparsedValue.h:
        * dom/Attr.cpp:
        * dom/CustomElementReactionQueue.cpp:
        * dom/DocumentSharedObjectPool.cpp:
        * dom/ScriptRunner.cpp:
        * editing/InsertListCommand.cpp:
        * editing/SpellingCorrectionCommand.h:
        * html/HTMLFrameSetElement.h:
        * html/HTMLSourceElement.h:
        * html/HTMLTemplateElement.cpp:
        * html/MediaFragmentURIParser.cpp:
        * html/SubmitInputType.cpp:
        * page/IntersectionObserver.h:
        * page/scrolling/ScrollingCoordinatorTypes.h:
        * rendering/RenderBoxModelObject.cpp:
        * rendering/svg/RenderSVGInline.cpp:
        * rendering/svg/RenderSVGResourceContainer.cpp:
        * rendering/svg/SVGRenderingContext.cpp:
        * rendering/svg/SVGResources.cpp:
        * style/MatchedDeclarationsCache.cpp:
        * style/RuleSetBuilder.cpp:
        * style/StyleInvalidator.h:
        * style/StyleScopeRuleSets.cpp:
        * workers/WorkerGlobalScope.cpp:

2021-10-12  Alex Christensen  <achristensen@webkit.org>

        Use std::variant instead of WTF::Variant
        https://bugs.webkit.org/show_bug.cgi?id=231629

        Reviewed by Chris Dumez.

        * Modules/async-clipboard/ClipboardItemBindingsDataSource.h:
        * Modules/cache/DOMCacheEngine.h:
        * Modules/fetch/FetchBody.h:
        * Modules/fetch/FetchBodyOwner.h:
        * Modules/fetch/FetchHeaders.h:
        * Modules/fetch/FetchRequest.h:
        * Modules/fetch/FetchResponse.h:
        * Modules/indexeddb/IDBCursor.h:
        * Modules/indexeddb/IDBDatabase.h:
        * Modules/indexeddb/IDBKey.h:
        * Modules/indexeddb/IDBKeyData.h:
        * Modules/indexeddb/IDBKeyPath.h:
        * Modules/indexeddb/IDBRequest.h:
        * Modules/mediacontrols/MediaControlsHost.cpp:
        (WebCore::MediaControlsHost::showMediaControlsContextMenu):
        * Modules/mediacontrols/MediaControlsHost.h:
        * Modules/mediastream/MediaDevices.cpp:
        (WebCore::createMediaConstraints):
        * Modules/mediastream/MediaDevices.h:
        * Modules/mediastream/MediaTrackConstraints.h:
        * Modules/mediastream/RTCIceServer.h:
        * Modules/mediastream/RTCPeerConnection.h:
        * Modules/mediastream/RTCRtpTransform.h:
        * Modules/mediastream/libwebrtc/LibWebRTCDataChannelHandler.h:
        * Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.h:
        * Modules/paymentrequest/PaymentMethodChangeEvent.h:
        * Modules/paymentrequest/PaymentRequest.h:
        * Modules/push-api/PushEventInit.h:
        * Modules/push-api/PushSubscriptionOptionsInit.h:
        * Modules/speech/SpeechRecognitionUpdate.h:
        * Modules/webaudio/AudioContextOptions.h:
        * Modules/webaudio/AudioNode.h:
        * Modules/webxr/WebXRWebGLLayer.h:
        * accessibility/AXObjectCache.h:
        * accessibility/AccessibilityObjectInterface.h:
        * accessibility/isolatedtree/AXIsolatedTree.h:
        * animation/EffectTiming.h:
        * animation/KeyframeEffect.cpp:
        (WebCore::KeyframeEffect::create):
        * animation/KeyframeEffect.h:
        * animation/OptionalEffectTiming.h:
        * bindings/IDLTypes.h:
        * bindings/js/BufferSource.h:
        * bindings/js/JSValueInWrappedObject.h:
        * crypto/CryptoAlgorithm.h:
        * crypto/CryptoKey.h:
        * crypto/SubtleCrypto.h:
        * crypto/parameters/CryptoAlgorithmEcdsaParams.h:
        * crypto/parameters/CryptoAlgorithmHkdfParams.h:
        * crypto/parameters/CryptoAlgorithmHmacKeyParams.h:
        * crypto/parameters/CryptoAlgorithmPbkdf2Params.h:
        * crypto/parameters/CryptoAlgorithmRsaHashedImportParams.h:
        * crypto/parameters/CryptoAlgorithmRsaHashedKeyGenParams.h:
        * css/CSSCustomPropertyValue.h:
        * css/DOMMatrix.cpp:
        (WebCore::DOMMatrix::create):
        * css/DOMMatrix.h:
        * css/DOMMatrixReadOnly.cpp:
        (WebCore::DOMMatrixReadOnly::create):
        * css/DOMMatrixReadOnly.h:
        * css/FontFace.h:
        * css/StyleRule.h:
        * css/parser/CSSPropertyParserHelpers.h:
        * css/typedom/CSSNumericValue.h:
        * css/typedom/CSSUnparsedValue.h:
        * dom/Document.h:
        * dom/DocumentMarker.h:
        * dom/Element.cpp:
        (WebCore::Element::scrollIntoView):
        (WebCore::Element::animate):
        * dom/Element.h:
        * dom/EventTarget.h:
        * dom/MessageEvent.h:
        * dom/Node.h:
        * editing/AlternativeTextController.h:
        * editing/TextCheckingHelper.cpp:
        (WebCore::TextCheckingHelper::findFirstMisspelledWordOrUngrammaticalPhrase const):
        * editing/TextCheckingHelper.h:
        * editing/TextManipulationController.h:
        * fileapi/Blob.h:
        * fileapi/FileReader.cpp:
        (WebCore::FileReader::result const):
        * fileapi/FileReader.h:
        * fileapi/NetworkSendQueue.h:
        * html/DOMFormData.h:
        * html/HTMLAllCollection.cpp:
        (WebCore::HTMLAllCollection::namedOrIndexedItemOrItems const):
        (WebCore::HTMLAllCollection::namedItemOrItems const):
        * html/HTMLAllCollection.h:
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::namedItem):
        * html/HTMLDocument.h:
        * html/HTMLFormControlsCollection.cpp:
        (WebCore::HTMLFormControlsCollection::namedItemOrItems const):
        * html/HTMLFormControlsCollection.h:
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::namedItem):
        * html/HTMLFormElement.h:
        * html/HTMLMediaElement.h:
        * html/HTMLOptionsCollection.h:
        * html/HTMLSelectElement.h:
        * html/ImageBitmap.h:
        * html/OffscreenCanvas.h:
        * html/URLSearchParams.cpp:
        (WebCore::URLSearchParams::create):
        * html/URLSearchParams.h:
        * html/canvas/CanvasRenderingContext2DBase.h:
        * html/canvas/CanvasStyle.h:
        * html/canvas/WebGL2RenderingContext.h:
        * html/canvas/WebGLAny.h:
        * html/canvas/WebGLMultiDraw.h:
        * html/canvas/WebGLRenderingContextBase.h:
        * html/track/TrackEvent.h:
        * html/track/VTTCue.h:
        * inspector/InspectorCanvas.h:
        * inspector/InspectorShaderProgram.h:
        * layout/integration/InlineIteratorBox.h:
        * layout/integration/InlineIteratorLine.h:
        * page/DiagnosticLoggingClient.h:
        * page/IntersectionObserver.h:
        * page/Page.h:
        * page/Performance.h:
        * page/PerformanceMeasureOptions.h:
        * page/PerformanceUserTiming.cpp:
        (WebCore::PerformanceUserTiming::convertMarkToTimestamp const):
        * page/PerformanceUserTiming.h:
        * page/scrolling/ScrollingCoordinator.h:
        * platform/PasteboardCustomData.cpp:
        (WebCore::copyPlatformData):
        (WebCore::PasteboardCustomData::forEachPlatformStringOrBuffer const):
        * platform/PasteboardCustomData.h:
        * platform/SharedBuffer.h:
        * platform/audio/AudioStreamDescription.h:
        * platform/encryptedmedia/CDMProxy.h:
        * platform/graphics/DecodingOptions.h:
        * platform/graphics/FontCascadeDescription.h:
        * platform/graphics/Gradient.h:
        * platform/graphics/InlinePathData.h:
        * platform/graphics/cocoa/SourceBufferParser.h:
        * platform/graphics/cocoa/SourceBufferParserWebM.h:
        * platform/graphics/displaylists/DisplayListResourceHeap.h:
        * platform/mediastream/mac/DisplayCaptureSourceMac.h:
        * platform/mock/MockMediaDevice.h:
        * platform/network/DNS.h:
        * platform/network/FormData.h:
        * platform/sql/SQLValue.h:
        * platform/xr/PlatformXR.h:
        * rendering/RenderBlockFlow.h:
        * testing/TypeConversions.h:
        * workers/SharedWorker.cpp:
        (WebCore::SharedWorker::SharedWorker):
        * workers/SharedWorker.h:
        * workers/service/ExtendableMessageEvent.h:
        * workers/service/ServiceWorkerTypes.h:
        * xml/XMLHttpRequest.h:

2021-10-12  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Inline box boundaries should not prevent trailing whitespace collapsing
        https://bugs.webkit.org/show_bug.cgi?id=231614

        Reviewed by Antti Koivisto.

        This is currently papered over by webkit.org/b/231581 (not testable).

        * layout/formattingContexts/inline/InlineContentBreaker.cpp:
        (WebCore::Layout::InlineContentBreaker::ContinuousContent::append):

2021-10-12  Tim Horton  <timothy_horton@apple.com>

        Implement alternate style for textarea
        https://bugs.webkit.org/show_bug.cgi?id=231560

        Reviewed by Devin Rousso.

        * rendering/RenderThemeIOS.h:
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::paintTextFieldDecorations):
        (WebCore::RenderThemeIOS::adjustTextAreaStyle const):
        Do the same as r283962, but for <textarea>; give it an inner shadow and
        remove its border when using the alternate appearance.

2021-10-12  Kate Cheney  <katherine_cheney@apple.com>

        CSP: Implement unsafe-hashes
        https://bugs.webkit.org/show_bug.cgi?id=231313
        <rdar://problem/83724376>

        Reviewed by Brent Fulgham.

        No new tests. Existing imported web platform tests cover behavior.

        unsafe-hashes allows specific event handlers and style attributes
        while blocking all other inline script and style. To implement it,
        we pass in the code source for event handlers when we check CSP for
        inline style, event handlers and javascript: navigation targets.
        Then we compare the hash of the source with the specified hashes in 
        the CSP policy.

        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent):
        * bindings/js/JSEventListener.h:
        (WebCore::JSEventListener::code const):
        * bindings/js/JSLazyEventListener.cpp:
        (WebCore::JSLazyEventListener::initializeJSFunction const):
        * bindings/js/JSLazyEventListener.h:
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::executeJavaScriptURL):
        * dom/InlineStyleSheetOwner.cpp:
        (WebCore::InlineStyleSheetOwner::createSheet):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::styleAttributeChanged):
        There are two types of inline style, either a style tag or the style
        attribute. Style attributes are covered by unsafe-hashes and come from
        StyledElement::styleAttributeChanged, so we specify that unsafe-hashes
        should be checked.

        * loader/FrameLoader.cpp:
        (WebCore::createWindow):
        * page/csp/ContentSecurityPolicy.cpp:
        This patch updates blockedURL to be a string when reporting violations
        now that we need to report "inline" as the blocked URI in many cases.
        (WebCore::ContentSecurityPolicy::allowRunningOrDisplayingInsecureContent):
        (WebCore::ContentSecurityPolicy::checkHashAndReportViolation const):
        Refactor to separate out code to search for known hashes now that it
        is used in multiple places.

        (WebCore::ContentSecurityPolicy::allowJavaScriptURLs const):
        (WebCore::ContentSecurityPolicy::allowInlineEventHandlers const):
        (WebCore::ContentSecurityPolicy::allowNonParserInsertedScripts const):
        (WebCore::ContentSecurityPolicy::allowInlineScript const):
        (WebCore::ContentSecurityPolicy::allowInlineStyle const):
        (WebCore::ContentSecurityPolicy::allowEval const):
        (WebCore::ContentSecurityPolicy::allowFrameAncestors const):
        (WebCore::ContentSecurityPolicy::allowPluginType const):
        (WebCore::ContentSecurityPolicy::allowObjectFromSource const):
        (WebCore::ContentSecurityPolicy::allowChildFrameFromSource const):
        (WebCore::ContentSecurityPolicy::allowResourceFromSource const):
        (WebCore::ContentSecurityPolicy::allowConnectToSource const):
        (WebCore::ContentSecurityPolicy::allowBaseURI const):
        (WebCore::ContentSecurityPolicy::reportViolation const):
        * page/csp/ContentSecurityPolicy.h:
        * page/csp/ContentSecurityPolicyDirectiveList.cpp:
        (WebCore::checkUnsafeHashes):
        (WebCore::ContentSecurityPolicyDirectiveList::violatedDirectiveForUnsafeHashScript const):
        (WebCore::ContentSecurityPolicyDirectiveList::violatedDirectiveForUnsafeHashStyle const):
        * page/csp/ContentSecurityPolicyDirectiveList.h:
        * page/csp/ContentSecurityPolicySourceList.cpp:
        (WebCore::ContentSecurityPolicySourceList::parseSource):
        * page/csp/ContentSecurityPolicySourceList.h:
        (WebCore::ContentSecurityPolicySourceList::allowUnsafeHashes const):
        * page/csp/ContentSecurityPolicySourceListDirective.cpp:
        (WebCore::ContentSecurityPolicySourceListDirective::allowUnsafeHashes const):
        * page/csp/ContentSecurityPolicySourceListDirective.h:

2021-10-12  Simon Fraser  <simon.fraser@apple.com>

        Scrolling thread animations need to commit layers on the scrolling thread
        https://bugs.webkit.org/show_bug.cgi?id=231593

        Reviewed by Tim Horton.

        Export some AsyncScrollingCoordinator functions.

        * WebCore.xcodeproj/project.pbxproj:
        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/mac/ScrollingCoordinatorMac.h:

2021-10-12  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Do not collapse whitespace with zero-width space separator in-between
        https://bugs.webkit.org/show_bug.cgi?id=231595

        Reviewed by Antti Koivisto.

        Zero-width space characters separate individual sequence of whitespace (and non-whitepsace) content so we
        should no collapse the before/after whitespace.

        Test: fast/text/whitespace-with-zero-width-space-in-between.html

        * layout/formattingContexts/inline/InlineLine.cpp:
        (WebCore::Layout::Line::appendTextContent):
        * layout/formattingContexts/inline/InlineTextItem.cpp:
        (WebCore::Layout::InlineTextItem::isZeroWidthSpaceSeparator const):
        (WebCore::Layout::InlineTextItem::isEmptyContent const): Deleted.
        * layout/formattingContexts/inline/InlineTextItem.h:
        (WebCore::Layout::InlineTextItem::width const):

2021-10-12  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] LazyLineBreakIterator should be correctly setup for the prior context case
        https://bugs.webkit.org/show_bug.cgi?id=231608

        Reviewed by Antti Koivisto.

        Pass in the locale and the breaking mode values when constructing the LazyLineBreakIterator for finding soft wrap opportunities across layout boxes.

        Test: fast/inline/line-break-loose-with-inline-box-boundary.html

        * layout/formattingContexts/inline/InlineLineBuilder.cpp:
        (WebCore::Layout::endsWithSoftWrapOpportunity):

2021-10-12  Sihui Liu  <sihui_liu@apple.com>

        Implement FileSystemSyncAccessHandle read() and write()
        https://bugs.webkit.org/show_bug.cgi?id=231466
        <rdar://problem/84050394>

        Reviewed by Youenn Fablet.

        Implement read() and write() according to proposal:
        https://github.com/WICG/file-system-access/blob/main/AccessHandle.md

        Test: storage/filesystemaccess/sync-access-handle-read-write-worker.html
        API test: FileSystemAccess.ProcessCrashDuringWrite

        * Modules/filesystemaccess/FileSystemFileHandle.cpp:
        (WebCore::FileSystemFileHandle::createSyncAccessHandle):
        (WebCore::FileSystemFileHandle::getSize):
        (WebCore::FileSystemFileHandle::truncate):
        (WebCore::FileSystemFileHandle::flush):
        * Modules/filesystemaccess/FileSystemFileHandle.h:
        * Modules/filesystemaccess/FileSystemStorageConnection.h:
        * Modules/filesystemaccess/FileSystemSyncAccessHandle.cpp:
        (WebCore::FileSystemSyncAccessHandle::create):
        (WebCore::FileSystemSyncAccessHandle::FileSystemSyncAccessHandle):
        (WebCore::FileSystemSyncAccessHandle::truncate):
        (WebCore::FileSystemSyncAccessHandle::getSize):
        (WebCore::FileSystemSyncAccessHandle::flush):
        (WebCore::FileSystemSyncAccessHandle::close):
        (WebCore::FileSystemSyncAccessHandle::read):
        (WebCore::FileSystemSyncAccessHandle::write):
        * Modules/filesystemaccess/FileSystemSyncAccessHandle.h:
        * Modules/filesystemaccess/FileSystemSyncAccessHandle.idl:
        * Modules/filesystemaccess/WorkerFileSystemStorageConnection.cpp:
        (WebCore::WorkerFileSystemStorageConnection::didCreateSyncAccessHandle):
        (WebCore::WorkerFileSystemStorageConnection::createSyncAccessHandle):
        * Modules/filesystemaccess/WorkerFileSystemStorageConnection.h:
        * bindings/js/BufferSource.h:
        (WebCore::BufferSource::mutableData const):

2021-10-12  Chris Dumez  <cdumez@apple.com>

        Decrease use of makeWeakPtr()
        https://bugs.webkit.org/show_bug.cgi?id=231615

        Reviewed by Alex Christensen.

        Decrease use of makeWeakPtr() and use WeakPtr { } directly instead.

        * Modules/encryptedmedia/MediaKeySession.cpp:
        (WebCore::MediaKeySession::generateRequest):
        (WebCore::MediaKeySession::load):
        (WebCore::MediaKeySession::update):
        (WebCore::MediaKeySession::close):
        (WebCore::MediaKeySession::remove):
        * Modules/encryptedmedia/MediaKeySystemAccess.cpp:
        (WebCore::MediaKeySystemAccess::createMediaKeys):
        * Modules/encryptedmedia/MediaKeySystemController.cpp:
        (WebCore::MediaKeySystemController::MediaKeySystemController):
        * Modules/encryptedmedia/MediaKeys.cpp:
        (WebCore::MediaKeys::MediaKeys):
        (WebCore::MediaKeys::createSession):
        * Modules/encryptedmedia/legacy/WebKitMediaKeys.cpp:
        (WebCore::WebKitMediaKeys::setMediaElement):
        * Modules/fetch/FetchBodySource.cpp:
        (WebCore::FetchBodySource::FetchBodySource):
        * Modules/fetch/FetchResponse.cpp:
        (WebCore::FetchResponse::addAbortSteps):
        * Modules/filesystemaccess/WorkerFileSystemStorageConnection.cpp:
        (WebCore::WorkerFileSystemStorageConnection::WorkerFileSystemStorageConnection):
        * Modules/gamepad/GamepadManager.cpp:
        (WebCore::GamepadManager::platformGamepadDisconnected):
        (WebCore::GamepadManager::makeGamepadVisible):
        * Modules/geolocation/Geolocation.cpp:
        (WebCore::Geolocation::Geolocation):
        * Modules/highlight/AppHighlightStorage.cpp:
        (WebCore::AppHighlightStorage::AppHighlightStorage):
        * Modules/indexeddb/IDBCursor.h:
        (WebCore::IDBCursor::setRequest):
        * Modules/indexeddb/client/IDBConnectionToServer.cpp:
        (WebCore::IDBClient::IDBConnectionToServer::IDBConnectionToServer):
        * Modules/indexeddb/server/UniqueIDBDatabaseConnection.cpp:
        (WebCore::IDBServer::UniqueIDBDatabaseConnection::UniqueIDBDatabaseConnection):
        * Modules/indexeddb/server/UniqueIDBDatabaseTransaction.cpp:
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::UniqueIDBDatabaseTransaction):
        * Modules/mediacontrols/MediaControlsHost.cpp:
        (WebCore::MediaControlsHost::MediaControlsHost):
        (WebCore::MediaControlsHost::showMediaControlsContextMenu):
        * Modules/mediasession/MediaMetadata.cpp:
        (WebCore::MediaMetadata::setMediaSession):
        * Modules/mediasession/MediaSession.cpp:
        (WebCore::MediaSession::MediaSession):
        * Modules/mediasession/MediaSessionCoordinator.cpp:
        (WebCore::MediaSessionCoordinator::setMediaSessionCoordinatorPrivate):
        (WebCore::MediaSessionCoordinator::setMediaSession):
        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::attachToElement):
        * Modules/mediastream/MediaDevices.cpp:
        (WebCore::MediaDevices::computeUserGesturePriviledge):
        (WebCore::MediaDevices::enumerateDevices):
        * Modules/mediastream/PeerConnectionBackend.cpp:
        (WebCore::PeerConnectionBackend::addIceCandidate):
        * Modules/mediastream/RTCDTMFSender.cpp:
        (WebCore::RTCDTMFSender::RTCDTMFSender):
        * Modules/mediastream/RTCIceTransport.cpp:
        (WebCore::RTCIceTransport::RTCIceTransport):
        * Modules/mediastream/RTCRtpReceiver.cpp:
        (WebCore::RTCRtpReceiver::RTCRtpReceiver):
        * Modules/mediastream/RTCRtpSFrameTransform.cpp:
        (WebCore::RTCRtpSFrameTransform::initializeTransformer):
        (WebCore::RTCRtpSFrameTransform::createStreams):
        * Modules/mediastream/RTCRtpScriptTransform.cpp:
        (WebCore::RTCRtpScriptTransform::setTransformer):
        * Modules/mediastream/RTCRtpScriptTransformer.cpp:
        (WebCore::RTCRtpScriptTransformer::start):
        * Modules/mediastream/RTCRtpSender.cpp:
        (WebCore::RTCRtpSender::RTCRtpSender):
        (WebCore::RTCRtpSender::replaceTrack):
        * Modules/mediastream/RTCRtpTransceiver.cpp:
        (WebCore::RTCRtpTransceiver::setConnection):
        * Modules/mediastream/libwebrtc/LibWebRTCDataChannelHandler.cpp:
        (WebCore::LibWebRTCDataChannelHandler::setClient):
        * Modules/mediastream/libwebrtc/LibWebRTCDtlsTransportBackend.cpp:
        (WebCore::LibWebRTCDtlsTransportBackendObserver::LibWebRTCDtlsTransportBackendObserver):
        * Modules/mediastream/libwebrtc/LibWebRTCIceTransportBackend.cpp:
        (WebCore::LibWebRTCIceTransportBackendObserver::LibWebRTCIceTransportBackendObserver):
        * Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.cpp:
        (WebCore::LibWebRTCRtpSenderBackend::LibWebRTCRtpSenderBackend):
        (WebCore::LibWebRTCRtpSenderBackend::startSource):
        * Modules/mediastream/libwebrtc/LibWebRTCSctpTransportBackend.cpp:
        (WebCore::LibWebRTCSctpTransportBackendObserver::LibWebRTCSctpTransportBackendObserver):
        * Modules/paymentrequest/PaymentResponse.cpp:
        * Modules/permissions/Permissions.cpp:
        (WebCore::Permissions::Permissions):
        * Modules/plugins/QuickTimePluginReplacement.mm:
        (WebCore::QuickTimePluginReplacement::QuickTimePluginReplacement):
        * Modules/plugins/YouTubePluginReplacement.cpp:
        (WebCore::YouTubePluginReplacement::YouTubePluginReplacement):
        * Modules/remoteplayback/RemotePlayback.cpp:
        (WebCore::RemotePlayback::RemotePlayback):
        * Modules/speech/DOMWindowSpeechSynthesis.cpp:
        (WebCore::DOMWindowSpeechSynthesis::speechSynthesis):
        * Modules/speech/SpeechRecognitionCaptureSourceImpl.cpp:
        (WebCore::SpeechRecognitionCaptureSourceImpl::SpeechRecognitionCaptureSourceImpl):
        (WebCore::SpeechRecognitionCaptureSourceImpl::updateDataSource):
        * Modules/speech/SpeechRecognizer.cpp:
        (WebCore::SpeechRecognizer::startCapture):
        * Modules/speech/SpeechSynthesis.cpp:
        (WebCore::SpeechSynthesis::SpeechSynthesis):
        * Modules/speech/cocoa/SpeechRecognizerCocoa.mm:
        (WebCore::SpeechRecognizer::startRecognition):
        * Modules/storage/StorageManager.cpp:
        (WebCore::StorageManager::StorageManager):
        * Modules/storage/WorkerStorageConnection.cpp:
        (WebCore::WorkerStorageConnection::WorkerStorageConnection):
        * Modules/webaudio/AudioNode.cpp:
        (WebCore::AudioNode::toWeakOrStrongContext):
        * Modules/webaudio/AudioSummingJunction.cpp:
        (WebCore::AudioSummingJunction::AudioSummingJunction):
        * Modules/webaudio/AudioWorklet.cpp:
        (WebCore::AudioWorklet::AudioWorklet):
        * Modules/webaudio/AudioWorkletMessagingProxy.cpp:
        (WebCore::AudioWorkletMessagingProxy::AudioWorkletMessagingProxy):
        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::WebSocketChannel):
        * Modules/webxr/WebXRInputSource.cpp:
        (WebCore::WebXRInputSource::WebXRInputSource):
        * Modules/webxr/WebXRInputSpace.cpp:
        (WebCore::WebXRInputSpace::WebXRInputSpace):
        * Modules/webxr/WebXRReferenceSpace.cpp:
        (WebCore::WebXRReferenceSpace::WebXRReferenceSpace):
        * Modules/webxr/WebXRRenderState.h:
        (WebCore::WebXRRenderState::setOutputCanvas):
        * Modules/webxr/WebXRRigidTransform.cpp:
        (WebCore::WebXRRigidTransform::inverse):
        * Modules/webxr/WebXRSession.cpp:
        (WebCore::WebXRSession::WebXRSession):
        * Modules/webxr/WebXRSpace.cpp:
        (WebCore::WebXRViewerSpace::WebXRViewerSpace):
        * Modules/webxr/WebXRSystem.cpp:
        (WebCore::WebXRSystem::WebXRSystem):
        (WebCore::WebXRSystem::ensureImmersiveXRDeviceIsSelected):
        (WebCore::WebXRSystem::registerSimulatedXRDeviceForTesting):
        (WebCore::WebXRSystem::unregisterSimulatedXRDeviceForTesting):
        * animation/AnimationTimeline.cpp:
        (WebCore::AnimationTimeline::animationTimingDidChange):
        * animation/DeclarativeAnimation.cpp:
        (WebCore::DeclarativeAnimation::DeclarativeAnimation):
        * animation/DocumentTimeline.cpp:
        (WebCore::DocumentTimeline::DocumentTimeline):
        * animation/KeyframeEffectStack.cpp:
        (WebCore::KeyframeEffectStack::addEffect):
        * bindings/js/JSLazyEventListener.cpp:
        (WebCore::JSLazyEventListener::create):
        * bindings/js/ScriptCachedFrameData.cpp:
        (WebCore::ScriptCachedFrameData::restore):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::initScriptForWindowProxy):
        * bindings/js/WindowProxy.cpp:
        (WebCore::WindowProxy::WindowProxy):
        (WebCore::WindowProxy::setDOMWindow):
        * crypto/SubtleCrypto.cpp:
        (WebCore::getPromise):
        (WebCore::SubtleCrypto::encrypt):
        (WebCore::SubtleCrypto::decrypt):
        (WebCore::SubtleCrypto::sign):
        (WebCore::SubtleCrypto::verify):
        (WebCore::SubtleCrypto::digest):
        (WebCore::SubtleCrypto::generateKey):
        (WebCore::SubtleCrypto::deriveKey):
        (WebCore::SubtleCrypto::deriveBits):
        (WebCore::SubtleCrypto::importKey):
        (WebCore::SubtleCrypto::exportKey):
        (WebCore::SubtleCrypto::wrapKey):
        (WebCore::SubtleCrypto::unwrapKey):
        * css/CSSFontFace.cpp:
        (WebCore::CSSFontFace::CSSFontFace):
        (WebCore::CSSFontFace::wrapper):
        (WebCore::CSSFontFace::setWrapper):
        * css/CSSFontFaceSet.cpp:
        (WebCore::CSSFontFaceSet::CSSFontFaceSet):
        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::CSSFontFaceSource):
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::CSSFontSelector):
        * css/MediaQueryEvaluator.cpp:
        (WebCore::MediaQueryEvaluator::MediaQueryEvaluator):
        * css/MediaQueryMatcher.cpp:
        (WebCore::MediaQueryMatcher::MediaQueryMatcher):
        (WebCore::MediaQueryMatcher::addMediaQueryList):
        * css/PropertySetCSSStyleDeclaration.cpp:
        (WebCore::PropertySetCSSStyleDeclaration::wrapForDeprecatedCSSOM):
        * css/StyleSheetList.cpp:
        (WebCore::StyleSheetList::StyleSheetList):
        * css/parser/CSSDeferredParser.cpp:
        (WebCore::CSSDeferredParser::CSSDeferredParser):
        * dom/DeviceOrientationAndMotionAccessController.cpp:
        (WebCore::DeviceOrientationAndMotionAccessController::shouldAllowAccess):
        * dom/MessagePort.cpp:
        (WebCore::MessagePort::dispatchMessages):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::updateActiveTextTrackCues):
        (WebCore::HTMLMediaElement::progressEventTimerFired):
        * platform/graphics/ImageSource.cpp:
        (WebCore::ImageSource::ensureDecoderAvailable):
        * platform/graphics/avfoundation/objc/LocalSampleBufferDisplayLayer.mm:
        (WebCore::LocalSampleBufferDisplayLayer::onIrregularFrameRateNotification):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVAssetForURL):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::MediaPlayerPrivateMediaStreamAVFObjC):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::processNewVideoSample):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::ensureLayers):
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::didParseInitializationData):
        (WebCore::SourceBufferPrivateAVFObjC::append):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::videoSinkCapsChanged):
        * platform/mediarecorder/cocoa/MediaRecorderPrivateWriterCocoa.mm:
        (WebCore::MediaRecorderPrivateWriter::stopRecording):
        (WebCore::MediaRecorderPrivateWriter::fetchData):
        * platform/mediastream/cocoa/AudioMediaStreamTrackRendererCocoa.cpp:
        (WebCore::AudioMediaStreamTrackRendererCocoa::start):
        (WebCore::AudioMediaStreamTrackRendererCocoa::pushSamples):
        * platform/mock/mediasource/MockMediaPlayerMediaSource.cpp:
        (WebCore::MockMediaPlayerMediaSource::play):
        (WebCore::MockMediaPlayerMediaSource::seekWithTolerance):
        (WebCore::MockMediaPlayerMediaSource::seekCompleted):
        * testing/Internals.cpp:
        (WebCore::Internals::videoSampleAvailable):
        * testing/ServiceWorkerInternals.cpp:
        (WebCore::ServiceWorkerInternals::schedulePushEvent):
        (WebCore::ServiceWorkerInternals::lastNavigationWasAppInitiated):
        * workers/service/context/ServiceWorkerThread.cpp:
        (WebCore::ServiceWorkerThread::queueTaskToPostMessage):
        (WebCore::ServiceWorkerThread::queueTaskToFireInstallEvent):
        (WebCore::ServiceWorkerThread::queueTaskToFireActivateEvent):
        (WebCore::ServiceWorkerThread::queueTaskToFirePushEvent):
        (WebCore::ServiceWorkerThread::start):
        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::addRegistrationFromStore):
        (WebCore::SWServer::validateRegistrationDomain):
        (WebCore::SWServer::scheduleJob):
        (WebCore::SWServer::startScriptFetch):
        (WebCore::SWServer::runServiceWorkerIfNecessary):
        (WebCore::SWServer::createContextConnection):
        (WebCore::SWServer::processPushMessage):
        (WebCore::SWServer::fireFunctionalEvent):

2021-10-12  Gabriel Nava Marino  <gnavamarino@apple.com>

        ASSERT hit in surrogatePairAwareIndex and surrogatePairAwareStart lambdas for text with unpaired surrogates
        https://bugs.webkit.org/show_bug.cgi?id=231606

        Reviewed by Myles C. Maxfield.

        Tests: fast/text/word-break-column-gap-display-flex-utf16-surrogates.html
               fast/text/word-break-letter-spacing-utf16-surrogates.html
               fast/text/word-break-max-width-utf16-surrogates.html

        * layout/formattingContexts/inline/text/TextUtil.cpp:
        (WebCore::Layout::TextUtil::midWordBreak):
        Account for unpaired surrogates in surrogatePairAwareIndex and surrogatePairAwareStart lambdas
        in TextUtil::MidWordBreak TextUtil::midWordBreak 

2021-10-12  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, reverting r284022.

        Caused tests to exit early due to an assertion failure

        Reverted changeset:

        "Scrolling thread animations need to commit layers on the
        scrolling thread"
        https://bugs.webkit.org/show_bug.cgi?id=231593
        https://commits.webkit.org/r284022

2021-10-12  Myles C. Maxfield  <mmaxfield@apple.com>

        [GPU Process] Unique RenderingResourceIdentifiers Part 9: Finish migrating RemoteResourceCache to QualifiedRenderingResourceIdentifier
        https://bugs.webkit.org/show_bug.cgi?id=231414
        <rdar://problem/84015584>

        Reviewed by Said Abou-Hallawa.

        We can delete a bunch of the methods of ResourceHeapImpl because they are only used in the
        GPU Process-specific implementation.

        No new tests because there is no behavior change.

        * platform/graphics/displaylists/DisplayList.h:
        * platform/graphics/displaylists/DisplayListResourceHeap.h:
        (WebCore::DisplayList::ResourceHeap::add): Deleted.
        (WebCore::DisplayList::ResourceHeap::getImageBuffer const): Deleted.
        (WebCore::DisplayList::ResourceHeap::getNativeImage const): Deleted.
        (WebCore::DisplayList::ResourceHeap::getFont const): Deleted.
        (WebCore::DisplayList::ResourceHeap::hasImageBuffer const): Deleted.
        (WebCore::DisplayList::ResourceHeap::hasNativeImage const): Deleted.
        (WebCore::DisplayList::ResourceHeap::hasFont const): Deleted.
        (WebCore::DisplayList::ResourceHeap::removeImageBuffer): Deleted.
        (WebCore::DisplayList::ResourceHeap::removeNativeImage): Deleted.
        (WebCore::DisplayList::ResourceHeap::removeFont): Deleted.
        (WebCore::DisplayList::ResourceHeap::clear): Deleted.
        (WebCore::DisplayList::ResourceHeap::deleteAllFonts): Deleted.

2021-10-12  David Kilzer  <ddkilzer@apple.com>

        Switch WTF::bridge_cast to use type traits
        <https://webkit.org/b/231467>
        <rdar://problem/84050614>

        Reviewed by Darin Adler.

        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::addTextMarkerFor):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        - Call bridge_id_cast() with CF pointer to prevent autorelease.
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]):
        - Switch from calling RetainPtr<>::bridgingAutorelease() to
          bridge_id_cast(RetainPtr<>&&) since this prevents the objects
          from being autoreleased and prevents retain count churn since
          the lambdas return RetainPtr<id>.

2021-10-12  Simon Fraser  <simon.fraser@apple.com>

        Scrolling thread animations need to commit layers on the scrolling thread
        https://bugs.webkit.org/show_bug.cgi?id=231593

        Reviewed by Tim Horton.

        Export some AsyncScrollingCoordinator functions.

        * WebCore.xcodeproj/project.pbxproj:
        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/mac/ScrollingCoordinatorMac.h:

2021-10-12  Alex Christensen  <achristensen@webkit.org>

        Manage NetworkLoadMetrics on main thread in WebCoreNSURLSession
        https://bugs.webkit.org/show_bug.cgi?id=231557

        Reviewed by Jer Noble.

        There is evidence that r281486 wasn't quite sufficient.
        Instead of making an isolated copy when hopping threads then giving the metrics to an ObjC object,
        which can be destroyed on any thread,
        we now create the ObjC object on the main thread and destroy it on the main thread.

        * platform/network/cocoa/WebCoreNSURLSession.mm:
        (-[WebCoreNSURLSessionTaskTransactionMetrics _initWithMetrics:]):
        (-[WebCoreNSURLSessionTaskTransactionMetrics dealloc]):
        (-[WebCoreNSURLSessionTaskMetrics _initWithMetrics:]):
        (-[WebCoreNSURLSessionTaskMetrics dealloc]):
        (-[WebCoreNSURLSessionDataTask _resource:loadFinishedWithError:metrics:]):

2021-10-12  Alex Christensen  <achristensen@webkit.org>

        Use STL instead of WTF::get_if, WTF::Monostate, WTF::visit, and WTF::holds_alternative
        https://bugs.webkit.org/show_bug.cgi?id=231582

        Reviewed by Darin Adler.

        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp:
        (WebCore::ApplePayPaymentHandler::handlesIdentifier):
        * Modules/async-clipboard/ClipboardItemBindingsDataSource.cpp:
        (WebCore::ClipboardItemBindingsDataSource::invokeCompletionHandler):
        (WebCore::ClipboardItemBindingsDataSource::ClipboardItemTypeLoader::sanitizeDataIfNeeded):
        * Modules/cache/DOMCache.cpp:
        (WebCore::DOMCache::requestFromInfo):
        * Modules/fetch/FetchBody.h:
        (WebCore::FetchBody::isBlob const):
        (WebCore::FetchBody::isFormData const):
        (WebCore::FetchBody::isArrayBuffer const):
        (WebCore::FetchBody::isArrayBufferView const):
        (WebCore::FetchBody::isURLSearchParams const):
        (WebCore::FetchBody::isText const):
        * Modules/fetch/FetchHeaders.cpp:
        (WebCore::fillHeaderMap):
        * Modules/fetch/FetchRequest.cpp:
        (WebCore::FetchRequest::create):
        * Modules/indexeddb/IDBCursor.cpp:
        (WebCore::IDBCursor::continuePrimaryKey):
        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::createObjectStore):
        (WebCore::IDBDatabase::transaction):
        * Modules/indexeddb/IDBKeyPath.cpp:
        (WebCore::isIDBKeyPathValid):
        (WebCore::isolatedCopy):
        (WebCore::loggingString):
        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::createIndex):
        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::requestedIndexRecordType const):
        * Modules/indexeddb/server/IDBSerialization.cpp:
        (WebCore::serializeIDBKeyPath):
        * Modules/mediacontrols/MediaControlsHost.cpp:
        (WebCore::MediaControlsHost::displayNameForTrack):
        (WebCore::MediaControlsHost::showMediaControlsContextMenu):
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::addTransceiver):
        (WebCore::certificateTypeFromAlgorithmIdentifier):
        * Modules/mediastream/RTCRtpSFrameTransform.cpp:
        (WebCore::RTCRtpSFrameTransform::setEncryptionKey):
        * Modules/speech/SpeechRecognitionUpdate.cpp:
        (WebCore::SpeechRecognitionUpdate::create):
        * Modules/speech/SpeechRecognitionUpdate.h:
        * Modules/webxr/WebXRWebGLLayer.cpp:
        (WebCore::WebXRWebGLLayer::create):
        * animation/AnimationEffect.cpp:
        (WebCore::AnimationEffect::updateTiming):
        * animation/KeyframeEffect.cpp:
        (WebCore::processIterableKeyframes):
        (WebCore::processPropertyIndexedKeyframes):
        (WebCore::KeyframeEffect::create):
        * bindings/js/BufferSource.h:
        (WebCore::BufferSource::data const):
        (WebCore::BufferSource::length const):
        * bindings/js/IDBBindingUtilities.cpp:
        (WebCore::injectIDBKeyIntoScriptValue):
        (WebCore::maybeCreateIDBKeyFromScriptValueAndKeyPath):
        (WebCore::canInjectIDBKeyIntoScriptValue):
        (WebCore::createKeyPathArray):
        (WebCore::deserializeIDBValueWithKeyInjection):
        * crypto/SubtleCrypto.cpp:
        (WebCore::normalizeCryptoAlgorithmParameters):
        * css/CSSCustomPropertyValue.cpp:
        (WebCore::CSSCustomPropertyValue::createEmpty):
        (WebCore::CSSCustomPropertyValue::equals const):
        (WebCore::CSSCustomPropertyValue::customCSSText const):
        (WebCore::CSSCustomPropertyValue::tokens const):
        * css/CSSCustomPropertyValue.h:
        * css/StyleRule.h:
        * css/typedom/CSSUnparsedValue.cpp:
        (WebCore::CSSUnparsedValue::serialize const):
        * dom/DocumentMarker.h:
        (WebCore::DocumentMarker::description const):
        * dom/Element.cpp:
        (WebCore::Element::scrollIntoView):
        (WebCore::Element::animate):
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::addEventListenerForBindings):
        (WebCore::EventTarget::removeEventListenerForBindings):
        * editing/Editor.cpp:
        (WebCore::Editor::advanceToNextMisspelling):
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::hasMediaStreamSrcObject const):
        * html/URLSearchParams.cpp:
        (WebCore::URLSearchParams::create):
        * html/canvas/CanvasStyle.cpp:
        (WebCore::CanvasStyle::isEquivalentColor const):
        (WebCore::CanvasStyle::isEquivalent const):
        * html/canvas/CanvasStyle.h:
        (WebCore::CanvasStyle::isValid const):
        (WebCore::CanvasStyle::isCurrentColor const):
        (WebCore::CanvasStyle::canvasGradient const):
        (WebCore::CanvasStyle::canvasPattern const):
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::InspectorScopedShaderProgramHighlight::saveBlendValue):
        (WebCore::InspectorScopedShaderProgramHighlight::hasBufferBinding):
        (WebCore::InspectorScopedShaderProgramHighlight::hasFramebufferParameterAttachment):
        (WebCore::WebGLRenderingContextBase::bufferData):
        (WebCore::WebGLRenderingContextBase::bufferSubData):
        (WebCore::WebGLRenderingContextBase::getTexImageSourceSize):
        (WebCore::WebGLRenderingContextBase::texImageSourceHelper):
        * html/track/VTTCue.cpp:
        (WebCore::VTTCue::setLine):
        (WebCore::VTTCue::setPosition):
        * inspector/InspectorCanvas.cpp:
        (WebCore::InspectorCanvas::canvasContext const):
        (WebCore::InspectorCanvas::canvasElement const):
        (WebCore::InspectorCanvas::scriptExecutionContext const):
        (WebCore::InspectorCanvas::resolveContext const):
        (WebCore:: const):
        (WebCore::InspectorCanvas::buildObjectForCanvas):
        (WebCore::InspectorCanvas::indexForData):
        * inspector/InspectorCanvas.h:
        * inspector/InspectorShaderProgram.cpp:
        (WebCore::InspectorShaderProgram::program const):
        (WebCore::InspectorShaderProgram::requestShaderSource):
        (WebCore::InspectorShaderProgram::updateShader):
        (WebCore::InspectorShaderProgram::buildObjectForShaderProgram):
        * inspector/InspectorShaderProgram.h:
        * inspector/agents/InspectorIndexedDBAgent.cpp:
        (WebCore::Inspector::keyPathFromIDBKeyPath):
        * layout/integration/InlineIteratorBox.h:
        (WebCore::InlineIterator::Box::legacyInlineBox const):
        (WebCore::InlineIterator::Box::inlineBox const):
        * platform/PasteboardCustomData.cpp:
        (WebCore::copyPlatformData):
        (WebCore::PasteboardCustomData::readBuffer const):
        (WebCore::PasteboardCustomData::readString const):
        (WebCore::PasteboardCustomData::forEachPlatformString const):
        (WebCore::PasteboardCustomData::forEachPlatformStringOrBuffer const):
        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::takeData):
        (WebCore::SharedBuffer::DataSegment::data const):
        (WebCore::SharedBuffer::DataSegment::containsMappedFileData const):
        (WebCore::SharedBuffer::DataSegment::size const):
        * platform/cf/SharedBufferCF.cpp:
        (WebCore::SharedBuffer::createCFData const):
        (WebCore::SharedBuffer::hintMemoryNotNeededSoon const):
        * platform/generic/KeyedDecoderGeneric.cpp:
        (WebCore::KeyedDecoderGeneric::getPointerFromDictionaryStack):
        * platform/graphics/DecodingOptions.h:
        (WebCore::DecodingOptions::has const):
        * platform/graphics/FontCascadeFonts.cpp:
        (WebCore::realizeNextFallback):
        * platform/graphics/InlinePathData.h:
        * platform/graphics/Path.h:
        (WebCore::Path::hasInlineData const):
        * platform/graphics/cg/PathCG.cpp:
        (WebCore::Path::createCGPath const):
        (WebCore::Path::ensurePlatformPath):
        (WebCore::Path::Path):
        (WebCore::Path::transform):
        (WebCore::Path::clear):
        * platform/graphics/displaylists/DisplayListItemBuffer.cpp:
        (WebCore::DisplayList::safeCopy):
        * platform/graphics/displaylists/DisplayListItemType.cpp:
        (WebCore::DisplayList::paddedSizeOfTypeAndItemInBytes):
        (WebCore::DisplayList::displayListItemType):
        * platform/graphics/displaylists/DisplayListResourceHeap.h:
        (WebCore::DisplayList::ResourceHeap::deleteAllFonts):
        (WebCore::DisplayList::ResourceHeap::get const):
        (WebCore::DisplayList::ResourceHeap::remove):
        * platform/graphics/gstreamer/eme/CDMProxyClearKey.cpp:
        (WebCore::CDMProxyClearKey::cencSetDecryptionKey):
        * platform/graphics/gstreamer/eme/CDMProxyThunder.cpp:
        (WebCore::CDMProxyThunder::getDecryptionSession const):
        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::createItemProviderRegistrationList):
        * platform/mac/PlatformPasteboardMac.mm:
        (WebCore::PlatformPasteboard::write):
        (WebCore::createPasteboardItem):
        * platform/mock/MockMediaDevice.h:
        (WebCore::MockMediaDevice::isMicrophone const):
        (WebCore::MockMediaDevice::isSpeaker const):
        (WebCore::MockMediaDevice::isCamera const):
        (WebCore::MockMediaDevice::isDisplay const):
        * platform/mock/MockRealtimeVideoSource.cpp:
        (WebCore::MockRealtimeVideoSource::mockDisplayType const):
        * platform/mock/MockRealtimeVideoSource.h:
        (WebCore::MockRealtimeVideoSource::mockCamera const):
        (WebCore::MockRealtimeVideoSource::mockDisplay const):
        * platform/network/DNS.h:
        (WebCore::IPAddress::isIPv4 const):
        (WebCore::IPAddress::isIPv6 const):
        * platform/network/FormData.cpp:
        (WebCore::FormData::imageOrMediaFilesCount const):
        (WebCore::FormData::appendData):
        (WebCore::FormData::appendMultiPartKeyValuePairItems):
        (WebCore::FormData::appendNonMultiPartKeyValuePairItems):
        (WebCore::FormData::flatten const):
        (WebCore::FormData::containsBlobElement const):
        (WebCore::FormData::prepareForUpload):
        (WebCore::FormData::asSharedBuffer const):
        (WebCore::FormData::asBlobURL const):
        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::hasUpload const):
        * platform/network/cf/FormDataStreamCFNet.cpp:
        (WebCore::setHTTPBody):
        * platform/network/curl/CurlContext.cpp:
        (WebCore::CurlHandle::enableSSLForHost):
        * platform/network/curl/CurlSSLHandle.cpp:
        (WebCore::CurlSSLHandle::clearCACertInfo):
        * platform/network/curl/CurlSSLVerifier.cpp:
        (WebCore::CurlSSLVerifier::CurlSSLVerifier):
        * platform/network/soup/ResourceRequestSoup.cpp:
        (WebCore::ResourceRequest::updateSoupMessageBody const):
        * platform/network/soup/WebKitFormDataInputStream.cpp:
        (webkitFormDataInputStreamNew):
        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::writeCustomData):
        * platform/xr/PlatformXR.h:
        (PlatformXR::Device::FrameData::View::encode const):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::setChildrenInline):
        (WebCore::RenderBlockFlow::deleteLines):
        (WebCore::RenderBlockFlow::invalidateLineLayoutPath):
        * rendering/RenderBlockFlow.h:
        (WebCore::RenderBlockFlow::hasLineLayout const):
        (WebCore::RenderBlockFlow::hasLegacyLineLayout const):
        (WebCore::RenderBlockFlow::hasModernLineLayout const):
        * style/StyleBuilder.cpp:
        (WebCore::Style::Builder::applyCustomProperty):
        (WebCore::Style::Builder::applyProperty):
        * workers/service/ServiceWorkerJobData.cpp:
        (WebCore::ServiceWorkerJobData::serviceWorkerPageIdentifier const):
        * workers/service/context/ServiceWorkerThread.cpp:
        (WebCore::ServiceWorkerThread::queueTaskToPostMessage):
        * workers/service/server/SWServerJobQueue.cpp:
        (WebCore::SWServerJobQueue::cancelJobsFromServiceWorker):

2021-10-12  Chris Dumez  <cdumez@apple.com>

        Allow direct construction of WeakPtr without makeWeakPtr()
        https://bugs.webkit.org/show_bug.cgi?id=231580

        Reviewed by Darin Adler.

        Allow direct construction of WeakPtr without makeWeakPtr(), and deprecate makeWeakPtr().

        * Modules/applepay/PaymentCoordinator.cpp:
        (WebCore::PaymentCoordinator::canMakePaymentsWithActiveCard):
        (WebCore::PaymentCoordinator::getSetupFeatures):
        (WebCore::PaymentCoordinator::beginApplePaySetup):
        * Modules/async-clipboard/Clipboard.cpp:
        (WebCore::Clipboard::Clipboard):
        (WebCore::Clipboard::ItemWriter::ItemWriter):
        * Modules/async-clipboard/ClipboardItem.cpp:
        (WebCore::ClipboardItem::ClipboardItem):
        * Modules/async-clipboard/ClipboardItemBindingsDataSource.cpp:
        (WebCore::ClipboardItemBindingsDataSource::collectDataForWriting):
        * Modules/contact-picker/ContactsManager.cpp:
        (WebCore::ContactsManager::ContactsManager):
        * Modules/credentialmanagement/NavigatorCredentials.cpp:
        (WebCore::NavigatorCredentials::credentials):
        * Modules/encryptedmedia/MediaKeySession.cpp:
        (WebCore::MediaKeySession::generateRequest):
        (WebCore::MediaKeySession::load):
        (WebCore::MediaKeySession::update):
        (WebCore::MediaKeySession::close):
        (WebCore::MediaKeySession::remove):
        * Modules/encryptedmedia/MediaKeySystemAccess.cpp:
        (WebCore::MediaKeySystemAccess::createMediaKeys):
        * Modules/mediastream/MediaDevices.cpp:
        (WebCore::MediaDevices::listenForDeviceChanges):
        * Modules/webxr/WebXRSession.cpp:
        (WebCore::WebXRSession::requestReferenceSpace):
        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::currentModalNode):
        * accessibility/AccessibilityListBoxOption.cpp:
        (WebCore::AccessibilityListBoxOption::AccessibilityListBoxOption):
        * accessibility/AccessibilityMenuListOption.cpp:
        (WebCore::AccessibilityMenuListOption::AccessibilityMenuListOption):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::AccessibilityRenderObject):
        (WebCore::AccessibilityRenderObject::setRenderer):
        * accessibility/AccessibilitySVGRoot.cpp:
        (WebCore::AccessibilitySVGRoot::setParent):
        * accessibility/AccessibilityScrollView.cpp:
        (WebCore::AccessibilityScrollView::AccessibilityScrollView):
        * accessibility/atspi/AccessibilityRootAtspi.cpp:
        (WebCore::AccessibilityRootAtspi::AccessibilityRootAtspi):
        * animation/AnimationEffect.h:
        (WebCore::AnimationEffect::setAnimation):
        * css/typedom/CSSStyleImageValue.cpp:
        (WebCore::CSSStyleImageValue::CSSStyleImageValue):
        * dom/AbortSignal.cpp:
        (WebCore::AbortSignal::signalFollow):
        * dom/Document.cpp:
        (WebCore::Document::didLogMessage):
        (WebCore::Document::didRejectSyncXHRDuringPageDismissal):
        * dom/DocumentStorageAccess.cpp:
        (WebCore::DocumentStorageAccess::hasStorageAccess):
        (WebCore::DocumentStorageAccess::requestStorageAccess):
        (WebCore::DocumentStorageAccess::requestStorageAccessQuirk):
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::addEventListener):
        * dom/FullscreenManager.cpp:
        (WebCore::FullscreenManager::requestFullscreenForElement):
        (WebCore::FullscreenManager::exitFullscreen):
        * editing/TextManipulationController.cpp:
        (WebCore::TextManipulationController::scheduleObservationUpdate):
        * html/FileInputType.cpp:
        (WebCore::FileInputType::filesChosen):
        * html/ValidationMessage.cpp:
        (WebCore::ValidationMessage::buildBubbleTree):
        * html/shadow/MediaControlTextTrackContainerElement.cpp:
        (WebCore::MediaControlTextTrackContainerElement::updateSizes):
        * inspector/InspectorFrontendAPIDispatcher.cpp:
        (WebCore::InspectorFrontendAPIDispatcher::evaluateOrQueueExpression):
        * inspector/agents/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::recordAction):
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::computeIsDone):
        * page/ios/ContentChangeObserver.cpp:
        (WebCore::ContentChangeObserver::didFinishTransition):
        * platform/DeferrableTask.h:
        (WebCore::MainThreadDeferrableTask::scheduleTask):
        * platform/audio/mac/AudioHardwareListenerMac.cpp:
        (WebCore::AudioHardwareListenerMac::AudioHardwareListenerMac):
        * platform/cocoa/PowerSourceNotifier.mm:
        (WebCore::PowerSourceNotifier::PowerSourceNotifier):
        * platform/cocoa/RemoteCommandListenerCocoa.mm:
        (WebCore::RemoteCommandListenerCocoa::RemoteCommandListenerCocoa):
        * platform/encryptedmedia/CDMPrivate.cpp:
        (WebCore::CDMPrivate::doSupportedConfigurationStep):
        * platform/encryptedmedia/clearkey/CDMClearKey.cpp:
        (WebCore::CDMInstanceSessionClearKey::requestLicense):
        (WebCore::CDMInstanceSessionClearKey::updateLicense):
        (WebCore::CDMInstanceSessionClearKey::loadSession):
        (WebCore::CDMInstanceSessionClearKey::closeSession):
        (WebCore::CDMInstanceSessionClearKey::removeSessionData):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::setNeedsRenderingModeChanged):
        (WebCore::MediaPlayerPrivateAVFoundation::scheduleMainThreadNotification):
        (WebCore::MediaPlayerPrivateAVFoundation::dispatchNotification):
        * platform/graphics/avfoundation/objc/CDMInstanceFairPlayStreamingAVFObjC.mm:
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::updateLicense):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::didProvideRequest):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::didProvideRequests):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::didProvideRenewingRequest):
        * platform/graphics/avfoundation/objc/LocalSampleBufferDisplayLayer.mm:
        (WebCore::LocalSampleBufferDisplayLayer::requestNotificationWhenReadyForVideoData):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createVideoLayer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::checkPlayability):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::beginLoadingMetadata):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::seekToTime):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setShouldPlayToPlaybackTarget):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::MediaPlayerPrivateMediaSourceAVFObjC):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::play):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::pause):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::playAtHostTime):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::pauseAtHostTime):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::durationChanged):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::scheduleDeferredTask):
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::didParseInitializationData):
        (WebCore::SourceBufferPrivateAVFObjC::trackDidChangeEnabled):
        (WebCore::SourceBufferPrivateAVFObjC::setCDMSession):
        (WebCore::SourceBufferPrivateAVFObjC::flushVideo):
        (WebCore::SourceBufferPrivateAVFObjC::enqueueSample):
        (WebCore::SourceBufferPrivateAVFObjC::notifyClientWhenReadyForMoreSamples):
        (WebCore::SourceBufferPrivateAVFObjC::setVideoLayer):
        (WebCore::SourceBufferPrivateAVFObjC::setDecompressionSession):
        * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.mm:
        (WebCore::DataURLResourceMediaLoader::DataURLResourceMediaLoader):
        * platform/graphics/cocoa/TextTrackRepresentationCocoa.mm:
        (WebCore::TextTrackRepresentationCocoa::boundsChanged):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::handleMessage):
        (WebCore::MediaPlayerPrivateGStreamer::invalidateCachedPositionOnNextIteration const):
        (WebCore::MediaPlayerPrivateGStreamer::triggerRepaint):
        (WebCore::MediaPlayerPrivateGStreamer::initializationDataEncountered):
        * platform/mediarecorder/cocoa/MediaRecorderPrivateWriterCocoa.mm:
        (WebCore::MediaRecorderPrivateWriter::flushCompressedSampleBuffers):
        * platform/mediastream/libwebrtc/LibWebRTCDTMFSenderBackend.cpp:
        (WebCore::LibWebRTCDTMFSenderBackend::OnToneChange):
        * platform/mediastream/mac/CGDisplayStreamCaptureSource.cpp:
        (WebCore::CGDisplayStreamCaptureSource::frameAvailableHandler):
        * platform/mock/MediaPlaybackTargetPickerMock.cpp:
        (WebCore::MediaPlaybackTargetPickerMock::showPlaybackTargetPicker):
        (WebCore::MediaPlaybackTargetPickerMock::startingMonitoringPlaybackTargets):
        (WebCore::MediaPlaybackTargetPickerMock::setState):
        * platform/network/cocoa/CookieStorageObserver.mm:
        (WebCore::CookieStorageObserver::cookiesDidChange):
        * platform/network/cocoa/NetworkStorageSessionCocoa.mm:
        (WebCore::NetworkStorageSession::registerCookieChangeListenersIfNecessary):
        * platform/xr/openxr/PlatformXROpenXR.cpp:
        (PlatformXR::OpenXRDevice::endSession):
        (PlatformXR::OpenXRDevice::updateInteractionProfile):
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::setWidgetGeometry):
        (WebCore::RenderWidget::setWidget):
        (WebCore::RenderWidget::updateWidgetPosition):
        * testing/WebFakeXRDevice.cpp:
        (WebCore::SimulatedXRDevice::initializeTrackingAndRendering):
        * workers/WorkerRunLoop.cpp:
        (WebCore::WorkerMainRunLoop::postTaskAndTerminate):
        (WebCore::WorkerMainRunLoop::postTaskForMode):

2021-10-12  Tim Horton  <timothy_horton@apple.com>

        Add an override stylesheet for the alternate form control design
        https://bugs.webkit.org/show_bug.cgi?id=231565

        Reviewed by Devin Rousso.

        * DerivedSources.make:
        * style/UserAgentStyle.cpp:
        (WebCore::Style::UserAgentStyle::ensureDefaultStyleSheetsForElement):
        * style/UserAgentStyle.h:

2021-10-12  Kimmo Kinnunen  <kkinnunen@apple.com>

        Cocoa GraphicsContextGLOpenGL uses depth and stencil for pbuffers on ANGLE Metal
        https://bugs.webkit.org/show_bug.cgi?id=231424

        Reviewed by Dean Jackson.

        ANGLE Metal allocates depth and stencil buffers when a pbuffer is bound to
        a texture via eglBindTexImage.
        To side-step this performance issue, allocate the gl context with EGLConfig
        that disables depth and stencil. The config is used for the video texture
        upload context, video texture upload pbuffers as well as other pbuffers.

        * platform/graphics/cocoa/GraphicsContextGLOpenGLCocoa.mm:
        (WebCore::GraphicsContextGLOpenGL::GraphicsContextGLOpenGL):

2021-10-12  Tim Horton  <timothy_horton@apple.com>

        Borders are not drawn when using BifurcatedGraphicsContext
        https://bugs.webkit.org/show_bug.cgi?id=230976
        <rdar://problem/83657330>

        Reviewed by Sam Weinig.

        New API Test: BifurcatedGraphicsContextTests.Borders

        There is a minor problem with the children of bifurcated graphics contexts,
        which is that they each currently maintain their own GraphicsContextState,
        and some GraphicsContext implementations read from that state internally
        to do work (e.g. the CG context reads the StrokeStyle in drawLine()).
        This means that both children need to mirror the state of the toplevel.

        You could imagine merging changes to m_state in each context's implementation
        of updateState(), but A) updateState is called in *response* to the local
        GraphicsContextState changing (so this would be a bit circular), and
        B) this would require each GraphicsContext to do this work.

        Instead, rename `updateState` to `didUpdateState` to make it more clear
        that it is in response to a change, not performing the change itself,
        and add a new `updateState`, which also merges the changes into m_state.
        BifurcatedGraphicsContext is the only client of `updateState` at the moment.

        * platform/graphics/BifurcatedGraphicsContext.cpp:
        (WebCore::BifurcatedGraphicsContext::didUpdateState):
        (WebCore::BifurcatedGraphicsContext::updateState): Deleted.
        * platform/graphics/BifurcatedGraphicsContext.h:
        Rename updateState->didUpdateState, but leave it calling updateState()
        on the children as explained above.

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContextState::mergeChanges):
        Move "merge this set of state changes" part of GraphicsContextStateChange::accumulate
        to a method on GraphicsContextState itself (resolving the FIXME and also
        separating the parts that are specific to accumulating deltas from the
        generic parts for merging changes).

        (WebCore::GraphicsContextStateChange::accumulate):
        (WebCore::GraphicsContext::updateState):
        Add updateState(), which merges the changes to the GraphicsContextState
        and then turns around and calls didUpdateState() to propagate them to
        the platform context (or whatever each implementation wants to do).

        (WebCore::GraphicsContext::setStrokeColor):
        (WebCore::GraphicsContext::setShadow):
        (WebCore::GraphicsContext::clearShadow):
        (WebCore::GraphicsContext::setFillColor):
        (WebCore::GraphicsContext::setStrokePattern):
        (WebCore::GraphicsContext::setFillPattern):
        (WebCore::GraphicsContext::setStrokeGradient):
        (WebCore::GraphicsContext::setFillGradient):
        (WebCore::GraphicsContext::setCompositeOperation):
        * platform/graphics/GraphicsContext.h:
        (WebCore::GraphicsContext::setStrokeThickness):
        (WebCore::GraphicsContext::setStrokeStyle):
        (WebCore::GraphicsContext::setFillRule):
        (WebCore::GraphicsContext::setShadowsIgnoreTransforms):
        (WebCore::GraphicsContext::setShouldAntialias):
        (WebCore::GraphicsContext::setShouldSmoothFonts):
        (WebCore::GraphicsContext::setShouldSubpixelQuantizeFonts):
        (WebCore::GraphicsContext::setImageInterpolationQuality):
        (WebCore::GraphicsContext::setAlpha):
        (WebCore::GraphicsContext::setDrawLuminanceMask):
        (WebCore::GraphicsContext::setTextDrawingMode):
        (WebCore::GraphicsContext::setUseDarkAppearance):
        * platform/graphics/NullGraphicsContext.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContextCairo::didUpdateState):
        (WebCore::GraphicsContextCairo::updateState): Deleted.
        * platform/graphics/cairo/GraphicsContextCairo.h:
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContextCG::GraphicsContextCG):
        (WebCore::GraphicsContextCG::didUpdateState):
        (WebCore::GraphicsContextCG::updateState): Deleted.
        * platform/graphics/cg/GraphicsContextCG.h:
        * platform/graphics/displaylists/DisplayListDrawGlyphsRecorderCoreText.cpp:
        (WebCore::DisplayList::DrawGlyphsRecorder::updateFillColor):
        (WebCore::DisplayList::DrawGlyphsRecorder::updateStrokeColor):
        (WebCore::DisplayList::DrawGlyphsRecorder::updateShadow):
        * platform/graphics/displaylists/DisplayListRecorder.cpp:
        (WebCore::DisplayList::Recorder::didUpdateState):
        (WebCore::DisplayList::Recorder::updateState): Deleted.
        * platform/graphics/displaylists/DisplayListRecorder.h:
        * platform/graphics/nicosia/cairo/NicosiaCairoOperationRecorder.cpp:
        (Nicosia::CairoOperationRecorder::didUpdateState):
        (Nicosia::CairoOperationRecorder::updateState): Deleted.
        * platform/graphics/nicosia/cairo/NicosiaCairoOperationRecorder.h:
        * platform/graphics/win/GraphicsContextDirect2D.cpp:
        (WebCore::GraphicsContextDirect2D::didUpdateState):
        (WebCore::GraphicsContextDirect2D::updateState): Deleted.
        Rename updateState->didUpdateState.

2021-10-12  Alex Christensen  <achristensen@webkit.org>

        Fix build with differently unified souces
        https://bugs.webkit.org/show_bug.cgi?id=231589

        Reviewed by Simon Fraser.

        shadowPaintingExtent was only defined in DisplayListRecorder.cpp and only used in DisplayListRecorderImpl.cpp

        * platform/graphics/displaylists/DisplayListRecorder.cpp:
        (WebCore::DisplayList::shadowPaintingExtent): Deleted.
        * platform/graphics/displaylists/DisplayListRecorderImpl.cpp:
        (WebCore::DisplayList::shadowPaintingExtent):

2021-10-12  Simon Fraser  <simon.fraser@apple.com>

        Have the ScrollingTree track nodes with animated scrolls
        https://bugs.webkit.org/show_bug.cgi?id=231554

        Reviewed by Tim Horton.

        A future patch will require that a ScrollingCoordinator knows when there are any nodes with
        active scroll animations running.

        Create the plumbing for this via ScrollingTree::setAnimatedScrollInProgressForNode() which
        updates a HashSet data member.

        ScrollingTreeScrollingNode subclasses which can run animations via their delegate, i.e.
        ScrollingTree{Overflow, Frame}ScrollingNode{Mac, Nicosia, iOS} now call
        willStartAnimatedScroll() if the animation started. The existing
        ScrollingTreeScrollingNode::didStopAnimatedScroll() is the book-end.

        ThreadedScrollingTree changes are a hint of things to come; we will need to tell a future
        ScrollingCoordinator subclass when scroll animations start/stop, and displayDidRefresh() and
        willStartRenderingUpdate() code need to do the same stuff when animations are running as
        they do when handling wheel events.

        * page/scrolling/AsyncScrollingCoordinator.h:
        (WebCore::AsyncScrollingCoordinator::hasNodeWithAnimatedScrollChanged):
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::isAnimatedScrollInProgressForNode):
        (WebCore::ScrollingTree::setAnimatedScrollInProgressForNode):
        (WebCore::ScrollingTree::hasNodeWithActiveAnimatedScroll):
        * page/scrolling/ScrollingTree.h:
        (WebCore::ScrollingTree::hasNodeWithAnimatedScrollChanged):
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::didStopAnimatedScroll):
        (WebCore::ScrollingTreeScrollingNode::willStartAnimatedScroll):
        * page/scrolling/ScrollingTreeScrollingNode.h:
        * page/scrolling/ThreadedScrollingTree.cpp:
        (WebCore::ThreadedScrollingTree::scrollingThreadIsActive):
        (WebCore::ThreadedScrollingTree::willStartRenderingUpdate):
        (WebCore::ThreadedScrollingTree::hasNodeWithAnimatedScrollChanged):
        (WebCore::ThreadedScrollingTree::displayDidRefresh):
        * page/scrolling/ThreadedScrollingTree.h:
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeMac::startAnimatedScrollToPosition):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::currentScrollPositionChanged):
        * page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.mm:
        (WebCore::ScrollingTreeOverflowScrollingNodeMac::startAnimatedScrollToPosition):
        * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.mm:
        * page/scrolling/nicosia/ScrollingTreeFrameScrollingNodeNicosia.cpp:
        (WebCore::ScrollingTreeFrameScrollingNodeNicosia::startAnimatedScrollToPosition):
        * page/scrolling/nicosia/ScrollingTreeOverflowScrollingNodeNicosia.cpp:
        (WebCore::ScrollingTreeOverflowScrollingNodeNicosia::startAnimatedScrollToPosition):

2021-10-12  Alex Christensen  <achristensen@webkit.org>

        Begin migration from WTF::Variant to std::variant
        https://bugs.webkit.org/show_bug.cgi?id=231086

        Reviewed by Chris Dumez.

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
        * bindings/js/JSDOMConvertUnion.h:
        * platform/network/FormData.h:
        (WebCore::FormDataElement::operator== const):

2021-10-12  Antti Koivisto  <antti@apple.com>

        [LFC][Integration] Add support for painting inline box decorations
        https://bugs.webkit.org/show_bug.cgi?id=231561

        Reviewed by Alan Bujtas.

        Add code for painting inline box backgrounds and borders with InlineBoxPainter.
        This patch does not enable anything new yet.

        * layout/integration/InlineIteratorInlineBox.cpp:
        (WebCore::InlineIterator::inlineBoxFor):
        * layout/integration/InlineIteratorInlineBox.h:
        * layout/integration/LayoutIntegrationCoverage.cpp:

        Add a new flag for background-clip:text which is not yet supported by code.
        It becomes relevant when background painting is enabled.

        (WebCore::LayoutIntegration::printReason):
        (WebCore::LayoutIntegration::canUseForRenderInlineChild):
        * layout/integration/LayoutIntegrationCoverage.h:
        * layout/integration/LayoutIntegrationLineLayout.cpp:
        (WebCore::LayoutIntegration::LineLayout::paint):

        Paint inline boxes using InlineBoxPainter.

        (WebCore::LayoutIntegration::LineLayout::paintTextBoxUsingPhysicalCoordinates): Deleted.

        Simplify the intersection code and move it to paint().

        * layout/integration/LayoutIntegrationLineLayout.h:
        * rendering/InlineBoxPainter.cpp:
        (WebCore::InlineBoxPainter::InlineBoxPainter):

        Take InlineDisplay::Box.

        * rendering/InlineBoxPainter.h:

2021-10-12  Aditya Keerthi  <akeerthi@apple.com>

        [css-ui] Fix interpolation of accent-color
        https://bugs.webkit.org/show_bug.cgi?id=231443
        rdar://84037162

        Reviewed by Antoine Quint.

        * animation/CSSPropertyAnimation.cpp:
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):

2021-10-12  Kimmo Kinnunen  <kkinnunen@apple.com>

        WebGL first clear is lost when scissor is used for preserveDrawingBuffer:true in some conditions
        https://bugs.webkit.org/show_bug.cgi?id=230618
        <rdar://problem/83668270>

        Reviewed by Dean Jackson.

        Disable scissor for the duration of the blit from drawing buffer
        to display buffer.
        Not testable via WebGL conformance test suite as it affects the compositing.

        Test: webgl/gl-clear-preserve-drawing-buffer-bug.html

        * platform/graphics/angle/GraphicsContextGLANGLE.cpp:
        (WebCore::GraphicsContextGLOpenGL::prepareTextureImpl):

2021-10-12  Tim Nguyen  <ntim@apple.com>

        Use isSameOriginAsTopDocument() in DocumentLoader::shouldOpenExternalURLsPolicyToPropagate
        https://bugs.webkit.org/show_bug.cgi?id=231539

        Reviewed by Youenn Fablet.

        No behavior change, same thing.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::shouldOpenExternalURLsPolicyToPropagate const):

2021-10-11  Saam Barati  <sbarati@apple.com>

        Remove ImplicitAddress
        https://bugs.webkit.org/show_bug.cgi?id=230820
        <rdar://problem/83826318>

        Reviewed by Yusuke Suzuki.

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateSelectorChecker):

2021-10-11  Myles C. Maxfield  <mmaxfield@apple.com>

        [GPU Process] Unique RenderingResourceIdentifiers Part 8: Consolidate DisplayList::ResourceHeap
        https://bugs.webkit.org/show_bug.cgi?id=231411
        <rdar://problem/84013167>

        Reviewed by Simon Fraser.

        Display lists need to be replayed within a context, and that context includes a collection of resources
        that the display list items might reference. For example, if there's a display list item that says to draw
        an image, the image needs to be present in the collection.

        We were representing this collection of resources as 3 independent HashMap<RenderingResourceIdentifier, T>s.
        This is kind of unfortunate, because it means 3 objects are passed around in parallel as arguments to the
        relevant places which need them. It's more elegant to wrap an object around these 3 HashMaps, to avoid
        polluting functions' parameter lists.

        Not only that, but the GPU process doesn't want the key to these HashMaps to be RenderingResourceIdentifiers.
        Instead, the GPU process wants the key to be QualifiedRenderingResourceIdentifiers (see
        https://bugs.webkit.org/show_bug.cgi?id=217638). Wrapping an object around these HashMaps allows a layer of
        indirection, where the GPU process can implement the interface of this object, but internally represent the
        HashMaps using different keys. WebCore shouldn't know about QualifiedRenderingResourceIdentifiers, so this
        layer of indirection is necessary for that goal.

        No new tests because there is no behavior change.

        * Headers.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/Font.h:
        * platform/graphics/ImageBuffer.h:
        * platform/graphics/NativeImage.h:
        * platform/graphics/displaylists/DisplayList.cpp:
        (WebCore::DisplayList::DisplayList::DisplayList):
        (WebCore::DisplayList::DisplayList::operator=):
        (WebCore::DisplayList::DisplayList::clear):
        (WebCore::DisplayList::m_nativeImages): Deleted.
        * platform/graphics/displaylists/DisplayList.h:
        (WebCore::DisplayList::DisplayList::resourceHeap const):
        (WebCore::DisplayList::DisplayList::cacheImageBuffer):
        (WebCore::DisplayList::DisplayList::cacheNativeImage):
        (WebCore::DisplayList::DisplayList::cacheFont):
        (WebCore::DisplayList::DisplayList::imageBuffers const): Deleted.
        (WebCore::DisplayList::DisplayList::nativeImages const): Deleted.
        (WebCore::DisplayList::DisplayList::fonts const): Deleted.
        * platform/graphics/displaylists/DisplayListReplayer.cpp:
        (WebCore::DisplayList::Replayer::Replayer):
        (WebCore::DisplayList::applyImageBufferItem):
        (WebCore::DisplayList::applyNativeImageItem):
        (WebCore::DisplayList::applySetStateItem):
        (WebCore::DisplayList::applyFontItem):
        (WebCore::DisplayList::Replayer::applyItem):
        * platform/graphics/displaylists/DisplayListReplayer.h:
        * platform/graphics/displaylists/DisplayListResourceHeap.h: Added.
        (WebCore::DisplayList::ResourceHeap::add):
        (WebCore::DisplayList::ResourceHeap::getImageBuffer const):
        (WebCore::DisplayList::ResourceHeap::getNativeImage const):
        (WebCore::DisplayList::ResourceHeap::getFont const):
        (WebCore::DisplayList::ResourceHeap::hasImageBuffer const):
        (WebCore::DisplayList::ResourceHeap::hasNativeImage const):
        (WebCore::DisplayList::ResourceHeap::hasFont const):
        (WebCore::DisplayList::ResourceHeap::removeImageBuffer):
        (WebCore::DisplayList::ResourceHeap::removeNativeImage):
        (WebCore::DisplayList::ResourceHeap::removeFont):
        (WebCore::DisplayList::ResourceHeap::clear):
        (WebCore::DisplayList::ResourceHeap::deleteAllFonts):

2021-10-11  Myles C. Maxfield  <mmaxfield@apple.com>

        [GPU Process] Unique RenderingResourceIdentifiers Part 6: Uniquify more of RemoteDisplayListRecorder at entry points
        https://bugs.webkit.org/show_bug.cgi?id=231552
        <rdar://problem/84130587>

        Reviewed by Wenson Hsieh.

        No new tests because there is no behavior change.

        * platform/ProcessQualified.h:
        (WebCore::ProcessQualified::operator bool const):

2021-10-11  Kiet Ho  <tho22@apple.com>

        Fix makeprop.pl to not treat "inherited: false" properties as inherited.
        https://bugs.webkit.org/show_bug.cgi?id=231533

        Reviewed by Simon Fraser.

        makeprop.pl treats a property as inherited if the "inherited" option in 
        CSSProperties.json is defined, regardless of whether the option value is 
        true or false. Fix makeprop.pl to actually consider the option value.

        * css/makeprop.pl:
        (addProperty):

2021-10-11  Tim Horton  <timothy_horton@apple.com>

        Implement alternate style for text fields
        https://bugs.webkit.org/show_bug.cgi?id=231536

        Reviewed by Wenson Hsieh.

        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::paintTextFieldDecorations):
        (WebCore::RenderTheme::paintTextAreaDecorations):
        (WebCore::RenderTheme::paintSearchFieldDecorations):
        Tighten up the types.

        * rendering/RenderThemeIOS.h:
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::adjustTextFieldStyle const):
        Drop the border and clear the background, so that we can use our
        custom inner shadow painting instead.

        (WebCore::RenderThemeIOS::paintTextFieldInnerShadow):
        (WebCore::RenderThemeIOS::paintTextFieldDecorations):
        (WebCore::RenderThemeIOS::paintTextAreaDecorations):
        (WebCore::RenderThemeIOS::paintSearchFieldDecorations):
        Paint our custom inner shadow for text fields, when using the alternate appearance.

        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::resetBorder):
        (WebCore::RenderStyle::resetBorderExceptRadius):
        Add a mechanism to reset all border properties except radius.

2021-10-11  Wenson Hsieh  <wenson_hsieh@apple.com>

        Clean up some code in DisplayList::Recorder in preparation for bug #230860
        https://bugs.webkit.org/show_bug.cgi?id=231532

        Reviewed by Myles C. Maxfield.

        See below for more details.

        * platform/graphics/Path.h:

        Add WEBCORE_EXPORT here. When building debug WebKit2, `logMessageImpl` contains logic to dump IPC arguments
        using WTF::TextStream; since a few of these new stream messages contain WebCore::Path objects, this will
        generate calls to `TextStream& operator<<(TextStream&, const Path&)` in WebKit2, which requires this function to
        be exported.

        * platform/graphics/displaylists/DisplayListRecorder.h:
        * platform/graphics/displaylists/DisplayListRecorderImpl.cpp:
        (WebCore::DisplayList::RecorderImpl::recordGetPixelBuffer): Deleted.
        (WebCore::DisplayList::RecorderImpl::recordPutPixelBuffer): Deleted.

        Remove a couple of unnecessary virtual override hooks in the base DisplayList::Recorder class. The existing
        virtual `getPixelBuffer` and `putPixelBuffer` methods are already suffificient.

        * platform/graphics/displaylists/DisplayListRecorderImpl.h:

2021-10-11  Chris Dumez  <cdumez@apple.com>

        [COOP] Crash under ReportingEndpointsCache::addEndpointFromDictionary()
        https://bugs.webkit.org/show_bug.cgi?id=231537
        <rdar://83530643>

        Reviewed by Geoffrey Garen.

        Make sure we don't crash under addEndpointFromDictionary() when the Report-To HTTP header
        contains more than one endpoint URL for a given group.

        The loop inside addEndpointFromDictionary() should bail as soon as we find a viable
        endpoint URL (since we don't currently support having several URLs for a given group).
        The crash was due to a use-after-move of the |group|.

        Test: http/wpt/cross-origin-opener-policy/report-to-multiple-endpoints.html

        * loader/ReportingEndpointsCache.cpp:
        (WebCore::ReportingEndpointsCache::addEndpointFromDictionary):

2021-10-11  Wenson Hsieh  <wenson_hsieh@apple.com>

        Introduce RemoteDisplayListRecorderProxy and RemoteDisplayListRecorder
        https://bugs.webkit.org/show_bug.cgi?id=231484

        Reviewed by Simon Fraser.

        See WebKit ChangeLog for more details.

        * platform/graphics/GraphicsContext.h:
        * platform/graphics/ImageBuffer.h:
        * platform/graphics/displaylists/DisplayListItems.h:

        Add default constructors for a couple of display list items so that they can be encoded as IPC arguments using
        SimpleArgumentCoder.

2021-10-11  Tim Nguyen  <ntim@apple.com>

        Implement new autofocus behavior
        https://bugs.webkit.org/show_bug.cgi?id=203139
        <rdar://problem/56397019>

        Reviewed by Wenson Hsieh.

        Make WebKit match the new autofocus spec:
        - https://html.spec.whatwg.org/multipage/interaction.html#the-autofocus-attribute
        - https://html.spec.whatwg.org/multipage/interaction.html#focusing-steps

        The new autofocus behavior queues up all autofocusable elements (visible or not), then
        fires autofocus asynchronously during the "update rendering" steps, unlike the old behavior
        which runs focus synchronously whenever it finds a visible autofocusable element.

        Original patch by Ryosuke Niwa.

        * dom/Document.cpp:
        (WebCore::Document::appendAutofocusCandidate):
        (WebCore::Document::flushAutofocusCandidates):
        * dom/Document.h:
        (WebCore::Document::isAutofocusProcessed const):
        (WebCore::Document::setAutofocusProcessed):
        * dom/Element.cpp:
        (WebCore::Element::runFocusingStepsForAutofocus):
        * dom/Element.h:
        * html/HTMLFormControlElement.cpp:
        (WebCore::shouldAutofocus):
        (WebCore::HTMLFormControlElement::didAttachRenderers):
        (WebCore::HTMLFormControlElement::insertedIntoAncestor):
        (WebCore::HTMLFormControlElement::runFocusingStepsForAutofocus):
        * html/HTMLFormControlElement.h:
        (WebCore::HTMLFormControlElement::hasAutofocused const): Deleted.
        (WebCore::HTMLFormControlElement::setAutofocused): Deleted.
        * page/Page.cpp:
        (WebCore::Page::updateRendering):
        * page/Page.h:

2021-10-11  Alex Christensen  <achristensen@webkit.org>

        Unified build fix
        https://bugs.webkit.org/show_bug.cgi?id=231524

        Reviewed by Chris Dumez.

        * platform/encryptedmedia/CDMProxy.cpp:

2021-10-11  Ben Nham  <nham@apple.com>

        Add push registration stubs
        https://bugs.webkit.org/show_bug.cgi?id=231064

        Reviewed by Youenn Fablet.

        Import IDL related to PushManager and implement steps 1-7 of the subscribe method as
        described in https://www.w3.org/TR/push-api/#pushmanager-interface. Further steps will be
        implemented in future patches.

        Tests: http/wpt/push-api/pushManager.any.html
               http/wpt/push-api/pushManager.any.serviceworker.html

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/push-api/PushManager.cpp: Added.
        (WebCore::PushManager::PushManager):
        (WebCore::PushManager::supportedContentEncodings):
        (WebCore::PushManager::ref const):
        (WebCore::PushManager::deref const):
        (WebCore::PushManager::subscribe):
        (WebCore::PushManager::getSubscription):
        (WebCore::PushManager::permissionState):
        * Modules/push-api/PushManager.h: Added.
        * Modules/push-api/PushManager.idl: Added.
        * Modules/push-api/PushPermissionState.h: Added.
        * Modules/push-api/PushPermissionState.idl: Added.
        * Modules/push-api/ServiceWorkerRegistration+PushAPI.idl: Added.
        * Modules/push-api/ServiceWorkerRegistrationPushAPI.cpp: Added.
        (WebCore::ServiceWorkerRegistrationPushAPI::ServiceWorkerRegistrationPushAPI):
        (WebCore::ServiceWorkerRegistrationPushAPI::pushManager):
        (WebCore::ServiceWorkerRegistrationPushAPI::from):
        (WebCore::ServiceWorkerRegistrationPushAPI::supplementName):
        * Modules/push-api/ServiceWorkerRegistrationPushAPI.h: Added.
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:
        * workers/service/ServiceWorkerRegistration.h:

2021-10-11  Chris Dumez  <cdumez@apple.com>

        DOMTimeStamp is now EpochTimeStamp
        https://bugs.webkit.org/show_bug.cgi?id=231496

        Reviewed by Sam Weinig.

        DOMTimeStamp was renamed EpochTimeStamp. There is no observable behavioral change - it's just a name change.

        Relevant WebIDL discussions/issue:
        - https://github.com/whatwg/webidl/issues/2

        Which lead to:
        - https://github.com/w3c/hr-time/pull/124

        * Headers.cmake:
        * Modules/geolocation/Geolocation.cpp:
        (WebCore::createGeolocationPosition):
        (WebCore::Geolocation::haveSuitableCachedPosition):
        * Modules/geolocation/GeolocationPosition.h:
        (WebCore::GeolocationPosition::create):
        (WebCore::GeolocationPosition::timestamp const):
        (WebCore::GeolocationPosition::GeolocationPosition):
        * Modules/geolocation/GeolocationPosition.idl:
        * Modules/notifications/Notification.idl:
        * Modules/push-api/PushSubscription.cpp:
        (WebCore::PushSubscription::PushSubscription):
        (WebCore::PushSubscription::expirationTime const):
        * Modules/push-api/PushSubscription.h:
        * Modules/push-api/PushSubscription.idl:
        * Modules/push-api/PushSubscriptionJSON.h:
        * Modules/push-api/PushSubscriptionJSON.idl:
        * Modules/push-api/PushSubscriptionOptions.h:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/scripts/IDLParser.pm:
        (addBuiltinTypedefs):
        * bindings/scripts/test/TestTypedefs.idl:
        * dom/EpochTimeStamp.h: Renamed from Source/WebCore/dom/DOMTimeStamp.h.
        (WebCore::convertSecondsToEpochTimeStamp):
        (WebCore::convertEpochTimeStampToSeconds):
        * testing/Internals.cpp:
        (WebCore::Internals::createPushSubscription):
        * testing/Internals.h:
        * testing/Internals.idl:

2021-10-11  Simon Fraser  <simon.fraser@apple.com>

        Smooth-scroll animations should run in the UI process on iOS
        https://bugs.webkit.org/show_bug.cgi?id=204936

        Reviewed by Tim Horton.

        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::handleScrollPositionRequest): On iOS scrollingTreeNodeRequestsScroll()
        doesn't handle the animated scroll, so we need to call startAnimatedScrollToPosition() from here.
        * rendering/RenderLayerScrollableArea.cpp:
        (WebCore::RenderLayerScrollableArea::scrollToOffset): call stopAsyncAnimatedScroll()
        for overflow scrolls as we do in FrameView.

2021-10-11  Alex Christensen  <achristensen@webkit.org>

        Prepare to switch from WTF::Variant to std::variant
        https://bugs.webkit.org/show_bug.cgi?id=231239

        Reviewed by Chris Dumez.

        * Modules/cache/DOMCacheEngine.cpp:
        (WebCore::DOMCacheEngine::isolatedResponseBody):
        (WebCore::DOMCacheEngine::copyResponseBody):
        * Modules/fetch/FetchBodyOwner.cpp:
        (WebCore::FetchBodyOwner::loadingException const):
        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::sourceObjectStoreIdentifier const):
        * Modules/mediacontrols/MediaControlsHost.cpp:
        (WebCore::MediaControlsHost::showMediaControlsContextMenu):
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::addIceCandidate):
        * Modules/mediastream/RTCRtpTransform.cpp:
        (WebCore::RTCRtpTransform::isAttached const):
        (WebCore::operator==):
        * Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.cpp:
        (WebCore::LibWebRTCRtpSenderBackend::videoSource):
        (WebCore::LibWebRTCRtpSenderBackend::hasSource const):
        (WebCore::operator==): Deleted.
        * Modules/webxr/WebXRFrame.cpp:
        (WebCore::WebXRFrame::getViewerPose):
        * Modules/webxr/WebXRWebGLLayer.cpp:
        (WebCore::WebXRWebGLLayer::canvas const):
        * accessibility/isolatedtree/AXIsolatedObject.cpp:
        (WebCore::AXIsolatedObject::intPointAttributeValue const):
        (WebCore::AXIsolatedObject::objectAttributeValue const):
        (WebCore::AXIsolatedObject::rectAttributeValue const):
        (WebCore::AXIsolatedObject::vectorAttributeValue const):
        (WebCore::AXIsolatedObject::optionSetAttributeValue const):
        (WebCore::AXIsolatedObject::pairAttributeValue const):
        (WebCore::AXIsolatedObject::uint64AttributeValue const):
        (WebCore::AXIsolatedObject::urlAttributeValue const):
        (WebCore::AXIsolatedObject::pathAttributeValue const):
        (WebCore::AXIsolatedObject::colorAttributeValue const):
        (WebCore::AXIsolatedObject::floatAttributeValue const):
        (WebCore::AXIsolatedObject::doubleAttributeValue const):
        (WebCore::AXIsolatedObject::unsignedAttributeValue const):
        * bindings/IDLTypes.h:
        * bindings/js/JSDOMConvertWebGL.cpp:
        (WebCore::convertToJSValue):
        * bindings/js/JSPaymentMethodChangeEventCustom.cpp:
        (WebCore::JSPaymentMethodChangeEvent::methodDetails const):
        * bindings/js/JSValueInWrappedObject.h:
        (WebCore::JSValueInWrappedObject::operator JSC::JSValue const):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeFontWeight):
        * dom/MessageEvent.cpp:
        (WebCore::MessageEvent::memoryCost const):
        * editing/Editor.cpp:
        (WebCore::Editor::advanceToNextMisspelling):
        * editing/TextManipulationController.cpp:
        (WebCore::TextManipulationController::ExclusionRule::match const):
        * html/URLSearchParams.cpp:
        (WebCore::URLSearchParams::create):
        * inspector/InspectorCanvas.cpp:
        (WebCore::InspectorCanvas::canvasContext const):
        (WebCore::InspectorCanvas::canvasElement const):
        (WebCore::InspectorCanvas::scriptExecutionContext const):
        (WebCore::InspectorCanvas::buildObjectForCanvas):
        (WebCore::InspectorCanvas::indexForData):
        * inspector/InspectorShaderProgram.cpp:
        (WebCore::InspectorShaderProgram::program const):
        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::DataSegment::data const):
        (WebCore::SharedBuffer::DataSegment::size const):
        * platform/cf/SharedBufferCF.cpp:
        (WebCore::SharedBuffer::createCFData const):
        (WebCore::SharedBuffer::hintMemoryNotNeededSoon const):
        * platform/generic/KeyedDecoderGeneric.cpp:
        (WebCore::KeyedDecoderGeneric::Dictionary::add):
        (WebCore::KeyedDecoderGeneric::getPointerFromDictionaryStack):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfTrack):
        * platform/graphics/texmap/TextureMapperPlatformLayerBuffer.cpp:
        (WebCore::TextureMapperPlatformLayerBuffer::clone):
        * platform/mock/MockMediaDevice.h:
        (WebCore::MockMediaDevice::encode const):
        * platform/network/FormData.cpp:
        (WebCore::FormData::imageOrMediaFilesCount const):
        (WebCore::FormDataElement::lengthInBytes const):
        (WebCore::FormDataElement::isolatedCopy const):
        (WebCore::FormData::appendData):
        (WebCore::FormData::flatten const):
        (WebCore::FormData::prepareForUpload):
        (WebCore::FormData::asBlobURL const):
        * platform/network/cf/FormDataStreamCFNet.cpp:
        (WebCore::advanceCurrentStream):
        (WebCore::setHTTPBody):
        * platform/network/curl/CurlContext.cpp:
        (WebCore::CurlHandle::enableSSLForHost):
        * platform/network/curl/CurlFormDataStream.cpp:
        (WebCore::CurlFormDataStream::read):
        * platform/network/curl/CurlSSLVerifier.cpp:
        (WebCore::CurlSSLVerifier::CurlSSLVerifier):
        * platform/network/soup/ResourceRequestSoup.cpp:
        (WebCore::ResourceRequest::updateSoupMessageBody const):
        * style/StyleResolveForFontRaw.cpp:
        (WebCore::Style::resolveForFontRaw):

2021-10-11  Antti Koivisto  <antti@apple.com>

        [LFC][Integration] Use inline box isFirstBox/isLastBox bits in iterator
        https://bugs.webkit.org/show_bug.cgi?id=231513

        Reviewed by Alan Bujtas.

        * layout/integration/InlineIteratorBoxModernPath.h:
        (WebCore::InlineIterator::BoxModernPath::traverseNextInlineBox):
        (WebCore::InlineIterator::BoxModernPath::traversePreviousInlineBox):

        Avoid always traversing to the end.

2021-10-11  Wenson Hsieh  <wenson_hsieh@apple.com>

        Export some display list item methods for use in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=231483

        Reviewed by Anders Carlsson.

        Add WEBCORE_EXPORT to various `apply` methods on display list items, which will allow RemoteDisplayListRecorder
        (in the GPU process, and implemented in WebKit2) to play back incoming display list items.

        * platform/graphics/displaylists/DisplayListItems.h:

2021-10-11  Alan Bujtas  <zalan@apple.com>

        LineLayoutPath::LineBoxesPath name is outdated
        https://bugs.webkit.org/show_bug.cgi?id=231494

        Reviewed by Antti Koivisto.

        * layout/integration/LayoutIntegrationCoverage.cpp:
        (WebCore::LayoutIntegration::printModernLineLayoutCoverage):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::layoutInlineChildren):
        (WebCore::RenderBlockFlow::invalidateLineLayoutPath):
        * rendering/RenderBlockFlow.h:

2021-10-11  Antti Koivisto  <antti@apple.com>

        Remove inline box decoration painting quirk
        https://bugs.webkit.org/show_bug.cgi?id=231510

        Reviewed by Alan Bujtas.

        This quirk implemented in InlineBoxPainter::constrainToLineTopAndBottomIfNeeded constraints
        painting of inline box decorations under certain narrow conditions in quirks mode.
        It has been removed from Chrome so removing it is likely web compatible.

        The quirk originated from https://trac.webkit.org/changeset/53200/webkit

        * rendering/InlineBoxPainter.cpp:
        (WebCore::InlineBoxPainter::paintMask):
        (WebCore::InlineBoxPainter::paintDecorations):
        (WebCore::InlineBoxPainter::paintFillLayer):
        (WebCore::InlineBoxPainter::constrainToLineTopAndBottomIfNeeded const): Deleted.
        * rendering/InlineBoxPainter.h:

2021-10-11  Antti Koivisto  <antti@apple.com>

        [LFC][Integration] paintFillLayerExtended should use inline iterator
        https://bugs.webkit.org/show_bug.cgi?id=231502

        Reviewed by Alan Bujtas.

        Prepare for LFC inline box painting.

        * layout/integration/InlineIteratorInlineBox.cpp:
        (WebCore::InlineIterator::InlineBox::hasClosedLeftAndRightEdge const):

        Add a shared helper.

        The answer is computed here though this information is needed for layout too.
        We should be able to consult layout to get it.

        * layout/integration/InlineIteratorInlineBox.h:
        * rendering/InlineBoxPainter.cpp:
        (WebCore::clipRectForNinePieceImageStrip):
        (WebCore::InlineBoxPainter::paintDecorations):
        (WebCore::InlineBoxPainter::paintFillLayer):
        (WebCore::InlineBoxPainter::paintBoxShadow):
        * rendering/LegacyInlineBox.h:
        * rendering/LegacyInlineFlowBox.cpp:
        (WebCore::LegacyInlineFlowBox::boxShadowCanBeAppliedToBackground const): Deleted.

        Move to the only call site as a lambda.

        * rendering/LegacyInlineFlowBox.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintBoxDecorations):
        (WebCore::RenderBox::paintBackground):
        (WebCore::RenderBox::paintFillLayer):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::getBackgroundRoundedRect const):
        (WebCore::RenderBoxModelObject::backgroundRoundedRectAdjustedForBleedAvoidance const):
        (WebCore::RenderBoxModelObject::paintMaskForTextFillBox):
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        (WebCore::RenderBoxModelObject::boxShadowShouldBeAppliedToBackground const):
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::boxShadowShouldBeAppliedToBackground const):
        * rendering/RenderImage.h:
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::paintBoxDecorations):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::boxShadowShouldBeAppliedToBackground const):
        * rendering/RenderTableCell.h:

2021-10-10  Sihui Liu  <sihui_liu@apple.com>

        Add support for iterating FileSystemDirectoryHandle
        https://bugs.webkit.org/show_bug.cgi?id=231142
        <rdar://problem/83848092>

        Reviewed by Youenn Fablet and Yusuke Suzuki.

        Introduce a new template class JSDOMAsyncIteratorBase to provide support for AsyncIterable in IDL. 
        Spec: https://webidl.spec.whatwg.org/#es-asynchronous-iterator-prototype-object.

        Since bindings code generator does not support creating specialized class for interface yet (we will do it in 
        webkit.org/b/231243), manually create a new specialized class JSFileSystemDirectoryHandleIterator
        and implement keys(), values(), and entries() of JSFileSystemDirectoryHandle as custom methods to return a 
        JSFileSystemDirectoryHandleIterator object.

        Add support for async directory iteration.
        Spec: https://wicg.github.io/file-system-access/#api-filesystemdirectoryhandle-asynciterable

        Add a new class FileSystemDirectoryHandle::Iterator, which retrieves the keys (names of children handles) on 
        initialization. In next(), it takes out a key and request to get corresponding handle from backend. If the 
        request fails, for example because file is removed after iterator initialization, it repeats the steps above 
        until a valid handle is received or keys becomes empty.

        Tests: storage/filesystemaccess/directory-handle-iteration-worker.html
               storage/filesystemaccess/directory-handle-iteration.html

        * Modules/filesystemaccess/FileSystemDirectoryHandle.cpp:
        (WebCore::FileSystemDirectoryHandle::getHandleNames):
        (WebCore::FileSystemDirectoryHandle::getHandle):
        (WebCore::FileSystemDirectoryHandle::createIterator):
        (WebCore::FileSystemDirectoryHandleIterator::create):
        (WebCore::FileSystemDirectoryHandleIterator::next):
        (WebCore::FileSystemDirectoryHandleIterator::advance):
        * Modules/filesystemaccess/FileSystemDirectoryHandle.h:
        * Modules/filesystemaccess/FileSystemDirectoryHandle.idl:
        * Modules/filesystemaccess/FileSystemFileHandle.cpp:
        (WebCore::FileSystemFileHandle::getFile):
        * Modules/filesystemaccess/FileSystemStorageConnection.h:
        * Modules/filesystemaccess/WorkerFileSystemStorageConnection.cpp:
        (WebCore::WorkerFileSystemStorageConnection::getHandleNames):
        (WebCore::WorkerFileSystemStorageConnection::didGetHandleNames):
        (WebCore::WorkerFileSystemStorageConnection::getHandle):
        (WebCore::WorkerFileSystemStorageConnection::didGetHandleWithType):
        * Modules/filesystemaccess/WorkerFileSystemStorageConnection.h:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMAsyncIterator.h: Added.
        (WebCore::JSDOMAsyncIteratorBase::createPrototype):
        (WebCore::JSDOMAsyncIteratorBase::JSDOMAsyncIteratorBase):
        (WebCore::jsPair):
        (WebCore::iteratorCreate):
        (WebCore::convertToJS):
        (WebCore::JSIterator>::destroy):
        (WebCore::JSIterator>::next):
        (WebCore::JSIterator>::runNextSteps):
        (WebCore::JSIterator>::getNextIterationResult):
        (WebCore::JSIterator>::settle):
        (WebCore::JSIterator>::fulfill):
        (WebCore::JSIterator>::reject):
        (WebCore::JSIterator>::finishCreation):
        * bindings/js/JSFileSystemDirectoryHandleCustom.cpp: Added.
        (WebCore::JSFileSystemDirectoryHandle::entries):
        (WebCore::JSFileSystemDirectoryHandle::keys):
        (WebCore::JSFileSystemDirectoryHandle::values):
        * bindings/js/JSFileSystemDirectoryHandleIterator.cpp: Added.
        (WebCore::JSFileSystemDirectoryHandleIterator::subspaceForImpl):
        (WebCore::jsFileSystemDirectoryHandleIterator_onPromiseSettledBody):
        (WebCore::JSC_DEFINE_HOST_FUNCTION):
        (WebCore::JSFileSystemDirectoryHandleIterator::createOnSettledFunction):
        (WebCore::jsFileSystemDirectoryHandleIterator_onPromiseFulfilledBody):
        (WebCore::JSFileSystemDirectoryHandleIterator::createOnFulfilledFunction):
        (WebCore::jsFileSystemDirectoryHandleIterator_onPromiseRejectedBody):
        (WebCore::JSFileSystemDirectoryHandleIterator::createOnRejectedFunction):
        * bindings/js/JSFileSystemDirectoryHandleIterator.h: Added.
        * bindings/js/WebCoreBuiltinNames.h:
        * bindings/js/WebCoreJSClientData.h:
        (WebCore::JSVMClientData::fileSystemDirectoryHandleIteratorSpace):
        (WebCore::JSVMClientData::setFileSystemDirectoryHandleIteratorSpace):

2021-10-09  Dean Jackson  <dino@apple.com>

        [WebXR] Replace the session reference in WebXRSpace subclasses with weak pointers
        https://bugs.webkit.org/show_bug.cgi?id=231482

        Reviewed by Sam Weinig.

        WebXRSpace had a pure virtual session() accessor that returned a
        reference to a WebXRSession. This made subclasses hold strong
        references to the WebXRSession, and is problematic for WebXRSpace
        subclasses that are (indirectly) owned by the WebXRSession.

        Change the accessor to return a pointer, and all the subclasses
        to use weak pointers instead.

        * Modules/webxr/WebXRBoundedReferenceSpace.h: Use a WeakPtr and change
        the constructor parameter to take a reference instead of a Ref<>.
        * Modules/webxr/WebXRBoundedReferenceSpace.cpp:
        (WebCore::WebXRBoundedReferenceSpace::create):
        (WebCore::WebXRBoundedReferenceSpace::WebXRBoundedReferenceSpace):
        (WebCore::WebXRBoundedReferenceSpace::getOffsetReferenceSpace):
        (WebCore::WebXRBoundedReferenceSpace::updateIfNeeded): Add early return.

        * Modules/webxr/WebXRFrame.cpp:
        (WebCore::WebXRFrame::populatePose): Compare pointers directly.

        * Modules/webxr/WebXRInputSpace.h: Use WeakPtr.
        * Modules/webxr/WebXRInputSpace.cpp:
        (WebCore::WebXRInputSpace::WebXRInputSpace):
        (WebCore::WebXRInputSpace::nativeOrigin const): Change this to return an
        optional so we can detect errors and raise Exceptions.

        * Modules/webxr/WebXRReferenceSpace.h: Use a WeakPtr and change
        the constructor parameter to take a reference instead of a Ref<>.
        * Modules/webxr/WebXRReferenceSpace.cpp:
        (WebCore::WebXRReferenceSpace::create):
        (WebCore::WebXRReferenceSpace::WebXRReferenceSpace):
        (WebCore::WebXRReferenceSpace::nativeOrigin const): Return an optional.
        (WebCore::WebXRReferenceSpace::getOffsetReferenceSpace):
        (WebCore::WebXRReferenceSpace::floorOriginTransform const): Return an optional.

        * Modules/webxr/WebXRSpace.cpp: Return a * instead of a &.
        (WebCore::WebXRSpace::isPositionEmulated const):
        (WebCore::WebXRViewerSpace::WebXRViewerSpace):
        (WebCore::WebXRViewerSpace::nativeOrigin const):
        * Modules/webxr/WebXRSpace.h:

2021-10-10  Alan Bujtas  <zalan@apple.com>

        [IFC][Integration] Do not bail out on missing primary font
        https://bugs.webkit.org/show_bug.cgi?id=231488

        Reviewed by Antti Koivisto.

        IFC has non-primary font support now.

        * layout/integration/LayoutIntegrationCoverage.cpp:
        (WebCore::LayoutIntegration::printReason):
        (WebCore::LayoutIntegration::canUseForFontAndText):
        * layout/integration/LayoutIntegrationCoverage.h:

2021-10-10  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Do no bail out on boundary neutral characters
        https://bugs.webkit.org/show_bug.cgi?id=231485

        Reviewed by Antti Koivisto.

        They don't affect directionality (no bidi impact), no need to take the legacy codepath.

        * layout/integration/LayoutIntegrationCoverage.cpp:
        (WebCore::LayoutIntegration::canUseForText):

2021-10-10  Jer Noble  <jer.noble@apple.com>

        [Build-time perf] Speed up the WebCore null build
        https://bugs.webkit.org/show_bug.cgi?id=231473

        Reviewed by Myles C. Maxfield.

        The DerivedSources-output.xcfilelist had a number of entries for files that no longer exist, or had been renamed.

        The "Check For Inappropriate Objective-C Class Names" and "Check For Inappropriate Files In Framework" build phases
        had no inputs or outputs listed, causing them to run every time. Define an output of an empty text file in the
        TARGET_TEMP_DIR directory that will get touched after the check, allowing the build system to do dependency checking.

        The "Make Frameworks Symbolic Link" build phase had no output defined, causing it to run every time.

        * DerivedSources-output.xcfilelist:
        * WebCore.xcodeproj/project.pbxproj:

2021-10-09  Alan Bujtas  <zalan@apple.com>

        Ideographic space behaves as breaking space
        https://bugs.webkit.org/show_bug.cgi?id=231480

        Reviewed by Antti Koivisto.

        We should be able to break at U+3000.
        See https://drafts.csswg.org/css-text-3/#word-break-property and https://www.unicode.org/reports/tr14/tr14-47.html

        * layout/formattingContexts/inline/InlineTextItem.cpp:
        (WebCore::Layout::moveToNextNonWhitespacePosition):
        * rendering/BreakLines.h:
        (WebCore::isBreakableSpace):

2021-10-09  Simon Fraser  <simon.fraser@apple.com>

        Run smooth scroll animations on the scrolling thread
        https://bugs.webkit.org/show_bug.cgi?id=231481

        Reviewed by Tim Horton.

        Implement AsyncScrollingCoordinator::requestAnimatedScrollToPosition() and stopAnimatedScroll()
        so that smooth scroll animations are dispatched to the scrolling thread.

        RequestedScrollData gains a requestType field so that we can indicate the need
        to cancel a running animation on the scrolling thread.
        
        Tested by tests in imported/w3c/web-platform-tests/css/cssom-view.

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::requestScrollPositionUpdate):
        (WebCore::AsyncScrollingCoordinator::requestAnimatedScrollToPosition):
        (WebCore::AsyncScrollingCoordinator::stopAnimatedScroll):
        * page/scrolling/ScrollingCoordinatorTypes.h:
        (WebCore::RequestedScrollData::operator== const):
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::handleScrollPositionRequest): We already cancel
        the animation each time. If this is a ScrollRequestType::CancelAnimatedScroll, there is no
        more to do.

2021-10-09  Rob Buis  <rbuis@igalia.com>

        Remove scrollbars explicitly when destroying render tree
        https://bugs.webkit.org/show_bug.cgi?id=229274

        Reviewed by Simon Fraser.

        Scrollbars in FrameViews that are hosted by RenderWidget need the RenderView
        to exist because of RenderScrollbarPart. So when we are destroying the render tree
        the RenderView will be destroyed too, so before that happens remove the scrollbars
        and its RenderScrollbarParts.

        Test: editing/inserting/insert-html-crash-02.html

        * page/FrameView.cpp:
        (WebCore::FrameView::willBeDestroyed):
        * page/FrameView.h:
        * platform/Widget.h:
        (WebCore::Widget::willBeDestroyed):
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::willBeDestroyed):

2021-10-08  Devin Rousso  <drousso@apple.com>

        [GPU Process] support rendering Apple Pay logos
        https://bugs.webkit.org/show_bug.cgi?id=230664
        <rdar://problem/83187282>

        Reviewed by Tim Horton.

        * platform/cocoa/ThemeCocoa.mm:
        (WebCore::drawApplePayButton):
        Instead of drawing directly into the `GraphicsContext::platformContext` (which will not be
        valid in the WebProcess when DOM rendering happens in the GPUProcess), first draw into a
        temporary `ImageBuffer` and then consume it to draw into the actual/used `GraphicsContext`.
        While it is possible to create a dedicated display list item for this, we don't want to do
        that because we need to load PDFs from PassKit, which are not as secure as we'd like for use
        in the GPUProcess.

2021-10-08  Devin Rousso  <drousso@apple.com>

        [iOS][GPU Process] support `<attachment>`
        https://bugs.webkit.org/show_bug.cgi?id=230781
        <rdar://problem/70884096>

        Reviewed by Myles Maxfield.

        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderAttachmentInfo::addLine):
        (WebCore::RenderAttachmentInfo::buildWrappedLines):
        (WebCore::RenderAttachmentInfo::buildSingleLine):
        (WebCore::paintAttachmentText):
        Instead of drawing directly into the `GraphicsContext::platformContext` (which will not be
        valid in the WebProcess when DOM rendering happens in the GPUProcess), use `DrawGlyphsRecorder`
        to "translate" native `CTLineDraw` into a sequence of actions from which a `GraphicsContext`
        method can be derived, thereby hooking into and benefiting from existing GPUProcess support.

        * platform/graphics/DrawGlyphsRecorder.h:
        (WebCore::DrawGlyphsRecorder::deconstructDrawGlyphs const): Renamed from `drawGlyphsDeconstruction`.
        * platform/graphics/coretext/DrawGlyphsRecorderCoreText.cpp:
        (WebCore::DrawGlyphsRecorder::DrawGlyphsRecorder):
        (WebCore::DrawGlyphsRecorder::recordDrawGlyphs):
        (WebCore::DrawGlyphsRecorder::drawGlyphs):
        (WebCore::DrawGlyphsRecorder::drawNativeText):
        * platform/graphics/harfbuzz/DrawGlyphsRecorderHarfBuzz.cpp:
        (WebCore::DrawGlyphsRecorder::DrawGlyphsRecorder):
        * platform/graphics/win/DrawGlyphsRecorderWin.cpp:
        (WebCore::DrawGlyphsRecorder::DrawGlyphsRecorder):
        Add a new parameter to `DrawGlyphsRenderer` that controls whether fonts other than the one
        initially provided to `drawGlyphs`/`drawNativeText` can be used to draw glyphs. This is only
        used by the above as we know that the initial font is a system font, and therefore that the
        fallback list will also only contain system fonts, meaning that sending the font to the
        GPUProcess is cheap (a file path instead of actual data).

        * platform/graphics/displaylists/DisplayListRecorder.h:
        * platform/graphics/displaylists/DisplayListRecorder.cpp:
        (WebCore::DisplayList::Recorder::Recorder):
        * platform/graphics/displaylists/DisplayListRecorderImpl.h:
        * platform/graphics/displaylists/DisplayListRecorderImpl.cpp:
        (WebCore::DisplayList::Recorder::RecorderImpl):
        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::displayListForTextRun const):
        Drive-by: Rename `DrawGlyphsDeconstruction` to `DeconstructDrawGlyphs` as it reads better.

2021-10-08  Aditya Keerthi  <akeerthi@apple.com>

        Add support for '-webkit-appearance: auto'
        https://bugs.webkit.org/show_bug.cgi?id=231203
        rdar://83696133

        Reviewed by Wenson Hsieh.

        The 'appearance' property allows authors to use the 'auto' keyword
        to opt widgets (any element that can have a native appearance) into
        a native appearance [1]. Elements other than widgets are rendered
        as if none had been specified.

        Since '-webkit-appearance' is a parse time alias of 'appearance',
        support '-webkit-appearance: auto' prior to unprefixing.

        The used-value for appearance (effectiveAppearance) is determined by
        the element tag and type. In the case of elements in the UA shadow
        tree, the pseudo id is used to determine the effective appearance. The
        used-values when specifying 'auto' match the default specified values
        in the UA style sheet.

        Note that additional test coverage exists in the form of web platform
        web platform tests, and is dependent on unprefixing.

        [1] https://www.w3.org/TR/css-ui-4/#valdef-appearance-auto

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator ControlPart const):
        * css/CSSProperties.json:
        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):
        * platform/ThemeTypes.cpp:
        (WebCore::operator<<):
        * platform/ThemeTypes.h:
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::adjustStyle):
        (WebCore::RenderTheme::autoAppearanceForElement const):
        * rendering/RenderTheme.h:

2021-10-08  BJ Burg  <bburg@apple.com>

        [Cocoa] Web Inspector: provide a way for _WKInspectorExtension clients to be notified when the inspected page navigates
        https://bugs.webkit.org/show_bug.cgi?id=231338
        <rdar://71200338>

        Reviewed by Devin Rousso.

        New API test: WKInspectorExtensionDelegate.InspectedPageNavigatedCallbacks

        Add plumbing for new event.

        * inspector/InspectorFrontendClient.h:
        (WebCore::InspectorFrontendClient::inspectedPageDidNavigate):

        * inspector/InspectorFrontendHost.h:
        * inspector/InspectorFrontendHost.idl:
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::inspectedPageDidNavigate):

2021-10-08  Chris Dumez  <cdumez@apple.com>

        Vectorize EqualPowerPanner::pan()
        https://bugs.webkit.org/show_bug.cgi?id=231458

        Reviewed by Eric Carlson.

        Vectorize EqualPowerPanner::pan() for performance. This is used by PannerNode.

        * platform/audio/EqualPowerPanner.cpp:
        (WebCore::EqualPowerPanner::pan):

2021-10-08  Jer Noble  <jer.noble@apple.com>

        [Build-time perf] Forward-declare more things in Element.h
        https://bugs.webkit.org/show_bug.cgi?id=231283

        Reviewed by Myles C. Maxfield.

        Replace as many #includes as possible with forward type declarations. To do so, split out the inline function
        definitions into their own ElementInlines.h header.

        Move MediaKeyMessageEventInit into its own .idl to allow the bindings generator code to include
        the two files separately, and to allow MediaKeyMessageEventInit to be forward-declared in MediaKeyMessageEvent.h.

        Move Event's enums into their own EventOptions.h header that allows those enums to be forward declared.

        Move ScrollExtents into its own ScrollExtents.h header, so that ScrollTypes.h can be freely #included without
        pulling in geometry and math headers.

        Modify some of the parameters to methods in HTMLMediaElement.h to be passed by reference or r-value reference,
        allowing those types to be forward-declared. 

        Because the SVG and RenderSVG classes rely on ElementInlines.h, their inline methods must be inlined
        as well, to ensure ElementInlines.h doesn't leak out into header includes generally.

        With these changes in place, the net cost of Element.h during a typical build has gone from ~750s to ~57s.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Headers.cmake:
        * Modules/encryptedmedia/MediaKeyMessageEvent.cpp:
        (WebCore::MediaKeyMessageEvent::message const):
        * Modules/encryptedmedia/MediaKeyMessageEvent.h:
        * Modules/encryptedmedia/MediaKeyMessageEvent.idl:
        * Modules/encryptedmedia/MediaKeyMessageEventInit.idl: Added.
        * Modules/encryptedmedia/MediaKeyMessageType.idl: Added.
        * Modules/encryptedmedia/MediaKeySession.cpp:
        * Modules/entriesapi/HTMLInputElementEntriesAPI.cpp:
        * Modules/highlight/AppHighlightStorage.cpp:
        * Modules/model-element/HTMLModelElement.cpp:
        * Modules/remoteplayback/RemotePlayback.cpp:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * accessibility/AccessibilityListBoxOption.cpp:
        * accessibility/AccessibilityRenderObject.cpp:
        * accessibility/AccessibilitySVGElement.cpp:
        * accessibility/AccessibilitySVGRoot.cpp:
        * accessibility/atk/WebKitAccessible.cpp:
        * bindings/js/JSNodeCustom.h:
        * bindings/scripts/CodeGenerator.pm:
        (GetterExpression):
        * bindings/scripts/test/JS/JSTestCEReactions.cpp:
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * css/CSSCursorImageValue.cpp:
        * css/CSSFontFaceSource.cpp:
        * css/CSSStyleSheet.cpp:
        * css/SelectorChecker.cpp:
        * dom/ContainerNode.cpp:
        * dom/DataTransferMac.mm:
        * dom/DatasetDOMStringMap.cpp:
        * dom/Document.cpp:
        * dom/DocumentInlines.h: Added.
        (WebCore::Document::textEncoding const):
        (WebCore::Document::templateDocument const):
        (WebCore::Document::existingAXObjectCache const):
        (WebCore::Document::create):
        (WebCore::Document::invalidateAccessKeyCache):
        (WebCore::Node::scriptExecutionContext const):
        * dom/Element.cpp:
        * dom/Element.h:
        (WebCore::Element::attributesIterator const): Deleted.
        (WebCore::Element::findAttributeIndexByName const): Deleted.
        (WebCore::Node::hasAttributes const): Deleted.
        (WebCore::Node::attributes const): Deleted.
        (WebCore::Node::parentElement const): Deleted.
        (WebCore::Element::rootElement const): Deleted.
        (WebCore::Element::hasAttributeWithoutSynchronization const): Deleted.
        (WebCore::Element::attributeWithoutSynchronization const): Deleted.
        (WebCore::Element::hasAttributesWithoutUpdate const): Deleted.
        (WebCore::Element::idForStyleResolution const): Deleted.
        (WebCore::Element::getIdAttribute const): Deleted.
        (WebCore::Element::getNameAttribute const): Deleted.
        (WebCore::Element::setIdAttribute): Deleted.
        (WebCore::Element::classNames const): Deleted.
        (WebCore::Element::attributeCount const): Deleted.
        (WebCore::Element::attributeAt const): Deleted.
        (WebCore::Element::findAttributeByName const): Deleted.
        (WebCore::Element::hasID const): Deleted.
        (WebCore::Element::hasClass const): Deleted.
        (WebCore::Element::hasName const): Deleted.
        (WebCore::Element::ensureUniqueElementData): Deleted.
        (WebCore::shouldIgnoreAttributeCase): Deleted.
        (WebCore::Element::getAttribute const): Deleted.
        (WebCore::isInTopLayerOrBackdrop): Deleted.
        * dom/ElementInlines.h: Added.
        (WebCore::Element::attributesIterator const):
        (WebCore::Element::findAttributeIndexByName const):
        (WebCore::Node::hasAttributes const):
        (WebCore::Node::attributes const):
        (WebCore::Node::parentElement const):
        (WebCore::Element::rootElement const):
        (WebCore::Element::hasAttributeWithoutSynchronization const):
        (WebCore::Element::attributeWithoutSynchronization const):
        (WebCore::Element::hasAttributesWithoutUpdate const):
        (WebCore::Element::idForStyleResolution const):
        (WebCore::Element::getIdAttribute const):
        (WebCore::Element::getNameAttribute const):
        (WebCore::Element::setIdAttribute):
        (WebCore::Element::classNames const):
        (WebCore::Element::attributeCount const):
        (WebCore::Element::attributeAt const):
        (WebCore::Element::findAttributeByName const):
        (WebCore::Element::hasID const):
        (WebCore::Element::hasClass const):
        (WebCore::Element::hasName const):
        (WebCore::Element::ensureUniqueElementData):
        (WebCore::shouldIgnoreAttributeCase):
        (WebCore::Element::getAttribute const):
        (WebCore::isInTopLayerOrBackdrop):
        * dom/ElementIterator.h:
        * dom/ElementIteratorAssertions.h:
        * dom/Event.h:
        * dom/EventOptions.h: Added.
        * dom/FullscreenManager.cpp:
        * dom/InlineClassicScript.cpp:
        * dom/InlineStyleSheetOwner.cpp:
        * dom/NamedNodeMap.cpp:
        * dom/Node.h:
        * dom/Position.cpp:
        * dom/Range.cpp:
        * dom/ScriptElement.cpp:
        * dom/ShadowRoot.cpp:
        * dom/SlotAssignment.cpp:
        * dom/StyledElement.cpp:
        * dom/StyledElement.h:
        * dom/Text.cpp:
        * dom/VisitedLinkState.cpp:
        * editing/Editing.cpp:
        * editing/EditingStyle.cpp:
        * editing/EditorCommand.cpp:
        * editing/FrameSelection.h:
        * editing/MarkupAccumulator.cpp:
        * editing/ModifySelectionListLevel.cpp:
        * editing/TextIterator.cpp:
        * editing/cocoa/HTMLConverter.mm:
        * editing/cocoa/WebContentReaderCocoa.mm:
        * editing/gtk/EditorGtk.cpp:
        * html/Autofill.cpp:
        * html/BaseTextInputType.cpp:
        * html/DateInputType.cpp:
        * html/DateTimeLocalInputType.cpp:
        * html/FeaturePolicy.cpp:
        * html/FormAssociatedElement.cpp:
        * html/HTMLAnchorElement.h:
        (WebCore::HTMLAnchorElement::visitedLinkHash const): Deleted.
        * html/HTMLAnchorElementInlines.h: Added.
        (WebCore::HTMLAnchorElement::visitedLinkHash const):
        * html/HTMLAreaElement.cpp:
        * html/HTMLAttachmentElement.cpp:
        * html/HTMLBaseElement.cpp:
        * html/HTMLBodyElement.cpp:
        * html/HTMLButtonElement.cpp:
        * html/HTMLCanvasElement.cpp:
        * html/HTMLCanvasElement.h:
        * html/HTMLElement.h:
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::resultForDialogSubmit const):
        * html/HTMLFormControlElement.h:
        (WebCore::HTMLFormControlElement::resultForDialogSubmit const): Deleted.
        * html/HTMLFrameElementBase.cpp:
        * html/HTMLFrameOwnerElement.cpp:
        * html/HTMLHtmlElement.cpp:
        * html/HTMLIFrameElement.cpp:
        * html/HTMLImageElement.h:
        * html/HTMLLinkElement.cpp:
        * html/HTMLMarqueeElement.cpp:
        * html/HTMLMediaElement.h:
        * html/HTMLMetaElement.cpp:
        * html/HTMLParamElement.cpp:
        * html/HTMLPlugInImageElement.cpp:
        * html/HTMLScriptElement.cpp:
        * html/HTMLSlotElement.cpp:
        * html/HTMLSourceElement.cpp:
        * html/HTMLTableCellElement.cpp:
        * html/HTMLTableColElement.cpp:
        * html/HTMLTrackElement.cpp:
        * html/HTMLVideoElement.cpp:
        * html/ImageInputType.cpp:
        * html/InputType.cpp:
        * html/MediaElementSession.cpp:
        * html/MonthInputType.cpp:
        * html/NumberInputType.cpp:
        * html/TextFieldInputType.cpp:
        * html/TimeInputType.cpp:
        * html/ValidationMessage.cpp:
        * html/WeekInputType.cpp:
        * html/parser/HTMLConstructionSite.cpp:
        * html/parser/HTMLConstructionSite.h:
        * html/parser/HTMLTreeBuilder.cpp:
        * html/track/DataCue.cpp:
        * html/track/InbandGenericTextTrack.cpp:
        * html/track/InbandTextTrack.cpp:
        * html/track/LoadableTextTrack.cpp:
        * html/track/TextTrackCue.cpp:
        * html/track/TextTrackCue.h:
        * html/track/VTTRegion.h:
        * html/track/WebVTTElement.cpp:
        * html/track/WebVTTParser.cpp:
        * inspector/InspectorOverlay.cpp:
        * inspector/InspectorStyleSheet.cpp:
        * inspector/agents/InspectorPageAgent.cpp:
        * loader/FormSubmission.cpp:
        * loader/FrameLoader.cpp:
        * loader/ImageLoader.cpp:
        * loader/cache/CachedImage.cpp:
        * loader/cache/CachedResourceLoader.cpp:
        * loader/cache/CachedResourceLoader.h:
        * loader/cache/CachedResourceRequest.h:
        * mathml/MathMLAnnotationElement.cpp:
        * mathml/MathMLElement.cpp:
        * mathml/MathMLFractionElement.cpp:
        * mathml/MathMLMencloseElement.cpp:
        * mathml/MathMLOperatorElement.cpp:
        * mathml/MathMLPresentationElement.cpp:
        * mathml/MathMLSelectElement.cpp:
        * page/CaptionUserPreferences.h:
        * page/DragController.cpp:
        * page/EventHandler.cpp:
        * page/Frame.cpp:
        * page/FrameView.cpp:
        * page/IntersectionObserver.h:
        * page/KeyboardScroll.h:
        * page/PageSerializer.cpp:
        * page/Quirks.cpp:
        * page/mac/ImageOverlayControllerMac.mm:
        * page/mac/PageMac.mm:
        * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.mm:
        * page/scrolling/nicosia/ScrollingTreeScrollingNodeDelegateNicosia.cpp:
        * platform/ScrollAnimation.h:
        * platform/ScrollAnimationKinetic.cpp:
        * platform/ScrollAnimationSmooth.cpp:
        * platform/ScrollAnimator.cpp:
        * platform/ScrollAnimator.h:
        * platform/ScrollExtents.h: Added.
        (WebCore::ScrollExtents::minimumScrollOffset const):
        (WebCore::ScrollExtents::maximumScrollOffset const):
        * platform/ScrollSnapAnimatorState.cpp:
        * platform/ScrollSnapAnimatorState.h:
        * platform/ScrollTypes.h:
        (WebCore::logicalToPhysical):
        (WebCore::ScrollExtents::minimumScrollOffset const): Deleted.
        (WebCore::ScrollExtents::maximumScrollOffset const): Deleted.
        * platform/ScrollingEffectsController.cpp:
        * platform/ScrollingEffectsController.h:
        * platform/ScrollingMomentumCalculator.h:
        * platform/SharedBuffer.cpp:
        * platform/SharedBuffer.h:
        * platform/audio/cocoa/MediaSessionManagerCocoa.mm:
        * platform/encryptedmedia/CDMLogging.cpp:
        * platform/mac/ScrollingEffectsController.mm:
        * platform/win/PasteboardWin.cpp:
        * rendering/CSSFilter.cpp:
        * rendering/HitTestResult.cpp:
        * rendering/LegacyLineLayout.cpp:
        * rendering/ReferencedSVGResources.cpp:
        * rendering/RenderBlockFlow.cpp:
        * rendering/RenderBox.cpp:
        * rendering/RenderDetailsMarker.cpp:
        * rendering/RenderElement.cpp:
        * rendering/RenderImage.cpp:
        * rendering/RenderLayer.cpp:
        * rendering/RenderLineBreak.cpp:
        * rendering/RenderListItem.cpp:
        * rendering/RenderMenuList.cpp:
        * rendering/RenderObject.h:
        * rendering/RenderSearchField.cpp:
        * rendering/RenderTableCell.cpp:
        * rendering/RenderText.cpp:
        * rendering/RenderThemeMac.mm:
        * rendering/RenderTreeAsText.cpp:
        * rendering/mathml/RenderMathMLFenced.cpp:
        * rendering/svg/RenderSVGBlock.cpp:
        * rendering/svg/RenderSVGBlock.h:
        (WebCore::RenderSVGBlock::graphicsElement const): Deleted.
        * rendering/svg/RenderSVGBlockInlines.h: Added.
        (WebCore::RenderSVGBlock::graphicsElement const):
        * rendering/svg/RenderSVGEllipse.cpp:
        * rendering/svg/RenderSVGForeignObject.cpp:
        * rendering/svg/RenderSVGGradientStop.cpp:
        * rendering/svg/RenderSVGGradientStop.h:
        * rendering/svg/RenderSVGGradientStopInlines.h: Added.
        (WebCore::RenderSVGGradientStop::element const):
        * rendering/svg/RenderSVGImage.cpp:
        * rendering/svg/RenderSVGInline.h:
        (WebCore::RenderSVGInline::graphicsElement const): Deleted.
        * rendering/svg/RenderSVGInlineInlines.h: Added.
        (WebCore::RenderSVGInline::graphicsElement const):
        * rendering/svg/RenderSVGInlineText.cpp:
        * rendering/svg/RenderSVGRect.cpp:
        * rendering/svg/RenderSVGResourceClipper.cpp:
        * rendering/svg/RenderSVGResourceClipper.h:
        * rendering/svg/RenderSVGResourceClipperInlines.h: Added.
        (WebCore::RenderSVGResourceClipper::clipPathElement const):
        (WebCore::RenderSVGResourceClipper::clipPathUnits const):
        * rendering/svg/RenderSVGResourceContainer.cpp:
        * rendering/svg/RenderSVGResourceFilter.cpp:
        * rendering/svg/RenderSVGResourceFilter.h:
        * rendering/svg/RenderSVGResourceFilterInlines.h: Added.
        (WebCore::RenderSVGResourceFilter::filterElement const):
        (WebCore::RenderSVGResourceFilter::filterUnits const):
        (WebCore::RenderSVGResourceFilter::primitiveUnits const):
        * rendering/svg/RenderSVGResourceFilterPrimitive.cpp:
        * rendering/svg/RenderSVGResourceLinearGradient.cpp:
        * rendering/svg/RenderSVGResourceLinearGradient.h:
        * rendering/svg/RenderSVGResourceLinearGradientInlines.h: Added.
        (WebCore::RenderSVGResourceLinearGradient::linearGradientElement const):
        * rendering/svg/RenderSVGResourceMarker.cpp:
        * rendering/svg/RenderSVGResourceMarker.h:
        * rendering/svg/RenderSVGResourceMarkerInlines.h: Added.
        (WebCore::RenderSVGResourceMarker::markerElement const):
        (WebCore::RenderSVGResourceMarker::markerUnits const):
        * rendering/svg/RenderSVGResourceMasker.cpp:
        * rendering/svg/RenderSVGResourceMasker.h:
        * rendering/svg/RenderSVGResourceMaskerInlines.h: Added.
        (WebCore::RenderSVGResourceMasker::maskElement const):
        (WebCore::RenderSVGResourceMasker::maskUnits const):
        (WebCore::RenderSVGResourceMasker::maskContentUnits const):
        * rendering/svg/RenderSVGResourcePattern.cpp:
        * rendering/svg/RenderSVGResourceRadialGradient.cpp:
        * rendering/svg/RenderSVGResourceRadialGradient.h:
        * rendering/svg/RenderSVGResourceRadialGradientInlines.h: Added.
        (WebCore::RenderSVGResourceRadialGradient::radialGradientElement const):
        * rendering/svg/RenderSVGRoot.cpp:
        * rendering/svg/RenderSVGShape.cpp:
        * rendering/svg/RenderSVGShape.h:
        (WebCore::RenderSVGShape::graphicsElement const): Deleted.
        * rendering/svg/RenderSVGShapeInlines.h: Added.
        (WebCore::RenderSVGShape::graphicsElement const):
        * rendering/svg/RenderSVGTSpan.h:
        * rendering/svg/RenderSVGText.cpp:
        * rendering/svg/RenderSVGTextPath.cpp:
        * rendering/svg/RenderSVGTextPath.h:
        * rendering/svg/RenderSVGTransformableContainer.cpp:
        (WebCore::RenderSVGTransformableContainer::graphicsElement):
        * rendering/svg/RenderSVGTransformableContainer.h:
        * rendering/svg/RenderSVGViewportContainer.cpp:
        * rendering/svg/SVGInlineFlowBox.cpp:
        * rendering/svg/SVGInlineTextBox.cpp:
        * rendering/svg/SVGInlineTextBox.h:
        * rendering/svg/SVGInlineTextBoxInlines.h: Added.
        (WebCore::SVGInlineTextBox::renderer const):
        (WebCore::SVGInlineTextBox::nextTextBox const):
        * rendering/svg/SVGPathData.cpp:
        * rendering/svg/SVGRenderSupport.cpp:
        * rendering/svg/SVGRenderTreeAsText.cpp:
        * rendering/svg/SVGRenderingContext.cpp:
        * rendering/svg/SVGResources.cpp:
        * rendering/svg/SVGRootInlineBox.cpp:
        * rendering/svg/SVGTextLayoutEngine.cpp:
        * rendering/svg/SVGTextQuery.cpp:
        * style/StyleAdjuster.cpp:
        * style/StyleBuilderState.cpp:
        * style/StyleChange.h:
        * style/StyleResolver.h:
        * style/StyleScope.cpp:
        * style/StyleSharingResolver.cpp:
        * svg/DocumentSVG.cpp:
        * svg/SVGAElement.cpp:
        * svg/SVGAltGlyphDefElement.cpp:
        * svg/SVGAltGlyphElement.cpp:
        * svg/SVGAnimateMotionElement.cpp:
        * svg/SVGAnimationElement.cpp:
        * svg/SVGCircleElement.cpp:
        * svg/SVGElement.cpp:
        * svg/SVGElement.h:
        (WebCore::SVGElement::invalidateSVGAttributes): Deleted.
        (WebCore::SVGElement::invalidateSVGPresentationalHintStyle): Deleted.
        (WebCore::SVGAttributeHashTranslator::hash): Deleted.
        (WebCore::SVGAttributeHashTranslator::equal): Deleted.
        (WebCore::Node::hasTagName const): Deleted.
        * svg/SVGElementInlines.h: Added.
        (WebCore::SVGElement::invalidateSVGAttributes):
        (WebCore::SVGElement::invalidateSVGPresentationalHintStyle):
        (WebCore::SVGAttributeHashTranslator::hash):
        (WebCore::SVGAttributeHashTranslator::equal):
        (WebCore::Element::hasTagName const):
        (WebCore::Node::hasTagName const):
        * svg/SVGEllipseElement.cpp:
        * svg/SVGFEComponentTransferElement.cpp:
        * svg/SVGFELightElement.cpp:
        * svg/SVGFilterElement.cpp:
        * svg/SVGFontFaceElement.cpp:
        * svg/SVGFontFaceFormatElement.cpp:
        * svg/SVGFontFaceNameElement.cpp:
        * svg/SVGFontFaceSrcElement.cpp:
        * svg/SVGFontFaceUriElement.cpp:
        * svg/SVGForeignObjectElement.cpp:
        * svg/SVGGlyphRefElement.cpp:
        * svg/SVGHKernElement.cpp:
        * svg/SVGImageElement.cpp:
        * svg/SVGImageLoader.cpp:
        * svg/SVGLengthContext.cpp:
        * svg/SVGLinearGradientElement.cpp:
        * svg/SVGLocatable.cpp:
        * svg/SVGMPathElement.cpp:
        * svg/SVGMaskElement.cpp:
        * svg/SVGPathElement.cpp:
        * svg/SVGPatternElement.cpp:
        * svg/SVGRadialGradientElement.cpp:
        * svg/SVGRectElement.cpp:
        * svg/SVGSVGElement.cpp:
        * svg/SVGStyleElement.cpp:
        * svg/SVGStyleElement.h:
        * svg/SVGTextContentElement.cpp:
        * svg/SVGTextPositioningElement.cpp:
        * svg/SVGUseElement.cpp:
        * svg/SVGVKernElement.cpp:
        * svg/animation/SVGSMILElement.cpp:
        * svg/graphics/SVGImage.cpp:
        * svg/properties/SVGAttributeAnimator.cpp:
        * xml/XPathFunctions.cpp:
        * xml/XPathNodeSet.cpp:
        * xml/XPathStep.cpp:
        * xml/parser/XMLDocumentParser.cpp:

2021-10-08  Simon Fraser  <simon.fraser@apple.com>

        Ensure that animated scrolls will run on the scrolling thread
        https://bugs.webkit.org/show_bug.cgi?id=231441

        Reviewed by Tim Horton.

        On macOS, scrolling tree commits run on the main thread (holding a lock), so we can't start
        scroll animations directly inside the commit because then they will run on the main thread.

        Fix by adding ScrollingTree::didCommitTree(), and having ThreadedScrollingTree override it
        to bounce to the scrolling tree to start animations. We also have to intercept requested scroll
        position updates via ScrollingTree::scrollingTreeNodeRequestsScroll(); ThreadedScrollingTree
        uses this to put pending animations into m_nodesWithPendingScrollAnimations.

        Now that ScrollingTreeScrollingNode::commitStateAfterChildren() responds to
        RequestedScrollPosition changes by calling handleScrollPositionRequest(), we can remove code
        in derived classes that did the same thing.

        Not yet tested because animated scrolls don't yet get to the scrolling tree.

        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::commitTreeState):
        * page/scrolling/ScrollingTree.h:
        (WebCore::ScrollingTree::scrollingTreeNodeRequestsScroll):
        (WebCore::ScrollingTree::didCommitTree):
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::commitStateAfterChildren):
        (WebCore::ScrollingTreeScrollingNode::handleScrollPositionRequest):
        * page/scrolling/ScrollingTreeScrollingNode.h:
        * page/scrolling/ThreadedScrollingTree.cpp:
        (WebCore::ThreadedScrollingTree::didCommitTree):
        (WebCore::ThreadedScrollingTree::didCommitTreeOnScrollingThread):
        (WebCore::ThreadedScrollingTree::scrollingTreeNodeRequestsScroll):
        * page/scrolling/ThreadedScrollingTree.h:
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeMac::commitStateAfterChildren):
        * page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.h:
        * page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.mm:
        (WebCore::ScrollingTreeOverflowScrollingNodeMac::commitStateAfterChildren): Deleted.

2021-10-08  Wenson Hsieh  <wenson_hsieh@apple.com>

        Split DisplayList::Recorder into an abstract base class and a concrete implementation
        https://bugs.webkit.org/show_bug.cgi?id=231404

        Reviewed by Myles Maxfield.

        This patch splits the current code in the DisplayList::Recorder class into two classes: an abstract base class
        with the existing name (DisplayList::Recorder), and a new concrete implementation of this virtual class,
        DisplayList::RecorderImpl. See below for more details.

        This refactoring will allow us to introduce a WebKit2-specific subclass of DisplayList::Recorder in a subsequent
        patch, which is similar to the existing DisplayList::Recorder object, but will record its display list items by
        sending them to the GPU Process through the IPC stream connection, rather than append them to an instance of
        DisplayList.

        * Headers.cmake:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::displayListForTextRun const):
        * platform/graphics/ca/GraphicsLayerCA.cpp:

        Change various uses of DisplayList::Recorder to DisplayList::RecorderImpl.

        (WebCore::GraphicsLayerCA::recursiveCommitChanges):
        * platform/graphics/displaylists/DisplayList.h:
        * platform/graphics/displaylists/DisplayListDrawingContext.cpp:
        (WebCore::DisplayList::DrawingContext::DrawingContext):
        * platform/graphics/displaylists/DisplayListDrawingContext.h:
        (WebCore::DisplayList::DrawingContext::DrawingContext):
        (WebCore::DisplayList::DrawingContext::recorder):
        * platform/graphics/displaylists/DisplayListImageBuffer.h:
        (WebCore::DisplayList::ImageBuffer::ImageBuffer):
        * platform/graphics/displaylists/DisplayListRecorder.cpp:

        The abstract Recorder now contains logic for mapping GraphicsContext method calls into calls to record
        individual display list items. Note that while many GraphicsContext methods correspond directly to display list
        items, some methods map to one or more display list items, such as setting state consisting only of inline POD
        data or drawing simple paths. The base class also manages updating and maintaining the state stack (a list of
        Recorder::ContextState) when modifying graphics context state.

        Importantly, this means that the abstract Recorder class does not contain either a Recorder Delegate, nor does
        it contain a DisplayList. Instead, the concrete subclass (DisplayList::RecorderImpl) now holds on to the local
        DisplayList.

        This also ensures that subclasses of DisplayList::Recorder only need to worry about "recording" display list
        items given their constituent arguments, instead of directly implementing the individual GraphicsContext drawing
        methods.

        (WebCore::DisplayList::Recorder::Recorder):
        (WebCore::DisplayList::Recorder::~Recorder):
        (WebCore::DisplayList::Recorder::appendStateChangeItem):
        (WebCore::DisplayList::Recorder::appendStateChangeItemIfNecessary):
        (WebCore::DisplayList::Recorder::setLineCap):
        (WebCore::DisplayList::Recorder::setLineDash):
        (WebCore::DisplayList::Recorder::setLineJoin):
        (WebCore::DisplayList::Recorder::setMiterLimit):
        (WebCore::DisplayList::Recorder::drawGlyphsAndCacheFont):
        (WebCore::DisplayList::Recorder::drawImageBuffer):
        (WebCore::DisplayList::Recorder::drawNativeImage):
        (WebCore::DisplayList::Recorder::drawPattern):
        (WebCore::DisplayList::Recorder::save):
        (WebCore::DisplayList::Recorder::restore):
        (WebCore::DisplayList::Recorder::translate):
        (WebCore::DisplayList::Recorder::rotate):
        (WebCore::DisplayList::Recorder::scale):
        (WebCore::DisplayList::Recorder::concatCTM):
        (WebCore::DisplayList::Recorder::setCTM):
        (WebCore::DisplayList::Recorder::beginTransparencyLayer):
        (WebCore::DisplayList::Recorder::endTransparencyLayer):
        (WebCore::DisplayList::Recorder::drawRect):
        (WebCore::DisplayList::Recorder::drawLine):
        (WebCore::DisplayList::Recorder::drawLinesForText):
        (WebCore::DisplayList::Recorder::drawDotsForDocumentMarker):
        (WebCore::DisplayList::Recorder::drawEllipse):
        (WebCore::DisplayList::Recorder::drawPath):
        (WebCore::DisplayList::Recorder::drawFocusRing):
        (WebCore::DisplayList::Recorder::fillRect):
        (WebCore::DisplayList::Recorder::fillRoundedRect):
        (WebCore::DisplayList::Recorder::fillRectWithRoundedHole):
        (WebCore::DisplayList::Recorder::fillPath):
        (WebCore::DisplayList::Recorder::fillEllipse):
        (WebCore::DisplayList::Recorder::strokeRect):
        (WebCore::DisplayList::Recorder::strokePath):
        (WebCore::DisplayList::Recorder::strokeEllipse):
        (WebCore::DisplayList::Recorder::clearRect):
        (WebCore::DisplayList::Recorder::applyStrokePattern):
        (WebCore::DisplayList::Recorder::applyFillPattern):
        (WebCore::DisplayList::Recorder::clip):
        (WebCore::DisplayList::Recorder::clipOut):
        (WebCore::DisplayList::Recorder::clipPath):
        (WebCore::DisplayList::Recorder::clipToImageBuffer):
        (WebCore::DisplayList::Recorder::clipToDrawingCommands):
        (WebCore::DisplayList::Recorder::paintFrameForMedia):
        (WebCore::DisplayList::Recorder::applyDeviceScaleFactor):
        (WebCore::DisplayList::Recorder::getPixelBuffer): Deleted.
        (WebCore::DisplayList::Recorder::putPixelBuffer): Deleted.
        (WebCore::DisplayList::Recorder::recordNativeImageUse): Deleted.
        (WebCore::DisplayList::Recorder::canAppendItemOfType const): Deleted.
        (WebCore::DisplayList::Recorder::canDrawImageBuffer const): Deleted.
        (WebCore::DisplayList::Recorder::renderingMode const): Deleted.
        (WebCore::DisplayList::Recorder::extentFromLocalBounds const): Deleted.
        * platform/graphics/displaylists/DisplayListRecorder.h:
        (WebCore::DisplayList::Recorder::recordDrawPattern):
        (WebCore::DisplayList::Recorder::ContextState::ContextState):
        (WebCore::DisplayList::Recorder::ContextState::cloneForSave const):
        (WebCore::DisplayList::Recorder::ContextState::cloneForTransparencyLayer const):
        (WebCore::DisplayList::Recorder::stateStack const):
        (WebCore::DisplayList::Recorder::isEmpty const): Deleted.
        (WebCore::DisplayList::Recorder::Delegate::~Delegate): Deleted.
        (WebCore::DisplayList::Recorder::Delegate::canAppendItemOfType): Deleted.
        (WebCore::DisplayList::Recorder::Delegate::recordNativeImageUse): Deleted.
        (WebCore::DisplayList::Recorder::Delegate::isCachedImageBuffer const): Deleted.
        (WebCore::DisplayList::Recorder::Delegate::recordFontUse): Deleted.
        (WebCore::DisplayList::Recorder::Delegate::recordImageBufferUse): Deleted.
        (WebCore::DisplayList::Recorder::Delegate::renderingMode const): Deleted.
        (WebCore::DisplayList::Recorder::flushContext): Deleted.
        (WebCore::DisplayList::Recorder::append): Deleted.
        (WebCore::DisplayList::Recorder::itemNeedsState): Deleted.
        * platform/graphics/displaylists/DisplayListRecorderImpl.cpp: Added.
        (WebCore::DisplayList::RecorderImpl::RecorderImpl):
        (WebCore::DisplayList::RecorderImpl::~RecorderImpl):
        (WebCore::DisplayList::RecorderImpl::getPixelBuffer):
        (WebCore::DisplayList::RecorderImpl::putPixelBuffer):
        (WebCore::DisplayList::RecorderImpl::canAppendItemOfType const):
        (WebCore::DisplayList::RecorderImpl::canDrawImageBuffer const):
        (WebCore::DisplayList::RecorderImpl::renderingMode const):
        (WebCore::DisplayList::RecorderImpl::createNestedContext):

        Refactor the nested Recorder logic used for `Recorder::clipToDrawingCommands`, such that it's now a separate
        override point. This allows subclasses to instantiate nested contexts of the same type, while keeping the main
        logic in `clipToDrawingCommands` in the shared base class.

        (WebCore::DisplayList::RecorderImpl::recordSave):
        (WebCore::DisplayList::RecorderImpl::recordRestore):
        (WebCore::DisplayList::RecorderImpl::recordTranslate):
        (WebCore::DisplayList::RecorderImpl::recordRotate):
        (WebCore::DisplayList::RecorderImpl::recordScale):
        (WebCore::DisplayList::RecorderImpl::recordSetCTM):
        (WebCore::DisplayList::RecorderImpl::recordConcatenateCTM):
        (WebCore::DisplayList::RecorderImpl::recordSetInlineFillColor):
        (WebCore::DisplayList::RecorderImpl::recordSetInlineStrokeColor):
        (WebCore::DisplayList::RecorderImpl::recordSetStrokeThickness):
        (WebCore::DisplayList::RecorderImpl::recordSetState):
        (WebCore::DisplayList::RecorderImpl::recordSetLineCap):
        (WebCore::DisplayList::RecorderImpl::recordSetLineDash):
        (WebCore::DisplayList::RecorderImpl::recordSetLineJoin):
        (WebCore::DisplayList::RecorderImpl::recordSetMiterLimit):
        (WebCore::DisplayList::RecorderImpl::recordClearShadow):
        (WebCore::DisplayList::RecorderImpl::recordClip):
        (WebCore::DisplayList::RecorderImpl::recordClipOut):
        (WebCore::DisplayList::RecorderImpl::recordClipToImageBuffer):
        (WebCore::DisplayList::RecorderImpl::recordClipOutToPath):
        (WebCore::DisplayList::RecorderImpl::recordClipPath):
        (WebCore::DisplayList::RecorderImpl::recordBeginClipToDrawingCommands):
        (WebCore::DisplayList::RecorderImpl::recordEndClipToDrawingCommands):
        (WebCore::DisplayList::RecorderImpl::recordDrawGlyphs):
        (WebCore::DisplayList::RecorderImpl::recordDrawImageBuffer):
        (WebCore::DisplayList::RecorderImpl::recordDrawNativeImage):
        (WebCore::DisplayList::RecorderImpl::recordDrawPattern):
        (WebCore::DisplayList::RecorderImpl::recordBeginTransparencyLayer):
        (WebCore::DisplayList::RecorderImpl::recordEndTransparencyLayer):
        (WebCore::DisplayList::RecorderImpl::recordDrawRect):
        (WebCore::DisplayList::RecorderImpl::recordDrawLine):
        (WebCore::DisplayList::RecorderImpl::recordDrawLinesForText):
        (WebCore::DisplayList::RecorderImpl::recordDrawDotsForDocumentMarker):
        (WebCore::DisplayList::RecorderImpl::recordDrawEllipse):
        (WebCore::DisplayList::RecorderImpl::recordDrawPath):
        (WebCore::DisplayList::RecorderImpl::recordDrawFocusRingPath):
        (WebCore::DisplayList::RecorderImpl::recordDrawFocusRingRects):
        (WebCore::DisplayList::RecorderImpl::recordFillRect):
        (WebCore::DisplayList::RecorderImpl::recordFillRectWithColor):
        (WebCore::DisplayList::RecorderImpl::recordFillRectWithGradient):
        (WebCore::DisplayList::RecorderImpl::recordFillCompositedRect):
        (WebCore::DisplayList::RecorderImpl::recordFillRoundedRect):
        (WebCore::DisplayList::RecorderImpl::recordFillRectWithRoundedHole):
        (WebCore::DisplayList::RecorderImpl::recordFillLine):
        (WebCore::DisplayList::RecorderImpl::recordFillArc):
        (WebCore::DisplayList::RecorderImpl::recordFillQuadCurve):
        (WebCore::DisplayList::RecorderImpl::recordFillBezierCurve):
        (WebCore::DisplayList::RecorderImpl::recordFillPath):
        (WebCore::DisplayList::RecorderImpl::recordFillEllipse):
        (WebCore::DisplayList::RecorderImpl::recordGetPixelBuffer):
        (WebCore::DisplayList::RecorderImpl::recordPutPixelBuffer):
        (WebCore::DisplayList::RecorderImpl::recordPaintFrameForMedia):
        (WebCore::DisplayList::RecorderImpl::recordStrokeRect):
        (WebCore::DisplayList::RecorderImpl::recordStrokeLine):
        (WebCore::DisplayList::RecorderImpl::recordStrokeArc):
        (WebCore::DisplayList::RecorderImpl::recordStrokeQuadCurve):
        (WebCore::DisplayList::RecorderImpl::recordStrokeBezierCurve):
        (WebCore::DisplayList::RecorderImpl::recordStrokePath):
        (WebCore::DisplayList::RecorderImpl::recordStrokeEllipse):
        (WebCore::DisplayList::RecorderImpl::recordClearRect):
        (WebCore::DisplayList::RecorderImpl::recordApplyStrokePattern):
        (WebCore::DisplayList::RecorderImpl::recordApplyFillPattern):
        (WebCore::DisplayList::RecorderImpl::recordApplyDeviceScaleFactor):
        (WebCore::DisplayList::RecorderImpl::recordResourceUse):
        (WebCore::DisplayList::RecorderImpl::extentFromLocalBounds const):
        * platform/graphics/displaylists/DisplayListRecorderImpl.h: Added.
        (WebCore::DisplayList::RecorderImpl::isEmpty const):
        (WebCore::DisplayList::RecorderImpl::Delegate::~Delegate):
        (WebCore::DisplayList::RecorderImpl::Delegate::canAppendItemOfType):
        (WebCore::DisplayList::RecorderImpl::Delegate::recordNativeImageUse):
        (WebCore::DisplayList::RecorderImpl::Delegate::isCachedImageBuffer const):
        (WebCore::DisplayList::RecorderImpl::Delegate::recordFontUse):
        (WebCore::DisplayList::RecorderImpl::Delegate::recordImageBufferUse):
        (WebCore::DisplayList::RecorderImpl::Delegate::renderingMode const):
        (WebCore::DisplayList::RecorderImpl::recordDrawPattern):
        (WebCore::DisplayList::RecorderImpl::append):

2021-10-08  Alan Bujtas  <zalan@apple.com>

        ASSERTION FAILED: m_collapsibleLogicalWidth <= m_logicalWidth in WebCore::Layout::InlineContentBreaker::ContinuousContent::append
        https://bugs.webkit.org/show_bug.cgi?id=231274

        Reviewed by Antti Koivisto.

        Remove incorrect assertions. They stopped working when negative horizontal margin was enabled for IFC.

        Test: fast/inline/negative-margin-with-collapsible-content-assert.html

        * layout/formattingContexts/inline/InlineContentBreaker.cpp:
        (WebCore::Layout::InlineContentBreaker::ContinuousContent::append):

2021-10-08  Chris Dumez  <cdumez@apple.com>

        Merge optimizations to AudioParamTimeline::hasValues() from Blink
        https://bugs.webkit.org/show_bug.cgi?id=231428

        Reviewed by Eric Carlson.

        Merge optimizations to AudioParamTimeline::hasValues() from Blink:
        - https://github.com/chromium/chromium/blob/03cb001d63071529abb42492eacee8d8bba7a4db/third_party/blink/renderer/modules/webaudio/audio_param_timeline.cc#L620

        It is important for AudioParamTimeline::hasValues() to return false whenever
        possible because it allows our implementation to use K-Rate processing (instead
        of A-Rate), which is much faster.

        No new tests, no expected Web-facing behavior change.

        * Modules/webaudio/AudioParamTimeline.cpp:
        (WebCore::AudioParamTimeline::hasValues const):
        Merge optimizations to AudioParamTimeline::hasValues() from Blink:
        - https://github.com/chromium/chromium/blob/03cb001d63071529abb42492eacee8d8bba7a4db/third_party/blink/renderer/modules/webaudio/audio_param_timeline.cc#L620
        When there is a single event on the timeline (which is fairly common), do our best to
        find out if the event is relevant for the current rendering quantum, based on the event
        type and attributes.

        * Modules/webaudio/PannerNode.cpp:
        (WebCore::PannerNode::process):
        I recently introduced a cache of PannerNode's azimuth/elevavation/coneGain. The cache
        works fine as long as PannerNode processing stays in K-Rate or in A-Rate the whole
        time. However, if switching from A-Rate to K-rate, it could make bad calculations
        because we failed to invalidate the cached attributes while in A-Rate. For this
        reason, we have to invalidate the cached attributes if dirty no matter what rate we
        are using (not just while in K-Rate).

        * platform/audio/EqualPowerPanner.cpp:
        (WebCore::EqualPowerPanner::EqualPowerPanner):
        (WebCore::EqualPowerPanner::pan):
        * platform/audio/EqualPowerPanner.h:
        * platform/audio/Panner.cpp:
        (WebCore::Panner::create):
        Now that more Panner tests are using K-Rate processing, it found a bug in our
        implementation where we were still doing dezippering. Dezippering is no longer
        part of the specification and Blink no longer does this either. We've already
        dropped dezippering in other places but we missed it here.
        I have also noticed that the implementation is not vectorized but easily could
        be so I have added a FIXME comment and will follow-up to fix it.

2021-10-08  Andres Gonzalez  <andresg_22@apple.com>

        AX: AXMathRootRadicand should return an array of elements, not just the first
        https://bugs.webkit.org/show_bug.cgi?id=230986
        <rdar://83688829>

        Reviewed by Chris Fleizach.

        Tests: accessibility/mac/mathml-elements.html
            accessibility/mac/mathml-root.html

        Square root element radicand can be more than one element. For that
        reason the return value of AXCoreObject::mathRadicand should be an
        optional array of AX objects instead of a single object.

        * accessibility/AccessibilityMathMLElement.cpp:
        (WebCore::AccessibilityMathMLElement::mathRadicand):
        (WebCore::AccessibilityMathMLElement::mathRadicandObject): Renamed mathRadicand.
        * accessibility/AccessibilityMathMLElement.h:
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityObjectInterface.h:
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilityMathRadicand]):
        (-[WebAccessibilityObjectWrapper accessibilityMathRadicandObject]): Renamed accessibilityMathRadicand.
        * accessibility/isolatedtree/AXIsolatedObject.cpp:
        (WebCore::AXIsolatedObject::initializeAttributeData):
        (WebCore::AXIsolatedObject::mathRadicand):
        * accessibility/isolatedtree/AXIsolatedObject.h:
        * accessibility/isolatedtree/AXIsolatedTree.h:
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):

2021-10-08  Antti Koivisto  <antti@apple.com>

        Make WTF::IteratorRange reversible
        https://bugs.webkit.org/show_bug.cgi?id=231415

        Reviewed by Darin Adler.

        Replace a custom range type with the new reversible IteratorRange.

        * layout/integration/LayoutIntegrationInlineContent.cpp:
        (WebCore::LayoutIntegration:: const):
        (WebCore::LayoutIntegration::InlineContent::boxesForRect const): Deleted.
        * layout/integration/LayoutIntegrationInlineContent.h:
        (WebCore::LayoutIntegration::InlineContent::BoxRange::begin const): Deleted.
        (WebCore::LayoutIntegration::InlineContent::BoxRange::end const): Deleted.
        (WebCore::LayoutIntegration::InlineContent::BoxRange::rbegin const): Deleted.
        (WebCore::LayoutIntegration::InlineContent::BoxRange::rend const): Deleted.
        * layout/integration/LayoutIntegrationLineLayout.cpp:
        (WebCore::LayoutIntegration::LineLayout::hitTest):

2021-10-08  Youenn Fablet  <youenn@apple.com>

        https://webrtc.github.io/samples/src/content/getusermedia/getdisplaymedia/ is broken on Webkit ToT
        https://bugs.webkit.org/show_bug.cgi?id=231426

        Reviewed by Eric Carlson.

        CGDisplayStreamScreenCaptureSource may start capturing with frameRate, width and height set to 0.
        In that case, capture would fail, as examplified in https://webrtc.github.io/samples/src/content/getusermedia/getdisplaymedia/.
        To ensure we have a frameRate value, we make sure to commit the configuration anytime we start producing data.
        In case width and height are not set, thus are zero, we use the screen size.
        Covered by existing tests through debug ASSERT in mock code.

        * platform/mediastream/mac/CGDisplayStreamScreenCaptureSource.mm:
        (WebCore::CGDisplayStreamScreenCaptureSource::createDisplayStream):
        * platform/mediastream/mac/DisplayCaptureSourceMac.cpp:
        (WebCore::DisplayCaptureSourceMac::startProducingData):
        * platform/mock/MockRealtimeMediaSourceCenter.cpp:
        (WebCore::MockDisplayCapturer::start):
        (WebCore::MockDisplayCapturer::commitConfiguration):

2021-10-08  Youenn Fablet  <youenn@apple.com>

        Move deviceChange handling from CoreAudioSharedUnit to BaseAudioSharedUnit
        https://bugs.webkit.org/show_bug.cgi?id=231284

        Reviewed by Eric Carlson.

        Previously setting capture devices was done in CoreAudioSharedUnit and MockAudioSharedUnit.
        Detection of missing devices was done in CoreAudioSharedUnit.
        Move this code to BaseAudioSharedUnit and add a test based on mock to cover this code.

        Test: fast/mediastream/microphone-change-while-capturing.html

        * platform/mediastream/mac/BaseAudioSharedUnit.cpp:
        (WebCore::BaseAudioSharedUnit::prepareForNewCapture):
        (WebCore::BaseAudioSharedUnit::setCaptureDevice):
        (WebCore::BaseAudioSharedUnit::devicesChanged):
        (WebCore::BaseAudioSharedUnit::captureFailed):
        * platform/mediastream/mac/BaseAudioSharedUnit.h:
        (WebCore::BaseAudioSharedUnit::persistentID const):
        (WebCore::BaseAudioSharedUnit::captureDeviceID const):
        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
        (WebCore::CoreAudioSharedUnit::captureDeviceChanged):
        (WebCore::CoreAudioSharedUnit::setupAudioUnit):
        (WebCore::CoreAudioSharedUnit::setCaptureDevice): Deleted.
        (WebCore::CoreAudioSharedUnit::devicesChanged): Deleted.
        * platform/mediastream/mac/MockAudioSharedUnit.h:
        * platform/mediastream/mac/MockAudioSharedUnit.mm:
        (WebCore::MockAudioSharedUnit::resetSampleRate):
        (WebCore::MockAudioSharedUnit::captureDeviceChanged):
        (WebCore::MockAudioSharedUnit::setCaptureDevice): Deleted.

2021-10-08  Antti Koivisto  <antti@apple.com>

        REGRESSION (r277818): XHR with requestType document broken for larger HTML files
        https://bugs.webkit.org/show_bug.cgi?id=231138
        <rdar://problem/83823282>

        Reviewed by Darin Adler.

        The parser may end up yielding during XHR or DOMParser parsing even though those should be
        synchronous. This appears to be a long standing bug that was made more visible by r277818
        because it makes the parser yield more eagerly. This only affects cases where the document
        being parsed contains <script> tags as those are considered potential yield points.

        Tests: http/tests/xmlhttprequest/xhr-and-parse-large-document.html
               http/tests/xmlhttprequest/xhr-large-document.html

        * dom/Document.cpp:
        (WebCore::Document::setContent):

        Explicitly parse synchronously. The comment was wrong, nothing forces parser flushing on close().

        * dom/DocumentParser.h:
        (WebCore::DocumentParser::appendSynchronously):
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::append):
        (WebCore::HTMLDocumentParser::appendSynchronously):
        * html/parser/HTMLDocumentParser.h:
        * html/parser/HTMLParserScheduler.cpp:
        (WebCore::HTMLParserScheduler::shouldYieldBeforeExecutingScript):

        Also avoid script yielding if script execution is not allowed.

2021-10-08  Claudio Saavedra  <csaavedra@igalia.com>

        [LibWPE] Do not destroy EGL backend if not created
        https://bugs.webkit.org/show_bug.cgi?id=224309

        Reviewed by Carlos Garcia Campos.

        about:gpu will create a PlatformDisplay to fill in GPU
        information, but this doesn't call
        LibWPEPlatformDisplay::initialize() as it doesn't need to, so the
        backend member is not initialized. Make sure that the backend is
        not a nullptr before attempting to destroy it when the display is
        destroyed.

        * platform/graphics/libwpe/PlatformDisplayLibWPE.cpp:
        (WebCore::PlatformDisplayLibWPE::~PlatformDisplayLibWPE):
        * platform/graphics/libwpe/PlatformDisplayLibWPE.h:

2021-10-08  Tyler Wilcock  <tyler_w@apple.com>

        AX: Expose the URL attribute of <video> elements
        https://bugs.webkit.org/show_bug.cgi?id=231384

        Reviewed by Chris Fleizach.

        Expose URL attribute for <video> accessibility elements.

        Test: accessibility/video-element-url-attribute.html

        * accessibility/AccessibilityObjectInterface.h:
        (WebCore::AXCoreObject::isVideo const): Added.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::url const):
        Return the currentSrc of video elements.

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        Mark the URL attribute as supported for video elements.

2021-10-08  Youenn Fablet  <youenn@apple.com>

        Add support for processing push events without service worker clients
        https://bugs.webkit.org/show_bug.cgi?id=231285

        Reviewed by Chris Dumez.

        Covered by API test.

        * workers/service/server/SWServer.cpp:
        Add a timer to terminate service worker if a push message is not processed with a given number of seconds.
        The timer value is the default termination delay or 1 second for testing.

2021-10-08  Myles C. Maxfield  <mmaxfield@apple.com>

        font-families inside @font-palette-values need to be case insensitive
        https://bugs.webkit.org/show_bug.cgi?id=231215
        <rdar://problem/83871643>

        Reviewed by Antti Koivisto.

        https://drafts.csswg.org/css-fonts-4/#font-family-2-desc says:
        > The value of this descriptor matches the definition of the <family-name> for the font-family property.

        Tests: imported/w3c/web-platform-tests/css/css-fonts/font-palette-33.html
               imported/w3c/web-platform-tests/css/css-fonts/font-palette-34.html

        * css/CSSFontSelector.h:

2021-10-07  Simon Fraser  <simon.fraser@apple.com>

        Plumb "animated scroll did end" back from the scrolling tree
        https://bugs.webkit.org/show_bug.cgi?id=231412

        Reviewed by Tim Horton.

        Before we can enable async animated scrolls, we have to get the "did end" notification back
        from the scrolling thread/UI process in order to clear the ScrollAnimationStatus on
        ScrollableArea.

        The scroll animations are run by the ScrollingEffectsController owned by
        ScrollingTreeScrollingNodeDelegateMac/ScrollingTreeScrollingNodeDelegateNicosia. Their
        didStopAnimatedScroll() implementations call through the ScrollingTreeScrollingNde to the
        ScrollingTree, which enqueues ScrollUpdate just as we do for scroll position changes.

        ScrollUpdate is enhanced to contain an 'updateType' with a AnimatedScrollDidEnd value. When
        this is received by AsyncScrollingCoordinator it clears the ScrollAnimationStatus on the
        relevant FrameView/RenderLayerScrollableArea.

        With UI-side compositing, AnimatedScrollDidEndForNode is an IPC message back to
        RemoteScrollingCoordinator.

        Not yet tested because async animated scrolls are not enabled.

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::requestScrollPositionUpdate):
        (WebCore::AsyncScrollingCoordinator::applyScrollPositionUpdate):
        (WebCore::AsyncScrollingCoordinator::animatedScrollDidEndForNode):
        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ScrollingCoordinatorTypes.h:
        (WebCore::ScrollUpdate::canMerge const):
        * page/scrolling/ScrollingTree.h:
        (WebCore::ScrollingTree::scrollingTreeNodeDidStopAnimatedScroll):
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::didStopAnimatedScroll):
        * page/scrolling/ThreadedScrollingTree.cpp:
        (WebCore::ThreadedScrollingTree::scrollingTreeNodeDidScroll):
        (WebCore::ThreadedScrollingTree::scrollingTreeNodeDidStopAnimatedScroll):
        * page/scrolling/ThreadedScrollingTree.h:
        * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.h:
        * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.mm:
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::didStopAnimatedScroll):
        * page/scrolling/nicosia/ScrollingTreeScrollingNodeDelegateNicosia.cpp:
        (WebCore::ScrollingTreeScrollingNodeDelegateNicosia::didStopAnimatedScroll):
        * page/scrolling/nicosia/ScrollingTreeScrollingNodeDelegateNicosia.h:

2021-10-07  Simon Fraser  <simon.fraser@apple.com>

        Add some plumbing for running smooth scroll animations in the scrolling thread/UI process
        https://bugs.webkit.org/show_bug.cgi?id=231402

        Reviewed by Tim Horton.

        These change prepare the scrolling tree to handle the starting and cancelation of
        programmatic smooth scroll animations.

        ScrollableArea subclasses implement requestAnimatedScrollToPosition() and
        stopAsyncAnimatedScroll(), akin to the existing requestScrollPositionUpdate(). FrameView and
        RenderLayerScrollableArea call through to AsyncScrollingCoordinator, which will soon respond
        to these requests by setting state on scrolling state nodes. Currently,
        AsyncScrollingCoordinator does `return false` to avoid a behavior change.

        ScrollingTreeScrollingNode gains startAnimatedScrollToPosition() and stopAnimatedScroll(),
        and concrete subclasses use their ScrollingTreeScrollingNodeDelegate (and its
        ScrollingEffectsController) to actually trigger the scroll animation, or stop an existing
        one.

        RequestedScrollData will be used a bit more widely, so move it to
        ScrollingCoordinatorTypes.h, and give it a ScrollIsAnimated field.

        * dom/Element.cpp:
        (WebCore::Element::scrollTo):
        * page/FrameView.cpp:
        (WebCore::FrameView::setScrollPosition):
        (WebCore::FrameView::requestAnimatedScrollToPosition):
        (WebCore::FrameView::stopAsyncAnimatedScroll):
        * page/FrameView.h:
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::requestScrollPositionUpdate):
        (WebCore::AsyncScrollingCoordinator::requestAnimatedScrollToPosition):
        (WebCore::AsyncScrollingCoordinator::stopAnimatedScroll):
        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollingCoordinator::requestScrollPositionUpdate):
        (WebCore::ScrollingCoordinator::requestAnimatedScrollToPosition):
        (WebCore::ScrollingCoordinator::stopAnimatedScroll):
        * page/scrolling/ScrollingCoordinatorTypes.h:
        (WebCore::RequestedScrollData::operator== const):
        * page/scrolling/ScrollingStateScrollingNode.cpp:
        (WebCore::ScrollingStateScrollingNode::dumpProperties const):
        * page/scrolling/ScrollingStateScrollingNode.h:
        (WebCore::RequestedScrollData::operator== const): Deleted.
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::didStopAnimatedScroll):
        (WebCore::ScrollingTreeScrollingNode::handleScrollPositionRequest):
        * page/scrolling/ScrollingTreeScrollingNode.h:
        * page/scrolling/ScrollingTreeScrollingNodeDelegate.h:
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h:
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeMac::commitStateAfterChildren):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::startAnimatedScrollToPosition):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::stopAnimatedScroll):
        * page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.h:
        * page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.mm:
        (WebCore::ScrollingTreeOverflowScrollingNodeMac::commitStateAfterChildren):
        (WebCore::ScrollingTreeOverflowScrollingNodeMac::startAnimatedScrollToPosition):
        (WebCore::ScrollingTreeOverflowScrollingNodeMac::stopAnimatedScroll):
        * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.h:
        * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.mm:
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::startAnimatedScrollToPosition):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::stopAnimatedScroll):
        * page/scrolling/nicosia/ScrollingTreeFrameScrollingNodeNicosia.cpp:
        (WebCore::ScrollingTreeFrameScrollingNodeNicosia::commitStateAfterChildren):
        (WebCore::ScrollingTreeFrameScrollingNodeNicosia::startAnimatedScrollToPosition):
        (WebCore::ScrollingTreeFrameScrollingNodeNicosia::stopAnimatedScroll):
        (WebCore::ScrollingTreeFrameScrollingNodeNicosia::stopScrollAnimations): Deleted.
        * page/scrolling/nicosia/ScrollingTreeFrameScrollingNodeNicosia.h:
        * page/scrolling/nicosia/ScrollingTreeOverflowScrollingNodeNicosia.cpp:
        (WebCore::ScrollingTreeOverflowScrollingNodeNicosia::commitStateAfterChildren):
        (WebCore::ScrollingTreeOverflowScrollingNodeNicosia::startAnimatedScrollToPosition):
        (WebCore::ScrollingTreeOverflowScrollingNodeNicosia::stopAnimatedScroll):
        (WebCore::ScrollingTreeOverflowScrollingNodeNicosia::stopScrollAnimations): Deleted.
        * page/scrolling/nicosia/ScrollingTreeOverflowScrollingNodeNicosia.h:
        * page/scrolling/nicosia/ScrollingTreeScrollingNodeDelegateNicosia.cpp:
        (WebCore::ScrollingTreeScrollingNodeDelegateNicosia::startAnimatedScrollToPosition):
        (WebCore::ScrollingTreeScrollingNodeDelegateNicosia::stopAnimatedScroll):
        (WebCore::ScrollingTreeScrollingNodeDelegateNicosia::stopScrollAnimations): Deleted.
        * page/scrolling/nicosia/ScrollingTreeScrollingNodeDelegateNicosia.h:
        * platform/ScrollTypes.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::setScrollPosition):
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::scrollToPositionWithAnimation):
        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::requestAnimatedScrollToPosition):
        (WebCore::ScrollableArea::stopAsyncAnimatedScroll):
        * rendering/RenderLayerScrollableArea.cpp:
        (WebCore::RenderLayerScrollableArea::requestAnimatedScrollToPosition):
        (WebCore::RenderLayerScrollableArea::stopAsyncAnimatedScroll):
        * rendering/RenderLayerScrollableArea.h:

2021-10-07  Alexey Shvayka  <shvaikalesh@gmail.com>

        `highWaterMark` should be a readonly WebIDL attribute of queuing strategies
        https://bugs.webkit.org/show_bug.cgi?id=231355

        Reviewed by Youenn Fablet.

        This patch:

          1. Makes `highWaterMark` a readonly WebIDL attribute, backed by private name, as per current
             spec [1], instead of an strategy's own property that was required before Streams Standard
             was moved to WebIDL. Ensures a TypeError is thrown for incorrect |this| value.

          2. Aligns extraction of `highWaterMark` for ByteLengthQueuingStrategy constructor with
             the spec [2]: throws a TypeError with user-friendly message for non-object argument
             instead of the obscure "undefined is not an object" and coerces `highWaterMark` member,
             if present, to a number; otherwise, throws a TypeError.

          3. Increases "length" of queuing strategy constructors to 1 as init argument is required.

        Aligns WebKit with Blink and Gecko.

        [1] https://streams.spec.whatwg.org/#blqs-internal-slots (also see note)
        [2] https://heycam.github.io/webidl/#es-dictionary

        Tests: imported/w3c/web-platform-tests/streams/idlharness.any.js
               imported/w3c/web-platform-tests/streams/queuing-strategies.any.js

        * Modules/streams/ByteLengthQueuingStrategy.idl:
        * Modules/streams/ByteLengthQueuingStrategy.js:
        (getter.highWaterMark):
        (initializeByteLengthQueuingStrategy):
        * Modules/streams/CountQueuingStrategy.idl:
        * Modules/streams/CountQueuingStrategy.js:
        (getter.highWaterMark):
        (initializeCountQueuingStrategy):
        * Modules/streams/StreamInternals.js:
        (extractHighWaterMarkFromQueuingStrategyInit):

2021-10-07  Tim Horton  <timothy_horton@apple.com>

        De-virtualize two overrides of GraphicsContext::drawImage
        https://bugs.webkit.org/show_bug.cgi?id=231399

        Reviewed by Devin Rousso.

        * platform/graphics/GraphicsContext.h:
        (WebCore::GraphicsContext::drawImage):
        * platform/graphics/NullGraphicsContext.h:
        Devin correctly noted in https://bugs.webkit.org/show_bug.cgi?id=231385#c5
        that it doesn't make sense for the two variants of drawImage() that
        just call the version with more arguments to be virtual, and indeed, they
        are not overridden. Devirtualize them, and remove the NullGraphicsContext overrides.

2021-10-07  Simon Fraser  <simon.fraser@apple.com>

        Minor refactoring to use ScrollUpdate in more places
        https://bugs.webkit.org/show_bug.cgi?id=231395

        Reviewed by Myles C. Maxfield.
        
        ScrollUpdate is used to communicate changes from the scrolling tree back to FrameView etc.

        Future patches will extend ScrollUpdate a little. Move to ScrollingCoordinatorTypes.h, and
        pass ScrollUpdate to some more AsyncScrollingCoordinator functions, only unpacking at the
        last minute.

        Move ScrollType to the end of the updateScrollPositionAfterAsyncScroll() argument list since
        it's not part of ScrollUpdate.

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::requestScrollPositionUpdate):
        (WebCore::AsyncScrollingCoordinator::synchronizeStateFromScrollingTree):
        (WebCore::AsyncScrollingCoordinator::applyPendingScrollUpdates):
        (WebCore::AsyncScrollingCoordinator::applyScrollUpdate):
        (WebCore::AsyncScrollingCoordinator::applyScrollPositionUpdate):
        (WebCore::AsyncScrollingCoordinator::updateScrollPositionAfterAsyncScroll):
        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ScrollingCoordinatorTypes.h:
        (WebCore::ScrollUpdate::canMerge const):
        (WebCore::ScrollUpdate::merge):
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::takePendingScrollUpdates):
        * page/scrolling/ScrollingTree.h:
        (WebCore::ScrollingTree::ScrollUpdate::canMerge const): Deleted.
        (WebCore::ScrollingTree::ScrollUpdate::merge): Deleted.
        * page/scrolling/ThreadedScrollingTree.cpp:
        (WebCore::ThreadedScrollingTree::scrollingTreeNodeDidScroll):

2021-10-07  Aditya Keerthi  <akeerthi@apple.com>

        Introduce ShadowPseudoIds to store all UA shadow root pseudo-element ids
        https://bugs.webkit.org/show_bug.cgi?id=231383

        Reviewed by Wenson Hsieh.

        Organize all UA shadow root pseudo-element ids in ShadowPseudoIds.

        This refactoring also enables detection of a specific UA shadow root
        element (for example: answering the question "is this element a caps
        lock indicator?"). The implementation of 'appearance: auto' relies on
        being able to to answer that question.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * html/BaseDateAndTimeInputType.cpp:
        (WebCore::BaseDateAndTimeInputType::createShadowSubtreeAndUpdateInnerTextElementEditability):
        * html/ColorInputType.cpp:
        (WebCore::ColorInputType::createShadowSubtreeAndUpdateInnerTextElementEditability):
        * html/FileInputType.cpp:
        (WebCore::UploadButtonElement::createInternal):
        * html/HTMLKeygenElement.cpp:
        * html/HTMLMeterElement.cpp:
        (WebCore::setValueClass):
        (WebCore::HTMLMeterElement::didAddUserAgentShadowRoot):
        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::createShadowSubtreeAndUpdateInnerTextElementEditability):
        * html/SearchInputType.cpp:
        (WebCore::updateResultButtonPseudoType):
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::createShadowSubtreeAndUpdateInnerTextElementEditability):
        (WebCore::TextFieldInputType::createDataListDropdownIndicator):
        (WebCore::autoFillButtonTypeToAutoFillButtonPseudoClassName):
        (WebCore::isAutoFillButtonTypeChanged):
        (WebCore::TextFieldInputType::createContainer):
        * html/ValidationMessage.cpp:
        (WebCore::ValidationMessage::buildBubbleTree):
        * html/shadow/DateTimeEditElement.cpp:
        (WebCore::DateTimeEditBuilder::visitLiteral):
        (WebCore::DateTimeEditElement::create):
        (WebCore::DateTimeEditElement::layout):
        * html/shadow/DetailsMarkerControl.cpp:
        (WebCore::DetailsMarkerControl::create):
        * html/shadow/MediaControlTextTrackContainerElement.cpp:
        (WebCore::MediaControlTextTrackContainerElement::create):
        * html/shadow/ProgressShadowElement.cpp:
        (WebCore::ProgressInnerElement::create):
        (WebCore::ProgressBarElement::create):
        (WebCore::ProgressValueElement::create):
        * html/shadow/ShadowPseudoIds.cpp: Added.
        (WebCore::ShadowPseudoIds::cue):
        (WebCore::ShadowPseudoIds::fileSelectorButton):
        (WebCore::ShadowPseudoIds::placeholder):
        (WebCore::ShadowPseudoIds::webkitContactsAutoFillButton):
        (WebCore::ShadowPseudoIds::webkitCredentialsAutoFillButton):
        (WebCore::ShadowPseudoIds::webkitCreditCardAutoFillButton):
        (WebCore::ShadowPseudoIds::webkitStrongPasswordAutoFillButton):
        (WebCore::ShadowPseudoIds::webkitCapsLockIndicator):
        (WebCore::ShadowPseudoIds::webkitColorSwatch):
        (WebCore::ShadowPseudoIds::webkitColorSwatchWrapper):
        (WebCore::ShadowPseudoIds::webkitDatetimeEdit):
        (WebCore::ShadowPseudoIds::webkitDatetimeEditText):
        (WebCore::ShadowPseudoIds::webkitDatetimeEditFieldsWrapper):
        (WebCore::ShadowPseudoIds::webkitDateAndTimeValue):
        (WebCore::ShadowPseudoIds::webkitDetailsMarker):
        (WebCore::ShadowPseudoIds::webkitGenericCueRoot):
        (WebCore::ShadowPseudoIds::webkitInnerSpinButton):
        (WebCore::ShadowPseudoIds::webkitKeygenSelect):
        (WebCore::ShadowPseudoIds::webkitListButton):
        (WebCore::ShadowPseudoIds::webkitMediaSliderThumb):
        (WebCore::ShadowPseudoIds::webkitMediaSliderContainer):
        (WebCore::ShadowPseudoIds::webkitMediaTextTrackContainer):
        (WebCore::ShadowPseudoIds::webkitMediaTextTrackDisplay):
        (WebCore::ShadowPseudoIds::webkitMediaTextTrackDisplayBackdrop):
        (WebCore::ShadowPseudoIds::webkitMediaTextTrackRegion):
        (WebCore::ShadowPseudoIds::webkitMediaTextTrackRegionContainer):
        (WebCore::ShadowPseudoIds::webkitMeterBar):
        (WebCore::ShadowPseudoIds::webkitMeterInnerElement):
        (WebCore::ShadowPseudoIds::webkitMeterOptimumValue):
        (WebCore::ShadowPseudoIds::webkitMeterSuboptimumValue):
        (WebCore::ShadowPseudoIds::webkitMeterEvenLessGoodValue):
        (WebCore::ShadowPseudoIds::webkitPluginReplacement):
        (WebCore::ShadowPseudoIds::webkitProgressBar):
        (WebCore::ShadowPseudoIds::webkitProgressValue):
        (WebCore::ShadowPseudoIds::webkitProgressInnerElement):
        (WebCore::ShadowPseudoIds::webkitSearchDecoration):
        (WebCore::ShadowPseudoIds::webkitSearchResultsButton):
        (WebCore::ShadowPseudoIds::webkitSearchResultsDecoration):
        (WebCore::ShadowPseudoIds::webkitSearchCancelButton):
        (WebCore::ShadowPseudoIds::webkitSliderRunnableTrack):
        (WebCore::ShadowPseudoIds::webkitSliderThumb):
        (WebCore::ShadowPseudoIds::webkitSliderContainer):
        (WebCore::ShadowPseudoIds::webkitTextfieldDecorationContainer):
        (WebCore::ShadowPseudoIds::webkitValidationBubble):
        (WebCore::ShadowPseudoIds::webkitValidationBubbleArrowClipper):
        (WebCore::ShadowPseudoIds::webkitValidationBubbleArrow):
        (WebCore::ShadowPseudoIds::webkitValidationBubbleMessage):
        (WebCore::ShadowPseudoIds::webkitValidationBubbleIcon):
        (WebCore::ShadowPseudoIds::webkitValidationBubbleTextBlock):
        (WebCore::ShadowPseudoIds::webkitValidationBubbleHeading):
        (WebCore::ShadowPseudoIds::webkitValidationBubbleBody):
        * html/shadow/ShadowPseudoIds.h: Added.
        * html/shadow/SliderThumbElement.cpp:
        (WebCore::SliderThumbElement::resolveCustomStyle):
        (WebCore::SliderContainerElement::resolveCustomStyle):
        * html/shadow/SpinButtonElement.cpp:
        (WebCore::SpinButtonElement::create):
        * html/shadow/TextControlInnerElements.cpp:
        (WebCore::TextControlPlaceholderElement::create):
        (WebCore::SearchFieldCancelButtonElement::create):
        * html/shadow/YouTubeEmbedShadowElement.cpp:
        (WebCore::YouTubeEmbedShadowElement::create):
        * html/track/TextTrackCue.cpp:
        (WebCore::TextTrackCueBox::initialize):
        (WebCore::tagPseudoObjects):
        (WebCore::TextTrackCue::rebuildDisplayTree):
        (WebCore::TextTrackCue::cueShadowPseudoId): Deleted.
        (WebCore::TextTrackCue::cueBoxShadowPseudoId): Deleted.
        (WebCore::TextTrackCue::cueBackdropShadowPseudoId): Deleted.
        * html/track/TextTrackCue.h:
        * html/track/VTTCue.cpp:
        (WebCore::VTTCue::getDisplayTree):
        * html/track/VTTRegion.cpp:
        (WebCore::VTTRegion::getDisplayTree):
        (WebCore::VTTRegion::prepareRegionDisplayTree):
        (WebCore::VTTRegion::textTrackCueContainerShadowPseudoId): Deleted.
        (WebCore::VTTRegion::textTrackRegionShadowPseudoId): Deleted.
        * html/track/VTTRegion.h:
        * page/CaptionUserPreferencesMediaAF.cpp:
        (WebCore::CaptionUserPreferencesMediaAF::captionsStyleSheetOverride const):
        * style/RuleData.cpp:
        (WebCore::Style::determinePropertyAllowlistType):

2021-10-07  Myles C. Maxfield  <mmaxfield@apple.com>

        Shadowing of @font-palette-values rules doesn't work
        https://bugs.webkit.org/show_bug.cgi?id=231218
        <rdar://problem/83872258>

        Reviewed by Wenson Hsieh.

        https://drafts.csswg.org/css-fonts-4/#font-palette-values says:
        > When a given descriptor occurs multiple times in a given @font-palette-values rule,
        > only the last descriptor declaration is used.

        Test: imported/w3c/web-platform-tests/css/css-fonts/font-palette-32.html

        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::buildStarted):
        (WebCore::CSSFontSelector::addFontPaletteValuesRule):
        (WebCore::CSSFontSelector::lookupFontPaletteValues):
        * css/CSSFontSelector.h:

2021-10-07  Alan Bujtas  <zalan@apple.com>

        Do not check for firstLineStyle while constructing RenderText
        https://bugs.webkit.org/show_bug.cgi?id=231370
        <rdar://83973189>

        Reviewed by Antti Koivisto.

        First line computation requires the renderer to be fully attached to the tree.
        Let's check for "can use simplified text measuring for first line" at a later time, when we
        construct the LFC tree instead.

        Test: fast/inline/first-line-style-too-early-crash.html

        * layout/formattingContexts/inline/InlineTextItem.cpp:
        (WebCore::Layout::InlineTextItem::createAndAppendTextItems):
        * layout/formattingContexts/inline/text/TextUtil.cpp:
        (WebCore::Layout::TextUtil::canUseSimplifiedTextMeasuringForFirstLine):
        * layout/formattingContexts/inline/text/TextUtil.h:
        * layout/integration/LayoutIntegrationBoxTree.cpp:
        (WebCore::LayoutIntegration::BoxTree::buildTree):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::computeCanUseSimplifiedTextMeasuring const):

2021-10-07  Myles C. Maxfield  <mmaxfield@apple.com>

        [GPU Process] Unique RenderingResourceIdentifiers Part 1: Uniquify at entry points
        https://bugs.webkit.org/show_bug.cgi?id=231281
        <rdar://problem/83920780>

        Reviewed by Chris Dumez.

        ProcessQualified is the generic form of QualifiedRenderingResourceIdentifier. It's
        templated, so it can hold things other than RenderingResourceIdentifiers.

        No new tests because there is no behavior change.

        * Headers.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/ProcessQualified.h: Added.
        (WebCore::ProcessQualified::ProcessQualified):
        (WebCore::ProcessQualified::object const):
        (WebCore::ProcessQualified::processIdentifier const):
        (WebCore::ProcessQualified::isHashTableDeletedValue const):
        (WebCore::ProcessQualified::operator== const):
        (WebCore::ProcessQualified::operator!= const):
        (WebCore::operator<<):
        (WebCore::add):
        (WTF::DefaultHash<WebCore::ProcessQualified<T>>::hash):
        (WTF::DefaultHash<WebCore::ProcessQualified<T>>::equal):

2021-10-07  Myles C. Maxfield  <mmaxfield@apple.com>

        Stop parsing font palette things that we can't implement
        https://bugs.webkit.org/show_bug.cgi?id=230799
        <rdar://problem/83537772>

        Reviewed by Simon Fraser.

        We can't implement the <string> values in base-palette and override-colors. It's better
        not to parse them, so this behavior can at least be feature detected by JS reading the
        serialized value that was parsed.

        I'm investigating changing the spec to disallow these unimplementable things in
        https://github.com/w3c/csswg-drafts/issues/6627.

        For base-palette, we were representing the absence of the descriptor by making the internal
        representation hold a null string. Now that we're removing the string value from the internal
        representation, this is now being represented by using an std::optional instead.

        Test: imported/w3c/web-platform-tests/css/css-fonts/parsing/font-palette-values-valid.html

        * css/CSSFontPaletteValuesRule.cpp:
        (WebCore::CSSFontPaletteValuesRule::basePalette const):
        (WebCore::CSSFontPaletteValuesRule::overrideColors const):
        (WebCore::CSSFontPaletteValuesRule::cssText const):
        * css/StyleRule.cpp:
        (WebCore::StyleRuleFontPaletteValues::StyleRuleFontPaletteValues):
        * css/StyleRule.h:
        * css/parser/CSSParserImpl.cpp:
        (WebCore::CSSParserImpl::consumeFontPaletteValuesRule):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeBasePaletteDescriptor):
        (WebCore::consumeOverrideColorsDescriptor):
        * platform/graphics/FontPaletteValues.h:
        (WebCore::FontPaletteIndex::operator bool const):
        (WebCore::FontPaletteIndex::operator== const):
        (WebCore::add):
        (WebCore::FontPaletteValues::FontPaletteValues):
        (WebCore::FontPaletteValues::basePalette const):
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::addAttributesForCustomFontPalettes):

2021-10-07  Tim Horton  <timothy_horton@apple.com>

        BifurcatedGraphicsContext doesn't bifurcate draw{Tiled}Image
        https://bugs.webkit.org/show_bug.cgi?id=231385
        <rdar://problem/83922633>

        Reviewed by Devin Rousso.

        New API Test: BifurcatedGraphicsContextTests.DrawGradientImage, DrawTiledGradientImage

        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/GradientImage.h:
        Export GradientImage's constructor and GradientImage and GeneratedImage headers.

        * platform/graphics/BifurcatedGraphicsContext.cpp:
        (WebCore::BifurcatedGraphicsContext::drawTiledImage):
        (WebCore::BifurcatedGraphicsContext::drawImage):
        (WebCore::BifurcatedGraphicsContext::drawImageForCanvas):
        * platform/graphics/BifurcatedGraphicsContext.h:
        Forward draw{Tiled}Image to both GraphicsContext instances.
        
        I had initially avoided it because I assumed drawNativeImage would
        be the eventual result, but because of the non-BitmapImage subclasses
        that is actually not the case! For example, in the gradient case,
        drawing the image results in GradientCG directly interacting with the
        platform context, not round-tripping back through GraphicsContext,
        so the commands are not replicated.

2021-10-07  Aditya Keerthi  <akeerthi@apple.com>

        [css-ui] Parsing support for accent-color
        https://bugs.webkit.org/show_bug.cgi?id=231334
        rdar://83955508

        Reviewed by Antti Koivisto.

        Add parsing support for accent-color as specified in
        https://www.w3.org/TR/css-ui-4/#widget-accent. The grammar is
        "accent-color: auto | <color>".

        Implemented behind a disabled-by-default experimental setting.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::valueForPropertyInStyle):
        * css/CSSProperties.json:
        * css/parser/CSSParserContext.cpp:
        (WebCore::operator==):
        (WebCore::add):
        (WebCore::CSSParserContext::isPropertyRuntimeDisabled const):
        * css/parser/CSSParserContext.h:
        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::parseColorWithAuto):
        (WebCore::CSSParserFastPaths::maybeParseValue):
        (WebCore::parseCaretColor): Deleted.
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeColorWithAuto):
        (WebCore::CSSPropertyParser::parseSingleValue):
        (WebCore::consumeCaretColor): Deleted.
        * rendering/style/RenderStyle.cpp:
        (WebCore::rareInheritedDataChangeRequiresRepaint):
        (WebCore::RenderStyle::unresolvedColorForProperty const):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::setAccentColor):
        (WebCore::RenderStyle::setHasAutoAccentColor):
        (WebCore::RenderStyle::accentColor const):
        (WebCore::RenderStyle::hasAutoAccentColor const):
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::operator== const):
        * rendering/style/StyleRareInheritedData.h:
        * style/StyleBuilderCustom.h:
        (WebCore::Style::BuilderCustom::applyInitialAccentColor):
        (WebCore::Style::BuilderCustom::applyInheritAccentColor):
        (WebCore::Style::BuilderCustom::applyValueAccentColor):

2021-10-07  Chris Dumez  <cdumez@apple.com>

        Cache PannerNode's azimuth, elevation and coneGain
        https://bugs.webkit.org/show_bug.cgi?id=231314

        Reviewed by Eric Carlson.

        Cache PannerNode's azimuth, elevation and coneGain for better performance. I have noticed while profiling
        https://downloads.scirra.com/labs/bugs/safaripannerquality/ that PannerNode::process() spends most of its
        CPU time under PannerNode::calculateAzimuthElevation(). We shouldn't have to re-calculate those properties
        for every rendering quantum.

        * Modules/webaudio/AudioListener.cpp:
        (WebCore::AudioListener::updateDirtyState):
        * Modules/webaudio/AudioListener.h:
        (WebCore::AudioListener::isPositionDirty const):
        (WebCore::AudioListener::isOrientationDirty const):
        (WebCore::AudioListener::isUpVectorDirty const):
        * Modules/webaudio/BaseAudioContext.cpp:
        (WebCore::BaseAudioContext::handlePreRenderTasks):
        * Modules/webaudio/PannerNode.cpp:
        (WebCore::PannerNode::process):
        (WebCore::PannerNode::processSampleAccurateValues):
        (WebCore::PannerNode::setDistanceModelForBindings):
        (WebCore::PannerNode::setRefDistanceForBindings):
        (WebCore::PannerNode::setMaxDistanceForBindings):
        (WebCore::PannerNode::setRolloffFactorForBindings):
        (WebCore::PannerNode::setConeOuterGainForBindings):
        (WebCore::PannerNode::setConeOuterAngleForBindings):
        (WebCore::PannerNode::setConeInnerAngleForBindings):
        (WebCore::PannerNode::calculateAzimuthElevation):
        (WebCore::PannerNode::azimuthElevation const):
        (WebCore::PannerNode::calculateDistanceConeGain):
        (WebCore::PannerNode::distanceConeGain):
        (WebCore::PannerNode::invalidateCachedPropertiesIfNecessary):
        (WebCore::PannerNode::azimuthElevation): Deleted.
        * Modules/webaudio/PannerNode.h:
        * platform/audio/Cone.cpp:
        (WebCore::ConeEffect::gain const):
        (WebCore::ConeEffect::gain): Deleted.
        * platform/audio/Cone.h:
        * platform/audio/Distance.cpp:
        (WebCore::DistanceEffect::gain const):
        (WebCore::DistanceEffect::linearGain const):
        (WebCore::DistanceEffect::inverseGain const):
        (WebCore::DistanceEffect::exponentialGain const):
        (WebCore::DistanceEffect::gain): Deleted.
        (WebCore::DistanceEffect::linearGain): Deleted.
        (WebCore::DistanceEffect::inverseGain): Deleted.
        (WebCore::DistanceEffect::exponentialGain): Deleted.
        * platform/audio/Distance.h:

2021-10-07  Michael Catanzaro  <mcatanzaro@gnome.org>

        Misc compiler warning fixes, October 2021
        https://bugs.webkit.org/show_bug.cgi?id=231377

        Reviewed by Adrian Perez de Castro.

        Fix -Wreturn-type warnings.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::fontPaletteFromStyle):
        * css/CSSFontPaletteValuesRule.cpp:
        (WebCore::CSSFontPaletteValuesRule::basePalette const):
        * platform/graphics/opengl/GraphicsContextGLOpenGL.cpp:
        (WebCore::GraphicsContextGLOpenGL::releaseThreadResources):

2021-10-07  Chris Dumez  <cdumez@apple.com>

        Add feature flag for COOP / COEP violation reporting and turn off by default
        https://bugs.webkit.org/show_bug.cgi?id=231371

        Reviewed by Youenn Fablet.

        Add feature flag for COOP / COEP violation reporting and turn off by default since our
        implementation doesn't match the latest specification.

        * loader/CrossOriginEmbedderPolicy.cpp:
        (WebCore::sendCOEPPolicyInheritenceViolation):
        (WebCore::sendCOEPCORPViolation):
        * loader/CrossOriginOpenerPolicy.cpp:
        (WebCore::sendViolationReportWhenNavigatingToCOOPResponse):
        (WebCore::sendViolationReportWhenNavigatingAwayFromCOOPResponse):

2021-10-07  Antti Koivisto  <antti@apple.com>

        [LFC][Integration] Use optimized InlineContent::boxesForRect for hit testing
        https://bugs.webkit.org/show_bug.cgi?id=231363

        Reviewed by Alan Bujtas.

        This makes hit testing large blocks faster.

        * layout/integration/LayoutIntegrationInlineContent.cpp:
        (WebCore::LayoutIntegration::InlineContent::boxesForRect const):
        (WebCore::LayoutIntegration:: const): Deleted.
        * layout/integration/LayoutIntegrationInlineContent.h:
        (WebCore::LayoutIntegration::InlineContent::BoxRange::begin const):
        (WebCore::LayoutIntegration::InlineContent::BoxRange::end const):
        (WebCore::LayoutIntegration::InlineContent::BoxRange::rbegin const):
        (WebCore::LayoutIntegration::InlineContent::BoxRange::rend const):

        Add a reversable iterator.

        * layout/integration/LayoutIntegrationLineLayout.cpp:
        (WebCore::LayoutIntegration::LineLayout::hitTest):

        Hit test using boxesForRect.

2021-10-07  Darin Adler  <darin@apple.com>

        Get rid of the deviceClass function, up-leveling to deviceClassIsSmallScreen
        https://bugs.webkit.org/show_bug.cgi?id=231344

        Reviewed by Tim Horton.

        * platform/ios/Device.cpp:
        (WebCore::deviceClassIsSmallScreen): Replaced deviceClass with this.
        * platform/ios/Device.h: Ditto.

2021-10-07  Antti Koivisto  <antti@apple.com>

        Cascade layer styles should be lower priority than unlayered styles
        https://bugs.webkit.org/show_bug.cgi?id=231342

        Reviewed by Simon Fraser.

        Update the implementation to match the resolution for https://github.com/w3c/csswg-drafts/issues/6284.

        * style/ElementRuleCollector.cpp:
        (WebCore::Style::ElementRuleCollector::addMatchedRule):
        (WebCore::Style::compareRules):
        * style/ElementRuleCollector.h:
        * style/RuleSet.h:
        (WebCore::Style::RuleSet::cascadeLayerPriorityForIdentifier const):
        (WebCore::Style::RuleSet::cascadeLayerPriorityFor const):

        Return std::numeric_limits<unsigned>::max() for unlayered rules.

        (WebCore::Style::RuleSet::cascadeLayerOrderForIdentifier const): Deleted.
        (WebCore::Style::RuleSet::cascadeLayerOrderFor const): Deleted.

        Also update naming order->priority to better match the spec text.

        * style/RuleSetBuilder.cpp:
        (WebCore::Style::RuleSetBuilder::~RuleSetBuilder):
        (WebCore::Style::RuleSetBuilder::updateCascadeLayerPriorities):
        (WebCore::Style::RuleSetBuilder::addMutatingRulesToResolver):
        (WebCore::Style::RuleSetBuilder::updateCascadeLayerOrder): Deleted.
        * style/RuleSetBuilder.h:

2021-10-06  Simon Fraser  <simon.fraser@apple.com>

        Clean up state maintenance around animated scrolls
        https://bugs.webkit.org/show_bug.cgi?id=231347

        Reviewed by Martin Robinson.

        ScrollBehaviorStatus tracked whether an animated scroll is in progress. Rename it
        for clarity, and remove the "non-native" term since this will never track native
        vs. non-native animations.

        Since ScrollBehaviorStatus is specifically about programmatic smooth scroll animations
        triggered from script, it should be stored on ScrollableArea and is not relevant to the
        scrolling tree. Remove it from the ScrollingTreeScrollingNodeDelegates.

        The state becomes ScrollAnimationStatus::Animating immediately when JS triggers animations,
        but the animation completion signal may come back in future from the scrolling thread.
        Currently it comes via ScrollingEffectsController::scrollAnimationDidEnd().

        We never need to call setScrollAnimationStatus(ScrollAnimationStatus::NotAnimating) other
        than from scrollAnimationDidEnd(), because canceling an ongoing animation will always
        call that.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::scrollTo const):
        * page/FrameView.cpp:
        (WebCore::FrameView::scrollToPositionWithAnimation):
        * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.h:
        * page/scrolling/nicosia/ScrollingTreeScrollingNodeDelegateNicosia.h:
        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::scrollToPositionWithAnimation):
        (WebCore::ScrollAnimator::retargetRunningAnimation):
        (WebCore::ScrollAnimator::willStartAnimatedScroll):
        (WebCore::ScrollAnimator::didStopAnimatedScroll):
        (WebCore::ScrollAnimator::setScrollBehaviorStatus): Deleted.
        (WebCore::ScrollAnimator::scrollBehaviorStatus const): Deleted.
        * platform/ScrollAnimator.h:
        * platform/ScrollTypes.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::setScrollPosition):
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::scrollToPositionWithAnimation):
        (WebCore::ScrollableArea::resnapAfterLayout):
        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::scrollAnimationStatus):
        (WebCore::ScrollableArea::setScrollAnimationStatus):
        (WebCore::ScrollableArea::currentScrollBehaviorStatus): Deleted.
        (WebCore::ScrollableArea::setScrollBehaviorStatus): Deleted.
        * platform/ScrollingEffectsController.cpp:
        (WebCore::ScrollingEffectsController::scrollAnimationDidEnd):
        * platform/ScrollingEffectsController.h:
        (WebCore::ScrollingEffectsControllerClient::willStartAnimatedScroll):
        (WebCore::ScrollingEffectsControllerClient::didStopAnimatedScroll):
        * rendering/RenderLayerScrollableArea.cpp:
        (WebCore::RenderLayerScrollableArea::scrollToOffset):
        (WebCore::RenderLayerScrollableArea::scrollTo):
        (WebCore::RenderLayerScrollableArea::updateScrollPosition):

2021-10-07  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] InlineDisplay::Box should be able to tell if it's the first or the last box within the associated Layout::Box
        https://bugs.webkit.org/show_bug.cgi?id=231341

        Reviewed by Antti Koivisto.

        This patch helps the iterators to jump right to the first/last display box inside a layout box. This is used when a certain Layout::Box (e.g. <span>)
        overlaps multiple lines producing multiple display boxes.

        * layout/formattingContexts/inline/InlineDisplayContentBuilder.cpp:
        (WebCore::Layout::isFirstLastBox):
        (WebCore::Layout::InlineDisplayContentBuilder::build):
        (WebCore::Layout::InlineDisplayContentBuilder::createBoxesAndUpdateGeometryForLineContent):
        (WebCore::Layout::InlineDisplayContentBuilder::createBoxesAndUpdateGeometryForLineSpanningInlineBoxes):
        * layout/formattingContexts/inline/InlineLevelBox.h:
        (WebCore::Layout::InlineLevelBox::isFirstBox const):
        (WebCore::Layout::InlineLevelBox::isLastBox const):
        (WebCore::Layout::InlineLevelBox::InlineLevelBox):
        (WebCore::Layout::InlineLevelBox::setIsFirstBox):
        (WebCore::Layout::InlineLevelBox::setIsLastBox):
        (WebCore::Layout::m_isLastWithinLayoutBox):
        (WebCore::Layout::InlineLevelBox::createInlineBox):
        * layout/formattingContexts/inline/InlineLineBox.cpp:
        (WebCore::Layout::LineBox::LineBox):
        (): Deleted.
        * layout/formattingContexts/inline/InlineLineBoxBuilder.cpp:
        (WebCore::Layout::LineBoxBuilder::constructAndAlignInlineLevelBoxes):
        * layout/formattingContexts/inline/display/InlineDisplayBox.h:
        (WebCore::InlineDisplay::Box::Box):
        (WebCore::InlineDisplay::Box::isFirstBox const):
        (WebCore::InlineDisplay::Box::isLastBox const):

2021-10-07  Antti Koivisto  <antti@apple.com>

        [LFC][Integration] Optimize InlineContent::boxesForRect
        https://bugs.webkit.org/show_bug.cgi?id=231356

        Reviewed by Alan Bujtas.

        * layout/integration/LayoutIntegrationInlineContent.cpp:
        (WebCore::LayoutIntegration::InlineContent::boxesForRect const):

        Approximate the starting points from the rect using the average line height and then search for
        the first and last line that paint fully outside the rect.

        * layout/integration/LayoutIntegrationInlineContent.h:
        * layout/integration/LayoutIntegrationInlineContentBuilder.cpp:
        (WebCore::LayoutIntegration::InlineContentBuilder::createDisplayLines const):

        Add a bit that tells if the content has lines with paint area exceeding those of the neighboring lines.
        We can't use the optimization in this rare case.

2021-10-07  Antti Koivisto  <antti@apple.com>

        REGRESSION (IFC selections): Overlapping selection rectangles when selecting preformatted text
        https://bugs.webkit.org/show_bug.cgi?id=231291
        <rdar://problem/83939949>

        Reviewed by Alan Bujtas.

        We are painting selections for soft linebreaks.

        Test: editing/selection/soft-line-break-no-paint.html

        * layout/integration/LayoutIntegrationLineLayout.cpp:
        (WebCore::LayoutIntegration::LineLayout::paint):

        Like legacy, don't paint any linebreak boxes.

2021-10-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Reenable -fvisibility=hidden
        https://bugs.webkit.org/show_bug.cgi?id=181916

        Reviewed by Michael Catanzaro.

        * PlatformGTK.cmake:
        * dom/EventTarget.cpp:
        * dom/EventTarget.h:

2021-10-07  Jean-Yves Avenard  <jya@apple.com>

        Streamline and make call to objective-C methods more consistent across call sites.
        https://bugs.webkit.org/show_bug.cgi?id=231351
        rdar://problem/83966853

        Since bug 97403, RetainPtr<T*> has a T* conversion operator; the call to
        RetainPtr::get() is now redundant under some circumstances.
        Make the use of RetainPtr<T*> in objective-C call more consistent by using the pattern:
        RetainPtr<T*> foo;
        [foo methodOfT];
        Source-wide replacement of "\[([_a-zA-Z]+)\.get\(\) " by "\[([_a-zA-Z]+)\ ",
        then manually fixing NeverDestroyed<RetainPtr<T*>> cases which do not yet allow
        for that.

        Reviewed by Tim Horton.

        No change in observable behaviour.

        * bindings/js/ScriptControllerMac.mm:
        (WebCore::ScriptController::updatePlatformScriptObjects):
        * bridge/objc/objc_instance.mm:
        (JSC::Bindings::ObjcInstance::~ObjcInstance):
        (JSC::Bindings::ObjcInstance::supportsInvokeDefaultMethod const):
        (JSC::Bindings::ObjcInstance::invokeDefaultMethod):
        (JSC::Bindings::ObjcInstance::defaultValue const):
        * bridge/objc/objc_runtime.mm:
        (JSC::Bindings::ObjcArray::setValueAt const):
        (JSC::Bindings::ObjcArray::valueAt const):
        (JSC::Bindings::ObjcArray::getLength const):
        * editing/cocoa/DataDetection.mm:
        (WebCore::resultIsURL):
        * page/cocoa/ResourceUsageOverlayCocoa.mm:
        (WebCore::ResourceUsageOverlay::platformInitialize):
        (WebCore::ResourceUsageOverlay::platformDraw):
        * platform/cocoa/ParentalControlsContentFilter.mm:
        (WebCore::ParentalControlsContentFilter::addData):
        (WebCore::ParentalControlsContentFilter::finishedAddingData):
        * platform/gamepad/cocoa/GameControllerGamepad.mm:
        (WebCore::GameControllerGamepad::setupAsExtendedGamepad):
        * platform/graphics/avfoundation/objc/AVOutputDeviceMenuControllerTargetPicker.mm:
        (WebCore::AVOutputDeviceMenuControllerTargetPicker::devicePicker):
        (WebCore::AVOutputDeviceMenuControllerTargetPicker::outputContext):
        * platform/graphics/avfoundation/objc/CDMSessionAVFoundationObjC.mm:
        (WebCore::CDMSessionAVFoundationObjC::generateKeyRequest):
        * platform/graphics/avfoundation/objc/InbandTextTrackPrivateAVFObjC.mm:
        (WebCore::InbandTextTrackPrivateAVFObjC::label const):
        (WebCore::InbandTextTrackPrivateAVFObjC::language const):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::~MediaPlayerPrivateAVFoundationObjC):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::cancelLoad):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createImageGenerator):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::synchronizeTextTrackState):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVAssetForURL):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerItem):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::checkPlayability):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::beginLoadingMetadata):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::accessLog const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::errorLog const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformSetVisible):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformDuration const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::currentMediaTime const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::seekToTime):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setVolume):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setMuted):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::assetStatus const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createImageForTimeInRect):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::updateVideoLayerGravity):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createVideoOutput):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::destroyVideoOutput):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::updateLastPixelBuffer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::firstEnabledTrack const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::hasLoadedMediaSelectionGroups):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::safeMediaSelectionGroupForLegibleMedia):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::safeMediaSelectionGroupForAudibleMedia):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::safeMediaSelectionGroupForVisualMedia):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::processMediaSelectionOptions):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setCurrentTextTrack):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::languageOfPrimaryAudioTrack const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::wirelessVideoPlaybackDisabled const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setWirelessVideoPlaybackDisabled):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setShouldPlayToPlaybackTarget):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::metadataDidArrive):
        (-[WebCoreAVFMovieObserver observeValueForKeyPath:ofObject:change:context:]):
        * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.mm:
        (WebCore::WebCoreAVFResourceLoader::startLoading):
        (WebCore::WebCoreAVFResourceLoader::responseReceived):
        (WebCore::WebCoreAVFResourceLoader::loadFailed):
        (WebCore::WebCoreAVFResourceLoader::loadFinished):
        (WebCore::WebCoreAVFResourceLoader::newDataStoredInSharedBuffer):
        * platform/graphics/cocoa/TextTrackRepresentationCocoa.mm:
        (WebCore::TextTrackRepresentationCocoa::TextTrackRepresentationCocoa):
        (WebCore::TextTrackRepresentationCocoa::~TextTrackRepresentationCocoa):
        (WebCore::TextTrackRepresentationCocoa::update):
        (WebCore::TextTrackRepresentationCocoa::setContentScale):
        (WebCore::TextTrackRepresentationCocoa::setHidden const):
        (WebCore::TextTrackRepresentationCocoa::bounds const):
        * platform/ios/DragImageIOS.mm:
        (WebCore::scaleDragImage):
        (WebCore::createDragImageFromImage):
        (WebCore::createDragImageForRange):
        * platform/ios/LegacyTileCache.mm:
        (WebCore::LegacyTileCache::~LegacyTileCache):
        * platform/ios/LegacyTileLayerPool.mm:
        (WebCore::LegacyTileLayerPool::addLayer):
        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::PlatformPasteboard::readBuffer const):
        * platform/ios/PlatformSpeechSynthesizerIOS.mm:
        (WebCore::PlatformSpeechSynthesizer::pause):
        (WebCore::PlatformSpeechSynthesizer::resume):
        (WebCore::PlatformSpeechSynthesizer::speak):
        (WebCore::PlatformSpeechSynthesizer::cancel):
        (WebCore::PlatformSpeechSynthesizer::resetState):
        * platform/ios/VideoFullscreenInterfaceAVKit.mm:
        (-[WebAVPlayerLayer setVideoGravity:]):
        (-[WebAVPlayerViewController enterFullScreenAnimated:completionHandler:]):
        (-[WebAVPlayerViewController exitFullScreenAnimated:completionHandler:]):
        (-[WebAVPlayerViewController MY_NO_RETURN]):
        (-[WebAVPlayerViewController removeFromParentViewController]):
        * platform/mac/PlatformPasteboardMac.mm:
        (WebCore::PlatformPasteboard::getTypes):
        (WebCore::PlatformPasteboard::bufferForType):
        (WebCore::PlatformPasteboard::getPathnamesForType const):
        (WebCore::PlatformPasteboard::changeCount const):
        (WebCore::PlatformPasteboard::copy):
        (WebCore::PlatformPasteboard::addTypes):
        (WebCore::PlatformPasteboard::setURL):
        (WebCore::PlatformPasteboard::setStringForType):
        * platform/mac/PlatformSpeechSynthesizerMac.mm:
        (WebCore::PlatformSpeechSynthesizer::~PlatformSpeechSynthesizer):
        (WebCore::PlatformSpeechSynthesizer::pause):
        (WebCore::PlatformSpeechSynthesizer::resume):
        (WebCore::PlatformSpeechSynthesizer::speak):
        (WebCore::PlatformSpeechSynthesizer::cancel):
        (WebCore::PlatformSpeechSynthesizer::resetState):
        * platform/mac/SerializedPlatformDataCueMac.mm:
        (WebCore::SerializedPlatformDataCueMac::isEqual const):
        (WebCore::SerializedPlatformDataCueMac::encodableValue const):
        * platform/mac/WebCoreFullScreenPlaceholderView.mm:
        (-[WebCoreFullScreenPlaceholderView initWithFrame:]):
        * platform/mac/WebCoreFullScreenWarningView.mm:
        * platform/mediarecorder/cocoa/MediaRecorderPrivateWriterCocoa.mm:
        (WebCore::MediaRecorderPrivateWriter::initialize):
        (WebCore::MediaRecorderPrivateWriter::startAssetWriter):
        (WebCore::MediaRecorderPrivateWriter::appendCompressedAudioSampleBufferIfPossible):
        (WebCore::MediaRecorderPrivateWriter::appendCompressedVideoSampleBuffer):
        (WebCore::MediaRecorderPrivateWriter::flushCompressedSampleBuffers):
        * platform/mediastream/mac/AVCaptureDeviceManager.mm:
        (WebCore::AVCaptureDeviceManager::updateCachedAVCaptureDevices):
        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::AVVideoCaptureSource):
        (-[WebCoreAVVideoCaptureSourceObserver observeValueForKeyPath:ofObject:change:context:]):
        * platform/network/cocoa/ResourceRequestCocoa.mm:
        (WebCore::ResourceRequest::doUpdateResourceRequest):
        (WebCore::ResourceRequest::doUpdateResourceHTTPBody):
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        (WebCore::ResourceRequest::doUpdatePlatformHTTPBody):
        * platform/network/cocoa/ResourceResponseCocoa.mm:
        (WebCore::ResourceResponse::initNSURLResponse const):
        (WebCore::ResourceResponse::platformLazyInit):
        * platform/network/mac/AuthenticationMac.mm:
        (WebCore::AuthenticationChallenge::setAuthenticationClient):
        (WebCore::AuthenticationChallenge::authenticationClient const):
        * platform/network/mac/ResourceErrorMac.mm:
        (WebCore::createNSErrorFromResourceErrorBase):
        (WebCore::ResourceError::mapPlatformError):
        (WebCore::ResourceError::platformLazyInit):
        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm:
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:willSendRequest:redirectResponse:]):
        * platform/text/cocoa/LocaleCocoa.mm:
        (WebCore::LocaleCocoa::LocaleCocoa):
        (WebCore::LocaleCocoa::timeAMPMLabels):
        (WebCore::LocaleCocoa::initializeLocaleData):
        * platform/text/cocoa/LocalizedDateCache.mm:
        (WebCore::LocalizedDateCache::calculateMaximumWidth):
        * rendering/RenderThemeCocoa.mm:
        (WebCore::RenderThemeCocoa::mediaControlsFormattedStringForDuration):
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::paintSystemPreviewBadge):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::popupButton const):
        (WebCore::RenderThemeMac::search const):
        (WebCore::RenderThemeMac::sliderThumbHorizontal const):
        (WebCore::RenderThemeMac::sliderThumbVertical const):
        (WebCore::RenderThemeMac::textField const):

2021-10-07  Kimmo Kinnunen  <kkinnunen@apple.com>

        ScopedEGLDefaultDisplay should be removed
        https://bugs.webkit.org/show_bug.cgi?id=231011

        Reviewed by Kenneth Russell.

        Hard-coding the code to EGL_DEFAULT_DISPLAY only and using the scoped
        holder is making the EGLDisplays harder to use than neccessary. The
        implementation target, e.g. the ability to call EGLTerminate, was also a bit
        more convoluted than needed.

        Move the "call EGLTerminate" logic from a bit convoluted refcount mechanism
        in ScopedEGLDefaultDisplay to the explicit GraphicsContextGLOpenGL::releaseResources().
        The callers are expected to do the refcounting anyway, as the existing client
        WebKit::ScopedWebGLRenderingResourcesRequest already did.

        Make GraphicsContextGLOpenGL::releaseResources() available on all platforms.
        It is implemented on all ANGLE implementations.
        Platforms can augment the implementation by implementing
        GraphicsContextGLOpenGL::platformReleaseResources(). For Cocoa, this function
        resets the currentContext cache that is used to optimize making context current.

        No new tests, refactor.

        * CMakeLists.txt:
        * Headers.cmake:
        * PlatformMac.cmake:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/angle/ANGLEUtilities.cpp: Renamed from Source/WebCore/platform/graphics/angle/GraphicsContextGLANGLEEGLUtilities.h.
        (WebCore::platformIsANGLEAvailable):
        * platform/graphics/angle/ANGLEUtilities.h: Renamed from Source/WebCore/platform/graphics/angle/GraphicsContextGLANGLEUtilities.h.
        Rename GraphicsContextGLANGLEUtilities to simpler and more descriptive ANGLEUtilities.
        Add the isANGLEAvailable to there.

        * platform/graphics/angle/GraphicsContextGLANGLE.cpp:
        (WebCore::GraphicsContextGLOpenGL::releaseResources):
        (WebCore::GraphicsContextGLOpenGL::platformReleaseResources):
        * platform/graphics/angle/GraphicsContextGLANGLEEGLUtilities.cpp: Removed.
        (WebCore::refDefaultDisplay): Deleted.
        (WebCore::unrefDefaultDisplayIfNeeded): Deleted.
        (WebCore::ScopedEGLDefaultDisplay::operator=): Deleted.
        (WebCore::ScopedEGLDefaultDisplay::ScopedEGLDefaultDisplay): Deleted.
        (WebCore::ScopedEGLDefaultDisplay::~ScopedEGLDefaultDisplay): Deleted.
        (WebCore::ScopedEGLDefaultDisplay::releaseAllResourcesIfUnused): Deleted.
        * platform/graphics/cocoa/GraphicsContextGLOpenGLCocoa.mm:
        (WebCore::platformIsANGLEAvailable):
        (WebCore::initializeEGLDisplay):
        (WebCore::GraphicsContextGLOpenGL::platformReleaseResources):
        (WebCore::isANGLEAvailable): Deleted.
        (WebCore::GraphicsContextGLOpenGL::releaseCurrentContext): Deleted.
        (WebCore::GraphicsContextGLOpenGL::releaseAllResourcesIfUnused): Deleted.
        * platform/graphics/opengl/GraphicsContextGLOpenGL.cpp:
        (WebCore::GraphicsContextGLOpenGL::releaseResources):
        (WebCore::GraphicsContextGLOpenGL::platformReleaseResources):
        * platform/graphics/opengl/GraphicsContextGLOpenGL.h:
        * platform/ios/wak/WebCoreThread.mm:

2021-10-06  Ben Nham  <nham@apple.com>

        Add PushSubscription stubs
        https://bugs.webkit.org/show_bug.cgi?id=231278

        Reviewed Alex Christensen.

        This adds PushSubscription-related IDL to WebCore. Currently the objects are just data
        containers and PushSubscription.unsubscribe() does nothing.

        Test: http/wpt/push-api/pushSubscription.https.any.html

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/push-api/PushEncryptionKeyName.h: Added.
        * Modules/push-api/PushEncryptionKeyName.idl: Added.
        * Modules/push-api/PushSubscription.cpp: Added.
        (WebCore::PushSubscription::create):
        (WebCore::PushSubscription::PushSubscription):
        (WebCore::PushSubscription::endpoint const):
        (WebCore::PushSubscription::expirationTime const):
        (WebCore::PushSubscription::options const):
        (WebCore::PushSubscription::getKey const):
        (WebCore::PushSubscription::unsubscribe):
        (WebCore::PushSubscription::toJSON const):
        * Modules/push-api/PushSubscription.h: Added.
        * Modules/push-api/PushSubscription.idl: Added.
        * Modules/push-api/PushSubscriptionJSON.h: Added.
        * Modules/push-api/PushSubscriptionJSON.idl: Added.
        * Modules/push-api/PushSubscriptionOptions.cpp: Added.
        (WebCore::PushSubscriptionOptions::create):
        (WebCore::PushSubscriptionOptions::PushSubscriptionOptions):
        (WebCore::PushSubscriptionOptions::userVisibleOnly const):
        (WebCore::PushSubscriptionOptions::serverVAPIDPublicKey const):
        (WebCore::PushSubscriptionOptions::applicationServerKey const):
        * Modules/push-api/PushSubscriptionOptions.h: Added.
        * Modules/push-api/PushSubscriptionOptions.idl: Added.
        * Modules/push-api/PushSubscriptionOptionsInit.h: Added.
        * Modules/push-api/PushSubscriptionOptionsInit.idl: Added.
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:
        * testing/Internals.cpp:
        (WebCore::Internals::createPushSubscription):
        * testing/Internals.h:
        * testing/Internals.idl:

2021-10-06  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] InlineDisplay::Box should not hold on to RenderStyle&
        https://bugs.webkit.org/show_bug.cgi?id=231325
        <rdar://83925737>

        Reviewed by Simon Fraser.

        In the long run InlineDisplay::Box should retain the style so that we could paint the content independently, but for now
        let's just consult the layout box for the style information.

        * layout/formattingContexts/inline/InlineDisplayContentBuilder.cpp:
        (WebCore::Layout::InlineDisplayContentBuilder::build):
        (WebCore::Layout::InlineDisplayContentBuilder::createBoxesAndUpdateGeometryForLineContent):
        (WebCore::Layout::InlineDisplayContentBuilder::createBoxesAndUpdateGeometryForLineSpanningInlineBoxes):
        * layout/formattingContexts/inline/display/InlineDisplayBox.h:
        (WebCore::InlineDisplay::Box::style const): The assumption here was that the style object stays around for the lifecycle of the display box (i.e. style object is destroyed -> layout -> new set of display boxes).
        (WebCore::InlineDisplay::Box::Box):
        * layout/integration/LayoutIntegrationPagination.cpp:
        (WebCore::LayoutIntegration::makeAdjustedContent):

2021-10-06  Simon Fraser  <simon.fraser@apple.com>

        Rename the AnimatedScroll enum to ScrollIsAnimated for consistency
        https://bugs.webkit.org/show_bug.cgi?id=231336

        Reviewed by Wenson Hsieh.

        All the other scroll-related enums start with "Scroll" so rename AnimatedScroll to
        ScrollIsAnimated to match, and ScrollIsAnimated::Yes and ScrollIsAnimated::No become more
        readable.

        * dom/Element.cpp:
        (WebCore::Element::scrollTo):
        (WebCore::Element::setScrollLeft):
        (WebCore::Element::setScrollTop):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::scrollTo const):
        * page/FrameView.cpp:
        (WebCore::FrameView::setScrollPosition):
        * platform/ScrollTypes.h:
        (WebCore::ScrollPositionChangeOptions::createProgrammaticWithOptions):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollRectToVisible):
        * rendering/RenderLayerScrollableArea.cpp:
        (WebCore::RenderLayerScrollableArea::scrollToOffset):

2021-10-06  Wenson Hsieh  <wenson_hsieh@apple.com>

        Delete WebCore::DisplayList::SetInlineFillGradient
        https://bugs.webkit.org/show_bug.cgi?id=231326

        Reviewed by Simon Fraser.

        Remove this display list item, because:

        -       It should never have been encoded and decoded as POD data in the first place, due to the fact that it
                indirectly contains Variants.

        -       Deleting this item does not cause any significant performance impact when using streaming IPC for
                display lists.

        * platform/graphics/displaylists/DisplayList.cpp:
        (WebCore::DisplayList::DisplayList::append):
        * platform/graphics/displaylists/DisplayListItemBuffer.cpp:
        (WebCore::DisplayList::ItemHandle::apply):
        (WebCore::DisplayList::ItemHandle::destroy):
        (WebCore::DisplayList::ItemHandle::safeCopy const):
        * platform/graphics/displaylists/DisplayListItemType.cpp:
        (WebCore::DisplayList::sizeOfItemInBytes):
        (WebCore::DisplayList::isDrawingItem):
        (WebCore::DisplayList::isInlineItem):
        * platform/graphics/displaylists/DisplayListItemType.h:
        * platform/graphics/displaylists/DisplayListItems.cpp:
        (WebCore::DisplayList::operator<<):
        (WebCore::DisplayList::SetInlineFillGradient::SetInlineFillGradient): Deleted.
        (WebCore::DisplayList::SetInlineFillGradient::gradient const): Deleted.
        (WebCore::DisplayList::SetInlineFillGradient::apply const): Deleted.
        (WebCore::DisplayList::SetInlineFillGradient::isInline): Deleted.
        * platform/graphics/displaylists/DisplayListItems.h:
        (WebCore::DisplayList::SetInlineFillGradient::isValid const): Deleted.
        * platform/graphics/displaylists/DisplayListRecorder.cpp:
        (WebCore::DisplayList::containsOnlyInlineStateChanges):
        (WebCore::DisplayList::Recorder::appendStateChangeItem):

2021-10-06  Jean-Yves Avenard  <jya@apple.com>

        Have SourceBufferPrivateAVJObjC use WorkQueue instead of dispatch_async
        https://bugs.webkit.org/show_bug.cgi?id=230881
        rdar://83429276

        This change is twofold:
        1- dispatch_async takes an objective-C block which doesn't support C++ move
        semantics. As such the lambda would be copied including the captured variables.
        When use with a non-thread safe refcounted object it could lead to a race
        on the refcount which would result in a leak.
        By using a WorkQueue instead, we avoid the above problem.
        2- We want to unify in the media code how threads are created and task
        dispatched: WorkQueue is a nice solution.

        Reviewed by Chris Dumez.

        No observable difference.

        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::SourceBufferPrivateAVFObjC):
        (WebCore::SourceBufferPrivateAVFObjC::append):
        (WebCore::SourceBufferPrivateAVFObjC::resetParserState):

2021-10-06  Tyler Wilcock  <tyler_w@apple.com>

        AX: Make AccessibilityObjectInterface::contents return-by-value instead of return-by-out-parameter
        https://bugs.webkit.org/show_bug.cgi?id=231289

        Reviewed by Darin Adler.

        Make AccessibilityObjectInterface::contents return-by-value instead of
        return-by-out-parameter as this is more ergonomic.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::contents):
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityObjectInterface.h:
        * accessibility/isolatedtree/AXIsolatedObject.cpp:
        (WebCore::AXIsolatedObject::initializeAttributeData):
        (WebCore::AXIsolatedObject::contents):
        * accessibility/isolatedtree/AXIsolatedObject.h:
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):

2021-10-06  Sihui Liu  <sihui_liu@apple.com>

        Add support for FileSystemSyncAccessHandle
        https://bugs.webkit.org/show_bug.cgi?id=231185
        <rdar://problem/83847859>

        Reviewed by Youenn Fablet.

        Implement basic support for FileSystemSyncAccessHandle as proposal:
        https://github.com/WICG/file-system-access/blob/main/AccessHandle.md

        FileSystemSyncAccessHandle can be created via FileSystemFileHandle, and it commuicates with backend via 
        FileSystemFileHandle.

        Test: storage/filesystemaccess/sync-access-handle-basics-worker.html

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Headers.cmake:
        * Modules/filesystemaccess/FileSystemFileHandle.cpp:
        (WebCore::FileSystemFileHandle::createSyncAccessHandle):
        (WebCore::FileSystemFileHandle::getSize):
        (WebCore::FileSystemFileHandle::truncate):
        (WebCore::FileSystemFileHandle::flush):
        (WebCore::FileSystemFileHandle::close):
        * Modules/filesystemaccess/FileSystemFileHandle.h:
        * Modules/filesystemaccess/FileSystemFileHandle.idl:
        * Modules/filesystemaccess/FileSystemStorageConnection.h:
        * Modules/filesystemaccess/FileSystemSyncAccessHandle.cpp: Added.
        (WebCore::FileSystemSyncAccessHandle::create):
        (WebCore::FileSystemSyncAccessHandle::FileSystemSyncAccessHandle):
        (WebCore::FileSystemSyncAccessHandle::~FileSystemSyncAccessHandle):
        (WebCore::FileSystemSyncAccessHandle::truncate):
        (WebCore::FileSystemSyncAccessHandle::getSize):
        (WebCore::FileSystemSyncAccessHandle::flush):
        (WebCore::FileSystemSyncAccessHandle::close):
        (WebCore::FileSystemSyncAccessHandle::didClose):
        * Modules/filesystemaccess/FileSystemSyncAccessHandle.h: Added.
        * Modules/filesystemaccess/FileSystemSyncAccessHandle.idl: Added.
        * Modules/filesystemaccess/FileSystemSyncAccessHandleIdentifier.h: Added.
        * Modules/filesystemaccess/WorkerFileSystemStorageConnection.cpp:
        (WebCore::WorkerFileSystemStorageConnection::scopeClosed):
        (WebCore::WorkerFileSystemStorageConnection::removeEntry):
        (WebCore::WorkerFileSystemStorageConnection::didCreateSyncAccessHandle):
        (WebCore::WorkerFileSystemStorageConnection::completeIntegerCallback):
        (WebCore::WorkerFileSystemStorageConnection::completeVoidCallback):
        (WebCore::WorkerFileSystemStorageConnection::createSyncAccessHandle):
        (WebCore::WorkerFileSystemStorageConnection::getSize):
        (WebCore::WorkerFileSystemStorageConnection::truncate):
        (WebCore::WorkerFileSystemStorageConnection::flush):
        (WebCore::WorkerFileSystemStorageConnection::close):
        (WebCore::WorkerFileSystemStorageConnection::didRemoveEntry): Deleted.
        * Modules/filesystemaccess/WorkerFileSystemStorageConnection.h:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:

2021-10-06  Wenson Hsieh  <wenson_hsieh@apple.com>

        Make ImageBuffer::drawingContext() return GraphicsContext instead of DisplayList::DrawingContext
        https://bugs.webkit.org/show_bug.cgi?id=231296

        Reviewed by Simon Fraser.

        In preparation for decoupling RemoteImageBufferProxy from DisplayList::ImageBuffer (as well as DrawingContext),
        we refactor `ImageBuffer::drawingContext()` to no longer return a DisplayList::DrawingContext, but rather a
        generic GraphicsContext. In future patches, this allows us to create a new GraphicsContext subclass that doesn't
        manage its own DisplayList, but instead uses streamable IPC messages to send individual display list items (or
        eventually, just their arguments) over to the GPU process.

        Unfortunately, this means that HTMLCanvasElement can no longer use its display list drawing context to track
        display list items. However, since this capability was only used for a single layout test, we can simply remove
        it altogether (and simplify some of the code in HTMLCanvasElement in the process).

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::createImageBuffer const):
        (WebCore::HTMLCanvasElement::setTracksDisplayListReplay): Deleted.
        (WebCore::HTMLCanvasElement::displayListAsText const): Deleted.
        (WebCore::HTMLCanvasElement::replayDisplayListAsText const): Deleted.
        * html/HTMLCanvasElement.h:
        * platform/graphics/displaylists/DisplayListImageBuffer.h:
        * testing/Internals.cpp:
        (WebCore::Internals::setElementTracksDisplayListReplay):
        (WebCore::Internals::displayListForElement):
        (WebCore::Internals::replayDisplayListForElement):

2021-10-06  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r283634.
        https://bugs.webkit.org/show_bug.cgi?id=231332

        Some debug assertions. RenderLayer needs to be fixed first

        Reverted changeset:

        "Ensure that the top layer is always anchored to the
        RenderView"
        https://bugs.webkit.org/show_bug.cgi?id=231292
        https://commits.webkit.org/r283634

2021-10-06  Wenson Hsieh  <wenson_hsieh@apple.com>

        Move FlushIdentifier out of the DisplayList namespace
        https://bugs.webkit.org/show_bug.cgi?id=231263

        Reviewed by Simon Fraser.

        See WebKit/ChangeLog for more details.

        * Headers.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/GraphicsContextFlushIdentifier.h: Renamed from Source/WebCore/platform/graphics/displaylists/DisplayListFlushIdentifier.h.
        * platform/graphics/ImageBuffer.h:
        (WebCore::ImageBuffer::didFlush):
        * platform/graphics/displaylists/DisplayListItems.h:
        (WebCore::DisplayList::FlushContext::FlushContext):
        (WebCore::DisplayList::FlushContext::identifier const):
        * platform/graphics/displaylists/DisplayListRecorder.h:
        (WebCore::DisplayList::Recorder::flushContext):

2021-10-06  Chris Dumez  <cdumez@apple.com>

        Unreviewed build fix for non-unified build.

        * Modules/webaudio/WaveShaperProcessor.cpp:

2021-10-06  Ben Nham  <nham@apple.com>

        WaveShaperProcessor missing JSTypedArrays include

        Unreviewed build fix.

        The missing include can cause a build failure when adding a new file to Sources.txt.

        * Modules/webaudio/WaveShaperProcessor.cpp:

2021-10-06  Ben Nham  <nham@apple.com>

        WaveShaperProcessor missing ArrayBuffer include

        Unreviewed build fix.

        The missing include can cause a build failure when adding a new file to Sources.txt.

        * Modules/webaudio/WaveShaperProcessor.cpp:

2021-10-06  Simon Fraser  <simon.fraser@apple.com>

        Unreviewed build fix.
        
        Fix XPath::Value namespacing after r283635.

        * xml/XPathResult.cpp:
        (WebCore::XPathResult::XPathResult):

2021-10-06  Antti Koivisto  <antti@apple.com>

        Clear glyph cache in InlineContent::clearAndDetach
        https://bugs.webkit.org/show_bug.cgi?id=231312

        Reviewed by Alan Bujtas.

        We may be leaving stale glyph cache entries behind.

        * layout/integration/LayoutIntegrationInlineContent.cpp:
        (WebCore::LayoutIntegration::InlineContent::clearAndDetach):

2021-10-06  Tim Horton  <timothy_horton@apple.com>

        ASSERTion failure in WebCore::deviceClass() on macCatalyst
        https://bugs.webkit.org/show_bug.cgi?id=231279

        Reviewed by Anders Carlsson.

        * platform/ios/Device.cpp:
        (WebCore::deviceClass):
        Simplify deviceClass(); there's no reason to assert here, callers
        should be written to assume they don't know the future. Also, this
        has been asserting on macOS for ages...

2021-10-06  Aditya Keerthi  <akeerthi@apple.com>

        Fix serialization of CSSMediaRule
        https://bugs.webkit.org/show_bug.cgi?id=231249

        Reviewed by Chris Dumez.

        See https://drafts.csswg.org/cssom/#serialize-a-css-rule.

        New behavior matches Chrome and Firefox.

        * css/CSSMediaRule.cpp:
        (WebCore::CSSMediaRule::cssText const):

        Remove space before newline.

2021-10-06  Darin Adler  <darin@apple.com>

        Reduce use of "using namespace": eliminate all "using namespace XPath"
        https://bugs.webkit.org/show_bug.cgi?id=231302

        Reviewed by Sam Weinig.

        * xml/XPathEvaluator.cpp: Removed "using namespace XPath".
        (WebCore::XPathEvaluator::evaluate): Use XPath prefix explicitly.
        * xml/XPathExpression.cpp: Removed "using namespace XPath".
        (WebCore::XPathExpression::createExpression): Ditto.
        (WebCore::XPathExpression::evaluate): Ditto.

        * xml/XPathGrammar.y: Removed "using namespace WebCore" and
        "using namespace XPath".

        * xml/XPathResult.cpp: Removed "using namespace XPath".

2021-10-06  Alex Christensen  <achristensen@webkit.org>

        Don't use namespace WebCore::XPath at global scope
        https://bugs.webkit.org/show_bug.cgi?id=231186

        Reviewed by Sam Weinig.

        It causes problems with unified builds, which get confused between WebCore::XPath::Function and WTF::Function.

        * xml/XPathGrammar.cpp:
        * xml/XPathGrammar.h:
        * xml/XPathGrammar.y:
        * xml/XPathParser.cpp:

2021-10-06  Alan Bujtas  <zalan@apple.com>

        Ensure that the top layer is always anchored to the RenderView
        https://bugs.webkit.org/show_bug.cgi?id=231292

        Reviewed by Simon Fraser.

        A fixed positioned block level box is not necessarily anchored to the RenderView (see canContainFixedPositionObjects).
        This patch ensures that we skip those ancestors and return the RenderView as the containing block for the top layer content. 

        https://fullscreen.spec.whatwg.org/#new-stacking-layer
        "If the top layer position property computes to fixed, its containing block is the viewport, and the initial containing block otherwise."

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::containingBlock const):
        (WebCore::containerForElement):

2021-10-06  Tim Nguyen  <ntim@apple.com>

        Reset m_isModal flag when removing <dialog> from document
        https://bugs.webkit.org/show_bug.cgi?id=231290

        Reviewed by Alan Bujtas.

        m_isModal triggers the :-internal-modal-dialog pseudo class, which changes position from absolute to fixed.

        When removing a modal <dialog> from the document, it is also removed from the top layer, so it makes sense
        to reset the m_isModal flag as well as a result.

        Updated test expectations to reflect new passing tests.

        * html/HTMLDialogElement.cpp:
        (WebCore::HTMLDialogElement::removedFromAncestor):
        * html/HTMLDialogElement.h:

2021-10-06  Youenn Fablet  <youenn@apple.com>

        CoreAudioSharedUnit should not clear its persistentID when device capture changes
        https://bugs.webkit.org/show_bug.cgi?id=231280

        Reviewed by Eric Carlson.

        Manually tested.

        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
        (WebCore::CoreAudioSharedUnit::cleanupAudioUnit):
        Partially reverting https://commits.webkit.org/r280702 which was clearing m_persistentID in cleanUpAudioUnit.
        The issue is that when unit is capturing and is changing capturing device, it will set m_persistentID then cleanUpAudioUnit
        as part of its reconfiguration. This was making m_persistentID being empty.
        When starting to capture, we often receive a notification of changed devices and we would check whether the new devices set
        contains m_persistentID. If not (which is the case since m_persistentID is empty), we would fail the capture.

2021-10-06  Chris Lord  <clord@igalia.com>

        [GTK][WPE] CSS scroll snapping interacts badly with smooth scrolling
        https://bugs.webkit.org/show_bug.cgi?id=229037

        Reviewed by Simon Fraser.

        Make CSS scroll snapping behave in a predictable way when scrolling
        with touchpads/screens on GTK/WPE.

        Test: fast/scrolling/gtk/user-scroll-snapping-interaction.html

        * platform/ScrollAnimator.h:
        (WebCore::ScrollAnimator::isUserScrollInProgress const):
        (WebCore::ScrollAnimator::isScrollSnapInProgress const):
        * platform/ScrollingEffectsController.cpp:
        (WebCore::ScrollingEffectsController::processWheelEventForKineticScrolling):
        (WebCore::ScrollingEffectsController::adjustDeltaForSnappingIfNeeded):
        (WebCore::ScrollingEffectsController::handleWheelEvent):
        (WebCore::ScrollingEffectsController::isUserScrollInProgress const):
        (WebCore::ScrollingEffectsController::isScrollSnapInProgress const):
        * platform/ScrollingEffectsController.h:
        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::isUserScrollInProgress const): Deleted.
        (WebCore::ScrollAnimatorMac::isScrollSnapInProgress const): Deleted.

2021-10-06  Antti Koivisto  <antti@apple.com>

        [LFC] Layout box should own its children
        https://bugs.webkit.org/show_bug.cgi?id=231288

        Reviewed by Alan Bujtas.

        Avoid the need to have a separate ownership scheme.

        Also make the box tree use CheckedPtrs.

        * layout/integration/LayoutIntegrationBoxTree.cpp:
        (WebCore::LayoutIntegration::BoxTree::appendChild):
        * layout/integration/LayoutIntegrationBoxTree.h:
        * layout/layouttree/LayoutBox.cpp:
        (WebCore::Layout::Box::setParent):
        (WebCore::Layout::Box::setNextSibling):
        (WebCore::Layout::Box::setPreviousSibling):
        * layout/layouttree/LayoutBox.h:
        (WebCore::Layout::Box::nextSibling const):
        (WebCore::Layout::Box::previousSibling const):
        (WebCore::Layout::Box::nextSibling):
        (WebCore::Layout::Box::setParent): Deleted.
        (WebCore::Layout::Box::setNextSibling): Deleted.
        (WebCore::Layout::Box::setPreviousSibling): Deleted.
        * layout/layouttree/LayoutContainerBox.cpp:
        (WebCore::Layout::ContainerBox::~ContainerBox):
        (WebCore::Layout::ContainerBox::appendChild):
        (WebCore::Layout::ContainerBox::destroyChildren):
        (WebCore::Layout::ContainerBox::setFirstChild): Deleted.
        (WebCore::Layout::ContainerBox::setLastChild): Deleted.
        * layout/layouttree/LayoutContainerBox.h:
        (WebCore::Layout::ContainerBox::firstChild const):
        (WebCore::Layout::ContainerBox::lastChild const):
        (WebCore::Layout::ContainerBox::firstChild):
        (): Deleted.
        * layout/layouttree/LayoutTreeBuilder.cpp:
        (WebCore::Layout::LayoutTree::LayoutTree):
        (WebCore::Layout::appendChild):
        (WebCore::Layout::TreeBuilder::buildLayoutTree):
        (WebCore::Layout::TreeBuilder::TreeBuilder):
        (WebCore::Layout::TreeBuilder::createReplacedBox):
        (WebCore::Layout::TreeBuilder::createTextBox):
        (WebCore::Layout::TreeBuilder::createLineBreakBox):
        (WebCore::Layout::TreeBuilder::createContainer):
        (WebCore::Layout::TreeBuilder::createLayoutBox):
        (WebCore::Layout::TreeBuilder::buildTableStructure):
        (WebCore::Layout::TreeBuilder::buildSubTree):
        * layout/layouttree/LayoutTreeBuilder.h:
        (WebCore::Layout::LayoutTree::root const):
        (WebCore::Layout::LayoutTree::append): Deleted.

2021-10-06  Alan Bujtas  <zalan@apple.com>

        Make containerForElement logic more explicit
        https://bugs.webkit.org/show_bug.cgi?id=231275

        Reviewed by Simon Fraser.

        1. Non-RenderElement renderers (e.g. text content) should return their parents. They are always in-flow, static positioned.  
        2. Have the explicit list of position types where the parent is the containing block.

        * rendering/RenderObject.cpp:
        (WebCore::containerForElement):

2021-10-06  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] word-break: break-all only allows mid-word arbitrary breaking positions
        https://bugs.webkit.org/show_bug.cgi?id=231247

        Reviewed by Antti Koivisto.

        Introduce a new type of breaking type where the arbitrary position is only applied when breaking mid-word within a continuous content.
        While normally when we search for a breaking position inside an overflowing continuous set of runs, we find ourselves inside a "word" and any breaking
        position would match the definition of the mid-work break.

        However in other cases when these runs consist more than just a "word", for example

          'XX ' (where the "white-space: break-spaces" sets the line breaking opportunity after the trailing whitespace)
          'word-break: break-all' does not affect the breaking behavior between the trailing X and the ' ' and therefore it is not a breaking position. 

        It may very well be a valid breaking position if some other CSS properties allow it, but the notion of being able to break at any position (break-all) does not apply here.

        see https://drafts.csswg.org/css-text-3/#word-break-property

        WPT progressions.

        * layout/formattingContexts/inline/InlineContentBreaker.cpp:
        (WebCore::Layout::nextTextRunIndex):
        (WebCore::Layout::previousTextRunIndex):
        (WebCore::Layout::findTrailingRunIndex):
        (WebCore::Layout::InlineContentBreaker::tryBreakingOverflowingRun const):
        (WebCore::Layout::InlineContentBreaker::tryBreakingPreviousNonOverflowingRuns const):
        (WebCore::Layout::InlineContentBreaker::tryBreakingNextOverflowingRuns const):
        (WebCore::Layout::InlineContentBreaker::processOverflowingContentWithText const):
        (WebCore::Layout::InlineContentBreaker::wordBreakBehavior const):
        (WebCore::Layout::InlineContentBreaker::tryBreakingTextRun const):
        * layout/formattingContexts/inline/InlineContentBreaker.h:

2021-10-06  Youenn Fablet  <youenn@apple.com>

        Implement https://w3c.github.io/push-api/#receiving-a-push-message
        https://bugs.webkit.org/show_bug.cgi?id=231070
        <rdar://problem/83759574>

        Reviewed by Chris Dumez.

        Implement firing a functional event and push message specialization.
        Covered by API test.

        * workers/service/server/SWServer.cpp:
        * workers/service/server/SWServer.h:
        * workers/service/server/SWServerToContextConnection.h:

2021-10-06  Youenn Fablet  <youenn@apple.com>

        Simplify BaseAudioSharedUnit client management
        https://bugs.webkit.org/show_bug.cgi?id=231230
        <rdar://83884131>

        Reviewed by Eric Carlson.

        Before the patch, m_clientsLock was used to handle BaseAudioSharedUnit concurrent access from main thread and audio thread.
        The potential issue is that if the audio unit is running and m_clients is locked in main thread due to a call of forEach,
        the audio thread might have to wait for the lock to be removed.
        This is not great as this might cause glitches and potential deadlocks if trying to stop the audio unit in main thread inside a forEach call.

        Instead of doing that, we now exclusively access m_clients from main thread, it does not require a lock anymore.
        The audio thread accesses a copy of m_clients, called m_audioThreadClients, which is only accessed in addClient/removeClient and from the audio thread.
        This reduces the possibility for stopping the audio thread and removes any potential deadlock.

        Covered by existing tests.

        * platform/mediastream/mac/BaseAudioSharedUnit.cpp:
        * platform/mediastream/mac/BaseAudioSharedUnit.h:
        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:

2021-10-06  Alicia Boya García  <aboya@igalia.com>

        [MSE][GStreamer] Honor MP4 edit lists
        https://bugs.webkit.org/show_bug.cgi?id=231019

        Reviewed by Xabier Rodriguez-Calvar.

        This patch takes into consideration the GstSegment attached to a
        sample to offset the PTS and DTS. This ensures accurate timestamps are
        obtained for MP4 files containing edit lists (commonly necessary for
        files containing video with B frames to have PTS starting at zero).

        Before this was implemented, a workaround was in place based on a
        heuristic (DTS = 0 && PTS > 0 && PTS < 0.1). The workaround is
        preserved for the sake of content without proper edit lists, but
        any edit list takes preference.

        The time fudge factor has been modified from 0.083 seconds up to
        0.100 seconds to accomodate the size of the empty edit in test.mp4
        used by Web Platform Tests.

        This test fixes improves expectation results and fixes two subtests in
        imported/w3c/web-platform-tests/media-source/mediasource-remove.html.

        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::currentTimeFudgeFactor):
        * platform/graphics/SourceBufferPrivate.h:
        (WebCore::SourceBufferPrivate::timeFudgeFactor const):
        * platform/graphics/gstreamer/MediaSampleGStreamer.cpp:
        (WebCore::MediaSampleGStreamer::extendToTheBeginning): Deleted.
        * platform/graphics/gstreamer/MediaSampleGStreamer.h:
        * platform/graphics/gstreamer/mse/AppendPipeline.cpp:
        (WebCore::bufferTimeToStreamTimeClamped):
        (WebCore::AppendPipeline::appsinkNewSample):

2021-10-06  Jer Noble  <jer.noble@apple.com>

        [Build-time perf] Forward declare JS TypedArrays
        https://bugs.webkit.org/show_bug.cgi?id=231196

        Reviewed by Tim Horton.

        According to `clang -ftime-trace`, compilation is spending a large amount of time inside TypedArrays.h.
        Most of the places where JavaScriptCore/<Type>Array.h is included in a header only needed a forward
        declaration, so include the new JavaScriptCore/Forward.h header instead, and move the include of the
        <Type>Array.h header into the implementation file.

        * Modules/encryptedmedia/legacy/LegacyCDM.h:
        * Modules/encryptedmedia/legacy/WebKitMediaKeySession.cpp:
        * Modules/encryptedmedia/legacy/WebKitMediaKeySession.h:
        * Modules/encryptedmedia/legacy/WebKitMediaKeys.cpp:
        * Modules/encryptedmedia/legacy/WebKitMediaKeys.h:
        * Modules/mediastream/RTCPeerConnection.h:
        * Modules/webaudio/AudioBuffer.h:
        * Modules/webaudio/AudioParam.h:
        * Modules/webaudio/AudioParamTimeline.h:
        * Modules/webaudio/IIRFilterNode.h:
        * Modules/webaudio/PeriodicWave.h:
        * Modules/webaudio/RealtimeAnalyser.h:
        * Modules/webaudio/WaveShaperDSPKernel.cpp:
        * Modules/webaudio/WaveShaperProcessor.h:
        * Modules/webxr/WebXRRigidTransform.h:
        * Modules/webxr/WebXRView.h:
        * css/DOMMatrix.cpp:
        * css/DOMMatrixReadOnly.h:
        * dom/TextEncoder.h:
        * dom/TextEncoderStreamEncoder.h:
        * html/ImageData.h:
        * html/WebKitMediaKeyError.h:
        * html/canvas/WebGLAny.h:
        * html/canvas/WebGLBuffer.cpp:
        (WebCore::WebGLBuffer::elementArrayBuffer const):
        * html/canvas/WebGLBuffer.h:
        * platform/graphics/LegacyCDMSession.h:
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/angle/GraphicsContextGLANGLE.cpp:
        * platform/graphics/avfoundation/cf/CDMSessionAVFoundationCF.cpp:
        (WebCore::CDMSessionAVFoundationCF::cachedKeyForKeyID const):
        * platform/graphics/avfoundation/cf/CDMSessionAVFoundationCF.h:
        * platform/graphics/avfoundation/objc/CDMSessionAVContentKeySession.h:
        * platform/graphics/avfoundation/objc/CDMSessionAVContentKeySession.mm:
        (WebCore::CDMSessionAVContentKeySession::cachedKeyForKeyID const):
        * platform/graphics/avfoundation/objc/CDMSessionAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/CDMSessionAVFoundationObjC.mm:
        (WebCore::CDMSessionAVFoundationObjC::cachedKeyForKeyID const):
        * platform/graphics/avfoundation/objc/CDMSessionAVStreamSession.h:
        * platform/graphics/avfoundation/objc/CDMSessionAVStreamSession.mm:
        (WebCore::CDMSessionAVStreamSession::cachedKeyForKeyID const):
        * platform/graphics/avfoundation/objc/MediaSampleAVFObjC.h:
        * platform/graphics/cocoa/SourceBufferParser.h:
        * platform/graphics/filters/FELighting.h:
        * platform/graphics/filters/FilterEffect.h:
        * testing/Internals.h:
        * testing/LegacyMockCDM.cpp:

2021-10-05  Basuke Suzuki  <basuke.suzuki@sony.com>

        [PlayStation] Fix build break after r283441
        https://bugs.webkit.org/show_bug.cgi?id=231277

        Unreviewed.

        No new tests because there is no behavior change.

        * platform/graphics/Path.h:
        (WebCore::Path::strokeBoundingRect):

2021-10-05  Tyler Wilcock  <tyler_w@apple.com>

        AX: Move handling of AXContents from platform wrapper to AX core
        https://bugs.webkit.org/show_bug.cgi?id=231231

        Reviewed by Chris Fleizach.

        No changed functionality.

        Moved handling of the AXContents (NSAccessibilityContentsAttribute) from the
        Mac wrapper accessibilityAttributeValue handler to AXCoreObject::contents.
        This makes it possible to share this code across multiple platforms.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::contents):
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityObjectInterface.h:
        * accessibility/isolatedtree/AXIsolatedObject.cpp:
        (WebCore::AXIsolatedObject::initializeAttributeData):
        * accessibility/isolatedtree/AXIsolatedObject.h:
        * accessibility/isolatedtree/AXIsolatedTree.h:
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):

2021-10-05  John Wilander  <wilander@apple.com>

        PCM: Allow measurement of links in nested, cross-site iframes
        https://bugs.webkit.org/show_bug.cgi?id=229204
        <rdar://problem/82310386>

        Reviewed by Alex Christensen.

        Developers have said it would be great to allow measurement of links served in
        nested, cross-site iframes on the click source. The click still count as if it
        happened on the first party click source site, and any attribution report still
        goes to that first party. This change enables the *serving* of measurable links
        in nested, cross-site iframes.

        The standards issue where this was discussed:
        https://github.com/privacycg/private-click-measurement/issues/7

        Test: http/tests/privateClickMeasurement/store-private-click-measurement-nested.html

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::parsePrivateClickMeasurement const):
            Removed the block for nested, cross-site iframes.

2021-10-05  Aditya Keerthi  <akeerthi@apple.com>

        [iOS] Transcode videos selected from UIImagePickerController
        https://bugs.webkit.org/show_bug.cgi?id=230639
        rdar://79665678

        Reviewed by Tim Horton.

        * en.lproj/Localizable.strings:

        Add a localizable string for the message displayed while transcoding
        video.

2021-10-05  Chris Dumez  <cdumez@apple.com>

        ASSERT(m_callback->hasCallback()) under IntersectionObserver::notify()
        https://bugs.webkit.org/show_bug.cgi?id=231235
        <rdar://80837616>

        Reviewed by Ryosuke Niwa.

        IntersectionObserver's JS callback stays alive as long as its JS wrapper and
        its JS wrapper's lifetime relies on the IntersectionObserver::isReachableFromOpaqueRoots()
        implementation. isReachableFromOpaqueRoots() keeps the wrapper alive as long
        as the JS wrappers of observation / pending targets are alive. However, as per specification,
        we always need to dispatch an observation for an observation target, even if that target
        is not connected. Our code was already taking care of dispatching such observation. However,
        there was nothing keeping the observation target alive in this case and thus nothing keeping
        the JS callback alive either.

        To address the issue, I am introducing a new m_targetsWaitingForFirstObservation data member
        which holds a strong ref to the observation target until the next time we call notify().
        This makes sure that the observation target (and its JS wrapper) stays alive long enough for
        us to dispatch the first observation for it. I also updated isReachableFromOpaqueRoots() to
        return true as long as m_targetsWaitingForFirstObservation is non-empty so that the
        IntersectionObserver's JS wrapper (and thus the JS callback) stay alive long enough too.

        Tests: intersection-observer/observe-disconnected-target-crash.html
               intersection-observer/observe-disconnected-target.html

        * page/IntersectionObserver.cpp:
        (WebCore::IntersectionObserver::observe):
        (WebCore::IntersectionObserver::unobserve):
        (WebCore::IntersectionObserver::removeAllTargets):
        (WebCore::IntersectionObserver::notify):
        (WebCore::IntersectionObserver::isReachableFromOpaqueRoots const):
        * page/IntersectionObserver.h:

2021-10-05  Jean-Yves Avenard  <jya@apple.com>

        createImageBitmap using a HLS video as source always return a black image.
        https://bugs.webkit.org/show_bug.cgi?id=231225
        rdar://83884031

        When playing HLS content, [AVURLAsset tracks] return an empty array.
        We need to instead retrieve it from the AVPlayerItem object. The method
        paintWithVideoOutput would have bailed out early as a consequence.
        So we refactor the code a little to retrieve the tracks where they can be found

        Reviewed by Eric Carlson.

        Test: http/tests/media/video-hls-copy-into-canvas.html

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerItem):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::tracksChanged):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::updateRotationSession):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::audioSourceProvider):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::updateLastImage):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::paintWithVideoOutput):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::firstEnabledTrack const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::firstEnabledAudibleTrack const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::firstEnabledVisibleTrack const):

2021-10-05  Jean-Yves Avenard  <jya@apple.com>

        REGRESSION (Monterey): paramountplus.com: Cannot enter fullscreen in Safari
        https://bugs.webkit.org/show_bug.cgi?id=231005

        The page performs a lot of canvas readbacks when entering or exiting
        fullscreen mode.
        When the media is encrypted, attempting to do so would have made the
        sync call from the content to GPU process hang for one full second.
        Worse the CATransaction should it fail to paint would retry continuously.
        After 10 attempts (and blocking the process for over 10s) the
        content process would get automatically killed.
        This works around rdar://83867877 where outputMediaDataWillChange isn't
        called following a call to
        [AVPlayerItemVideoOutput requestNotificationOfMediaDataChangeWithAdvanceInterval].
        In case we timed out. we will disable this functionality until there's a
        track change.

        Reviewed by Eric Carlson.

        We do not have the infrastructure to easily test interacting with encrypted
        content. Once bug 231006 is fixed, we could write a test to ensure that canvas
        readbacks do not lock-up.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::updateVideoTracks):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::waitForVideoOutputMediaDataWillChange):

2021-10-05  Ayumi Kojima  <ayumi_kojima@apple.com>

        Unreviewed, reverting r283339.

        Reverting because this commit may have caused fast/attachment
        tests to crash

        Reverted changeset:

        "[iOS][GPU Process] support `<attachment>`"
        https://bugs.webkit.org/show_bug.cgi?id=230781
        https://commits.webkit.org/r283339

2021-10-05  Patrick Angle  <pangle@apple.com>

        Web Inspector: Show color space for canvases in the Graphics tab on the overview cards
        https://bugs.webkit.org/show_bug.cgi?id=231205

        Reviewed by Devin Rousso.

        Use an enum instead of strings for color space values sent to the frontend.

        * inspector/InspectorCanvas.cpp:
        (WebCore::buildObjectForCanvasContextAttributes):

2021-10-05  Alan Bujtas  <zalan@apple.com>

        Remove leftover ASSERT.

        Unreviewed.

        * layout/formattingContexts/inline/InlineLineBuilder.cpp:
        (WebCore::Layout::LineBuilder::inlineItemWidth const): We could very well run the fast text measuring codepath with different styles e.g. when there's color difference.

2021-10-05  Gabriel Nava Marino  <gnavamarino@apple.com>

        Incorrect Length constructor used after blending negative Length
        https://bugs.webkit.org/show_bug.cgi?id=230873

        Reviewed by Antoine Quint.

        Test: fast/borders/border-radius-cubic-bezier-timing-function-negative-value.html

        * platform/Length.cpp:
        (WebCore::blend):

        Only call current Length constructor for the non-LengthType::Calculated types when the value is negative, otherwise use behavior before r273603.

        * style/StyleBuilderConverter.h:
        (WebCore::Style::BuilderConverter::convertToRadiusLength):

        Clamp BuilderConverter::convertToRadiusLength Lengths to values >= 0

2021-10-05  Kate Cheney  <katherine_cheney@apple.com>

        CSP: unsafe-eval tests timing out or failing
        https://bugs.webkit.org/show_bug.cgi?id=231113
        <rdar://problem/83425041>

        Reviewed by Brent Fulgham.

        No new tests. This will cause existing tests to pass.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::reportViolationForUnsafeEval):
        Add new parameter LogToConsole to ContentSecurityPolicy::allowEval()
        because in many cases we already log to console for eval violations
        when we throw an error.

        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSRemoteDOMWindowBase.cpp:
        Per the spec, we should set the DOM target to be the element's
        document. If the element is null, we set it to the window's document.

        * bindings/js/JSWorkerGlobalScopeBase.cpp:
        (WebCore::JSWorkerGlobalScopeBase::reportViolationForUnsafeEval):
        * bindings/js/JSWorkerGlobalScopeBase.h:
        * bindings/js/JSWorkletGlobalScopeBase.cpp:
        (WebCore::JSWorkletGlobalScopeBase::reportViolationForUnsafeEval):
        * bindings/js/JSWorkletGlobalScopeBase.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::setTimeout):
        (WebCore::DOMWindow::setInterval):
        Cases where we do not log to console already, so we should do it when
        we check for a violation.

        * page/csp/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::allowEval const):
        (WebCore::ContentSecurityPolicy::reportViolation const):
        Per the spec, the blockedURI for eval violations should be "eval".
        This patch updates the blockedURI to be a string when passed to
        reportViolation to allow this to happen.

        (WebCore::ContentSecurityPolicy::logToConsole const):
        Don't log an empty string to console. This allows us to pass an empty
        string when shouldLogToConsole == LogToConsole::No so we don't need to
        add an extra boolean to a lot of places to know whether to log.

        * page/csp/ContentSecurityPolicy.h:
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::setTimeout):
        (WebCore::WorkerGlobalScope::setInterval):

2021-10-05  Chris Dumez  <cdumez@apple.com>

        Authorization header lost on 30x redirects
        https://bugs.webkit.org/show_bug.cgi?id=230935
        <rdar://problem/83689955>

        Reviewed by Darin Adler.

        CFNetwork drops the Authorization request header in cases of same-origin redirects, which is not as per
        the fetch specification [1] and doesn't match the behavior of other browsers.

        To address the issue, WebKit adds the Authorization request back in case of a same-origin redirect.

        Test: http/tests/fetch/fetch-redirect-same-origin-authorization.html

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::willSendRequest):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::willSendRequest):

2021-10-05  Andres Gonzalez  <andresg_22@apple.com>

        Move handling of AXValue from platform wrapper to AX core code.
        https://bugs.webkit.org/show_bug.cgi?id=231200

        Reviewed by Chris Fleizach.

        No change in functionality.

        Moved handling of the AXValue (NSAccessibilityValueAttribute) from the
        Mac wrapper accessibilityAttributeValue handler to AXCoreObject::value.
        This makes possible to share this code across multiple platforms.

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::headingLevel const):
        Returns unsigned instead of int.
        * accessibility/AccessibilityNodeObject.h:
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::value):
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityObjectInterface.h:
        * accessibility/isolatedtree/AXIsolatedObject.h:
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):

2021-10-05  Tim Horton  <timothy_horton@apple.com>

        <model> should be draggable, similar to <img>
        https://bugs.webkit.org/show_bug.cgi?id=229246

        Reviewed by Wenson Hsieh.

        * page/DragActions.h:
        (WebCore::anyDragSourceAction):
        * page/DragController.cpp:
        (WebCore::DragController::draggableElement const):
        (WebCore::DragController::startDrag):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::dragHysteresisExceeded const):
        Make <model> draggable, vending a PasteboardImage with the model data and correct MIME type.
        We currently make a DragImage from a node snapshot, but later will want a richer DragImage.

2021-10-05  Gabriel Nava Marino  <gnavamarino@apple.com>

        Unsupported blending of mixed length types leads to nullptr deref when accessing m_value.calc in CSSPrimitiveValue::primitiveType()
        https://bugs.webkit.org/show_bug.cgi?id=230929

        Reviewed by Darin Adler.

        Test: fast/layoutformattingcontext/fit-content-min-height-animation.html

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::init):
        * platform/Length.cpp:
        (WebCore::blendMixedTypes):

2021-10-05  Nikos Mouchtaris  <nmouchtaris@apple.com>

        radial-gradient does not accept calc values that combine length and percent
        https://bugs.webkit.org/show_bug.cgi?id=230388

        Reviewed by Simon Fraser.

        Removed outdated check that disallowed combined percentage and length expressions.
        Added code to calculate radius for combined percentage and length expressions.

        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::consumeRadialGradient):

2021-10-05  Tim Horton  <timothy_horton@apple.com>

        Add an alternate style for form controls, and implement it for checkboxes and radio buttons
        https://bugs.webkit.org/show_bug.cgi?id=231160

        Reviewed by Sam Weinig.

        * rendering/RenderThemeIOS.h:
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::checkboxRadioBackgroundColor):
        Add alternate background colors. Currently these are not specified as
        semantic colors, so we inline the values.

        (WebCore::RenderThemeIOS::checkboxRadioBackgroundGradient):
        Add a gradient fill for checkbox and radio button backgrounds.

        (WebCore::RenderThemeIOS::paintCheckboxRadioInnerShadow):
        Add two inner shadows (really, a shadow and a glow) to the checkbox and radio button.

        (WebCore::RenderThemeIOS::paintCheckbox):
        (WebCore::RenderThemeIOS::paintRadio):
        Drop the border and use a filled background and inner shadows instead,
        when the setting is enabled.

2021-10-05  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r283335): Momentum scrolling is no longer locked to an axis
        https://bugs.webkit.org/show_bug.cgi?id=231206

        Reviewed by Wenson Hsieh.

        r283335 removed the line that constrained the scroll delta to an axis, so restore it.

        This bug only manifested during the momentum phase because both EventDispatcher and
        EventHandler send only non-momentum events through the filter. We should also filter
        deltas on momentum events (webkit.org/b/231207).

        Test: fast/scrolling/mac/momentum-axis-locking.html

        * platform/mac/ScrollingEffectsController.mm:
        (WebCore::ScrollingEffectsController::handleWheelEvent):

2021-10-05  Antti Koivisto  <antti@apple.com>

        [LFC][Integration] Introduce InlineBoxIterator
        https://bugs.webkit.org/show_bug.cgi?id=231233

        Reviewed by Alan Bujtas.

        And use it in InlineBoxPainter.

        The adoption is still incomplete here so only the legacy path is covered.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * layout/integration/InlineIteratorBox.h:
        (WebCore::InlineIterator::Box::isInlineBox const):
        (WebCore::InlineIterator::Box::isRootInlineBox const):
        * layout/integration/InlineIteratorBoxLegacyPath.h:
        (WebCore::InlineIterator::BoxLegacyPath::isInlineBox const):
        (WebCore::InlineIterator::BoxLegacyPath::isRootInlineBox const):
        (WebCore::InlineIterator::BoxLegacyPath::traverseNextInlineBox):
        (WebCore::InlineIterator::BoxLegacyPath::traversePreviousInlineBox):
        (WebCore::InlineIterator::BoxLegacyPath::inlineFlowBox const):
        * layout/integration/InlineIteratorBoxModernPath.h:
        (WebCore::InlineIterator::BoxModernPath::isInlineBox const):
        (WebCore::InlineIterator::BoxModernPath::isRootInlineBox const):
        (WebCore::InlineIterator::BoxModernPath::traverseNextInlineBox):
        (WebCore::InlineIterator::BoxModernPath::traversePreviousInlineBox):
        * layout/integration/InlineIteratorInlineBox.cpp: Added.
        (WebCore::InlineIterator::InlineBox::InlineBox):
        (WebCore::InlineIterator::InlineBox::nextInlineBox const):
        (WebCore::InlineIterator::InlineBox::previousInlineBox const):
        (WebCore::InlineIterator::InlineBoxIterator::InlineBoxIterator):
        (WebCore::InlineIterator::InlineBoxIterator::traverseNextInlineBox):
        (WebCore::InlineIterator::InlineBoxIterator::traversePreviousInlineBox):
        (WebCore::InlineIterator::inlineBoxFor):
        * layout/integration/InlineIteratorInlineBox.h: Added.
        (WebCore::InlineIterator::InlineBox::renderer const):
        (WebCore::InlineIterator::InlineBox::legacyInlineBox const):
        (WebCore::InlineIterator::InlineBoxIterator::InlineBoxIterator):
        (WebCore::InlineIterator::InlineBoxIterator::operator* const):
        (WebCore::InlineIterator::InlineBoxIterator::operator-> const):
        (WebCore::InlineIterator::InlineBoxIterator::get const):
        (WebCore::InlineIterator::InlineBox::iterator const):
        (isType):
        * rendering/InlineBoxPainter.cpp:
        (WebCore::InlineBoxPainter::InlineBoxPainter):
        (WebCore::clipRectForNinePieceImageStrip):
        (WebCore::InlineBoxPainter::paintMask):
        (WebCore::InlineBoxPainter::paintDecorations):
        (WebCore::InlineBoxPainter::paintFillLayer):
        (WebCore::InlineBoxPainter::paintBoxShadow):
        (WebCore::InlineBoxPainter::constrainToLineTopAndBottomIfNeeded const):
        * rendering/InlineBoxPainter.h:

2021-10-05  Antti Koivisto  <antti@apple.com>

        Remove m_autoShrinkToFitEnabled from RuleSet
        https://bugs.webkit.org/show_bug.cgi?id=231214

        Reviewed by Alan Bujtas.

        Make it RuleSetBuilder setting instead, enabled by default.

        * style/RuleSet.h:
        (WebCore::Style::RuleSet::disableAutoShrinkToFit): Deleted.
        * style/RuleSetBuilder.cpp:
        (WebCore::Style::RuleSetBuilder::RuleSetBuilder):
        (WebCore::Style::m_shrinkToFit):
        (WebCore::Style::RuleSetBuilder::~RuleSetBuilder):
        (WebCore::Style::m_resolver): Deleted.
        * style/RuleSetBuilder.h:
        * style/StyleInvalidator.cpp:
        (WebCore::Style::Invalidator::Invalidator):

        Here we still want to avoid shrink-to-fit since the constructed RuleSets are temporary.

        * style/StyleScopeRuleSets.cpp:
        (WebCore::Style::ScopeRuleSets::ScopeRuleSets):
        (WebCore::Style::ScopeRuleSets::resetAuthorStyle):
        (WebCore::Style::ScopeRuleSets::appendAuthorStyleSheets):

        Since RuleSetBuilder is scoped over everything we can no use it to do shrink-to-fit.

2021-10-05  Alan Bujtas  <zalan@apple.com>

        [IFC][Integration] Enable first-line style for modern line layout
        https://bugs.webkit.org/show_bug.cgi?id=231178

        Reviewed by Antti Koivisto.

        * layout/integration/LayoutIntegrationCoverage.cpp:
        (WebCore::LayoutIntegration::printReason):
        (WebCore::LayoutIntegration::canUseForStyle):
        (WebCore::LayoutIntegration::canUseForLineLayoutWithReason):
        * layout/integration/LayoutIntegrationCoverage.h:

2021-10-05  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Move tryBreaking*Run logic to standalone functions
        https://bugs.webkit.org/show_bug.cgi?id=231198

        Reviewed by Antti Koivisto.

        InlineContentBreaker::processOverflowingContentWithText is getting way to long and while I love keeping logic like this local, the upcoming WordBreak::BreakWord functionality
        makes this function body overlap multiple pages.

        * layout/formattingContexts/inline/InlineContentBreaker.cpp:
        (WebCore::Layout::findTrailingRunIndex):
        (WebCore::Layout::isWrappableRun):
        (WebCore::Layout::InlineContentBreaker::tryBreakingOverflowingRun const):
        (WebCore::Layout::InlineContentBreaker::tryBreakingPreviousNonOverflowingRuns const):
        (WebCore::Layout::InlineContentBreaker::tryBreakingNextOverflowingRuns const):
        (WebCore::Layout::InlineContentBreaker::processOverflowingContentWithText const):
        (): Deleted.
        * layout/formattingContexts/inline/InlineContentBreaker.h:

2021-10-05  Chris Lord  <clord@igalia.com>

        [GTK][WPE] REGRESSION: Async scrolling jumps to the top of the page until keyboard-initiated paging
        https://bugs.webkit.org/show_bug.cgi?id=230953

        Reviewed by Martin Robinson.

        Update the non-Mac/iOS async scrolling path to work correctly after the
        scrolling refactor. Trying to summarise, this implements
        ScrollingEffectsController in ScrollingTreeScrollingNodeDelegateNicosia
        and moves smooth and kinetic scrolling animations to
        ScrollingEffectsController, to be shared by both sync and async paths.

        No new tests, covered by existing tests (hopefully).

        * PlatformPlayStation.cmake:
        * SourcesGTK.txt:
        * SourcesWPE.txt:
        * page/scrolling/ScrollingTreeScrollingNode.h:
        * page/scrolling/nicosia/ScrollingTreeFrameScrollingNodeNicosia.cpp:
        (WebCore::ScrollingTreeFrameScrollingNodeNicosia::commitStateBeforeChildren):
        (WebCore::ScrollingTreeFrameScrollingNodeNicosia::commitStateAfterChildren):
        * page/scrolling/nicosia/ScrollingTreeOverflowScrollingNodeNicosia.cpp:
        (WebCore::ScrollingTreeOverflowScrollingNodeNicosia::commitStateAfterChildren):
        * page/scrolling/nicosia/ScrollingTreeScrollingNodeDelegateNicosia.cpp:
        (WebCore::ScrollingTreeScrollingNodeDelegateNicosia::ScrollingTreeScrollingNodeDelegateNicosia):
        (WebCore::ScrollingTreeScrollingNodeDelegateNicosia::updateFromStateNode):
        (WebCore::ScrollingTreeScrollingNodeDelegateNicosia::updateVisibleLengths):
        (WebCore::ScrollingTreeScrollingNodeDelegateNicosia::handleWheelEvent):
        (WebCore::ScrollingTreeScrollingNodeDelegateNicosia::stopScrollAnimations):
        (WebCore::ScrollingTreeScrollingNodeDelegateNicosia::animationTimerFired):
        (WebCore::ScrollingTreeScrollingNodeDelegateNicosia::createTimer):
        (WebCore::ScrollingTreeScrollingNodeDelegateNicosia::startAnimationCallback):
        (WebCore::ScrollingTreeScrollingNodeDelegateNicosia::stopAnimationCallback):
        (WebCore::ScrollingTreeScrollingNodeDelegateNicosia::allowsHorizontalScrolling const):
        (WebCore::ScrollingTreeScrollingNodeDelegateNicosia::allowsVerticalScrolling const):
        (WebCore::ScrollingTreeScrollingNodeDelegateNicosia::immediateScrollBy):
        (WebCore::ScrollingTreeScrollingNodeDelegateNicosia::adjustScrollPositionToBoundsIfNecessary):
        (WebCore::ScrollingTreeScrollingNodeDelegateNicosia::scrollOffset const):
        (WebCore::ScrollingTreeScrollingNodeDelegateNicosia::willStartScrollSnapAnimation):
        (WebCore::ScrollingTreeScrollingNodeDelegateNicosia::didStopScrollSnapAnimation):
        (WebCore::ScrollingTreeScrollingNodeDelegateNicosia::pageScaleFactor const):
        (WebCore::ScrollingTreeScrollingNodeDelegateNicosia::scrollExtents const):
        (WebCore::ScrollingTreeScrollingNodeDelegateNicosia::resetCurrentPosition): Deleted.
        (WebCore::ScrollingTreeScrollingNodeDelegateNicosia::ensureScrollAnimationKinetic): Deleted.
        (WebCore::ScrollingTreeScrollingNodeDelegateNicosia::ensureScrollAnimationSmooth): Deleted.
        (WebCore::ScrollingTreeScrollingNodeDelegateNicosia::pageScaleFactor): Deleted.
        (WebCore::ScrollingTreeScrollingNodeDelegateNicosia::scrollAnimationDidUpdate): Deleted.
        (WebCore::ScrollingTreeScrollingNodeDelegateNicosia::scrollAnimationDidEnd): Deleted.
        (WebCore::ScrollingTreeScrollingNodeDelegateNicosia::scrollExtentsForAnimation): Deleted.
        (WebCore::ScrollingTreeScrollingNodeDelegateNicosia::startTimerIfNecessary): Deleted.
        * page/scrolling/nicosia/ScrollingTreeScrollingNodeDelegateNicosia.h:
        * platform/ScrollAnimationKinetic.h:
        * platform/ScrollAnimationSmooth.h:
        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::retargetRunningAnimation):
        (WebCore::ScrollAnimator::handleWheelEvent):
        (WebCore::ScrollAnimator::scrollAnimationEnabled const):
        * platform/ScrollAnimator.h:
        * platform/ScrollingEffectsController.cpp:
        (WebCore::ScrollingEffectsController::retargetAnimatedScroll):
        (WebCore::ScrollingEffectsController::processWheelEventForKineticScrolling):
        (WebCore::ScrollingEffectsController::handleWheelEvent):
        (WebCore::ScrollingEffectsController::regargetAnimatedScroll): Deleted.
        * platform/ScrollingEffectsController.h:
        (WebCore::ScrollingEffectsControllerClient::scrollAnimationEnabled const):
        * platform/generic/ScrollAnimatorGeneric.cpp: Removed.
        (WebCore::ScrollAnimator::create): Deleted.
        (WebCore::ScrollAnimatorGeneric::ScrollAnimatorGeneric): Deleted.
        (WebCore::ScrollAnimatorGeneric::handleWheelEvent): Deleted.
        * platform/generic/ScrollAnimatorGeneric.h: Removed.
        (): Deleted.

2021-10-05  Antti Koivisto  <antti@apple.com>

        [LFC][Integration] Split BoxIterator into a base class and LeafBoxIterator
        https://bugs.webkit.org/show_bug.cgi?id=231229

        Reviewed by Alan Bujtas.

        LeafBoxIterator contains function for traversing non-inline boxes.
        BoxIterator becomes a non-instantiated base class.

        This is in preparation for adding InlineBoxIterator.

        * dom/Position.cpp:
        (WebCore::Position::inlineRunAndOffset const):
        * editing/InlineRunAndOffset.h:
        * editing/RenderedPosition.cpp:
        (WebCore::RenderedPosition::RenderedPosition):
        (WebCore::RenderedPosition::previousLeafOnLine const):
        (WebCore::RenderedPosition::nextLeafOnLine const):
        * editing/RenderedPosition.h:
        * editing/VisibleUnits.cpp:
        (WebCore::isTextOrLineBreakRun):
        (WebCore::previousTextOrLineBreakRun):
        (WebCore::nextTextOrLineBreakRun):
        (WebCore::startTextOrLineBreakRun):
        (WebCore::endTextOrLineBreakRun):
        (WebCore::logicallyPreviousRun):
        (WebCore::logicallyNextRun):
        (WebCore::visualWordPosition):
        * layout/integration/InlineIteratorBox.cpp:
        (WebCore::InlineIterator::Box::nextOnLine const):
        (WebCore::InlineIterator::Box::previousOnLine const):
        (WebCore::InlineIterator::Box::nextOnLineIgnoringLineBreak const):
        (WebCore::InlineIterator::Box::previousOnLineIgnoringLineBreak const):
        (WebCore::InlineIterator::LeafBoxIterator::LeafBoxIterator):
        (WebCore::InlineIterator::LeafBoxIterator::traverseNextOnLine):
        (WebCore::InlineIterator::LeafBoxIterator::traversePreviousOnLine):
        (WebCore::InlineIterator::LeafBoxIterator::traverseNextOnLineIgnoringLineBreak):
        (WebCore::InlineIterator::LeafBoxIterator::traversePreviousOnLineIgnoringLineBreak):
        (WebCore::InlineIterator::LeafBoxIterator::traverseNextOnLineInLogicalOrder):
        (WebCore::InlineIterator::LeafBoxIterator::traversePreviousOnLineInLogicalOrder):
        (WebCore::InlineIterator::boxFor):
        (WebCore::InlineIterator::BoxIterator::traverseNextOnLine): Deleted.
        (WebCore::InlineIterator::BoxIterator::traversePreviousOnLine): Deleted.
        (WebCore::InlineIterator::BoxIterator::traverseNextOnLineIgnoringLineBreak): Deleted.
        (WebCore::InlineIterator::BoxIterator::traversePreviousOnLineIgnoringLineBreak): Deleted.
        (WebCore::InlineIterator::BoxIterator::traverseNextOnLineInLogicalOrder): Deleted.
        (WebCore::InlineIterator::BoxIterator::traversePreviousOnLineInLogicalOrder): Deleted.
        * layout/integration/InlineIteratorBox.h:
        (WebCore::InlineIterator::BoxIterator::BoxIterator):
        * layout/integration/InlineIteratorLine.cpp:
        (WebCore::InlineIterator::Line::firstRun const):
        (WebCore::InlineIterator::Line::lastRun const):
        (WebCore::InlineIterator::Line::logicalStartRun const):
        (WebCore::InlineIterator::Line::logicalEndRun const):
        (WebCore::InlineIterator::Line::logicalStartRunWithNode const):
        (WebCore::InlineIterator::Line::logicalEndRunWithNode const):
        (WebCore::InlineIterator::Line::closestRunForPoint const):
        (WebCore::InlineIterator::Line::closestRunForLogicalLeftPosition const):
        (WebCore::InlineIterator::Line::firstSelectedBox const):
        (WebCore::InlineIterator::Line::lastSelectedBox const):
        * layout/integration/InlineIteratorLine.h:
        * layout/integration/InlineIteratorTextBox.cpp:
        (WebCore::InlineIterator::TextBoxIterator::TextBoxIterator):
        * layout/integration/InlineIteratorTextBox.h:
        * layout/integration/LayoutIntegrationLineLayout.cpp:
        (WebCore::LayoutIntegration::LineLayout::boxFor const):
        * layout/integration/LayoutIntegrationLineLayout.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::positionForPointWithInlineChildren):

2021-10-05  Martin Robinson  <mrobinson@webkit.org>

        [css-position-sticky] scrollIntoView should not take into account sticky positioning offsets
        https://bugs.webkit.org/show_bug.cgi?id=230689

        Reviewed by Simon Fraser.

        When calculating the location for absolute anchors rectangles,
        do not take into account sticky offsets. This means that when
        scrolling to elements that are stickily positioned, their static
        positions will be targeted.

        No new tests. This is covered by an existing WPT test.

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::getLeadingCorner const): Do not take into account sticky position when calculating this point.
        (WebCore::RenderElement::getTrailingCorner const): Ditto.

2021-10-05  Tim Nguyen  <ntim@apple.com>

        Replace document.topDocument().securityOrigin() with document.topOrigin()
        https://bugs.webkit.org/show_bug.cgi?id=231221

        Reviewed by Youenn Fablet.

        No behaviour change, Document::topOrigin() is defined as:

        `SecurityOrigin& topOrigin() const final { return topDocument().securityOrigin(); }`

        * dom/BroadcastChannel.cpp:
        (WebCore::shouldPartitionOrigin):
        * dom/DocumentStorageAccess.cpp:
        (WebCore::DocumentStorageAccess::hasStorageAccessQuickCheck):
        (WebCore::DocumentStorageAccess::hasStorageAccess):
        (WebCore::DocumentStorageAccess::requestStorageAccessQuickCheck):
        (WebCore::DocumentStorageAccess::requestStorageAccess):
        * dom/Element.cpp:
        (WebCore::Element::focus):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestResource):

2021-10-05  Tim Nguyen  <ntim@apple.com>

        Clean up shouldAutofocus in HTMLFormControlElement.cpp
        https://bugs.webkit.org/show_bug.cgi?id=231220

        Reviewed by Youenn Fablet.

        No behaviour change.

        Minor cleanups:
        - Make shouldAutofocus take `const HTMLFormControlElement&` instead of `HTMLFormControlElement*`
        - Clean up repeated calls to element->document()
        - Use topOrigin() instead topDocument().securityOrigin() (same thing, but shorter)

        * html/HTMLFormControlElement.cpp:
        (WebCore::shouldAutofocus):
        (WebCore::HTMLFormControlElement::didAttachRenderers):
        * html/HTMLFormControlElement.h:
        (WebCore::HTMLFormControlElement::hasAutofocused const):
        (WebCore::HTMLFormControlElement::hasAutofocused): Deleted.

2021-10-05  Myles C. Maxfield  <mmaxfield@apple.com>

        Negative integers in @font-palette-values are invalid
        https://bugs.webkit.org/show_bug.cgi?id=230788
        <rdar://problem/83528806>

        Unreviewed post-review cleanup.

        * css/parser/CSSParserImpl.cpp:
        (WebCore::CSSParserImpl::consumeFontPaletteValuesRule):

2021-10-04  Myles C. Maxfield  <mmaxfield@apple.com>

        Stop parsing context-sensitive colors in override-color
        https://bugs.webkit.org/show_bug.cgi?id=231052
        <rdar://problem/83746258>

        Reviewed by Simon Fraser.

        The spec has split the <color> production into two halves:
        absolute colors and non-absolute colors. This patch adds a new
        enum argument to consumeColor() to distinguish which production
        you want.

        Tests: imported/w3c/web-platform-tests/css/css-fonts/parsing/font-palette-values-invalid.html
               imported/w3c/web-platform-tests/css/css-fonts/parsing/font-palette-values-valid.html

        * css/StyleColor.cpp:
        (WebCore::StyleColor::colorFromKeyword):
        (WebCore::isVGAPaletteColor):
        (WebCore::isNonVGANamedColor):
        (WebCore::StyleColor::isAbsoluteColorKeyword):
        (WebCore::StyleColor::isSystemColorKeyword):
        (WebCore::StyleColor::isColorKeyword):
        (WebCore::StyleColor::isSystemColor): Deleted.
        * css/StyleColor.h:
        (WebCore::StyleColor::isColorKeyword):
        * css/parser/CSSParser.cpp:
        (WebCore::CSSParser::parseSystemColor):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeOverrideColorsDescriptor):
        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::consumeOriginColor):
        (WebCore::CSSPropertyParserHelpers::consumeColorWorkerSafe):
        (WebCore::CSSPropertyParserHelpers::consumeColor):
        * css/parser/CSSPropertyParserHelpers.h:
        (WebCore::CSSPropertyParserHelpers::consumeColor):
        * platform/ColorData.gperf:
        * testing/Internals.cpp:
        (WebCore::Internals::systemColorForCSSValue):

2021-10-04  Myles C. Maxfield  <mmaxfield@apple.com>

        Remove the "none" value from font-palette
        https://bugs.webkit.org/show_bug.cgi?id=231050
        <rdar://problem/83745650>

        Reviewed by Wenson Hsieh.

        The spec changed in
        https://github.com/w3c/csswg-drafts/commit/b7103b0269cde51914af02f5ca1e5582d44e7b70.
        Luckily, we never implemented this anyway, so this is just a parsing change.

        Tests: imported/w3c/web-platform-tests/css/css-fonts/parsing/font-palette-invalid.html
               imported/w3c/web-platform-tests/css/css-fonts/parsing/font-palette-valid.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::fontPaletteFromStyle):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeFontPalette):
        * platform/graphics/FontPalette.h:
        (WebCore::operator<<):
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::addAttributesForFontPalettes):
        * style/StyleBuilderConverter.h:
        (WebCore::Style::BuilderConverter::convertFontPalette):

2021-10-04  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Disable simplified text measuring codepath when first style line has related unique values
        https://bugs.webkit.org/show_bug.cgi?id=231177

        Reviewed by Antti Koivisto.

        * layout/formattingContexts/inline/InlineLineBuilder.cpp:
        (WebCore::Layout::LineBuilder::inlineItemWidth const):
        * layout/integration/LayoutIntegrationBoxTree.cpp:
        * rendering/RenderText.cpp:
        (WebCore::RenderText::computeCanUseSimplifiedTextMeasuring const):

2021-10-04  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Hyphenation should not be applied with 'word-break: break-all'
        https://bugs.webkit.org/show_bug.cgi?id=231189

        Reviewed by Antti Koivisto.

        "break-all: Breaking is allowed within “words”: specifically...Hyphenation is not applied."

        https://drafts.csswg.org/css-text-3/#word-break-property.

        * layout/formattingContexts/inline/InlineContentBreaker.cpp:
        (WebCore::Layout::InlineContentBreaker::wordBreakBehavior const):

2021-10-04  Cameron McCormack  <heycam@apple.com>

        Choose an appropriate color space when converting an SVG image into a NativeImage for canvas drawImage
        https://bugs.webkit.org/show_bug.cgi?id=231062
        <rdar://problem/83752451>

        Reviewed by Simon Fraser.

        When GPUP canvas is enabled, drawImage() with an SVG image is handled
        by drawing into a NativeImage and then sending that to the GPUP. We
        need to choose a color space for the NativeImage's ImageBuffer that
        matches the canvas.

        Once full SVG rendering is supported by the GPU process, we can undo
        this code, as we'll no longer be using a NativeImage.

        Test: imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage.https.html

        * html/canvas/CanvasRenderingContext2DBase.cpp:
        (WebCore::CanvasRenderingContext2DBase::drawImage):
        (WebCore::drawImageToContext):
        (WebCore::CanvasRenderingContext2DBase::fullCanvasCompositedDrawImage):
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawImageForCanvas):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/Image.cpp:
        (WebCore::Image::drawForCanvas):
        * platform/graphics/Image.h:
        * platform/graphics/MediaPlayer.h:
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::drawForCanvasForContainer):
        (WebCore::SVGImage::drawForContainer):
        (WebCore::SVGImage::drawForContainerInternal):
        (WebCore::SVGImage::nativeImage):
        (WebCore::SVGImage::drawForCanvas):
        (WebCore::SVGImage::draw):
        (WebCore::SVGImage::drawInternal):
        (WebCore::SVGImage::drawAsNativeImage):
        * svg/graphics/SVGImage.h:
        * svg/graphics/SVGImageForContainer.cpp:
        (WebCore::SVGImageForContainer::drawForCanvas):
        * svg/graphics/SVGImageForContainer.h:

2021-10-04  Jer Noble  <jer.noble@apple.com>

        [Build-time perf] Forward-declare more things in ScriptExecutionContext.h
        https://bugs.webkit.org/show_bug.cgi?id=231182

        Reviewed by Tim Horton.

        Forward declare, rather than include, more classes and enums in ScriptExecutionContext.h.

        Any inline definition in the style of `RefPtr<Type> type() { return nullptr; }` will cause a compilation
        error if the Type is not fully defined, so these definitions should be moved the the .cpp file.

        Removing all the #includes and replacing them with forward-declarations causes downstream failures,
        so add more forward-declarations and move definitions to the implementation file wherever possible.

        * Modules/permissions/Permissions.cpp:
        * Modules/permissions/Permissions.h:
        * Modules/storage/DummyStorageProvider.h:
        * dom/Document.cpp:
        * dom/Document.h:
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::permissionController):
        (WebCore::ScriptExecutionContext::createRTCDataChannelRemoteHandlerConnection):
        * dom/ScriptExecutionContext.h:
        (WebCore::ScriptExecutionContext::permissionController): Deleted.
        (WebCore::ScriptExecutionContext::createRTCDataChannelRemoteHandlerConnection): Deleted.
        * workers/WorkerLoaderProxy.h:
        * workers/WorkerGlobalScope.h:

2021-10-04  Simon Fraser  <simon.fraser@apple.com>

        Use ScrollClamping in more places in scrolling code
        https://bugs.webkit.org/show_bug.cgi?id=231140

        Reviewed by Antti Koivisto.

        Fold together two functions in ScrollingEffectsControllerClient with a ScrollClamping argument.
        Also use ScrollClamping to replace bool constrainsScrollingToContentEdge() on ScrollableArea.

        It's slightly annoying that ScrollClamping is a ScrollableArea state, but RenderMarquee has
        no clamping by default.

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::reconcileScrollingState):
        * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.h:
        * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.mm:
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::immediateScrollBy):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::immediateScrollByWithoutContentEdgeConstraints): Deleted.
        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::adjustScrollPositionToBoundsIfNecessary):
        (WebCore::ScrollAnimator::adjustScrollPositionIfNecessary const):
        (WebCore::ScrollAnimator::immediateScrollBy):
        (WebCore::ScrollAnimator::immediateScrollByWithoutContentEdgeConstraints): Deleted.
        * platform/ScrollAnimator.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::adjustScrollPositionWithinRange const):
        (WebCore::ScrollView::setScrollOffset):
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::ScrollableArea): Deleted.
        * platform/ScrollableArea.h: Undo the use of bitfields here because the memory saving
        is not worth the code complexity.
        (WebCore::ScrollableArea::currentScrollBehaviorStatus):
        (WebCore::ScrollableArea::setScrollBehaviorStatus):
        (WebCore::ScrollableArea::scrollClamping const):
        (WebCore::ScrollableArea::setScrollClamping):
        (WebCore::ScrollableArea::verticalScrollElasticity const):
        (WebCore::ScrollableArea::horizontalScrollElasticity const):
        (WebCore::ScrollableArea::scrollbarOverlayStyle const):
        (WebCore::ScrollableArea::currentScrollType const):
        (WebCore::ScrollableArea::setCurrentScrollType):
        (WebCore::ScrollableArea::constrainsScrollingToContentEdge const): Deleted.
        (WebCore::ScrollableArea::setConstrainsScrollingToContentEdge): Deleted.
        * platform/ScrollingEffectsController.cpp:
        (WebCore::ScrollingEffectsController::scrollAnimationDidUpdate):
        (WebCore::ScrollingEffectsController::scrollToOffsetForAnimation): Deleted.
        * platform/ScrollingEffectsController.h:
        * platform/mac/ScrollingEffectsController.mm:
        (WebCore::ScrollingEffectsController::applyScrollDeltaWithStretching):
        (WebCore::ScrollingEffectsController::updateRubberBandAnimatingState):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::RenderListBox):
        * rendering/RenderListBox.h: Minor rearrangement to optimize padding now that ScrollableArea is a little larger.
        * rendering/RenderMarquee.cpp:
        (WebCore::RenderMarquee::RenderMarquee):
        * testing/Internals.cpp:
        (WebCore::Internals::setScrollViewPosition):

2021-10-04  Chris Dumez  <cdumez@apple.com>

        Add SPI to launch a service service worker in a WKWebView and expose service worker to injected bundle
        https://bugs.webkit.org/show_bug.cgi?id=231045
        <rdar://problem/83744069>

        Reviewed by Geoff Garen.

        Add new [WKWebView loadServiceWorker:(NSURL *)] to load a service worker in a web view. When called,
        it causes us to create a page with HTML start registers the service worker with the provided URL.
        
        The service worker in question will differ slightly from usual service workers in that:
        - The service worker URL doesn't need to be HTTP/HTTPS. In particular, a custom scheme (with corresponding
          custom scheme handler) can be used.
        - The service worker will always run in the WKWebView's associated WebProcess (which can be controlled via
          WKWebViewConfiguration._relatedWebView).
        - The service worker will run on the main thead
        - The service worker is not persistent, meaning that it will not be saved to disk, unlike regular service
          workers.
        - The service worker's global object will be exposed to the injected bundle via a new serviceWorkerGlobalObjectIsAvailableForFrame
          function call on WKWebProcessPlugInLoadDelegate. The provided Frame will be the WKWebView's main frame.
        - The service worker will be unregistered & exit as soon as its WKWebView gets closed / deallocated.

        To make the service worker more usable via the injected bundle API, the following changes were made too:
        - [WKWebProcessPlugInFrame lookUpFrameFromJSContext:] will return the WKWebView's main frame when passed in
          that view's service worker context.
        - A new [WKWebProcessPlugInFrame jsContextForServiceWorkerWorld:(WKWebProcessPlugInScriptWorld *)] SPI was
          added to get the service worker's JS context from the view.

        I added an API test that launches such a service worker, makes sure the injected bundle gets notified on
        the main thread of the service worker global object and that it can script it. The test also makes sure
        the _relatedWebView SPI works to force a service worker into another view's process. It also tests that
        [WKWebProcessPlugInFrame lookUpFrameFromJSContext:] and [WKWebProcessPlugInFrame jsContextForServiceWorkerWorld:(WKWebProcessPlugInScriptWorld *)]
        work as expected. Finally, it makes sure the service worker properly exits when the view gets closed.

        * dom/Document.cpp:
        (WebCore::Document::isSecureContext const):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::commitData):
        * loader/FrameLoaderClient.h:
        * page/Frame.cpp:
        (WebCore::Frame::fromJSContext):
        * page/Frame.h:
        * page/Page.cpp:
        (WebCore::Page::serviceWorkerGlobalObject):
        (WebCore::Page::setServiceWorkerGlobalScope):
        * page/Page.h:
        (WebCore::Page::isServiceWorkerPage const):
        (WebCore::Page::markAsServiceWorkerPage):

        * platform/RegistrableDomain.h:
        (WebCore::RegistrableDomain::RegistrableDomainHash::hash):
        (WebCore::RegistrableDomain::RegistrableDomainHash::equal):
        Registrable domains are not case sensitive. Yet its HashTraits was doing case sensitive checks.
        The Service Worker code is using a HashMap whose key is a RegistrableDomain and my new API test
        was initially failing simply because I used an upper case domain name in my URL. To make my
        test pass, I decided to make the RegistrableDomain HashTraits case-insensitive, instead of using
        a lowercase domain in my new test.

        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::addRegistration):
        * workers/service/ServiceWorkerContextData.cpp:
        (WebCore::ServiceWorkerContextData::isolatedCopy const):
        (WebCore::ServiceWorkerContextData::isolatedCopy):
        * workers/service/ServiceWorkerContextData.h:
        (WebCore::ServiceWorkerContextData::encode const):
        (WebCore::ServiceWorkerContextData::decode):
        * workers/service/ServiceWorkerGlobalScope.cpp:
        (WebCore::ServiceWorkerGlobalScope::create):
        (WebCore::ServiceWorkerGlobalScope::notifyServiceWorkerPageOfCreationIfNecessary):
        (WebCore::ServiceWorkerGlobalScope::serviceWorkerPage):
        * workers/service/ServiceWorkerGlobalScope.h:
        * workers/service/ServiceWorkerJobData.cpp:
        (WebCore::ServiceWorkerJobData::serviceWorkerPageIdentifier const):
        (WebCore::ServiceWorkerJobData::isolatedCopy const):
        * workers/service/ServiceWorkerJobData.h:
        (WebCore::ServiceWorkerJobData::encode const):
        (WebCore::ServiceWorkerJobData::decode):
        * workers/service/server/RegistrationDatabase.cpp:
        (WebCore::RegistrationDatabase::importRecords):
        * workers/service/server/RegistrationStore.cpp:
        (WebCore::RegistrationStore::updateRegistration):
        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::addRegistrationFromStore):
        (WebCore::SWServer::addRegistration):
        (WebCore::SWServer::removeRegistration):
        (WebCore::SWServer::updateWorker):
        (WebCore::SWServer::tryInstallContextData):
        (WebCore::SWServer::installContextData):
        (WebCore::SWServer::runServiceWorkerIfNecessary):
        (WebCore::SWServer::runServiceWorker):
        (WebCore::SWServer::unregisterServiceWorkerClient):
        (WebCore::SWServer::removeContextConnection):
        (WebCore::SWServer::createContextConnection):
        * workers/service/server/SWServer.h:
        (WebCore::SWServer::shouldRunServiceWorkersOnMainThreadForTesting const):
        * workers/service/server/SWServerJobQueue.cpp:
        (WebCore::SWServerJobQueue::scriptFetchFinished):
        (WebCore::SWServerJobQueue::runRegisterJob):
        * workers/service/server/SWServerRegistration.cpp:
        (WebCore::SWServerRegistration::SWServerRegistration):
        * workers/service/server/SWServerRegistration.h:
        (WebCore::SWServerRegistration::serviceWorkerPageIdentifier const):
        * workers/service/server/SWServerToContextConnection.cpp:
        (WebCore::SWServerToContextConnection::SWServerToContextConnection):
        * workers/service/server/SWServerToContextConnection.h:
        (WebCore::SWServerToContextConnection::serviceWorkerPageIdentifier const):
        * workers/service/server/SWServerWorker.cpp:
        (WebCore::SWServerWorker::contextData const):
        (WebCore::SWServerWorker::workerThreadMode const):
        (WebCore::SWServerWorker::serviceWorkerPageIdentifier const):
        * workers/service/server/SWServerWorker.h:

2021-10-04  Ben Nham  <nham@apple.com>

        RemotePlayback missing forward declaration of Node
        https://bugs.webkit.org/show_bug.cgi?id=231193

        Unreviewed build fix.

        The missing forward declaration was introduced in r279443 and can cause a
        build failure when adding a new file to Sources.txt.

        * Modules/remoteplayback/RemotePlayback.h:

2021-10-04  John Pascoe  <j_pascoe@apple.com>

        [WebAuthn] Prefer internal user verification if available over pin entry.
        https://bugs.webkit.org/show_bug.cgi?id=213903
        <rdar://problem/65359269>

        Reviewed by Brent Fulgham.

        This adds an option to mock internal user verification in tests.

        * testing/MockWebAuthenticationConfiguration.h:
        (WebCore::MockWebAuthenticationConfiguration::HidConfiguration::encode const):
        (WebCore::MockWebAuthenticationConfiguration::HidConfiguration::decode):
        * testing/MockWebAuthenticationConfiguration.idl:

2021-10-04  Sam Weinig  <weinig@apple.com>

        Split WebXR extension module IDLs into their own files and settings
        https://bugs.webkit.org/show_bug.cgi?id=231149

        Reviewed by Dean Jackson.

        Split WebXRInputSource+Gamepad.idl out of WebXRInputSource.idl and
        WebXRSession+AR.idl out of WebXRSession.idl and make them depend on
        new module specific settings WebXRGamepadsModuleEnabled and 
        WebXRAugmentedRealityModuleEnabled respectively.

        Also adds spec links in the IDLs as I like to do. 

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/webxr/WebXRBoundedReferenceSpace.idl:
        * Modules/webxr/WebXRFrame.idl:
        * Modules/webxr/WebXRInputSource+Gamepad.idl: Added.
        * Modules/webxr/WebXRInputSource.idl:
        * Modules/webxr/WebXRInputSourceArray.idl:
        * Modules/webxr/WebXRLayer.idl:
        * Modules/webxr/WebXRPose.idl:
        * Modules/webxr/WebXRReferenceSpace.idl:
        * Modules/webxr/WebXRRenderState.idl:
        * Modules/webxr/WebXRRigidTransform.idl:
        * Modules/webxr/WebXRSession+AR.idl: Added.
        * Modules/webxr/WebXRSession.idl:
        * Modules/webxr/WebXRSpace.idl:
        * Modules/webxr/WebXRSystem.idl:
        * Modules/webxr/WebXRView.idl:
        * Modules/webxr/WebXRViewerPose.idl:
        * Modules/webxr/WebXRViewport.idl:
        * Modules/webxr/WebXRWebGLLayer.idl:
        * Modules/webxr/XREnvironmentBlendMode.idl:
        * Modules/webxr/XREye.idl:
        * Modules/webxr/XRFrameRequestCallback.idl:
        * Modules/webxr/XRHandedness.idl:
        * Modules/webxr/XRInputSourceEvent.idl:
        * Modules/webxr/XRInputSourcesChangeEvent.idl:
        * Modules/webxr/XRInteractionMode.idl:
        * Modules/webxr/XRReferenceSpaceEvent.idl:
        * Modules/webxr/XRReferenceSpaceType.idl:
        * Modules/webxr/XRRenderStateInit.idl:
        * Modules/webxr/XRSessionEvent.idl:
        * Modules/webxr/XRSessionInit.idl:
        * Modules/webxr/XRSessionMode.idl:
        * Modules/webxr/XRTargetRayMode.idl:
        * Modules/webxr/XRVisibilityState.idl:
        * Modules/webxr/XRWebGLLayerInit.idl:
        * WebCore.xcodeproj/project.pbxproj:

2021-10-04  Antti Koivisto  <antti@apple.com>

        Make RuleSetBuilder a class
        https://bugs.webkit.org/show_bug.cgi?id=231158

        Reviewed by Alan Bujtas.

        Improve encapsulation.

        This patch also makes clients use RuleSetBuilder directly removing the two-way dependency
        between RuleSet and RuleSetBuilder.

        * style/RuleSet.cpp:
        (WebCore::Style::RuleSet::addRule):
        (WebCore::Style::RuleSet::shrinkToFit):
        (WebCore::Style::RuleSet::addRulesFromSheet): Deleted.
        (WebCore::Style::shrinkDynamicRules): Deleted.
        * style/RuleSet.h:
        (WebCore::Style::RuleSet::DynamicMediaQueryRules::shrinkToFit):
        * style/RuleSetBuilder.cpp:
        (WebCore::Style::RuleSetBuilder::RuleSetBuilder):
        (WebCore::Style::m_resolver):
        (WebCore::Style::RuleSetBuilder::~RuleSetBuilder):
        (WebCore::Style::RuleSetBuilder::addRulesFromSheet):
        (WebCore::Style::RuleSetBuilder::addChildRules):
        (WebCore::Style::RuleSetBuilder::addStyleRule):
        (WebCore::Style::RuleSetBuilder::pushCascadeLayer):
        (WebCore::Style::RuleSetBuilder::popCascadeLayer):
        (WebCore::Style::RuleSetBuilder::updateCascadeLayerOrder):
        (WebCore::Style::RuleSetBuilder::addMutatingRulesToResolver):
        (WebCore::Style::RuleSetBuilder::MediaQueryCollector::pushAndEvaluate):
        (WebCore::Style::RuleSetBuilder::MediaQueryCollector::pop):
        (WebCore::Style::RuleSetBuilder::MediaQueryCollector::didMutateResolver):
        (WebCore::Style::RuleSetBuilder::MediaQueryCollector::addRuleIfNeeded):
        (WebCore::Style::RuleSetMediaQueryCollector::pushAndEvaluate): Deleted.
        (WebCore::Style::RuleSetMediaQueryCollector::pop): Deleted.
        (WebCore::Style::RuleSetMediaQueryCollector::didMutateResolver): Deleted.
        (WebCore::Style::RuleSetMediaQueryCollector::addRuleIfNeeded): Deleted.

        MediaQueryCollector is now a private inner struct of RuleSetBuilder.

        * style/RuleSetBuilder.h:
        * style/StyleInvalidator.cpp:
        (WebCore::Style::m_dirtiesAllStyle):
        * style/StyleScopeRuleSets.cpp:
        (WebCore::Style::ScopeRuleSets::updateUserAgentMediaQueryStyleIfNeeded const):
        (WebCore::Style::ScopeRuleSets::initializeUserStyle):
        (WebCore::Style::ScopeRuleSets::collectRulesFromUserStyleSheets):
        (WebCore::Style::ScopeRuleSets::appendAuthorStyleSheets):
        * style/UserAgentStyle.cpp:
        (WebCore::Style::UserAgentStyle::addToDefaultStyle):
        (WebCore::Style::UserAgentStyle::initDefaultStyleSheet):

2021-10-04  Kate Cheney  <katherine_cheney@apple.com>

        Unreviewed maccatalyst build fix.

        * platform/audio/ios/AudioSessionIOS.mm:
        (WebCore::AudioSessionIOS::setHostProcessAttribution):

2021-10-04  Lauro Moura  <lmoura@igalia.com>

        Fix LTS build after 242443@main

        Unreviewed build fix.

        * rendering/RenderBlockFlow.cpp:

2021-10-04  Alan Bujtas  <zalan@apple.com>

        'overflow-wrap: anywhere' should be considered when calculating min-content intrinsic sizes.
        https://bugs.webkit.org/show_bug.cgi?id=231152

        Reviewed by Javier Fernandez.

        As opposed to overflow-wrap: 'break-word', 'anywhere' should be taken into account when computing the preferred width.

        "An otherwise unbreakable sequence of characters may be broken at an arbitrary point... 
        Soft wrap opportunities introduced by anywhere are considered when calculating min-content intrinsic sizes."

        https://drafts.csswg.org/css-text-3/#overflow-wrap-property

        * rendering/RenderText.cpp:
        (WebCore::RenderText::computePreferredLogicalWidths):
        (WebCore::RenderText::computeCanUseSimplifiedTextMeasuring const):

2021-10-04  Kimmo Kinnunen  <kkinnunen@apple.com>

        Regression (r283238)[ MacOS wk1 ] fast/mediacapturefromelement/CanvasCaptureMediaStream-webgl-events.html is timing out
        https://bugs.webkit.org/show_bug.cgi?id=231022

        Reviewed by Youenn Fablet.

        Originally the implementation would always return red frame, and the test would pass.
        r283238 changed the implementation to not return a sample if there is not a display buffer,
        as logically such cannot be used as a sample.
        This broke the test case since the CanvasCaptureMediaStreamTrack would try to capture
        the canvas display buffer during next runloop iteration (0s timeout) after each modification.
        This does not work, as the display buffer is composed during "prepare for display"
        phase.

        Add CanvasBase observers to observe that display buffer has been prepared, and capture
        the media sample after that observer has fired.

        The test would work for wk2 due to timing related differences, preparation would have
        typically run before the canvas capture 0s timeout.

        Fixes fast/mediastream/captureStream/canvas3d.html for wk1.

        * Modules/mediastream/CanvasCaptureMediaStreamTrack.cpp:
        (WebCore::CanvasCaptureMediaStreamTrack::Source::startProducingData):
        (WebCore::CanvasCaptureMediaStreamTrack::Source::canvasChanged):
        (WebCore::CanvasCaptureMediaStreamTrack::Source::canvasDisplayBufferPrepared):
        * Modules/mediastream/CanvasCaptureMediaStreamTrack.h:
        * html/CanvasBase.cpp:
        (WebCore::CanvasBase::addDisplayBufferObserver):
        (WebCore::CanvasBase::removeDisplayBufferObserver):
        (WebCore::CanvasBase::notifyObserversCanvasDisplayBufferPrepared):
        * html/CanvasBase.h:
        (WebCore::CanvasBase::hasDisplayBufferObservers const):
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::prepareForDisplay):
        Move the "prepare only when the owner element is in the tree" logic to
        its correct place to the caller, e.g. to the element itself.

2021-10-03  Antti Koivisto  <antti@apple.com>

        Move RuleSet builder to a file of its own
        https://bugs.webkit.org/show_bug.cgi?id=231137

        Reviewed by Alan Bujtas.

        There is quite a bit of code for it.

        There is lots of room for refactoring and cleanups here. This patch does none of it.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * style/RuleSet.cpp:
        (WebCore::Style::RuleSet::addRule):
        (WebCore::Style::RuleSet::addRulesFromSheet):
        (WebCore::Style::RuleSet::Builder::addChildRules): Deleted.
        (WebCore::Style::RuleSet::Builder::addRulesFromSheet): Deleted.
        (WebCore::Style::RuleSet::Builder::~Builder): Deleted.
        (WebCore::Style::RuleSet::Builder::addStyleRule): Deleted.
        (WebCore::Style::RuleSet::Builder::registerLayers): Deleted.
        (WebCore::Style::RuleSet::Builder::pushCascadeLayer): Deleted.
        (WebCore::Style::RuleSet::Builder::popCascadeLayer): Deleted.
        (WebCore::Style::RuleSet::Builder::updateCascadeLayerOrder): Deleted.
        (WebCore::Style::RuleSet::Builder::addMutatingRulesToResolver): Deleted.
        (WebCore::Style::RuleSet::MediaQueryCollector::pushAndEvaluate): Deleted.
        (WebCore::Style::RuleSet::MediaQueryCollector::pop): Deleted.
        (WebCore::Style::RuleSet::MediaQueryCollector::didMutateResolver): Deleted.
        (WebCore::Style::RuleSet::MediaQueryCollector::addRuleIfNeeded): Deleted.

        MediaQueryCollector (an implementation detail of the Builder) moves too.

        * style/RuleSet.h:
        * style/RuleSetBuilder.cpp: Added.
        (WebCore::Style::RuleSetBuilder::~RuleSetBuilder):
        (WebCore::Style::RuleSetBuilder::addChildRules):
        (WebCore::Style::RuleSetBuilder::addRulesFromSheet):
        (WebCore::Style::RuleSetBuilder::addStyleRule):
        (WebCore::Style::RuleSetBuilder::registerLayers):
        (WebCore::Style::RuleSetBuilder::pushCascadeLayer):
        (WebCore::Style::RuleSetBuilder::popCascadeLayer):
        (WebCore::Style::RuleSetBuilder::updateCascadeLayerOrder):
        (WebCore::Style::RuleSetBuilder::addMutatingRulesToResolver):
        (WebCore::Style::RuleSetMediaQueryCollector::pushAndEvaluate):
        (WebCore::Style::RuleSetMediaQueryCollector::pop):
        (WebCore::Style::RuleSetMediaQueryCollector::didMutateResolver):
        (WebCore::Style::RuleSetMediaQueryCollector::addRuleIfNeeded):
        * style/RuleSetBuilder.h: Added.

2021-10-03  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Do not take hanging whitespace sequence into account while finding expansion opportunities
        https://bugs.webkit.org/show_bug.cgi?id=231132

        Reviewed by Antti Koivisto.

        Ignore hanging whitespace for expansion opportunities.
        This patch fixes imported/w3c/web-platform-tests/css/css-text/white-space/textarea-pre-wrap-014.html

        * layout/formattingContexts/inline/InlineLine.cpp:
        (WebCore::Layout::Line::applyRunExpansion):

2021-10-03  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] HangingTrailingContent should cache width/length
        https://bugs.webkit.org/show_bug.cgi?id=231128

        Reviewed by Antti Koivisto.

        Compute the length of the hanging trailing whitespace sequence.
        This is in preparation for fixing imported/w3c/web-platform-tests/css/css-text/white-space/textarea-pre-wrap-014.html

        * layout/formattingContexts/inline/InlineLine.cpp:
        (WebCore::Layout::Line::Line):
        (WebCore::Layout::Line::initialize):
        (WebCore::Layout::Line::resetTrailingContent):
        (WebCore::Layout::Line::appendTextContent):
        (WebCore::Layout::Line::appendNonReplacedInlineLevelBox):
        (WebCore::Layout::Line::HangingTrailingContent::add):
        (WebCore::Layout::Line::HangingTrailingContent::HangingTrailingContent): Deleted.
        (WebCore::Layout::Line::HangingTrailingContent::width const): Deleted.
        * layout/formattingContexts/inline/InlineLine.h:
        (WebCore::Layout::Line::HangingTrailingContent::length const):
        (WebCore::Layout::Line::HangingTrailingContent::width const):
        (WebCore::Layout::Line::HangingTrailingContent::reset):

2021-10-03  Sam Weinig  <weinig@apple.com>

        WebXRSession's m_environmentBlendMode and m_interactionMode are never initialized
        https://bugs.webkit.org/show_bug.cgi?id=231144

        Reviewed by Dean Jackson.

        The m_environmentBlendMode and m_interactionMode members of WebXRSession were
        not being initialized to anything and therefor were giving random data. This
        is not really testable, as the result is just that the tests no longer flake.

        * Modules/webxr/WebXRSession.h:

2021-10-03  David Kilzer  <ddkilzer@apple.com>

        Build fix: Attribute IOSurfaces created by camera and decoders to responsible WebProcess
        <https://bugs.webkit.org/show_bug.cgi?id=231075>
        <rdar://problem/83767168>

        Unreviewed build fix.

        * platform/graphics/cocoa/IOSurface.mm:
        - Remove IOSurfaceSPI.h header already included by IOSurface.h.
          This should force this source file to be rebuilt as well.

2021-10-03  Don Olmstead  <don.olmstead@sony.com>

        Non-unified build fixes, early October 2021 edition
        https://bugs.webkit.org/show_bug.cgi?id=231143

        Unreviewed non-unified build fixes.

        * Modules/filesystemaccess/FileSystemHandle.cpp:
        * Modules/push-api/PushMessageData.h:
        * html/track/InbandTextTrack.cpp:
        * inspector/agents/InspectorCanvasAgent.h:
        * loader/CrossOriginOpenerPolicy.cpp:
        * rendering/LegacyLineLayout.cpp:
        * rendering/RenderBlockFlow.cpp:

2021-10-03  Alan Bujtas  <zalan@apple.com>

        Incorrect preferred width computation when trimmable leading whitespace is present
        https://bugs.webkit.org/show_bug.cgi?id=231139

        Reviewed by Antti Koivisto.

        stripFrontSpaces should be reset to the default value whenever we are at the beginning of the line, while computing the preferred trimmed width.
        This is already done for line break boxes (<br>) but not when the force line break comes from a text content with
        preserved linebreak ("\n").

        See WPT progressions.

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::computeInlinePreferredLogicalWidths const):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::trimmedPreferredWidths):
        * rendering/RenderText.h:

2021-10-03  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Line functions can compute the "extra horizontal space"
        https://bugs.webkit.org/show_bug.cgi?id=231127

        Reviewed by Antti Koivisto.

        This is in preparation for making applyRunExpansion hanging whitespace aware.

        * layout/formattingContexts/inline/InlineLine.cpp:
        (WebCore::Layout::Line::removeCollapsibleContent):
        (WebCore::Layout::Line::applyRunExpansion):
        (WebCore::Layout::Line::visuallyCollapseHangingOverflow):
        * layout/formattingContexts/inline/InlineLine.h:
        * layout/formattingContexts/inline/InlineLineBuilder.cpp:
        (WebCore::Layout::LineBuilder::close):

2021-10-03  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Moving hanging whitespace sequence handling to Line
        https://bugs.webkit.org/show_bug.cgi?id=231126

        Reviewed by Antti Koivisto.

        Let the Line handle the whitespace hanging. Line::HangingTrailingContent will eventually gain more functionality.
        This is also in preparation for fixing imported/w3c/web-platform-tests/css/css-text/white-space/textarea-pre-wrap-014.html

        * layout/formattingContexts/inline/InlineLine.cpp:
        (WebCore::Layout::Line::Line):
        (WebCore::Layout::Line::visuallyCollapseHangingOverflow):
        (WebCore::Layout::Line::HangingTrailingContent::HangingTrailingContent):
        (WebCore::Layout::Line::HangingTrailingContent::width const):
        * layout/formattingContexts/inline/InlineLine.h:
        (WebCore::Layout::Line::hangingWhitespaceWidth const):
        (WebCore::Layout::Line::Run::shouldTrailingWhitespaceHang const):
        (WebCore::Layout::Line::Run::isOverflowWhitespaceHanging const): Deleted. shouldTrailingWhitespaceHang is a more descriptive name.
        * layout/formattingContexts/inline/InlineLineBoxBuilder.cpp:
        (WebCore::Layout::horizontalAlignmentOffset):
        (WebCore::Layout::LineBoxBuilder::build):
        (WebCore::Layout::hangingGlyphWidth): Deleted.
        * layout/formattingContexts/inline/InlineLineBuilder.cpp:
        (WebCore::Layout::LineBuilder::layoutInlineContent):
        * layout/formattingContexts/inline/InlineLineBuilder.h:

2021-10-03  Simon Fraser  <simon.fraser@apple.com>

        WebCore::Length incorrectly uses memcpy() for copy constructors/operator and IPC encoding/decoding
        https://bugs.webkit.org/show_bug.cgi?id=230744

        Reviewed by David Kilzer.

        Copy-constructing Length by memcpy is sketchy; replace with code that initializes the appropriate
        fields based on type, taking care to deref() and ref() the calc handle.
        
        Expose isFloat() for encoding.

        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::CalcParser::consumeValueIfCategory): Add a bit of calc logging.
        * platform/Length.cpp:
        (WebCore::Length::Length):
        * platform/Length.h:
        (WebCore::Length::Length):
        (WebCore::Length::operator=):
        (WebCore::Length::isFloat const):

2021-10-03  Basuke Suzuki  <basuke.suzuki@sony.com>

        Enable release log to stderr
        https://bugs.webkit.org/show_bug.cgi?id=230725
        <rdar://problem/83740529>

        Reviewed by Michael Catanzaro.

        SQLiteDatabase uses hard-coded %{public} format specifiers. Replace them with defined
        macro.

        No new tests because there is no behavior change.

        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::close):
        (WebCore::SQLiteDatabase::prepareStatementSlow):
        (WebCore::SQLiteDatabase::prepareStatement):
        (WebCore::SQLiteDatabase::prepareHeapStatementSlow):
        (WebCore::SQLiteDatabase::prepareHeapStatement):

2021-10-03  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r283335): rubber-banding no longer locks to an axis
        https://bugs.webkit.org/show_bug.cgi?id=231131

        Reviewed by Tim Horton.

        r283335 introduced a bug where pulling down to rubber-band would result in sideways
        motion even when the gesture was mostly vertical.

        ScrollingEffectsController::modifyScrollDeltaForStretching() has some axis-locking behavior
        that was broken by r283335, so restore the old behavior.

        Test: fast/scrolling/mac/rubberband-axis-locking.html

        * platform/mac/ScrollingEffectsController.mm:
        (WebCore::ScrollingEffectsController::modifyScrollDeltaForStretching):
        (WebCore::isHorizontalSide): Deleted.
        (WebCore::isVerticalSide): Deleted.

2021-10-03  Antti Koivisto  <antti@apple.com>

        [LFC][Integration] More run->box renaming and other iterator cleanups
        https://bugs.webkit.org/show_bug.cgi?id=231135

        Reviewed by Alan Bujtas.

        Also move TextBoxIterator to a file of its own.

        * Headers.cmake:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::localCaretRectForCharacterOffset):
        * dom/Position.cpp:
        (WebCore::hasInlineRun):
        (WebCore::Position::upstream const):
        (WebCore::Position::downstream const):
        (WebCore::searchAheadForBetterMatch):
        (WebCore::Position::inlineRunAndOffset const):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::deleteInsignificantText):
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::handleTextNode):
        (WebCore::TextIterator::handleTextRun):
        (WebCore::TextIterator::handleTextNodeFirstLetter):
        * editing/TextIterator.h:
        * layout/integration/InlineIteratorBox.cpp:
        (WebCore::InlineIterator::BoxIterator::BoxIterator):
        (WebCore::InlineIterator::BoxIterator::operator== const):
        (WebCore::InlineIterator::BoxIterator::atEnd const):
        (WebCore::InlineIterator::Box::line const):
        (WebCore::InlineIterator::BoxIterator::traverseNextOnLine):
        (WebCore::InlineIterator::BoxIterator::traversePreviousOnLine):
        (WebCore::InlineIterator::BoxIterator::traverseNextOnLineIgnoringLineBreak):
        (WebCore::InlineIterator::BoxIterator::traversePreviousOnLineIgnoringLineBreak):
        (WebCore::InlineIterator::BoxIterator::traverseNextOnLineInLogicalOrder):
        (WebCore::InlineIterator::BoxIterator::traversePreviousOnLineInLogicalOrder):
        (WebCore::InlineIterator::boxFor):
        (WebCore::InlineIterator::Box::modernPath const):
        (WebCore::InlineIterator::Box::legacyPath const):
        (WebCore::InlineIterator::TextBox::nextTextRun const): Deleted.
        (WebCore::InlineIterator::TextBox::nextTextRunInTextOrder const): Deleted.
        (WebCore::InlineIterator::TextBox::selectionRect const): Deleted.
        (WebCore::InlineIterator::TextBox::isCombinedText const): Deleted.
        (WebCore::InlineIterator::TextBox::fontCascade const): Deleted.
        (WebCore::InlineIterator::TextBoxIterator::TextBoxIterator): Deleted.
        (WebCore::InlineIterator::TextBoxIterator::traverseNextTextRun): Deleted.
        (WebCore::InlineIterator::TextBoxIterator::traverseNextTextRunInTextOrder): Deleted.
        (WebCore::InlineIterator::firstTextRunFor): Deleted.
        (WebCore::InlineIterator::firstTextRunInTextOrderFor): Deleted.
        (WebCore::InlineIterator::textRunFor): Deleted.
        (WebCore::InlineIterator::textRunsFor): Deleted.
        (WebCore::InlineIterator::runFor): Deleted.
        * layout/integration/InlineIteratorBox.h:
        (WebCore::InlineIterator::BoxIterator::BoxIterator):
        (WebCore::InlineIterator::BoxIterator::operator* const):
        (WebCore::InlineIterator::BoxIterator::operator-> const):
        (WebCore::InlineIterator::Box::legacyInlineBox const):
        (WebCore::InlineIterator::Box::inlineBox const):
        (WebCore::InlineIterator::TextBox::renderer const): Deleted.
        (WebCore::InlineIterator::TextBox::legacyInlineBox const): Deleted.
        (WebCore::InlineIterator::TextBoxIterator::TextBoxIterator): Deleted.
        (WebCore::InlineIterator::TextBoxIterator::operator++): Deleted.
        (WebCore::InlineIterator::TextBoxIterator::operator* const): Deleted.
        (WebCore::InlineIterator::TextBoxIterator::operator-> const): Deleted.
        (WebCore::InlineIterator::TextBoxIterator::get const): Deleted.
        (WebCore::InlineIterator::TextRunRange::TextRunRange): Deleted.
        (WebCore::InlineIterator::TextRunRange::begin const): Deleted.
        (WebCore::InlineIterator::TextRunRange::end const): Deleted.
        (WebCore::InlineIterator::TextBox::hasHyphen const): Deleted.
        (WebCore::InlineIterator::TextBox::TextBox): Deleted.
        (WebCore::InlineIterator::TextBox::text const): Deleted.
        (WebCore::InlineIterator::TextBox::start const): Deleted.
        (WebCore::InlineIterator::TextBox::end const): Deleted.
        (WebCore::InlineIterator::TextBox::length const): Deleted.
        (WebCore::InlineIterator::TextBox::offsetForPosition const): Deleted.
        (WebCore::InlineIterator::TextBox::positionForOffset const): Deleted.
        (WebCore::InlineIterator::TextBox::selectableRange const): Deleted.
        (WebCore::InlineIterator::TextBox::createTextRun const): Deleted.
        (isType): Deleted.
        * layout/integration/InlineIteratorBoxLegacyPath.h:
        (WebCore::InlineIterator::BoxLegacyPath::BoxLegacyPath):
        (WebCore::InlineIterator::BoxLegacyPath::traverseNextTextBox):
        (WebCore::InlineIterator::BoxLegacyPath::traverseNextTextBoxInTextOrder):
        (WebCore::InlineIterator::BoxLegacyPath::operator== const):
        (WebCore::InlineIterator::BoxLegacyPath::traverseNextInlineBoxInCacheOrder):
        (WebCore::InlineIterator::BoxLegacyPath::traversePreviousInlineBoxInCacheOrder):
        (WebCore::InlineIterator::BoxIteratorLegacyPath::BoxIteratorLegacyPath): Deleted.
        (WebCore::InlineIterator::BoxIteratorLegacyPath::isText const): Deleted.
        (WebCore::InlineIterator::BoxIteratorLegacyPath::rect const): Deleted.
        (WebCore::InlineIterator::BoxIteratorLegacyPath::isHorizontal const): Deleted.
        (WebCore::InlineIterator::BoxIteratorLegacyPath::dirOverride const): Deleted.
        (WebCore::InlineIterator::BoxIteratorLegacyPath::isLineBreak const): Deleted.
        (WebCore::InlineIterator::BoxIteratorLegacyPath::minimumCaretOffset const): Deleted.
        (WebCore::InlineIterator::BoxIteratorLegacyPath::maximumCaretOffset const): Deleted.
        (WebCore::InlineIterator::BoxIteratorLegacyPath::bidiLevel const): Deleted.
        (WebCore::InlineIterator::BoxIteratorLegacyPath::hasHyphen const): Deleted.
        (WebCore::InlineIterator::BoxIteratorLegacyPath::text const): Deleted.
        (WebCore::InlineIterator::BoxIteratorLegacyPath::start const): Deleted.
        (WebCore::InlineIterator::BoxIteratorLegacyPath::end const): Deleted.
        (WebCore::InlineIterator::BoxIteratorLegacyPath::length const): Deleted.
        (WebCore::InlineIterator::BoxIteratorLegacyPath::offsetForPosition const): Deleted.
        (WebCore::InlineIterator::BoxIteratorLegacyPath::positionForOffset const): Deleted.
        (WebCore::InlineIterator::BoxIteratorLegacyPath::selectableRange const): Deleted.
        (WebCore::InlineIterator::BoxIteratorLegacyPath::createTextRun const): Deleted.
        (WebCore::InlineIterator::BoxIteratorLegacyPath::renderer const): Deleted.
        (WebCore::InlineIterator::BoxIteratorLegacyPath::traverseNextTextRun): Deleted.
        (WebCore::InlineIterator::BoxIteratorLegacyPath::traverseNextTextRunInTextOrder): Deleted.
        (WebCore::InlineIterator::BoxIteratorLegacyPath::traverseNextOnLine): Deleted.
        (WebCore::InlineIterator::BoxIteratorLegacyPath::traversePreviousOnLine): Deleted.
        (WebCore::InlineIterator::BoxIteratorLegacyPath::traverseNextOnLineInLogicalOrder): Deleted.
        (WebCore::InlineIterator::BoxIteratorLegacyPath::traversePreviousOnLineInLogicalOrder): Deleted.
        (WebCore::InlineIterator::BoxIteratorLegacyPath::operator== const): Deleted.
        (WebCore::InlineIterator::BoxIteratorLegacyPath::atEnd const): Deleted.
        (WebCore::InlineIterator::BoxIteratorLegacyPath::legacyInlineBox const): Deleted.
        (WebCore::InlineIterator::BoxIteratorLegacyPath::rootInlineBox const): Deleted.
        (WebCore::InlineIterator::BoxIteratorLegacyPath::inlineTextBox const): Deleted.
        (WebCore::InlineIterator::BoxIteratorLegacyPath::initializeLogicalOrderCacheForLine): Deleted.
        (WebCore::InlineIterator::BoxIteratorLegacyPath::traverseNextInlineBoxInCacheOrder): Deleted.
        (WebCore::InlineIterator::BoxIteratorLegacyPath::traversePreviousInlineBoxInCacheOrder): Deleted.
        * layout/integration/InlineIteratorBoxModernPath.h:
        (WebCore::InlineIterator::BoxModernPath::BoxModernPath):
        (WebCore::InlineIterator::BoxModernPath::traverseNextTextBox):
        (WebCore::InlineIterator::BoxModernPath::traverseNextTextBoxInTextOrder):
        (WebCore::InlineIterator::BoxModernPath::operator== const):
        (WebCore::InlineIterator::BoxIteratorModernPath::BoxIteratorModernPath): Deleted.
        (WebCore::InlineIterator::BoxIteratorModernPath::isText const): Deleted.
        (WebCore::InlineIterator::BoxIteratorModernPath::rect const): Deleted.
        (WebCore::InlineIterator::BoxIteratorModernPath::isHorizontal const): Deleted.
        (WebCore::InlineIterator::BoxIteratorModernPath::dirOverride const): Deleted.
        (WebCore::InlineIterator::BoxIteratorModernPath::isLineBreak const): Deleted.
        (WebCore::InlineIterator::BoxIteratorModernPath::minimumCaretOffset const): Deleted.
        (WebCore::InlineIterator::BoxIteratorModernPath::maximumCaretOffset const): Deleted.
        (WebCore::InlineIterator::BoxIteratorModernPath::bidiLevel const): Deleted.
        (WebCore::InlineIterator::BoxIteratorModernPath::hasHyphen const): Deleted.
        (WebCore::InlineIterator::BoxIteratorModernPath::text const): Deleted.
        (WebCore::InlineIterator::BoxIteratorModernPath::start const): Deleted.
        (WebCore::InlineIterator::BoxIteratorModernPath::end const): Deleted.
        (WebCore::InlineIterator::BoxIteratorModernPath::length const): Deleted.
        (WebCore::InlineIterator::BoxIteratorModernPath::offsetForPosition const): Deleted.
        (WebCore::InlineIterator::BoxIteratorModernPath::positionForOffset const): Deleted.
        (WebCore::InlineIterator::BoxIteratorModernPath::selectableRange const): Deleted.
        (WebCore::InlineIterator::BoxIteratorModernPath::createTextRun const): Deleted.
        (WebCore::InlineIterator::BoxIteratorModernPath::renderer const): Deleted.
        (WebCore::InlineIterator::BoxIteratorModernPath::traverseNextTextRun): Deleted.
        (WebCore::InlineIterator::BoxIteratorModernPath::traverseNextTextRunInTextOrder): Deleted.
        (WebCore::InlineIterator::BoxIteratorModernPath::traverseNextOnLine): Deleted.
        (WebCore::InlineIterator::BoxIteratorModernPath::traversePreviousOnLine): Deleted.
        (WebCore::InlineIterator::BoxIteratorModernPath::traverseNextOnLineInLogicalOrder): Deleted.
        (WebCore::InlineIterator::BoxIteratorModernPath::traversePreviousOnLineInLogicalOrder): Deleted.
        (WebCore::InlineIterator::BoxIteratorModernPath::operator== const): Deleted.
        (WebCore::InlineIterator::BoxIteratorModernPath::atEnd const): Deleted.
        (WebCore::InlineIterator::BoxIteratorModernPath::box const): Deleted.
        (WebCore::InlineIterator::BoxIteratorModernPath::inlineContent const): Deleted.
        (WebCore::InlineIterator::BoxIteratorModernPath::traverseNextLeaf): Deleted.
        (WebCore::InlineIterator::BoxIteratorModernPath::traversePreviousLeaf): Deleted.
        (WebCore::InlineIterator::BoxIteratorModernPath::setAtEnd): Deleted.
        (WebCore::InlineIterator::BoxIteratorModernPath::boxes const): Deleted.
        (WebCore::InlineIterator::BoxIteratorModernPath::line const): Deleted.
        * layout/integration/InlineIteratorLineLegacyPath.h:
        (WebCore::InlineIterator::LineIteratorLegacyPath::firstRun const):
        (WebCore::InlineIterator::LineIteratorLegacyPath::lastRun const):
        (WebCore::InlineIterator::LineIteratorLegacyPath::logicalStartRun const):
        (WebCore::InlineIterator::LineIteratorLegacyPath::logicalEndRun const):
        * layout/integration/InlineIteratorLineModernPath.h:
        (WebCore::InlineIterator::LineIteratorModernPath::firstRun const):
        (WebCore::InlineIterator::LineIteratorModernPath::lastRun const):
        (WebCore::InlineIterator::LineIteratorModernPath::logicalStartRun const):
        (WebCore::InlineIterator::LineIteratorModernPath::logicalEndRun const):
        * layout/integration/InlineIteratorTextBox.cpp: Added.
        (WebCore::InlineIterator::TextBox::nextTextBox const):
        (WebCore::InlineIterator::TextBox::nextTextBoxInTextOrder const):
        (WebCore::InlineIterator::TextBox::selectionRect const):
        (WebCore::InlineIterator::TextBox::isCombinedText const):
        (WebCore::InlineIterator::TextBox::fontCascade const):
        (WebCore::InlineIterator::TextBoxIterator::TextBoxIterator):
        (WebCore::InlineIterator::TextBoxIterator::traverseNextTextBox):
        (WebCore::InlineIterator::TextBoxIterator::traverseNextTextBoxInTextOrder):
        (WebCore::InlineIterator::firstTextBoxFor):
        (WebCore::InlineIterator::firstTextBoxInTextOrderFor):
        (WebCore::InlineIterator::textBoxFor):
        (WebCore::InlineIterator::textBoxesFor):
        * layout/integration/InlineIteratorTextBox.h: Added.
        (WebCore::InlineIterator::TextBox::renderer const):
        (WebCore::InlineIterator::TextBox::legacyInlineBox const):
        (WebCore::InlineIterator::TextBoxIterator::TextBoxIterator):
        (WebCore::InlineIterator::TextBoxIterator::operator++):
        (WebCore::InlineIterator::TextBoxIterator::operator* const):
        (WebCore::InlineIterator::TextBoxIterator::operator-> const):
        (WebCore::InlineIterator::TextBoxIterator::get const):
        (WebCore::InlineIterator::TextBoxRange::TextBoxRange):
        (WebCore::InlineIterator::TextBoxRange::begin const):
        (WebCore::InlineIterator::TextBoxRange::end const):
        (WebCore::InlineIterator::TextBox::hasHyphen const):
        (WebCore::InlineIterator::TextBox::TextBox):
        (WebCore::InlineIterator::TextBox::text const):
        (WebCore::InlineIterator::TextBox::start const):
        (WebCore::InlineIterator::TextBox::end const):
        (WebCore::InlineIterator::TextBox::length const):
        (WebCore::InlineIterator::TextBox::offsetForPosition const):
        (WebCore::InlineIterator::TextBox::positionForOffset const):
        (WebCore::InlineIterator::TextBox::selectableRange const):
        (WebCore::InlineIterator::TextBox::createTextRun const):
        (isType):
        * layout/integration/LayoutIntegrationCoverage.h:
        * layout/integration/LayoutIntegrationLineLayout.cpp:
        (WebCore::LayoutIntegration::LineLayout::textBoxesFor const):
        (WebCore::LayoutIntegration::LineLayout::boxFor const):
        (WebCore::LayoutIntegration::LineLayout::textRunsFor const): Deleted.
        (WebCore::LayoutIntegration::LineLayout::runFor const): Deleted.
        * layout/integration/LayoutIntegrationLineLayout.h:
        * rendering/CaretRectComputation.cpp:
        * rendering/LegacyInlineTextBox.h:
        * rendering/LegacyLineLayout.cpp:
        (WebCore::setLogicalWidthForTextRun):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::getLeadingCorner const):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::collectSelectionGeometries):
        * rendering/RenderLineBreak.cpp:
        (WebCore::RenderLineBreak::linesBoundingBox const):
        (WebCore::RenderLineBreak::absoluteRects const):
        (WebCore::RenderLineBreak::absoluteQuads const):
        (WebCore::RenderLineBreak::collectSelectionGeometries):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::positionForPoint):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::absoluteRects const):
        (WebCore::RenderText::collectSelectionGeometries):
        (WebCore::collectAbsoluteQuads):
        (WebCore::RenderText::absoluteQuadsForRange const):
        (WebCore::RenderText::positionForPoint):
        (WebCore::RenderText::firstRunLocation const):
        (WebCore::RenderText::linesBoundingBox const):
        (WebCore::RenderText::collectSelectionGeometriesForLineBoxes):
        (WebCore::RenderText::caretMinOffset const):
        (WebCore::RenderText::caretMaxOffset const):
        (WebCore::RenderText::countRenderedCharacterOffsetsUntil const):
        (WebCore::containsOffset):
        (WebCore::RenderText::hasRenderedText const):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::RenderTreeAsText::writeRenderObject):
        (WebCore::write):
        * rendering/TextBoxPainter.cpp:
        (WebCore::TextBoxPainter::TextBoxPainter):
        (WebCore::TextBoxPainter::paintDecoration):
        (WebCore::TextBoxPainter::calculateUnionOfAllDocumentMarkerBounds):
        * rendering/TextBoxPainter.h:
        * rendering/TextDecorationPainter.cpp:
        (WebCore::TextDecorationPainter::paintTextDecoration):
        * rendering/TextDecorationPainter.h:
        (WebCore::TextDecorationPainter::setTextBox):
        (WebCore::TextDecorationPainter::setTextBoxIterator): Deleted.
        * rendering/style/RenderStyle.cpp:
        * style/InlineTextBoxStyle.cpp:

2021-10-03  Tim Horton  <timothy_horton@apple.com>

        Setting and RuntimeEnabledFeature names in IDL files should match those used elsewhere
        https://bugs.webkit.org/show_bug.cgi?id=231129

        Rubber-stamped by Sam Weinig.

        No new tests; no functional change.

        For ease of searching the project, the Setting/RuntimeEnabledFeature names inside
        IDL files should match the names used in C++ code (specifically, they shouldn't
        magically elide the -Enabled suffix, so that if you search for XFeatureEnabled,
        you don't miss the IDL uses).

        * Modules/applepay/ApplePaySession.idl:
        * Modules/applepay/ApplePaySetup.idl:
        * Modules/applepay/ApplePaySetupFeature.idl:
        * Modules/async-clipboard/Clipboard.idl:
        * Modules/async-clipboard/ClipboardItem.idl:
        * Modules/async-clipboard/Navigator+Clipboard.idl:
        * Modules/beacon/Navigator+Beacon.idl:
        * Modules/cache/DOMCache.idl:
        * Modules/cache/DOMCacheStorage.idl:
        * Modules/cache/WindowOrWorkerGlobalScope+Caches.idl:
        * Modules/contact-picker/ContactsManager.idl:
        * Modules/contact-picker/Navigator+Contacts.idl:
        * Modules/credentialmanagement/BasicCredential.idl:
        * Modules/credentialmanagement/CredentialsContainer.idl:
        * Modules/credentialmanagement/Navigator+Credentials.idl:
        * Modules/encryptedmedia/MediaKeyMessageEvent.idl:
        * Modules/encryptedmedia/MediaKeySession.idl:
        * Modules/encryptedmedia/MediaKeyStatusMap.idl:
        * Modules/encryptedmedia/MediaKeySystemAccess.idl:
        * Modules/encryptedmedia/MediaKeys.idl:
        * Modules/encryptedmedia/Navigator+EME.idl:
        * Modules/encryptedmedia/legacy/WebKitMediaKeyMessageEvent.idl:
        * Modules/encryptedmedia/legacy/WebKitMediaKeyNeededEvent.idl:
        * Modules/encryptedmedia/legacy/WebKitMediaKeySession.idl:
        * Modules/encryptedmedia/legacy/WebKitMediaKeys.idl:
        * Modules/entriesapi/DOMFileSystem.idl:
        * Modules/entriesapi/FileSystemDirectoryEntry.idl:
        * Modules/entriesapi/FileSystemDirectoryReader.idl:
        * Modules/entriesapi/FileSystemEntry.idl:
        * Modules/entriesapi/FileSystemFileEntry.idl:
        * Modules/entriesapi/HTMLInputElement+EntriesAPI.idl:
        * Modules/fetch/FetchRequest.idl:
        * Modules/filesystemaccess/FileSystemDirectoryHandle.idl:
        * Modules/filesystemaccess/FileSystemFileHandle.idl:
        * Modules/filesystemaccess/FileSystemHandle.idl:
        * Modules/filesystemaccess/StorageManager+FileSystemAccess.idl:
        * Modules/gamepad/Gamepad.idl:
        * Modules/gamepad/GamepadButton.idl:
        * Modules/gamepad/GamepadEvent.idl:
        * Modules/gamepad/Navigator+Gamepad.idl:
        * Modules/geolocation/GeolocationCoordinates.idl:
        * Modules/highlight/Highlight.idl:
        * Modules/highlight/HighlightRegister.idl:
        * Modules/mediacapabilities/AudioConfiguration.idl:
        * Modules/mediacapabilities/MediaCapabilities.idl:
        * Modules/mediacapabilities/MediaCapabilitiesDecodingInfo.idl:
        * Modules/mediacapabilities/MediaCapabilitiesEncodingInfo.idl:
        * Modules/mediacapabilities/MediaCapabilitiesInfo.idl:
        * Modules/mediacapabilities/MediaDecodingConfiguration.idl:
        * Modules/mediacapabilities/MediaEncodingConfiguration.idl:
        * Modules/mediacapabilities/Navigator+MediaCapabilities.idl:
        * Modules/mediacapabilities/VideoConfiguration.idl:
        * Modules/mediacontrols/MediaControlsHost.idl:
        * Modules/mediarecorder/BlobEvent.idl:
        * Modules/mediarecorder/MediaRecorder.idl:
        * Modules/mediarecorder/MediaRecorderErrorEvent.idl:
        * Modules/mediasession/MediaMetadataInit.idl:
        * Modules/mediasession/MediaMetadataPlaylistMixin.idl:
        * Modules/mediasession/MediaSessionActionDetails.idl:
        * Modules/mediasession/MediaSessionCoordinator.idl:
        * Modules/mediasession/MediaSessionCoordinatorMixin.idl:
        * Modules/mediasession/MediaSessionPlaylistMixin.idl:
        * Modules/mediasession/Navigator+MediaSession.idl:
        * Modules/mediasource/AudioTrack+MediaSource.idl:
        * Modules/mediasource/DOMURL+MediaSource.idl:
        * Modules/mediasource/MediaSource.idl:
        * Modules/mediasource/SourceBuffer.idl:
        * Modules/mediasource/SourceBufferList.idl:
        * Modules/mediasource/TextTrack+MediaSource.idl:
        * Modules/mediasource/VideoPlaybackQuality.idl:
        * Modules/mediasource/VideoTrack+MediaSource.idl:
        * Modules/mediastream/MediaDevices.idl:
        * Modules/mediastream/Navigator+MediaDevices.idl:
        * Modules/mediastream/RTCAnswerOptions.idl:
        * Modules/mediastream/RTCCertificate.idl:
        * Modules/mediastream/RTCConfiguration.idl:
        * Modules/mediastream/RTCDTMFSender.idl:
        * Modules/mediastream/RTCDTMFToneChangeEvent.idl:
        * Modules/mediastream/RTCDataChannel.idl:
        * Modules/mediastream/RTCDataChannelEvent.idl:
        * Modules/mediastream/RTCDtlsTransport.idl:
        * Modules/mediastream/RTCDtlsTransportState.idl:
        * Modules/mediastream/RTCEncodedAudioFrame.idl:
        * Modules/mediastream/RTCEncodedVideoFrame.idl:
        * Modules/mediastream/RTCError.idl:
        * Modules/mediastream/RTCErrorEvent.idl:
        * Modules/mediastream/RTCIceCandidate.idl:
        * Modules/mediastream/RTCIceCandidateInit.idl:
        * Modules/mediastream/RTCIceConnectionState.idl:
        * Modules/mediastream/RTCIceGatheringState.idl:
        * Modules/mediastream/RTCIceServer.idl:
        * Modules/mediastream/RTCIceTransport.idl:
        * Modules/mediastream/RTCIceTransportState.idl:
        * Modules/mediastream/RTCOfferAnswerOptions.idl:
        * Modules/mediastream/RTCOfferOptions.idl:
        * Modules/mediastream/RTCPeerConnection.idl:
        * Modules/mediastream/RTCPeerConnectionIceErrorEvent.idl:
        * Modules/mediastream/RTCPeerConnectionIceEvent.idl:
        * Modules/mediastream/RTCPeerConnectionState.idl:
        * Modules/mediastream/RTCPriorityType.idl:
        * Modules/mediastream/RTCRtcpParameters.idl:
        * Modules/mediastream/RTCRtpCapabilities.idl:
        * Modules/mediastream/RTCRtpCodecCapability.idl:
        * Modules/mediastream/RTCRtpCodecParameters.idl:
        * Modules/mediastream/RTCRtpCodingParameters.idl:
        * Modules/mediastream/RTCRtpContributingSource.idl:
        * Modules/mediastream/RTCRtpDecodingParameters.idl:
        * Modules/mediastream/RTCRtpEncodingParameters.idl:
        * Modules/mediastream/RTCRtpFecParameters.idl:
        * Modules/mediastream/RTCRtpHeaderExtensionParameters.idl:
        * Modules/mediastream/RTCRtpParameters.idl:
        * Modules/mediastream/RTCRtpReceiver+Transform.idl:
        * Modules/mediastream/RTCRtpReceiver.idl:
        * Modules/mediastream/RTCRtpRtxParameters.idl:
        * Modules/mediastream/RTCRtpSFrameTransform.idl:
        * Modules/mediastream/RTCRtpSFrameTransformErrorEvent.idl:
        * Modules/mediastream/RTCRtpScriptTransform.idl:
        * Modules/mediastream/RTCRtpScriptTransformer.idl:
        * Modules/mediastream/RTCRtpSendParameters.idl:
        * Modules/mediastream/RTCRtpSender+Transform.idl:
        * Modules/mediastream/RTCRtpSender.idl:
        * Modules/mediastream/RTCRtpSynchronizationSource.idl:
        * Modules/mediastream/RTCRtpTransceiver.idl:
        * Modules/mediastream/RTCRtpTransceiverDirection.idl:
        * Modules/mediastream/RTCSctpTransport.idl:
        * Modules/mediastream/RTCSctpTransportState.idl:
        * Modules/mediastream/RTCSdpType.idl:
        * Modules/mediastream/RTCSessionDescription.idl:
        * Modules/mediastream/RTCSignalingState.idl:
        * Modules/mediastream/RTCStatsReport.idl:
        * Modules/mediastream/RTCTrackEvent.idl:
        * Modules/mediastream/RTCTransformEvent.idl:
        * Modules/model-element/HTMLModelElement.idl:
        * Modules/paymentrequest/MerchantValidationEvent.idl:
        * Modules/paymentrequest/PaymentAddress.idl:
        * Modules/paymentrequest/PaymentMethodChangeEvent.idl:
        * Modules/paymentrequest/PaymentRequest.idl:
        * Modules/paymentrequest/PaymentRequestUpdateEvent.idl:
        * Modules/paymentrequest/PaymentResponse.idl:
        * Modules/permissions/Navigator+Permissions.idl:
        * Modules/permissions/PermissionDescriptor.idl:
        * Modules/permissions/PermissionStatus.idl:
        * Modules/permissions/Permissions.idl:
        * Modules/pictureinpicture/Document+PictureInPicture.idl:
        * Modules/pictureinpicture/DocumentOrShadowRoot+PictureInPicture.idl:
        * Modules/pictureinpicture/EnterPictureInPictureEvent.idl:
        * Modules/pictureinpicture/HTMLVideoElement+PictureInPicture.idl:
        * Modules/pictureinpicture/PictureInPictureWindow.idl:
        * Modules/push-api/PushEvent.idl:
        * Modules/push-api/PushMessageData.idl:
        * Modules/push-api/ServiceWorkerGlobalScope+PushAPI.idl:
        * Modules/remoteplayback/HTMLMediaElement+RemotePlayback.idl:
        * Modules/remoteplayback/RemotePlayback.idl:
        * Modules/remoteplayback/RemotePlaybackAvailabilityCallback.idl:
        * Modules/speech/SpeechRecognition.idl:
        * Modules/speech/SpeechRecognitionAlternative.idl:
        * Modules/speech/SpeechRecognitionErrorEvent.idl:
        * Modules/speech/SpeechRecognitionEvent.idl:
        * Modules/speech/SpeechRecognitionResult.idl:
        * Modules/speech/SpeechRecognitionResultList.idl:
        * Modules/storage/StorageManager.idl:
        * Modules/streams/TransformStream.idl:
        * Modules/streams/TransformStreamDefaultController.idl:
        * Modules/webaudio/AnalyserNode.idl:
        * Modules/webaudio/AudioBuffer.idl:
        * Modules/webaudio/AudioBufferSourceNode.idl:
        * Modules/webaudio/AudioContext.idl:
        * Modules/webaudio/AudioParamMap.idl:
        * Modules/webaudio/AudioProcessingEvent.idl:
        * Modules/webaudio/AudioWorklet.idl:
        * Modules/webaudio/AudioWorkletNode.idl:
        * Modules/webaudio/AudioWorkletNodeOptions.idl:
        * Modules/webaudio/BaseAudioContext.idl:
        * Modules/webaudio/BiquadFilterNode.idl:
        * Modules/webaudio/ChannelMergerNode.idl:
        * Modules/webaudio/ChannelSplitterNode.idl:
        * Modules/webaudio/ConstantSourceNode.idl:
        * Modules/webaudio/ConstantSourceOptions.idl:
        * Modules/webaudio/ConvolverNode.idl:
        * Modules/webaudio/DelayNode.idl:
        * Modules/webaudio/DynamicsCompressorNode.idl:
        * Modules/webaudio/GainNode.idl:
        * Modules/webaudio/IIRFilterNode.idl:
        * Modules/webaudio/MediaElementAudioSourceNode.idl:
        * Modules/webaudio/MediaStreamAudioDestinationNode.idl:
        * Modules/webaudio/MediaStreamAudioSourceNode.idl:
        * Modules/webaudio/OfflineAudioContext.idl:
        * Modules/webaudio/OscillatorNode.idl:
        * Modules/webaudio/PannerNode.idl:
        * Modules/webaudio/PeriodicWave.idl:
        * Modules/webaudio/StereoPannerNode.idl:
        * Modules/webaudio/WaveShaperNode.idl:
        * Modules/webauthn/AuthenticatorAssertionResponse.idl:
        * Modules/webauthn/AuthenticatorAttestationResponse.idl:
        * Modules/webauthn/AuthenticatorResponse.idl:
        * Modules/webauthn/PublicKeyCredential.idl:
        * Modules/webdatabase/Database.idl:
        * Modules/webdatabase/SQLError.idl:
        * Modules/webdatabase/SQLResultSet.idl:
        * Modules/webdatabase/SQLResultSetRowList.idl:
        * Modules/websockets/WebSocket.idl:
        * Modules/webxr/Navigator+WebXR.idl:
        * Modules/webxr/WebXRBoundedReferenceSpace.idl:
        * Modules/webxr/WebXRFrame.idl:
        * Modules/webxr/WebXRInputSource.idl:
        * Modules/webxr/WebXRInputSourceArray.idl:
        * Modules/webxr/WebXRLayer.idl:
        * Modules/webxr/WebXRPose.idl:
        * Modules/webxr/WebXRReferenceSpace.idl:
        * Modules/webxr/WebXRRenderState.idl:
        * Modules/webxr/WebXRRigidTransform.idl:
        * Modules/webxr/WebXRSession.idl:
        * Modules/webxr/WebXRSpace.idl:
        * Modules/webxr/WebXRSystem.idl:
        * Modules/webxr/WebXRView.idl:
        * Modules/webxr/WebXRViewerPose.idl:
        * Modules/webxr/WebXRViewport.idl:
        * Modules/webxr/WebXRWebGLLayer.idl:
        * Modules/webxr/XREnvironmentBlendMode.idl:
        * Modules/webxr/XREye.idl:
        * Modules/webxr/XRHandedness.idl:
        * Modules/webxr/XRInputSourceEvent.idl:
        * Modules/webxr/XRInputSourcesChangeEvent.idl:
        * Modules/webxr/XRInteractionMode.idl:
        * Modules/webxr/XRReferenceSpaceEvent.idl:
        * Modules/webxr/XRReferenceSpaceType.idl:
        * Modules/webxr/XRRenderStateInit.idl:
        * Modules/webxr/XRSessionEvent.idl:
        * Modules/webxr/XRSessionInit.idl:
        * Modules/webxr/XRSessionMode.idl:
        * Modules/webxr/XRTargetRayMode.idl:
        * Modules/webxr/XRVisibilityState.idl:
        * Modules/webxr/XRWebGLLayerInit.idl:
        * accessibility/AccessibilityRole.idl:
        * accessibility/AriaAttributes.idl:
        * animation/KeyframeEffect.idl:
        * animation/WebAnimation.idl:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateRuntimeEnableConditionalString):
        * bindings/scripts/test/TestConditionalIncludes.idl:
        * bindings/scripts/test/TestConditionallyReadWrite.idl:
        * bindings/scripts/test/TestDefaultToJSON.idl:
        * bindings/scripts/test/TestEnabledBySetting.idl:
        * bindings/scripts/test/TestEnabledBySettingSupplemental.idl:
        * bindings/scripts/test/TestEnabledForContext.idl:
        * bindings/scripts/test/TestGlobalObject.idl:
        * bindings/scripts/test/TestMixinInterface.idl:
        * bindings/scripts/test/TestNamespaceObject.idl:
        * bindings/scripts/test/TestNode.idl:
        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/TestPartialNamespaceObject.idl:
        * bindings/scripts/test/TestSupplemental.idl:
        * css/CSSCounterStyleRule.idl:
        * css/CSSPaintCallback.idl:
        * css/CSSPaintSize.idl:
        * css/CSSProperties.json:
        * css/CSSRule.idl:
        * css/DOMCSSCustomPropertyDescriptor.idl:
        * css/DOMCSSNamespace+CSSNumericFactory.idl:
        * css/DOMCSSNamespace+CSSPainting.idl:
        * css/DOMCSSNamespace+CSSPropertiesandValues.idl:
        * css/DOMCSSNamespace.idl:
        * css/ElementCSSInlineStyle.idl:
        * css/makeprop.pl:
        * css/typedom/CSSKeywordValue.idl:
        * css/typedom/CSSNumericValue.idl:
        * css/typedom/CSSOMVariableReferenceValue.idl:
        * css/typedom/CSSStyleImageValue.idl:
        * css/typedom/CSSStyleValue.idl:
        * css/typedom/CSSUnitValue.idl:
        * css/typedom/CSSUnparsedValue.idl:
        * css/typedom/StylePropertyMap.idl:
        * css/typedom/StylePropertyMapReadOnly.idl:
        * css/typedom/numeric/CSSMathInvert.idl:
        * css/typedom/numeric/CSSMathMax.idl:
        * css/typedom/numeric/CSSMathMin.idl:
        * css/typedom/numeric/CSSMathNegate.idl:
        * css/typedom/numeric/CSSMathProduct.idl:
        * css/typedom/numeric/CSSMathSum.idl:
        * css/typedom/numeric/CSSMathValue.idl:
        * css/typedom/numeric/CSSNumericArray.idl:
        * css/typedom/numeric/CSSNumericBaseType.idl:
        * css/typedom/transform/CSSMatrixComponent.idl:
        * css/typedom/transform/CSSPerspective.idl:
        * css/typedom/transform/CSSRotate.idl:
        * css/typedom/transform/CSSScale.idl:
        * css/typedom/transform/CSSSkew.idl:
        * css/typedom/transform/CSSSkewX.idl:
        * css/typedom/transform/CSSSkewY.idl:
        * css/typedom/transform/CSSTransformComponent.idl:
        * css/typedom/transform/CSSTransformValue.idl:
        * css/typedom/transform/CSSTranslate.idl:
        * dom/Attr.idl:
        * dom/BeforeLoadEvent.idl:
        * dom/BroadcastChannel.idl:
        * dom/DataTransfer.idl:
        * dom/DataTransferItem.idl:
        * dom/DataTransferItemList.idl:
        * dom/DeviceMotionEvent.idl:
        * dom/DeviceOrientationEvent.idl:
        * dom/Document+Fullscreen.idl:
        * dom/Document+StorageAccess.idl:
        * dom/Document+UndoMananger.idl:
        * dom/Element+Fullscreen.idl:
        * dom/Element.idl:
        * dom/ElementContentEditable.idl:
        * dom/GlobalEventHandlers.idl:
        * dom/IdleDeadline.idl:
        * dom/InputEvent.idl:
        * dom/TextDecoderStream.idl:
        * dom/TextDecoderStreamDecoder.idl:
        * dom/TextEncoderStream.idl:
        * dom/TextEncoderStreamEncoder.idl:
        * fileapi/File.idl:
        * html/HTMLAnchorElement.idl:
        * html/HTMLAreaElement.idl:
        * html/HTMLAttachmentElement.idl:
        * html/HTMLButtonElement.idl:
        * html/HTMLCanvasElement.idl:
        * html/HTMLDataListElement.idl:
        * html/HTMLDialogElement.idl:
        * html/HTMLElement.idl:
        * html/HTMLFieldSetElement.idl:
        * html/HTMLFormElement.idl:
        * html/HTMLIFrameElement.idl:
        * html/HTMLImageElement.idl:
        * html/HTMLInputElement.idl:
        * html/HTMLKeygenElement.idl:
        * html/HTMLLinkElement.idl:
        * html/HTMLMediaElement+AudioOutput.idl:
        * html/HTMLMediaElement.idl:
        * html/HTMLMenuItemElement.idl:
        * html/HTMLObjectElement.idl:
        * html/HTMLOutputElement.idl:
        * html/HTMLScriptElement.idl:
        * html/HTMLSelectElement.idl:
        * html/HTMLTextAreaElement.idl:
        * html/ImageBitmap.idl:
        * html/ImageData.idl:
        * html/ImageDataSettings.idl:
        * html/MediaEncryptedEvent.idl:
        * html/OffscreenCanvas.idl:
        * html/WebKitMediaKeyError.idl:
        * html/canvas/CanvasPath.idl:
        * html/canvas/CanvasRenderingContext2D.idl:
        * html/canvas/CanvasRenderingContext2DSettings.idl:
        * html/canvas/ImageBitmapRenderingContext.idl:
        * html/canvas/OffscreenCanvasRenderingContext2D.idl:
        * html/canvas/PaintRenderingContext2D.idl:
        * html/canvas/WebGL2RenderingContext.idl:
        * html/canvas/WebGLTransformFeedback.idl:
        * html/canvas/WebGLVertexArrayObject.idl:
        * html/track/AudioTrack.idl:
        * html/track/TextTrack.idl:
        * html/track/TextTrackCue.idl:
        * html/track/VideoTrack.idl:
        * page/DOMSelection.idl:
        * page/DOMWindow+RequestIdleCallback.idl:
        * page/DOMWindow+VisualViewport.idl:
        * page/IntersectionObserver.idl:
        * page/IntersectionObserverEntry.idl:
        * page/Navigator+IsLoggedIn.idl:
        * page/NavigatorServiceWorker.idl:
        * page/NavigatorShare.idl:
        * page/NavigatorStorage.idl:
        * page/PerformanceNavigationTiming.idl:
        * page/PerformancePaintTiming.idl:
        * page/PerformanceResourceTiming.idl:
        * page/PerformanceServerTiming.idl:
        * page/ResizeObserver.idl:
        * page/ResizeObserverEntry.idl:
        * page/UndoItem.idl:
        * page/UndoManager.idl:
        * page/VisualViewport.idl:
        * page/WindowOrWorkerGlobalScope.idl:
        * testing/FakeXRBoundsPoint.idl:
        * testing/FakeXRButtonStateInit.idl:
        * testing/FakeXRInputSourceInit.idl:
        * testing/FakeXRRigidTransformInit.idl:
        * testing/FakeXRViewInit.idl:
        * testing/WebFakeXRDevice.idl:
        * testing/WebFakeXRInputController.idl:
        * testing/WebXRTest.idl:
        * testing/XRSimulateUserActivationFunction.idl:
        * workers/DedicatedWorkerGlobalScope.idl:
        * workers/SharedWorker.idl:
        * workers/SharedWorkerGlobalScope.idl:
        * workers/service/ExtendableEvent.idl:
        * workers/service/ExtendableMessageEvent.idl:
        * workers/service/FetchEvent.idl:
        * workers/service/ServiceWorker.idl:
        * workers/service/ServiceWorkerClient.idl:
        * workers/service/ServiceWorkerClients.idl:
        * workers/service/ServiceWorkerContainer.idl:
        * workers/service/ServiceWorkerGlobalScope.idl:
        * workers/service/ServiceWorkerRegistration.idl:
        * workers/service/ServiceWorkerWindowClient.idl:
        * worklets/PaintWorkletGlobalScope.idl:

2021-10-02  Nikos Mouchtaris  <nmouchtaris@apple.com>

        Fix warnings in perl script
        https://bugs.webkit.org/show_bug.cgi?id=231124

        Reviewed by Simon Fraser.

        Fix for warnings when running script.

        * css/makevalues.pl:

2021-10-02  Yusuke Suzuki  <ysuzuki@apple.com>

        Remove JSC hack after r283410
        https://bugs.webkit.org/show_bug.cgi?id=230261

        Reviewed by Mark Lam.

        We revert a hack for accessors in JSC since this is not necessary.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GetJSCAttributesForAttribute):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::JSTestObjDOMConstructor::construct):
        (WebCore::jsTestObj_searchGetter):
        (WebCore::JSC_DEFINE_CUSTOM_GETTER):
        (WebCore::setJSTestObj_searchSetter):
        (WebCore::JSC_DEFINE_CUSTOM_SETTER):
        * bindings/scripts/test/TestObj.idl:

2021-10-02  Antti Koivisto  <antti@apple.com>

        [LFC][Integration] Move inline iterators to InlineIterator namespace and rename Run* to Box*
        https://bugs.webkit.org/show_bug.cgi?id=231118

        Reviewed by Alan Bujtas.

        Improve naming and namespacing of the iterator types.

        Iterator types move from LayoutIntegration to InlineIterator namespace.

        Also the iterator and the iterated type is named from Run to Box for accuracy and
        the confusing word Path is dropped (since there are no name conflits in the new namespace).

        This patch does not yet change any accessors or variable names to match the run->box renaming.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::localCaretRectForCharacterOffset):
        * dom/Position.cpp:
        (WebCore::hasInlineRun):
        (WebCore::Position::upstream const):
        (WebCore::Position::downstream const):
        (WebCore::searchAheadForBetterMatch):
        (WebCore::Position::inlineRunAndOffset const):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::deleteInsignificantText):
        * editing/InlineRunAndOffset.h:
        * editing/RenderedPosition.cpp:
        (WebCore::RenderedPosition::RenderedPosition):
        (WebCore::RenderedPosition::previousLeafOnLine const):
        (WebCore::RenderedPosition::nextLeafOnLine const):
        * editing/RenderedPosition.h:
        (WebCore::RenderedPosition::line const):
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::handleTextNode):
        (WebCore::TextIterator::handleTextRun):
        (WebCore::TextIterator::handleTextNodeFirstLetter):
        * editing/TextIterator.h:
        * editing/VisiblePosition.cpp:
        * editing/VisibleUnits.cpp:
        (WebCore::isTextOrLineBreakRun):
        (WebCore::previousTextOrLineBreakRun):
        (WebCore::nextTextOrLineBreakRun):
        (WebCore::startTextOrLineBreakRun):
        (WebCore::endTextOrLineBreakRun):
        (WebCore::logicallyPreviousRun):
        (WebCore::logicallyNextRun):
        (WebCore::wordBreakIteratorForMinOffsetBoundary):
        (WebCore::wordBreakIteratorForMaxOffsetBoundary):
        (WebCore::visualWordPosition):
        (WebCore::startPositionForLine):
        (WebCore::endPositionForLine):
        (WebCore::absoluteLineDirectionPointToLocalPointInBlock):
        (WebCore::previousLinePosition):
        (WebCore::nextLinePosition):
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::valueWithHardLineBreaks const):
        * layout/integration/InlineIteratorBox.cpp: Renamed from Source/WebCore/layout/integration/LayoutIntegrationRunIterator.cpp.
        (WebCore::InlineIterator::BoxIterator::BoxIterator):
        (WebCore::InlineIterator::BoxIterator::operator== const):
        (WebCore::InlineIterator::BoxIterator::atEnd const):
        (WebCore::InlineIterator::Box::nextOnLine const):
        (WebCore::InlineIterator::Box::previousOnLine const):
        (WebCore::InlineIterator::Box::nextOnLineIgnoringLineBreak const):
        (WebCore::InlineIterator::Box::previousOnLineIgnoringLineBreak const):
        (WebCore::InlineIterator::Box::line const):
        (WebCore::InlineIterator::Box::style const):
        (WebCore::InlineIterator::TextBox::nextTextRun const):
        (WebCore::InlineIterator::TextBox::nextTextRunInTextOrder const):
        (WebCore::InlineIterator::TextBox::selectionRect const):
        (WebCore::InlineIterator::TextBox::isCombinedText const):
        (WebCore::InlineIterator::TextBox::fontCascade const):
        (WebCore::InlineIterator::Box::selectionState const):
        (WebCore::InlineIterator::TextBoxIterator::TextBoxIterator):
        (WebCore::InlineIterator::TextBoxIterator::traverseNextTextRun):
        (WebCore::InlineIterator::TextBoxIterator::traverseNextTextRunInTextOrder):
        (WebCore::InlineIterator::BoxIterator::traverseNextOnLine):
        (WebCore::InlineIterator::BoxIterator::traversePreviousOnLine):
        (WebCore::InlineIterator::BoxIterator::traverseNextOnLineIgnoringLineBreak):
        (WebCore::InlineIterator::BoxIterator::traversePreviousOnLineIgnoringLineBreak):
        (WebCore::InlineIterator::BoxIterator::traverseNextOnLineInLogicalOrder):
        (WebCore::InlineIterator::BoxIterator::traversePreviousOnLineInLogicalOrder):
        (WebCore::InlineIterator::firstTextRunFor):
        (WebCore::InlineIterator::firstTextRunInTextOrderFor):
        (WebCore::InlineIterator::textRunFor):
        (WebCore::InlineIterator::runFor):
        (WebCore::InlineIterator::Box::modernPath const):
        (WebCore::InlineIterator::Box::legacyPath const):
        * layout/integration/InlineIteratorBox.h: Renamed from Source/WebCore/layout/integration/LayoutIntegrationRunIterator.h.
        (WebCore::InlineIterator::TextBox::renderer const):
        (WebCore::InlineIterator::TextBox::legacyInlineBox const):
        (WebCore::InlineIterator::BoxIterator::BoxIterator):
        (WebCore::InlineIterator::BoxIterator::operator!= const):
        (WebCore::InlineIterator::BoxIterator::operator* const):
        (WebCore::InlineIterator::BoxIterator::operator-> const):
        (WebCore::InlineIterator::TextBoxIterator::TextBoxIterator):
        (WebCore::InlineIterator::TextBoxIterator::operator++):
        (WebCore::InlineIterator::TextBoxIterator::operator* const):
        (WebCore::InlineIterator::TextBoxIterator::operator-> const):
        (WebCore::InlineIterator::TextBoxIterator::get const):
        (WebCore::InlineIterator::TextRunRange::TextRunRange):
        (WebCore::InlineIterator::TextRunRange::begin const):
        (WebCore::InlineIterator::Box::Box):
        (WebCore::InlineIterator::Box::isText const):
        (WebCore::InlineIterator::Box::rect const):
        (WebCore::InlineIterator::Box::isHorizontal const):
        (WebCore::InlineIterator::Box::dirOverride const):
        (WebCore::InlineIterator::Box::isLineBreak const):
        (WebCore::InlineIterator::Box::minimumCaretOffset const):
        (WebCore::InlineIterator::Box::maximumCaretOffset const):
        (WebCore::InlineIterator::Box::bidiLevel const):
        (WebCore::InlineIterator::Box::renderer const):
        (WebCore::InlineIterator::Box::legacyInlineBox const):
        (WebCore::InlineIterator::Box::inlineBox const):
        (WebCore::InlineIterator::TextBox::hasHyphen const):
        (WebCore::InlineIterator::TextBox::TextBox):
        (WebCore::InlineIterator::TextBox::text const):
        (WebCore::InlineIterator::TextBox::start const):
        (WebCore::InlineIterator::TextBox::end const):
        (WebCore::InlineIterator::TextBox::length const):
        (WebCore::InlineIterator::TextBox::offsetForPosition const):
        (WebCore::InlineIterator::TextBox::positionForOffset const):
        (WebCore::InlineIterator::TextBox::selectableRange const):
        (WebCore::InlineIterator::TextBox::createTextRun const):
        (isType):
        * layout/integration/InlineIteratorBoxLegacyPath.h: Renamed from Source/WebCore/layout/integration/LayoutIntegrationRunIteratorLegacyPath.h.
        (WebCore::InlineIterator::BoxIteratorLegacyPath::BoxIteratorLegacyPath):
        (WebCore::InlineIterator::BoxIteratorLegacyPath::operator== const):
        (WebCore::InlineIterator::BoxIteratorLegacyPath::traverseNextInlineBoxInCacheOrder):
        (WebCore::InlineIterator::BoxIteratorLegacyPath::traversePreviousInlineBoxInCacheOrder):
        * layout/integration/InlineIteratorBoxModernPath.h: Renamed from Source/WebCore/layout/integration/LayoutIntegrationRunIteratorModernPath.h.
        (WebCore::InlineIterator::BoxIteratorModernPath::BoxIteratorModernPath):
        (WebCore::InlineIterator::BoxIteratorModernPath::operator== const):
        (WebCore::InlineIterator::BoxIteratorModernPath::boxes const):
        (WebCore::InlineIterator::BoxIteratorModernPath::line const):
        * layout/integration/InlineIteratorLine.cpp: Renamed from Source/WebCore/layout/integration/LayoutIntegrationLineIterator.cpp.
        (WebCore::InlineIterator::LineIterator::LineIterator):
        (WebCore::InlineIterator::Line::next const):
        (WebCore::InlineIterator::Line::previous const):
        (WebCore::InlineIterator::Line::firstRun const):
        (WebCore::InlineIterator::Line::lastRun const):
        (WebCore::InlineIterator::Line::logicalStartRun const):
        (WebCore::InlineIterator::Line::logicalEndRun const):
        (WebCore::InlineIterator::Line::logicalStartRunWithNode const):
        (WebCore::InlineIterator::Line::logicalEndRunWithNode const):
        (WebCore::InlineIterator::Line::closestRunForPoint const):
        (WebCore::InlineIterator::Line::closestRunForLogicalLeftPosition const):
        (WebCore::InlineIterator::Line::blockDirectionPointInLine const):
        (WebCore::InlineIterator::Line::selectionTopAdjustedForPrecedingBlock const):
        (WebCore::InlineIterator::Line::selectionHeightAdjustedForPrecedingBlock const):
        (WebCore::InlineIterator::Line::selectionState const):
        (WebCore::InlineIterator::Line::firstSelectedBox const):
        (WebCore::InlineIterator::Line::lastSelectedBox const):
        * layout/integration/InlineIteratorLine.h: Renamed from Source/WebCore/layout/integration/LayoutIntegrationLineIterator.h.
        (WebCore::InlineIterator::LineIterator::operator* const):
        (WebCore::InlineIterator::LineIterator::operator-> const):
        (WebCore::InlineIterator::Line::Line):
        (WebCore::InlineIterator::Line::top const):
        (WebCore::InlineIterator::Line::bottom const):
        (WebCore::InlineIterator::Line::selectionTop const):
        (WebCore::InlineIterator::Line::selectionTopForHitTesting const):
        (WebCore::InlineIterator::Line::selectionBottom const):
        (WebCore::InlineIterator::Line::selectionHeight const):
        (WebCore::InlineIterator::Line::lineBoxTop const):
        (WebCore::InlineIterator::Line::lineBoxBottom const):
        (WebCore::InlineIterator::Line::selectionRect const):
        (WebCore::InlineIterator::Line::y const):
        (WebCore::InlineIterator::Line::contentLogicalLeft const):
        (WebCore::InlineIterator::Line::contentLogicalRight const):
        (WebCore::InlineIterator::Line::contentLogicalWidth const):
        (WebCore::InlineIterator::Line::logicalHeight const):
        (WebCore::InlineIterator::Line::isHorizontal const):
        (WebCore::InlineIterator::Line::baselineType const):
        (WebCore::InlineIterator::Line::containingBlock const):
        (WebCore::InlineIterator::Line::legacyRootInlineBox const):
        (WebCore::InlineIterator::Line::isFirst const):
        * layout/integration/InlineIteratorLineLegacyPath.h: Renamed from Source/WebCore/layout/integration/LayoutIntegrationLineIteratorLegacyPath.h.
        (WebCore::InlineIterator::LineIteratorLegacyPath::firstRun const):
        (WebCore::InlineIterator::LineIteratorLegacyPath::lastRun const):
        (WebCore::InlineIterator::LineIteratorLegacyPath::logicalStartRun const):
        (WebCore::InlineIterator::LineIteratorLegacyPath::logicalEndRun const):
        * layout/integration/InlineIteratorLineModernPath.h: Renamed from Source/WebCore/layout/integration/LayoutIntegrationLineIteratorModernPath.h.
        (WebCore::InlineIterator::LineIteratorModernPath::LineIteratorModernPath):
        (WebCore::InlineIterator::LineIteratorModernPath::firstRun const):
        (WebCore::InlineIterator::LineIteratorModernPath::lastRun const):
        (WebCore::InlineIterator::LineIteratorModernPath::logicalStartRun const):
        (WebCore::InlineIterator::LineIteratorModernPath::logicalEndRun const):
        (WebCore::InlineIterator::LineIteratorModernPath::lines const):
        (WebCore::InlineIterator::LineIteratorModernPath::line const):
        * layout/integration/LayoutIntegrationInlineContent.cpp:
        * layout/integration/LayoutIntegrationLineLayout.cpp:
        (WebCore::LayoutIntegration::LineLayout::textRunsFor const):
        (WebCore::LayoutIntegration::LineLayout::runFor const):
        (WebCore::LayoutIntegration::LineLayout::firstLine const):
        (WebCore::LayoutIntegration::LineLayout::lastLine const):
        * layout/integration/LayoutIntegrationLineLayout.h:
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::TextBoxIterator::TextBoxIterator):
        (WebCore::TextBoxIterator::operator==):
        (WebCore::TextBoxIterator::operator!=):
        (WebCore::GraphicsContext::drawBidiText):
        (WebCore::TextRunIterator::TextRunIterator): Deleted.
        (WebCore::TextRunIterator::offset const): Deleted.
        (WebCore::TextRunIterator::increment): Deleted.
        (WebCore::TextRunIterator::atEnd const): Deleted.
        (WebCore::TextRunIterator::current const): Deleted.
        (WebCore::TextRunIterator::direction const): Deleted.
        (WebCore::TextRunIterator::operator==): Deleted.
        (WebCore::TextRunIterator::operator!=): Deleted.
        * rendering/CaretRectComputation.cpp:
        (WebCore::computeCaretRectForLinePosition):
        (WebCore::computeCaretRectForText):
        * rendering/LegacyInlineTextBox.h:
        * rendering/LegacyLineLayout.cpp:
        (WebCore::setLogicalWidthForTextRun):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::adjustForBorderFit const):
        (WebCore::RenderBlockFlow::adjustSelectionTopForPrecedingBlock const):
        (WebCore::RenderBlockFlow::inlineSelectionGaps):
        (WebCore::positionForRun):
        (WebCore::RenderBlockFlow::findClosestTextAtAbsolutePoint):
        (WebCore::RenderBlockFlow::positionForPointWithInlineChildren):
        * rendering/RenderBox.cpp:
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::getLeadingCorner const):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::collectSelectionGeometries):
        * rendering/RenderLineBreak.cpp:
        (WebCore::RenderLineBreak::linesBoundingBox const):
        (WebCore::RenderLineBreak::absoluteRects const):
        (WebCore::RenderLineBreak::absoluteQuads const):
        (WebCore::RenderLineBreak::collectSelectionGeometries):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::positionForPoint):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::absoluteRects const):
        (WebCore::RenderText::collectSelectionGeometries):
        (WebCore::boundariesForTextRun):
        (WebCore::ellipsisRectForTextRun):
        (WebCore::collectAbsoluteQuads):
        (WebCore::localQuadForTextRun):
        (WebCore::RenderText::absoluteQuadsForRange const):
        (WebCore::lineDirectionPointFitsInBox):
        (WebCore::createVisiblePositionForBox):
        (WebCore::createVisiblePositionAfterAdjustingOffsetForBiDi):
        (WebCore::RenderText::positionForPoint):
        (WebCore::RenderText::firstRunLocation const):
        (WebCore::RenderText::linesBoundingBox const):
        (WebCore::RenderText::collectSelectionGeometriesForLineBoxes):
        (WebCore::RenderText::caretMinOffset const):
        (WebCore::RenderText::caretMaxOffset const):
        (WebCore::RenderText::countRenderedCharacterOffsetsUntil const):
        (WebCore::containsOffset):
        (WebCore::RenderText::hasRenderedText const):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::RenderTreeAsText::writeRenderObject):
        (WebCore::write):
        * rendering/TextBoxPainter.cpp:
        (WebCore::TextBoxPainter::TextBoxPainter):
        (WebCore::TextBoxPainter::paintDecoration):
        (WebCore::textPosition):
        (WebCore::TextBoxPainter::calculateUnionOfAllDocumentMarkerBounds):
        (WebCore::TextBoxPainter::calculateDocumentMarkerBounds):
        * rendering/TextBoxPainter.h:
        * rendering/TextDecorationPainter.h:
        (WebCore::TextDecorationPainter::setTextBoxIterator):
        (WebCore::TextDecorationPainter::setTextRunIterator): Deleted.
        * style/InlineTextBoxStyle.cpp:
        (WebCore::minLogicalTopForTextDecorationLine):
        (WebCore::maxLogicalBottomForTextDecorationLine):
        (WebCore::computeUnderlineOffset):
        (WebCore::visualOverflowForDecorations):
        * style/InlineTextBoxStyle.h:

2021-10-02  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Pass in the correct style when adding a run to Line
        https://bugs.webkit.org/show_bug.cgi?id=231100

        Reviewed by Antti Koivisto.

        This is in preparation for supporting first-line style.

        * layout/formattingContexts/inline/InlineLineBuilder.cpp:
        (WebCore::Layout::LineCandidate::InlineContent::appendInlineItem):
        (WebCore::Layout::LineBuilder::handleInlineContent):
        (WebCore::Layout::LineBuilder::commitPartialContent):
        (WebCore::Layout::LineBuilder::rebuildLine):

2021-10-02  Cathie Chen  <cathiechen@igalia.com>

        [Performance] Optimize RenderLayer::establishesTopLayer
        https://bugs.webkit.org/show_bug.cgi?id=231016

        Reviewed by Simon Fraser.

        This patch added isInTopLayerOrBackdrop to reduce the times of calling renderer().element() in RenderLayer::establishesTopLayer.
        And isInTopLayerOrBackdrop can be shared in Adjuster.

        * dom/Element.h:
        (WebCore::isInTopLayerOrBackdrop):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::establishesTopLayer const):
        * style/StyleAdjuster.cpp:
        (WebCore::Style::Adjuster::adjust const):
        (WebCore::Style::Adjuster::adjustDisplayContentsStyle const):

2021-10-02  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Do not reuse the overflowing width on the next line when first line style is different
        https://bugs.webkit.org/show_bug.cgi?id=231107

        Reviewed by Antti Koivisto.

        Let's compute the leading text content width at the next line (instead of reusing the overflowing trailing width), when the first line style is present and font-cascades differ.

        * layout/formattingContexts/inline/InlineLineBuilder.cpp:
        (WebCore::Layout::LineBuilder::handleInlineContent):

2021-10-02  Ziran Sun  <zsun@igalia.com>

        [css-grid] Accommodate spanning items crossing flexible tracks
        https://bugs.webkit.org/show_bug.cgi?id=230252

        Reviewed by Sergio Villar Senin.

        CSS spec has added one more step at https://drafts.csswg.org/css-grid/#algo-spanning-flex-items
        for resolving intrinsic track sizes. Basically, increasing sizes to accommodate spanning items
        crossing flexible tracks instead of ignoring their contents completely.

        This patch is an import of obrufau's work in chromium. Initial CL is at
        https://chromium-review.googlesource.com/c/chromium/src/+/1492337/16..20.
        The performance issue caused by the patch were fixed at https://bugs.webkit.org/show_bug.cgi?id=207852
        for webkit and https://bugs.chromium.org/p/chromium/issues/detail?id=1021929 for chromium.
        This change also addresses web compat issue raised at https://github.com/w3c/csswg-drafts/issues/4783.       

        * rendering/GridTrackSizingAlgorithm.cpp:
        (WebCore::GridTrackSizingAlgorithm::initialGrowthLimit const):
        (WebCore::GridTrackSizingAlgorithm::spanningItemCrossesFlexibleSizedTracks const):
        (WebCore::GridTrackSizingAlgorithm::increaseSizesToAccommodateSpanningItems):
        (WebCore::getSizeDistributionWeight):
        (WebCore::distributeItemIncurredIncreaseToTrack):
        (WebCore::distributeItemIncurredIncreases):
        (WebCore::GridTrackSizingAlgorithm::distributeSpaceToTracks const):
        (WebCore::GridTrackSizingAlgorithmStrategy::minSizeForChild const):
        (WebCore::GridTrackSizingAlgorithm::resolveIntrinsicTrackSizes):
        * rendering/GridTrackSizingAlgorithm.h:
        (WebCore::GridTrackSizingAlgorithmStrategy::distributeSpaceToTracks const):

2021-10-02  Youenn Fablet  <youenn@apple.com>

        Add support for ServiceWorkerGlobalScope push event handler
        https://bugs.webkit.org/show_bug.cgi?id=231008
        <rdar://problem/83710760>

        Reviewed by Chris Dumez.

        Implement https://w3c.github.io/push-api/#receiving-a-push-message step 6.
        In particular we ensure that if any waitUntil promise rejects, the push event is considered to fail.
        This status should then be sent back to the emiter of the push message to decide whether to acknowledge the message, retry it or discard it.

        We keep push API completion handler in a map to ensure we respond to them even if the service worker gets terminated while processing the push event.

        Add necessary internals API to enable testing within the service worker itself.

        Covered by added subtests in http/wpt/service-workers/pushEvent.any.serviceworker.html.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/push-api/ServiceWorkerGlobalScope+PushAPI.idl: Added.
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:
        * dom/EventNames.h:
        * testing/ServiceWorkerInternals.cpp:
        * testing/ServiceWorkerInternals.h:
        * testing/ServiceWorkerInternals.idl:
        * workers/service/context/SWContextManager.cpp:
        * workers/service/context/SWContextManager.h:
        * workers/service/context/ServiceWorkerThread.cpp:
        * workers/service/context/ServiceWorkerThread.h:
        * workers/service/context/ServiceWorkerThreadProxy.cpp:
        * workers/service/context/ServiceWorkerThreadProxy.h:

2021-10-02  Philippe Normand  <pnormand@igalia.com>

        [GLib] Media session manager unable to handle more than one session
        https://bugs.webkit.org/show_bug.cgi?id=230250

        Reviewed by Adrian Perez de Castro.

        Each session now maintains its own connection to the D-Bus session, allowing to safely
        expose the corresponding MPRIS objecs on the bus. Most of the D-Bus and GVariant handling
        has been refactored to the new MediaSessionGLib module.

        * platform/SourcesGLib.txt:
        * platform/audio/glib/MediaSessionGLib.cpp: Added.
        (WebCore::getCommand):
        (WebCore::handleMethodCall):
        (WebCore::getMprisProperty):
        (WebCore::handleGetProperty):
        (WebCore::handleSetProperty):
        (WebCore::MediaSessionGLib::create):
        (WebCore::MediaSessionGLib::MediaSessionGLib):
        (WebCore::MediaSessionGLib::~MediaSessionGLib):
        (WebCore::MediaSessionGLib::nameLost):
        (WebCore::MediaSessionGLib::emitPositionChanged):
        (WebCore::MediaSessionGLib::updateNowPlaying):
        (WebCore::MediaSessionGLib::getMetadataAsGVariant):
        (WebCore::MediaSessionGLib::getPlaybackStatusAsGVariant):
        (WebCore::MediaSessionGLib::emitPropertiesChanged):
        (WebCore::MediaSessionGLib::playbackStatusChanged):
        (WebCore::MediaSessionGLib::getActiveSessionPosition):
        * platform/audio/glib/MediaSessionGLib.h: Added.
        (WebCore::MediaSessionGLib::manager const):
        * platform/audio/glib/MediaSessionManagerGLib.cpp:
        (WebCore::PlatformMediaSessionManager::create):
        (WebCore::MediaSessionManagerGLib::MediaSessionManagerGLib):
        (WebCore::MediaSessionManagerGLib::addSession):
        (WebCore::MediaSessionManagerGLib::removeSession):
        (WebCore::MediaSessionManagerGLib::sessionStateChanged):
        (WebCore::MediaSessionManagerGLib::clientCharacteristicsChanged):
        (WebCore::MediaSessionManagerGLib::updateNowPlayingInfo):
        * platform/audio/glib/MediaSessionManagerGLib.h:
        (WebCore::MediaSessionManagerGLib::mprisInterface const):

2021-10-01  Nikos Mouchtaris  <nmouchtaris@apple.com>

        Allow NaN, infinity, and -infinity in calc
        https://bugs.webkit.org/show_bug.cgi?id=231044

        Reviewed by Simon Fraser.

        Modified existing serialization tests.

        Added support for NaN, infinity and -infinity keywords in calc. Involved removing checks for 
        inputs that would result in these values and introduction of new CSSKeywords for these three 
        constants. Spec for this: https://drafts.csswg.org/css-values-4/#calc-error-constants. 

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::formatNumberValue const):
        * css/CSSValueKeywords.in:
        * css/CSSValuePool.cpp:
        (WebCore::CSSValuePool::createValue):
        * css/calc/CSSCalcExpressionNodeParser.cpp:
        (WebCore::getConstantTable):
        * css/calc/CSSCalcOperationNode.cpp:
        (WebCore::determineCategory):
        (WebCore::CSSCalcOperationNode::createLog):
        (WebCore::CSSCalcOperationNode::createStep):
        (WebCore::CSSCalcOperationNode::createRound):
        * css/calc/CSSCalcPrimitiveValueNode.cpp:
        (WebCore::CSSCalcPrimitiveValueNode::invert):

2021-10-01  Lauro Moura  <lmoura@igalia.com>

        [GLIB] Fix build on Ubuntu 20.04 after 242376@main

        Unreviewed build fix.

        * dom/Position.cpp: Add missing header.

2021-10-01  Chris Dumez  <cdumez@apple.com>

        Drop support for macOS < 10.15
        https://bugs.webkit.org/show_bug.cgi?id=231085

        Reviewed by Darin Adler.

        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::platformVersionName const):
        * platform/network/cocoa/CookieCocoa.mm:

2021-10-01  Yusuke Suzuki  <ysuzuki@apple.com>

        Disable new incumbent-window until it is fully implemented
        https://bugs.webkit.org/show_bug.cgi?id=230261
        <rdar://problem/83099726>

        Reviewed by Chris Dumez and Geoffrey Garen.

        This patch disables new incumbent-window until it is fully implemented to avoid compatibility issue.

        * bindings/js/JSDOMConvertCallbacks.h:
        (WebCore::Converter<IDLCallbackFunction<T>>::convert):
        (WebCore::Converter<IDLCallbackInterface<T>>::convert):
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::callerGlobalObject):
        (WebCore::legacyActiveGlobalObjectForAccessor):
        * bindings/js/JSDOMGlobalObject.h:
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::incumbentDOMWindow):
        (WebCore::legacyActiveDOMWindowForAccessor):
        * bindings/js/JSDOMWindowBase.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GetJSCAttributesForAttribute):
        (GenerateCallWith):
        * page/Location.idl:

2021-10-01  Chris Dumez  <cdumez@apple.com>

        GC may not know about memory used by AudioBufferSourceNode's buffer
        https://bugs.webkit.org/show_bug.cgi?id=230966

        Reviewed by Darin Adler.

        AudioBufferSourceNode has a 'buffer' attribute settable by JavaScript of type AudioBuffer.
        An AudioBuffer may use a significant amount of memory and AudioBuffer.idl contains [ReportExtraMemoryCost]
        extended attribute to report this memory to the GC. However, there is an issue if JS constructs a large
        AudioBuffer, then sets it on an AudioBufferSourceNode and then the JSAudioBuffer wrapper gets garbage
        collected. At this point, GC thinks it recovered the extra memory reported by the JSAudioBuffer but this
        is not true since that AudioBuffer (and its internal memory) are still kept alive by AudioBufferSourceNode /
        JSAudioBufferSourceNode. To address this issue, the proposal in this patch is to have JSAudioBufferSourceNode
        mark its buffer when visiting childen during GC. As a result, the JSAudioBuffer wrapper will stay alive (and
        report extra memory use) as long as its associated JSAudioBufferSourceNode wrapper is still alive.

        Test: webaudio/AudioBufferSource/audiobuffersource-buffer-gc.html

        * Modules/webaudio/AudioBuffer.idl:
        * Modules/webaudio/AudioBufferSourceNode.h:
        * Modules/webaudio/AudioBufferSourceNode.idl:
        * Sources.txt:
        * bindings/js/JSAudioBufferSourceNodeCustom.cpp: Added.
        (WebCore::JSAudioBufferSourceNode::visitAdditionalChildren):

2021-10-01  Myles C. Maxfield  <mmaxfield@apple.com>

        base-palette can accept "light" or "dark"
        https://bugs.webkit.org/show_bug.cgi?id=230792
        <rdar://problem/83530228>

        Reviewed by Simon Fraser.

        The spec was changed in
        https://github.com/w3c/csswg-drafts/commit/1c74611151b452930609627a0de2412c0cb86175
        to add this functionality. Luckily, the additional functionality doesn't
        require any Core Text change.

        The old grammar was "<<integer [0, ∞]>> | <<string>>". The new grammar is
        "light | dark | <<integer [0, ∞]>> | <<string>>". Before "light" and
        "dark" existed, we were representing this by Variant<int64_t, AtomString>. Now that
        "light" and "dark" exist, this is being expanded so the form

        struct FontPaletteIndex {
            enum class Type {
                Light,
                Dark,
                Integer,
                String
            } type;
            unsigned integer;
            AtomString string;
        };

        This seems to be in accordance with WebKit style, instead of doing something like
        class FontPaletteLight { }; class FontPaletteDark { };
        using FontPaletteIndex = Variant<FontPaletteLight, FontPaletteDark, unsigned, AtomString>;

        Tests: imported/w3c/web-platform-tests/css/css-fonts/font-palette-10.html
               imported/w3c/web-platform-tests/css/css-fonts/font-palette-11.html
               imported/w3c/web-platform-tests/css/css-fonts/font-palette-12.html
               imported/w3c/web-platform-tests/css/css-fonts/font-palette-13.html
               imported/w3c/web-platform-tests/css/css-fonts/font-palette-14.html
               imported/w3c/web-platform-tests/css/css-fonts/font-palette-15.html
               imported/w3c/web-platform-tests/css/css-fonts/font-palette-16.html
               imported/w3c/web-platform-tests/css/css-fonts/font-palette-17.html
               imported/w3c/web-platform-tests/css/css-fonts/font-palette-18.html
               imported/w3c/web-platform-tests/css/css-fonts/font-palette-19.html
               imported/w3c/web-platform-tests/css/css-fonts/font-palette-2.html
               imported/w3c/web-platform-tests/css/css-fonts/font-palette-20.html
               imported/w3c/web-platform-tests/css/css-fonts/font-palette-21.html
               imported/w3c/web-platform-tests/css/css-fonts/font-palette-22.html
               imported/w3c/web-platform-tests/css/css-fonts/font-palette-23.html
               imported/w3c/web-platform-tests/css/css-fonts/font-palette-24.html
               imported/w3c/web-platform-tests/css/css-fonts/font-palette-25.html
               imported/w3c/web-platform-tests/css/css-fonts/font-palette-26.html
               imported/w3c/web-platform-tests/css/css-fonts/font-palette-27.html
               imported/w3c/web-platform-tests/css/css-fonts/font-palette-28.html
               imported/w3c/web-platform-tests/css/css-fonts/font-palette-29.html
               imported/w3c/web-platform-tests/css/css-fonts/font-palette-3.html
               imported/w3c/web-platform-tests/css/css-fonts/font-palette-30.html
               imported/w3c/web-platform-tests/css/css-fonts/font-palette-31.html
               imported/w3c/web-platform-tests/css/css-fonts/font-palette-4.html
               imported/w3c/web-platform-tests/css/css-fonts/font-palette-5.html
               imported/w3c/web-platform-tests/css/css-fonts/font-palette-6.html
               imported/w3c/web-platform-tests/css/css-fonts/font-palette-7.html
               imported/w3c/web-platform-tests/css/css-fonts/font-palette-8.html
               imported/w3c/web-platform-tests/css/css-fonts/font-palette-9.html

        * css/CSSFontPaletteValuesRule.cpp:
        (WebCore::CSSFontPaletteValuesRule::basePalette const):
        (WebCore::CSSFontPaletteValuesRule::cssText const):
        * css/StyleRule.cpp:
        (WebCore::StyleRuleFontPaletteValues::StyleRuleFontPaletteValues):
        * css/StyleRule.h:
        * css/parser/CSSParserImpl.cpp:
        (WebCore::CSSParserImpl::consumeFontPaletteValuesRule):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeBasePaletteDescriptor):
        * platform/graphics/FontPaletteValues.h:
        (WebCore::FontPaletteIndex::FontPaletteIndex):
        (WebCore::FontPaletteIndex::operator bool const):
        (WebCore::FontPaletteIndex::operator== const):
        (WebCore::FontPaletteIndex::operator!= const):
        (WebCore::add):
        (WebCore::FontPaletteValues::FontPaletteValues):
        (WebCore::FontPaletteValues::basePalette const):
        (WebCore::FontPaletteValues::operator bool const):
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::addLightPalette):
        (WebCore::addDarkPalette):
        (WebCore::addAttributesForCustomFontPalettes):
        (WebCore::addAttributesForFontPalettes):

2021-10-01  Chris Dumez  <cdumez@apple.com>

        Unreviewed, reverting r283274.

        Broke HSTS.CrossOriginRedirect API test

        Reverted changeset:

        "Use isolated NSURLSessions for each first party registrable
        domain"
        https://bugs.webkit.org/show_bug.cgi?id=230750
        https://commits.webkit.org/r283274

2021-10-01  Kate Cheney  <katherine_cheney@apple.com>

        GPU Process microphone attribution SPI adoption
        https://bugs.webkit.org/show_bug.cgi?id=231034
        <rdar://problem/83732537>

        Reviewed by Youenn Fablet.

        No new tests. Tested manually by inspecting APR JSON files.

        * platform/audio/AudioSession.h:
        * platform/audio/ios/AudioSessionIOS.h:
        * platform/audio/ios/AudioSessionIOS.mm:
        (WebCore::AudioSessionIOS::setHostProcessAttribution):

2021-10-01  Simon Fraser  <simon.fraser@apple.com>

        Further cleanup of macOS rubberbanding code
        https://bugs.webkit.org/show_bug.cgi?id=231087

        Reviewed by Alan Bujtas.

        Split chunks of rubber-banding logic into their own functions for clarity,
        separating the "compute the delta" and "apply the delta" parts.

        * platform/ScrollingEffectsController.h:
        * platform/mac/ScrollingEffectsController.mm:
        (WebCore::ScrollingEffectsController::handleWheelEvent):
        (WebCore::ScrollingEffectsController::modifyScrollDeltaForStretching):
        (WebCore::ScrollingEffectsController::applyScrollDeltaWithStretching):

2021-10-01  Alan Bujtas  <zalan@apple.com>

        REGRESSION(r283047): PerformanceTests/Layout/line-layout-simple.html regressed by ~10%
        https://bugs.webkit.org/show_bug.cgi?id=231089

        Reviewed by Antti Koivisto.

        Let's just hold on to the applicable RenderStyle instead of constructing a dedicated Style structure.
        Note that the expected style for line breaking is not necessarily the style of the inline item (e.g. in case of an atomic inline box, it's the parent inline box's style).

        * layout/formattingContexts/inline/InlineContentBreaker.cpp:
        (WebCore::Layout::InlineContentBreaker::isWrappingAllowed):
        (WebCore::Layout::InlineContentBreaker::shouldKeepEndOfLineWhitespace const):
        (WebCore::Layout::InlineContentBreaker::processOverflowingContent const):
        (WebCore::Layout::InlineContentBreaker::wordBreakBehavior const):
        (WebCore::Layout::InlineContentBreaker::tryBreakingTextRun const):
        * layout/formattingContexts/inline/InlineContentBreaker.h:
        (WebCore::Layout::InlineContentBreaker::ContinuousContent::Run::Run):
        (WebCore::Layout::logicalWidth): Deleted.

2021-10-01  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add a dedicated function to set the line break box's vertical geometry
        https://bugs.webkit.org/show_bug.cgi?id=231080

        Reviewed by Antti Koivisto.

        Line break boxes should use the parent inline box's font-metrics when computing vertical geometry.
        It also makes the code read better as we don't use a function called "setInitialVerticalGeometryForInlineBox()" to set vertical geometry on a non-inline box (line break box).

        * layout/formattingContexts/inline/InlineLineBoxBuilder.cpp:
        (WebCore::Layout::computedHeightAndLayoutBounds):
        (WebCore::Layout::LineBoxBuilder::setVerticalGeometryForLineBreakBox const):
        (WebCore::Layout::LineBoxBuilder::setInitialVerticalGeometryForInlineBox const):
        (WebCore::Layout::LineBoxBuilder::constructAndAlignInlineLevelBoxes):
        * layout/formattingContexts/inline/InlineLineBoxBuilder.h:

2021-10-01  Youenn Fablet  <youenn@apple.com>

        Add support for PushEvent
        https://bugs.webkit.org/show_bug.cgi?id=231007
        <rdar://problem/83707470>

        Reviewed by Chris Dumez.

        Implement PushEvent and PushMessageData as per specification.
        https://w3c.github.io/push-api/#pushevent-interface and
        https://w3c.github.io/push-api/#pushmessagedata-interface.

        We model PushMessageData as a Vector<uint8_t> following the spec which tells us that it has an associated byte sequence.

        Put them behind a runtime flag, off by default.

        Test: http/wpt/push-api/pushEvent.any.serviceworker.html

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/push-api/PushEvent.cpp: Added.
        * Modules/push-api/PushEvent.h: Added.
        * Modules/push-api/PushEvent.idl: Added.
        * Modules/push-api/PushEventInit.h: Added.
        * Modules/push-api/PushEventInit.idl: Added.
        * Modules/push-api/PushMessageData.cpp: Added.
        * Modules/push-api/PushMessageData.h: Added.
        * Modules/push-api/PushMessageData.idl: Added.
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:
        * dom/EventNames.in:
        * page/RuntimeEnabledFeatures.h:

2021-10-01  Youenn Fablet  <youenn@apple.com>

        Attribute IOSurfaces created by camera and decoders to responsible WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=231075

        Reviewed by Chris Dumez.

        Manually tested.

        * platform/graphics/RemoteVideoSample.h:

2021-10-01  Antti Koivisto  <antti@apple.com>

        Rename InlineIterator to LegacyInlineIterator
        https://bugs.webkit.org/show_bug.cgi?id=231077

        Reviewed by Alan Bujtas.

        It is only used by the legacy line layout.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Position.cpp:
        * layout/integration/LayoutIntegrationCoverage.cpp:
        * rendering/LegacyInlineIterator.cpp: Renamed from Source/WebCore/rendering/InlineIterator.cpp.
        (WebCore::LegacyInlineIterator::surrogateTextDirection const):
        * rendering/LegacyInlineIterator.h: Renamed from Source/WebCore/rendering/InlineIterator.h.
        (WebCore::LegacyInlineIterator::LegacyInlineIterator):
        (WebCore::operator==):
        (WebCore::operator!=):
        (WebCore::nextInlineRendererSkippingEmpty):
        (WebCore::firstInlineRendererSkippingEmpty):

        Rename this to not say "bidi".

        (WebCore::LegacyInlineIterator::fastIncrementInTextNode):
        (WebCore::LegacyInlineIterator::incrementByCodePointInTextNode):
        (WebCore::LegacyInlineIterator::setOffset):
        (WebCore::LegacyInlineIterator::setRefersToEndOfPreviousNode):
        (WebCore::LegacyInlineIterator::increment):
        (WebCore::LegacyInlineIterator::fastDecrement):
        (WebCore::LegacyInlineIterator::atEnd const):
        (WebCore::LegacyInlineIterator::characterAt const):
        (WebCore::LegacyInlineIterator::current const):
        (WebCore::LegacyInlineIterator::previousInSameNode const):
        (WebCore::LegacyInlineIterator::direction const):
        (WebCore::numberOfIsolateAncestors):
        (WebCore::InlineBidiResolver::appendRunInternal):
        * rendering/LegacyLineLayout.cpp:
        (WebCore::determineDirectionality):
        (WebCore::LegacyLineLayout::appendRunsForObject):
        (WebCore::constructBidiRunsForSegment):
        (WebCore::LegacyLineLayout::createLineBoxesFromBidiRuns):
        (WebCore::LegacyLineLayout::layoutRunsAndFloats):
        (WebCore::LegacyLineLayout::restartLayoutRunsAndFloatsInRange):
        (WebCore::LegacyLineLayout::layoutRunsAndFloatsInRange):
        (WebCore::LegacyLineLayout::determineStartPosition):
        (WebCore::LegacyLineLayout::determineEndPosition):
        (WebCore::LegacyLineLayout::matchedEndLine):
        * rendering/LegacyLineLayout.h:
        * rendering/LegacyRootInlineBox.h:
        * rendering/RenderBlock.cpp:
        * rendering/RenderBlockFlow.cpp:
        * rendering/RenderInline.cpp:
        (WebCore::isEmptyInline):
        * rendering/RenderInline.h:
        * rendering/RenderTreeAsText.cpp:
        * rendering/line/BreakingContext.h:
        (WebCore::BreakingContext::lineBreak):
        (WebCore::BreakingContext::initializeForCurrentObject):
        (WebCore::BreakingContext::handleBR):
        (WebCore::shouldSkipWhitespaceAfterStartObject):
        (WebCore::BreakingContext::handleReplaced):
        (WebCore::iteratorIsBeyondEndOfRenderCombineText):
        (WebCore::ensureCharacterGetsLineBox):
        (WebCore::tryHyphenating):
        (WebCore::BreakingContext::handleText):
        (WebCore::BreakingContext::trailingSpacesHang):
        (WebCore::checkWhitespaceCollapsingTransitions):
        (WebCore::BreakingContext::handleEndOfLine):
        * rendering/line/LineBreaker.cpp:
        (WebCore::LineBreaker::skipTrailingWhitespace):
        (WebCore::LineBreaker::nextLineBreak):
        * rendering/line/LineBreaker.h:
        * rendering/line/LineInlineHeaders.h:
        (WebCore::skipNonBreakingSpace):
        (WebCore::requiresLineBox):
        * rendering/line/TrailingObjects.cpp:
        (WebCore::TrailingObjects::updateWhitespaceCollapsingTransitionsForTrailingBoxes):
        * rendering/line/TrailingObjects.h:
        * rendering/updating/RenderTreeBuilderList.cpp:
        (WebCore::generatesLineBoxesForInlineChild):

2021-10-01  Antti Koivisto  <antti@apple.com>

        Move InlineWalker to a file of its own and make it use RenderIterator
        https://bugs.webkit.org/show_bug.cgi?id=231069

        Reviewed by Alan Bujtas.

        It is confusing and overly complicated.

        * WebCore.xcodeproj/project.pbxproj:
        * layout/integration/LayoutIntegrationBoxTree.cpp:
        (WebCore::LayoutIntegration::BoxTree::buildTree):
        * layout/integration/LayoutIntegrationCoverage.cpp:
        (WebCore::LayoutIntegration::canUseForLineLayoutWithReason):
        * rendering/InlineIterator.h:
        (WebCore::bidiNextSkippingEmptyInlines):
        (WebCore::bidiNextShared): Deleted.

        There is no need to share anything here.

        (WebCore::bidiNextIncludingEmptyInlines): Deleted.
        (WebCore::bidiFirstIncludingEmptyInlines): Deleted.
        (WebCore::InlineWalker::InlineWalker): Deleted.
        (WebCore::InlineWalker::root): Deleted.
        (WebCore::InlineWalker::current): Deleted.
        (WebCore::InlineWalker::atEndOfInline): Deleted.

        None of the clients cared about the functionality where the iterator would stop at the end of a RenderInline.

        (WebCore::InlineWalker::atEnd const): Deleted.
        (WebCore::InlineWalker::advance): Deleted.
        * rendering/InlineWalker.h: Added.
        (WebCore::InlineWalker::InlineWalker):
        (WebCore::InlineWalker::current):
        (WebCore::InlineWalker::atEnd const):
        (WebCore::InlineWalker::advance):
        * rendering/LegacyLineLayout.cpp:
        (WebCore::LegacyLineLayout::layoutLineBoxes):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::simplifiedNormalFlowLayout):
        * rendering/RenderIterator.h:
        (WebCore::RenderIterator::operator bool const):
        (WebCore::RenderConstIterator::operator bool const):
        (WebCore::RenderIterator<T>::traverseNextSkippingChildren):
        (WebCore::RenderConstIterator<T>::traverseNextSkippingChildren):

2021-10-01  Kimmo Kinnunen  <kkinnunen@apple.com>

        Cocoa GraphicsContextGLOpenGL should not be used by GraphicsContextGLCVANGLE
        https://bugs.webkit.org/show_bug.cgi?id=231010

        Reviewed by Kenneth Russell.

        GraphicsContextGLOpenGL creates a GraphicsContextGLCVANGLE helper to do
        do YUV texture uploads. This GraphicsContextGLCVANGLE creates a OpenGL ES context that
        shares the OpenGL state by the caller.

        Previously the new context would be a GraphicsContextGLOpenGL. This would be a problem
        since GraphicsContextGLOpenGL has compositor related logic and objects, for example
        the WebGL layer as well as resources for default framebuffer operation. Shared context
        would also go to the GraphicsContextGLOpenGLManager context list even though
        they could not be deleted behind the owners back during context recycling.

        Instead, create just a normal ANGLE context and call ANGLE directly from
        GraphicsContextGLCVANGLE. This is more consistent with software layers:
        GraphicsContextGLOpenGL and GraphicsContextGLCVANGLE are at the same software
        level, part of the same GraphicsContextGLOpenGL implementation.

        Makes it possible to remove otherwise unused and unfitting "shared context"
        related functionality from WebGL level from GraphicsContextGL.

        No new tests, refactor.

        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/GraphicsContextGL.cpp:
        (WebCore::GraphicsContextGL::GraphicsContextGL):
        * platform/graphics/GraphicsContextGL.h:
        * platform/graphics/angle/GraphicsContextGLANGLE.cpp:
        (WebCore::GraphicsContextGLOpenGL::asCV): Deleted.
        * platform/graphics/cocoa/ANGLEUtilitiesCocoa.cpp: Added.
        (WebCore::createPbufferAndAttachIOSurface):
        (WebCore::destroyPbufferAndDetachIOSurface):
        * platform/graphics/cocoa/ANGLEUtilitiesCocoa.h: Added.
        Move the createPbufferAndAttachIOSurface to Cocoa specific
        ANGLE utility file.
        See also bug 226504 - Adopt createPbufferAndAttachIOSurface/destroyPbufferAndDetachIOSurface
        in GraphicsContextGLCVANGLE.cpp and GraphicsContextGLOpenGLCocoa.mm

        * platform/graphics/cocoa/GraphicsContextGLOpenGLCocoa.mm:
        (WebCore::GraphicsContextGLOpenGL::create):
        (WebCore::GraphicsContextGLOpenGL::createForGPUProcess):
        (WebCore::GraphicsContextGLOpenGL::GraphicsContextGLOpenGL):
        (WebCore::GraphicsContextGLOpenGL::~GraphicsContextGLOpenGL):
        (WebCore::GraphicsContextGLOpenGL::checkGPUStatus):
        (WebCore::GraphicsContextGLOpenGL::makeCurrent):
        Add a new function to make the EGL context current and maintain
        the GraphicsContextGLOpenGL::currentContext cache value correctly.
        Cache needs to be invalidated always when EGL context changes.
        The cache value is reset always, and then set only when needed
        during GraphicsContextGLOpenGL::makeContextCurrent().

        Make GraphicsContextGLCVANGLE friend of GraphicsContextGLOpenGL, since
        essentially the former is part of the implementation of latter.

        (WebCore::GraphicsContextGLOpenGL::createPbufferAndAttachIOSurface):
        (WebCore::GraphicsContextGLOpenGL::destroyPbufferAndDetachIOSurface):
        Move the implementation to a ANGLE related helper files above.

        (WebCore::GraphicsContextGLOpenGL::asCV):
        Move the asCV to the implementaton file for Cococa, as that is
        the platform which uses the implementation.

        (WebCore::GraphicsContextGLOpenGL::createShared): Deleted.
        (WebCore::GraphicsContextGLOpenGL::clearCurrentContext): Deleted.
        Replace with GraphicsContextGLOpenGL::makeCurrent().

        * platform/graphics/cv/GraphicsContextGLCVANGLE.cpp:
        (WebCore::YCbCrMatrix::operator const GLfloat* const):
        (WebCore::YCbCrToRGBMatrixForRangeAndTransferFunction):
        (WebCore::GraphicsContextGLCVANGLE::create):
        (WebCore::GraphicsContextGLCVANGLE::~GraphicsContextGLCVANGLE):
        (WebCore::GraphicsContextGLCVANGLE::GraphicsContextGLCVANGLE):
        Reorder the resource initialization with ScopeExit cleanup functions.
        Avoid storing the yuvProgram, instead just use the program as program
        binary and delete the program.

        (WebCore::GraphicsContextGLCVANGLE::copyPixelBufferToTexture):
        (WebCore::YCbCrMatrix::operator GCGLSpan<const GLfloat, 16> const): Deleted.
        (WebCore::GraphicsContextGLCVANGLE::initializeUVContextObjects): Deleted.
        Move the resource initialization into the constructor. The object
        itself is already initialized only on demand.
        (WebCore::GraphicsContextGLCVANGLE::attachIOSurfaceToTexture): Deleted.
        (WebCore::GraphicsContextGLCVANGLE::detachIOSurfaceFromTexture): Deleted.
        Share the implementation with the existing implementation from
        WebCore::GraphicsContextGLOpenGL::createPbufferAndAttachIOSurface that
        was moved to WebCore::createPbufferAndAttachIOSurface.

        * platform/graphics/cv/GraphicsContextGLCVANGLE.h:
        Remove the m_yuvProgram, rather use just the program binary.

        * platform/graphics/opengl/GraphicsContextGLOpenGL.h:
        * platform/graphics/texmap/GraphicsContextGLTextureMapper.cpp:
        (WebCore::GraphicsContextGLOpenGL::GraphicsContextGLOpenGL):
        Remove the redundant sharedContext parameter.

2021-10-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][a11y] Add initial implementation of accessible interface when building with ATSPI
        https://bugs.webkit.org/show_bug.cgi?id=230256

        Reviewed by Adrian Perez de Castro.

        * PlatformGTK.cmake:
        * accessibility/AXObjectCache.h:
        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::canSetValueAttribute const):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::rolePlatformString const):
        * accessibility/atspi/AXObjectCacheAtspi.cpp:
        (WebCore::AXObjectCache::attachWrapper):
        (WebCore::AXObjectCache::postPlatformNotification):
        (WebCore::AXObjectCache::platformHandleFocusedUIElementChanged):
        (WebCore::AXObjectCache::detachWrapper): Deleted.
        * accessibility/atspi/AccessibilityAtspi.cpp:
        (WebCore::AccessibilityAtspi::registerRoot):
        (WebCore::AccessibilityAtspi::unregisterRoot):
        (WebCore::AccessibilityAtspi::registerObject):
        (WebCore::AccessibilityAtspi::unregisterObject):
        (WebCore::AccessibilityAtspi::childrenChanged):
        (WebCore::AccessibilityAtspi::stateChanged):
        (WebCore::AccessibilityAtspi::localizedRoleName):
        (WebCore::AccessibilityAtspi::ensureCache):
        (WebCore::AccessibilityAtspi::addAccessible):
        (WebCore::AccessibilityAtspi::removeAccessible):
        (WebCore::Accessibility::createPlatformRoleMap):
        * accessibility/atspi/AccessibilityAtspi.h:
        * accessibility/atspi/AccessibilityAtspiEnums.h: Added.
        * accessibility/atspi/AccessibilityObjectAtspi.cpp:
        (WebCore::AccessibilityObjectAtspi::interfacesForObject):
        (WebCore::AccessibilityObjectAtspi::AccessibilityObjectAtspi):
        (WebCore::AccessibilityObjectAtspi::attach):
        (WebCore::AccessibilityObjectAtspi::detach):
        (WebCore::AccessibilityObjectAtspi::cacheDestroyed):
        (WebCore::AccessibilityObjectAtspi::elementDestroyed):
        (WebCore::atspiRole):
        (WebCore::AccessibilityObjectAtspi::path):
        (WebCore::AccessibilityObjectAtspi::reference):
        (WebCore::AccessibilityObjectAtspi::setRoot):
        (WebCore::AccessibilityObjectAtspi::root const):
        (WebCore::AccessibilityObjectAtspi::setParent):
        (WebCore:: const):
        (WebCore::AccessibilityObjectAtspi::parentReference const):
        (WebCore::AccessibilityObjectAtspi::childCount const):
        (WebCore::AccessibilityObjectAtspi::childAt const):
        (WebCore::AccessibilityObjectAtspi::children const):
        (WebCore::AccessibilityObjectAtspi::indexInParent const):
        (WebCore::AccessibilityObjectAtspi::indexInParentForChildrenChanged):
        (WebCore::AccessibilityObjectAtspi::name const):
        (WebCore::AccessibilityObjectAtspi::description const):
        (WebCore::shouldIncludeOrientationState):
        (WebCore::AccessibilityObjectAtspi::state const):
        (WebCore::AccessibilityObjectAtspi::id const):
        (WebCore::AccessibilityObjectAtspi::attributes const):
        (WebCore::AccessibilityObjectAtspi::buildAttributes const):
        (WebCore::AccessibilityObjectAtspi::relationMap const):
        (WebCore::AccessibilityObjectAtspi::buildRelationSet const):
        (WebCore::AccessibilityObjectAtspi::buildInterfaces const):
        (WebCore::AccessibilityObjectAtspi::serialize const):
        (WebCore::AccessibilityObjectAtspi::childAdded):
        (WebCore::AccessibilityObjectAtspi::childRemoved):
        (WebCore::AccessibilityObjectAtspi::stateChanged):
        (WebCore::AccessibilityObjectAtspi::role const):
        (WebCore::AccessibilityObjectAtspi::roleName const):
        (WebCore::AccessibilityObjectAtspi::localizedRoleName const):
        (WebCore::AccessibilityObjectAtspi::updateBackingStore):
        (WebCore::AccessibilityObject::detachPlatformWrapper):
        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject const):
        * accessibility/atspi/AccessibilityObjectAtspi.h:
        * accessibility/atspi/AccessibilityRootAtspi.cpp:
        (WebCore::AccessibilityRootAtspi::unregisterObject):
        (WebCore::AccessibilityRootAtspi::child const):
        (WebCore::AccessibilityRootAtspi::serialize const):
        * accessibility/atspi/AccessibilityRootAtspi.h:
        * accessibility/isolatedtree/atspi/AXIsolatedObjectAtspi.cpp:
        (WebCore::AXIsolatedObject::attachPlatformWrapper):
        (WebCore::AXIsolatedObject::detachPlatformWrapper):

2021-09-30  Sergio Villar Senin  <svillar@igalia.com>

        Clamp negative offset values
        https://bugs.webkit.org/show_bug.cgi?id=230707

        Reviewed by Simon Fraser.

        ScrollOffsets are the values used by scrollbars and thus should be always positive. Under some circumstances
        the value returned by maximumScrollOffset()|minimumScrollOffset() could be negative. For those cases we should
        just clamp them to zero.

        * page/scrolling/ScrollSnapOffsetsInfo.cpp:
        (WebCore::updateSnapOffsetsForScrollableArea):

2021-10-01  Kevin Turner  <kevin_turner@apple.com>

        Add support for pow(), sqrt() and hypot()
        https://bugs.webkit.org/show_bug.cgi?id=203312
        <rdar://82640883>
       
        Reviewed by Simon Fraser.
         
        Implements pow(), sqrt() and hypot() functions as specified by https://drafts.csswg.org/css-values-4/#exponent-funcs. 

        Test: fast/css/calc-parsing.html
 
        * css/CSSValueKeywords.in: Adds pow, sqrt, and hypot keywords.
        * css/calc/CSSCalcExpressionNodeParser.cpp:
        (WebCore::CSSCalcExpressionNodeParser::parseCalcFunction):
        * css/calc/CSSCalcOperationNode.cpp:
        (WebCore::determineCategory):
        (WebCore::functionFromOperator):
        (WebCore::CSSCalcOperationNode::createPowOrSqrt):
        (WebCore::CSSCalcOperationNode::createHypot):
        (WebCore::CSSCalcOperationNode::canCombineAllChildren const): Ensures nodes that are identity functions cannot have their children combined.
        (WebCore::CSSCalcOperationNode::combineChildren): Early exit if node behaves as an identity function. Performs combine of children if node is an exponential function.
        (WebCore::CSSCalcOperationNode::simplifyNode): Avoid simplifying if node does not behave as an identify function. Calls combineChildren() if node is an exponential function.
        (WebCore::functionPrefixForOperator):
        (WebCore::CSSCalcOperationNode::evaluateOperator):
        * css/calc/CSSCalcOperationNode.h: Adds isExponentialFunction() and isIdentity() methods. Exponential functions include hypot, sqrt, and pow. Identity functions are min and max when they contain one child.
        * css/calc/CSSCalcValue.cpp:
        (WebCore::createCSS):
        (WebCore::CSSCalcValue::isCalcFunction):
        * platform/calc/CalcExpressionOperation.cpp:
        (WebCore::CalcExpressionOperation::evaluate const):
        * platform/calc/CalcOperator.cpp:
        (WebCore::operator<<):
        * platform/calc/CalcOperator.h:

2021-09-30  Simon Fraser  <simon.fraser@apple.com>

        Rename snapRubberBand() to have a clearer name
        https://bugs.webkit.org/show_bug.cgi?id=231051

        Reviewed by Myles C. Maxfield.

        It wasn't clear that snapRubberBand() started the timer, sometimes. Make that
        more obvious.

        * platform/ScrollingEffectsController.h:
        * platform/mac/ScrollingEffectsController.mm:
        (WebCore::ScrollingEffectsController::handleWheelEvent):
        (WebCore::ScrollingEffectsController::updateRubberBandAnimatingState):
        (WebCore::ScrollingEffectsController::stopRubberbanding):
        (WebCore::ScrollingEffectsController::stopRubberbandAnimation):
        (WebCore::ScrollingEffectsController::startRubberbandAnimationIfNecessary):
        (WebCore::ScrollingEffectsController::stopSnapRubberbandAnimation): Deleted.
        (WebCore::ScrollingEffectsController::snapRubberBand): Deleted.

2021-09-30  Cathie Chen  <cathiechen@igalia.com>

        [Performance] Optimize RenderLayer::clipCrossesPaintingBoundary
        https://bugs.webkit.org/show_bug.cgi?id=230885

        Reviewed by Simon Fraser.

        In RenderLayer::clipCrossesPaintingBoundary, to check if the layer and its parent layer are in the same
        compositing layer, it calls enclosingCompositingLayerForRepaint() twice, which need to travel up the layer tree.
        This patch adds RenderLayer::sharesCompositingLayerForRepaint, to check the repaintTargetForLayer and paintOrderParents.

        * rendering/RenderLayer.cpp:
        (WebCore::repaintTargetForLayer):
        (WebCore::RenderLayer::enclosingCompositingLayerForRepaint const):
        (WebCore::RenderLayer::sharesCompositingLayerForRepaint const):
        (WebCore::RenderLayer::clipCrossesPaintingBoundary const):
        * rendering/RenderLayer.h:

2021-09-30  Simon Fraser  <simon.fraser@apple.com>

        Simplify some scrolling-related code in WebKit with use of RectEdges<bool>
        https://bugs.webkit.org/show_bug.cgi?id=231037

        Reviewed by Tim Horton.

        Export edgePinnedState().

        * platform/ScrollableArea.h:

2021-09-30  Sihui Liu  <sihui_liu@apple.com>

        Make File System Access API available in Worker
        https://bugs.webkit.org/show_bug.cgi?id=230805
        <rdar://problem/83552511>

        Reviewed by Youenn Fablet.

        Introduce WorkerFileSystemStorageConnection to provide connection to storage backend for handles in Worker.
        WorkerFileSystemStorageConnection sends request to FileSystemStorageConnection on the main thread, and
        dispaches the result back to handes on worker thread.

        Test: storage/filesystemaccess/directory-handle-basics-worker.html

        * Headers.cmake:
        * Modules/filesystemaccess/WorkerFileSystemStorageConnection.cpp: Added.
        (WebCore::WorkerFileSystemStorageConnection::create):
        (WebCore::WorkerFileSystemStorageConnection::WorkerFileSystemStorageConnection):
        (WebCore::WorkerFileSystemStorageConnection::~WorkerFileSystemStorageConnection):
        (WebCore::WorkerFileSystemStorageConnection::connectionClosed):
        (WebCore::WorkerFileSystemStorageConnection::scopeClosed):
        (WebCore::WorkerFileSystemStorageConnection::isSameEntry):
        (WebCore::WorkerFileSystemStorageConnection::didIsSameEntry):
        (WebCore::WorkerFileSystemStorageConnection::getFileHandle):
        (WebCore::WorkerFileSystemStorageConnection::getDirectoryHandle):
        (WebCore::WorkerFileSystemStorageConnection::didGetHandle):
        (WebCore::WorkerFileSystemStorageConnection::removeEntry):
        (WebCore::WorkerFileSystemStorageConnection::didRemoveEntry):
        (WebCore::WorkerFileSystemStorageConnection::resolve):
        (WebCore::WorkerFileSystemStorageConnection::didResolve):
        * Modules/filesystemaccess/WorkerFileSystemStorageConnection.h: Added.
        * Modules/filesystemaccess/WorkerFileSystemStorageConnectionCallbackIdentifier.h: Added.
        * Modules/storage/StorageConnection.h:
        * Modules/storage/WorkerStorageConnection.cpp:
        (WebCore::WorkerStorageConnection::scopeClosed):
        (WebCore::WorkerStorageConnection::fileSystemGetDirectory):
        (WebCore::WorkerStorageConnection::didGetDirectory):
        * Modules/storage/WorkerStorageConnection.h:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/ExceptionOr.h:
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::prepareForDestruction):
        (WebCore::WorkerGlobalScope::getFileSystemStorageConnection):
        (WebCore::WorkerGlobalScope::fileSystemStorageConnection):
        * workers/WorkerGlobalScope.h:

2021-09-30  John Wilander  <wilander@apple.com>

        PCM: Change WebIDL attributes from all lowercase to camelcase to match spec and align with Attribution Reporting API
        https://bugs.webkit.org/show_bug.cgi?id=230914
        <rdar://problem/83639923>

        Reviewed by Brent Fulgham.

        This patch changes Private Click Measurement's WebIDL attributes from
        all lowercase to camelcase to match the spec and align with the
        Attribution Reporting API proposal.

        References
        - Private Click Measurement proposal: https://privacycg.github.io/private-click-measurement/#linkformat
        - Attribution Reporting API proposal: https://wicg.github.io/conversion-measurement-api/#monkeypatch-anchor

        Existing tests updated.

        * html/HTMLAnchorElement.idl:

2021-09-30  Rob Buis  <rbuis@igalia.com>

        Move canCompositeClipPath to RenderLayer
        https://bugs.webkit.org/show_bug.cgi?id=231014

        Reviewed by Simon Fraser.

        Move canCompositeClipPath to RenderLayer since the
        code almost exclusively deals with layers. Also
        remove unneeded ASSERTs.

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::adjustStyleDifference const):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::willCompositeClipPath const):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::canCompositeClipPath): Deleted.
        * rendering/RenderLayerCompositor.h:

2021-09-30  Devin Rousso  <drousso@apple.com>

        [iOS][GPU Process] support `<attachment>`
        https://bugs.webkit.org/show_bug.cgi?id=230781
        <rdar://problem/70884096>

        Reviewed by Myles Maxfield.

        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderAttachmentInfo::addLine):
        (WebCore::RenderAttachmentInfo::buildWrappedLines):
        (WebCore::RenderAttachmentInfo::buildSingleLine):
        (WebCore::paintAttachmentText):
        Instead of drawing directly into the `GraphicsContext::platformContext` (which will not be
        valid in the WebProcess when DOM rendering happens in the GPUProcess), use `DrawGlyphsRecorder`
        to "translate" native `CTLineDraw` into a sequence of actions from which a `GraphicsContext`
        method can be derived, thereby hooking into and benefiting from existing GPUProcess support.

        * platform/graphics/DrawGlyphsRecorder.h:
        (WebCore::DrawGlyphsRecorder::deconstructDrawGlyphs const): Renamed from `drawGlyphsDeconstruction`.
        * platform/graphics/coretext/DrawGlyphsRecorderCoreText.cpp:
        (WebCore::DrawGlyphsRecorder::DrawGlyphsRecorder):
        (WebCore::DrawGlyphsRecorder::recordDrawGlyphs):
        (WebCore::DrawGlyphsRecorder::drawGlyphs):
        (WebCore::DrawGlyphsRecorder::drawNativeText):
        * platform/graphics/displaylists/DisplayListRecorder.cpp:
        * platform/graphics/harfbuzz/DrawGlyphsRecorderHarfBuzz.cpp:
        (WebCore::DrawGlyphsRecorder::DrawGlyphsRecorder):
        * platform/graphics/win/DrawGlyphsRecorderWin.cpp:
        (WebCore::DrawGlyphsRecorder::DrawGlyphsRecorder):
        Add a new parameter to `DrawGlyphsRenderer` that controls whether fonts other than the one
        initially provided to `drawGlyphs`/`drawNativeText` can be used to draw glyphs. This is only
        used by the above as we know that the initial font is a system font, and therefore that the
        fallback list will also only contain system fonts, meaning that sending the font to the
        GPUProcess is cheap (a file path instead of actual data).

        (WebCore::DisplayList::Recorder::Recorder):
        * platform/graphics/displaylists/DisplayListRecorder.h:
        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::displayListForTextRun const):
        Drive-by: Rename `DrawGlyphsDeconstruction` to `DeconstructDrawGlyphs` as it reads better.

2021-09-29  Simon Fraser  <simon.fraser@apple.com>

        Replace the confusing isPinnedForScrollDelta() logic with code that uses BoxSide
        https://bugs.webkit.org/show_bug.cgi?id=231004

        Reviewed by Tim Horton.

        isPinnedForScrollDelta()/isPinnedForScrollDeltaOnAxis() are ambiguous because it's
        easy to interpret them as looking at the magnitude of the delta to determine whether
        the delta will cause stretching on an edge. However, they don't do this; they simply
        use the delta to choose which edge to look at, and the "is pinned" refers to whether
        the scroller is already scrolled to that edge or stretching at that edge.

        To reduce ambiguity, rewrite the code in terms of BoxSides, separating the code
        that determines which BoxSide to look at for a given event delta from the code that
        computed pinned state. It's now clearer that it's the caller's responsibility to
        do "dominant axis" delta transformations too.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::scrollableAreaCanHandleEvent):
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::mainFrameCanRubberBandOnSide):
        (WebCore::ScrollingTree::mainFrameCanRubberBandInDirection): Deleted.
        * page/scrolling/ScrollingTree.h:
        * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.h:
        * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.mm:
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::allowsHorizontalStretching const):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::allowsVerticalStretching const):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::isPinnedOnSide const): Remove the old "scrollOffsetLimit" threshold. Our scroll offsets
        are currently all integral so I don't think this did anything.
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::shouldRubberBandOnSide const):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::isPinnedForScrollDeltaOnAxis const): Deleted.
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::isPinnedForScrollDelta const): Deleted.
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::shouldRubberBandInDirection const): Deleted.
        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::isPinnedOnSide const):
        (WebCore::ScrollAnimator::isPinnedForScrollDelta const): Deleted.
        * platform/ScrollAnimator.h:
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::isPinnedOnSide const):
        (WebCore::ScrollableArea::targetSideForScrollDelta):
        (WebCore::ScrollableArea::isPinnedForScrollDeltaOnAxis const): Deleted.
        (WebCore::ScrollableArea::isPinnedForScrollDelta const): Deleted.
        * platform/ScrollableArea.h:
        * platform/ScrollingEffectsController.h:
        * platform/ios/ScrollAnimatorIOS.mm:
        (WebCore::ScrollAnimatorIOS::determineScrollableAreaForTouchSequence):
        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::allowsVerticalStretching const):
        (WebCore::ScrollAnimatorMac::allowsHorizontalStretching const):
        (WebCore::ScrollAnimatorMac::shouldRubberBandOnSide const):
        (WebCore::ScrollAnimatorMac::shouldRubberBandInDirection const): Deleted.
        * platform/mac/ScrollingEffectsController.mm:
        (WebCore::dominantAxisFavoringVertical):
        (WebCore::deltaAlignedToAxis):
        (WebCore::deltaAlignedToDominantAxis):
        (WebCore::affectedSideOnDominantAxis):
        (WebCore::isHorizontalSide):
        (WebCore::isVerticalSide):
        (WebCore::ScrollingEffectsController::handleWheelEvent):
        (WebCore::ScrollingEffectsController::wheelDeltaBiasingTowardsVertical):
        (WebCore::ScrollingEffectsController::shouldRubberBandOnSide const):
        (WebCore::convertToProminentAxisFavoringVertical): Deleted.
        (WebCore::ScrollingEffectsController::directionFromEvent): Deleted.
        (WebCore::ScrollingEffectsController::shouldRubberBandInHorizontalDirection const): Deleted.
        (WebCore::ScrollingEffectsController::shouldRubberBandInDirection const): Deleted.

2021-09-30  Devin Rousso  <drousso@apple.com>

        [GPU Process] support rendering Apple Pay buttons
        https://bugs.webkit.org/show_bug.cgi?id=230648
        <rdar://problem/72061985>

        Reviewed by Tim Horton.

        * rendering/RenderThemeCocoa.mm:
        (WebCore::RenderThemeCocoa::paintApplePayButton):
        Instead of drawing directly into the `GraphicsContext::platformContext` (which will not be
        valid in the WebProcess when DOM rendering happens in the GPUProcess), first draw into a
        temporary `ImageBuffer` and then consume it to draw into the actual/used `GraphicsContext`.
        While it is possible to create a dedicated display list item for this, we don't want to do
        that because `PKDrawApplePayButtonWithCornerRadius` involves dealing with PDFs, which are
        not as secure as we'd like for use in the GPUProcess.

2021-09-30  Chris Dumez  <cdumez@apple.com>

        Web Audio panner node quality deteriorates over time
        https://bugs.webkit.org/show_bug.cgi?id=230950
        <rdar://problem/83675934>

        Reviewed by Eric Carlson.

        When profiling the test case, I noticed what we were spending most of the CPU time
        under AudioParamTimeline::valuesForFrameRangeImpl() / isEventCurrent() called from
        PannerNode::process(). The reason for that is that the number of events in the
        AudioParamTimeline would keep growing unboundedly and it would make the
        valuesForFrameRangeImpl() implementation more and more expensive over time, since
        it has to iterate over all events.

        To address the issue, valuesForFrameRangeImpl() now keeps track of the events
        that it had to skip because they were in the past. Then, at the end of the loop,
        it removes the outdated events so it won't have to iterate over them the next
        time around. This behavior is similar to what Blink does.

        * Modules/webaudio/AudioParamTimeline.cpp:
        (WebCore::AudioParamTimeline::removeOldEvents):
        (WebCore::AudioParamTimeline::valuesForFrameRangeImpl):
        * Modules/webaudio/AudioParamTimeline.h:

2021-09-30  Ziran Sun  <zsun@igalia.com>

        [css-grid]  Transfer sizes from the aspect-ratio while resolving min-length for auto repetitions
        https://bugs.webkit.org/show_bug.cgi?id=230676

        Reviewed by  Sergio Villar Senin.
        
        When resolving min-length for auto repetitions, if the min-length on the axis considered is not specified,
        we need to check if the min-length on the other axis and the aspect ratio are specified. When both are
        specified, we will fetch the transferred min-length for the axis we are considering.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::computeAutoRepeatTracksCount const):

2021-09-30  John Wilander  <wilander@apple.com>

        PCM: Take app bundle ID into consideration when matching triggering events with pending clicks
        https://bugs.webkit.org/show_bug.cgi?id=230778
        <rdar://problem/83516528>

        Reviewed by Alex Christensen.

        https://commits.webkit.org/r282884 added app bundle IDs to unattributed
        and attributed clicks in PCM. This patch makes sure we take those IDs
        into consideration in PCM::Database::attributePrivateClickMeasurement().

        The WebCore part makes sure that a temporary app bundle ID can be set
        on attributions that get stored in PCM's database.

        Test: http/tests/privateClickMeasurement/multiple-app-bundle-ids.html

        * loader/PrivateClickMeasurement.cpp:
        (WebCore::PrivateClickMeasurement::setSourceApplicationBundleIDForTesting):
        * loader/PrivateClickMeasurement.h:

2021-09-30  Youenn Fablet  <youenn@apple.com>

        Support AES GCM ciphers in WebRTC
        https://bugs.webkit.org/show_bug.cgi?id=214402
        <rdar://problem/65700381>

        Reviewed by Eric Carlson.

        Enable GCM ciphers in WebRTC as done by Chrome.
        The default ciphers remain the same so use of these ciphers is opt-in by SFUs.

        Manually tested.

        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::setConfiguration):

2021-09-30  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] RootInlineBox should use the first-line style when applicable
        https://bugs.webkit.org/show_bug.cgi?id=231003

        Reviewed by Antti Koivisto.

        This is in preparation for supporting first-line style.

        * layout/formattingContexts/inline/InlineLineBox.cpp:
        (WebCore::Layout::LineBox::LineBox):
        * layout/formattingContexts/inline/InlineLineBox.h:
        * layout/formattingContexts/inline/InlineLineBoxBuilder.cpp:
        (WebCore::Layout::LineBoxBuilder::build):

2021-09-30  Alex Christensen  <achristensen@webkit.org>

        Clean up PrivateClickMeasurement
        https://bugs.webkit.org/show_bug.cgi?id=230978

        Reviewed by Kate Cheney.

        In r270669 I added sourceDescription and purchaser to PrivateClickMeasurement,
        but they're actually only needed for the UIEventAttribution getter on WKWebView.
        I moved them to a new struct PrivateClickMeasurementAndMetadata which stores this additional
        information only on WebPageProxy instead of all the PCM infrastructure.

        I reduced the size of SourceID.id to 1 byte.  Now a SourceID is always valid, so we don't need
        to check after it has been created.  We still check when creating one from parsing web content,
        but everywhere else we know that it is valid because of its type.

        I removed the default constructor of PrivateClickMeasurement and default parameter values.
        There aren't very many places where we construct one except for the tests, and it's good to see
        what values we are using so we don't forget anything.

        No change in behavior.

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::parsePrivateClickMeasurement const):
        * loader/PrivateClickMeasurement.cpp:
        (WebCore::PrivateClickMeasurement::isValid const):
        (WebCore::PrivateClickMeasurement::isolatedCopy const):
        (WebCore::PrivateClickMeasurement::parseAttributionRequest):
        * loader/PrivateClickMeasurement.h:
        (WebCore::PrivateClickMeasurement::SourceID::SourceID):
        (WebCore::PrivateClickMeasurement::Priority::Priority):
        (WebCore::PrivateClickMeasurement::AttributionTriggerData::AttributionTriggerData):
        (WebCore::PrivateClickMeasurement::PrivateClickMeasurement):
        (WebCore::PrivateClickMeasurement::isEphemeral const):
        (WebCore::PrivateClickMeasurement::setEphemeral):
        (WebCore::PrivateClickMeasurement::encode const):
        (WebCore::PrivateClickMeasurement::decode):
        (WebCore::PrivateClickMeasurement::AttributionTriggerData::decode):
        (WTF::HashTraits<WebCore::PrivateClickMeasurement::SourceSite>::emptyValue):
        (WebCore::PrivateClickMeasurement::SourceID::isValid const): Deleted.
        (WebCore::PrivateClickMeasurement::sourceDescription const): Deleted.
        (WebCore::PrivateClickMeasurement::purchaser const): Deleted.

2021-09-30  Alan Bujtas  <zalan@apple.com>

        (REGRESSION r282150) Missing background-color on inline box while hovering
        https://bugs.webkit.org/show_bug.cgi?id=230977
        <rdar://problem/83682736>

        Reviewed by Antti Koivisto.

        Check if the RenderInline is still eligible for the modern line layout codepath after style change. 

        Test: fast/inline/inline-box-background-dynamic.html

        * layout/integration/LayoutIntegrationCoverage.cpp:
        (WebCore::LayoutIntegration::canUseForRenderInlineChild):
        (WebCore::LayoutIntegration::canUseForChild):
        (WebCore::LayoutIntegration::canUseForLineLayoutAfterInlineBoxStyleChange):
        * layout/integration/LayoutIntegrationCoverage.h:
        * layout/integration/LayoutIntegrationLineLayout.cpp:
        (WebCore::LayoutIntegration::LineLayout::canUseForAfterInlineBoxStyleChange):
        * layout/integration/LayoutIntegrationLineLayout.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::styleDidChange):

2021-09-30  Antti Koivisto  <antti@apple.com>

        Regression (283158): Having unused TextIterator instance shouldn't crash if document is mutated
        https://bugs.webkit.org/show_bug.cgi?id=231013
        rdar://83690985

        Reviewed by Alan Bujtas.

        By using bundle APIs it is possible to create a retained TextIterator and hit CheckedPtr assertion because layout
        is torn down while iterator still exists. This is not dangerous in itself so can be supported.

        This patch ensures LineLayout disconnects cleanly from (refcounted) InlineContent.

        Test: editing/text-iterator/text-iterator-document-mutation.html

        * layout/integration/LayoutIntegrationInlineContent.cpp:
        (WebCore::LayoutIntegration::InlineContent::clearAndDetach):

        Remove all content and clear the LineLayout pointer.

        This is safe since iterators refer to content via indexes and any attempt to access
        via them will hit nullptrs or vector asserts.

        * layout/integration/LayoutIntegrationInlineContent.h:
        (WebCore::LayoutIntegration::InlineContent::lineLayout const):
        * layout/integration/LayoutIntegrationLineLayout.cpp:
        (WebCore::LayoutIntegration::LineLayout::~LineLayout):
        (WebCore::LayoutIntegration::LineLayout::layout):
        (WebCore::LayoutIntegration::LineLayout::hitTest):
        (WebCore::LayoutIntegration::LineLayout::clearInlineContent):

        Clear InlineContent before nulling it as it can still be kept alive by iterators.

        * layout/integration/LayoutIntegrationLineLayout.h:
        * testing/Internals.cpp:
        (WebCore::Internals::retainTextIteratorForDocumentContent):
        * testing/Internals.h:
        * testing/Internals.idl:

2021-09-30  Enrique Ocaña González  <eocanha@igalia.com>

        [MSE][GStreamer] Allow infinite duration on MSE
        https://bugs.webkit.org/show_bug.cgi?id=231017

        Reviewed by Alicia Boya Garcia.

        Positive infinite duration isn't properly working on MSE in the glib (GStreamer) ports. When
        such a duration is set, nothing happens and the default zero duration remains. This can break
        some live streams, because the wrong duration has influence in the real seek target time
        used[1], so the seek may end up being done to the wrong time (before the buffered ranges in
        my case) and the playback never starts.

        [1] https://github.com/WebKit/WebKit/blob/a12c487/Source/WebCore/html/HTMLMediaElement.cpp#L3153

        Covered by existing tests.

        * platform/graphics/gstreamer/mse/MediaSourcePrivateGStreamer.cpp:
        (WebCore::MediaSourcePrivateGStreamer::durationChanged): Don't discard the change on infinite duration.

2021-09-30  Kimmo Kinnunen  <kkinnunen@apple.com>

        GraphicsContextGLAttributes::hasFenceSync should be a property of GraphicsContextGLOpenGL
        https://bugs.webkit.org/show_bug.cgi?id=230939

        Reviewed by Antti Koivisto.

        Move hasFenceSync from GraphicsContextGLAttributes to GraphicsContextGLOpenGL.

        No new tests, a refactor.

        * platform/graphics/GraphicsContextGLAttributes.h:
        * platform/graphics/cocoa/GraphicsContextGLOpenGLCocoa.mm:
        (WebCore::GraphicsContextGLOpenGL::GraphicsContextGLOpenGL):
        (WebCore::GraphicsContextGLOpenGL::prepareForDisplay):
        * platform/graphics/opengl/GraphicsContextGLOpenGL.h:

2021-09-30  Youenn Fablet  <youenn@apple.com>

        Layout Test imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-iceConnectionState.https.html is a flaky failure
        https://bugs.webkit.org/show_bug.cgi?id=203256
        <rdar://problem/56506063>

        Reviewed by Eric Carlson.

        Test was flaky for a few reasons:
        - Setting local/remote descriptions may change the ICE transports in use so we need to update the ice connection state when setting local/remote descriptions.
        - We start observing ICE transport backend state asynchronously and we might miss the checking state which can happen very quickly. Synthesize it if needed.
        - We were using the ICE connection state value from the backend as well as computing it from our RTCIceTransport objects. We now fully compute it from RTCIceTransport objects.
          This ensures we have consistent state between RTCIceTransport and RTCPeerConnection objects with regards to ICE state.

        Covered by no longer flaky test.

        * Modules/mediastream/PeerConnectionBackend.cpp:
        (WebCore::PeerConnectionBackend::setLocalDescriptionSucceeded):
        (WebCore::PeerConnectionBackend::setRemoteDescriptionSucceeded):
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::updateIceGatheringState):
        (WebCore::RTCPeerConnection::updateIceConnectionState):
        (WebCore::RTCPeerConnection::computeIceConnectionStateFromIceTransports):
        * Modules/mediastream/RTCPeerConnection.h:
        * Modules/mediastream/libwebrtc/LibWebRTCIceTransportBackend.cpp:
        (WebCore::LibWebRTCIceTransportBackendObserver::start):

2021-09-30  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed GTK build fix after r283304

        * accessibility/atspi/AccessibilityAtspi.cpp:
        (WebCore::AccessibilityAtspi::registerRoot): Use Ref instead of makeRef.

2021-09-30  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed GTK build fix after r283304

        * accessibility/atspi/AccessibilityObjectAtspi.h: Move the final keyword to the right place.

2021-09-30  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][a11y] Connect UI process a11y tree with the web process when building with ATSPI
        https://bugs.webkit.org/show_bug.cgi?id=230255

        Reviewed by Adrian Perez de Castro.

        Add AccessibilityAtspi class to connect to the ATSPI DBus service using the address provided. Also add
        AccessibilityRootAtspi class that will be the parent object of the accessibility root wrapper, and the children
        of the UI process web view. In ATK the AtkSocket and AtkPlug use a private DBus message to send the unique name
        of the UI process connection to the web process. That's not possible with GDBus, so we wait for the first
        GetState message to be received (which is called right after atk_socket_embed() is called in the UI process) to
        get the unique name of the UI process connection. PlatformDisplay has now API to get the DBus address of the
        ATSPI service. This is used only in the UI process that sends the address to the web process, so that we don't
        need to get it on every web process again.

        * PlatformGTK.cmake:
        * SourcesGTK.txt:
        * accessibility/atspi/AccessibilityAtspi.cpp: Added.
        (WebCore::AccessibilityAtspi::AccessibilityAtspi):
        (WebCore::AccessibilityAtspi::uniqueName const):
        (WebCore::AccessibilityAtspi::nullReference const):
        (WebCore::AccessibilityAtspi::registerRoot):
        * accessibility/atspi/AccessibilityAtspi.h: Added.
        * accessibility/atspi/AccessibilityRootAtspi.cpp: Added.
        (WebCore::AccessibilityRootAtspi::create):
        (WebCore::AccessibilityRootAtspi::AccessibilityRootAtspi):
        (WebCore::AccessibilityRootAtspi::registerObject):
        (WebCore::AccessibilityRootAtspi::setPath):
        (WebCore::AccessibilityRootAtspi::setParentPath):
        (WebCore::AccessibilityRootAtspi::applicationReference const):
        (WebCore::AccessibilityRootAtspi::reference const):
        * accessibility/atspi/AccessibilityRootAtspi.h: Added.
        (WebCore::AccessibilityRootAtspi::atspi const):
        * accessibility/atspi/xml/Accessibility.xml: Added.
        * accessibility/atspi/xml/Accessible.xml: Added.
        * accessibility/atspi/xml/Action.xml: Added.
        * accessibility/atspi/xml/Application.xml: Added.
        * accessibility/atspi/xml/Cache.xml: Added.
        * accessibility/atspi/xml/Collection.xml: Added.
        * accessibility/atspi/xml/Component.xml: Added.
        * accessibility/atspi/xml/DeviceEventController.xml: Added.
        * accessibility/atspi/xml/DeviceEventListener.xml: Added.
        * accessibility/atspi/xml/Document.xml: Added.
        * accessibility/atspi/xml/EditableText.xml: Added.
        * accessibility/atspi/xml/Event.xml: Added.
        * accessibility/atspi/xml/Hyperlink.xml: Added.
        * accessibility/atspi/xml/Hypertext.xml: Added.
        * accessibility/atspi/xml/Image.xml: Added.
        * accessibility/atspi/xml/Registry.xml: Added.
        * accessibility/atspi/xml/Selection.xml: Added.
        * accessibility/atspi/xml/Socket.xml: Added.
        * accessibility/atspi/xml/Table.xml: Added.
        * accessibility/atspi/xml/TableCell.xml: Added.
        * accessibility/atspi/xml/Text.xml: Added.
        * accessibility/atspi/xml/Value.xml: Added.
        * platform/graphics/PlatformDisplay.cpp:
        (WebCore::PlatformDisplay::createPlatformDisplay):
        (WebCore::PlatformDisplay::accessibilityBusAddress const):
        * platform/graphics/PlatformDisplay.h:
        (WebCore::PlatformDisplay::setAccessibilityBusAddress):
        (WebCore::PlatformDisplay::plartformAccessibilityBusAddress const):
        * platform/graphics/x11/PlatformDisplayX11.cpp:
        (WebCore::PlatformDisplayX11::plartformAccessibilityBusAddress const):
        * platform/graphics/x11/PlatformDisplayX11.h:

2021-09-29  Kimmo Kinnunen  <kkinnunen@apple.com>

        GPUP Cocoa GraphicsContextGLOpenGL should check for ANGLE presence
        https://bugs.webkit.org/show_bug.cgi?id=230946

        Reviewed by Antti Koivisto.

        For consistency, avoid crashing the GPUP mode when trying
        to create GraphicsContextGLOpenGL when the ANGLE-shared dylib
        is not present.

        No new tests, refactor.

        * platform/graphics/cocoa/GraphicsContextGLOpenGLCocoa.mm:
        (WebCore::isANGLEAvailable):
        (WebCore::initializeEGLDisplay):
        (WebCore::GraphicsContextGLOpenGL::create):
        (WebCore::GraphicsContextGLOpenGL::GraphicsContextGLOpenGL):
        (WebCore::GraphicsContextGLOpenGL::makeContextCurrent):
        (WebCore::InitializeEGLDisplay): Deleted.

2021-09-29  Kimmo Kinnunen  <kkinnunen@apple.com>

        Cocoa GraphicsContextGLOpenGL should be more robust in destruction
        https://bugs.webkit.org/show_bug.cgi?id=230940

        Reviewed by Antti Koivisto.

        Delete resources based on checking if they exist, not based on
        a flag that should cause them to exist. Currently the constructor can return early,
        so various resources might not exist even if their flag condition would
        indicate they should.

        No new tests, refactor.

        * platform/graphics/cocoa/GraphicsContextGLOpenGLCocoa.mm:
        (WebCore::GraphicsContextGLOpenGL::~GraphicsContextGLOpenGL):

2021-09-29  Simon Fraser  <simon.fraser@apple.com>

        Minor cleanup of some rubber-banding code in ScrollingEffectsController
        https://bugs.webkit.org/show_bug.cgi?id=230981

        Reviewed by Tim Horton.

        As a precursor to unraveling some of the complexity of the rubber-banding code,
        tidy up naming and code in ScrollingEffectsController::handleWheelEvent(). No
        behavior change.

        * platform/PlatformWheelEvent.h:
        (WebCore::PlatformWheelEvent::unacceleratedScrollingDelta const):
        (WebCore::PlatformWheelEvent::unacceleratedScrollingDeltaX const): Deleted.
        (WebCore::PlatformWheelEvent::unacceleratedScrollingDeltaY const): Deleted.
        * platform/ScrollingEffectsController.h:
        * platform/mac/ScrollingEffectsController.mm:
        (WebCore::convertToProminentAxisFavoringVertical):
        (WebCore::ScrollingEffectsController::handleWheelEvent):
        (WebCore::ScrollingEffectsController::wheelDeltaBiasingTowardsVertical):

2021-09-29  Chris Dumez  <cdumez@apple.com>

        Add support for running service workers on the main thread
        https://bugs.webkit.org/show_bug.cgi?id=230649

        Reviewed by Alex Christensen.

        Add support for running service workers on the main thread (off by default).

        This is to support use cases where the InjectedBundle needs to have access
        to a service worker's JS global object and script it. It wouldn't be practical
        in such cases to have the service worker running off the main thread. Note that
        this is not meant to be used for service workers in general, only for some very
        specific service workers that require interaction with WebKit's injected bundle.

        * Headers.cmake:
        * Modules/indexeddb/client/IDBConnectionProxy.cpp:
        (WebCore::IDBClient::IDBConnectionProxy::forgetActivityForCurrentThread):
        * Modules/websockets/WorkerThreadableWebSocketChannel.cpp:
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::waitForMethodCompletion):
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/WorkerDebugger.cpp:
        (WebCore::WorkerDebugger::runEventLoopWhilePaused):
        * loader/WorkerThreadableLoader.cpp:
        (WebCore::WorkerThreadableLoader::loadResourceSynchronously):
        * page/PerformanceUserTiming.cpp:
        (WebCore::PerformanceUserTiming::convertMarkToTimestamp const):
        * workers/WorkerOrWorkletGlobalScope.h:
        * workers/WorkerOrWorkletScriptController.cpp:
        (WebCore::WorkerOrWorkletScriptController::loadModuleSynchronously):
        * workers/WorkerOrWorkletScriptController.h:
        * workers/WorkerOrWorkletThread.cpp:
        (WebCore::constructRunLoop):
        (WebCore::WorkerOrWorkletThread::WorkerOrWorkletThread):
        (WebCore::WorkerOrWorkletThread::startRunningDebuggerTasks):
        (WebCore::WorkerOrWorkletThread::runEventLoop):
        (WebCore::WorkerOrWorkletThread::workerOrWorkletThread):
        (WebCore::WorkerOrWorkletThread::stop):
        (WebCore::WorkerOrWorkletThread::suspend):
        (WebCore::WorkerOrWorkletThread::resume):
        * workers/WorkerOrWorkletThread.h:
        * workers/WorkerRunLoop.cpp:
        (WebCore::ModePredicate::operator() const):
        (WebCore::WorkerDedicatedRunLoop::WorkerDedicatedRunLoop):
        (WebCore::WorkerDedicatedRunLoop::~WorkerDedicatedRunLoop):
        (WebCore::RunLoopSetup::RunLoopSetup):
        (WebCore::WorkerDedicatedRunLoop::run):
        (WebCore::WorkerDedicatedRunLoop::runInDebuggerMode):
        (WebCore::WorkerDedicatedRunLoop::runInMode):
        (WebCore::WorkerDedicatedRunLoop::runCleanupTasks):
        (WebCore::WorkerDedicatedRunLoop::terminate):
        (WebCore::WorkerDedicatedRunLoop::postTaskAndTerminate):
        (WebCore::WorkerDedicatedRunLoop::postTaskForMode):
        (WebCore::WorkerDedicatedRunLoop::Task::performTask):
        (WebCore::WorkerDedicatedRunLoop::Task::Task):
        (WebCore::WorkerMainRunLoop::WorkerMainRunLoop):
        (WebCore::WorkerMainRunLoop::setGlobalScope):
        (WebCore::WorkerMainRunLoop::postTaskAndTerminate):
        (WebCore::WorkerMainRunLoop::postTaskForMode):
        (WebCore::WorkerMainRunLoop::runInMode):
        * workers/WorkerRunLoop.h:
        (WebCore::WorkerRunLoop::createUniqueId):
        (isType):
        * workers/WorkerThread.cpp:
        (WebCore::WorkerParameters::isolatedCopy const):
        (WebCore::WorkerThread::WorkerThread):
        (WebCore::WorkerThread::createThread):
        (WebCore::WorkerThread::evaluateScriptIfNecessary):
        * workers/WorkerThread.h:
        * workers/WorkerThreadMode.h: Added.
        * workers/service/ServiceWorkerGlobalScope.cpp:
        (WebCore::ServiceWorkerGlobalScope::updateExtendedEventsSet):
        * workers/service/context/ServiceWorkerThread.cpp:
        (WebCore::generateWorkerParameters):
        (WebCore::ServiceWorkerThread::ServiceWorkerThread):
        (WebCore::ServiceWorkerThread::finishedEvaluatingScript):
        (WebCore::ServiceWorkerThread::startHeartBeatTimer):
        * workers/service/context/ServiceWorkerThread.h:
        * workers/service/context/ServiceWorkerThreadProxy.cpp:
        (WebCore::ServiceWorkerThreadProxy::ServiceWorkerThreadProxy):
        * workers/service/context/ServiceWorkerThreadProxy.h:
        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::SWServer):
        (WebCore::SWServer::installContextData):
        (WebCore::SWServer::runServiceWorker):
        * workers/service/server/SWServer.h:
        * workers/service/server/SWServerToContextConnection.h:

2021-09-29  Basuke Suzuki  <basuke.suzuki@sony.com>

        Suppress warnings for implicit copy assignment operator/copy constructor with clang 13
        https://bugs.webkit.org/show_bug.cgi?id=230963

        Reviewed by Mark Lam.

        No new tests because there is no behavior change.

        Added default copy constructor / copy assignment operator to suppress warning.

        * platform/LayoutUnit.h:
        * platform/LengthBox.h:
        * platform/RectEdges.h:
        * platform/graphics/FontSelectionAlgorithm.h:
        * platform/graphics/ImagePaintingOptions.h:

2021-09-29  Kiet Ho  <tho22@apple.com>

        Implement the 'ic' unit from CSS Values 4
        https://bugs.webkit.org/show_bug.cgi?id=204276
        <rdar://problem/57256127>

        Reviewed by Myles C. Maxfield.

        Tests: fast/css/CSSPrimitiveValue-ic.html
               imported/w3c/web-platform-tests/css/css-values/ic-unit-013.html
               imported/w3c/web-platform-tests/css/css-values/ic-unit-014.html

        * css/CSSPrimitiveValue.cpp:
        (WebCore::isValidCSSUnitTypeForDoubleConversion):
        (WebCore::isStringType):
        (WebCore::CSSPrimitiveValue::cleanup):
        (WebCore::CSSPrimitiveValue::computeUnzoomedNonCalcLengthDouble):
        (WebCore::CSSPrimitiveValue::computeNonCalcLengthDouble):
        (WebCore::CSSPrimitiveValue::unitTypeString):
        (WebCore::CSSPrimitiveValue::formatNumberForCustomCSSText const):
        (WebCore::CSSPrimitiveValue::equals const):
        (WebCore::CSSPrimitiveValue::collectDirectComputationalDependencies const):
        * css/CSSPrimitiveValue.h:
        (WebCore::CSSPrimitiveValue::isFontRelativeLength):
        (WebCore::CSSPrimitiveValue::isLength):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::convertingToLengthRequiresNonNullStyle const):
        * css/CSSUnits.cpp:
        (WebCore::unitCategory):
        (WebCore::operator<<):
        * css/CSSUnits.h:
        * css/DeprecatedCSSOMPrimitiveValue.cpp:
        (WebCore::DeprecatedCSSOMPrimitiveValue::primitiveType const):
        * css/calc/CSSCalcCategoryMapping.cpp:
        (WebCore::calcUnitCategory):
        (WebCore::calculationCategoryForCombination):
        (WebCore::hasDoubleValue):
        * css/parser/CSSParserToken.cpp:
        (WebCore::cssPrimitiveValueUnitFromTrie):
        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::consumeLengthRawWithKnownTokenTypeDimension):
        * css/parser/SizesAttributeParser.cpp:
        (WebCore::SizesAttributeParser::computeLength):
        * platform/graphics/Font.cpp:
        (WebCore::Font::platformGlyphInit): simplyfy logic, reorder misplaced comment.
        * platform/graphics/Font.h: remove property `m_zeroGlyph` only used once in
        WebCore::Font::platformGlyphInit. Remove unused getters adjustedSpaceWidth(),
        setSpaceWidths(), setSpaceGlyph(), setZeroWidthSpaceGlyph(), zeroGlyph(), setZeroGlyph().
        (WebCore::Font::spaceWidth const):
        (WebCore::Font::spaceGlyph const):
        (WebCore::Font::zeroWidthSpaceGlyph const):
        (WebCore::Font::isZeroWidthSpaceGlyph const):
        * platform/graphics/FontMetrics.h:
        (WebCore::FontMetrics::ideogramWidth const): add metric containing the width of an ideogram
        glyph in the font. This width is approximated from the width of the CJK water glyph (U+6C34).
        (WebCore::FontMetrics::setIdeogramWidth):
        (WebCore::FontMetrics::reset):

2021-09-29  BJ Burg  <bburg@apple.com>

        [Cocoa] add _WKInspectorExtension SPI to evaluate script on an extension tab
        https://bugs.webkit.org/show_bug.cgi?id=230646
        <rdar://problem/83420328>

        Reviewed by Devin Rousso.

        Exercised by new API test: WKInspectorExtension.CanEvaluateScriptInExtensionTab

        * inspector/InspectorFrontendHost.h:
        * inspector/InspectorFrontendHost.idl:
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::evaluateScriptInExtensionTab):
        Find the global object that corresponds to the passed-in <iframe> and
        try to evaluate scriptSource in the mainThreadNormalWorld() of that <iframe>.

        * html/HTMLIFrameElement.idl: Add [JSGenerateToNativeObject] so that
        it's possible to pass HTMLIFrameElement to the IDL function and convert it
        to the native object (HTMLIFrameElement&) from a JSValue.

2021-09-29  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Use the first-line style when measuring text content when applicable
        https://bugs.webkit.org/show_bug.cgi?id=230925

        Reviewed by Antti Koivisto.

        Disable "simplified content measuring" when first-style is present.

        * layout/formattingContexts/inline/InlineLineBuilder.cpp:
        (WebCore::Layout::LineBuilder::inlineItemWidth const):
        * layout/formattingContexts/inline/InlineTextItem.cpp:
        (WebCore::Layout::InlineTextItem::createAndAppendTextItems):

2021-09-29  Chris Dumez  <cdumez@apple.com>

        Use isolated NSURLSessions for each first party registrable domain
        https://bugs.webkit.org/show_bug.cgi?id=230750
        <rdar://83159358>

        Reviewed by Alex Christensen.

        Fix bug where service worker soft-update requests would have their "first-party-for-cookies"
        field set to "https:" instead of a full origin (e.g. "https://localhost:8080"). This was
        causing some service worker test failures now that we use different NSURLSession based on
        the "first-party-for-cookies" field.

        * workers/service/server/SWServer.cpp:
        (WebCore::originURL):

2021-09-29  Devin Rousso  <drousso@apple.com>

        Allow `DrawGlyphsRecorder` to be used with any `GraphicsContext` instead of just `DisplayList::Recorder`
        https://bugs.webkit.org/show_bug.cgi?id=230913

        Reviewed by Myles Maxfield.

        There's really nothing about `DrawGlyphsRecorder` that's specific to display lists other
        than it's currently only being used by `DisplayList::Recorder`.

        This patch replaces `DisplayList::Recorder` with `GraphicsContext` in `DrawGlyphsRecorder`.
        It also requires that new methods be added to `GraphicsContext` that are overridden by
        `DisplayList::Recorder`. This is being done to make `<attachment>` drawing work in the
        GPUProcess (<https://webkit.org/b/230781>).

        * platform/graphics/DrawGlyphsRecorder.h:
        * platform/graphics/coretext/DrawGlyphsRecorderCoreText.cpp:
        (WebCore::DrawGlyphsRecorder::DrawGlyphsRecorder):
        (WebCore::DrawGlyphsRecorder::populateInternalState):
        (WebCore::DrawGlyphsRecorder::prepareInternalContext):
        (WebCore::DrawGlyphsRecorder::recordDrawGlyphs):
        (WebCore::DrawGlyphsRecorder::drawGlyphs):
        * platform/graphics/harfbuzz/DrawGlyphsRecorderHarfBuzz.cpp:
        (WebCore::DrawGlyphsRecorder::DrawGlyphsRecorder):
        (WebCore::DrawGlyphsRecorder::drawGlyphs):
        * platform/graphics/win/DrawGlyphsRecorderWin.cpp:
        (WebCore::DrawGlyphsRecorder::DrawGlyphsRecorder):
        (WebCore::DrawGlyphsRecorder::drawGlyphs):

        * platform/graphics/GraphicsContext.h:
        (WebCore::GraphicsContext::drawGlyphsAndCacheFont): Added.
        * platform/graphics/displaylists/DisplayListRecorder.h:
        * platform/graphics/displaylists/DisplayListRecorder.cpp:
        (WebCore::DisplayList::Recorder::state const): Added.
        (WebCore::DisplayList::Recorder::drawGlyphsAndCacheFont): Renamed from `appendDrawGlyphsItemWithCachedFont`.
        AFAICT it seems like the `m_state` in `GraphicsContext` has the same values (but is a
        different object) as the `currentState().stateChange.m_state` in `DisplayList::Recorder`.
        Many of the non-overriden methods on `GraphicsContext` (e.g. `setStrokeColor`) both modify
        the `m_state` and call `updateState`, which `DisplayList::Recorder` uses to modify its
        `currentState().stateChange.m_state`. As such, we should be able to expose it as an override
        for the `state` "getter" so that `DrawGlyphsRecorder` is able to access the current state in
        a `GraphicsContext`-subclass agnostic way.

2021-09-29  Sihui Liu  <sihui_liu@apple.com>

        Replace FileSystemHandleImpl with FileSystemStorageConnection
        https://bugs.webkit.org/show_bug.cgi?id=230861
        <rdar://problem/83606465>

        Reviewed by Youenn Fablet.

        Introduce WorkerStorageConnection class, which dispatches StorageManager task to main-thread StorageConnection
        and dispatches result back to worker thread.

        Rebaselined existing test.

        * Headers.cmake:
        * Modules/filesystemaccess/FileSystemDirectoryHandle.cpp:
        (WebCore::FileSystemDirectoryHandle::create):
        (WebCore::FileSystemDirectoryHandle::FileSystemDirectoryHandle):
        (WebCore::FileSystemDirectoryHandle::getFileHandle):
        (WebCore::FileSystemDirectoryHandle::getDirectoryHandle):
        (WebCore::FileSystemDirectoryHandle::removeEntry):
        (WebCore::FileSystemDirectoryHandle::resolve):
        * Modules/filesystemaccess/FileSystemDirectoryHandle.h:
        * Modules/filesystemaccess/FileSystemFileHandle.cpp:
        (WebCore::FileSystemFileHandle::create):
        (WebCore::FileSystemFileHandle::FileSystemFileHandle):
        * Modules/filesystemaccess/FileSystemFileHandle.h:
        * Modules/filesystemaccess/FileSystemHandle.cpp:
        (WebCore::FileSystemHandle::FileSystemHandle):
        (WebCore::FileSystemHandle::isSameEntry const):
        * Modules/filesystemaccess/FileSystemHandle.h:
        (WebCore::FileSystemHandle::identifier const):
        (WebCore::FileSystemHandle::connection):
        (WebCore::FileSystemHandle::impl const): Deleted.
        * Modules/filesystemaccess/FileSystemHandleIdentifier.h: Renamed from Source/WebKit/NetworkProcess/storage/FileSystemStorageHandleIdentifier.h.
        * Modules/filesystemaccess/FileSystemStorageConnection.h: Renamed from Source/WebCore/Modules/filesystemaccess/FileSystemHandleImpl.h.
        (WebCore::FileSystemStorageConnection::~FileSystemStorageConnection):
        * Modules/storage/DummyStorageProvider.h:
        * Modules/storage/StorageConnection.h:
        * Modules/storage/StorageManager.cpp:
        (WebCore::StorageManager::fileSystemAccessGetDirectory):
        * Modules/storage/WorkerStorageConnection.cpp:
        * WebCore.xcodeproj/project.pbxproj:

2021-09-29  Aditya Keerthi  <akeerthi@apple.com>

        [css-ui] getComputedStyle() must return the specified value for '-webkit-appearance'
        https://bugs.webkit.org/show_bug.cgi?id=230916
        rdar://83640938

        Reviewed by Simon Fraser.

        Currently, an element's appearance can be adjusted to "none" depending
        on the applied CSS properties. For example, buttons that specify a
        background-color lose their native appearance. The existing behavior is
        implemented by modifying the appearance field on RenderStyle.

        While the spec allows certain properties to affect appearance, it
        also asserts that the computed value must be equal to the specific
        value [1]. However, since the specified and adjusted values are stored
        in the same field in RenderStyle, the computed value does not always
        equal the specified value.

        To fix, introduce an effectiveAppearance field to RenderStyle, which
        stores the used appearance. The specified appearance remains in the
        appearance field, ensuring the computed value adheres to the spec.

        The new behavior matches Chrome and Firefox. This work is also necessary
        for WebKit to support 'auto' as a valid appearance value, since the
        used value will need to be adjusted depending on the element type, but
        the computed value should remain 'auto'.

        [1] https://www.w3.org/TR/css-ui-4/#appearance-switching

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::boundingBoxForQuads):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isApplePayButton const):
        * accessibility/AccessibilitySlider.cpp:
        (WebCore::AccessibilitySlider::orientation const):
        * dom/Element.cpp:
        (WebCore::Element::setActive):
        (WebCore::Element::setHovered):
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::focusedOrActiveStateChanged):
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::disabledStateChanged):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setChecked):
        (WebCore::HTMLInputElement::setIndeterminate):
        * html/HTMLMeterElement.cpp:
        (WebCore::HTMLMeterElement::createElementRenderer):
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::parseAttribute):
        * html/HTMLProgressElement.cpp:
        (WebCore::HTMLProgressElement::createElementRenderer):
        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::handleKeydownEvent):
        * html/shadow/ProgressShadowElement.cpp:
        (WebCore::ProgressShadowElement::rendererIsNeeded):
        (WebCore::ProgressInnerElement::rendererIsNeeded):
        * html/shadow/SliderThumbElement.cpp:
        (WebCore::hasVerticalAppearance):
        (WebCore::RenderSliderThumb::updateAppearance):
        (WebCore::SliderThumbElement::resolveCustomStyle):
        (WebCore::SliderContainerElement::resolveCustomStyle):
        * html/shadow/TextControlInnerElements.cpp:
        (WebCore::SearchFieldResultsButtonElement::resolveCustomStyle):
        * rendering/RenderAttachment.cpp:
        (WebCore::RenderAttachment::shouldDrawBorder const):
        (WebCore::RenderAttachment::paintReplaced):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::addVisualOverflowFromTheme):
        (WebCore::RenderBlock::baselinePosition const):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::determineBackgroundBleedAvoidance const):
        (WebCore::RenderBox::paintBoxDecorations):
        (WebCore::RenderBox::backgroundIsKnownToBeOpaqueInRect const):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::hasVisibleBoxDecorationStyle const):
        (WebCore::RenderBoxModelObject::boxShadowShouldBeAppliedToBackground const):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateCustomAppearance):
        (WebCore::hasVisibleBoxDecorations):
        * rendering/RenderLayerScrollableArea.cpp:
        (WebCore::RenderLayerScrollableArea::updateScrollbarsAfterStyleChange):
        (WebCore::RenderLayerScrollableArea::updateScrollbarsAfterLayout):
        * rendering/RenderMenuList.cpp:
        (RenderMenuList::menuStyle const):
        (RenderMenuList::clientPaddingLeft const):
        (RenderMenuList::clientPaddingRight const):
        * rendering/RenderProgress.cpp:
        (WebCore::RenderProgress::updateAnimationState):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::adjustStyle):

        Ensure the specified value is not modified by adjusting the
        effectiveAppearance field instead of the appearance field.

        (WebCore::RenderTheme::adjustSearchFieldDecorationStyle const):
        (WebCore::RenderTheme::paint):
        (WebCore::RenderTheme::paintBorderOnly):
        (WebCore::RenderTheme::paintDecorations):
        (WebCore::RenderTheme::baselinePosition const):
        (WebCore::RenderTheme::isControlStyled const):
        (WebCore::RenderTheme::adjustRepaintRect):
        (WebCore::RenderTheme::supportsFocusRing const):
        (WebCore::RenderTheme::isDefault const):
        (WebCore::RenderTheme::paintSliderTicks):
        * rendering/RenderThemeAdwaita.cpp:
        (WebCore::RenderThemeAdwaita::supportsFocusRing const):
        (WebCore::RenderThemeAdwaita::popupInternalPaddingBox const):
        (WebCore::RenderThemeAdwaita::paintSliderTrack):
        (WebCore::RenderThemeAdwaita::adjustSliderThumbSize const):
        (WebCore::RenderThemeAdwaita::paintSliderThumb):
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::adjustedPaintRect const):
        (WebCore::RenderThemeIOS::baselinePosition const):
        (WebCore::RenderThemeIOS::isControlStyled const):
        (WebCore::RenderThemeIOS::popupInternalPaddingBox const):
        (WebCore::RenderThemeIOS::adjustRoundBorderRadius):
        (WebCore::RenderThemeIOS::paintSliderTrack):
        (WebCore::RenderThemeIOS::adjustSliderThumbSize const):
        (WebCore::RenderThemeIOS::adjustButtonStyle const):
        (WebCore::RenderThemeIOS::supportsBoxShadow const):
        (WebCore::RenderThemeIOS::paintSliderTicks):
        (WebCore::RenderThemeIOS::paintSliderTrackWithFormControlRefresh):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::isControlStyled const):
        (WebCore::RenderThemeMac::adjustRepaintRect):
        (WebCore::RenderThemeMac::controlSupportsTints const):
        (WebCore::RenderThemeMac::meterSizeForBounds const):
        (WebCore::RenderThemeMac::levelIndicatorFor const):
        (WebCore::RenderThemeMac::progressBarRectForBounds const):
        (WebCore::RenderThemeMac::popupInternalPaddingBox const):
        (WebCore::RenderThemeMac::paintSliderTrack):
        (WebCore::RenderThemeMac::paintSliderThumb):
        (WebCore::RenderThemeMac::adjustSliderThumbSize const):
        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::supportsFocusRing const):
        (WebCore::RenderThemeWin::determineClassicState):
        (WebCore::RenderThemeWin::determineState):
        (WebCore::RenderThemeWin::determineSliderThumbState):
        (WebCore::RenderThemeWin::determineButtonState):
        (WebCore::RenderThemeWin::getClassicThemeData):
        (WebCore::RenderThemeWin::getThemeData):
        (WebCore::drawControl):
        (WebCore::RenderThemeWin::paintSliderTrack):
        (WebCore::RenderThemeWin::adjustSliderThumbSize const):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::hashForTextAutosizing const):
        (WebCore::RenderStyle::equalForTextAutosizing const):
        (WebCore::rareNonInheritedDataChangeRequiresLayout):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::hasEffectiveAppearance const):
        (WebCore::RenderStyle::effectiveAppearance const):
        (WebCore::RenderStyle::setAppearance):
        (WebCore::RenderStyle::setEffectiveAppearance):
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator== const):
        * rendering/style/StyleRareNonInheritedData.h:
        * style/MatchedDeclarationsCache.cpp:
        (WebCore::Style::MatchedDeclarationsCache::isCacheable):
        * style/StyleAdjuster.cpp:
        (WebCore::Style::Adjuster::adjust const):
        * style/StyleTreeResolver.cpp:
        (WebCore::Style::TreeResolver::resolveElement):

2021-09-29  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] LineBoxBuilder should use the first-line style when applicable
        https://bugs.webkit.org/show_bug.cgi?id=230930

        Reviewed by Antti Koivisto.

        This is in preparation for supporting first-line style.

        * layout/formattingContexts/inline/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::lineLayout):
        (WebCore::Layout::InlineFormattingContext::computeGeometryForLineContent):
        * layout/formattingContexts/inline/InlineFormattingContext.h:
        * layout/formattingContexts/inline/InlineLineBoxBuilder.cpp:
        (WebCore::Layout::LineBoxBuilder::build):
        (WebCore::Layout::LineBoxBuilder::constructAndAlignInlineLevelBoxes):
        * layout/formattingContexts/inline/InlineLineBoxBuilder.h:

2021-09-29  Alan Bujtas  <zalan@apple.com>

        Thin hairline gap displayed for subpixel sized inset box-shadows
        https://bugs.webkit.org/show_bug.cgi?id=230814

        Reviewed by Simon Fraser.

        Add missing device pixel snapping for inset offset.

        Test: fast/box-shadow/hidpi-box-shadow-inset-on-subpixel-position.html

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintBoxShadow):

2021-09-29  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] InlineDisplayContentBuilder should use the first-line style when applicable
        https://bugs.webkit.org/show_bug.cgi?id=230932

        Reviewed by Antti Koivisto.

        This is in preparation for supporting first-line style.

        * layout/formattingContexts/inline/InlineDisplayContentBuilder.cpp:
        (WebCore::Layout::InlineDisplayContentBuilder::build):
        (WebCore::Layout::InlineDisplayContentBuilder::createBoxesAndUpdateGeometryForLineContent):
        (WebCore::Layout::InlineDisplayContentBuilder::createBoxesAndUpdateGeometryForLineSpanningInlineBoxes):

2021-09-29  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Pass in the first-line style to the InlineContentBreaker::ContinuousContent runs if applicable
        https://bugs.webkit.org/show_bug.cgi?id=230924

        Reviewed by Antti Koivisto.

        Now the inline content breaker has the correct set of style values when first-line style is set.

        * layout/formattingContexts/inline/InlineItem.h:
        (WebCore::Layout::InlineItem::firstLineStyle const):
        * layout/formattingContexts/inline/InlineLineBuilder.cpp:
        (WebCore::Layout::LineCandidate::InlineContent::appendInlineItem):
        (WebCore::Layout::LineBuilder::layoutInlineContent):
        (WebCore::Layout::LineBuilder::computedIntrinsicWidth):
        (WebCore::Layout::LineBuilder::initialize):
        (WebCore::Layout::LineBuilder::candidateContentForLine):
        * layout/formattingContexts/inline/InlineLineBuilder.h:

2021-09-29  Aditya Keerthi  <akeerthi@apple.com>

        Remove references to '-webkit-clear-button'
        https://bugs.webkit.org/show_bug.cgi?id=230971

        Reviewed by Simon Fraser.

        The pseudo-element was removed in r150876.

        * css/html.css:
        * css/parser/CSSSelectorParser.cpp:
        (WebCore::CSSSelectorParser::splitCompoundAtImplicitShadowCrossingCombinator):

        Updated comment to use a pseudo-element which exists.

2021-09-29  Kimmo Kinnunen  <kkinnunen@apple.com>

        MediaStream canvas.captureStream() fails for WebGL
        https://bugs.webkit.org/show_bug.cgi?id=230613
        <rdar://82307293>

        Reviewed by Youenn Fablet.

        Remove previous incorrect behavior of turning on "preservesDrawingBuffer"
        and sampling the drawing buffer. The drawing buffer is not what should
        ever be touched, rather it's the display buffer that should be available.

        Implement sampling of WebGL display buffer for
        media stream capture. The upon sampling, obtain a shared
        reference to the
        display buffer, passes it to media sample consuming process and mark
        the WebGL context display buffer non-eligible for recycling as
        new drawing buffer.

        Currently the implementation is displayed correctly for
        WebGL contents that is premultiplied. Unpremultiplied
        content is fixed in the associated bugs.

        Note: there are bugs preventing robust use of the API,
        listed in the associated bugs. As such, testing is not expanded
        in this bug.

        Tested by
        ManualTests/mediastream/mediastream-canvas-to-video.html (added)

        https://webrtc.github.io/samples/src/content/capture/canvas-video/
        (Refresh the page or hide the window until MediaPlayer initialization
        flakyness lets rendering happen)

        The test LayoutTests/fast/mediastream/captureStream/canvas3d.html
        cannot yet be used to test the implementation as the rest of the
        captureStream() and playback implementation is so flaky.

        * Modules/mediastream/CanvasCaptureMediaStreamTrack.cpp:
        (WebCore::CanvasCaptureMediaStreamTrack::Source::canvasChanged):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::toMediaSample):
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::paintCompositedResultsToMediaSample):
        * html/canvas/WebGLRenderingContextBase.h:
        (WebCore::WebGLRenderingContextBase::isPreservingDrawingBuffer const):
        * platform/graphics/GraphicsContextGL.cpp:
        * platform/graphics/GraphicsContextGL.h:
        * platform/graphics/RemoteGraphicsContextGLProxyBase.cpp:
        (WebCore::RemoteGraphicsContextGLProxyBase::paintCompositedResultsToMediaSample):
        * platform/graphics/RemoteGraphicsContextGLProxyBase.h:
        * platform/graphics/avfoundation/objc/MediaSampleAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaSampleAVFObjC.mm:
        (WebCore::MediaSampleAVFObjC::createImageSample):
        * platform/graphics/cocoa/GraphicsContextGLIOSurfaceSwapChain.cpp:
        (WebCore::GraphicsContextGLIOSurfaceSwapChain::present):
        * platform/graphics/cocoa/GraphicsContextGLIOSurfaceSwapChain.h:
        * platform/graphics/cocoa/GraphicsContextGLOpenGLCocoa.mm:
        (WebCore::GraphicsContextGLOpenGL::paintCompositedResultsToMediaSample):
        * platform/graphics/cocoa/RemoteGraphicsContextGLProxyBaseCocoa.mm:
        (WebCore::RemoteGraphicsContextGLProxyBase::paintCompositedResultsToMediaSample):
        * platform/graphics/opengl/GraphicsContextGLOpenGL.cpp:
        (WebCore::GraphicsContextGLOpenGL::paintCompositedResultsToMediaSample):
        * platform/graphics/opengl/GraphicsContextGLOpenGL.h:

2021-09-29  Jer Noble  <jer.noble@apple.com>

        Build-time optimization: forward declare more things in MediaPlayer.h and HTMLMediaElement.h
        https://bugs.webkit.org/show_bug.cgi?id=230853

        Reviewed by Eric Carlson.

        Forward-declare more things in MediaPlayer.h, and break apart *TrackPrivateClient into its
        own file, so that clients don't need to include the entire class's file. This requires
        other classes who got those includes "for free" previously to explicitly include headers in
        their source files.

        Drive-by fixes: Fixed a number of places where '0' was being used for 'null'.

        * Modules/encryptedmedia/legacy/LegacyCDMPrivateClearKey.cpp:
        * Modules/mediasource/MediaSource.cpp:
        * Modules/mediasource/SourceBuffer.cpp:
        * Modules/mediasource/SourceBuffer.h:
        * Modules/webaudio/ScriptProcessorNode.cpp:
        (WebCore::ScriptProcessorNode::initialize):
        * WebCore.xcodeproj/project.pbxproj:
        * animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFilterOperations):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeBasicShapeInset):
        (WebCore::consumeBorderImageSlice):
        (WebCore::consumeBorderImageOutset):
        * dom/Element.cpp:
        (WebCore::Element::getAttributeNodeNS):
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::addConsoleMessage):
        * dom/TextEvent.cpp:
        (WebCore::TextEvent::createForPlainTextPaste):
        * editing/InsertListCommand.cpp:
        (WebCore::InsertListCommand::listifyParagraph):
        * html/HTMLMediaElement.cpp:
        * html/HTMLMediaElement.h:
        * html/track/AudioTrack.cpp:
        (WebCore::AudioTrack::AudioTrack):
        (WebCore::AudioTrack::~AudioTrack):
        (WebCore::AudioTrack::setPrivate):
        * html/track/AudioTrack.h:
        (WebCore::AudioTrackClient::audioTrackEnabledChanged): Deleted.
        (WebCore::AudioTrackClient::audioTrackIdChanged): Deleted.
        (WebCore::AudioTrackClient::audioTrackKindChanged): Deleted.
        (WebCore::AudioTrackClient::audioTrackLabelChanged): Deleted.
        (WebCore::AudioTrackClient::audioTrackLanguageChanged): Deleted.
        (WebCore::AudioTrackClient::willRemoveAudioTrack): Deleted.
        * html/track/AudioTrackClient.h:
        (WebCore::AudioTrackClient::audioTrackEnabledChanged):
        (WebCore::AudioTrackClient::audioTrackIdChanged):
        (WebCore::AudioTrackClient::audioTrackKindChanged):
        (WebCore::AudioTrackClient::audioTrackLabelChanged):
        (WebCore::AudioTrackClient::audioTrackLanguageChanged):
        (WebCore::AudioTrackClient::willRemoveAudioTrack):
        * html/track/InbandTextTrack.cpp:
        (WebCore::InbandTextTrack::InbandTextTrack):
        (WebCore::InbandTextTrack::~InbandTextTrack):
        (WebCore::InbandTextTrack::setPrivate):
        * html/track/VideoTrack.cpp:
        (WebCore::VideoTrack::VideoTrack):
        (WebCore::VideoTrack::~VideoTrack):
        (WebCore::VideoTrack::setPrivate):
        * html/track/VideoTrack.h:
        (WebCore::VideoTrackClient::videoTrackIdChanged): Deleted.
        (WebCore::VideoTrackClient::videoTrackKindChanged): Deleted.
        (WebCore::VideoTrackClient::videoTrackLabelChanged): Deleted.
        (WebCore::VideoTrackClient::videoTrackLanguageChanged): Deleted.
        (WebCore::VideoTrackClient::videoTrackSelectedChanged): Deleted.
        (WebCore::VideoTrackClient::willRemoveVideoTrack): Deleted.
        * html/track/VideoTrack.idl:
        * html/track/VideoTrackClient.h:
        (WebCore::VideoTrackClient::videoTrackIdChanged):
        (WebCore::VideoTrackClient::videoTrackKindChanged):
        (WebCore::VideoTrackClient::videoTrackLabelChanged):
        (WebCore::VideoTrackClient::videoTrackLanguageChanged):
        (WebCore::VideoTrackClient::videoTrackSelectedChanged):
        (WebCore::VideoTrackClient::willRemoveVideoTrack):
        * page/PageConsoleClient.cpp:
        (WebCore::PageConsoleClient::addMessage):
        * platform/graphics/AudioTrackPrivate.h:
        (WebCore::AudioTrackPrivate::setClient):
        (WebCore::AudioTrackPrivate::clearClient):
        * platform/graphics/AudioTrackPrivateClient.h:
        * platform/graphics/InbandTextTrackPrivate.h:
        (WebCore::InbandTextTrackPrivate::setClient):
        (WebCore::InbandTextTrackPrivate::clearClient):
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::MediaPlayer):
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/SourceBufferPrivate.cpp:
        * platform/graphics/TrackPrivateBase.h:
        * platform/graphics/TrackPrivateBaseClient.h:
        * platform/graphics/VideoTrackPrivate.h:
        (WebCore::VideoTrackPrivate::setClient):
        (WebCore::VideoTrackPrivate::clearClient):
        * platform/graphics/VideoTrackPrivateClient.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.mm:
        * platform/graphics/cocoa/MediaEngineConfigurationFactoryCocoa.cpp:
        * platform/mock/mediasource/MockMediaSourcePrivate.h:
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::getReplacementTextGeometry const):
        * rendering/RenderSearchField.cpp:
        (WebCore::RenderSearchField::RenderSearchField):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::setFontFromControlSize const):
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLParserContext::createMemoryParser):

2021-09-29  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Layout::Box should be able to return the first-line style when applicable
        https://bugs.webkit.org/show_bug.cgi?id=230921

        Reviewed by Antti Koivisto.

        This is in preparation for supporting first-line style.

        * layout/integration/LayoutIntegrationBoxTree.cpp:
        (WebCore::LayoutIntegration::rootBoxFirstLineStyle):
        (WebCore::LayoutIntegration::BoxTree::BoxTree):
        (WebCore::LayoutIntegration::BoxTree::buildTree):
        (WebCore::LayoutIntegration::BoxTree::updateStyle):
        * layout/layouttree/LayoutBox.cpp:
        (WebCore::Layout::Box::Box): Use the rare data to store first-line style.
        (WebCore::Layout::Box::updateStyle):
        * layout/layouttree/LayoutBox.h:
        (WebCore::Layout::Box::firstLineStyle const):
        * layout/layouttree/LayoutContainerBox.cpp:
        (WebCore::Layout::ContainerBox::ContainerBox):
        * layout/layouttree/LayoutContainerBox.h:
        (WebCore::Layout::ContainerBox::ContainerBox):
        * layout/layouttree/LayoutInitialContainingBlock.cpp:
        (WebCore::Layout::InitialContainingBlock::InitialContainingBlock):
        * layout/layouttree/LayoutInitialContainingBlock.h:
        * layout/layouttree/LayoutInlineTextBox.cpp:
        (WebCore::Layout::InlineTextBox::InlineTextBox):
        * layout/layouttree/LayoutInlineTextBox.h:
        * layout/layouttree/LayoutLineBreakBox.cpp:
        (WebCore::Layout::LineBreakBox::LineBreakBox):
        * layout/layouttree/LayoutLineBreakBox.h:
        * layout/layouttree/LayoutReplacedBox.cpp:
        (WebCore::Layout::ReplacedBox::ReplacedBox):
        * layout/layouttree/LayoutReplacedBox.h:

2021-09-29  Alexey Shvayka  <shvaikalesh@gmail.com>

        [WebIDL] Align property order of DOM constructors with ECMA-262 counterparts
        https://bugs.webkit.org/show_bug.cgi?id=230584

        Reviewed by Alex Christensen.

        This patch implements spec proposal [1] on matching property order of DOM constructors
        with ECMA-262 functions: "length", "name", "prototype". Aligns WebKit with Blink and Gecko.
        Also, groups property puts to remove 2 extra `$interface->isNamespaceObject` checks.

        No behavior change except for enumeration order.

        [1] https://github.com/heycam/webidl/pull/914

        Tests: imported/w3c/web-platform-tests/WebIDL/ecmascript-binding/builtin-function-properties.any.html
               imported/w3c/web-platform-tests/WebIDL/ecmascript-binding/builtin-function-properties.any.worker.html

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateConstructorHelperMethods):
        * bindings/scripts/test/JS/*: Updated.

2021-09-29  Olivier Blin  <olivier.blin@softathome.com>

        Fix typo in RenderSVGBlock::updateFromStyle comment
        https://bugs.webkit.org/show_bug.cgi?id=230955

        Reviewed by Simon Fraser.

        No new tests, just a comment fix.

        * rendering/svg/RenderSVGBlock.cpp:
        (WebCore::RenderSVGBlock::updateFromStyle): refactor instead of reactor.


2021-09-29  Myles C. Maxfield  <mmaxfield@apple.com>

        Font palette names have to start with two hyphens
        https://bugs.webkit.org/show_bug.cgi?id=230790
        <rdar://problem/83530013>

        Reviewed by Dean Jackson.

        The spec changed in
        https://github.com/w3c/csswg-drafts/commit/9ddf9388a2fe0ac300c41b7244e10c0a40fe0cae.

        Font palettes now have to be named with a <dashed-ident>.

        Updated existing tests.

        * css/parser/CSSParserImpl.cpp:
        (WebCore::CSSParserImpl::consumeFontPaletteValuesRule):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeFontPalette):
        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::consumeDashedCustomIdent):
        * css/parser/CSSPropertyParserHelpers.h:

2021-09-29  Myles C. Maxfield  <mmaxfield@apple.com>

        CSSFontPaletteValuesRule should not be maplike
        https://bugs.webkit.org/show_bug.cgi?id=230793
        <rdar://problem/83530242>

        Reviewed by Wenson Hsieh.

        The spec changed in
        https://github.com/w3c/csswg-drafts/commit/c10855a2c65f51a09697613b977059fae78ff0bc
        from "maplike<unsigned long, CSSOMString>" to "attribute CSSOMString overrideColor".

        Tests: imported/w3c/web-platform-tests/css/css-fonts/parsing/font-palette-values-invalid.html
               imported/w3c/web-platform-tests/css/css-fonts/parsing/font-palette-values-valid.html

        * css/CSSFontPaletteValuesRule.cpp:
        (WebCore::CSSFontPaletteValuesRule::basePalette const):
        (WebCore::CSSFontPaletteValuesRule::overrideColor const):
        (WebCore::CSSFontPaletteValuesRule::cssText const):
        (WebCore::CSSFontPaletteValuesRule::initializeMapLike): Deleted.
        * css/CSSFontPaletteValuesRule.h:
        * css/CSSFontPaletteValuesRule.idl:

2021-09-29  Eric Carlson  <eric.carlson@apple.com>

        [Cocoa] Support in-band chapter tracks
        https://bugs.webkit.org/show_bug.cgi?id=230380
        <rdar://problem/83218578>

        Reviewed by Jer Noble.
        
        Create a text track for every non-empty AVAssetChapterMetadataGroup, and create
        a VTT cue for every chapter.

        Test: media/track/track-in-band-chapters.html

        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/InbandTextTrackPrivate.h:
        (WebCore::InbandTextTrackPrivate::setClient):
        (WebCore::InbandTextTrackPrivate::cueFormat const):
        * platform/graphics/avfoundation/objc/InbandChapterTrackPrivateAVFObjC.h: Added.
        (WebCore::InbandChapterTrackPrivateAVFObjC::create):
        (WebCore::InbandChapterTrackPrivateAVFObjC::setTextTrackIndex):
        (WebCore::InbandChapterTrackPrivateAVFObjC::ChapterData::operator== const):
        * platform/graphics/avfoundation/objc/InbandChapterTrackPrivateAVFObjC.mm: Added.
        (WebCore::InbandChapterTrackPrivateAVFObjC::InbandChapterTrackPrivateAVFObjC):
        (WebCore::InbandChapterTrackPrivateAVFObjC::processChapters):
        (WebCore::InbandChapterTrackPrivateAVFObjC::language const):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::cancelLoad):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVAssetForURL):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setAsset):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::metadataLoaded):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::processChapterTracks):
        (WebCore::assetMetadataKeyNames):
        (-[WebCoreAVFMovieObserver chapterMetadataDidChange:]):
        * platform/graphics/iso/ISOVTTCue.cpp:
        (WebCore::ISOWebVTTCue::ISOWebVTTCue):
        * platform/graphics/iso/ISOVTTCue.h:

2021-09-29  Antti Koivisto  <antti@apple.com>

        [CSS Cascade Layers] Add fonts and keyframes in cascade layer order
        https://bugs.webkit.org/show_bug.cgi?id=230947

        Reviewed by Simon Fraser.

        Ensure font and keyframe rules respect cascade layer ordering.

        * style/RuleSet.cpp:
        (WebCore::Style::RuleSet::Builder::addChildRules):

        Collect resolver mutating rules instead of processing them immediately.

        (WebCore::Style::RuleSet::Builder::~Builder):
        (WebCore::Style::RuleSet::Builder::addMutatingRulesToResolver):

        Process the rules in correct order after cascade layer order has been established.

        In additive case we need to also re-process rules added from earlier stylesheets as they might
        have higher priority than the newly added ones.

        (WebCore::Style::RuleSet::shrinkToFit):
        * style/RuleSet.h:
        (WebCore::Style::RuleSet::cascadeLayerOrderForIdentifier const):
        (WebCore::Style::RuleSet::cascadeLayerOrderFor const):

2021-09-28  Myles C. Maxfield  <mmaxfield@apple.com>

        Factor out rare members of FontCreationContext into FontCreationContextRareData
        https://bugs.webkit.org/show_bug.cgi?id=230800
        <rdar://problem/83538227>

        Reviewed by Alan Bujtas.

        FontCreationContext is used inside HashMap keys in font caches, so we want the type to be
        small. Palettes and font features are rare, so we can move those into a heap-allocated
        rare data object, thereby decreasing the size of FontCreationContext for most fonts.
        Importantly, if palettes and font features aren't used, the RefPtr will just be null, and
        no allocation is performed.

        No new tests because there is no behavior change.

        * css/CSSFontFace.h:
        * css/CSSFontFaceSource.h:
        * css/CSSSegmentedFontFace.h:
        * loader/FontLoadRequest.h:
        * loader/cache/CachedFont.h:
        * loader/cache/CachedFontLoadRequest.h:
        * loader/cache/CachedSVGFont.h:
        * platform/graphics/FontCreationContext.h:
        (WebCore::FontCreationContextRareData::create):
        (WebCore::FontCreationContextRareData::fontFaceFeatures const):
        (WebCore::FontCreationContextRareData::fontPaletteValues const):
        (WebCore::FontCreationContextRareData::operator== const):
        (WebCore::FontCreationContextRareData::operator!= const):
        (WebCore::FontCreationContextRareData::FontCreationContextRareData):
        (WebCore::FontCreationContext::FontCreationContext):
        (WebCore::FontCreationContext::fontFaceFeatures const):
        (WebCore::FontCreationContext::fontFaceCapabilities const):
        (WebCore::FontCreationContext::fontPaletteValues const):
        (WebCore::FontCreationContext::operator== const):
        (WebCore::add):
        * platform/graphics/FontPaletteValues.h:
        (WebCore::FontPaletteValues::operator bool const):
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::addAttributesForFontPalettes):
        (WebCore::preparePlatformFont):
        * platform/graphics/cocoa/FontCacheCoreText.h:
        * platform/graphics/freetype/FontCacheFreeType.cpp:
        * platform/graphics/freetype/FontCustomPlatformDataFreeType.cpp:
        * platform/graphics/mac/FontCustomPlatformData.h:
        * workers/WorkerFontLoadRequest.h:

2021-09-28  Takashi Komori  <Takashi.Komori@sony.com>

        [Curl] Set CURL_LOCK_DATA_SSL_SESSION option to reduce SSL/TLS handshake time
        https://bugs.webkit.org/show_bug.cgi?id=230818

        Reviewed by Fujii Hironori.

        Set CURL_LOCK_DATA_SSL_SESSION option to reuse Session ID.
        It reduces SSL/TLS handshake time.

        Covered by existing tests.

        * platform/network/curl/CurlContext.cpp:
        (WebCore::CurlShareHandle::CurlShareHandle):
        (WebCore::CurlShareHandle::mutexFor):

2021-09-28  Devin Rousso  <drousso@apple.com>

        Move `DrawGlyphsRecorder` outside of `DisplayList`
        https://bugs.webkit.org/show_bug.cgi?id=230912

        Reviewed by Myles Maxfield.

        There's really nothing about `DrawGlyphsRecorder` that's specific to display lists other
        than it's currently only being used by `DisplayList::Recorder`.

        This patch moves `DrawGlyphsRecorder` outside of `namespace DisplayList` (and the related
        folder in the source tree). The next patch (<https://webkit.org/b/230913>) will generalize
        it to allow any `GraphicsContext` instead of just `DisplayList::Recorder`. This is being
        done to make `<attachment>` drawing work in the GPUProcess (<https://webkit.org/b/230781>).

        * platform/graphics/DrawGlyphsRecorder.h: Renamed from Source/WebCore/platform/graphics/displaylists/DisplayListDrawGlyphsRecorder.h.
        * platform/graphics/coretext/DrawGlyphsRecorderCoreText.cpp: Renamed from Source/WebCore/platform/graphics/displaylists/DisplayListDrawGlyphsRecorderCoreText.cpp.
        * platform/graphics/harfbuzz/DrawGlyphsRecorderHarfBuzz.cpp: Renamed from Source/WebCore/platform/graphics/displaylists/DisplayListDrawGlyphsRecorderHarfBuzz.cpp.
        * platform/graphics/win/DrawGlyphsRecorderWin.cpp: Renamed from Source/WebCore/platform/graphics/displaylists/DisplayListDrawGlyphsRecorderWin.cpp.

        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::displayListForTextRun const):
        * platform/graphics/displaylists/DisplayListRecorder.h:

        * Headers.cmake:
        * PlatformAppleWin.cmake:
        * PlatformWinCairo.cmake:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/FreeType.cmake:

2021-09-28  Myles C. Maxfield  <mmaxfield@apple.com>

        Negative integers in @font-palette-values are invalid
        https://bugs.webkit.org/show_bug.cgi?id=230788

        Reviewed by Simon Fraser.
        <rdar://problem/83528806>

        Addressing post-commit review.

        No new tests because there is no behavior change.

        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::addAttributesForFontPalettes):

2021-09-28  Cameron McCormack  <heycam@apple.com>

        Preserve color space when structured cloning ImageBitmaps
        https://bugs.webkit.org/show_bug.cgi?id=230429
        <rdar://problem/83293533>

        Reviewed by Sam Weinig.

        The logic for serializing the CGColorSpace is copied and adapted from
        the ArgumentCoder<CGColorSpaceRef> specialization, which we cannot
        easily re-use.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::dumpImageBitmap):
        (WebCore::CloneSerializer::write):
        (WebCore::CloneDeserializer::read):
        (WebCore::CloneDeserializer::readImageBitmap):

2021-09-28  Kate Cheney  <katherine_cheney@apple.com>

        CSP: Implement 'strict-dynamic' source expression
        https://bugs.webkit.org/show_bug.cgi?id=184031
        <rdar://problem/38900632>

        Reviewed by Brent Fulgham.

        Partially implements 'strict-dynamic' CSP source expression. strict-dynamic
        allows scripts with specified nonces and hashes to run, as well as
        descendents of those scripts, or "non parser inserted" scripts.
        It ignores unsafe-inline and self source expressions.

        This patch creates a new algorithm ContentSecurityPolicy::allScriptPoliciesAllow
        which makes sure each loaded script is allowed by some part of the
        policy. If it violates each of the script policies, then we block it
        and report a violation.

        We only have access to whether a script is parser-inserted in ScriptElement.
        To avoid having to pass that value and the script nonce through a lot of
        places, we check for script violations in
        ScriptElement::requestClassicScript. To avoid unnecessarily blocking
        scripts with correct nonces or non-parser inserted scripts in
        ContentSecurityPolicy::allowScriptFromSource which is called later on,
        we skip the extra check if strictDynamic is enabled. This is not
        ideal and in the future we should figure out a way to put all checks
        in one place. 

        * dom/ScriptElement.cpp:
        Update m_parserInserted to be an enum.

        (WebCore::ScriptElement::ScriptElement):
        (WebCore::ScriptElement::didFinishInsertingNode):
        (WebCore::ScriptElement::childrenChanged):
        (WebCore::ScriptElement::prepareScript):
        (WebCore::ScriptElement::requestClassicScript):
        (WebCore::ScriptElement::executeClassicScript):
        strict-dynamic checks happen here.

        (WebCore::ScriptElement::ignoresLoadRequest const):
        * dom/ScriptElement.h:
        (WebCore::ScriptElement::isParserInserted const):
        (WebCore::ScriptElement::insertedIntoAncestor const):
        * page/csp/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::allScriptPoliciesAllow const):
        Algorithm to check for policy violations. Here we check if the script
        is non-parser inserted AND it does not have a recognized nonce or hash 
        AND it is not listed in the URL list of the policy. If it fails all
        checks then the policy does not support it and we refuse to load it.

        (WebCore::ContentSecurityPolicy::allowJavaScriptURLs const):
        (WebCore::ContentSecurityPolicy::shouldPerformEarlyCSPCheck const):
        (WebCore::ContentSecurityPolicy::allowNonParserInsertedScripts const):
        (WebCore::ContentSecurityPolicy::allowInlineScript const):
        To avoid blocking scripts that are OK with strict-dynamic, we should
        skip unsafe-inline checks (which should be ignored per the spec).

        (WebCore::ContentSecurityPolicy::allowScriptFromSource const):
        (WebCore::ContentSecurityPolicy::reportViolation const):
        * page/csp/ContentSecurityPolicy.h:
        * page/csp/ContentSecurityPolicyDirectiveList.cpp:
        (WebCore::checkNonParserInsertedScripts):
        (WebCore::ContentSecurityPolicyDirectiveList::violatedDirectiveForParserInsertedScript const):
        (WebCore::ContentSecurityPolicyDirectiveList::strictDynamicIncluded):
        A separate function to tell us if strict-dynamic is included in the
        CSP policies.

        * page/csp/ContentSecurityPolicyDirectiveList.h:
        * page/csp/ContentSecurityPolicyDirectiveNames.cpp:
        * page/csp/ContentSecurityPolicyDirectiveNames.h:
        * page/csp/ContentSecurityPolicySourceList.cpp:
        (WebCore::ContentSecurityPolicySourceList::matches const):
        (WebCore::ContentSecurityPolicySourceList::parseSource):
        Ignore 'self' and 'unsafe-inline' directives if 'strict-dynamic' is
        specified.

        * page/csp/ContentSecurityPolicySourceList.h:
        (WebCore::ContentSecurityPolicySourceList::allowNonParserInsertedScripts const):
        * page/csp/ContentSecurityPolicySourceListDirective.h:
        (WebCore::ContentSecurityPolicySourceListDirective::allowNonParserInsertedScripts const):

2021-09-28  Myles C. Maxfield  <mmaxfield@apple.com>

        Negative integers in @font-palette-values are invalid
        https://bugs.webkit.org/show_bug.cgi?id=230788
        <rdar://problem/83528806>

        Reviewed by Simon Fraser.

        The spec made it illegal in
        https://github.com/w3c/csswg-drafts/commit/09b3c45238feb6c0e8526e010cd3780f4fc4900b.

        Test: web-platform-tests/css/css-fonts/parsing/font-palette-values-invalid.html

        * css/CSSFontPaletteValuesRule.cpp:
        (WebCore::CSSFontPaletteValuesRule::basePalette const):
        (WebCore::CSSFontPaletteValuesRule::initializeMapLike):
        (WebCore::CSSFontPaletteValuesRule::cssText const):
        * css/parser/CSSParserImpl.cpp:
        (WebCore::CSSParserImpl::consumeFontPaletteValuesRule):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeBasePaletteDescriptor):
        (WebCore::consumeOverrideColorDescriptor):
        * platform/graphics/FontPaletteValues.h:
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::addAttributesForFontPalettes):

2021-09-28  Youenn Fablet  <youenn@apple.com>

        [BigSur wk2 Debug iOS14 ] webrtc/video-mute.html is a flaky failure
        https://bugs.webkit.org/show_bug.cgi?id=230865
        <rdar://problem/83594770>

        Reviewed by Eric Carlson.

        Covered by webrtc/video-mute.html being no longer flaky.

        * Modules/mediastream/libwebrtc/LibWebRTCIceTransportBackend.cpp:
        (WebCore::LibWebRTCIceTransportBackendObserver::start):

2021-09-28  Sihui Liu  <sihui_liu@apple.com>

        Make StorageManager available in Worker
        https://bugs.webkit.org/show_bug.cgi?id=230675
        <rdar://problem/83448115>

        Reviewed by Youenn Fablet.

        Introduce WorkerStorageConnection class, which dispatches StorageManager task to main-thread StorageConnection
        and dispatches result back to worker thread.

        Rebaselined existing test.

        * Modules/storage/DummyStorageProvider.h:
        * Modules/storage/StorageConnection.h:
        (WebCore::StorageConnection::persist):
        * Modules/storage/StorageManager.cpp:
        (WebCore::connectionInfo):
        * Modules/storage/WorkerStorageConnection.cpp: Added.
        (WebCore::WorkerStorageConnection::create):
        (WebCore::WorkerStorageConnection::WorkerStorageConnection):
        (WebCore::WorkerStorageConnection::scopeClosed):
        (WebCore::WorkerStorageConnection::getPersisted):
        (WebCore::WorkerStorageConnection::didGetPersisted):
        (WebCore::WorkerStorageConnection::fileSystemGetDirectory):
        * Modules/storage/WorkerStorageConnection.h: Copied from Source/WebCore/Modules/storage/StorageConnection.h.
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.h:
        * dom/ScriptExecutionContext.h:
        (WebCore::ScriptExecutionContext::permissionController):
        (WebCore::ScriptExecutionContext::storageConnection): Deleted.
        * page/NavigatorStorage.idl:
        * page/WorkerNavigator.idl:
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::prepareForDestruction):
        (WebCore::WorkerGlobalScope::storageConnection):
        * workers/WorkerGlobalScope.h:
        * workers/WorkerLoaderProxy.h:
        (WebCore::WorkerLoaderProxy::storageConnection):
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::storageConnection):
        * workers/WorkerMessagingProxy.h:

2021-09-28  Chris Dumez  <cdumez@apple.com>

        Move Cross-Origin-Opener-Policy handling to the NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=230812
        <rdar://83504842>

        Reviewed by Youenn Fablet.

        Previous, COOP handling was fully implemented in the WebContent process. This meant that a
        WebProcess for origin A could get a network response with COOP header from origin B, decide
        that cross-origin isolation is needed and ask the UIProcess to process-swap. This was not a
        good design given that the WebContent process is not a trusted process. We should not trust
        the WebProcess for origin A to make the swap on behavior of origin B. Also, the network
        response from origin B may contain sensitive headers that we don't want origin A's WebProcess
        to see.

        To address these issues, I have moved COOP handling from the WebContent process to the
        NetworkProcess. As soon as the NetworkProcess gets the network response, it makes the decision
        whether or not cross-origin isolation is needed. If isolation is needed, the network process
        asks the UIProcess directly to continue the load in a new WebProcess instead of sending the
        network response to the currently associated WebProcess. When the new WebProcess resumes the
        load, the network process sends it the network response it already has.

        I moved most of the COOP specification implementation from DocumentLoader.cpp/h to
        CrossOriginOpenerPolicy.cpp/h so that we can leverage it from the NetworkResourceLoader in
        the network process. We still have to do *some* COOP handling at DocumentLoader level
        currently for non-initial navigations to about:blank given that those can trigger a browsing
        context group switch but currently do not involve the network process. I also had to add
        more information to NetworkResourceLoadParameters so that we are able to make appropriate
        COOP decisions in the NetworkProcess.

        No new tests, covered by existing COOP tests that are still passing.

        * Headers.cmake:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.h:

        * loader/CrossOriginOpenerPolicy.cpp:
        (WebCore::checkIfCOOPValuesRequireBrowsingContextGroupSwitch):
        (WebCore::checkIfEnforcingReportOnlyCOOPWouldRequireBrowsingContextGroupSwitch):
        (WebCore::computeResponseOriginAndCOOP):
        (WebCore::enforceResponseCrossOriginOpenerPolicy):
        (WebCore::obtainCrossOriginOpenerPolicy):
        (WebCore::sendViolationReportWhenNavigatingToCOOPResponse):
        (WebCore::sendViolationReportWhenNavigatingAwayFromCOOPResponse):
        (WebCore::doCrossOriginOpenerHandlingOfResponse):
        (WebCore::CrossOriginOpenerPolicyEnforcementResult::from):
        * loader/CrossOriginOpenerPolicy.h:
        (WebCore::CrossOriginOpenerPolicy::reportingEndpointForDisposition const):
        (WebCore::CrossOriginOpenerPolicy::hasReportingEndpoint const):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::willSendRequest):
        (WebCore::DocumentLoader::doCrossOriginOpenerHandlingOfResponse):
        (WebCore::DocumentLoader::responseReceived):
        (WebCore::DocumentLoader::maybeLoadEmpty):
        (WebCore::DocumentLoader::clearMainResource):
        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::crossOriginOpenerPolicy const):
        (WebCore::DocumentLoader::isContinuingLoadAfterProvisionalLoadStarted const):
        (WebCore::DocumentLoader::setIsContinuingLoadAfterProvisionalLoadStarted):
        Move most of the COOP logic from DocumentLoader.cpp to CrossOriginOpenerPolicy.cpp, so that
        it can be reused by NetworkResourceLoader in the network process.

        * loader/EmptyClients.cpp:
        (WebCore::EmptyFrameLoaderClient::dispatchDecidePolicyForResponse):
        * loader/EmptyFrameLoaderClient.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::checkContentPolicy):
        (WebCore::FrameLoader::load):
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:

        * loader/NavigationAction.cpp:
        (WebCore::NavigationAction::NavigationAction):
        * loader/NavigationAction.h:
        (WebCore::NavigationAction::requester const):
        (WebCore::NavigationAction::isEmpty const):
        * loader/NavigationRequester.cpp: Added.
        * loader/NavigationRequester.h: Added.
        Extracted NavigationAction::Requester to its own header and rename it to NavigationRequester,
        so that its implementation can be shared between NavigationAction, NetworkResourceLoadParameters
        and COOP.

        * loader/ReportingEndpointsCache.cpp:
        (WebCore::ReportingEndpointsCache::addEndPointsFromResponse):
        (WebCore::ReportingEndpointsCache::addEndPointsFromReportToHeader):
        * loader/ReportingEndpointsCache.h:
        * loader/ShouldTreatAsContinuingLoad.h:
        * page/Page.h:

2021-09-28  Alicia Boya García  <aboya@igalia.com>

        [MSE][GStreamer] Don't create MediaSourceTrackGStreamer objects twice for the same track
        https://bugs.webkit.org/show_bug.cgi?id=230829

        Reviewed by Xabier Rodriguez-Calvar.

        The existing code in
        SourceBufferPrivateGStreamer::didReceiveInitializationSegment()
        was not checking if the track already existing, creating and
        immediately destroying a MediaSourceTrackGStreamer, which then crashed
        on an assertion (ASSERTION FAILED: m_isRemoved).

        This fixes the following two tests which were crashing with the former
        assertion when running in Debug:

        - media/media-source/media-mp4-h264-partial-abort.html
        - media/media-source/media-source-abort-resets-parser.html

        * platform/graphics/gstreamer/mse/SourceBufferPrivateGStreamer.cpp:
        (WebCore::SourceBufferPrivateGStreamer::didReceiveInitializationSegment):

2021-09-28  Alex Christensen  <achristensen@webkit.org>

        Mostly fix Mac CMake build
        https://bugs.webkit.org/show_bug.cgi?id=230868

        Reviewed by Don Olmstead.

        * PlatformMac.cmake:
        * platform/graphics/cg/ImageBufferUtilitiesCG.cpp:
        (WebCore::encode):

2021-09-28  Alex Christensen  <achristensen@webkit.org>

        Fix build with non-internal Monterey SDK
        https://bugs.webkit.org/show_bug.cgi?id=230872

        Reviewed by Jonathan Bedard.

        * platform/mac/PlatformSpeechSynthesizerMac.mm:
        (WebCore::speechSynthesisGetDefaultVoiceIdentifierForLocale):

2021-09-28  Antti Koivisto  <antti@apple.com>

        [CSS Cascade Layers] Add CSSOM interface
        https://bugs.webkit.org/show_bug.cgi?id=230882

        Reviewed by Simon Fraser.

        Add a minimal CSSLayerRule interface. This is yet unspecified (https://github.com/w3c/csswg-drafts/issues/6576)
        but the final version likely won't differ much or at all. This also matches Firefox.

        This makes parsing and serialization WPT tests work.

        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSLayerRule.cpp: Added.
        (WebCore::CSSLayerRule::CSSLayerRule):
        (WebCore::CSSLayerRule::create):
        (WebCore::CSSLayerRule::cssText const):

        The only available functionality is getting the cssText.

        * css/CSSLayerRule.h: Added.
        * css/CSSLayerRule.idl: Added.
        * css/CSSRule.h:
        * css/StyleRule.cpp:
        (WebCore::StyleRuleBase::createCSSOMWrapper const):

        Make the wrapper.

        * css/StyleRuleType.h:

        Update the type constant to match Firefox (this is not specified).

        * css/StyleSheetContents.cpp:
        (WebCore::StyleSheetContents::wrapperInsertRule):

        Remember the return after succesful insert.

2021-09-28  Fujii Hironori  <Hironori.Fujii@sony.com>

        Unreviewed, reverting r283136.

        An assertion failure for WinCairo Debug

        Reverted changeset:

        "[Curl] Set CURL_LOCK_DATA_SSL_SESSION option to reduce
        SSL/TLS handshake time"
        https://bugs.webkit.org/show_bug.cgi?id=230818
        https://commits.webkit.org/r283136

2021-09-28  Antti Koivisto  <antti@apple.com>

        REGRESSION(r283158): TestWebKitAPI.WebKit.AddAndRemoveDataDetectors is crashing on iOS
        https://bugs.webkit.org/show_bug.cgi?id=230890

        Unreviewed.

        * editing/cocoa/DataDetection.mm:
        (WebCore::DataDetection::detectContentInRange):

        Scope TextIterator so it is not in stack when DOM is being mutated.

2021-09-27  Myles C. Maxfield  <mmaxfield@apple.com>

        override-color has been renamed to override-colors
        https://bugs.webkit.org/show_bug.cgi?id=230789
        <rdar://problem/83529354>

        Reviewed by Devin Rousso.

        The spec was changed in
        https://github.com/w3c/csswg-drafts/commit/9de250d6692d07ddb8af3e3face37b909e5aad7b.
        No browser has shipped the old name, so this is just a mechanical find/replace.

        Updated existing tests.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::valueForPropertyInStyle):
        * css/CSSFontPaletteValuesOverrideColorsValue.cpp: Renamed from Source/WebCore/css/CSSFontPaletteValuesOverrideColorValue.cpp.
        (WebCore::CSSFontPaletteValuesOverrideColorsValue::customCSSText const):
        (WebCore::CSSFontPaletteValuesOverrideColorsValue::equals const):
        * css/CSSFontPaletteValuesOverrideColorsValue.h: Renamed from Source/WebCore/css/CSSFontPaletteValuesOverrideColorValue.h.
        * css/CSSFontPaletteValuesRule.cpp:
        (WebCore::CSSFontPaletteValuesRule::initializeMapLike):
        (WebCore::CSSFontPaletteValuesRule::cssText const):
        * css/CSSProperties.json:
        * css/CSSValue.cpp:
        (WebCore::CSSValue::equals const):
        (WebCore::CSSValue::cssText const):
        (WebCore::CSSValue::destroy):
        * css/CSSValue.h:
        (WebCore::CSSValue::isFontPaletteValuesOverrideColorsValue const):
        (WebCore::CSSValue::isFontPaletteValuesOverrideColorValue const): Deleted.
        * css/StyleRule.cpp:
        (WebCore::StyleRuleFontPaletteValues::StyleRuleFontPaletteValues):
        * css/StyleRule.h:
        * css/parser/CSSParserImpl.cpp:
        (WebCore::CSSParserImpl::consumeFontPaletteValuesRule):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeOverrideColorsDescriptor):
        (WebCore::CSSPropertyParser::parseFontPaletteValuesDescriptor):
        (WebCore::consumeOverrideColorDescriptor): Deleted.
        * platform/graphics/FontPaletteValues.h:
        (WebCore::FontPaletteValues::FontPaletteValues):
        (WebCore::FontPaletteValues::overrideColors const):
        (WebCore::FontPaletteValues::operator== const):
        (WebCore::add):
        (WebCore::FontPaletteValues::overrideColor const): Deleted.
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::addAttributesForFontPalettes):

2021-09-27  Antti Koivisto  <antti@apple.com>

        [LFC] Use CheckedRef/Ptr instead of WeakPtr
        https://bugs.webkit.org/show_bug.cgi?id=230821

        Reviewed by Alan Bujtas.

        WeakPtrs are used for layout boxes for safety only. Replace with simpler, faster CheckedPtr.

        * display/DisplayTreeBuilder.cpp:
        (WebCore::Display::TreeBuilder::build):
        * editing/TextManipulationController.cpp:
        (WebCore::TextManipulationController::replace):

        This was leaving a text iterator in stack while mutating the render tree.

        * layout/FormattingState.h:
        (WebCore::Layout::FormattingState::addOutOfFlowBox):
        * layout/LayoutState.cpp:
        (WebCore::Layout::LayoutState::LayoutState):
        (WebCore::Layout::LayoutState::formattingStateForFormattingContext const):
        (WebCore::Layout::LayoutState::formattingStateForInlineFormattingContext const):
        (WebCore::Layout::LayoutState::ensureInlineFormattingState):
        * layout/LayoutState.h:
        (WebCore::Layout::LayoutState::root const):
        (WebCore::Layout::LayoutState::hasRoot const): Deleted.
        * layout/floats/FloatAvoider.h:
        * layout/floats/FloatingState.cpp:
        (WebCore::Layout::FloatingState::FloatItem::FloatItem):
        (WebCore::Layout::FloatingState::FloatingState):
        * layout/floats/FloatingState.h:
        (WebCore::Layout::FloatingState::root const):
        * layout/formattingContexts/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::FormattingContext):
        (WebCore::Layout::FormattingContext::layoutOutOfFlowContent):
        * layout/formattingContexts/FormattingContext.h:
        (WebCore::Layout::FormattingContext::root const):
        * layout/formattingContexts/block/BlockFormattingState.h:
        * layout/formattingContexts/inline/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::computeStaticPositionForOutOfFlowContent):
        * layout/formattingContexts/inline/InlineLevelBox.h:
        (WebCore::Layout::InlineLevelBox::layoutBox const):
        (WebCore::Layout::InlineLevelBox::InlineLevelBox):
        * layout/formattingContexts/inline/InlineLineBox.h:
        * layout/formattingContexts/inline/display/InlineDisplayBox.h:
        (WebCore::InlineDisplay::Box::layoutBox const):
        (WebCore::InlineDisplay::Box::Box):
        * layout/formattingContexts/table/TableGrid.cpp:
        (WebCore::Layout::TableGrid::Column::Column):
        (WebCore::Layout::TableGrid::Row::Row):
        (WebCore::Layout::TableGrid::Cell::Cell):
        * layout/formattingContexts/table/TableGrid.h:
        (WebCore::Layout::TableGrid::Row::box const):
        * layout/integration/LayoutIntegrationBoxTree.cpp:
        (WebCore::LayoutIntegration::BoxTree::buildTree):
        (WebCore::LayoutIntegration::BoxTree::appendChild):
        (WebCore::LayoutIntegration::BoxTree::layoutBoxForRenderer):
        (WebCore::LayoutIntegration::BoxTree::rendererForLayoutBox):
        * layout/integration/LayoutIntegrationBoxTree.h:
        * layout/integration/LayoutIntegrationInlineContent.cpp:
        (WebCore::LayoutIntegration::InlineContent::InlineContent):
        (WebCore::LayoutIntegration::InlineContent::rendererForLayoutBox const):
        (WebCore::LayoutIntegration::InlineContent::containingBlock const):
        (WebCore::LayoutIntegration::InlineContent::lineLayout const): Deleted.
        * layout/integration/LayoutIntegrationInlineContent.h:
        (WebCore::LayoutIntegration::InlineContent::lineLayout const):
        * layout/integration/LayoutIntegrationLineLayout.cpp:
        (WebCore::LayoutIntegration::LineLayout::constructContent):
        * layout/integration/LayoutIntegrationLineLayout.h:
        * layout/layouttree/LayoutBox.cpp:
        (WebCore::Layout::Box::setCachedGeometryForLayoutState const):
        * layout/layouttree/LayoutBox.h:
        * layout/layouttree/LayoutReplacedBox.h:
        * layout/layouttree/LayoutTreeBuilder.h:

2021-09-27  Myles C. Maxfield  <mmaxfield@apple.com>

        Add support for CSSFontPaletteValuesRule.name
        https://bugs.webkit.org/show_bug.cgi?id=230787
        <rdar://problem/83528540>

        Reviewed by Tim Horton.

        This was added to the CSS spec in
        https://github.com/w3c/csswg-drafts/commit/8868476c571d63b7f3f2718e22601a711a2d8683.

        Test: web-platform-tests/css/css-fonts/parsing/font-palette-values-valid.html

        * css/CSSFontPaletteValuesRule.cpp:
        (WebCore::CSSFontPaletteValuesRule::name const):
        * css/CSSFontPaletteValuesRule.h:
        * css/CSSFontPaletteValuesRule.idl:

2021-09-27  Takashi Komori  <Takashi.Komori@sony.com>

        [Curl] Set CURL_LOCK_DATA_SSL_SESSION option to reduce SSL/TLS handshake time
        https://bugs.webkit.org/show_bug.cgi?id=230818

        Reviewed by Fujii Hironori.

        Set CURL_LOCK_DATA_SSL_SESSION option to reuse Session ID.
        It reduces SSL/TLS handshake time.

        Covered by existing tests.

        * platform/network/curl/CurlContext.cpp:
        (WebCore::CurlShareHandle::CurlShareHandle):

2021-09-27  Tim Nguyen  <ntim@apple.com>

        Rename Style::queuePostResolutionCallback to Style::deprecatedQueuePostResolutionCallback
        https://bugs.webkit.org/show_bug.cgi?id=230851

        Reviewed by Simon Fraser.

        The HTML5 event loop should be used instead.
        Also fix pre-existing webkit-style errors.

        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::didAttachRenderers):
        (WebCore::HTMLFormControlElement::didRecalcStyle):
        * html/HTMLFrameOwnerElement.cpp:
        (WebCore::HTMLFrameOwnerElement::scheduleInvalidateStyleAndLayerComposition):
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::scheduleUpdateForAfterStyleResolution):
        * style/StyleTreeResolver.cpp:
        (WebCore::Style::deprecatedQueuePostResolutionCallback):
        (WebCore::Style::queuePostResolutionCallback): Deleted.
        * style/StyleTreeResolver.h:

2021-09-27  Myles C. Maxfield  <mmaxfield@apple.com>

        The CSS Fonts spec has deleted CSSRule.FONT_PALETTE_VALUES_RULE
        https://bugs.webkit.org/show_bug.cgi?id=230786
        <rdar://problem/83528219>

        Reviewed by Antti Koivisto.

        Update WebKit according to
        https://github.com/w3c/csswg-drafts/commit/45bda92646e0438c1fcd44497144aa86f0df1b61.

        Test: web-platform-tests/css/css-fonts/parsing/font-palette-values-invalid.html

        * css/CSSRule.h:
        * css/CSSRule.idl:
        * css/StyleRuleType.h:

2021-09-27  Andres Gonzalez  <andresg_22@apple.com>

        Boundary check of AccessibilityMathMLElement::mathOverObject is incorrect
        https://bugs.webkit.org/show_bug.cgi?id=230828
        <rdar://problem/83571752>

        Reviewed by Chris Fleizach.

        * accessibility/AccessibilityMathMLElement.cpp:
        (WebCore::AccessibilityMathMLElement::mathOverObject):

2021-09-27  Antti Koivisto  <antti@apple.com>

        [CSS Cascade Layers] Support @layer statement before @import statements
        https://bugs.webkit.org/show_bug.cgi?id=230826

        Reviewed by Simon Fraser.

        Support case like

            @layer a, b;
            @import url(foo.css);

        Before this patch @import rules could only be preceded by a @charset rule.

        * css/StyleRule.cpp:
        (WebCore::StyleRuleLayer::createStatement):
        (WebCore::StyleRuleLayer::createBlock):
        (WebCore::StyleRuleLayer::create): Deleted.

        Some clarifying renaming.

        * css/StyleRule.h:
        * css/StyleSheetContents.cpp:
        (WebCore::StyleSheetContents::parserAppendRule):

        Add a new m_layerRulesBeforeImportRules vector and put any early layer statements there.

        (WebCore::StyleSheetContents::ruleAt const):
        (WebCore::StyleSheetContents::ruleCount const):
        (WebCore::StyleSheetContents::clearRules):
        (WebCore::StyleSheetContents::wrapperInsertRule):
        (WebCore::StyleSheetContents::wrapperDeleteRule):
        * css/StyleSheetContents.h:
        * css/parser/CSSParserImpl.cpp:
        (WebCore::computeNewAllowedRules):
        (WebCore::CSSParserImpl::consumeImportRule):
        (WebCore::CSSParserImpl::consumeLayerRule):

        Parsing support.

        * css/parser/CSSParserImpl.h:
        * style/RuleSet.cpp:
        (WebCore::Style::RuleSet::Builder::addChildRules):
        (WebCore::Style::RuleSet::Builder::addRulesFromSheet):

        Register layers before imports.

        (WebCore::Style::RuleSet::Builder::registerLayers):

        Factor into a function.

        * style/RuleSet.h:

2021-09-27  Youenn Fablet  <youenn@apple.com>

        iPadOS 15 / iOS 15 unable to decode VP9 stream
        https://bugs.webkit.org/show_bug.cgi?id=230604
        <rdar://problem/83391595>

        Reviewed by Eric Carlson.

        Export a utility function to know whether HW VP9 is supported by VTB.
        No change of behavior.

        * platform/graphics/cocoa/VP9UtilitiesCocoa.h:
        * platform/graphics/cocoa/VP9UtilitiesCocoa.mm:
        (WebCore::vp9HardwareDecoderAvailable):

2021-09-27  Andres Gonzalez  <andresg_22@apple.com>

        Fix for crash in accessibility/Mac/search-predicate-for-adhoc-radio-groups.html in isolated tree mode.
        https://bugs.webkit.org/show_bug.cgi?id=230754
        <rdar://problem/83498599>

        Reviewed by Chris Fleizach.

        Test: accessibility/Mac/search-predicate-for-adhoc-radio-groups.html

        The crash was caused by the call in isRadioButtonInDifferentAdhocGroup
        to axObject->element()->getNameAttribute(), since element() should not
        be called off of the main thread. That brins up the question of how to
        get element attributes on the AX thread. For that purpose, I added the
        attributeValue method to the AXCoreObject interface, and removed the
        related methods that take QualifiedNames and return an AtomString, since
        they cannot be used off of the main thread.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::attributeValue const):
        (WebCore::AccessibilityObject::setIsIgnoredFromParentDataForChild):
        (WebCore::Accessibility::isRadioButtonInDifferentAdhocGroup):
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityObjectInterface.h:
        * accessibility/AccessibilityTableCell.cpp:
        (WebCore::AccessibilityTableCell::columnHeaders):
        (WebCore::AccessibilityTableCell::rowHeaders):
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilityIdentifier]):
        * accessibility/isolatedtree/AXIsolatedObject.cpp:
        (WebCore::AXIsolatedObject::initializeAttributeData):
        (WebCore::AXIsolatedObject::attributeValue const):
        (WebCore::AXIsolatedObject::hasAttribute const): Deleted.
        (WebCore::AXIsolatedObject::getAttribute const): Deleted.
        * accessibility/isolatedtree/AXIsolatedObject.h:
        * accessibility/isolatedtree/AXIsolatedTree.h:

2021-09-27  Youenn Fablet  <youenn@apple.com>

        Make sure to reset presenting application pid in case of mediaserverd crash
        https://bugs.webkit.org/show_bug.cgi?id=230822
        <rdar://83474184>

        Reviewed by Eric Carlson.

        Before the patch, we were asking MediaSessionHelper client to set the pid in case of mediaserverd crash.
        Given GPUProcess is the only one receiving the notification now, only the GPUProcess client could do it,
        which was not the case as MediaSessionManager in WebProcess was responsible to do so.

        Instead of relying on MediaSessionHelper client to do the setup, we now let MediaSessionHelper do it on its own.
        Everything will happen in GPUProcess which should also be faster.

        We also make sure to reset the affine transform of m_sampleBufferDisplayLayer so that rotation is applied correctly
        after mediaserverd crash.

        Manually tested by crashing mediaserverd.
        Test: fast/mediastream/video-rotation-gpu-process-crash.html (covers affine transform change).

        * platform/audio/ios/MediaSessionHelperIOS.h:
        * platform/audio/ios/MediaSessionHelperIOS.mm:
        (MediaSessionHelperiOS::providePresentingApplicationPID):
        (MediaSessionHelperiOS::mediaServerConnectionDied):
        * platform/audio/ios/MediaSessionManagerIOS.h:
        * platform/audio/ios/MediaSessionManagerIOS.mm:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::enqueueVideoSample):

2021-09-27  Kate Cheney  <katherine_cheney@apple.com>

        Send CSP violation reports to the DOM window
        https://bugs.webkit.org/show_bug.cgi?id=230728

        Reviewed by Brent Fulgham.

        No new tests. This will fix numerous test timeouts.

        Many imported CSP tests are timing out because they wait for security
        violation events to be sent to the DOM window. This patch bubbles up
        violation reports so attached documents will also report violations
        to the window.

        * dom/Document.cpp:
        (WebCore::Document::enqueueSecurityPolicyViolationEvent):
        * page/csp/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::reportViolation const):
        We should only report the name of the violated directive to match
        the spec, which specifies this should be "a non-empty string
        representing the directive whose enforcement caused the violation."

2021-09-27  Tim Nguyen  <ntim@apple.com>

        Replace Node::isInert() with RenderStyle::effectiveInert()
        https://bugs.webkit.org/show_bug.cgi?id=230686

        Reviewed by Antti Koivisto.

        This replaces Node::isInert() in favor of RenderStyle::effectiveInert() which is more accurate. We can't use it in
        Element::isFocusable(), since there's a bug with invalidation when accessing the cached computedStyle, hence
        the Node::deprecatedIsInert() method.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::defaultObjectInclusion const):
        * dom/Element.cpp:
        (WebCore::Element::isFocusable const):
        * dom/Node.cpp:
        (WebCore::Node::canStartSelection const):
        (WebCore::Node::deprecatedIsInert const): Added.
        * dom/Node.h:
        * dom/Position.cpp:
        (WebCore::Position::nodeIsInertOrUserSelectNone):
        (WebCore::Position::nodeIsUserSelectAll):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::collectSelectionGeometriesInternal):

2021-09-27  Martin Robinson  <mrobinson@webkit.org>

        Mandatory scroll snapping doesn't work correctly in tables with position:sticky
        https://bugs.webkit.org/show_bug.cgi?id=227300
        <rdar://problem/79971196>

        Reviewed by Simon Fraser.

        Add a mode for mapLocalToContainer which ignores sticky offsets. This will be
        used by more code in the future.

        Test: css3/scroll-snap/scroll-snap-drag-scrollbar-thumb-with-sticky.html

        * page/scrolling/ScrollSnapOffsetsInfo.cpp:
        (WebCore::updateSnapOffsetsForScrollableArea): Pass the IgnoreStickyOffsets flag.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::mapLocalToContainer const): When the IgnoreStickyOffsets flag is
        passed, explicitly remove sticky offsets from the container offset.
        * rendering/RenderObjectEnums.h: Add the IgnoreStickyOffests flag.

2021-09-26  Jean-Yves Avenard  <jya@apple.com>

        [MSE] appending to the source buffer will not throw when the source buffer is full.
        https://bugs.webkit.org/show_bug.cgi?id=230672
        rdar://problem/83496195

        Reviewed by Eric Carlson.

        Tests: media/media-source/media-source-append-buffer-full-quota-exceeded-error.html

        * platform/graphics/PlatformTimeRanges.cpp:
        (WebCore::PlatformTimeRanges::findWithEpsilon): add method.
        (WebCore::PlatformTimeRanges::copyWithEpsilon const): add method.
        * platform/graphics/PlatformTimeRanges.h:
        * platform/graphics/SourceBufferPrivate.cpp:
        (WebCore::SourceBufferPrivate::evictCodedFrames):

2021-09-26  Antti Koivisto  <antti@apple.com>

        Line iterator firstRun/lastRun may return runs from wrong lines
        https://bugs.webkit.org/show_bug.cgi?id=230770
        <rdar://problem/83509753>

        Reviewed by Alan Bujtas.

        In some situation line iterator firstRun/lastRun could return runs from different lines.
        This could lead to inconsistencies like firstRun being non-null while lastRun is null.

        Test: editing/iterator-line-start-end.html

        * layout/integration/LayoutIntegrationLineIteratorModernPath.h:
        (WebCore::LayoutIntegration::LineIteratorModernPath::firstRun const):
        (WebCore::LayoutIntegration::LineIteratorModernPath::lastRun const):

        Take care to only return runs from this line.

2021-09-25  Alan Bujtas  <zalan@apple.com>

        Fix win build.

        Unreviewed.

        * layout/formattingContexts/inline/text/TextUtil.cpp:
        (WebCore::Layout::TextUtil::width):

2021-09-25  Myles C. Maxfield  <mmaxfield@apple.com>

        Test palette animations
        https://bugs.webkit.org/show_bug.cgi?id=230677
        <rdar://problem/83437391>

        Reviewed by Simon Fraser.

        Simply hook it up to CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap().

        Tests: imported/w3c/web-platform-tests/css/css-fonts/animations/font-palette-animation-2.html
               imported/w3c/web-platform-tests/css/css-fonts/animations/font-palette-animation-3.html
               imported/w3c/web-platform-tests/css/css-fonts/animations/font-palette-animation.html

        * animation/CSSPropertyAnimation.cpp:
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):
        * platform/graphics/FontPalette.h:
        (WebCore::operator<<):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::setFontPalette):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::fontPalette const):

2021-09-25  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Text measuring is first-line style dependent
        https://bugs.webkit.org/show_bug.cgi?id=230796

        Reviewed by Antti Koivisto.

        First-line style may change the font to be used for measuring the text content.
        (This is in preparation for supporting first-line style)

        * layout/formattingContexts/inline/InlineContentBreaker.cpp:
        (WebCore::Layout::InlineContentBreaker::processOverflowingContent const):
        (WebCore::Layout::InlineContentBreaker::tryBreakingTextRun const):
        * layout/formattingContexts/inline/InlineLineBuilder.cpp:
        (WebCore::Layout::LineBuilder::inlineItemWidth const):
        * layout/formattingContexts/inline/InlineTextItem.cpp:
        (WebCore::Layout::InlineTextItem::createAndAppendTextItems):
        * layout/formattingContexts/inline/text/TextUtil.cpp:
        (WebCore::Layout::TextUtil::width):
        (WebCore::Layout::TextUtil::midWordBreak):
        * layout/formattingContexts/inline/text/TextUtil.h:

2021-09-23  Tim Nguyen  <ntim@apple.com>

        Make inert nodes invisible to hit testing
        https://bugs.webkit.org/show_bug.cgi?id=229330

        Reviewed by Antti Koivisto.

        Test: LayoutTests/imported/w3c/web-platform-tests/inert/inert-inlines.tentative.html

        This adds an internal inherited effectiveInert style property in RenderStyle and starts using it for hit testing checks.
        Invalidation is done through style invalidation.

        Skipped and removed test expectations for inert event retargeting tests that should soon become irrelevant per
        this CSSWG discussion:
        https://logs.csswg.org/irc.w3.org/css/2021-09-08/#e1431357
        https://lists.w3.org/Archives/Public/www-style/2021Sep/0004.html

        Pending WPT PR to remove inert event retargeting tests: https://github.com/web-platform-tests/wpt/pull/30866

        * dom/Element.cpp:
        (WebCore::Element::addToTopLayer):
        (WebCore::Element::removeFromTopLayer):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::parseAttribute):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::styleWillChange):
        * rendering/RenderElement.h:
        (WebCore::RenderElement::visibleToHitTesting const):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::layerStyleChanged):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::effectiveInert const):
        (WebCore::RenderStyle::setEffectiveInert):
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::operator== const):
        * rendering/style/StyleRareInheritedData.h:
        * style/StyleAdjuster.cpp:
        (WebCore::Style::Adjuster::adjust const):
        * style/StyleSharingResolver.cpp:
        (WebCore::Style::SharingResolver::canShareStyleWithElement const):

2021-09-25  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: aria-expanded is no longer supported on quite a few roles in ARIA 1.2
        https://bugs.webkit.org/show_bug.cgi?id=230609

        Reviewed by Chris Fleizach.

        We were exposing aria-expanded on any element where it was explicitly
        given a valid value (true/false). We should only expose it on roles where
        aria-expanded is a supported property. In addition, the number of roles
        where aria-expanded is a supported property was greatly reduced in ARIA 1.2.
        This commit brings us in alignment with the spec.

        Test: accessibility/aria-expanded-supported-roles.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::supportsExpanded const):
        (WebCore::AccessibilityObject::isExpanded const):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::canSetExpandedAttribute const):

2021-09-24  Víctor Manuel Jáquez Leal  <vjaquez@igalia.com>

        [GTK] Assertion on gamepad in debug build
        https://bugs.webkit.org/show_bug.cgi?id=230682

        Reviewed by Adrian Perez de Castro.

        Fix assertions on gamepad handling in debug build.

        No new tests needed.

        * platform/gamepad/manette/ManetteGamepad.cpp:
        (WebCore::toStandardGamepadAxis): remove assertion if unknown axis change.
        (WebCore::toStandardGamepadButton): remove assertion if unknown buttons change.
        * platform/gamepad/manette/ManetteGamepadProvider.cpp:
        (WebCore::ManetteGamepadProvider::startMonitoringGamepads): Insert connected devices
        asynchronously, after starting the device monitor, as expected by WebProcess.

2021-09-24  Nikos Mouchtaris  <nmouchtaris@apple.com>

        Implement round,mod,rem functions for calc
        https://bugs.webkit.org/show_bug.cgi?id=230073

        Reviewed by Simon Fraser.

        Implemented round, mod and rem calc functions. Involved adding css keywords for the functions
        and the keywords associated with the round function, as well as implementing the parsing and 
        computation of the expression. The spec for these functions: 
        https://drafts.csswg.org/css-values-4/#round-func.

        Tests: imported/w3c/web-platform-tests/css/css-values/round-mod-rem-computed.html
               imported/w3c/web-platform-tests/css/css-values/round-mod-rem-invalid.html
               imported/w3c/web-platform-tests/css/css-values/round-mod-rem-serialize.html

        * css/CSSValueKeywords.in:
        * css/calc/CSSCalcExpressionNodeParser.cpp:
        (WebCore::CSSCalcExpressionNodeParser::parseCalcFunction):
        (WebCore::checkRoundKeyword):
        Addition of functionID to parsing so the round keywords are only parsed within round 
        function.
        (WebCore::CSSCalcExpressionNodeParser::parseValue):
        (WebCore::CSSCalcExpressionNodeParser::parseCalcValue):
        (WebCore::CSSCalcExpressionNodeParser::parseCalcProduct):
        (WebCore::CSSCalcExpressionNodeParser::parseCalcSum):
        * css/calc/CSSCalcExpressionNodeParser.h:
        * css/calc/CSSCalcOperationNode.cpp:
        (WebCore::determineCategory):
        (WebCore::functionFromOperator):
        (WebCore::CSSCalcOperationNode::createStep):
        (WebCore::validateRoundChildren):
        (WebCore::CSSCalcOperationNode::createRound):
        (WebCore::CSSCalcOperationNode::createRoundConstant):
        (WebCore::CSSCalcOperationNode::combineChildren):
        (WebCore::CSSCalcOperationNode::simplifyNode):
        (WebCore::functionPrefixForOperator):
        (WebCore::getNearestMultiples):
        (WebCore::CSSCalcOperationNode::evaluateOperator):
        * css/calc/CSSCalcOperationNode.h:
        * css/calc/CSSCalcValue.cpp:
        (WebCore::createCSS):
        (WebCore::CSSCalcValue::isCalcFunction):
        * platform/calc/CalcExpressionOperation.cpp:
        (WebCore::getNearestMultiples):
        (WebCore::CalcExpressionOperation::evaluate const):
        * platform/calc/CalcOperator.cpp:
        (WebCore::operator<<):
        * platform/calc/CalcOperator.h:

2021-09-24  Simon Fraser  <simon.fraser@apple.com>

        Add a ScrollAnimations log channel
        https://bugs.webkit.org/show_bug.cgi?id=230772

        Reviewed by Tim Horton.

        Add a ScrollAnimations log channel and do some logging in ScrollingEffectsController,
        as well as logging some rubberbanding info via this channel.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/Logging.h:
        * platform/ScrollAnimation.cpp: Added.
        (WebCore::operator<<):
        * platform/ScrollAnimation.h:
        * platform/ScrollAnimationMomentum.cpp:
        (WebCore::ScrollAnimationMomentum::serviceAnimation):
        * platform/ScrollingEffectsController.cpp:
        (WebCore::ScrollingEffectsController::animationCallback):
        (WebCore::ScrollingEffectsController::startAnimatedScrollToDestination):
        (WebCore::ScrollingEffectsController::regargetAnimatedScroll):
        (WebCore::ScrollingEffectsController::stopAnimatedScroll):
        (WebCore::ScrollingEffectsController::startMomentumScrollWithInitialVelocity):
        (WebCore::ScrollingEffectsController::scrollAnimationDidUpdate):
        (WebCore::ScrollingEffectsController::scrollAnimationWillStart):
        (WebCore::ScrollingEffectsController::scrollAnimationDidEnd):
        * platform/mac/ScrollingEffectsController.mm:
        (WebCore::ScrollingEffectsController::handleWheelEvent):
        (WebCore::ScrollingEffectsController::updateRubberBandAnimatingState):
        (WebCore::ScrollingEffectsController::updateRubberBandingState):

2021-09-24  Lauro Moura  <lmoura@igalia.com>

        Non-unified partial build fixes late September edition
        https://bugs.webkit.org/show_bug.cgi?id=230763

        Unreviewed non-unified build fixes.

        Covered by existing tests.

        * Modules/cache/WorkerCacheStorageConnection.h: Add missing header.
        * Modules/filesystemaccess/FileSystemHandle.cpp: Ditto.
        * css/CSSFontPaletteValuesOverrideColorValue.h: Ditto.
        * css/CSSFontPaletteValuesRule.cpp: Ditto.
        * css/CSSFontPaletteValuesRule.h: Ditto.
        * css/parser/CSSParserImpl.cpp: Ditto.
        * css/typedom/CSSStyleValueFactory.cpp: Ditto.
        * css/typedom/CSSStyleValueFactory.h: Ditto.
        * loader/CrossOriginEmbedderPolicy.cpp: Ditto.
        * loader/PingLoader.h: Ditto.
        * platform/Scrollbar.cpp: Ditto.
        * rendering/TextBoxPainter.cpp: Ditto.
        * workers/SharedWorker.cpp: Ditto.
        * workers/SharedWorkerGlobalScope.cpp: Ditto.
        * workers/WorkerScriptLoaderClient.h: Ditto.

2021-09-24  Simon Fraser  <simon.fraser@apple.com>

        Have ScrollingEffectsController drive all the ScrollAnimations
        https://bugs.webkit.org/show_bug.cgi?id=230739

        Reviewed by Tim Horton.

        Instead of each ScrollAnimation subclass having its own timer code, have them all
        implement serviceAnimations(), so that ScrollingEffectsController can then drive
        them all via its existing animationCallback() code.

        Give ScrollingTreeScrollingNodeDelegateNicosia a temporary timer to drive its animations,
        but leave FIXME comments noting that these animations should move into ScrollingEffectsCoordinator.

        Push a bit more common ScrollAnimation logic into the base class, and add a
        'willStart' client function which ScrollingEffectsController can use to
        start callbacks if necessary.

        ScrollAnimation lifetime is controlled by ScrollingEffectsController; an animation
        will be deleted in the first animationCallback() where it is no longer active. This
        avoids potential pitfalls where an animation might be deleted inside the scrollAnimationDidEnd()
        callback.

        * platform/PlatformWheelEvent.h:
        (WebCore::PlatformWheelEvent::swipeVelocity const):
        * platform/ScrollAnimation.h:
        (WebCore::ScrollAnimationClient::scrollAnimationWillStart):
        (WebCore::ScrollAnimation::stop):
        (WebCore::ScrollAnimation::isActive const):
        (WebCore::ScrollAnimation::currentOffset const):
        (WebCore::ScrollAnimation::didStart):
        (WebCore::ScrollAnimation::didEnd):
        (WebCore::ScrollAnimation::timeSinceStart const):
        (WebCore::ScrollAnimation::serviceAnimation): Deleted.
        * platform/ScrollAnimationKinetic.cpp:
        (WebCore::ScrollAnimationKinetic::PerAxisData::animateScroll):
        (WebCore::ScrollAnimationKinetic::ScrollAnimationKinetic):
        (WebCore::ScrollAnimationKinetic::computeVelocity):
        (WebCore::ScrollAnimationKinetic::startAnimatedScrollWithInitialVelocity):
        (WebCore::ScrollAnimationKinetic::serviceAnimation):
        (WebCore::ScrollAnimationKinetic::stop): Deleted.
        (WebCore::ScrollAnimationKinetic::isActive const): Deleted.
        (WebCore::ScrollAnimationKinetic::animationTimerFired): Deleted.
        (WebCore::ScrollAnimationKinetic::deltaToNextFrame): Deleted.
        * platform/ScrollAnimationKinetic.h:
        * platform/ScrollAnimationMomentum.cpp:
        (WebCore::ScrollAnimationMomentum::startAnimatedScrollWithInitialVelocity):
        (WebCore::ScrollAnimationMomentum::retargetActiveAnimation):
        (WebCore::ScrollAnimationMomentum::stop):
        (WebCore::ScrollAnimationMomentum::serviceAnimation):
        (WebCore::ScrollAnimationMomentum::updateScrollExtents):
        (WebCore::ScrollAnimationMomentum::isActive const): Deleted.
        * platform/ScrollAnimationMomentum.h:
        * platform/ScrollAnimationSmooth.cpp:
        (WebCore::ScrollAnimationSmooth::ScrollAnimationSmooth):
        (WebCore::ScrollAnimationSmooth::startOrRetargetAnimation):
        (WebCore::ScrollAnimationSmooth::serviceAnimation):
        (WebCore::ScrollAnimationSmooth::stop): Deleted.
        (WebCore::ScrollAnimationSmooth::animationTimerFired): Deleted.
        (WebCore::ScrollAnimationSmooth::startNextTimer): Deleted.
        (WebCore::ScrollAnimationSmooth::isActive const): Deleted.
        * platform/ScrollAnimationSmooth.h:
        * platform/ScrollingEffectsController.cpp:
        (WebCore::ScrollingEffectsController::animationCallback):
        (WebCore::ScrollingEffectsController::startOrStopAnimationCallbacks):
        (WebCore::ScrollingEffectsController::startAnimatedScrollToDestination):
        (WebCore::ScrollingEffectsController::scrollAnimationWillStart):
        (WebCore::ScrollingEffectsController::scrollAnimationDidEnd):
        (WebCore::ScrollingEffectsController::updateScrollSnapAnimatingState): Deleted.
        * platform/ScrollingEffectsController.h:
        * platform/mac/ScrollingEffectsController.mm:
        (WebCore::ScrollingEffectsController::processWheelEventForScrollSnap): If transitionToGlideAnimationState()
        starts an animation we have to call startScrollSnapAnimation() (because the previous stop() will have
        puts us in a "not animating scroll snap" state).
        (WebCore::ScrollingEffectsController::updateScrollSnapAnimatingState): Deleted.

2021-09-24  Antoine Quint  <graouts@webkit.org>

        [Media Controls] Allow for a close button
        https://bugs.webkit.org/show_bug.cgi?id=230761
        <rdar://problem/83505067>

        Reviewed by Dean Jackson.

        Add a new close button with an "X" icon which simple exits fullscreen.

        * DerivedSources-input.xcfilelist:
        * DerivedSources.make:
        * Modules/modern-media-controls/controls/close-button.js: Added.
        (CloseButton):
        * Modules/modern-media-controls/controls/icon-service.js:
        * Modules/modern-media-controls/images/iOS/X.svg: Added.
        * Modules/modern-media-controls/images/macOS/X.svg: Added.
        * Modules/modern-media-controls/js-files:
        * Modules/modern-media-controls/media/close-support.js: Added.
        (CloseSupport.prototype.get control):
        (CloseSupport.prototype.buttonWasPressed):
        (CloseSupport):
        * Modules/modern-media-controls/media/media-controller.js:
        (MediaController.prototype._supportingObjectClasses):
        * WebCore.xcodeproj/project.pbxproj:

2021-09-24  Nikos Mouchtaris  <nmouchtaris@apple.com>

        Implement abs,sign calc functions
        https://bugs.webkit.org/show_bug.cgi?id=229786

        Reviewed by Simon Fraser.

        Added support for calc functions sign and abs. Involved adding new css keywords and handling 
        for parsing calc expression and computing the resulting value. Spec for these functions: 
        https://drafts.csswg.org/css-values-4/#sign-funcs.

        Tests: imported/w3c/web-platform-tests/css/css-values/signs-abs-computed.html
               imported/w3c/web-platform-tests/css/css-values/signs-abs-invalid.html
               imported/w3c/web-platform-tests/css/css-values/signs-abs-serialize.html

        * css/CSSValueKeywords.in:
        * css/calc/CSSCalcExpressionNodeParser.cpp:
        (WebCore::CSSCalcExpressionNodeParser::parseCalcFunction):
        * css/calc/CSSCalcOperationNode.cpp:
        (WebCore::determineCategory):
        (WebCore::functionFromOperator):
        (WebCore::CSSCalcOperationNode::createSign):
        (WebCore::CSSCalcOperationNode::combineChildren):
        (WebCore::CSSCalcOperationNode::simplifyNode):
        (WebCore::CSSCalcOperationNode::doubleValue const):
        (WebCore::functionPrefixForOperator):
        (WebCore::CSSCalcOperationNode::evaluateOperator):
        * css/calc/CSSCalcOperationNode.h:
        * css/calc/CSSCalcValue.cpp:
        (WebCore::createCSS):
        (WebCore::CSSCalcValue::isCalcFunction):
        * platform/calc/CalcExpressionOperation.cpp:
        (WebCore::CalcExpressionOperation::evaluate const):
        * platform/calc/CalcOperator.cpp:
        (WebCore::operator<<):
        * platform/calc/CalcOperator.h:

2021-09-24  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] LineBuilder should have the option of passing in the correct style when a run is added to the line
        https://bugs.webkit.org/show_bug.cgi?id=230760

        Reviewed by Antti Koivisto.

        Now the Line only uses the passed in style information. It's up to the LineBuilder to pass in the line index dependent style when attaching a run.

        * layout/formattingContexts/inline/InlineLine.cpp:
        (WebCore::Layout::Line::append):
        (WebCore::Layout::Line::appendNonBreakableSpace):
        (WebCore::Layout::Line::appendInlineBoxStart):
        (WebCore::Layout::Line::appendInlineBoxEnd):
        (WebCore::Layout::Line::appendTextContent):
        (WebCore::Layout::Line::appendNonReplacedInlineLevelBox):
        (WebCore::Layout::Line::appendReplacedInlineLevelBox):
        * layout/formattingContexts/inline/InlineLine.h:
        * layout/formattingContexts/inline/InlineLineBuilder.cpp:
        (WebCore::Layout::LineBuilder::placeInlineContent):
        (WebCore::Layout::LineBuilder::handleInlineContent):
        (WebCore::Layout::LineBuilder::commitPartialContent):
        (WebCore::Layout::LineBuilder::rebuildLine):

2021-09-24  Alan Bujtas  <zalan@apple.com>

        r283047 broke some hyphen related debug tests.

        Apparently we can't access the hyphen string when the hyphen property is not set.

        * layout/formattingContexts/inline/InlineContentBreaker.h:
        (WebCore::Layout::InlineContentBreaker::ContinuousContent::Run::Run):

2021-09-24  Eric Hutchison  <ehutchison@apple.com>

        Unreviewed, reverting r283050.

        Broke commit-queue

        Reverted changeset:

        "[Media Controls] Allow for a close button"
        https://bugs.webkit.org/show_bug.cgi?id=230761
        https://commits.webkit.org/r283050

2021-09-24  Myles C. Maxfield  <mmaxfield@apple.com>

        Color keywords in override-color cause a crash
        https://bugs.webkit.org/show_bug.cgi?id=230605
        <rdar://problem/83389290>

        Reviewed by Simon Fraser.

        I was assuming that consumeColor() would always produce a color. Instead, if the color
        was specified as a keyword, consumeColor() would produce the keyword.

        This passes in the default context for color resolution, because
        https://github.com/w3c/csswg-drafts/issues/6680 isn't resolved yet.

        Test: imported/w3c/web-platform-tests/css/css-fonts/parsing/font-palette-values-valid.html

        * css/parser/CSSParserImpl.cpp:
        (WebCore::CSSParserImpl::consumeFontPaletteValuesRule):

2021-09-24  Antoine Quint  <graouts@webkit.org>

        [Media Controls] RangeButton doesn't show the fill indicator in fullscreen
        https://bugs.webkit.org/show_bug.cgi?id=230759
        <rdar://problem/82206303>

        Reviewed by Dean Jackson.

        RangeButton cannot work in fullscreen since it only ever registers "pointermove" and "pointerup"
        events on window, which is not in the same display, rather than the controls element displayed
        in fullscreen. So we adopt the same approach used for Slider, but also improve by not looking
        for a specific MediaControls subclass, but rather by checking whether the traits indicate
        these are fullscreen controls.

        * Modules/modern-media-controls/controls/controls/range-button.js:
        (RangeButton.prototype.handleEvent):
        (RangeButton.prototype._pointerMoveAndEndTarget):
        (RangeButton.prototype._handlePointerdown):
        (RangeButton.prototype._handlePointerup):
        * Modules/modern-media-controls/controls/controls/slider.js:
        (Slider.prototype._interactionEndTarget):

2021-09-24  Antoine Quint  <graouts@webkit.org>

        [Media Controls] Allow for a close button
        https://bugs.webkit.org/show_bug.cgi?id=230761

        Reviewed by Dean Jackson.

        Add a new close button with an "X" icon which simple exits fullscreen.

        * DerivedSources-input.xcfilelist:
        * DerivedSources.make:
        * Modules/modern-media-controls/controls/close-button.js: Added.
        (CloseButton):
        * Modules/modern-media-controls/controls/icon-service.js:
        * Modules/modern-media-controls/images/iOS/X.svg: Added.
        * Modules/modern-media-controls/images/macOS/X.svg: Added.
        * Modules/modern-media-controls/media/close-support.js: Added.
        (CloseSupport.prototype.get control):
        (CloseSupport.prototype.buttonWasPressed):
        (CloseSupport):
        * Modules/modern-media-controls/media/media-controller.js:
        (MediaController.prototype._supportingObjectClasses):
        * WebCore.xcodeproj/project.pbxproj:

2021-09-24  Devin Rousso  <drousso@apple.com>

        Add typechecking `is` overloads for `std::unique_ptr`, `WTF::UniqueRef`, and `WTF::WeakPtr`
        https://bugs.webkit.org/show_bug.cgi?id=230734

        Reviewed by Chris Dumez.

        * accessibility/AccessibilityListBoxOption.cpp:
        (WebCore::AccessibilityListBoxOption::isEnabled const):
        (WebCore::AccessibilityListBoxOption::isSelected const):
        (WebCore::AccessibilityListBoxOption::canSetSelectedAttribute const):
        * accessibility/AccessibilityScrollView.cpp:
        (WebCore::AccessibilityScrollView::webAreaObject const):
        (WebCore::AccessibilityScrollView::documentFrameView const):
        (WebCore::AccessibilityScrollView::parentObject const):
        (WebCore::AccessibilityScrollView::parentObjectIfExists const):
        * animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFunc):
        * bindings/js/JSAbstractRangeCustom.cpp:
        (WebCore::toJSNewlyCreated):
        * css/CSSCounterStyleRule.cpp:
        (WebCore::StyleRuleCounterStyle::mutableProperties):
        * css/CSSCursorImageValue.cpp:
        (WebCore::CSSCursorImageValue::CSSCursorImageValue):
        (WebCore::CSSCursorImageValue::selectBestFitImage):
        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::isSVGFontFaceSource const):
        * css/CSSFontFaceSrcValue.cpp:
        (WebCore::CSSFontFaceSrcValue::fontLoadRequest):
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::updateStyleIfNeeded):
        (WebCore::CSSFontSelector::fontRangesForFamily):
        (WebCore::CSSFontSelector::fallbackFontAt):
        * css/CSSKeyframeRule.cpp:
        (WebCore::StyleRuleKeyframe::mutableProperties):
        * css/StyleRule.cpp:
        (WebCore::StyleRule::mutableProperties):
        (WebCore::StyleRulePage::mutableProperties):
        (WebCore::StyleRuleFontFace::mutableProperties):
        * css/calc/CSSCalcOperationNode.cpp:
        (WebCore::CSSCalcOperationNode::hoistChildrenWithOperator):
        (WebCore::CSSCalcOperationNode::combineChildren):
        * css/typedom/CSSStyleValueFactory.cpp:
        (WebCore::CSSStyleValueFactory::reifyValue):
        * editing/TextManipulationController.cpp:
        (WebCore::TextManipulationController::scheduleObservationUpdate):
        (WebCore::TextManipulationController::replace):
        * editing/cocoa/WebContentReaderCocoa.mm:
        (WebCore::replaceRichContentWithAttachments):
        * html/FormController.cpp:
        (WebCore::FormController::restoreControlStateIn):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::reset):
        (WebCore::HTMLCanvasElement::getImageData):
        (WebCore::HTMLCanvasElement::virtualHasPendingActivity const):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::checkInvalidControlsAndCollectUnhandled):
        * html/OffscreenCanvas.cpp:
        (WebCore::OffscreenCanvas::reset):
        * html/track/TextTrack.cpp:
        (WebCore::TextTrack::addCue):
        * inspector/agents/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::buildObjectForEventListener):
        * page/FrameViewLayoutContext.cpp:
        (WebCore::FrameViewLayoutContext::layout):
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::streamDataParser const):
        * platform/graphics/ca/cocoa/PlatformCAAnimationCocoa.mm:
        (WebCore::PlatformCAAnimationCocoa::setAnimations):
        * platform/graphics/ca/win/PlatformCAAnimationWin.cpp:
        (PlatformCAAnimationWin::setAnimations):
        * rendering/RenderImageResource.cpp:
        (WebCore::RenderImageResource::imageSize const):
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::destroy):
        * rendering/updating/RenderTreeBuilderTable.cpp:
        (WebCore::RenderTreeBuilder::Table::attach):

2021-09-24  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Line breaking only uses a few style properties
        https://bugs.webkit.org/show_bug.cgi?id=230757

        Reviewed by Antti Koivisto.

        The continuous runs, input to the line breaking, should only contain style properties that line breaking actually uses. 
        This is in preparation for supporting first-line.

        * layout/formattingContexts/inline/InlineContentBreaker.cpp:
        (WebCore::Layout::InlineContentBreaker::isWrappingAllowed):
        (WebCore::Layout::InlineContentBreaker::shouldKeepEndOfLineWhitespace const):
        (WebCore::Layout::InlineContentBreaker::processOverflowingContent const):
        (WebCore::Layout::InlineContentBreaker::processOverflowingContentWithText const):
        (WebCore::Layout::InlineContentBreaker::wordBreakBehavior const):
        (WebCore::Layout::InlineContentBreaker::tryBreakingTextRun const):
        (WebCore::Layout::InlineContentBreaker::ContinuousContent::append):
        (WebCore::Layout::InlineContentBreaker::ContinuousContent::reset):
        * layout/formattingContexts/inline/InlineContentBreaker.h:
        (WebCore::Layout::InlineContentBreaker::ContinuousContent::Run::Run):
        * layout/formattingContexts/inline/InlineLineBuilder.cpp:
        (WebCore::Layout::LineCandidate::InlineContent::appendInlineItem):
        (WebCore::Layout::LineBuilder::handleInlineContent):

2021-09-24  Youenn Fablet  <youenn@apple.com>

        RTCDataChannelHandlerClient does not need to be ref counted
        https://bugs.webkit.org/show_bug.cgi?id=230679

        Reviewed by Eric Carlson.

        We can move from using a protected ref counted client to using a WeakPtr client
        as we always hop to the client's thread before accessing it.
        This reduces ref counting and simplifies lifetime management.

        * Modules/mediastream/RTCDataChannel.h:
        * Modules/mediastream/RTCDataChannelRemoteSource.h:
        * Modules/mediastream/libwebrtc/LibWebRTCDataChannelHandler.cpp:
        (WebCore::LibWebRTCDataChannelHandler::setClient):
        (WebCore::LibWebRTCDataChannelHandler::checkState):
        (WebCore::LibWebRTCDataChannelHandler::OnMessage):
        (WebCore::LibWebRTCDataChannelHandler::OnBufferedAmountChange):
        * Modules/mediastream/libwebrtc/LibWebRTCDataChannelHandler.h:
        * platform/mediastream/RTCDataChannelHandlerClient.h:

2021-09-24  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Line::Run only needs a handful of style properties
        https://bugs.webkit.org/show_bug.cgi?id=230730

        Reviewed by Antti Koivisto.

        This patch is in preparation for supporting first-line style.

        Line::Run is the first structure that we use to construct line objects after line breaking (or last in the context of the series of patches going backwards from the final display box structure towards line breaking) where
        we could retain the fist-line dependent property values.

        * layout/formattingContexts/inline/InlineLine.cpp:
        (WebCore::Layout::Line::removeCollapsibleContent):
        (WebCore::Layout::Line::applyRunExpansion):
        (WebCore::Layout::Line::visuallyCollapseHangingOverflow):
        (WebCore::Layout::Line::appendNonBreakableSpace):
        (WebCore::Layout::Line::appendTextContent):
        (WebCore::Layout::Line::appendNonReplacedInlineLevelBox):
        (WebCore::Layout::Line::appendLineBreak):
        (WebCore::Layout::Line::appendWordBreakOpportunity):
        (WebCore::Layout::Line::Run::Run):
        (WebCore::Layout::m_style):
        (WebCore::Layout::Line::Run::hasTrailingLetterSpacing const):
        (WebCore::Layout::Line::Run::trailingLetterSpacing const):
        (WebCore::Layout::Line::Run::removeTrailingLetterSpacing):
        (WebCore::Layout::Line::visuallyCollapsePreWrapOverflowContent): Deleted.
        * layout/formattingContexts/inline/InlineLine.h:
        (WebCore::Layout::Line::Run::layoutBox const):
        (WebCore::Layout::Line::Run::isOverflowWhitespaceHanging const):
        (WebCore::Layout::Line::Run::inlineDirection const):
        (WebCore::Layout::Line::Run::letterSpacing const):
        (WebCore::Layout::Line::Run::hasTextCombine const):
        (WebCore::Layout::Line::Run::style const): Deleted.
        * layout/formattingContexts/inline/InlineLineBoxBuilder.cpp:
        (WebCore::Layout::hangingGlyphWidth):
        (WebCore::Layout::LineBoxBuilder::constructAndAlignInlineLevelBoxes):
        * layout/formattingContexts/inline/text/TextUtil.cpp:
        (WebCore::Layout::TextUtil::fallbackFontsForRun):
        * layout/formattingContexts/inline/text/TextUtil.h:

2021-09-24  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] InlineLevelBox only needs a handful of style properties
        https://bugs.webkit.org/show_bug.cgi?id=230724

        Reviewed by Antti Koivisto.

        This is in preparation for supporting first-line style where the incoming RenderStyle& depends on whether the inline level box is on the first line or not.

        * layout/formattingContexts/inline/InlineLevelBox.h:
        (WebCore::Layout::InlineLevelBox::InlineLevelBox):
        (WebCore::Layout::m_style):
        (WebCore::Layout::InlineLevelBox::isPreferredLineHeightFontMetricsBased const):
        (WebCore::Layout::InlineLevelBox::primaryFontMetrics const):
        (WebCore::Layout::InlineLevelBox::fontSize const):
        (WebCore::Layout::InlineLevelBox::createAtomicInlineLevelBox):
        (WebCore::Layout::InlineLevelBox::createInlineBox):
        (WebCore::Layout::InlineLevelBox::createLineBreakBox):
        (WebCore::Layout::InlineLevelBox::createGenericInlineLevelBox):
        (WebCore::Layout::m_type): Deleted.
        * layout/formattingContexts/inline/InlineLineBox.cpp:
        (WebCore::Layout::LineBox::LineBox):
        * layout/formattingContexts/inline/InlineLineBoxBuilder.cpp:
        (WebCore::Layout::LineBoxBuilder::constructAndAlignInlineLevelBoxes):

2021-09-24  Alan Bujtas  <zalan@apple.com>

        [IFC][LFC] InlineLevelBox needs to retain only a small set of style properties
        https://bugs.webkit.org/show_bug.cgi?id=230718

        Reviewed by Antti Koivisto.

        Let's not expose all the style properties in here. InlineLevelBoxes only need certain font and alignment related properties values.
        It also enables us to map certain property values to proper names.

        e.g. RenderStyle::computeLineHeight() -> preferredLineHeight() (spec term)
          or RenderStyle::lineHeight().isNegative() -> isPreferredLineHeightFontMetricsBased()

          Now code like this

          LineBoxBuilder::adjustVerticalGeometryForInlineBoxWithFallbackFonts(const InlineBox&)
          {
              if (!inlineBox.isPreferredLineHeightFontMetricsBased())
                  return;
          ...
          start making sense.

        This patch is also in preparation for supporting first-line style.

        * layout/formattingContexts/inline/InlineLevelBox.h:
        (WebCore::Layout::InlineLevelBox::isPreferredLineHeightFontMetricsBased const):
        (WebCore::Layout::InlineLevelBox::primaryFontMetrics const):
        (WebCore::Layout::InlineLevelBox::fontSize const):
        (WebCore::Layout::InlineLevelBox::layoutBox const):
        (WebCore::Layout::InlineLevelBox::preferredLineHeight const):
        (WebCore::Layout::InlineLevelBox::verticalAlign const):
        (WebCore::Layout::InlineLevelBox::style const): Deleted.
        * layout/formattingContexts/inline/InlineLineBox.cpp:
        (WebCore::Layout::LineBox::logicalRectForTextRun const):
        * layout/formattingContexts/inline/InlineLineBoxBuilder.cpp:
        (WebCore::Layout::LineBoxBuilder::adjustVerticalGeometryForInlineBoxWithFallbackFonts const):
        (WebCore::Layout::LineBoxBuilder::setInitialVerticalGeometryForInlineBox const):
        (WebCore::Layout::LineBoxBuilder::constructAndAlignInlineLevelBoxes):
        * layout/formattingContexts/inline/InlineLineBoxVerticalAligner.cpp:
        (WebCore::Layout::LineBoxVerticalAligner::canUseSimplifiedAlignmentForInlineLevelBox):
        (WebCore::Layout::LineBoxVerticalAligner::computeLineBoxLogicalHeight const):
        (WebCore::Layout::LineBoxVerticalAligner::computeRootInlineBoxVerticalPosition const):
        (WebCore::Layout::LineBoxVerticalAligner::alignInlineLevelBoxes const):

2021-09-24  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] InlineDisplay::Box should be able to provide first-line style when applicable
        https://bugs.webkit.org/show_bug.cgi?id=230709

        Reviewed by Antti Koivisto.

        This is in preparation for supporting first-line style. The idea here is that the run/box objects we construct after line breaking should
        retain the applicable style.

        * layout/formattingContexts/inline/InlineDisplayContentBuilder.cpp:
        (WebCore::Layout::InlineDisplayContentBuilder::build):
        (WebCore::Layout::InlineDisplayContentBuilder::createBoxesAndUpdateGeometryForLineContent):
        (WebCore::Layout::InlineDisplayContentBuilder::createBoxesAndUpdateGeometryForLineSpanningInlineBoxes):
        * layout/formattingContexts/inline/display/InlineDisplayBox.h:
        (WebCore::InlineDisplay::Box::style const):
        (WebCore::InlineDisplay::Box::Box):
        * layout/integration/LayoutIntegrationPagination.cpp:
        (WebCore::LayoutIntegration::makeAdjustedContent):

2021-09-24  Kimmo Kinnunen  <kkinnunen@apple.com>

        Add utility to create CVPixelBuffers from IOSurfaces
        https://bugs.webkit.org/show_bug.cgi?id=230338

        Reviewed by Youenn Fablet.

        Move the functionality of creating CVPixelBuffers
        from IOSurfaces from ImageTransferSessionVT to
        standalone functions in new header CVUtilities.
        The functionality did not use any state of
        ImageTransferSessionVT.

        This functionality is useful in other scenarios too.

        Remove instantiations of ImageTransferSessionVT from
        the old call sites, as it was never used for anything
        else than creation of the pixel buffer.

        Move the related CVPixelBufferPool instantiation
        from RealtimeVideoUtilities.h to CVUtilities.h

        Remove the usage of kCVPixelFormatOpenGLESCompatibility
        from the CVPixelBuffer creation code. It was incorrect property
        all along, property of pixel formats not of pixel buffers. The
        intended property was kCVPixelBufferOpenGLESCompatibilityKey
        but it is not needed anymore.
        Retains the usage of kCVPixelBufferOpenGLCompatibilityKey, though
        it is incorrect and unneeded for the current operation too.
        Since theoretically this could affect something on Mac, this
        will be removed in a separate fix.

        No new tests, a refactor.

        * PlatformMac.cmake:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/cv/CVUtilities.h: Added.
        * platform/graphics/cv/CVUtilities.mm: Added.
        (WebCore::createIOSurfaceCVPixelBufferPool):
        (WebCore::createCVPixelBufferFromPool):
        (WebCore::pixelBufferCreationOptions):
        (WebCore::createCVPixelBuffer):
        The added functions return Expected<object, status> since
        some of the callers want to log the failure status code.
        * platform/graphics/cv/ImageTransferSessionVT.h:
        * platform/graphics/cv/ImageTransferSessionVT.mm:
        (WebCore::ImageTransferSessionVT::setSize):
        (WebCore::ImageTransferSessionVT::convertPixelBuffer):
        (WebCore::ImageTransferSessionVT::convertCMSampleBuffer):
        (WebCore::ImageTransferSessionVT::createCMSampleBuffer):
        (WebCore::cvPixelFormatOpenGLKey): Deleted.
        Incorrect, replaced with Mac-only use of OpenGLCompatibilityKey in
        CVUtilities.mm.
        (WebCore::roundUpToMacroblockMultiple): Deleted.
        Use the similar function in WTF.
        (WebCore::ImageTransferSessionVT::ioSurfacePixelBufferCreationOptions): Deleted.
        * platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.mm:
        (WebCore::RealtimeIncomingVideoSourceCocoa::pixelBufferPool):
        * platform/mediastream/mac/RealtimeVideoUtilities.h:
        Preserved, since preferedPixelBufferFormat means
        "the pixel buffer format that is preferred by media stream implementations"
        which does not fit to category of "CoreVideo Utilities".
        * platform/mediastream/mac/RealtimeVideoUtilities.mm: Removed.
        * platform/network/mac/WebCoreURLResponse.mm:
        Fix unified build failure due to a missing include.

2021-09-24  Youenn Fablet  <youenn@apple.com>

        <video> element rendered incorrectly when provided with a portrait orientation stream in Safari 15
        https://bugs.webkit.org/show_bug.cgi?id=229792
        <rdar://problem/82776741>

        Reviewed by Eric Carlson.

        We need to swap the bounds for both m_rootLayer and m_sampleBufferDisplayLayer if the sample is rotated by 90.
        We also need to ompute m_sampleBufferDisplayLayer position based on m_rootLayer coordinates.
        This means we swap root layer bounds width and height before computing m_sampleBufferDisplayLayer position based on it.

        Test: fast/mediastream/video-rotation.html

        * platform/graphics/avfoundation/objc/LocalSampleBufferDisplayLayer.h:
        * platform/graphics/avfoundation/objc/LocalSampleBufferDisplayLayer.mm:
        (WebCore::LocalSampleBufferDisplayLayer::setRootLayerBoundsAndPositions):
        (WebCore::LocalSampleBufferDisplayLayer::updateRootLayerBoundsAndPosition):
        * platform/graphics/cg/ImageBufferUtilitiesCG.h:

2021-09-24  Youenn Fablet  <youenn@apple.com>

        [IOS 15] Video track does not get unmuted in case of tab was inactive less than ~500 ms
        https://bugs.webkit.org/show_bug.cgi?id=230538
        <rdar://problem/83355705>

        Reviewed by Eric Carlson.

        Add support for interrupting mock cameras.
        Update internals to handle the case of out of main thread videoSampleAvailable calls.

        Update Page::setMuted to trigger setMuted logic even if Page muted state did not change.
        This ensures we can restart capture in case a track is muted without the page being muted itself.

        When a source is muted and is in producing data state, it is interrupted.
        When setMuted(false) is called, we need to uninterrupt.
        To do so, we do a stop/start cycle

        Test: fast/mediastream/media-stream-video-track-interrupted.html

        * page/Page.cpp:
        (WebCore::Page::setMuted):
        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::setMuted):
        * platform/mock/MockRealtimeMediaSourceCenter.cpp:
        (WebCore::MockRealtimeMediaSourceCenter::setMockCameraIsInterrupted):
        * platform/mock/MockRealtimeMediaSourceCenter.h:
        * platform/mock/MockRealtimeVideoSource.cpp:
        (WebCore::MockRealtimeVideoSource::MockRealtimeVideoSource):
        (WebCore::MockRealtimeVideoSource::~MockRealtimeVideoSource):
        (WebCore::MockRealtimeVideoSource::setIsInterrupted):
        * platform/mock/MockRealtimeVideoSource.h:
        * testing/Internals.cpp:
        (WebCore::Internals::videoSampleAvailable):
        * testing/Internals.h:

2021-09-24  Myles C. Maxfield  <mmaxfield@apple.com>

        Handle CSSOM style mutation of font-palette-values
        https://bugs.webkit.org/show_bug.cgi?id=230448
        <rdar://problem/83343481>

        Reviewed by Antti Koivisto.

        The CSSSegmentedFontFace cache needs to be sensitive to FontPaletteValues.

        Tests: imported/w3c/web-platform-tests/css/css-fonts/palette-values-rule-add-2.html
               imported/w3c/web-platform-tests/css/css-fonts/palette-values-rule-add.html
               imported/w3c/web-platform-tests/css/css-fonts/palette-values-rule-delete-2.html
               imported/w3c/web-platform-tests/css/css-fonts/palette-values-rule-delete.html

        * css/CSSSegmentedFontFace.cpp:
        (WebCore::CSSSegmentedFontFace::fontRanges):
        * css/CSSSegmentedFontFace.h:
        * platform/graphics/FontCache.h:
        (WTF::DefaultHash<WebCore::FontDescriptionKey>::hash):
        (WTF::DefaultHash<WebCore::FontDescriptionKey>::equal):
        (WebCore::FontDescriptionKeyHash::hash): Deleted.
        (WebCore::FontDescriptionKeyHash::equal): Deleted.
        * platform/graphics/FontPaletteValues.h:
        (WTF::DefaultHash<WebCore::FontPaletteValues>::hash):
        (WTF::DefaultHash<WebCore::FontPaletteValues>::equal):

2021-09-24  Brandon Stewart  <brandonstewart@apple.com>

        [RenderTreeUpdater] NULL ptr deref in updateRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=230581

        Reviewed by Antti Koivisto.

        Text element changes are buffered. This can lead to undesirable behavior
        when switching a node to a document that is not rendered, and then proceeding
        with a rendering update.

        If we cannot find a renderer in a node or its ancestors then just give up
        instead of returning a document.

        Test: fast/dom/Document/clearPendingRenderTreeUpdater.html

        * rendering/updating/RenderTreeUpdater.cpp:
        (WebCore::findRenderingRoot):
        (WebCore::RenderTreeUpdater::commit):
        (WebCore::RenderTreeUpdater::createRenderer):
        (WebCore::RenderTreeUpdater::textRendererIsNeeded):

2021-09-24  Sihui Liu  <sihui_liu@apple.com>

        Add initial support for File System Access API
        https://bugs.webkit.org/show_bug.cgi?id=230484
        rdar://83405890

        Reviewed by Youenn Fablet.

        Implemented FileSystemHandle and FileSystemDirectoryHandle (except directory iteration) interfaces for Origin 
        Private File System.
        Spec: https://wicg.github.io/file-system-access/#api-filesystemhandle
              https://wicg.github.io/file-system-access/#api-filesystemdirectoryhandle
              https://wicg.github.io/file-system-access/#sandboxed-filesystem

        Test: storage/filesystemaccess/directory-handle-basics.html

        * Headers.cmake:
        * Modules/filesystemaccess/FileSystemDirectoryHandle.cpp:
        (WebCore::FileSystemDirectoryHandle::create):
        (WebCore::FileSystemDirectoryHandle::FileSystemDirectoryHandle):
        (WebCore::FileSystemDirectoryHandle::getFileHandle):
        (WebCore::FileSystemDirectoryHandle::getDirectoryHandle):
        (WebCore::FileSystemDirectoryHandle::removeEntry):
        (WebCore::FileSystemDirectoryHandle::resolve):
        * Modules/filesystemaccess/FileSystemDirectoryHandle.h:
        (isType):
        * Modules/filesystemaccess/FileSystemFileHandle.cpp:
        (WebCore::FileSystemFileHandle::create):
        (WebCore::FileSystemFileHandle::FileSystemFileHandle):
        * Modules/filesystemaccess/FileSystemFileHandle.h:
        (isType):
        * Modules/filesystemaccess/FileSystemHandle.cpp:
        (WebCore::FileSystemHandle::FileSystemHandle):
        (WebCore::FileSystemHandle::isSameEntry const):
        (WebCore::FileSystemHandle::isSameEntry): Deleted.
        * Modules/filesystemaccess/FileSystemHandle.h:
        (WebCore::FileSystemHandle::impl const):
        * Modules/filesystemaccess/FileSystemHandle.idl:
        * Modules/filesystemaccess/FileSystemHandleImpl.h: Added.
        (WebCore::FileSystemHandleImpl::~FileSystemHandleImpl):
        * Modules/storage/DummyStorageProvider.h:
        * Modules/storage/StorageConnection.h:
        * Modules/storage/StorageManager.cpp:
        (WebCore::connectionInfo):
        (WebCore::StorageManager::persisted):
        (WebCore::StorageManager::persist):
        (WebCore::StorageManager::fileSystemAccessGetDirectory):
        * Modules/storage/StorageManager.h:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSFileSystemHandleCustom.cpp: Added.
        (WebCore::toJS):
        (WebCore::toJSNewlyCreated):
        * bindings/js/WorkerModuleScriptLoader.h:
        * workers/service/ServiceWorkerJob.h:

2021-09-24  Youenn Fablet  <youenn@apple.com>

        DOMPromiseDeferred should be able to handle Ref/RefPtr resolution values for interface types
        https://bugs.webkit.org/show_bug.cgi?id=230603

        Reviewed by Sihui Liu.

        Refactoring to allow DOMPromiseDeferred<IDLInterface<T>> to be able to call settle on ExceptionOr<Ref<T>>&&.
        Apply new support on PeerConnectionBackend::generateCertificate.
        Small refactoring to use reject instead of settle in ApplePaySetup.
        No expected change of behavior.

        * Modules/applepay/ApplePaySetup.cpp:
        (WebCore::ApplePaySetup::getSetupFeatures):
        (WebCore::ApplePaySetup::begin):
        * Modules/mediastream/PeerConnectionBackend.cpp:
        (WebCore::PeerConnectionBackend::generateCertificate):
        * Modules/mediastream/libwebrtc/LibWebRTCCertificateGenerator.cpp:
        (WebCore::LibWebRTCCertificateGenerator::RTCCertificateGeneratorCallback::RTCCertificateGeneratorCallback):
        (WebCore::LibWebRTCCertificateGenerator::generateCertificate):
        * Modules/mediastream/libwebrtc/LibWebRTCCertificateGenerator.h:
        * bindings/js/JSDOMPromiseDeferred.h:
        (WebCore::DOMPromiseDeferred::resolve):
        (WebCore::DOMPromiseDeferred::settle):
        (WebCore::DOMPromiseDeferred<IDLInterface<T>>::resolve):
        (WebCore::DOMPromiseDeferred<IDLInterface<T>>::settle):
        * testing/Internals.cpp:
        (WebCore::Internals::sendH2Ping):

2021-09-23  Rob Buis  <rbuis@igalia.com>

        RenderElement::moveLayers should take reference
        https://bugs.webkit.org/show_bug.cgi?id=230706

        Reviewed by Simon Fraser.

        RenderElement::moveLayers should take reference for newParent
        since it is always non-null.

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::moveLayers):
        * rendering/RenderElement.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::insertOnlyThisLayer):

2021-09-23  Simon Fraser  <simon.fraser@apple.com>

        Move ScrollSnapAnimatorState's ScrollAnimationMomentum into ScrollingEffectsController
        https://bugs.webkit.org/show_bug.cgi?id=230732

        Reviewed by Wenson Hsieh.

        Continuing the work to move all animations into ScrollingEffectsController, move
        the ScrollAnimationMomentum that ScrollSnapAnimatorState uses into ScrollingEffectsController.

        ScrollSnapAnimatorState is no longer a ScrollAnimationClient.

        ScrollingEffectsController::updateScrollSnapAnimatingState(), which is Mac-only code
        (but probably doens't need to be) can now consult the animation directly.

        * platform/ScrollSnapAnimatorState.cpp:
        (WebCore::ScrollSnapAnimatorState::setupAnimationForState):
        (WebCore::ScrollSnapAnimatorState::teardownAnimationForState):
        (WebCore::ScrollSnapAnimatorState::currentAnimatedScrollOffset const): Deleted.
        (WebCore::ScrollSnapAnimatorState::scrollExtentsForAnimation): Deleted.
        * platform/ScrollSnapAnimatorState.h:
        (WebCore::ScrollSnapAnimatorState::ScrollSnapAnimatorState):
        * platform/ScrollingEffectsController.cpp:
        (WebCore::ScrollingEffectsController::startMomentumScrollWithInitialVelocity):
        (WebCore::ScrollingEffectsController::setSnapOffsetsInfo):
        * platform/ScrollingEffectsController.h:
        * platform/mac/ScrollingEffectsController.mm:
        (WebCore::ScrollingEffectsController::updateScrollSnapAnimatingState):

2021-09-23  Simon Fraser  <simon.fraser@apple.com>

        Move the ScrollAnimationSmooth from ScrollAnimator into ScrollingEffectsController
        https://bugs.webkit.org/show_bug.cgi?id=230720

        Reviewed by Tim Horton.

        ScrollingEffectsController is where all the ScrollAnimations will live. The first
        step is to move ScrollAnimator's m_scrollAnimation there; this is used for
        keyboard scrolling, and CSS smooth scrolling.

        ScrollingEffectsController becomes a ScrollAnimationClient (and ScrollAnimator stops
        being one), so needs a little bit more glue code.

        Add type traits for ScrollAnimator subclasses because we need to downcast<> them
        here and in future patches.

        Move some code from ScrollAnimatorMac into ScrollAnimator since it's not platform
        specific.

        ScrollAnimatorGeneric is almost entirely gutted, and code pushed into ScrollingEffectsController.
        Make a ScrollAnimationKinetic in ScrollingEffectsController for this code path.

        * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.h:
        * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.mm:
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::immediateScrollOnAxis): Deleted.
        * platform/ScrollAnimation.h:
        (WebCore::ScrollAnimation::ScrollAnimation):
        (WebCore::ScrollAnimation::type const):
        * platform/ScrollAnimationKinetic.cpp:
        (WebCore::ScrollAnimationKinetic::ScrollAnimationKinetic):
        * platform/ScrollAnimationKinetic.h:
        * platform/ScrollAnimationMomentum.cpp:
        (WebCore::ScrollAnimationMomentum::ScrollAnimationMomentum):
        * platform/ScrollAnimationMomentum.h:
        * platform/ScrollAnimationSmooth.cpp:
        (WebCore::ScrollAnimationSmooth::ScrollAnimationSmooth):
        * platform/ScrollAnimationSmooth.h:
        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::ScrollAnimator):
        (WebCore::ScrollAnimator::scroll):
        (WebCore::ScrollAnimator::scrollToPositionWithoutAnimation):
        (WebCore::ScrollAnimator::scrollToPositionWithAnimation):
        (WebCore::ScrollAnimator::retargetRunningAnimation):
        (WebCore::ScrollAnimator::setScrollBehaviorStatus):
        (WebCore::ScrollAnimator::scrollBehaviorStatus const):
        (WebCore::ScrollAnimator::adjustScrollPositionToBoundsIfNecessary):
        (WebCore::ScrollAnimator::adjustScrollPositionIfNecessary const):
        (WebCore::ScrollAnimator::immediateScrollByWithoutContentEdgeConstraints):
        (WebCore::ScrollAnimator::immediateScrollBy):
        (WebCore::ScrollAnimator::cancelAnimations):
        (WebCore::ScrollAnimator::contentsSizeChanged):
        (WebCore::ScrollAnimator::immediateScrollOnAxis): Deleted.
        (WebCore::ScrollAnimator::contentsSizeChanged const): Deleted.
        (WebCore::ScrollAnimator::scrollAnimationDidUpdate): Deleted.
        (WebCore::ScrollAnimator::scrollAnimationDidEnd): Deleted.
        (WebCore::ScrollAnimator::scrollExtentsForAnimation): Deleted.
        * platform/ScrollAnimator.h:
        * platform/ScrollingEffectsController.cpp:
        (WebCore::ScrollingEffectsController::startAnimatedScrollToDestination):
        (WebCore::ScrollingEffectsController::regargetAnimatedScroll):
        (WebCore::ScrollingEffectsController::stopAnimatedScroll):
        (WebCore::ScrollingEffectsController::processWheelEventForKineticScrolling):
        (WebCore::ScrollingEffectsController::contentsSizeChanged):
        (WebCore::ScrollingEffectsController::activeScrollSnapIndexForAxis const):
        (WebCore::ScrollingEffectsController::scrollToOffsetForAnimation):
        (WebCore::ScrollingEffectsController::scrollAnimationDidUpdate):
        (WebCore::ScrollingEffectsController::scrollAnimationDidEnd):
        (WebCore::ScrollingEffectsController::scrollExtentsForAnimation):
        * platform/ScrollingEffectsController.h:
        (WebCore::ScrollingEffectsControllerClient::rubberBandingStateChanged):
        * platform/generic/ScrollAnimatorGeneric.cpp:
        (WebCore::ScrollAnimatorGeneric::ScrollAnimatorGeneric):
        (WebCore::ScrollAnimatorGeneric::handleWheelEvent):
        (WebCore::ScrollAnimatorGeneric::scrollToPositionWithoutAnimation): Deleted.
        (WebCore::ScrollAnimatorGeneric::scrollAnimationDidUpdate): Deleted.
        * platform/generic/ScrollAnimatorGeneric.h:
        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::adjustScrollPositionIfNecessary const): Deleted.
        (WebCore::ScrollAnimatorMac::adjustScrollPositionToBoundsIfNecessary): Deleted.
        (WebCore::ScrollAnimatorMac::immediateScrollByWithoutContentEdgeConstraints): Deleted.
        (WebCore::ScrollAnimatorMac::immediateScrollBy): Deleted.
        * platform/mac/ScrollingEffectsController.mm:
        (WebCore::ScrollingEffectsController::updateScrollSnapAnimatingState):

2021-09-23  Nikos Mouchtaris  <nmouchtaris@apple.com>

        Implement atan, acos, asin, atan2 calc functions
        https://bugs.webkit.org/show_bug.cgi?id=229775

        Reviewed by Simon Fraser.

        Added support for calc functions asin, acos, atan, atan2. Involved adding function CSS  
        keywords and handling for parsing these functions and their arguments as well as computing 
        the result based on the arguments. Spec for these functions: 
        https://drafts.csswg.org/css-values-4/#trig-funcs.

        Tests: imported/w3c/web-platform-tests/css/css-values/acos-asin-atan-atan2-computed.html
               imported/w3c/web-platform-tests/css/css-values/acos-asin-atan-atan2-invalid.html
               imported/w3c/web-platform-tests/css/css-values/acos-asin-atan-atan2-serialize.html

        * css/CSSValueKeywords.in:
        * css/calc/CSSCalcExpressionNodeParser.cpp:
        (WebCore::CSSCalcExpressionNodeParser::parseCalcFunction):
        * css/calc/CSSCalcOperationNode.cpp:
        (WebCore::determineCategory):
        (WebCore::functionFromOperator):
        (WebCore::CSSCalcOperationNode::createInverseTrig):
        (WebCore::CSSCalcOperationNode::createAtan2):
        (WebCore::CSSCalcOperationNode::combineChildren):
        (WebCore::CSSCalcOperationNode::simplifyNode):
        (WebCore::CSSCalcOperationNode::primitiveType const):
        (WebCore::CSSCalcOperationNode::doubleValue const):
        (WebCore::functionPrefixForOperator):
        (WebCore::CSSCalcOperationNode::evaluateOperator):
        * css/calc/CSSCalcOperationNode.h:
        * css/calc/CSSCalcValue.cpp:
        (WebCore::createCSS):
        (WebCore::CSSCalcValue::isCalcFunction):
        * platform/calc/CalcExpressionOperation.cpp:
        (WebCore::CalcExpressionOperation::evaluate const):
        Return converted to degrees based on spec: https://drafts.csswg.org/css-values-4/#trig-funcs.
        * platform/calc/CalcOperator.cpp:
        (WebCore::operator<<):
        * platform/calc/CalcOperator.h:

2021-09-23  Tim Horton  <timothy_horton@apple.com>

        Move more linked-on-or-after checks to WebCore::linkedOnOrAfter()
        https://bugs.webkit.org/show_bug.cgi?id=230694

        Reviewed by Wenson Hsieh.

        * platform/cocoa/VersionChecks.h:
        Add more versions, move DYLD_IOS_VERSION_FIRST_WITH_IOS_APPS_ON_MACOS
        inline, and sort some that are out of order.

2021-09-23  Devin Rousso  <drousso@apple.com>

        Web Inspector: Graphics: add instrumentation for new `CanvasRenderingContext2DSettings`
        https://bugs.webkit.org/show_bug.cgi?id=225180
        <rdar://problem/77587429>

        Reviewed by BJ Burg.

        * inspector/InspectorCanvas.cpp:
        (WebCore::buildObjectForCanvasContextAttributes): Added.
        (WebCore::InspectorCanvas::buildObjectForCanvas):
        (WebCore::InspectorCanvas::buildInitialState):
        Unify the two cases where we fetch canvas attributes into a single method so that both get
        the same data. This means that the canvas recorder now also uses `Canvas.ContextAttributes`.

2021-09-23  Antoine Quint  <graouts@webkit.org>

        [Media Controls] Allow for a brightness control
        https://bugs.webkit.org/show_bug.cgi?id=230697
        <rdar://problem/79956277>

        Reviewed by Dean Jackson.

        Add a new brightness button to control a new MediaControlsHost "brightness" property
        which is currently only a stub.

        * DerivedSources-input.xcfilelist:
        * DerivedSources.make:
        * Modules/mediacontrols/MediaControlsHost.h:
        * Modules/mediacontrols/MediaControlsHost.idl:
        * Modules/modern-media-controls/controls/brightness-button.js: Added.
        (BrightnessButton):
        * Modules/modern-media-controls/controls/icon-service.js:
        * Modules/modern-media-controls/controls/media-controls.js:
        * Modules/modern-media-controls/images/iOS/Brightness.svg: Added.
        * Modules/modern-media-controls/images/macOS/Brightness.svg: Added.
        * Modules/modern-media-controls/js-files:
        * Modules/modern-media-controls/media/brightness-support.js: Added.
        (BrightnessSupport.prototype.get control):
        (BrightnessSupport.prototype.controlValueWillStartChanging):
        (BrightnessSupport.prototype.controlValueDidChange):
        (BrightnessSupport.prototype.controlValueDidStopChanging):
        (BrightnessSupport):
        * Modules/modern-media-controls/media/media-controller.js:
        (MediaController.prototype._supportingObjectClasses):

2021-09-23  Simon Fraser  <simon.fraser@apple.com>

        Unify more media-related WebCore source files
        https://bugs.webkit.org/show_bug.cgi?id=230666

        Reviewed by Tim Horton.

        Unified build fixes (some hacky). There's lots of soft linking cleanup and
        code de-duplication that would allow for more unification.

        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/avfoundation/objc/CDMInstanceFairPlayStreamingAVFObjC.mm:
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::loadSession):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::removeSessionData):
        * platform/graphics/avfoundation/objc/CDMSessionAVContentKeySession.h:
        * platform/graphics/avfoundation/objc/CDMSessionAVContentKeySession.mm:
        (WebCore::CDMSessionAVContentKeySession::releaseKeys):
        * platform/graphics/avfoundation/objc/CDMSessionAVStreamSession.h:
        * platform/graphics/avfoundation/objc/CDMSessionAVStreamSession.mm:
        (WebCore::CDMSessionAVStreamSession::releaseKeys):
        (WebCore::isEqual2):
        (WebCore::CDMSessionAVStreamSession::update):
        (WebCore::isEqual): Deleted.
        * platform/graphics/avfoundation/objc/CDMSessionMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm:
        * platform/graphics/mac/ComplexTextControllerCoreText.mm:
        * platform/network/mac/UTIUtilities.mm:
        * platform/text/TextEncodingDetector.h:

2021-09-23  Antoine Quint  <graouts@webkit.org>

        [Media Controls] Allow for a single mute and volume button
        https://bugs.webkit.org/show_bug.cgi?id=230692
        <rdar://problem/79956248>

        Reviewed by Dean Jackson.

        Up to now, the mute button in the controls bar would act as a toggle for the "muted" property on the media element.
        Hovering that button would make a slider appear that would allow the "volume" property of the media element to be
        changed as well.

        We now allow for a single button with a built-in range indicator to be used for mute and volume. Clicking on the
        button without moving will toggle the mute status, while moving the mouse up or down will adjust the volume
        and show a pill-link range indicator showing the current volume.

        This new control is a Button subclass called RangeButton. The new VolumeButton class extends it to provide the
        correct icon depending on the volume and muted state. The new MuteAndVolumeSupport class is used in conjunction
        with VolumeButton.

        To indicate that media controls want to use this new style, MediaControls subclasses can override the
        usesSingleMuteAndVolumeButton getter to return true. Currently it's false everywhere until we decide
        to use this style.

        * DerivedSources-input.xcfilelist:
        * DerivedSources.make:
        * Modules/modern-media-controls/controls/media-controls.js:
        (MediaControls.prototype.get usesSingleMuteAndVolumeButton):
        * Modules/modern-media-controls/controls/range-button.css: Added.
        (button.range > div.indicator):
        (button.range > div.indicator > div.fill):
        * Modules/modern-media-controls/controls/range-button.js: Added.
        (RangeButton.prototype.get value):
        (RangeButton.prototype.set value):
        (RangeButton.prototype.commitProperty):
        (RangeButton.prototype.handleEvent):
        (RangeButton.prototype._handlePointerdown):
        (RangeButton.prototype._handlePointermove):
        (RangeButton.prototype._handlePointerup):
        * Modules/modern-media-controls/controls/volume-button.js: Added.
        (VolumeButton):
        (VolumeButton.prototype.get volume):
        (VolumeButton.prototype.set volume):
        (VolumeButton.prototype.get muted):
        (VolumeButton.prototype.set muted):
        (VolumeButton.prototype.set usesLTRUserInterfaceLayoutDirection):
        (VolumeButton.prototype.layout):
        * Modules/modern-media-controls/js-files:
        * Modules/modern-media-controls/media/media-controller.js:
        (MediaController.prototype._supportingObjectClasses):
        * Modules/modern-media-controls/media/mute-and-volume-support.js: Added.
        (MuteAndVolumeSupport.prototype.get control):
        (MuteAndVolumeSupport.prototype.get mediaEvents):
        (MuteAndVolumeSupport.prototype.controlValueWillStartChanging):
        (MuteAndVolumeSupport.prototype.controlValueDidChange):
        (MuteAndVolumeSupport.prototype.controlValueDidStopChanging):
        (MuteAndVolumeSupport.prototype.buttonWasPressed):
        (MuteAndVolumeSupport.prototype.syncControl):
        (MuteAndVolumeSupport):
        * WebCore.xcodeproj/project.pbxproj:

2021-09-23  Tim Horton  <timothy_horton@apple.com>

        shouldAllowPictureInPictureMediaPlayback should use WebCore's linkedOnOrAfter()
        https://bugs.webkit.org/show_bug.cgi?id=230674

        Reviewed by Simon Fraser.

        * platform/cocoa/VersionChecks.h:
        Remove the unused `FirstWithNetworkCache` version, and add one for PIP.

2021-09-23  Tim Nguyen  <ntim@apple.com>

        AX: Stop exposing isInert & ignoredFromModalPresence in AXCoreObject & AXIsolatedObject
        https://bugs.webkit.org/show_bug.cgi?id=230690

        Reviewed by Chris Fleizach.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::defaultObjectInclusion const):
        (WebCore::AccessibilityObject::isInert const): Deleted.
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityObjectInterface.h:
        * accessibility/isolatedtree/AXIsolatedObject.cpp:
        (WebCore::AXIsolatedObject::ignoredFromModalPresence const): Deleted.
        (WebCore::AXIsolatedObject::isInert const): Deleted.
        * accessibility/isolatedtree/AXIsolatedObject.h:

2021-09-23  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Move Layout::Run under InlineDisplay and rename it to Box
        https://bugs.webkit.org/show_bug.cgi?id=230643

        Reviewed by Antti Koivisto.

        These fragments of inline content should be considered runs only up to the point where we finished breaking the line. Soon after they gain horizontal (and later vertical) geometries, we
        should call them boxes.

        * WebCore.xcodeproj/project.pbxproj:
        * display/DisplayTreeBuilder.cpp:
        (WebCore::Display::TreeBuilder::buildInlineDisplayTree):
        * display/css/DisplayBoxFactory.cpp:
        (WebCore::Display::BoxFactory::displayBoxForTextRun const):
        * display/css/DisplayBoxFactory.h:
        * display/css/DisplayTextBox.cpp:
        (WebCore::Display::TextBox::TextBox):
        (WebCore::Display::m_text):
        * display/css/DisplayTextBox.h:
        (WebCore::Display::TextBox::expansion const):
        (WebCore::Display::TextBox::text const):
        * layout/Verification.cpp:
        (WebCore::Layout::checkForMatchingNonTextRuns):
        (WebCore::Layout::checkForMatchingTextRuns):
        (WebCore::Layout::outputMismatchingComplexLineInformationIfNeeded):
        * layout/formattingContexts/inline/InlineDisplayContentBuilder.cpp:
        (WebCore::Layout::InlineDisplayContentBuilder::build):
        (WebCore::Layout::InlineDisplayContentBuilder::createBoxesAndUpdateGeometryForLineContent):
        (WebCore::Layout::InlineDisplayContentBuilder::createBoxesAndUpdateGeometryForLineSpanningInlineBoxes):
        (WebCore::Layout::InlineDisplayContentBuilder::collectInkOverflowForInlineBoxes):
        (WebCore::Layout::InlineDisplayContentBuilder::createRunsAndUpdateGeometryForLineContent): Deleted.
        (WebCore::Layout::InlineDisplayContentBuilder::createRunsAndUpdateGeometryForLineSpanningInlineBoxes): Deleted.
        (WebCore::Layout::InlineDisplayContentBuilder::collectInkOverflowForInlineBoxRuns): Deleted.
        * layout/formattingContexts/inline/InlineDisplayContentBuilder.h:
        * layout/formattingContexts/inline/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::layoutInFlowContent):
        (WebCore::Layout::InlineFormattingContext::lineLayout):
        (WebCore::Layout::InlineFormattingContext::computeStaticPositionForOutOfFlowContent):
        (WebCore::Layout::InlineFormattingContext::computeGeometryForLineContent):
        (WebCore::Layout::InlineFormattingContext::invalidateFormattingState):
        * layout/formattingContexts/inline/InlineFormattingState.h:
        (WebCore::Layout::InlineFormattingState::lineBoxes const):
        (WebCore::Layout::InlineFormattingState::addLineBox):
        (WebCore::Layout::InlineFormattingState::boxes const):
        (WebCore::Layout::InlineFormattingState::boxes):
        (WebCore::Layout::InlineFormattingState::addBoxes):
        (WebCore::Layout::InlineFormattingState::clearLineAndBoxes):
        (WebCore::Layout::InlineFormattingState::shrinkToFit):
        (WebCore::Layout::InlineFormattingState::runs const): Deleted.
        (WebCore::Layout::InlineFormattingState::runs): Deleted.
        (WebCore::Layout::InlineFormattingState::addRuns): Deleted.
        (WebCore::Layout::InlineFormattingState::clearLineAndRuns): Deleted.
        * layout/formattingContexts/inline/InlineLine.h:
        (WebCore::Layout::Line::Run::expansion const):
        (WebCore::Layout::Line::Run::setExpansion):
        * layout/formattingContexts/inline/display/InlineLineRun.h:
        (WebCore::InlineDisplay::Box::logicalRect const):
        (WebCore::InlineDisplay::Box::inkOverflow const):
        (WebCore::InlineDisplay::Box::logicalTop const):
        (WebCore::InlineDisplay::Box::logicalBottom const):
        (WebCore::InlineDisplay::Box::logicalLeft const):
        (WebCore::InlineDisplay::Box::logicalRight const):
        (WebCore::InlineDisplay::Box::logicalWidth const):
        (WebCore::InlineDisplay::Box::logicalHeight const):
        (WebCore::InlineDisplay::Box::moveVertically):
        (WebCore::InlineDisplay::Box::adjustInkOverflow):
        (WebCore::InlineDisplay::Box::layoutBox const):
        (WebCore::InlineDisplay::Box::Box):
        (WebCore::InlineDisplay::Box::Text::Text):
        (WebCore::Layout::Run::Text::start const): Deleted.
        (WebCore::Layout::Run::Text::end const): Deleted.
        (WebCore::Layout::Run::Text::length const): Deleted.
        (WebCore::Layout::Run::Text::originalContent const): Deleted.
        (WebCore::Layout::Run::Text::renderedContent const): Deleted.
        (WebCore::Layout::Run::Text::hasHyphen const): Deleted.
        (WebCore::Layout::Run::isText const): Deleted.
        (WebCore::Layout::Run::isSoftLineBreak const): Deleted.
        (WebCore::Layout::Run::isLineBreakBox const): Deleted.
        (WebCore::Layout::Run::isLineBreak const): Deleted.
        (WebCore::Layout::Run::isAtomicInlineLevelBox const): Deleted.
        (WebCore::Layout::Run::isInlineBox const): Deleted.
        (WebCore::Layout::Run::isNonRootInlineBox const): Deleted.
        (WebCore::Layout::Run::isRootInlineBox const): Deleted.
        (WebCore::Layout::Run::isGenericInlineLevelBox const): Deleted.
        (WebCore::Layout::Run::isInlineLevelBox const): Deleted.
        (WebCore::Layout::Run::isNonRootInlineLevelBox const): Deleted.
        (WebCore::Layout::Run::type const): Deleted.
        (WebCore::Layout::Run::hasContent const): Deleted.
        (WebCore::Layout::Run::logicalRect const): Deleted.
        (WebCore::Layout::Run::inkOverflow const): Deleted.
        (WebCore::Layout::Run::logicalTop const): Deleted.
        (WebCore::Layout::Run::logicalBottom const): Deleted.
        (WebCore::Layout::Run::logicalLeft const): Deleted.
        (WebCore::Layout::Run::logicalRight const): Deleted.
        (WebCore::Layout::Run::logicalWidth const): Deleted.
        (WebCore::Layout::Run::logicalHeight const): Deleted.
        (WebCore::Layout::Run::moveVertically): Deleted.
        (WebCore::Layout::Run::adjustInkOverflow): Deleted.
        (WebCore::Layout::Run::text): Deleted.
        (WebCore::Layout::Run::text const): Deleted.
        (WebCore::Layout::Run::expansion const): Deleted.
        (WebCore::Layout::Run::layoutBox const): Deleted.
        (WebCore::Layout::Run::style const): Deleted.
        (WebCore::Layout::Run::lineIndex const): Deleted.
        (WebCore::Layout::Run::Run): Deleted.
        (WebCore::Layout::Run::Text::Text): Deleted.
        * layout/formattingContexts/table/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::setUsedGeometryForCells):
        * layout/integration/LayoutIntegrationInlineContent.cpp:
        (WebCore::LayoutIntegration::InlineContent::hasContent const):
        (WebCore::LayoutIntegration:: const):
        (WebCore::LayoutIntegration::InlineContent::~InlineContent):
        (WebCore::LayoutIntegration::InlineContent::indexForBox const):
        (WebCore::LayoutIntegration::InlineContent::firstBoxForLayoutBox const):
        (WebCore::LayoutIntegration::InlineContent::firstBoxIndexForLayoutBox const):
        (WebCore::LayoutIntegration::InlineContent::nonRootInlineBoxIndexesForLayoutBox const):
        (WebCore::LayoutIntegration::InlineContent::releaseCaches):
        (WebCore::LayoutIntegration::InlineContent::shrinkToFit):
        (WebCore::LayoutIntegration::InlineContent::indexForRun const): Deleted.
        (WebCore::LayoutIntegration::InlineContent::firstRunForLayoutBox const): Deleted.
        (WebCore::LayoutIntegration::InlineContent::firstRunIndexForLayoutBox const): Deleted.
        * layout/integration/LayoutIntegrationInlineContent.h:
        (WebCore::LayoutIntegration::InlineContent::lineForBox const):
        (WebCore::LayoutIntegration::InlineContent::traverseNonRootInlineBoxes):
        (WebCore::LayoutIntegration::InlineContent::lineForRun const): Deleted.
        * layout/integration/LayoutIntegrationInlineContentBuilder.cpp:
        (WebCore::LayoutIntegration::InlineContentBuilder::build const):
        (WebCore::LayoutIntegration::InlineContentBuilder::createDisplayLines const):
        * layout/integration/LayoutIntegrationLine.h:
        (WebCore::LayoutIntegration::Line::Line):
        (WebCore::LayoutIntegration::Line::firstBoxIndex const):
        (WebCore::LayoutIntegration::Line::boxCount const):
        (WebCore::LayoutIntegration::Line::firstRunIndex const): Deleted.
        (WebCore::LayoutIntegration::Line::runCount const): Deleted.
        * layout/integration/LayoutIntegrationLineIteratorModernPath.h:
        (WebCore::LayoutIntegration::LineIteratorModernPath::firstRun const):
        (WebCore::LayoutIntegration::LineIteratorModernPath::lastRun const):
        * layout/integration/LayoutIntegrationLineLayout.cpp:
        (WebCore::LayoutIntegration::LineLayout::layout):
        (WebCore::LayoutIntegration::LineLayout::textRunsFor const):
        (WebCore::LayoutIntegration::LineLayout::runFor const):
        (WebCore::LayoutIntegration::LineLayout::firstInlineBoxRect const):
        (WebCore::LayoutIntegration::LineLayout::paint):
        (WebCore::LayoutIntegration::LineLayout::hitTest):
        (WebCore::LayoutIntegration::LineLayout::paintTextBoxUsingPhysicalCoordinates):
        (WebCore::LayoutIntegration::LineLayout::paintTextRunUsingPhysicalCoordinates): Deleted.
        * layout/integration/LayoutIntegrationLineLayout.h:
        * layout/integration/LayoutIntegrationPagination.cpp:
        (WebCore::LayoutIntegration::makeAdjustedContent):
        * layout/integration/LayoutIntegrationRunIterator.cpp:
        (WebCore::LayoutIntegration::PathRun::line const):
        (WebCore::LayoutIntegration::textRunFor):
        * layout/integration/LayoutIntegrationRunIterator.h:
        (WebCore::LayoutIntegration::PathRun::inlineBox const):
        * layout/integration/LayoutIntegrationRunIteratorModernPath.h:
        (WebCore::LayoutIntegration::RunIteratorModernPath::RunIteratorModernPath):
        (WebCore::LayoutIntegration::RunIteratorModernPath::isText const):
        (WebCore::LayoutIntegration::RunIteratorModernPath::rect const):
        (WebCore::LayoutIntegration::RunIteratorModernPath::isLineBreak const):
        (WebCore::LayoutIntegration::RunIteratorModernPath::hasHyphen const):
        (WebCore::LayoutIntegration::RunIteratorModernPath::text const):
        (WebCore::LayoutIntegration::RunIteratorModernPath::start const):
        (WebCore::LayoutIntegration::RunIteratorModernPath::end const):
        (WebCore::LayoutIntegration::RunIteratorModernPath::length const):
        (WebCore::LayoutIntegration::RunIteratorModernPath::offsetForPosition const):
        (WebCore::LayoutIntegration::RunIteratorModernPath::positionForOffset const):
        (WebCore::LayoutIntegration::RunIteratorModernPath::selectableRange const):
        (WebCore::LayoutIntegration::RunIteratorModernPath::renderer const):
        (WebCore::LayoutIntegration::RunIteratorModernPath::traverseNextTextRun):
        (WebCore::LayoutIntegration::RunIteratorModernPath::traverseNextOnLine):
        (WebCore::LayoutIntegration::RunIteratorModernPath::traversePreviousOnLine):
        (WebCore::LayoutIntegration::RunIteratorModernPath::operator== const):
        (WebCore::LayoutIntegration::RunIteratorModernPath::atEnd const):
        (WebCore::LayoutIntegration::RunIteratorModernPath::box const):
        (WebCore::LayoutIntegration::RunIteratorModernPath::traverseNextLeaf):
        (WebCore::LayoutIntegration::RunIteratorModernPath::traversePreviousLeaf):
        (WebCore::LayoutIntegration::RunIteratorModernPath::setAtEnd):
        (WebCore::LayoutIntegration::RunIteratorModernPath::boxes const):
        (WebCore::LayoutIntegration::RunIteratorModernPath::line const):
        (WebCore::LayoutIntegration::RunIteratorModernPath::createTextRun const):
        (WebCore::LayoutIntegration::RunIteratorModernPath::run const): Deleted.
        (WebCore::LayoutIntegration::RunIteratorModernPath::runs const): Deleted.
        * layout/layouttree/LayoutTreeBuilder.cpp:
        (WebCore::Layout::showInlineTreeAndRuns):
        * rendering/TextBoxPainter.cpp:
        (WebCore::TextBoxPainter::TextBoxPainter):
        * rendering/TextBoxPainter.h:
        * rendering/TextPainter.cpp:
        (WebCore::TextPainter::clearGlyphDisplayLists):

2021-09-23  Alan Bujtas  <zalan@apple.com>

        [IFC][Integration] RenderDeprecatedFlexibleBox::setIsStretchingChildren is unused after r282873
        https://bugs.webkit.org/show_bug.cgi?id=230627

        Reviewed by Antti Koivisto.

        * rendering/RenderDeprecatedFlexibleBox.h:

2021-09-23  Antti Koivisto  <antti@apple.com>

        Factor LegacyInlineFlowBox painting into a class
        https://bugs.webkit.org/show_bug.cgi?id=230683

        Reviewed by Alan Bujtas.

        Introduce InlineBoxPainter, similar to TextBoxPainter.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/InlineBoxPainter.cpp: Added.
        (WebCore::InlineBoxPainter::InlineBoxPainter):
        (WebCore::InlineBoxPainter::paint):
        (WebCore::clipRectForNinePieceImageStrip):
        (WebCore::InlineBoxPainter::paintMask):
        (WebCore::InlineBoxPainter::paintDecorations):
        (WebCore::InlineBoxPainter::style const):
        (WebCore::InlineBoxPainter::constrainToLineTopAndBottomIfNeeded const):
        (WebCore::InlineBoxPainter::paintFillLayers):
        (WebCore::InlineBoxPainter::paintFillLayer):
        (WebCore::InlineBoxPainter::paintBoxShadow):
        * rendering/InlineBoxPainter.h: Added.
        (WebCore::InlineBoxPainter::renderer const):
        (WebCore::InlineBoxPainter::isHorizontal const):
        * rendering/LegacyInlineFlowBox.cpp:
        (WebCore::LegacyInlineFlowBox::paint):
        (WebCore::LegacyInlineFlowBox::paintFillLayers): Deleted.
        (WebCore::LegacyInlineFlowBox::paintFillLayer): Deleted.
        (WebCore::LegacyInlineFlowBox::paintBoxShadow): Deleted.
        (WebCore::LegacyInlineFlowBox::constrainToLineTopAndBottomIfNeeded const): Deleted.
        (WebCore::clipRectForNinePieceImageStrip): Deleted.
        (WebCore::LegacyInlineFlowBox::paintBoxDecorations): Deleted.
        (WebCore::LegacyInlineFlowBox::paintMask): Deleted.
        * rendering/LegacyInlineFlowBox.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::getBackgroundRoundedRect const):
        (WebCore::RenderBoxModelObject::backgroundRoundedRectAdjustedForBleedAvoidance const):
        (WebCore::RenderBoxModelObject::paintMaskForTextFillBox):
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        (WebCore::RenderBoxModelObject::boxShadowShouldBeAppliedToBackground const):
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::boxShadowShouldBeAppliedToBackground const):
        * rendering/RenderImage.h:
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::boxShadowShouldBeAppliedToBackground const):
        * rendering/RenderTableCell.h:

2021-09-23  Andres Gonzalez  <andresg_22@apple.com>

        Remove AXDRTElementIdAttribute from the AX object platform wrapper interface.
        https://bugs.webkit.org/show_bug.cgi?id=230657
        <rdar://problem/83424767>

        Reviewed by Chris Fleizach.

        No change in functionality.

        AXDRTElementIdAttribute is a duplicate of AXDOMIdentifier, thus removing
        an unnecessary attribute from the platform wrapper's
        accessibilityAttributeValue method.

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
        * accessibility/win/AccessibilityObjectWrapperWin.cpp:
        (WebCore::AccessibilityObjectWrapper::accessibilityAttributeValue):

2021-09-23  Tim Nguyen  <ntim@apple.com>

        Use visibleToHitTesting() in RenderLayerBacking::updateAfterDescendants() instead of pointer-events check
        https://bugs.webkit.org/show_bug.cgi?id=230681

        Reviewed by Antti Koivisto.

        The new check should account for inert as well once we implement it in RenderStyle.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateAfterDescendants):

2021-09-23  Tim Nguyen  <ntim@apple.com>

        AX: Split out isInert from isAXHidden on AccessibilityObject
        https://bugs.webkit.org/show_bug.cgi?id=230680

        Reviewed by Antti Koivisto.

        Reasons to do this are:
        - Naming of isAXHidden is a bit of a lie
        - We don't want to inherit inert state from parent to child like we do for aria-hidden, especially
        in the document is blocked by modal dialog case, where the modal should be interactable unlike its ancestors/siblings.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::isAXHidden const):
        (WebCore::AccessibilityObject::isInert const):
        (WebCore::AccessibilityObject::defaultObjectInclusion const):
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityObjectInterface.h:
        * accessibility/isolatedtree/AXIsolatedObject.cpp:
        (WebCore::AXIsolatedObject::isInert const):
        * accessibility/isolatedtree/AXIsolatedObject.h:

2021-09-23  Tim Nguyen  <ntim@apple.com>

        Replace `axObject->isAXHidden() || axObject->isDOMHidden()` with `axObject->isHidden()`
        https://bugs.webkit.org/show_bug.cgi?id=230678

        Reviewed by Antti Koivisto.

        No behaviour change. The definition of isHidden is:

        `bool isHidden() const override { return isAXHidden() || isDOMHidden(); }`

        * inspector/InspectorAuditAccessibilityObject.cpp:
        (WebCore::InspectorAuditAccessibilityObject::getComputedProperties):
        * inspector/agents/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::buildObjectForAccessibilityProperties):

2021-09-23  Jean-Yves Avenard  <jya@apple.com>

        Opus and Vorbis codecs aren't available on iPad.
        https://bugs.webkit.org/show_bug.cgi?id=230595
        rdar://problem/83382734

        Vorbis and Opus are usable on platforms other than macOS and are being checked
        at runtime.

        Reviewed by Eric Carlson.

        Covered by existing tests.

        * platform/audio/PlatformMediaSessionManager.cpp:
        (WebCore::PlatformMediaSessionManager::vorbisDecoderEnabled):
        (WebCore::PlatformMediaSessionManager::setVorbisDecoderEnabled):
        (WebCore::PlatformMediaSessionManager::opusDecoderEnabled):
        (WebCore::PlatformMediaSessionManager::setOpusDecoderEnabled):
        * platform/audio/PlatformMediaSessionManager.h:
        * platform/graphics/cocoa/WebMAudioUtilitiesCocoa.mm:
        (WebCore::registerDecoderFactory):
        (WebCore::isOpusDecoderAvailable):
        (WebCore::registerOpusDecoderIfNeeded):
        (WebCore::isVorbisDecoderAvailable):
        (WebCore::registerVorbisDecoderIfNeeded):

2021-09-09  Sergio Villar Senin  <svillar@igalia.com>

        Improve the handling of CompositeEditCommand::splitTreeToNode() return values
        https://bugs.webkit.org/show_bug.cgi?id=229470

        Reviewed by Darin Adler.

        splitTreeToNode() might return nullptr because, among other things, it might insert/remove nodes in
        the DOM tree. It's well known that by doing so we're allowing the execution of arbitrary scripts
        (see didFinishInsertingNode() for example). This means that there is a possibility that the node
        that it's being splitted is no longer part of the DOM tree by the time splitTreeToNode() returns.
        That's why we should bail out in those cases.

        * editing/FormatBlockCommand.cpp:
        (WebCore::FormatBlockCommand::formatRange):

2021-09-22  Jean-Yves Avenard  <jya@apple.com>

        Make SharedBuffer inherit from ThreadSafeRefCounted
        https://bugs.webkit.org/show_bug.cgi?id=230662
        rdar://83419269

        The SourceBufferPrivateAVFObjC uses dispatch_async that takes an objective-C class.
        This copies its argument rather than move it and we end up with the SharedBuffer
        captured in the lambda to have its ref count be > 1.
        The easiest workaround is to make SharedBuffer use thread-safe refcount.
        Of course, this doesn't make a SharedBuffer a thread-safe class, but it allows
        to safely move it between threads.

        Already covered by existing tests.

        Reviewed by Chris Dumez.

        * platform/SharedBuffer.h:

2021-09-22  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Hook up palettes to CoreText
        https://bugs.webkit.org/show_bug.cgi?id=230449

        Reviewed by Simon Fraser.

        Now that we have FontCreationContext, we can just add FontPaletteValues to it, and turn
        that into Core Text attributes in preparePlatformFont().

        Test: imported/w3c/web-platform-tests/css/css-fonts/font-palette.html

        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSFontFace.cpp:
        (WebCore::CSSFontFace::font):
        * css/CSSFontFace.h:
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::lookupFontPaletteValues):
        (WebCore::CSSFontSelector::fontRangesForFamily):
        * css/CSSFontSelector.h:
        * css/CSSSegmentedFontFace.cpp:
        (WebCore::CSSSegmentedFontFace::fontRanges):
        * css/CSSSegmentedFontFace.h:
        * platform/graphics/FontCreationContext.h:
        (WebCore::FontCreationContext::operator== const):
        (WebCore::add):
        * platform/graphics/FontPaletteValues.h:
        (WebCore::FontPaletteValues::operator== const):
        (WebCore::FontPaletteValues::operator!= const):
        (WebCore::add):
        * platform/graphics/Gradient.cpp:
        * platform/graphics/Gradient.h:
        (WebCore::add):
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::addAttributesForFontPalettes):
        (WebCore::preparePlatformFont):

2021-09-22  Myles C. Maxfield  <mmaxfield@apple.com>

        Rename the Shaping log channel to TextShaping
        https://bugs.webkit.org/show_bug.cgi?id=230665

        Reviewed by Simon Fraser.

        No new tests because there is no behavior change.

        * platform/Logging.h:
        * platform/graphics/coretext/FontCoreText.cpp:
        (WebCore::Font::applyTransforms const):
        * platform/graphics/mac/ComplexTextControllerCoreText.mm:
        (WebCore::ComplexTextController::ComplexTextRun::ComplexTextRun):
        (WebCore::ComplexTextController::collectComplexTextRunsForCharacters):

2021-09-22  Wenson Hsieh  <wenson_hsieh@apple.com>

        Turn WebCore::LineCap and WebCore::LineJoin into 8-bit enum classes
        https://bugs.webkit.org/show_bug.cgi?id=230642

        Reviewed by Simon Fraser.

        Make LineJoin and LineCap enum classes, backed by uint8_t. This makes it easier to send these enum types as IPC
        arguments to the GPU process. Using strongly typed identifiers is also better for type safety.

        No change in behavior.

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator LineCap const):
        (WebCore::CSSPrimitiveValue::operator LineJoin const):

        Prefix individual enum values with `LineCap::` and `LineJoin::`, as needed.

        * html/canvas/CanvasRenderingContext2DBase.cpp:
        (WebCore::toCanvasLineCap):
        (WebCore::fromCanvasLineCap):
        (WebCore::toCanvasLineJoin):
        (WebCore::fromCanvasLineJoin):
        (WebCore::CanvasRenderingContext2DBase::State::State):
        (WebCore::CanvasRenderingContext2DBase::inflateStrokeRect const):
        * platform/adwaita/ThemeAdwaita.cpp:
        (WebCore::ThemeAdwaita::paintFocus):
        * platform/graphics/GraphicsTypes.cpp:
        (WebCore::operator<<):
        * platform/graphics/GraphicsTypes.h:

        Additionally rename these enum values to just (Butt, Round, Square) and (Miter, Round, Bevel) for LineCap and
        LineJoin, respectively.

        * platform/graphics/cairo/CairoOperations.cpp:
        (WebCore::Cairo::setLineCap):
        (WebCore::Cairo::setLineJoin):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContextCG::setLineCap):
        (WebCore::GraphicsContextCG::setLineJoin):
        * platform/graphics/win/Direct2DOperations.cpp:
        (WebCore::Direct2D::setLineCap):
        (WebCore::Direct2D::setLineJoin):
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::drawReplacementArrow):
        * rendering/TextPaintStyle.cpp:
        (WebCore::updateGraphicsContext):
        * rendering/TextPaintStyle.h:
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::setCapStyle):
        (WebCore::RenderStyle::initialCapStyle):
        (WebCore::RenderStyle::setJoinStyle):
        (WebCore::RenderStyle::initialJoinStyle):
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        * rendering/svg/RenderSVGPath.cpp:
        (WebCore::RenderSVGPath::shapeDependentStrokeContains):
        (WebCore::RenderSVGPath::shouldStrokeZeroLengthSubpath const):
        (WebCore::RenderSVGPath::zeroLengthLinecapPath const):
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::applyStrokeStyleToContext):
        * rendering/svg/SVGRenderTreeAsText.cpp:
        (WebCore::writeStyle):

2021-09-22  Takashi Komori  <Takashi.Komori@sony.com>

        [Curl] Show TLS connection information in the inspector
        https://bugs.webkit.org/show_bug.cgi?id=230526

        Reviewed by Alex Christensen.

        Add TLS version and cipher name in the network security tab.

        No tests yet.

        * platform/network/curl/CurlContext.cpp:
        (WebCore::CurlHandle::addExtraNetworkLoadMetrics):
        * platform/network/curl/CurlContext.h:
        * platform/network/curl/OpenSSLHelper.cpp:
        (OpenSSL::tlsVersion):
        (OpenSSL::tlsCipherName):
        * platform/network/curl/OpenSSLHelper.h:

2021-09-22  Simon Fraser  <simon.fraser@apple.com>

        Move more scroll snap-related code into ScrollSnapAnimatorState
        https://bugs.webkit.org/show_bug.cgi?id=230659

        Reviewed by Wenson Hsieh.

        Reduce the brain print of ScrollingEffectsController by moving scroll snap-related code
        into ScrollSnapAnimatorState, which is going to become a ScrollSnapController at some
        point.

        * page/FrameView.cpp:
        (WebCore::FrameView::setScrollPosition):
        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::scroll):
        (WebCore::ScrollAnimator::scrollOffsetAdjustedForSnapping const):
        (WebCore::ScrollAnimator::adjustScrollOffsetForSnappingIfNeeded): Deleted.
        * platform/ScrollAnimator.h:
        * platform/ScrollSnapAnimatorState.cpp:
        (WebCore::ScrollSnapAnimatorState::closestSnapPointForOffset const):
        (WebCore::ScrollSnapAnimatorState::adjustedScrollDestination const):
        (WebCore::ScrollSnapAnimatorState::resnapAfterLayout):
        (WebCore::ScrollSnapAnimatorState::setNearestScrollSnapIndexForAxisAndOffset):
        (WebCore::ScrollSnapAnimatorState::setNearestScrollSnapIndexForOffset):
        * platform/ScrollSnapAnimatorState.h:
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::doPostThumbMoveSnapping):
        * platform/ScrollingEffectsController.cpp:
        (WebCore::ScrollingEffectsController::adjustedScrollDestination const):
        (WebCore::ScrollingEffectsController::updateActiveScrollSnapIndexForClientOffset):
        (WebCore::ScrollingEffectsController::resnapAfterLayout):
        (WebCore::ScrollingEffectsController::setNearestScrollSnapIndexForAxisAndOffset): Deleted.
        (WebCore::ScrollingEffectsController::adjustScrollDestination): Deleted.
        * platform/ScrollingEffectsController.h:
        (WebCore::ScrollingEffectsController::setScrollSnapIndexDidChange):
        * rendering/RenderLayerScrollableArea.cpp:
        (WebCore::RenderLayerScrollableArea::scrollToOffset):

2021-09-22  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Move LineGeometry under InlineDisplay namespace
        https://bugs.webkit.org/show_bug.cgi?id=230635

        Reviewed by Antti Koivisto.

        * WebCore.xcodeproj/project.pbxproj:
        * display/css/DisplayBoxFactory.cpp:
        (WebCore::Display::BoxFactory::displayBoxForTextRun const):
        * display/css/DisplayBoxFactory.h:
        * layout/formattingContexts/inline/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::computeGeometryForLineContent):
        * layout/formattingContexts/inline/InlineFormattingState.h:
        (WebCore::Layout::InlineFormattingState::lines const):
        (WebCore::Layout::InlineFormattingState::lines):
        (WebCore::Layout::InlineFormattingState::addLine):
        (WebCore::Layout::InlineFormattingState::clearLineAndRuns):
        (WebCore::Layout::InlineFormattingState::shrinkToFit):
        * layout/formattingContexts/inline/InlineLineBoxBuilder.cpp:
        (WebCore::Layout::LineBoxBuilder::build):
        * layout/formattingContexts/inline/InlineLineBoxBuilder.h:
        * layout/formattingContexts/inline/display/InlineDisplayLine.h: Renamed from Source/WebCore/layout/formattingContexts/inline/display/InlineLineGeometry.h.
        (WebCore::InlineDisplay::Line::lineBoxLogicalRect const):
        (WebCore::InlineDisplay::Line::scrollableOverflow const):
        (WebCore::InlineDisplay::Line::enclosingTopAndBottom const):
        (WebCore::InlineDisplay::Line::baseline const):
        (WebCore::InlineDisplay::Line::contentLogicalLeft const):
        (WebCore::InlineDisplay::Line::contentLogicalWidth const):
        (WebCore::InlineDisplay::Line::moveVertically):
        (WebCore::InlineDisplay::Line::Line):
        * layout/integration/LayoutIntegrationInlineContentBuilder.cpp:
        (WebCore::LayoutIntegration::operator+):

2021-09-22  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Move LineGeometry and LineRun files under /inline/display
        https://bugs.webkit.org/show_bug.cgi?id=230632

        Reviewed by Antti Koivisto.

        This is in preparation for moving these classes out of the "layout namespace".

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * layout/formattingContexts/inline/display/InlineLineGeometry.h: Renamed from Source/WebCore/layout/formattingContexts/inline/InlineLineGeometry.h.
        (WebCore::Layout::LineGeometry::lineBoxLogicalRect const):
        (WebCore::Layout::LineGeometry::scrollableOverflow const):
        (WebCore::Layout::LineGeometry::enclosingTopAndBottom const):
        (WebCore::Layout::LineGeometry::baseline const):
        (WebCore::Layout::LineGeometry::contentLogicalLeft const):
        (WebCore::Layout::LineGeometry::contentLogicalWidth const):
        (WebCore::Layout::LineGeometry::moveVertically):
        (WebCore::Layout::LineGeometry::LineGeometry):
        * layout/formattingContexts/inline/display/InlineLineRun.h: Renamed from Source/WebCore/layout/formattingContexts/inline/InlineLineRun.h.
        (WebCore::Layout::Run::Text::start const):
        (WebCore::Layout::Run::Text::end const):
        (WebCore::Layout::Run::Text::length const):
        (WebCore::Layout::Run::Text::originalContent const):
        (WebCore::Layout::Run::Text::renderedContent const):
        (WebCore::Layout::Run::Text::hasHyphen const):
        (WebCore::Layout::Run::isText const):
        (WebCore::Layout::Run::isSoftLineBreak const):
        (WebCore::Layout::Run::isLineBreakBox const):
        (WebCore::Layout::Run::isLineBreak const):
        (WebCore::Layout::Run::isAtomicInlineLevelBox const):
        (WebCore::Layout::Run::isInlineBox const):
        (WebCore::Layout::Run::isNonRootInlineBox const):
        (WebCore::Layout::Run::isRootInlineBox const):
        (WebCore::Layout::Run::isGenericInlineLevelBox const):
        (WebCore::Layout::Run::isInlineLevelBox const):
        (WebCore::Layout::Run::isNonRootInlineLevelBox const):
        (WebCore::Layout::Run::type const):
        (WebCore::Layout::Run::hasContent const):
        (WebCore::Layout::Run::logicalRect const):
        (WebCore::Layout::Run::inkOverflow const):
        (WebCore::Layout::Run::logicalTop const):
        (WebCore::Layout::Run::logicalBottom const):
        (WebCore::Layout::Run::logicalLeft const):
        (WebCore::Layout::Run::logicalRight const):
        (WebCore::Layout::Run::logicalWidth const):
        (WebCore::Layout::Run::logicalHeight const):
        (WebCore::Layout::Run::moveVertically):
        (WebCore::Layout::Run::adjustInkOverflow):
        (WebCore::Layout::Run::text):
        (WebCore::Layout::Run::text const):
        (WebCore::Layout::Run::expansion const):
        (WebCore::Layout::Run::layoutBox const):
        (WebCore::Layout::Run::style const):
        (WebCore::Layout::Run::lineIndex const):
        (WebCore::Layout::Run::Run):
        (WebCore::Layout::Run::Text::Text):

2021-09-22  Joonghun Park  <jh718.park@samsung.com>

        Fix the behavior that setting text field input's value content attribute to the same value moves caret to the end of the input.
        https://bugs.webkit.org/show_bug.cgi?id=191255

        Reviewed by Simon Fraser.

        This patch changes the behavior specified above to make WebKit's behavior interoperable
        according to the spec below at
        https://html.spec.whatwg.org/multipage/form-elements.html#dom-textarea-value.

        '4. If the new API value is different from oldAPIValue,
        then move the text entry cursor position to the end of the text control,
        unselecting any selected text and resetting the selection direction to "none".'

        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::setValue):

2021-09-22  Simon Fraser  <simon.fraser@apple.com>

        Don't exempt WebXR source files from unified sources
        https://bugs.webkit.org/show_bug.cgi?id=230651

        Reviewed by Dean Jackson.

        Allow WebXR and related files to participate in unified sources.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

2021-09-22  Simon Fraser  <simon.fraser@apple.com>

        Push ScrollAnimatorMac code into the base class and clean up the ScrollAnimator interface
        https://bugs.webkit.org/show_bug.cgi?id=230633

        Reviewed by Martin Robinson.

        Reduce the brainprint of ScrollAnimatorMac by pushing platform-agnostic code into
        the base class.

        Clean up ScrollAnimator, making more functions protected or private.

        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::scroll):
        (WebCore::ScrollAnimator::notifyPositionChanged):
        (WebCore::ScrollAnimator::allowsHorizontalScrolling const):
        (WebCore::ScrollAnimator::allowsVerticalScrolling const):
        (WebCore::ScrollAnimator::stretchAmount const):
        (WebCore::ScrollAnimator::edgePinnedState const):
        (WebCore::ScrollAnimator::isPinnedForScrollDelta const):
        * platform/ScrollAnimator.h:
        * platform/ScrollingEffectsController.h:
        * platform/generic/ScrollAnimatorGeneric.cpp:
        (WebCore::ScrollAnimatorGeneric::scrollAnimationDidUpdate):
        (WebCore::ScrollAnimatorGeneric::updatePosition): Deleted.
        * platform/generic/ScrollAnimatorGeneric.h:
        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::scroll): Deleted.
        (WebCore::ScrollAnimatorMac::notifyPositionChanged): Deleted.
        (WebCore::ScrollAnimatorMac::edgePinnedState const): Deleted.
        (WebCore::ScrollAnimatorMac::isPinnedForScrollDelta const): Deleted.
        (WebCore::ScrollAnimatorMac::stretchAmount const): Deleted.
        (WebCore::ScrollAnimatorMac::allowsHorizontalScrolling const): Deleted.
        (WebCore::ScrollAnimatorMac::allowsVerticalScrolling const): Deleted.

2021-09-22  Alex Christensen  <achristensen@webkit.org>

        PCM should include the bundle ID of the app from which it originated
        https://bugs.webkit.org/show_bug.cgi?id=230576
        <rdar://83065221>

        Reviewed by Kate Cheney.

        This adds infrastructure to store the bundle ID of the application.
        In another patch I'm going to use that to prevent PCMs from one app from overwriting PCMs from another app during attribution.

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::parsePrivateClickMeasurement const):
        * loader/PrivateClickMeasurement.cpp:
        (WebCore::PrivateClickMeasurement::isolatedCopy const):
        * loader/PrivateClickMeasurement.h:
        (WebCore::PrivateClickMeasurement::PrivateClickMeasurement):
        (WebCore::PrivateClickMeasurement::attributionTriggerData const):
        (WebCore::PrivateClickMeasurement::sourceApplicationBundleID const):
        (WebCore::PrivateClickMeasurement::encode const):
        (WebCore::PrivateClickMeasurement::decode):
        (WebCore::PrivateClickMeasurement::attributionTriggerData): Deleted.

2021-09-22  Chris Dumez  <cdumez@apple.com>

        Drop makeRef() and use Ref { } instead
        https://bugs.webkit.org/show_bug.cgi?id=230626

        Reviewed by Alex Christensen.

        * platform/audio/cocoa/AudioFileReaderCocoa.cpp:
        (WebCore::AudioFileReader::demuxWebMData const):

2021-09-22  Gabriel Nava Marino  <gnavamarino@apple.com>

        RenderBox is a RenderElement which can have image updates from style changes. We should call
        the base class imageChanged method and handle image changes appropriately in RenderListMarker.
        https://bugs.webkit.org/show_bug.cgi?id=230431

        Reviewed by Darin Adler.

        Test: fast/lists/list-marker-image-changed.html

        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::imageChanged):

2021-09-22  Simon Fraser  <simon.fraser@apple.com>

        Remove ENABLE(SMOOTH_SCROLLING)
        https://bugs.webkit.org/show_bug.cgi?id=230587

        Reviewed by Tim Horton.

        ENABLE(SMOOTH_SCROLLING) was always enabled on macOS, so remove it. The pref defaults
        to true on macOS, and false elsewhere.

        * page/FrameView.cpp:
        (WebCore::FrameView::scrollAnimatorEnabled const):
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::scrollAnimatorEnabled const):
        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ThreadedScrollingTree.cpp:
        (WebCore::ThreadedScrollingTree::ThreadedScrollingTree):
        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/ScrollAnimatorMac.mm:

2021-09-22  Alan Bujtas  <zalan@apple.com>

        [LFC][Integration] FlowHasTextSecurity FlowHasJustifiedNonBreakingSpace are unused
        https://bugs.webkit.org/show_bug.cgi?id=230591

        Reviewed by Antti Koivisto.

        * layout/integration/LayoutIntegrationCoverage.cpp:
        (WebCore::LayoutIntegration::printReason):
        * layout/integration/LayoutIntegrationCoverage.h:

2021-09-22  Antti Koivisto  <antti@apple.com>

        [LFC][Integration] Remove ensureLineBoxes
        https://bugs.webkit.org/show_bug.cgi?id=230597

        Reviewed by Alan Bujtas.

        We don't need to switch to legacy lineboxes dynamically for non-style reasons anymore.

        * layout/integration/LayoutIntegrationCoverage.cpp:
        (WebCore::LayoutIntegration::printReason):
        (WebCore::LayoutIntegration::canUseForStyle):

        Support -webkit-border-fit:lines.

        * layout/integration/LayoutIntegrationCoverage.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::adjustForBorderFit const):

        Use iterator.

        (WebCore::RenderBlockFlow::clearTruncation):

        Remove an unnecessary ensureLineBoxes call.

        (WebCore::RenderBlockFlow::ensureLineBoxes): Deleted.

        Boom.

        * rendering/RenderBlockFlow.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::nodeAtPoint):

        This is not needed before we start supporting RenderInlines with layers on LFC path.

2021-09-22  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add fallback font support
        https://bugs.webkit.org/show_bug.cgi?id=228685
        <rdar://problem/81661514>

        Reviewed by Antti Koivisto.

        * layout/integration/LayoutIntegrationCoverage.cpp:
        (WebCore::LayoutIntegration::printReason):
        (WebCore::LayoutIntegration::canUseForText):
        (WebCore::LayoutIntegration::canUseForFontAndText):
        * layout/integration/LayoutIntegrationCoverage.h:

2021-09-22  Antti Koivisto  <antti@apple.com>

        [LFC][Integration] Remove ALLOW_ coverage defines
        https://bugs.webkit.org/show_bug.cgi?id=230608

        Reviewed by Alan Bujtas.

        They are not useful anymore.

        * layout/integration/LayoutIntegrationCoverage.cpp:
        (WebCore::LayoutIntegration::canUseForChild):

2021-09-22  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][MSVC] REGRESSION(r282860): ClipboardItemBindingsDataSource.cpp(147): error C2955: 'WTF::Ref': use of class template requires template argument list
        https://bugs.webkit.org/show_bug.cgi?id=230599

        Unreviewed build fix.

        * Modules/async-clipboard/ClipboardItemBindingsDataSource.cpp:
        (WebCore::ClipboardItemBindingsDataSource::collectDataForWriting):
        Conditioned out the ASSERT_UNUSED for MSVC.

2021-09-21  Jean-Yves Avenard  <jya@apple.com>

        Use SharedMemory for transferring appended buffers from SourceBuffer to the GPU process
        https://bugs.webkit.org/show_bug.cgi?id=230329
        rdar://problem/83291495

        Use SharedBuffer instead of Vector to pass data to the SourceBuffer's related
        classes (SourceBuffer, SourceBufferPrivate and SourceBufferParser).
        Modify SourceBufferParserWebM to never perform memory allocation and copy
        of the original data content. Instead, we use CMBlockBuffer objects that retain the
        backing SharedBuffer and use offsets inside this SharedBuffer to reference the data.
        SourceBufferParserAVFObjC requires little modification as a NSData can wrap a SharedBuffer.

        Reviewed by Jer Noble.

        There should be no change from an observable standpoint other than the GPU memory usage
        being drastically reduced (from 700MB when watching a 4K/60fps YouTube video to just over 200MB
        on an iMac Pro (which only has software VP9 decoding), 25MB vs 360MB on an iPad)
        Existing tests are fully exercising this new code.

        * Modules/mediasource/SourceBuffer.cpp: Simplify logic around m_pendingAppendData member.
        Only one appendBuffer operation can be pending at any given time otherwise appendBuffer
        will throw an exception; as such, there's no need to append the data to a vector: "there can
        be only one".
        (WebCore::SourceBuffer::abortIfUpdating):
        (WebCore::SourceBuffer::appendBufferInternal):
        (WebCore::SourceBuffer::appendBufferTimerFired):
        (WebCore::SourceBuffer::reportExtraMemoryAllocated):
        * Modules/mediasource/SourceBuffer.h:
        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::SharedBuffer):
        (WebCore::SharedBuffer::create):
        (WebCore::SharedBuffer::copyTo const):
        (WebCore::SharedBuffer::DataSegment::data const):
        (WebCore::SharedBuffer::DataSegment::size const):
        * platform/SharedBuffer.h: Add new DataSegment type that takes a Provider in constructor.
        A Provider provides two Function members data and size.
        * platform/audio/cocoa/AudioFileReaderCocoa.cpp: The AudioFileReaderCocoa required
        the CMBlockBuffer containing the compressed content to be contiguous. This is no
        longer guaranteed so ensure that the CMBlockBuffer is contiguous.
        (WebCore::AudioFileReader::demuxWebMData const):
        (WebCore::AudioFileReader::decodeWebMData const):
        * platform/graphics/SourceBufferPrivate.h:
        (WebCore::SourceBufferPrivate::append):
        * platform/graphics/avfoundation/objc/SourceBufferParserAVFObjC.mm:
        (WebCore::SourceBufferParserAVFObjC::appendData):
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::append):
        * platform/graphics/cocoa/SourceBufferParser.cpp:
        (WebCore::SourceBufferParser::Segment::Segment):
        (WebCore::SourceBufferParser::Segment::size const):
        (WebCore::SourceBufferParser::Segment::read const):
        (WebCore::SourceBufferParser::Segment::takeSharedBuffer):
        (WebCore::SourceBufferParser::Segment::getSharedBuffer const):
        * platform/graphics/cocoa/SourceBufferParser.h:
        * platform/graphics/cocoa/SourceBufferParserWebM.cpp:
        (WebCore::SourceBufferParserWebM::SourceBufferParserWebM):
        (WebCore::SourceBufferParserWebM::TrackData::contiguousCompleteBlockBuffer const):
        (WebCore::SourceBufferParserWebM::TrackData::readFrameData):
        (WebCore::SourceBufferParserWebM::VideoTrackData::consumeFrameData):
        (WebCore::SourceBufferParserWebM::VideoTrackData::createSampleBuffer):
        (WebCore::SourceBufferParserWebM::AudioTrackData::resetCompleted):
        (WebCore::SourceBufferParserWebM::AudioTrackData::consumeFrameData):
        (WebCore::SourceBufferParserWebM::AudioTrackData::createSampleBuffer):
        (WebCore::SourceBufferParserWebM::flushPendingAudioBuffers):
        * platform/graphics/cocoa/SourceBufferParserWebM.h:
        (WebCore::SourceBufferParserWebM::TrackData::resetCompleted):
        (WebCore::SourceBufferParserWebM::TrackData::reset):

2021-09-21  Alexey Shvayka  <shvaikalesh@gmail.com>

        [WebIDL] DOM constructors should extend InternalFunction
        https://bugs.webkit.org/show_bug.cgi?id=228763

        Reviewed by Sam Weinig.

        This patch makes JSDOMConstructorBase a subclass of InternalFunction, aligning
        DOM constructors with their ECMA-262 counterparts, which renders a few benefits.

          1. InternalFunction is way faster to call than a class with custom getCallData():
             JIT inlines InternalFunction::getCallData(), emitting a direct call into
             m_functionForConstruct. Speeds up invoking Event constructor by ~18% (1M calls).
          2. Since InternalFunction disallows its subclasses to override getCallData(),
             the presence of [[Call]] method can be inferred by JSType only. In the future,
             this invariant will allow to speed up a few bytecodes: is_callable, typeof*.
          3. InternalFunction::finishCreation() takes care of "length" / "name" properties,
             which can leveraged (in a follow-up) to align property order of WebIDL constructors
             with JSC built-ins, and also clean up bindings generator a bit (bug #230584).
          4. Using InternalFunctionType is essential to keep the `instanceof` update
             (bug #151348) performance-neutral for DOM constructors.

        No new tests, no behavior change.

        * bindings/js/JSDOMBuiltinConstructor.h:
        (WebCore::JSDOMBuiltinConstructor<JSClass>::create):
        (WebCore::JSDOMBuiltinConstructor<JSClass>::createStructure):
        (WebCore::JSDOMBuiltinConstructor<JSClass>::getConstructData): Deleted.
        * bindings/js/JSDOMBuiltinConstructorBase.h:
        (WebCore::JSDOMBuiltinConstructorBase::JSDOMBuiltinConstructorBase):
        * bindings/js/JSDOMConstructor.h:
        (WebCore::JSDOMConstructor<JSClass>::create):
        (WebCore::JSDOMConstructor<JSClass>::createStructure):
        (WebCore::JSDOMConstructor<JSClass>::getConstructData): Deleted.
        * bindings/js/JSDOMConstructorBase.cpp:
        (WebCore::JSC_DEFINE_HOST_FUNCTION):
        (WebCore::JSDOMConstructorBase::getCallData): Deleted.
        * bindings/js/JSDOMConstructorBase.h:
        (WebCore::JSDOMConstructorBase::globalObject const):
        (WebCore::JSDOMConstructorBase::scriptExecutionContext const):
        (WebCore::JSDOMConstructorBase::JSDOMConstructorBase):
        (WebCore::JSDOMConstructorBase::createStructure): Deleted.
        * bindings/js/JSDOMConstructorNotCallable.h:
        (WebCore::JSDOMConstructorNotCallable::subspaceFor):
        * bindings/js/JSDOMConstructorNotConstructable.h:
        (WebCore::JSDOMConstructorNotConstructable<JSClass>::create):
        (WebCore::JSDOMConstructorNotConstructable<JSClass>::createStructure):
        * bindings/js/JSDOMConstructorWithDocument.h:
        (WebCore::JSDOMConstructorWithDocument::JSDOMConstructorWithDocument):
        * bindings/js/JSDOMLegacyFactoryFunction.h:
        (WebCore::JSDOMLegacyFactoryFunction<JSClass>::create):
        (WebCore::JSDOMLegacyFactoryFunction<JSClass>::createStructure):
        (WebCore::JSDOMLegacyFactoryFunction<JSClass>::getConstructData): Deleted.
        * bindings/js/WebCoreJSClientData.cpp:
        (WebCore::JSVMClientData::JSVMClientData):
        * bindings/js/WebCoreJSClientData.h:
        (WebCore::JSVMClientData::domNamespaceObjectSpace):
        Move JSDOMConstructorNotCallable to separate IsoSubspace since it no longer shares
        a common parent class with callable constructors.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateConstructorHelperMethods):
        Introduce InternalFunction::finishCreation(VM&) overload and set m_originalName
        directly to preserve the current property order of WebIDL constructors, and to defer
        a large code change needed for passing through `length` / `name` parameters (bug #230584).

        * bindings/scripts/test/JS/*: Updated.

2021-09-21  Myles C. Maxfield  <mmaxfield@apple.com>

        Add FontCreationContext
        https://bugs.webkit.org/show_bug.cgi?id=230592

        Reviewed by Alan Bujtas.

        We have this pattern where we pass around "const FontFeatureSettings&, const FontSelectionSpecifiedCapabilities&"
        through all the various font creation routines. When I add support for font palettes and font-feature-values,
        this would need to grow to 4 arguments being passed around instead of 2. Rather than passing all these arguments
        around, a better idea is to encapsulate these arguments in a "context" object. This is because most places that
        take these arguments don't actually inspect them, but instead just forward them on to other routines.

        No new tests because there is no behavior change.

        * Headers.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSFontFace.cpp:
        (WebCore::CSSFontFace::font):
        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::load):
        (WebCore::CSSFontFaceSource::font):
        * css/CSSFontFaceSource.h:
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::fontRangesForFamily):
        * loader/FontLoadRequest.h:
        * loader/cache/CachedFont.cpp:
        (WebCore::CachedFont::createFont):
        (WebCore::CachedFont::platformDataFromCustomData):
        * loader/cache/CachedFont.h:
        * loader/cache/CachedFontLoadRequest.h:
        * loader/cache/CachedSVGFont.cpp:
        (WebCore::CachedSVGFont::createFont):
        (WebCore::CachedSVGFont::platformDataFromCustomData):
        * loader/cache/CachedSVGFont.h:
        * platform/graphics/Font.cpp:
        (WebCore::Font::create):
        * platform/graphics/FontCache.cpp:
        (WebCore::operator==):
        (WebCore::FontPlatformDataCacheKeyHash::hash):
        (WebCore::FontCache::cachedFontPlatformData):
        (WebCore::FontCache::fontForFamily):
        * platform/graphics/FontCache.h:
        (WebCore::FontCache::fontForFamily):
        (WebCore::FontCache::cachedFontPlatformData):
        (WebCore::FontCache::createFontPlatformDataForTesting):
        * platform/graphics/FontCreationContext.h: Added.
        (WebCore::FontCreationContext::operator== const):
        (WebCore::FontCreationContext::operator!= const):
        (WebCore::add):
        * platform/graphics/cairo/FontCustomPlatformData.h:
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::preparePlatformFont):
        (WebCore::fontWithFamily):
        (WebCore::FontCache::createFontPlatformData):
        (WebCore::FontCache::systemFallbackForCharacters):
        * platform/graphics/cocoa/FontCacheCoreText.h:
        * platform/graphics/cocoa/FontFamilySpecificationCoreText.cpp:
        (WebCore::FontFamilySpecificationCoreText::fontRanges const):
        * platform/graphics/freetype/FontCacheFreeType.cpp:
        (WebCore::FontCache::createFontPlatformData):
        * platform/graphics/freetype/FontCustomPlatformDataFreeType.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/mac/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/mac/FontCustomPlatformData.h:
        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::FontCache::createFontPlatformData):
        * platform/graphics/win/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/win/FontCustomPlatformData.h:
        * platform/graphics/win/FontCustomPlatformDataCairo.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * workers/WorkerFontLoadRequest.cpp:
        (WebCore::WorkerFontLoadRequest::createFont):
        * workers/WorkerFontLoadRequest.h:

2021-09-21  Simon Fraser  <simon.fraser@apple.com>

        Change from ENABLE(RUBBER_BANDING) to HAVE(RUBBER_BANDING)
        https://bugs.webkit.org/show_bug.cgi?id=230583

        Reviewed by Tim Horton.

        RUBBER_BANDING is not a feature we'll ever turn off on macOS, and it was only ever enabled
        for that platform. However, it's also used in some cross-platform code, so
        HAVE(RUBBER_BANDING) makes more sense for that use.

        Also remove ENABLE(RUBBER_BANDING) #ifdefs from inside PLATFORM(MAC) code.

        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::isScrollable):
        (WebCore::FrameView::handleWheelEventForScrolling):
        * page/FrameView.h:
        * page/Page.cpp:
        (WebCore::Page::setUnderPageBackgroundColorOverride):
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::headerLayerForFrameView):
        (WebCore::ScrollingCoordinator::footerLayerForFrameView):
        (WebCore::ScrollingCoordinator::contentShadowLayerForFrameView):
        * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.mm:
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::scrollPositionIsNotRubberbandingEdge const):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::paint):
        * platform/ScrollableArea.h:
        * platform/ScrollbarTheme.h:
        * platform/ScrollingEffectsController.h:
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:
        (WebCore::PlatformCALayerCocoa::updateCustomAppearance):
        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::rubberBandingEnabledForSystem):
        (WebCore::ScrollAnimatorMac::isRubberBandInProgress const):
        (WebCore::ScrollAnimatorMac::immediateScrollBy):
        * platform/mac/ScrollbarThemeMac.h:
        * platform/mac/ScrollbarThemeMac.mm:
        * platform/mac/ScrollingEffectsController.mm:
        (WebCore::ScrollingEffectsController::updateRubberBandAnimatingState):
        (WebCore::ScrollingEffectsController::scrollPositionChanged):
        (WebCore::ScrollingEffectsController::isRubberBandInProgress const):
        (WebCore::ScrollingEffectsController::stopRubberbanding):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::~RenderLayerCompositor):
        (WebCore::RenderLayerCompositor::updateBacking):
        (WebCore::RenderLayerCompositor::frameViewDidChangeSize):
        (WebCore::RenderLayerCompositor::updateRootLayerPosition):
        (WebCore::RenderLayerCompositor::rootBackgroundColorOrTransparencyChanged):
        (WebCore::RenderLayerCompositor::updateOverflowControlsLayers):
        (WebCore::RenderLayerCompositor::destroyRootLayer):
        * rendering/RenderLayerCompositor.h:
        * rendering/RenderLayerScrollableArea.cpp:
        (WebCore::RenderLayerScrollableArea::isRubberBandInProgress const):
        (WebCore::RenderLayerScrollableArea::overhangAmount const):
        (WebCore::RenderLayerScrollableArea::setHasHorizontalScrollbar):
        (WebCore::RenderLayerScrollableArea::setHasVerticalScrollbar):

2021-09-21  Myles C. Maxfield  <mmaxfield@apple.com>

        Delete dead code in FontPaletteValues
        https://bugs.webkit.org/show_bug.cgi?id=230586

        Reviewed by Alex Christensen.

        No new tests because there is no behavior change.

        * platform/graphics/FontPaletteValues.h:
        (WebCore::FontPaletteValues::setBasePalette): Deleted.
        (WebCore::FontPaletteValues::appendOverrideColor): Deleted.
        (WebCore::FontPaletteValues::clearOverrideColor): Deleted.
        (WebCore::FontPaletteValues::remove): Deleted.

2021-09-21  Chris Dumez  <cdumez@apple.com>

        Reduce use of makeRef() and use Ref { } instead
        https://bugs.webkit.org/show_bug.cgi?id=230585

        Reviewed by Alex Christensen.

        * Modules/async-clipboard/ClipboardItemBindingsDataSource.cpp:
        (WebCore::ClipboardItemBindingsDataSource::collectDataForWriting):
        * Modules/cache/DOMCache.cpp:
        (WebCore::DOMCache::addAll):
        * Modules/cache/WorkerCacheStorageConnection.cpp:
        (WebCore::WorkerCacheStorageConnection::create):
        (WebCore::WorkerCacheStorageConnection::open):
        (WebCore::WorkerCacheStorageConnection::remove):
        (WebCore::WorkerCacheStorageConnection::retrieveCaches):
        (WebCore::WorkerCacheStorageConnection::retrieveRecords):
        (WebCore::WorkerCacheStorageConnection::batchDeleteOperation):
        (WebCore::WorkerCacheStorageConnection::batchPutOperation):
        * Modules/entriesapi/DOMFileSystem.cpp:
        (WebCore::DOMFileSystem::listDirectory):
        (WebCore::DOMFileSystem::getParent):
        (WebCore::DOMFileSystem::getEntry):
        (WebCore::DOMFileSystem::getFile):
        * Modules/entriesapi/FileSystemDirectoryReader.cpp:
        (WebCore::FileSystemDirectoryReader::readEntries):
        * Modules/fetch/FetchBody.cpp:
        (WebCore::FetchBody::bodyAsFormData const):
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::objectStore):
        (WebCore::IDBTransaction::iterateCursor):
        (WebCore::IDBTransaction::requestPutOrAdd):
        * Modules/mediasession/MediaSessionCoordinator.cpp:
        (WebCore::MediaSessionCoordinator::MediaSessionCoordinator):
        * Modules/mediastream/PeerConnectionBackend.cpp:
        (WebCore::PeerConnectionBackend::newDataChannel):
        * Modules/mediastream/RTCRtpSFrameTransform.cpp:
        (WebCore::RTCRtpSFrameTransform::initializeTransformer):
        * Modules/mediastream/RTCRtpScriptTransform.cpp:
        (WebCore::RTCRtpScriptTransform::create):
        (WebCore::RTCRtpScriptTransform::initializeTransformer):
        * Modules/mediastream/RTCRtpScriptTransformer.cpp:
        (WebCore::RTCRtpScriptTransformer::writable):
        (WebCore::RTCRtpScriptTransformer::start):
        * Modules/mediastream/libwebrtc/LibWebRTCDataChannelHandler.cpp:
        (WebCore::LibWebRTCDataChannelHandler::checkState):
        (WebCore::LibWebRTCDataChannelHandler::OnMessage):
        (WebCore::LibWebRTCDataChannelHandler::OnBufferedAmountChange):
        * Modules/mediastream/libwebrtc/LibWebRTCDtlsTransportBackend.cpp:
        (WebCore::LibWebRTCDtlsTransportBackendObserver::start):
        (WebCore::LibWebRTCDtlsTransportBackendObserver::stop):
        (WebCore::LibWebRTCDtlsTransportBackendObserver::OnStateChange):
        (WebCore::LibWebRTCDtlsTransportBackendObserver::OnError):
        * Modules/mediastream/libwebrtc/LibWebRTCIceTransportBackend.cpp:
        (WebCore::LibWebRTCIceTransportBackendObserver::start):
        (WebCore::LibWebRTCIceTransportBackendObserver::stop):
        (WebCore::LibWebRTCIceTransportBackendObserver::onIceTransportStateChanged):
        (WebCore::LibWebRTCIceTransportBackendObserver::onGatheringStateChanged):
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::addPendingTrackEvent):
        (WebCore::LibWebRTCMediaEndpoint::newTransceiver):
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::findExistingSender):
        (WebCore::LibWebRTCPeerConnectionBackend::addTrack):
        * Modules/mediastream/libwebrtc/LibWebRTCSctpTransportBackend.cpp:
        (WebCore::LibWebRTCSctpTransportBackendObserver::start):
        (WebCore::LibWebRTCSctpTransportBackendObserver::stop):
        (WebCore::LibWebRTCSctpTransportBackendObserver::OnStateChange):
        * Modules/notifications/Notification.cpp:
        (WebCore::Notification::requestPermission):
        * Modules/speech/SpeechRecognitionResultList.cpp:
        (WebCore::SpeechRecognitionResultList::add):
        * Modules/webaudio/AsyncAudioDecoder.cpp:
        (WebCore::AsyncAudioDecoder::DecodingTask::notifyComplete):
        * Modules/webaudio/AudioNode.cpp:
        (WebCore::AudioNode::toWeakOrStrongContext):
        * Modules/webaudio/AudioWorklet.cpp:
        (WebCore::AudioWorklet::createProcessor):
        * Modules/webaudio/DefaultAudioDestinationNode.cpp:
        (WebCore::Function<void):
        * Modules/webdatabase/Database.cpp:
        (WebCore::Database::runTransaction):
        * Modules/webxr/WebXRInputSourceArray.cpp:
        (WebCore::WebXRInputSourceArray::update):
        * Modules/webxr/WebXRSystem.cpp:
        (WebCore::WebXRSystem::requestSession):
        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::getOrCreate):
        * animation/DocumentTimelinesController.cpp:
        (WebCore::DocumentTimelinesController::updateAnimationsAndSendEvents):
        * bindings/js/JSEventListener.h:
        (WebCore::JSEventListener::ensureJSFunction const):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::dumpIfTerminal):
        * crypto/SubtleCrypto.cpp:
        (WebCore::SubtleCrypto::wrapKey):
        * css/CSSFontFaceSet.cpp:
        (WebCore::CSSFontFaceSet::remove):
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::CSSFontSelector):
        * css/DOMCSSPaintWorklet.cpp:
        (WebCore::PaintWorklet::addModule):
        * css/typedom/CSSNumericValue.cpp:
        (WebCore::CSSNumericValue::add):
        (WebCore::CSSNumericValue::sub):
        (WebCore::CSSNumericValue::mul):
        (WebCore::CSSNumericValue::div):
        (WebCore::CSSNumericValue::min):
        (WebCore::CSSNumericValue::max):
        * css/typedom/CSSStyleValueFactory.cpp:
        (WebCore::CSSStyleValueFactory::reifyValue):
        * css/typedom/StylePropertyMapReadOnly.cpp:
        (WebCore::StylePropertyMapReadOnly::reifyValue):
        * dom/ActiveDOMObject.cpp:
        (WebCore::ActiveDOMObject::queueTaskToDispatchEventInternal):
        (WebCore::ActiveDOMObject::queueCancellableTaskToDispatchEventInternal):
        * dom/ActiveDOMObject.h:
        * dom/DeviceOrientationAndMotionAccessController.cpp:
        (WebCore::DeviceOrientationAndMotionAccessController::shouldAllowAccess):
        * dom/Document.cpp:
        (WebCore::Document::forEachMediaElement):
        (WebCore::command):
        * dom/Element.cpp:
        (WebCore::Element::focus):
        * dom/IdleCallbackController.cpp:
        (WebCore::IdleCallbackController::queueTaskToStartIdlePeriod):
        (WebCore::IdleCallbackController::queueTaskToInvokeIdleCallbacks):
        * dom/Microtasks.cpp:
        (WebCore::MicrotaskQueue::MicrotaskQueue):
        * dom/MutationObserver.cpp:
        (WebCore::MutationObserver::enqueueMutationRecord):
        (WebCore::MutationObserver::enqueueSlotChangeEvent):
        (WebCore::MutationObserver::setHasTransientRegistration):
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::requestModuleScript):
        * editing/AlternativeTextController.cpp:
        (WebCore::AlternativeTextController::applyAlternativeTextToRange):
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::makeStylingElementsDirectChildrenOfEditableRootToPreventStyleLoss):
        * editing/Editor.cpp:
        (WebCore::Editor::appliedEditing):
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges):
        (WebCore::correctSpellcheckingPreservingTextCheckingParagraph):
        (WebCore::scanForTelephoneNumbers):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplacementFragment::removeContentsWithSideEffects):
        (WebCore::ReplacementFragment::insertFragmentForTestRendering):
        (WebCore::ReplaceSelectionCommand::mergeTextNodesAroundPosition):
        (WebCore::ReplaceSelectionCommand::performTrivialReplace):
        * editing/TextIterator.cpp:
        (WebCore::plainText):
        * editing/VisibleSelection.cpp:
        (WebCore::VisibleSelection::adjustSelectionToAvoidCrossingShadowBoundaries):
        * editing/cocoa/WebContentReaderCocoa.mm:
        (WebCore::attachmentForFilePath):
        (WebCore::attachmentForData):
        (WebCore::WebContentReader::readURL):
        * editing/markup.cpp:
        (WebCore::createFragmentForMarkup):
        * history/CachedFrame.cpp:
        (WebCore::CachedFrameBase::restore):
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::didFinishInsertingNode):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::updateWithTextRecognitionResult):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::forgetResourceSpecificTracks):
        * html/OffscreenCanvas.cpp:
        (WebCore::OffscreenCanvas::create):
        (WebCore::OffscreenCanvas::pushBufferToPlaceholder):
        * html/ValidationMessage.cpp:
        (WebCore::ValidationMessage::buildBubbleTree):
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::makeXRCompatible):
        * html/track/VTTCue.cpp:
        (WebCore::VTTCueBox::applyCSSProperties):
        * inspector/InspectorFrontendAPIDispatcher.cpp:
        (WebCore::InspectorFrontendAPIDispatcher::evaluateOrQueueExpression):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::willSendRequest):
        (WebCore::computeResponseOriginAndCOOP):
        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::begin):
        * loader/FrameLoadRequest.cpp:
        (WebCore::FrameLoadRequest::FrameLoadRequest):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::receivedFirstData):
        (WebCore::FrameLoader::loadFrameRequest):
        (WebCore::FrameLoader::loadURL):
        (WebCore::FrameLoader::loadWithDocumentLoader):
        (WebCore::FrameLoader::open):
        (WebCore::FrameLoader::loadPostRequest):
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy):
        * loader/NavigationScheduler.cpp:
        (WebCore::ScheduledURLNavigation::ScheduledURLNavigation):
        * loader/PingLoader.cpp:
        (WebCore::PingLoader::startPingLoad):
        * loader/PolicyChecker.cpp:
        (WebCore::FrameLoader::PolicyChecker::checkNewWindowPolicy):
        * loader/SubframeLoader.cpp:
        (WebCore::FrameLoader::SubframeLoader::requestFrame):
        (WebCore::FrameLoader::SubframeLoader::loadSubframe):
        * loader/WorkerThreadableLoader.cpp:
        (WebCore::WorkerThreadableLoader::MainThreadBridge::notifyIsDone):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didSendData):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didReceiveResponse):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didReceiveData):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didFinishLoading):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didFail):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didFinishTiming):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::load):
        * loader/ios/LegacyPreviewLoader.mm:
        (WebCore::LegacyPreviewLoader::previewConverterDidStartConverting):
        * page/DOMWindowExtension.cpp:
        (WebCore::DOMWindowExtension::suspendForBackForwardCache):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::defaultWheelEventHandler):
        * page/Frame.cpp:
        (WebCore::Frame::addUserScriptAwaitingNotification):
        * page/FrameView.cpp:
        (WebCore::FrameView::didLayout):
        * page/Page.cpp:
        (WebCore::Page::didFinishLoadingImageForElement):
        * page/PrintContext.cpp:
        (WebCore::PrintContext::begin):
        * page/ios/EventHandlerIOS.mm:
        (WebCore::EventHandler::mouseMoved):
        * page/mac/ImageOverlayControllerMac.mm:
        (WebCore::ImageOverlayController::updateDataDetectorHighlights):
        (WebCore::ImageOverlayController::elementUnderMouseDidChange):
        * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.mm:
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::createTimer):
        * page/scrolling/nicosia/ScrollingCoordinatorNicosia.cpp:
        (WebCore::ScrollingCoordinatorNicosia::handleWheelEventForScrolling):
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::framesNativeImages):
        * platform/graphics/FontCascadeFonts.cpp:
        (WebCore::FontCascadeFonts::FontCascadeFonts):
        * platform/graphics/ImageSource.cpp:
        (WebCore::ImageSource::startAsyncDecodingQueue):
        * platform/graphics/avfoundation/objc/LocalSampleBufferDisplayLayer.mm:
        (WebCore::LocalSampleBufferDisplayLayer::enqueueSample):
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::didParseInitializationData):
        * platform/graphics/cg/GraphicsContextGLCG.cpp:
        (WebCore::GraphicsContextGLOpenGL::paintToCanvas):
        * platform/graphics/cg/ImageBufferCGBackend.cpp:
        (WebCore::ImageBufferCGBackend::copyCGImageForEncoding const):
        * platform/graphics/displaylists/DisplayList.h:
        (WebCore::DisplayList::DisplayList::cacheImageBuffer):
        (WebCore::DisplayList::DisplayList::cacheNativeImage):
        (WebCore::DisplayList::DisplayList::cacheFont):
        * platform/graphics/displaylists/DisplayListItems.cpp:
        (WebCore::DisplayList::SetState::apply):
        * platform/graphics/gstreamer/mse/MediaSourceTrackGStreamer.cpp:
        (WebCore::MediaSourceTrackGStreamer::create):
        * platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamer.cpp:
        (webKitMediaSrcEmitStreams):
        * platform/graphics/mac/ImageMac.mm:
        (WebCore::BitmapImage::snapshotNSImage):
        * platform/graphics/nicosia/NicosiaSceneIntegration.cpp:
        (Nicosia::SceneIntegration::SceneIntegration):
        * platform/mac/DataDetectorHighlight.mm:
        (WebCore::DataDetectorHighlight::fadeOut):
        * platform/mediastream/libwebrtc/gstreamer/RealtimeIncomingVideoSourceLibWebRTC.cpp:
        (WebCore::RealtimeIncomingVideoSourceLibWebRTC::OnFrame):
        * platform/mediastream/libwebrtc/gstreamer/RealtimeOutgoingAudioSourceLibWebRTC.cpp:
        (WebCore::RealtimeOutgoingAudioSourceLibWebRTC::audioSamplesAvailable):
        * platform/network/SocketStreamHandle.cpp:
        (WebCore::SocketStreamHandle::disconnect):
        * platform/network/curl/CurlRequest.cpp:
        (WebCore::CurlRequest::callClient):
        * platform/network/curl/CurlResourceHandleDelegate.cpp:
        (WebCore::CurlResourceHandleDelegate::curlDidReceiveResponse):
        * style/StyleBuilder.cpp:
        (WebCore::Style::Builder::applyCustomProperty):
        * style/StyleBuilderCustom.h:
        (WebCore::Style::BuilderCustom::applyValueCustomProperty):
        * style/StyleBuilderState.cpp:
        (WebCore::Style::BuilderState::resolveImageStyles):
        * style/StyleScope.cpp:
        (WebCore::Style::Scope::createOrFindSharedShadowTreeResolver):
        (WebCore::Style::Scope::collectResolverScopes):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::removedFromAncestor):
        * testing/Internals.cpp:
        (WebCore:: const):
        (WebCore::Internals::queueMicroTask):
        (WebCore::Internals::queueTaskToQueueMicrotask):
        * testing/ServiceWorkerInternals.cpp:
        (WebCore::ServiceWorkerInternals::waitForFetchEventToFinish):
        * workers/Worker.cpp:
        (WebCore::Worker::createRTCRtpScriptTransformer):
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::createRTCDataChannelRemoteHandlerConnection):
        * workers/WorkerOrWorkletScriptController.cpp:
        (WebCore::WorkerOrWorkletScriptController::loadModuleSynchronously):
        (WebCore::WorkerOrWorkletScriptController::loadAndEvaluateModule):
        * workers/service/FetchEvent.cpp:
        (WebCore::FetchEvent::promiseIsSettled):
        * workers/service/ServiceWorkerGlobalScope.cpp:
        (WebCore::ServiceWorkerGlobalScope::skipWaiting):
        * workers/service/context/SWContextManager.cpp:
        (WebCore::SWContextManager::stopWorker):
        * workers/service/context/ServiceWorkerThread.cpp:
        (WebCore::ServiceWorkerThread::queueTaskToFireFetchEvent):
        (WebCore::ServiceWorkerThread::queueTaskToPostMessage):
        (WebCore::ServiceWorkerThread::queueTaskToFireInstallEvent):
        (WebCore::ServiceWorkerThread::queueTaskToFireActivateEvent):
        * workers/service/context/ServiceWorkerThreadProxy.cpp:
        (WebCore::ServiceWorkerThreadProxy::notifyNetworkStateChange):
        (WebCore::ServiceWorkerThreadProxy::continueDidReceiveFetchResponse):
        * xml/XMLHttpRequestProgressEventThrottle.cpp:
        (WebCore::XMLHttpRequestProgressEventThrottle::dispatchEventWhenPossible):

2021-09-21  Alex Christensen  <achristensen@webkit.org>

        Reduce sizeof(NetworkLoadMetrics)
        https://bugs.webkit.org/show_bug.cgi?id=226982

        Reviewed by Chris Dumez.

        No change in behavior.  Just greatly reducing the size of a common structure.

        We take all the members that aren't used without the inspector and move them to a new struct,
        AdditionalNetworkLoadMetricsForWebInspector.  We also remove some equality comparison that
        was unnecessary because it was only used for AuthenticationChallenge equality comparisons in
        ResourceHandleMac.  We also use emptyMetrics() to remove a few unnecessary and hard to see
        copy constructor calls.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/agents/InspectorNetworkAgent.cpp:
        (WebCore::InspectorNetworkAgent::buildObjectForMetrics):
        (WebCore::InspectorNetworkAgent::buildObjectForResourceResponse):
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::loadRequest):
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didReceiveResponse):
        (WebCore::SubresourceLoader::didFinishLoading):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestResource):
        * platform/network/AuthenticationChallengeBase.cpp:
        (WebCore::AuthenticationChallengeBase::equalForWebKitLegacyChallengeComparison):
        (WebCore::AuthenticationChallengeBase::compare): Deleted.
        * platform/network/AuthenticationChallengeBase.h:
        (WebCore::operator==): Deleted.
        (WebCore::operator!=): Deleted.
        * platform/network/NetworkLoadMetrics.cpp: Added.
        (WebCore::NetworkLoadMetrics::NetworkLoadMetrics):
        (WebCore::NetworkLoadMetrics::emptyMetrics):
        (WebCore::AdditionalNetworkLoadMetricsForWebInspector::isolatedCopy):
        (WebCore::NetworkLoadMetrics::isolatedCopy const):
        * platform/network/NetworkLoadMetrics.h:
        (WebCore::NetworkLoadMetrics::encode const):
        (WebCore::NetworkLoadMetrics::decode):
        (WebCore::AdditionalNetworkLoadMetricsForWebInspector::encode const):
        (WebCore::AdditionalNetworkLoadMetricsForWebInspector::decode):
        (WebCore::NetworkLoadMetricsWithoutNonTimingData::isComplete const): Deleted.
        (WebCore::NetworkLoadMetricsWithoutNonTimingData::markComplete): Deleted.
        (WebCore::NetworkLoadMetrics::NetworkLoadMetrics): Deleted.
        (WebCore::NetworkLoadMetrics::isolatedCopy const): Deleted.
        (WebCore::NetworkLoadMetrics::operator== const): Deleted.
        (WebCore::NetworkLoadMetrics::operator!= const): Deleted.
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::equalForWebKitLegacyChallengeComparison):
        (WebCore::ResourceResponseBase::compare): Deleted.
        * platform/network/ResourceResponseBase.h:
        (WebCore::operator==): Deleted.
        (WebCore::operator!=): Deleted.
        * platform/network/curl/CurlContext.cpp:
        (WebCore::CurlHandle::addExtraNetworkLoadMetrics):
        * platform/network/curl/CurlRequest.cpp:
        (WebCore::CurlRequest::networkLoadMetrics):
        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::receivedCredential):
        (WebCore::ResourceHandle::receivedRequestToContinueWithoutCredential):
        (WebCore::ResourceHandle::receivedCancellation):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::receivedCredential):
        (WebCore::ResourceHandle::receivedRequestToContinueWithoutCredential):
        (WebCore::ResourceHandle::receivedCancellation):
        (WebCore::ResourceHandle::receivedRequestToPerformDefaultHandling):
        (WebCore::ResourceHandle::receivedChallengeRejection):

2021-09-21  Myles C. Maxfield  <mmaxfield@apple.com>

        Parsing support for font-palette
        https://bugs.webkit.org/show_bug.cgi?id=230394

        Reviewed by Simon Fraser.

        This is a pretty straightforward parsing patch. The grammar is just
        font-palette: none | normal | light | dark | <palette-identifier>.
        A <palette-identifier> is a <custom-ident>.

        There is a choice to make about how to represent the parsed data:
        Option 1:
        class None {}; class Normal {}; class Light {}; class Dark {};
        class Custom { String value; };
        using FontPalette = Variant<None, Normal, Light, Dark, Custom>;

        or,
        Option 2:
        struct FontPalette {
            enum class Type { None, Normal, Light, Dark, Custom } type;
            String value;
        };

        Upon advice from a trusted colleague, I chose option 2.

        I'm implementing parsing support for @font-palette-values in
        https://bugs.webkit.org/show_bug.cgi?id=230337.

        Tests: imported/w3c/web-platform-tests/css/css-fonts/parsing/font-palette-computed.html
               imported/w3c/web-platform-tests/css/css-fonts/parsing/font-palette-invalid.html
               imported/w3c/web-platform-tests/css/css-fonts/parsing/font-palette-valid.html

        * Headers.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::fontPaletteFromStyle):
        (WebCore::ComputedStyleExtractor::valueForPropertyInStyle):
        * css/CSSProperties.json:
        * css/CSSValueKeywords.in:
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeFontPalette):
        (WebCore::CSSPropertyParser::parseSingleValue):
        * platform/graphics/FontCache.h:
        (WebCore::FontDescriptionKeyRareData::create):
        (WebCore::FontDescriptionKeyRareData::featureSettings const):
        (WebCore::FontDescriptionKeyRareData::variationSettings const):
        (WebCore::FontDescriptionKeyRareData::fontPalette const):
        (WebCore::FontDescriptionKeyRareData::operator== const):
        (WebCore::FontDescriptionKeyRareData::FontDescriptionKeyRareData):
        (WebCore::add):
        (WebCore::FontDescriptionKey::FontDescriptionKey):
        (WebCore::FontDescriptionKey::operator== const):
        * platform/graphics/FontCascadeDescription.cpp:
        * platform/graphics/FontCascadeDescription.h:
        (WebCore::FontCascadeDescription::initialFontPalette):
        * platform/graphics/FontDescription.cpp:
        (WebCore::FontDescription::FontDescription):
        * platform/graphics/FontDescription.h:
        (WebCore::FontDescription::fontPalette const):
        (WebCore::FontDescription::setFontPalette):
        (WebCore::FontDescription::operator== const):
        (WebCore::FontDescription::encode const):
        (WebCore::FontDescription::decode):
        * platform/graphics/FontPalette.h: Added.
        (WebCore::FontPaletteNone::operator== const):
        (WebCore::FontPaletteNone::operator!= const):
        (WebCore::add):
        (WebCore::FontPaletteNormal::operator== const):
        (WebCore::FontPaletteNormal::operator!= const):
        (WebCore::FontPaletteLight::operator== const):
        (WebCore::FontPaletteLight::operator!= const):
        (WebCore::FontPaletteDark::operator== const):
        (WebCore::FontPaletteDark::operator!= const):
        (WebCore::FontPaletteCustom::operator== const):
        (WebCore::FontPaletteCustom::operator!= const):
        * style/StyleBuilderConverter.h:
        (WebCore::Style::BuilderConverter::convertFontPalette):

2021-09-21  Brent Fulgham  <bfulgham@apple.com>

        Remove XSS Auditor: Part 2 (Remove engine support)
        https://bugs.webkit.org/show_bug.cgi?id=230499
        <rdar://problem/83318883>

        Reviewed by Yusuke Suzuki.

        This patch removes the implementation of the XSS Auditor from the engine, but leave the API in place so that
        client software doesn't see any change in interface.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::HTMLDocumentParser):
        (WebCore::HTMLDocumentParser::pumpTokenizerLoop):
        (WebCore::HTMLDocumentParser::pumpTokenizer):
        * html/parser/HTMLDocumentParser.h:
        * html/parser/HTMLToken.h:
        (WebCore::HTMLToken::attributes const):
        (WebCore::HTMLToken::eraseValueOfAttribute): Deleted.
        * html/parser/XSSAuditor.cpp: Removed.
        * html/parser/XSSAuditor.h: Removed.
        * html/parser/XSSAuditorDelegate.cpp: Removed.
        * html/parser/XSSAuditorDelegate.h: Removed.
        * loader/PingLoader.cpp:
        (WebCore::PingLoader::sendViolationReport):
        * loader/PingLoader.h:

2021-09-21  David Kilzer  <ddkilzer@apple.com>

        Rename {checked,dynamic}_ns_cast<> to {checked,dynamic}_objc_cast<>
        <https://webkit.org/b/230508>
        <rdar://problem/83323145>

        Reviewed by Brent Fulgham.

        * Modules/applepay/PaymentInstallmentConfiguration.mm:
        * Modules/applepay/cocoa/PaymentMerchantSessionCocoa.mm:
        - Also fix *SoftLink.h header order.
        * platform/graphics/cocoa/WebCoreCALayerExtras.mm:
        * platform/mac/BlocklistUpdater.mm:
        * rendering/RenderThemeIOS.mm:
        - Import <wtf/cocoa/TypeCastsCocoa.h> for future move of
          WTF::dynamic_objc_cast<> from RetainPtr.h to that header.

2021-09-21  Simon Fraser  <simon.fraser@apple.com>

        Modernize ENABLE_IOSURFACE_POOL_STATISTICS logging
        https://bugs.webkit.org/show_bug.cgi?id=230570

        Reviewed by Tim Horton.

        Fix thread safety warnings when ENABLE_IOSURFACE_POOL_STATISTICS is defined.
        Use TextStream for logging.
        
        This could be a log channel.

        * platform/graphics/cg/IOSurfacePool.cpp:
        (WebCore::IOSurfacePool::takeSurface):
        (WebCore::IOSurfacePool::addSurface):
        (WebCore::IOSurfacePool::evict):
        (WebCore::IOSurfacePool::collectionTimerFired):
        (WebCore::IOSurfacePool::poolStatistics const):
        (WebCore::IOSurfacePool::showPoolStatistics): Deleted.
        * platform/graphics/cg/IOSurfacePool.h:
        * platform/graphics/cocoa/IOSurface.h:
        * platform/graphics/cocoa/IOSurface.mm:
        (WebCore::operator<<):

2021-09-21  Myles C. Maxfield  <mmaxfield@apple.com>

        Push font-palette-values data into CSSFontSelector
        https://bugs.webkit.org/show_bug.cgi?id=230447

        Reviewed by Antti Koivisto.

        In https://bugs.webkit.org/show_bug.cgi?id=230337 I added parsing support for font-palette-values.
        This patch pushes the parsed data down into CSSFontSelector, so it can be passed into the font
        creation routines. The data is retained, so it's always possible to query the CSSFontSelector for
        the state of the world regarding font palettes.

        No new tests because there is no behavior change. This querying functionality will be hooked up
        in https://bugs.webkit.org/show_bug.cgi?id=230449.

        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::buildStarted):
        (WebCore::CSSFontSelector::addFontPaletteValuesRule):
        (WebCore::CSSFontSelector::fontRangesForFamily):
        * css/CSSFontSelector.h:
        * style/RuleSet.cpp:
        (WebCore::Style::RuleSet::Builder::addChildRules):

2021-09-21  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Implement fallbackFontsForRun for IFC
        https://bugs.webkit.org/show_bug.cgi?id=230561

        Reviewed by Antti Koivisto.

        fallbackFontsForRun collects all the non-primary fonts used by a text run. It also takes soft hyphens into account but only when they are actually
        part of the rendered content.
        This function is called while we construct the final runs for a line and parent inline boxes (parent of the text runs)
        need to know their enclosing layout bounds (glyphs from fallback font may stretch the parent inline box).

        * layout/formattingContexts/inline/text/TextUtil.cpp:
        (WebCore::Layout::fallbackFontsForRunWithIterator):
        (WebCore::Layout::TextUtil::fallbackFontsForRun):

2021-09-21  Joonghun Park  <pjh0718@gmail.com>

        Fix the behavior that 3d translation's second value is serialized to 0px regardless of its specified unit if it is zero value.
        https://bugs.webkit.org/show_bug.cgi?id=230534

        Reviewed by Simon Fraser.

        When being serialized, the css value's unit should be preserved.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeTranslate):

2021-09-21  Alan Bujtas  <zalan@apple.com>

        [IFC][Integration] Removed unused AvoidanceReason::FlowTextHasSurrogatePair
        https://bugs.webkit.org/show_bug.cgi?id=230559

        Reviewed by Antti Koivisto.

        * layout/integration/LayoutIntegrationCoverage.cpp:
        (WebCore::LayoutIntegration::printReason):
        * layout/integration/LayoutIntegrationCoverage.h:

2021-09-21  Eric Hutchison  <ehutchison@apple.com>

        Unreviewed, reverting r282768.

        Slowdown on Mac EWS builders as a constant failure.

        Reverted changeset:

        "box-shadow and text-shadow do not yield float values while
        interpolating"
        https://bugs.webkit.org/show_bug.cgi?id=230347
        https://commits.webkit.org/r282768

2021-09-21  Youenn Fablet  <youenn@apple.com>

        imported/w3c/web-platform-tests/webrtc/RTCDataChannel-close.html is flaky
        https://bugs.webkit.org/show_bug.cgi?id=230399

        Reviewed by Eric Carlson.

        We fix a number of flaky issues:
        - RTCDataChannel::didChangeReadyState should queue a task and inside the task update the state + dispatch event.
          Previously, we were updating the state, then queueing a task to dispatch the event.
        - We were creating the data channel at the time we were creating the data channel handler.
          In that case, we might have missed some state changes.
          We now create the data channel handler as soon as possible, then queue a task where we create the data channel and fire the channel event.
        - We check the backend data channel state as soon as creating the data channel handler, instead of when creating the data channel for the same reason.
        - When we buffer states, we need to store whether an error occurs to properly fire the error event as needed.
        - Similarly to readyState, we need to queue a task to update bufferedAmount and, if needed, synchronously fire the bufferedAmountLow event.

        Covered by updated RTCDataChannel-close.html.

        * Modules/mediastream/PeerConnectionBackend.cpp:
        (WebCore::PeerConnectionBackend::newDataChannel):
        * Modules/mediastream/PeerConnectionBackend.h:
        * Modules/mediastream/RTCDataChannel.cpp:
        (WebCore::RTCDataChannel::didChangeReadyState):
        (WebCore::RTCDataChannel::bufferedAmountIsDecreasing):
        * Modules/mediastream/libwebrtc/LibWebRTCDataChannelHandler.cpp:
        (WebCore::LibWebRTCDataChannelHandler::LibWebRTCDataChannelHandler):
        (WebCore::LibWebRTCDataChannelHandler::dataChannelInit const):
        (WebCore::LibWebRTCDataChannelHandler::label const):
        (WebCore::LibWebRTCDataChannelHandler::setClient):
        (WebCore::LibWebRTCDataChannelHandler::checkState):
        * Modules/mediastream/libwebrtc/LibWebRTCDataChannelHandler.h:
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::OnDataChannel):

2021-09-21  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Ceil the descent value when adjusting the layout bounds for an inline box
        https://bugs.webkit.org/show_bug.cgi?id=230557

        Reviewed by Antti Koivisto.

        Use ceil instead of floor to match legacy line layout positioning.

        * layout/formattingContexts/inline/InlineDisplayContentBuilder.cpp: use ceilf everywhere
        (WebCore::Layout::InlineDisplayContentBuilder::createRunsAndUpdateGeometryForLineContent):
        * layout/formattingContexts/inline/InlineLineBoxBuilder.cpp:
        (WebCore::Layout::LineBoxBuilder::adjustVerticalGeometryForInlineBoxWithFallbackFonts const):
        (WebCore::Layout::LineBoxBuilder::setInitialVerticalGeometryForInlineBox const):

2021-09-21  Youenn Fablet  <youenn@apple.com>

        [iOS] Disable default system gesture on extended gamepad
        https://bugs.webkit.org/show_bug.cgi?id=230297
        <rdar://65610651>

        Reviewed by Brady Eidson.

        Prevent default system behavior for some game pad gestures.
        Not testable on bots.

        * platform/gamepad/cocoa/GameControllerGamepad.mm:
        (WebCore::GameControllerGamepad::setupAsExtendedGamepad):

2021-09-21  Eric Carlson  <eric.carlson@apple.com>

        Remove unused CGWindowCaptureSource
        https://bugs.webkit.org/show_bug.cgi?id=230520
        <rdar://problem/83329399>

        Reviewed by David Kilzer.

        Remove CGWindowCaptureSource as it can't be used.

        No new tests, no functional change.

        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/mediastream/mac/CGWindowCaptureSource.h: Removed.
        * platform/mediastream/mac/CGWindowCaptureSource.mm: Removed.
        * platform/mediastream/mac/DisplayCaptureManagerCocoa.cpp:
        (WebCore::DisplayCaptureManagerCocoa::updateWindowCaptureDevices):
        (WebCore::DisplayCaptureManagerCocoa::windowCaptureDeviceWithPersistentID):
        * platform/mediastream/mac/DisplayCaptureSourceMac.cpp:
        (WebCore::DisplayCaptureSourceMac::create):

2021-09-21  Alex Christensen  <achristensen@webkit.org>

        Use typed identifier for WebSocketChannel identifiers
        https://bugs.webkit.org/show_bug.cgi?id=230486

        Reviewed by Youenn Fablet.

        This also allows us to have an identifier for WebSocketChannels used in workers.

        * Modules/websockets/ThreadableWebSocketChannel.h:
        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::WebSocketChannel):
        * Modules/websockets/WebSocketChannel.h:
        * Modules/websockets/WebSocketChannelInspector.cpp:
        (WebCore::WebSocketChannelInspector::WebSocketChannelInspector):
        (WebCore::WebSocketChannelInspector::progressIdentifier const):
        * Modules/websockets/WebSocketChannelInspector.h:
        * Modules/websockets/WorkerThreadableWebSocketChannel.cpp:
        (WebCore::WorkerThreadableWebSocketChannel::WorkerThreadableWebSocketChannel):
        * Modules/websockets/WorkerThreadableWebSocketChannel.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didCreateWebSocketImpl):
        (WebCore::InspectorInstrumentation::willSendWebSocketHandshakeRequestImpl):
        (WebCore::InspectorInstrumentation::didReceiveWebSocketHandshakeResponseImpl):
        (WebCore::InspectorInstrumentation::didCloseWebSocketImpl):
        (WebCore::InspectorInstrumentation::didReceiveWebSocketFrameImpl):
        (WebCore::InspectorInstrumentation::didReceiveWebSocketFrameErrorImpl):
        (WebCore::InspectorInstrumentation::didSendWebSocketFrameImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didCreateWebSocket):
        (WebCore::InspectorInstrumentation::willSendWebSocketHandshakeRequest):
        (WebCore::InspectorInstrumentation::didReceiveWebSocketHandshakeResponse):
        (WebCore::InspectorInstrumentation::didCloseWebSocket):
        (WebCore::InspectorInstrumentation::didReceiveWebSocketFrame):
        (WebCore::InspectorInstrumentation::didReceiveWebSocketFrameError):
        (WebCore::InspectorInstrumentation::didSendWebSocketFrame):
        * inspector/agents/InspectorNetworkAgent.cpp:
        (WebCore::InspectorNetworkAgent::didCreateWebSocket):
        (WebCore::InspectorNetworkAgent::willSendWebSocketHandshakeRequest):
        (WebCore::InspectorNetworkAgent::didReceiveWebSocketHandshakeResponse):
        (WebCore::InspectorNetworkAgent::didCloseWebSocket):
        (WebCore::InspectorNetworkAgent::didReceiveWebSocketFrame):
        (WebCore::InspectorNetworkAgent::didSendWebSocketFrame):
        (WebCore::InspectorNetworkAgent::didReceiveWebSocketFrameError):
        (WebCore::InspectorNetworkAgent::webSocketForRequestId):
        * inspector/agents/InspectorNetworkAgent.h:
        * loader/ProgressTracker.cpp:
        (WebCore::ProgressTracker::createUniqueIdentifier): Deleted.
        * loader/ProgressTracker.h:

2021-09-21  Antti Koivisto  <antti@apple.com>

        REGRESSION(r282129): Double clicking margin of a block inside a <span> may select a wrong block
        https://bugs.webkit.org/show_bug.cgi?id=230535

        Reviewed by Alan Bujtas.

        If the blocks are inside a <span> we fail to search through continuation chain
        and end up always selecting the first block inside it.

        Test: editing/selection/hit-test-continuation-margin.html

        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::positionForPoint):

        The firstLineBox() test was really an "are inlines culled" test which stopped making sense
        after inline culling was removed. Continuations need special handling but we would only
        get to that code path if inlines were culled. After r282129 we would never get there.

        Fix by removing the hasInlineBox test.

2021-09-21  Simon Fraser  <simon.fraser@apple.com>

        ScrollAnimationSmooth should only have one way to start an animation
        https://bugs.webkit.org/show_bug.cgi?id=230529

        Reviewed by Martin Robinson.

        Remove the ScrollbarOrientation/ScrollGranularity/step/multiplier entry point on
        ScrollAnimationSmooth; the caller can do the math to compute the end point.

        * page/scrolling/nicosia/ScrollingTreeScrollingNodeDelegateNicosia.cpp:
        (WebCore::ScrollingTreeScrollingNodeDelegateNicosia::handleWheelEvent):
        * platform/ScrollAnimationSmooth.cpp:
        (WebCore::ScrollAnimationSmooth::startAnimatedScroll): Deleted.
        * platform/ScrollAnimationSmooth.h:
        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::scroll):

2021-09-21  Antti Koivisto  <antti@apple.com>

        [LFC][Integration] Enable markers and highlights
        https://bugs.webkit.org/show_bug.cgi?id=230542

        Reviewed by Alan Bujtas.

        Layout and paint highlights and markers without switching to legacy line layout.

        * Modules/highlight/Highlight.cpp:
        (WebCore::repaintRange):
        * dom/DocumentMarkerController.cpp:
        (WebCore::DocumentMarkerController::addMarker):
        * editing/Editor.cpp:
        (WebCore::Editor::setComposition):
        * layout/integration/LayoutIntegrationCoverage.cpp:
        (WebCore::LayoutIntegration::printReason):
        (WebCore::LayoutIntegration::canUseForChild):
        (WebCore::LayoutIntegration::canUseForLineLayoutWithReason):
        * layout/integration/LayoutIntegrationCoverage.h:
        * layout/integration/LayoutIntegrationLineLayout.cpp:
        (WebCore::LayoutIntegration::LineLayout::paint):

2021-09-21  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r282807.
        https://bugs.webkit.org/show_bug.cgi?id=230546

        This is causing imported/w3c/web-platform-tests/css/css-
        fonts/parsing/font-palette-values-valid.html crash

        Reverted changeset:

        "Push font-palette-values data into CSSFontSelector"
        https://bugs.webkit.org/show_bug.cgi?id=230447
        https://commits.webkit.org/r282807

2021-09-21  Chris Lord  <clord@igalia.com>

        imported/w3c/web-platform-tests/css/css-font-loading/fontfaceset-load-var.html crashes
        https://bugs.webkit.org/show_bug.cgi?id=229727
        <rdar://problem/82834470>

        Reviewed by Darin Adler.

        Don't use CalcParser in raw CSS parsing functions that don't accept
        a CSSValuePool parameter.

        No new tests, covered by existing tests.

        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::consumeCalcRawWithKnownTokenTypeFunction):
        (WebCore::CSSPropertyParserHelpers::consumeIntegerTypeRawWithKnownTokenTypeFunction):
        (WebCore::CSSPropertyParserHelpers::consumeNumberRawWithKnownTokenTypeFunction):
        (WebCore::CSSPropertyParserHelpers::consumePercentRawWithKnownTokenTypeFunction):
        (WebCore::CSSPropertyParserHelpers::consumeLengthRawWithKnownTokenTypeFunction):
        (WebCore::CSSPropertyParserHelpers::consumeAngleRawWithKnownTokenTypeFunction):
        (WebCore::CSSPropertyParserHelpers::consumeLengthOrPercentRaw):

2021-09-21  Myles C. Maxfield  <mmaxfield@apple.com>

        Push font-palette-values data into CSSFontSelector
        https://bugs.webkit.org/show_bug.cgi?id=230447

        Reviewed by Antti Koivisto.

        In https://bugs.webkit.org/show_bug.cgi?id=230337 I added parsing support for font-palette-values.
        This patch pushes the parsed data down into CSSFontSelector, so it can be passed into the font
        creation routines. The data is retained, so it's always possible to query the CSSFontSelector for
        the state of the world regarding font palettes.

        No new tests because there is no behavior change. This querying functionality will be hooked up
        in https://bugs.webkit.org/show_bug.cgi?id=230449.

        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::buildStarted):
        (WebCore::CSSFontSelector::addFontPaletteValuesRule):
        (WebCore::CSSFontSelector::fontRangesForFamily):
        * css/CSSFontSelector.h:
        * style/RuleSet.cpp:
        (WebCore::Style::RuleSet::Builder::addChildRules):

2021-09-21  Myles C. Maxfield  <mmaxfield@apple.com>

        Parsing support for font-palette-values
        https://bugs.webkit.org/show_bug.cgi?id=230337

        Reviewed by Antti Koivisto.

        There's nothing particularly interesting here - it's just support for another at-rule.
        I've implemented what's in the spec right now:
        https://drafts.csswg.org/css-fonts-4/#font-palette-values

        There are 2 new descriptors: base-palette and override-color. I've added a new CSSValue subclass
        for each of the items in the override-color list - these items are just tuples of two
        CSSPrimitiveValues. I could have done this with a CSSValueList which always just happens to have
        a length of 2, but I thought that was less elegant (and has an extra pointer indirection) than
        making a class to hold the two CSSPrimitiveValues.

        The only difference with what's in the spec is that I've given a different value to
        FONT_PALETTE_VALUES_RULE, because its current value conflicts with VIEWPORT_RULE. This is being
        tracked at https://github.com/w3c/csswg-drafts/issues/6623.

        I created a new datatype and file in platform/graphics/FontPaletteValues.h because this data will
        eventually be passed to preparePlatformFont(), which is in platform/, so this data needs to be
        accessible from platform/ too.

        Tests: imported/w3c/web-platform-tests/css/css-fonts/parsing/font-palette-values-invalid.html
               imported/w3c/web-platform-tests/css/css-fonts/parsing/font-palette-values-valid.html

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Headers.cmake:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCSSRuleCustom.cpp:
        (WebCore::toJSNewlyCreated):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::valueForPropertyInStyle):
        * css/CSSFontPaletteValuesOverrideColorValue.cpp: Copied from Source/WebCore/css/StyleRuleType.h.
        (WebCore::CSSFontPaletteValuesOverrideColorValue::customCSSText const):
        (WebCore::CSSFontPaletteValuesOverrideColorValue::equals const):
        * css/CSSFontPaletteValuesOverrideColorValue.h: Copied from Source/WebCore/css/StyleRuleType.h.
        * css/CSSFontPaletteValuesRule.cpp: Added.
        (WebCore::CSSFontPaletteValuesRule::CSSFontPaletteValuesRule):
        (WebCore::CSSFontPaletteValuesRule::~CSSFontPaletteValuesRule):
        (WebCore::parseString):
        (WebCore::CSSFontPaletteValuesRule::fontFamily const):
        (WebCore::CSSFontPaletteValuesRule::basePalette const):
        (WebCore::CSSFontPaletteValuesRule::setFontFamily):
        (WebCore::CSSFontPaletteValuesRule::setBasePalette):
        (WebCore::CSSFontPaletteValuesRule::initializeMapLike):
        (WebCore::CSSFontPaletteValuesRule::setFromMapLike):
        (WebCore::CSSFontPaletteValuesRule::clear):
        (WebCore::CSSFontPaletteValuesRule::remove):
        (WebCore::CSSFontPaletteValuesRule::cssText const):
        (WebCore::CSSFontPaletteValuesRule::reattach):
        * css/CSSFontPaletteValuesRule.h: Copied from Source/WebCore/css/StyleRuleType.h.
        * css/CSSFontPaletteValuesRule.idl: Added.
        * css/CSSProperties.json:
        * css/CSSRule.cpp:
        * css/CSSRule.h:
        * css/CSSRule.idl:
        * css/CSSValue.cpp:
        (WebCore::CSSValue::equals const):
        (WebCore::CSSValue::cssText const):
        (WebCore::CSSValue::destroy):
        * css/CSSValue.h:
        (WebCore::CSSValue::isFontPaletteValuesOverrideColorValue const):
        * css/StyleRule.cpp:
        (WebCore::StyleRuleBase::destroy):
        (WebCore::StyleRuleBase::copy const):
        (WebCore::StyleRuleBase::createCSSOMWrapper const):
        (WebCore::StyleRuleFontPaletteValues::StyleRuleFontPaletteValues):
        * css/StyleRule.h:
        (WebCore::StyleRuleBase::isFontPaletteValuesRule const):
        (isType):
        * css/StyleRuleType.h:
        * css/StyleSheetContents.cpp:
        (WebCore::traverseRulesInVector):
        (WebCore::StyleSheetContents::traverseSubresources const):
        * css/parser/CSSAtRuleID.cpp:
        (WebCore::cssAtRuleID):
        * css/parser/CSSAtRuleID.h:
        * css/parser/CSSParserImpl.cpp:
        (WebCore::CSSParserImpl::consumeAtRule):
        (WebCore::CSSParserImpl::consumeFontPaletteValuesRule):
        (WebCore::CSSParserImpl::consumeDeclaration):
        * css/parser/CSSParserImpl.h:
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::parseValue):
        (WebCore::consumeBasePaletteDescriptor):
        (WebCore::consumeOverrideColorDescriptor):
        (WebCore::CSSPropertyParser::parseFontPaletteValuesDescriptor):
        * css/parser/CSSPropertyParser.h:
        * platform/graphics/FontPaletteValues.h: Added.
        (WebCore::FontPaletteValues::FontPaletteValues):
        (WebCore::FontPaletteValues::basePalette const):
        (WebCore::FontPaletteValues::setBasePalette):
        (WebCore::FontPaletteValues::overrideColor const):
        (WebCore::FontPaletteValues::appendOverrideColor):
        (WebCore::FontPaletteValues::clearOverrideColor):
        (WebCore::FontPaletteValues::remove):

2021-09-21  Myles C. Maxfield  <mmaxfield@apple.com>

        Maplike infrastructure ASSERT()s if the first operation is a delete of a existing values
        https://bugs.webkit.org/show_bug.cgi?id=230530

        Reviewed by Youenn Fablet.

        The infrastructure deletes the value from the backing map before the JS map is initialized.
        Then, when the infrastructure goes to delete it from the JS map, it isn't present. The
        ASSERT() checks to see that it was deleted from the JS map iff it was deleted from the backing
        map.

        Test: js/dom/maplike.html

        * bindings/js/JSDOMMapLike.h:
        (WebCore::forwardDeleteToMapLike):

2021-09-21  Ziran Sun  <zsun@igalia.com>

        [css-grid] When the max is less than the min in minmax(), the max will be floored by the min
        https://bugs.webkit.org/show_bug.cgi?id=230481

        Reviewed by Sergio Villar Senin.

        As per discussions in https://github.com/w3c/csswg-drafts/issues/4043, when the max is less than
        the min in minmax()we need to floor the max track sizing function by the min track sizing function
        when calculating the number of "auto-fit" or "auto-fill" repetitions. This change handles the
        situations such as
          -  If both the min and max track sizing functions are definite, use the maximum of them
          -  If only one track sizing function is definite, use that one

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::computeAutoRepeatTracksCount const):

2021-09-21  Youenn Fablet  <youenn@apple.com>

        Update list of WebRTC senders and receivers when updating local or remote descriptions
        https://bugs.webkit.org/show_bug.cgi?id=230403

        Reviewed by Eric Carlson.

        Senders and receivers are only updated when updating descriptions, call collectTransceivers at those points.
        We do this just before updating sender/receiver transports, which allows to fix a bug in case senders/receivers are not surfaced through track events.
 
        Covered by updated tests.

        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::getSenders const):
        (WebCore::RTCPeerConnection::getReceivers const):
        (WebCore::RTCPeerConnection::getTransceivers const):
        (WebCore::RTCPeerConnection::updateTransceiversAfterSuccessfulLocalDescription):
        (WebCore::RTCPeerConnection::updateTransceiversAfterSuccessfulRemoteDescription):

2021-09-21  Ziran Sun  <zsun@igalia.com>

        [css-grid] FlexType is not applicable to min track sizing
        https://bugs.webkit.org/show_bug.cgi?id=230405

        Reviewed by Sergio Villar Senin.

        For min track sizing, flexType is not applicable and shouldn't need a check.
        This change is to remove the check that should not happen. No behaviour changes with
        this change.

        * rendering/GridTrackSizingAlgorithm.cpp:
        (WebCore::GridTrackSizingAlgorithm::spanningItemCrossesFlexibleSizedTracks const):

2021-09-20  Chris Dumez  <cdumez@apple.com>

        Drop remaining uses of makeRefPtr() in WebCore/
        https://bugs.webkit.org/show_bug.cgi?id=230527

        Reviewed by Alex Christensen.

        * html/CustomPaintImage.cpp:
        * html/DirectoryFileListCreator.cpp:
        (WebCore::DirectoryFileListCreator::start):
        * html/FTPDirectoryDocument.cpp:
        (WebCore::FTPDirectoryDocumentParser::loadDocumentTemplate):
        * html/FileInputType.cpp:
        (WebCore::FileInputType::appendFormData const):
        (WebCore::FileInputType::disabledStateChanged):
        (WebCore::FileInputType::attributeChanged):
        (WebCore::FileInputType::filesChosen):
        * html/HTMLDetailsElement.cpp:
        (WebCore::HTMLDetailsElement::isActiveSummary const):
        (WebCore::HTMLDetailsElement::parseAttribute):
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::namedItem):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::editabilityFromContentEditableAttr):
        (WebCore::imageOverlayHost):
        (WebCore::HTMLElement::isInsideImageOverlay):
        (WebCore::HTMLElement::updateWithTextRecognitionResult):
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::didAttachRenderers):
        * html/HTMLFormControlsCollection.cpp:
        (WebCore::findFormAssociatedElement):
        (WebCore::HTMLFormControlsCollection::customElementAfter const):
        (WebCore::HTMLFormControlsCollection::updateNamedElementCache const):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::~HTMLFormElement):
        (WebCore::HTMLFormElement::length const):
        (WebCore::HTMLFormElement::submitIfPossible):
        (WebCore::HTMLFormElement::textFieldValues const):
        (WebCore::HTMLFormElement::effectiveTarget const):
        (WebCore::HTMLFormElement::elementFromPastNamesMap const):
        (WebCore::HTMLFormElement::copyAssociatedElementsVector const):
        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::namedItem):
        * html/HTMLHtmlElement.cpp:
        (WebCore::HTMLHtmlElement::insertedByParser):
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::bestFitSourceFromPictureElement):
        (WebCore::HTMLImageElement::evaluateDynamicMediaQueryDependencies):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::defaultEventHandler):
        * html/HTMLLabelElement.cpp:
        (WebCore::firstElementWithIdIfLabelable):
        * html/HTMLLegendElement.cpp:
        (WebCore::HTMLLegendElement::form const):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::setCSSStyleSheet):
        (WebCore::HTMLLinkElement::addSubresourceAttributeURLs const):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::loadResource):
        (WebCore::HTMLMediaElement::updateActiveTextTrackCues):
        (WebCore::HTMLMediaElement::removeTextTrack):
        (WebCore::HTMLMediaElement::layoutSizeChanged):
        * html/HTMLObjectElement.cpp:
        (WebCore::shouldBeExposed):
        (WebCore::HTMLObjectElement::appendFormData):
        * html/HTMLOptGroupElement.cpp:
        (WebCore::HTMLOptGroupElement::recalcSelectOptions):
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::bindingsInstance):
        (WebCore::HTMLPlugInElement::isReplacementObscured):
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::isImageType):
        (WebCore::HTMLPlugInImageElement::willDetachRenderers):
        * html/HTMLSlotElement.cpp:
        (WebCore::HTMLSlotElement::attributeChanged):
        (WebCore::HTMLSlotElement::assignedNodes const):
        * html/HTMLSourceElement.cpp:
        (WebCore::HTMLSourceElement::parseAttribute):
        * html/HTMLStyleElement.cpp:
        (WebCore::HTMLStyleElement::addSubresourceAttributeURLs const):
        * html/HTMLTableRowElement.cpp:
        (WebCore::findRows):
        * html/HTMLTrackElement.cpp:
        (WebCore::HTMLTrackElement::mediaElement const):
        * html/LinkIconCollector.cpp:
        (WebCore::LinkIconCollector::iconsOfTypes):
        * html/MediaDocument.cpp:
        (WebCore::MediaDocumentParser::createDocumentStructure):
        (WebCore::MediaDocument::defaultEventHandler):
        (WebCore::MediaDocument::replaceMediaElementTimerFired):
        * html/MediaElementSession.cpp:
        (WebCore::isElementRectMostlyInMainFrame):
        (WebCore::isElementLargeRelativeToMainFrame):
        * html/PluginDocument.cpp:
        (WebCore::PluginDocumentParser::createDocumentStructure):
        (WebCore::PluginDocumentParser::appendBytes):
        * html/SubmitInputType.cpp:
        (WebCore::SubmitInputType::handleDOMActivateEvent):
        * html/canvas/CanvasRenderingContext.cpp:
        (WebCore::CanvasRenderingContext::wouldTaintOrigin):
        * html/canvas/CanvasStyle.cpp:
        (WebCore::CanvasStyle::CanvasStyle):
        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::beginQuery):
        (WebCore::WebGL2RenderingContext::getIndexedParameter):
        (WebCore::WebGL2RenderingContext::getFramebufferAttachmentParameter):
        (WebCore::WebGL2RenderingContext::getParameter):
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getFramebufferAttachmentParameter):
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::getParameter):
        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::executeReparentTask):
        (WebCore::executeTakeAllChildrenAndReparentTask):
        (WebCore::HTMLConstructionSite::dispatchDocumentElementAvailableIfNeeded):
        (WebCore::HTMLConstructionSite::findFosterSite):
        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::TokenPreloadScanner::StartTagScanner::processAttribute):
        * html/parser/XSSAuditorDelegate.cpp:
        (WebCore::XSSAuditorDelegate::generateViolationReport):
        * html/shadow/TextControlInnerElements.cpp:
        (WebCore::TextControlInnerTextElement::defaultEventHandler):
        (WebCore::SearchFieldResultsButtonElement::resolveCustomStyle):
        (WebCore::SearchFieldResultsButtonElement::defaultEventHandler):
        * html/shadow/TextPlaceholderElement.cpp:
        (WebCore::TextPlaceholderElement::insertedIntoAncestor):
        (WebCore::TextPlaceholderElement::removedFromAncestor):
        * html/track/InbandGenericTextTrack.cpp:
        (WebCore::InbandGenericTextTrack::updateGenericCue):
        (WebCore::InbandGenericTextTrack::removeGenericCue):
        * html/track/TextTrack.cpp:
        (WebCore::TextTrack::addCue):
        (WebCore::TextTrack::addRegion):
        * inspector/agents/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::setEmulatedMedia):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::notifyFinished):
        (WebCore::DocumentLoader::tryLoadingRedirectRequestFromApplicationCache):
        * loader/FormSubmission.cpp:
        (WebCore::FormSubmission::create):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadURL):
        (WebCore::FrameLoader::commitProvisionalLoad):
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame):
        (WebCore::FrameLoader::scrollToFragmentWithParentBoundary):
        * loader/HistoryController.cpp:
        (WebCore::FrameLoader::HistoryController::restoreScrollPositionAndViewState):
        * loader/NavigationScheduler.cpp:
        * loader/SubframeLoader.cpp:
        (WebCore::FrameLoader::SubframeLoader::loadOrRedirectSubframe):
        * loader/cache/CachedFont.cpp:
        (WebCore::CachedFont::createCustomFontData):
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected):
        (WebCore::ContextMenuController::populate):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::innerWidth const):
        (WebCore::DOMWindow::requestIdleCallback):
        (WebCore::DOMWindow::cancelIdleCallback):
        (WebCore::DOMWindow::languagesChanged):
        (WebCore::DOMWindow::dispatchLoadEvent):
        * page/DragController.cpp:
        (WebCore::DragController::tryToUpdateDroppedImagePlaceholders):
        (WebCore::DragController::insertDroppedImagePlaceholdersAtCaret):
        (WebCore::DragController::finalizeDroppedImagePlaceholder):
        * page/EventHandler.cpp:
        (WebCore::nodeToSelectOnMouseDownForNode):
        (WebCore::expandSelectionToRespectSelectOnMouseDown):
        (WebCore::EventHandler::canMouseDownStartSelect):
        (WebCore::EventHandler::hitTestResultAtPoint const):
        (WebCore::EventHandler::scheduleScrollEvent):
        * page/FrameView.cpp:
        (WebCore::FrameView::scrollToFragmentInternal):
        (WebCore::FrameView::scrollToFocusedElementInternal):
        * page/ImageOverlayController.cpp:
        (WebCore::ImageOverlayController::selectionQuadsDidChange):
        * page/Page.cpp:
        (WebCore::replaceRanges):
        (WebCore::Page::replaceRangesWithText):
        (WebCore::Page::setEditableRegionEnabled):
        (WebCore::Page::editableElementsInRect const):
        (WebCore::Page::doAfterUpdateRendering):
        (WebCore::Page::setUnderPageBackgroundColorOverride):
        (WebCore::Page::didFinishLoadingImageForElement):
        (WebCore::Page::updateElementsWithTextRecognitionResults):
        * page/PageColorSampler.cpp:
        (WebCore::PageColorSampler::sampleTop):
        * page/PointerLockController.cpp:
        (WebCore::PointerLockController::enqueueEvent):
        * page/TextIndicator.cpp:
        (WebCore::TextIndicator::createWithRange):
        * page/UndoManager.cpp:
        (WebCore::UndoManager::addItem):
        * page/ios/EventHandlerIOS.mm:
        (WebCore::EventHandler::focusDocumentView):
        * page/ios/FrameIOS.mm:
        (WebCore::nodeIsMouseFocusable):
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::focusDocumentView):
        * page/mac/ImageOverlayControllerMac.mm:
        (WebCore::ImageOverlayController::updateDataDetectorHighlights):
        (WebCore::ImageOverlayController::platformHandleMouseEvent):
        (WebCore::ImageOverlayController::handleDataDetectorAction):
        * page/mac/ServicesOverlayController.mm:
        (WebCore::ServicesOverlayController::buildSelectionHighlight):
        * platform/PasteboardCustomData.cpp:
        (WebCore::PasteboardCustomData::readBuffer const):
        * platform/graphics/avfoundation/CDMFairPlayStreaming.cpp:
        (WebCore::CDMPrivateFairPlayStreaming::setLogger):
        * platform/graphics/avfoundation/objc/CDMInstanceFairPlayStreamingAVFObjC.mm:
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::setLogger):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::setLogger):
        * platform/graphics/avfoundation/objc/SourceBufferParserAVFObjC.mm:
        (WebCore::SourceBufferParserAVFObjC::setLogger):
        * platform/graphics/cairo/ImageBufferCairoSurfaceBackend.cpp:
        (WebCore::ImageBufferCairoSurfaceBackend::copyNativeImage const):
        * platform/graphics/cocoa/SourceBufferParserWebM.cpp:
        (WebCore::SourceBufferParserWebM::setLogger):
        * platform/graphics/gstreamer/mse/AppendPipeline.cpp:
        (WebCore::AppendPipeline::makeWebKitTrack):
        * platform/network/cocoa/RangeResponseGenerator.mm:
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::selectionPseudoStyle const):
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::paintMeter):
        * storage/StorageEventDispatcher.cpp:
        (WebCore::StorageEventDispatcher::dispatchSessionStorageEventsToFrames):
        (WebCore::StorageEventDispatcher::dispatchLocalStorageEventsToFrames):
        * style/StyleScope.cpp:
        (WebCore::Style::Scope::makeResolverSharingKey):
        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::defaultEventHandler):
        * svg/SVGAnimateElementBase.cpp:
        (WebCore::SVGAnimateElementBase::startAnimation):
        (WebCore::SVGAnimateElementBase::calculateAnimatedValue):
        * svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::hasValidAttributeType const):
        (WebCore::SVGAnimateMotionElement::startAnimation):
        (WebCore::SVGAnimateMotionElement::calculateAnimatedValue):
        (WebCore::SVGAnimateMotionElement::applyResultsToTarget):
        * svg/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::takeElementFromPendingResourcesForRemovalMap):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::removeElementReference):
        (WebCore::SVGElement::setCorrespondingElement):
        (WebCore::SVGElement::resolveCustomStyle):
        (WebCore::SVGElement::computedStyle):
        (WebCore::SVGElement::updateRelativeLengthsInformation):
        * svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::build const):
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::notifyFinished):
        * svg/SVGFELightElement.cpp:
        (WebCore::SVGFELightElement::svgAttributeChanged):
        (WebCore::SVGFELightElement::childrenChanged):
        * svg/SVGFESpecularLightingElement.cpp:
        (WebCore::SVGFESpecularLightingElement::build const):
        * svg/SVGFilterPrimitiveStandardAttributes.cpp:
        (WebCore::invalidateFilterPrimitiveParent):
        * svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::rebuildFontFace):
        * svg/SVGFontFaceFormatElement.cpp:
        (WebCore::SVGFontFaceFormatElement::childrenChanged):
        * svg/SVGFontFaceUriElement.cpp:
        (WebCore::SVGFontFaceUriElement::childrenChanged):
        * svg/SVGForeignObjectElement.cpp:
        (WebCore::SVGForeignObjectElement::rendererIsNeeded):
        * svg/SVGLengthContext.cpp:
        (WebCore::SVGLengthContext::determineViewport const):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::frameForCurrentScale const):
        (WebCore::SVGSVGElement::deselectAll):
        (WebCore::SVGSVGElement::localCoordinateSpaceTransform const):
        (WebCore::SVGSVGElement::getElementById):
        * svg/SVGStyleElement.cpp:
        (WebCore::SVGStyleElement::setDisabled):
        * svg/SVGTRefElement.cpp:
        (WebCore::SVGTRefElement::detachTarget):
        * svg/SVGTransformList.cpp:
        (WebCore::SVGTransformList::consolidate):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::transferSizeAttributesToTargetClone const):
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::buildPendingResource):
        (WebCore::SVGSMILElement::insertedIntoAncestor):
        (WebCore::SVGSMILElement::connectConditions):
        (WebCore::SVGSMILElement::disconnectConditions):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::setContainerSize):
        (WebCore::SVGImage::draw):
        (WebCore::SVGImage::reportApproximateMemoryCost const):
        * svg/graphics/filters/SVGFEImage.cpp:
        (WebCore::FEImage::platformApplySoftware):
        * svg/properties/SVGPropertyAnimator.h:
        (WebCore::SVGPropertyAnimator::computeCSSPropertyValue const):
        (WebCore::SVGPropertyAnimator::computeInheritedCSSPropertyValue const):
        * testing/Internals.cpp:
        (WebCore::Internals::changeSelectionListType):
        (WebCore::Internals::changeBackToReplacedString):

2021-09-20  Simon Fraser  <simon.fraser@apple.com>

        Wrap ScrollingMomentumCalculator in a ScrollAnimationMomentum when used for scroll snap
        https://bugs.webkit.org/show_bug.cgi?id=230506

        Reviewed by Wenson Hsieh.

        The long-term goal is to have all scroll animations run via ScrollAnimation subclasses,
        and for there to be a class (ScrollAnimator or ScrollingEffectsController) that has
        a member variable for the single active scroll animation, for there can be only one
        at a time.

        As a step towards that goal, make ScrollAnimationMomentum and have it wrap the 
        ScrollingMomentumCalculator. ScrollSnapAnimatorState then owns a ScrollAnimationMomentum.

        Other ScrollAnimations are running their own timers (which should go away in future),
        but for now ScrollAnimationMomentum is driven "manually" by ScrollSnapAnimatorState.
        Facilitate this by having ScrollAnimation::serviceAnimation() return the current offset.

        * Headers.cmake:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/ScrollAnimation.h:
        (WebCore::ScrollAnimationClient::scrollAnimationDidUpdate):
        (WebCore::ScrollAnimationClient::scrollAnimationDidEnd):
        (WebCore::ScrollAnimation::serviceAnimation):
        * platform/ScrollAnimationMomentum.cpp: Added.
        (WebCore::ScrollAnimationMomentum::ScrollAnimationMomentum):
        (WebCore::ScrollAnimationMomentum::startAnimatedScrollWithInitialVelocity):
        (WebCore::ScrollAnimationMomentum::retargetActiveAnimation):
        (WebCore::ScrollAnimationMomentum::stop):
        (WebCore::ScrollAnimationMomentum::isActive const):
        (WebCore::ScrollAnimationMomentum::serviceAnimation):
        (WebCore::ScrollAnimationMomentum::updateScrollExtents):
        * platform/ScrollAnimationMomentum.h: Added.
        * platform/ScrollAnimationSmooth.cpp:
        * platform/ScrollSnapAnimatorState.cpp:
        (WebCore::ScrollSnapAnimatorState::setupAnimationForState):
        (WebCore::ScrollSnapAnimatorState::teardownAnimationForState):
        (WebCore::ScrollSnapAnimatorState::currentAnimatedScrollOffset const):
        (WebCore::ScrollSnapAnimatorState::scrollExtentsForAnimation):
        * platform/ScrollSnapAnimatorState.h:
        * platform/ScrollingEffectsController.cpp:
        * platform/ScrollingEffectsController.h:
        * platform/mac/ScrollingEffectsController.mm:
        (WebCore::ScrollingEffectsController::statelessSnapTransitionTimerFired):

2021-09-20  Nikos Mouchtaris  <nmouchtaris@apple.com>

        Implement exp,log functions calc functions
        https://bugs.webkit.org/show_bug.cgi?id=229897

        Reviewed by Simon Fraser.

        Added support for calc functions exp and log. Involved adding exp and log CSS keywords and handling
        for parsing these functions and their arguments as well as computing the result based on the arguments.
        Spec for these functions: https://drafts.csswg.org/css-values-4/#exponent-funcs. 

        Tests: imported/w3c/web-platform-tests/css/css-values/exp-log-compute.html
               imported/w3c/web-platform-tests/css/css-values/exp-log-invalid.html
               imported/w3c/web-platform-tests/css/css-values/exp-log-serialize.html

        * css/CSSValueKeywords.in:
        * css/calc/CSSCalcExpressionNodeParser.cpp:
        (WebCore::CSSCalcExpressionNodeParser::parseCalcFunction):
        * css/calc/CSSCalcOperationNode.cpp:
        (WebCore::determineCategory):
        (WebCore::functionFromOperator):
        (WebCore::CSSCalcOperationNode::createLog):
        (WebCore::CSSCalcOperationNode::createExp):
        (WebCore::CSSCalcOperationNode::combineChildren):
        (WebCore::CSSCalcOperationNode::simplifyNode):
        (WebCore::functionPrefixForOperator):
        (WebCore::CSSCalcOperationNode::evaluateOperator):
        * css/calc/CSSCalcOperationNode.h:
        * css/calc/CSSCalcValue.cpp:
        (WebCore::createCSS):
        (WebCore::CSSCalcValue::isCalcFunction):
        * platform/calc/CalcExpressionOperation.cpp:
        (WebCore::CalcExpressionOperation::evaluate const):
        * platform/calc/CalcOperator.cpp:
        (WebCore::operator<<):
        * platform/calc/CalcOperator.h:

2021-09-20  Ross Kirsling  <ross.kirsling@sony.com>

        Unreviewed build fix for WinCairo with ENABLE_EXPERIMENTAL_FEATURES off.

        * rendering/TextBoxPainter.cpp:
        (WebCore::TextBoxPainter::paintForeground):
        * rendering/TextBoxPainter.h:

2021-09-20  Chris Dumez  <cdumez@apple.com>

        Reduce use of makeRefPtr() and use RefPtr { } directly
        https://bugs.webkit.org/show_bug.cgi?id=230503

        Reviewed by Geoffrey Garen.

        * Modules/async-clipboard/Clipboard.cpp:
        (WebCore::Clipboard::readText):
        (WebCore::Clipboard::writeText):
        (WebCore::Clipboard::read):
        (WebCore::Clipboard::getType):
        (WebCore::Clipboard::write):
        * Modules/async-clipboard/ClipboardItemBindingsDataSource.cpp:
        (WebCore::ClipboardItemBindingsDataSource::getType):
        (WebCore::ClipboardItemBindingsDataSource::collectDataForWriting):
        (WebCore::ClipboardItemBindingsDataSource::invokeCompletionHandler):
        * Modules/async-clipboard/ClipboardItemPasteboardDataSource.cpp:
        (WebCore::ClipboardItemPasteboardDataSource::getType):
        * Modules/highlight/AppHighlightStorage.cpp:
        (WebCore::findNodeStartingAtPathComponentIndex):
        (WebCore::findNode):
        (WebCore::AppHighlightStorage::attemptToRestoreHighlightAndScroll):
        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::deleteFunction):
        * Modules/mediacontrols/MediaControlsHost.cpp:
        (WebCore::MediaControlsHost::showMediaControlsContextMenu):
        * Modules/mediasession/MediaSession.cpp:
        (WebCore::MediaSession::MediaSession):
        * Modules/mediasession/MediaSessionCoordinator.cpp:
        (WebCore::MediaSessionCoordinator::join):
        (WebCore::MediaSessionCoordinator::seekTo):
        (WebCore::MediaSessionCoordinator::play):
        (WebCore::MediaSessionCoordinator::pause):
        (WebCore::MediaSessionCoordinator::setTrack):
        * Modules/mediasession/MediaSessionCoordinatorPrivate.cpp:
        (WebCore::MediaSessionCoordinatorPrivate::setLogger):
        * Modules/mediastream/MediaStream.cpp:
        (WebCore::createTrackPrivateVector):
        * Modules/paymentrequest/PaymentRequest.cpp:
        (WebCore::PaymentRequest::shippingAddressChanged):
        * Modules/speech/SpeechRecognition.cpp:
        (WebCore::SpeechRecognition::SpeechRecognition):
        * Modules/webdatabase/Database.cpp:
        (WebCore::Database::scheduleTransactionCallback):
        * Modules/webxr/WebXRInputSource.cpp:
        (WebCore::WebXRInputSource::update):
        (WebCore::WebXRInputSource::pollEvents):
        * Modules/webxr/WebXRInputSourceArray.cpp:
        (WebCore::WebXRInputSourceArray::update):
        * Modules/webxr/WebXRSession.cpp:
        (WebCore::WebXRSession::didCompleteShutdown):
        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::handleAriaExpandedChange):
        * accessibility/isolatedtree/AXIsolatedTree.cpp:
        (WebCore::AXIsolatedTree::treeForPageID):
        * animation/DocumentTimelinesController.cpp:
        (WebCore::DocumentTimelinesController::cacheCurrentTime):
        * animation/KeyframeEffect.cpp:
        (WebCore::KeyframeEffect::setTarget):
        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::finishNotificationSteps):
        * bridge/runtime_object.cpp:
        (JSC::Bindings::JSC_DEFINE_HOST_FUNCTION):
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::removeSelfOrChildNodesForInsertion):
        * dom/Document.cpp:
        (WebCore::Document::updateTitle):
        (WebCore::Document::implicitClose):
        (WebCore::Document::didRemoveAllPendingStylesheet):
        (WebCore::Document::prepareMouseEvent):
        (WebCore::command):
        * dom/Element.cpp:
        (WebCore::Element::scrollTo):
        (WebCore::Element::offsetLeftForBindings):
        (WebCore::Element::offsetTopForBindings):
        (WebCore::Element::focus):
        * dom/EventContext.h:
        (WebCore::EventContext::EventContext):
        * dom/EventDispatcher.cpp:
        (WebCore::EventDispatcher::dispatchEvent):
        * dom/FullscreenManager.cpp:
        (WebCore::FullscreenManager::requestFullscreenForElement):
        (WebCore::FullscreenManager::exitFullscreen):
        * dom/IdleDeadline.cpp:
        (WebCore::IdleDeadline::timeRemaining const):
        (WebCore::IdleDeadline::didTimeout const):
        * dom/MutationObserver.cpp:
        (WebCore::MutationObserver::disconnect):
        * dom/Position.cpp:
        (WebCore::Position::firstNode const):
        (WebCore::makeBoundaryPoint):
        * dom/SlotAssignment.cpp:
        (WebCore::SlotAssignment::removeSlotElementByName):
        (WebCore::SlotAssignment::didChangeSlot):
        * dom/messageports/WorkerMessagePortChannelProvider.cpp:
        (WebCore::WorkerMessagePortChannelProvider::takeAllMessagesForPort):
        (WebCore::WorkerMessagePortChannelProvider::checkRemotePortForActivity):
        * editing/ApplyBlockElementCommand.cpp:
        (WebCore::ApplyBlockElementCommand::endOfNextParagraphSplittingTextNodesIfNeeded):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyBlockStyle):
        (WebCore::ApplyStyleCommand::applyRelativeFontStyleChange):
        (WebCore::ApplyStyleCommand::splitAncestorsWithUnicodeBidi):
        (WebCore::ApplyStyleCommand::removeEmbeddingUpToEnclosingBlock):
        (WebCore::highestEmbeddingAncestor):
        (WebCore::ApplyStyleCommand::fixRangeAndApplyInlineStyle):
        (WebCore::containsNonEditableRegion):
        (WebCore::ApplyStyleCommand::applyInlineStyleToNodeRange):
        (WebCore::ApplyStyleCommand::shouldApplyInlineStyleToRun):
        (WebCore::ApplyStyleCommand::highestAncestorWithConflictingInlineStyle):
        (WebCore::ApplyStyleCommand::removeInlineStyle):
        (WebCore::ApplyStyleCommand::mergeStartWithPreviousIfIdentical):
        (WebCore::ApplyStyleCommand::mergeEndWithNextIfIdentical):
        (WebCore::ApplyStyleCommand::surroundNodeRangeWithElement):
        (WebCore::ApplyStyleCommand::joinChildTextNodes):
        * editing/ChangeListTypeCommand.cpp:
        (WebCore::ChangeListTypeCommand::listConversionType):
        * editing/CompositeEditCommand.cpp:
        (WebCore::postTextStateChangeNotification):
        (WebCore::CompositeEditCommand::insertNodeBefore):
        (WebCore::CompositeEditCommand::insertNodeAfter):
        (WebCore::CompositeEditCommand::insertNodeAt):
        (WebCore::CompositeEditCommand::removeChildrenInRange):
        (WebCore::CompositeEditCommand::removeNodeAndPruneAncestors):
        (WebCore::CompositeEditCommand::prune):
        (WebCore::CompositeEditCommand::positionOutsideTabSpan):
        (WebCore::CompositeEditCommand::textNodeForRebalance const):
        (WebCore::CompositeEditCommand::prepareWhitespaceAtPositionForSplit):
        (WebCore::CompositeEditCommand::cleanupAfterDeletion):
        (WebCore::CompositeEditCommand::moveParagraphs):
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::isTableRowEmpty):
        (WebCore::firstInSpecialElement):
        (WebCore::lastInSpecialElement):
        (WebCore::DeleteSelectionCommand::initializePositionData):
        (WebCore::DeleteSelectionCommand::handleSpecialCaseBRDelete):
        (WebCore::firstEditablePositionInNode):
        (WebCore::DeleteSelectionCommand::removeNode):
        (WebCore::DeleteSelectionCommand::makeStylingElementsDirectChildrenOfEditableRootToPreventStyleLoss):
        (WebCore::DeleteSelectionCommand::handleGeneralDelete):
        (WebCore::DeleteSelectionCommand::mergeParagraphs):
        (WebCore::DeleteSelectionCommand::removePreviouslySelectedEmptyTableRows):
        (WebCore::DeleteSelectionCommand::removeRedundantBlocks):
        (WebCore::DeleteSelectionCommand::doApply):
        * editing/EditCommand.cpp:
        (WebCore::EditCommand::postTextStateChangeNotification):
        * editing/Editing.cpp:
        (WebCore::highestNodeToRemoveInPruning):
        * editing/Editor.cpp:
        (WebCore::Editor::selectionForCommand):
        (WebCore::Editor::shouldInsertFragment):
        (WebCore::Editor::replaceSelectionWithFragment):
        (WebCore::Editor::respondToChangedContents):
        (WebCore::Editor::hasBidiSelection const):
        (WebCore::Editor::selectionUnorderedListState const):
        (WebCore::Editor::selectionOrderedListState const):
        (WebCore::Editor::findEventTargetFrom const):
        (WebCore::Editor::applyStyle):
        (WebCore::Editor::applyParagraphStyle):
        (WebCore::notifyTextFromControls):
        (WebCore::Editor::willApplyEditing):
        (WebCore::Editor::insertTextWithoutSendingTextEvent):
        (WebCore::Editor::copyImage):
        (WebCore::Editor::renderLayerDidScroll):
        (WebCore::Editor::setBaseWritingDirection):
        (WebCore::Editor::baseWritingDirectionForSelectionStart const):
        (WebCore::Editor::confirmOrCancelCompositionAndNotifyClient):
        (WebCore::Editor::setComposition):
        (WebCore::Editor::advanceToNextMisspelling):
        (WebCore::Editor::markMisspellingsAfterTypingToWord):
        (WebCore::Editor::isSpellCheckingEnabledFor const):
        (WebCore::Editor::markAndReplaceFor):
        (WebCore::Editor::removeTextPlaceholder):
        (WebCore::Editor::applyEditingStyleToBodyElement const):
        (WebCore::findFirstMarkable):
        (WebCore::Editor::resolveTextCheckingTypeMask):
        (WebCore::editableTextListsAtPositionInDescendingOrder):
        (WebCore::Editor::fontAttributesAtSelectionStart):
        (WebCore::Editor::styleForSelectionStart):
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::setSelection):
        (WebCore::FrameSelection::selectFrameElementInParentIfFullySelected):
        * editing/InsertListCommand.cpp:
        (WebCore::InsertListCommand::fixOrphanedListChild):
        (WebCore::InsertListCommand::unlistifyParagraph):
        * editing/InsertNestedListCommand.cpp:
        (WebCore::InsertNestedListCommand::doApply):
        * editing/RemoveNodePreservingChildrenCommand.cpp:
        (WebCore::RemoveNodePreservingChildrenCommand::doApply):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::positionAvoidingPrecedingNodes):
        (WebCore::ReplacementFragment::ReplacementFragment):
        (WebCore::ReplacementFragment::removeUnrenderedNodes):
        (WebCore::ReplacementFragment::removeInterchangeNodes):
        (WebCore::ReplaceSelectionCommand::shouldMerge):
        (WebCore::ReplaceSelectionCommand::removeRedundantStylesAndKeepStyleSpanInline):
        (WebCore::ReplaceSelectionCommand::makeInsertedContentRoundTrippableWithHTMLTreeBuilder):
        (WebCore::ReplaceSelectionCommand::moveNodeOutOfAncestor):
        (WebCore::ReplaceSelectionCommand::removeUnrenderedTextNodesAtEnds):
        (WebCore::ReplaceSelectionCommand::positionAtEndOfInsertedContent const):
        (WebCore::handleStyleSpansBeforeInsertion):
        (WebCore::ReplaceSelectionCommand::handleStyleSpans):
        (WebCore::enclosingInline):
        (WebCore::ReplaceSelectionCommand::doApply):
        (WebCore::ReplaceSelectionCommand::shouldPerformSmartReplace const):
        (WebCore::ReplaceSelectionCommand::addSpacesForSmartReplace):
        (WebCore::singleChildList):
        (WebCore::deepestSingleChildList):
        (WebCore::ReplaceSelectionCommand::insertAsListItems):
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::handleReplacedElement):
        * editing/TextManipulationController.cpp:
        (WebCore::TextManipulationController::startObservingParagraphs):
        (WebCore::tokenInfo):
        (WebCore::isEnclosingItemBoundaryElement):
        (WebCore::TextManipulationController::observeParagraphs):
        (WebCore::TextManipulationController::scheduleObservationUpdate):
        (WebCore::TextManipulationController::replace):
        * editing/VisibleSelection.cpp:
        (WebCore::VisibleSelection::document const):
        * editing/cocoa/DataDetection.mm:
        (WebCore::DataDetection::createElementForImageOverlay):
        * editing/cocoa/WebContentReaderCocoa.mm:
        (WebCore::replaceRichContentWithAttachments):
        (WebCore::WebContentReader::readDataBuffer):
        * editing/markup.cpp:
        (WebCore::serializePreservingVisualAppearanceInternal):
        (WebCore::sanitizedMarkupForFragmentInDocument):
        * page/VisualViewport.cpp:
        (WebCore::VisualViewport::update):
        * platform/audio/cocoa/AudioSampleDataSource.mm:
        (WebCore::AudioSampleDataSource::setupConverter):
        (WebCore::AudioSampleDataSource::pushSamplesInternal):
        (WebCore::AudioSampleDataSource::pullSamplesInternal):
        * platform/graphics/cocoa/WebCoreDecompressionSession.mm:
        (WebCore::WebCoreDecompressionSession::enqueueSample):

2021-09-20  Alan Bujtas  <zalan@apple.com>

        [IFC][Integration] canUseForText should take surrogate pairs into account when checking for directional characters
        https://bugs.webkit.org/show_bug.cgi?id=230498

        Reviewed by Antti Koivisto.

        In this patch we start using U16_NEXT to properly loop through the characters to find their directions (RTL vs LTR).
        (Note that this is temporary and will be removed when bidi handling is enabled for IFC)

        * layout/integration/LayoutIntegrationCoverage.cpp:
        (WebCore::LayoutIntegration::canUseForText):
        (WebCore::LayoutIntegration::canUseForCharacter): Deleted. These functions have shrunk so much, we don't need to template them anymore. 

2021-09-20  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Incorrect surrogate handling when dealing with short lines
        https://bugs.webkit.org/show_bug.cgi?id=230487

        Reviewed by Antti Koivisto.

        Do not use 1 as the content length when dealing with text where even the first glyph does not fit the line.
        (This functionality is mostly disabled by the missing font fallback feature. see webkit.org/b/228685 and imported/w3c/web-platform-tests/css/css-text/word-break/word-break-break-all-014.html)

        * layout/formattingContexts/inline/InlineContentBreaker.cpp:
        (WebCore::Layout::InlineContentBreaker::processOverflowingContent const): this matches InlineIterator::incrementByCodePointInTextNode

2021-09-20  Youenn Fablet  <youenn@apple.com>

        Make sure RTCRtpSender.setParameters returns an exception with a valid type
        https://bugs.webkit.org/show_bug.cgi?id=230476

        Reviewed by Alex Christensen.

        Covered by rebased test.

        * Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.cpp:
        (WebCore::LibWebRTCRtpSenderBackend::setParameters):
        Make sure to convert correctly the error.

2021-09-20  Simon Fraser  <simon.fraser@apple.com>

        ScrollSnapAnimatorState should be explicit about when it starts animations
        https://bugs.webkit.org/show_bug.cgi?id=230497

        Reviewed by Wenson Hsieh.

        ScrollSnapAnimatorState::transitionTo* functions may not actually trigger an animation
        if the target offset ends up as the initial offset. This currently happens to work
        because ScrollingMomentumCalculator reports a duration of zero in this case, but
        it's better to just make it clear that no animation was started.

        Exercised by tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-mainframe-slow-vertical.html

        * platform/ScrollSnapAnimatorState.cpp:
        (WebCore::ScrollSnapAnimatorState::transitionToSnapAnimationState):
        (WebCore::ScrollSnapAnimatorState::transitionToGlideAnimationState):
        (WebCore::ScrollSnapAnimatorState::setupAnimationForState):
        * platform/ScrollSnapAnimatorState.h:
        * platform/mac/ScrollingEffectsController.mm:
        (WebCore::ScrollingEffectsController::processWheelEventForScrollSnap):

2021-09-20  Darin Adler  <darin@apple.com>

        Clean up overrides of DisplayCaptureSourceMac::Capturer::generateFrame()
        <https://webkit.org/b/230491>
        <rdar://problem/83315212>

        Reviewed by David Kilzer.

        * platform/mediastream/mac/CGDisplayStreamCaptureSource.cpp:
        (WebCore::CGDisplayStreamCaptureSource::generateFrame):
        * platform/mediastream/mac/CGWindowCaptureSource.mm:
        (WebCore::CGWindowCaptureSource::generateFrame):
        - Simplify return value expression.

2021-09-20  Peng Liu  <peng.liu6@apple.com>

        [GPUP] Videos appear black but audio plays normally
        https://bugs.webkit.org/show_bug.cgi?id=230471
        <rdar://82121369>

        Reviewed by Youenn Fablet.

        For some videos, the media player (MediaPlayerPrivateAVFoundation) starts
        with the "MediaRenderingToContext" mode, and it switches to the "MediaRenderingToLayer"
        mode later. When the mode switch happens, we have to destroy the context
        video renderer before creating the video layer. Otherwise, we won't receive
        the notification regarding "readyForDisplay" key path, which drives the
        `firstVideoFrameAvailable` callback.

        `destroyContextVideoRenderer()` destroys the `m_videoOutput`, but it will
        be recreated by `createVideoLayer()`.

        Manually tested.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::setUpVideoRendering):

2021-09-20  Wenson Hsieh  <wenson_hsieh@apple.com>

        Refactor some code that controls Live Text selection behavior
        https://bugs.webkit.org/show_bug.cgi?id=230482
        rdar://83173597

        Reviewed by Megan Gardner.

        Make a few adjustments to Live Text code. See below for more details.

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::shouldExtendSelectionToTargetNode):

        Adjust this rule so that instead of checking whether we're hit-testing to the image overlay container `div`, we
        only allow the existing selection in an image overlay to extend when performing a mouse drag if the target node
        (to which we're extending the selection) is a text node inside the image overlay.

        This tweak is needed to deal with the stylesheet adjustment below, where the root `#image-overlay` container now
        has `pointer-events: none;`.

        * html/shadow/imageOverlay.css:
        (div#image-overlay):
        (div.image-overlay-line):
        (div.image-overlay-data-detector-result):

        Mark the root `#image-overlay` container as `pointer-events: none;`, but mark the individual text containers in
        the image overlay as `pointer-events: auto;` to ensure that they can still be selected via mouse events. This
        change ensures that image overlays can be safely overlaid on top of other user agent shadow root content without
        breaking pointer-based interactions on the shadow root content beneath it.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::textRecognitionCandidateElement const):

        Add a WebKitAdditions extension point for determining whether or not an element is a candidate for text
        recognition.

2021-09-20  Antoine Quint  <graouts@webkit.org>

        box-shadow and text-shadow do not yield float values while interpolating
        https://bugs.webkit.org/show_bug.cgi?id=230347

        Reviewed by Simon Fraser.

        ShadowData members used integer values rather than floats and thus could not represent
        float values while interpolating. We now use float values.

        Test: imported/w3c/web-platform-tests/css/css-backgrounds/box-shadow-calc.html

        * animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFunc):
        (WebCore::shadowForBlending):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::valueForFilter):
        * display/css/DisplayBoxDecorationPainter.cpp:
        (WebCore::Display::BoxDecorationPainter::paintBoxShadow const):
        * editing/Editor.cpp:
        (WebCore::Editor::fontAttributesAtSelectionStart):
        * platform/LengthPoint.h:
        (WebCore::LengthPoint::isZero const):
        * rendering/LegacyEllipsisBox.cpp:
        (WebCore::LegacyEllipsisBox::paint):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::applyBoxShadowForBackground):
        (WebCore::RenderBoxModelObject::boxShadowShouldBeAppliedToBackground const):
        (WebCore::RenderBoxModelObject::paintBoxShadow):
        * rendering/TextBoxPainter.cpp:
        (WebCore::TextBoxPainter::debugTextShadow const):
        * rendering/TextDecorationPainter.cpp:
        (WebCore::TextDecorationPainter::paintTextDecoration):
        * rendering/TextPainter.cpp:
        (WebCore::ShadowApplier::shadowIsCompletelyCoveredByText):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::setTextShadow):
        (WebCore::RenderStyle::shadowExtent):
        (WebCore::RenderStyle::shadowInsetExtent):
        (WebCore::RenderStyle::getShadowHorizontalExtent):
        (WebCore::RenderStyle::getShadowVerticalExtent):
        * rendering/style/ShadowData.cpp:
        (WebCore::ShadowData::ShadowData):
        (WebCore::calculateShadowExtent):
        * rendering/style/ShadowData.h:
        (WebCore::ShadowData::ShadowData):
        (WebCore::ShadowData::x const):
        (WebCore::ShadowData::y const):
        (WebCore::ShadowData::location const):
        (WebCore::ShadowData::radius const):
        (WebCore::ShadowData::paintingExtent const):
        (WebCore::ShadowData::spread const):
        * style/StyleBuilderCustom.h:
        (WebCore::Style::BuilderCustom::applyTextOrBoxShadowValue):

2021-09-20  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Live Text] Adopt WeakHashMap for caching per-element text recognition results
        https://bugs.webkit.org/show_bug.cgi?id=230461

        Reviewed by Megan Gardner.

        Simplify this logic by replacing the WeakHashSet and WeakPtr/TextRecognitionResult pair with just a WeakHashMap.
        No change in behavior.

        * page/Page.cpp:
        (WebCore::Page::updateElementsWithTextRecognitionResults):
        (WebCore::Page::hasCachedTextRecognitionResult const):
        (WebCore::Page::cacheTextRecognitionResult):
        (WebCore::Page::resetTextRecognitionResults):
        * page/Page.h:

2021-09-20  Antti Koivisto  <antti@apple.com>

        [LFC][Integration] Enable selections
        https://bugs.webkit.org/show_bug.cgi?id=230463

        Reviewed by Alan Bujtas.

        Don't switch to legacy inline boxes on selection.

        Test: fast/repaint/selection-paint-invalidation.html

        * layout/integration/LayoutIntegrationCoverage.cpp:
        (WebCore::LayoutIntegration::printReason):
        (WebCore::LayoutIntegration::canUseForChild):
        * layout/integration/LayoutIntegrationCoverage.h:
        * layout/integration/LayoutIntegrationRunIterator.cpp:
        (WebCore::LayoutIntegration::PathTextRun::selectionRect const):

        Move this to path independent code and fix it to compute selectionTop/Bottom correctly.

        (WebCore::LayoutIntegration::PathTextRun::isCombinedText const):
        (WebCore::LayoutIntegration::PathTextRun::fontCascade const):

        Add some helpful functions.

        * layout/integration/LayoutIntegrationRunIterator.h:
        (WebCore::LayoutIntegration::PathTextRun::selectionRect const): Deleted.
        * layout/integration/LayoutIntegrationRunIteratorLegacyPath.h:
        (WebCore::LayoutIntegration::RunIteratorLegacyPath::selectableRange const):
        (WebCore::LayoutIntegration::RunIteratorLegacyPath::selectionRect const): Deleted.
        * layout/integration/LayoutIntegrationRunIteratorModernPath.h:
        (WebCore::LayoutIntegration::RunIteratorModernPath::selectionRect const): Deleted.
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::setSelectionState): Deleted.
        * rendering/RenderBlockFlow.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::setSelectionState):

        * layout/integration/LayoutIntegrationCoverage.cpp:
        (WebCore::LayoutIntegration::printReason):
        (WebCore::LayoutIntegration::canUseForChild):
        * layout/integration/LayoutIntegrationCoverage.h:
        * layout/integration/LayoutIntegrationRunIterator.cpp:
        (WebCore::LayoutIntegration::PathTextRun::selectionRect const):
        (WebCore::LayoutIntegration::PathTextRun::fontCascade const):
        * layout/integration/LayoutIntegrationRunIterator.h:
        (WebCore::LayoutIntegration::PathTextRun::selectionRect const): Deleted.
        * layout/integration/LayoutIntegrationRunIteratorLegacyPath.h:
        (WebCore::LayoutIntegration::RunIteratorLegacyPath::selectableRange const):
        (WebCore::LayoutIntegration::RunIteratorLegacyPath::selectionRect const): Deleted.
        * layout/integration/LayoutIntegrationRunIteratorModernPath.h:
        (WebCore::LayoutIntegration::RunIteratorModernPath::selectionRect const): Deleted.
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::setSelectionState): Deleted.
        * rendering/RenderBlockFlow.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::setSelectionState):
        * rendering/TextBoxPainter.cpp:
        (WebCore::TextBoxPainter::paint):
        (WebCore::TextBoxPainter::paintForeground):
        (WebCore::TextBoxPainter::paintDecoration):
        (WebCore::TextBoxPainter::calculateDocumentMarkerBounds):
        (WebCore::TextBoxPainter::fontCascade const):

        Use iterator functions.

        (WebCore::TextBoxPainter::textOriginFromPaintRect const):
        (WebCore::fontCascadeFor): Deleted.
        (WebCore::TextBoxPainter::combinedText const): Deleted.
        * rendering/TextBoxPainter.h:

2021-09-20  Chris Dumez  <cdumez@apple.com>

        Unreviewed iOS debug build fix after r282755.

        * platform/ios/VideoFullscreenInterfaceAVKit.mm:
        (VideoFullscreenInterfaceAVKit::prepareForPictureInPictureStopWithCompletionHandler):

2021-09-20  Johnson Zhou  <qiaosong_zhou@apple.com>

        Add support for CSSUnparsedValue parsing through CSSStyleValue.parse()
        https://bugs.webkit.org/show_bug.cgi?id=229702

        Reviewed by Alex Christensen.

        Test: css-typedom/css-style-value-parse.html

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSValue.h:
        (WebCore::CSSValue::operator== const):
        * css/CSSVariableData.h:
        (WebCore::CSSVariableData::tokenRange const):
        (WebCore::CSSVariableData::tokenRange): Deleted.
        * css/CSSVariableReferenceValue.cpp:
        (WebCore::CSSVariableReferenceValue::create):
        * css/CSSVariableReferenceValue.h:
        (WebCore::CSSVariableReferenceValue::data const):
        * css/typedom/CSSNumericFactory.idl: Removed.
        * css/typedom/CSSOMVariableReferenceValue.cpp:
        (WebCore::CSSOMVariableReferenceValue::toString const):
        (WebCore::CSSOMVariableReferenceValue::serialize const):
        * css/typedom/CSSOMVariableReferenceValue.h:
        * css/typedom/CSSStyleImageValue.cpp:
        (WebCore::CSSStyleImageValue::CSSStyleImageValue):
        * css/typedom/CSSStyleImageValue.h:
        * css/typedom/CSSStyleValue.cpp:
        (WebCore::CSSStyleValue::parse):
        (WebCore::CSSStyleValue::parseAll):
        (WebCore::CSSStyleValue::parseStyleValue): Deleted.
        (WebCore::CSSStyleValue::reifyValue): Deleted.
        * css/typedom/CSSStyleValue.h:
        * css/typedom/CSSStyleValueFactory.cpp: Added.
        (WebCore::CSSStyleValueFactory::extractCSSValues):
        (WebCore::CSSStyleValueFactory::extractShorthandCSSValues):
        (WebCore::CSSStyleValueFactory::extractCustomCSSValues):
        (WebCore::CSSStyleValueFactory::parseStyleValue):
        (WebCore::CSSStyleValueFactory::reifyValue):
        * css/typedom/CSSStyleValueFactory.h: Copied from Source/WebCore/css/typedom/CSSOMVariableReferenceValue.h.
        * css/typedom/CSSUnparsedValue.cpp:
        (WebCore::CSSUnparsedValue::create):
        (WebCore::CSSUnparsedValue::serialize const):
        * css/typedom/CSSUnparsedValue.h:
        * css/typedom/StylePropertyMapReadOnly.cpp:
        (WebCore::StylePropertyMapReadOnly::reifyValue):
        (WebCore::StylePropertyMapReadOnly::customPropertyValueOrDefault):
        * dom/Document.cpp:
        (WebCore::Document::registerCSSProperty):
        * dom/StyledElement.cpp:

2021-09-20  Chris Dumez  <cdumez@apple.com>

        Stop using makeRef(*this) / makeRefPtr(this)
        https://bugs.webkit.org/show_bug.cgi?id=230464

        Reviewed by Alex Christensen.

        * Modules/async-clipboard/Clipboard.cpp:
        (WebCore::Clipboard::ItemWriter::write):
        * Modules/cache/DOMCache.cpp:
        (WebCore::DOMCache::match):
        (WebCore::DOMCache::addAll):
        (WebCore::DOMCache::putWithResponseData):
        (WebCore::DOMCache::put):
        (WebCore::DOMCache::remove):
        * Modules/encryptedmedia/MediaKeys.cpp:
        (WebCore::MediaKeys::setServerCertificate):
        * Modules/entriesapi/DOMFileSystem.cpp:
        (WebCore::DOMFileSystem::listDirectory):
        (WebCore::DOMFileSystem::getParent):
        (WebCore::DOMFileSystem::getEntry):
        * Modules/entriesapi/ErrorCallback.cpp:
        (WebCore::ErrorCallback::scheduleCallback):
        * Modules/entriesapi/FileSystemEntriesCallback.cpp:
        (WebCore::FileSystemEntriesCallback::scheduleCallback):
        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::dispatchEvent):
        * Modules/indexeddb/IDBOpenDBRequest.cpp:
        (WebCore::IDBOpenDBRequest::dispatchEvent):
        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::dispatchEvent):
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::IDBTransaction):
        (WebCore::IDBTransaction::abortInternal):
        (WebCore::IDBTransaction::dispatchEvent):
        (WebCore::IDBTransaction::createObjectStore):
        (WebCore::IDBTransaction::renameObjectStore):
        (WebCore::IDBTransaction::createIndex):
        (WebCore::IDBTransaction::renameIndex):
        (WebCore::IDBTransaction::doRequestOpenCursor):
        (WebCore::IDBTransaction::iterateCursor):
        (WebCore::IDBTransaction::requestGetAllObjectStoreRecords):
        (WebCore::IDBTransaction::requestGetAllIndexRecords):
        (WebCore::IDBTransaction::requestGetRecord):
        (WebCore::IDBTransaction::requestIndexRecord):
        (WebCore::IDBTransaction::requestCount):
        (WebCore::IDBTransaction::requestDeleteRecord):
        (WebCore::IDBTransaction::requestClearObjectStore):
        (WebCore::IDBTransaction::requestPutOrAdd):
        (WebCore::IDBTransaction::putOrAddOnServer):
        (WebCore::IDBTransaction::deleteObjectStore):
        (WebCore::IDBTransaction::deleteIndex):
        * Modules/indexeddb/client/IDBConnectionToServer.cpp:
        (WebCore::IDBClient::IDBConnectionToServer::callResultFunctionWithErrorLater):
        (WebCore::IDBClient::IDBConnectionToServer::commitTransaction):
        (WebCore::IDBClient::IDBConnectionToServer::abortTransaction):
        (WebCore::IDBClient::IDBConnectionToServer::getAllDatabaseNamesAndVersions):
        * Modules/indexeddb/client/TransactionOperation.h:
        * Modules/mediasession/MediaSession.cpp:
        (WebCore::MediaSession::forEachObserver):
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::removeTimerFired):
        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::applyConstraints):
        * Modules/mediastream/RTCDTMFSender.cpp:
        (WebCore::RTCDTMFSender::insertDTMF):
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::createOffer):
        (WebCore::RTCPeerConnection::createAnswer):
        (WebCore::RTCPeerConnection::setLocalDescription):
        (WebCore::RTCPeerConnection::setRemoteDescription):
        (WebCore::RTCPeerConnection::addIceCandidate):
        * Modules/mediastream/RTCRtpScriptTransform.cpp:
        (WebCore::RTCRtpScriptTransform::setTransformer):
        * Modules/mediastream/RTCRtpScriptTransformer.cpp:
        (WebCore::RTCRtpScriptTransformer::writable):
        * Modules/mediastream/RTCRtpSender.cpp:
        (WebCore::RTCRtpSender::replaceTrack):
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::createStatsCollector):
        (WebCore::LibWebRTCMediaEndpoint::OnTrack):
        (WebCore::LibWebRTCMediaEndpoint::OnRemoveTrack):
        (WebCore::LibWebRTCMediaEndpoint::OnDataChannel):
        (WebCore::LibWebRTCMediaEndpoint::OnNegotiationNeededEvent):
        (WebCore::LibWebRTCMediaEndpoint::OnStandardizedIceConnectionChange):
        (WebCore::LibWebRTCMediaEndpoint::OnIceGatheringChange):
        (WebCore::LibWebRTCMediaEndpoint::OnIceCandidate):
        (WebCore::LibWebRTCMediaEndpoint::createSessionDescriptionSucceeded):
        (WebCore::LibWebRTCMediaEndpoint::createSessionDescriptionFailed):
        (WebCore::LibWebRTCMediaEndpoint::setLocalSessionDescriptionSucceeded):
        (WebCore::LibWebRTCMediaEndpoint::setLocalSessionDescriptionFailed):
        (WebCore::LibWebRTCMediaEndpoint::setRemoteSessionDescriptionSucceeded):
        (WebCore::LibWebRTCMediaEndpoint::setRemoteSessionDescriptionFailed):
        (WebCore::LibWebRTCMediaEndpoint::OnStatsDelivered):
        * Modules/paymentrequest/PaymentRequest.cpp:
        (WebCore::PaymentRequest::shippingAddressChanged):
        (WebCore::PaymentRequest::shippingOptionChanged):
        (WebCore::PaymentRequest::paymentMethodChanged):
        (WebCore::PaymentRequest::updateWith):
        (WebCore::PaymentRequest::completeMerchantValidation):
        (WebCore::PaymentRequest::whenDetailsSettled):
        * Modules/remoteplayback/RemotePlayback.cpp:
        (WebCore::RemotePlayback::watchAvailability):
        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::startRendering):
        (WebCore::AudioContext::mayResumePlayback):
        (WebCore::AudioContext::suspendPlayback):
        (WebCore::AudioContext::isPlayingAudioDidChange):
        * Modules/webaudio/AudioScheduledSourceNode.cpp:
        (WebCore::AudioScheduledSourceNode::finish):
        * Modules/webaudio/AudioWorkletMessagingProxy.cpp:
        (WebCore::AudioWorkletMessagingProxy::postTaskToAudioWorklet):
        * Modules/webaudio/AudioWorkletNode.cpp:
        (WebCore::AudioWorkletNode::fireProcessorErrorOnMainThread):
        * Modules/webaudio/BaseAudioContext.cpp:
        (WebCore::BaseAudioContext::clear):
        (WebCore::BaseAudioContext::stop):
        (WebCore::BaseAudioContext::updateTailProcessingNodes):
        (WebCore::BaseAudioContext::scheduleNodeDeletion):
        (WebCore::BaseAudioContext::deleteMarkedNodes):
        * Modules/webaudio/MediaElementAudioSourceNode.cpp:
        (WebCore::MediaElementAudioSourceNode::setFormat):
        * Modules/webaudio/OfflineAudioDestinationNode.cpp:
        (WebCore::OfflineAudioDestinationNode::startRendering):
        * Modules/webaudio/ScriptProcessorNode.cpp:
        (WebCore::ScriptProcessorNode::process):
        * Modules/webdatabase/Database.cpp:
        (WebCore::Database::scheduleTransactionCallback):
        * Modules/websockets/ThreadableWebSocketChannelClientWrapper.cpp:
        (WebCore::ThreadableWebSocketChannelClientWrapper::didConnect):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didReceiveMessage):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didReceiveBinaryData):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didUpdateBufferedAmount):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didStartClosingHandshake):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didClose):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didReceiveMessageError):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didUpgradeURL):
        (WebCore::ThreadableWebSocketChannelClientWrapper::processPendingTasks):
        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::failAsynchronously):
        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::didOpenSocketStream):
        (WebCore::WebSocketChannel::processOutgoingFrameQueue):
        * Modules/webxr/WebXRFrame.cpp:
        (WebCore::WebXRFrame::getViewerPose):
        * Modules/webxr/WebXRSession.cpp:
        (WebCore::WebXRSession::requestReferenceSpace):
        (WebCore::WebXRSession::shutdown):
        (WebCore::WebXRSession::end):
        (WebCore::WebXRSession::requestFrame):
        * Modules/webxr/WebXRSystem.cpp:
        (WebCore::WebXRSystem::ensureImmersiveXRDeviceIsSelected):
        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::remove):
        (WebCore::WebAnimation::setEffect):
        (WebCore::WebAnimation::setTimeline):
        (WebCore::WebAnimation::updateFinishedState):
        * bindings/js/JSDOMPromiseDeferred.cpp:
        (WebCore::DeferredPromise::callFunction):
        (WebCore::DeferredPromise::whenSettled):
        * bindings/js/JSMicrotaskCallback.h:
        (WebCore::JSMicrotaskCallback::call):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::SerializedScriptValue::writeBlobsToDiskForIndexedDB):
        * bindings/js/WorkerModuleScriptLoader.cpp:
        (WebCore::WorkerModuleScriptLoader::notifyClientFinished):
        * css/CSSGradientValue.cpp:
        (WebCore::CSSGradientValue::valueWithStylesResolved):
        * dom/AbortSignal.cpp:
        (WebCore::AbortSignal::signalAbort):
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::replaceChildren):
        * dom/Document.cpp:
        (WebCore::Document::updateTitle):
        (WebCore::Document::didRemoveAllPendingStylesheet):
        (WebCore::Document::queueTaskToDispatchEvent):
        (WebCore::Document::queueTaskToDispatchEventOnWindow):
        * dom/WindowEventLoop.cpp:
        (WebCore::WindowEventLoop::didReachTimeToRun):
        (WebCore::WindowEventLoop::queueMutationObserverCompoundMicrotask):
        (WebCore::WindowEventLoop::backupElementQueue):
        * dom/messageports/MessagePortChannel.cpp:
        (WebCore::MessagePortChannel::closePort):
        (WebCore::MessagePortChannel::checkRemotePortForActivity):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::ensureComposition):
        * editing/EditCommand.cpp:
        (WebCore::EditCommand::setStartingSelection):
        (WebCore::EditCommand::setEndingSelection):
        * fileapi/BlobCallback.cpp:
        (WebCore::BlobCallback::scheduleCallback):
        * fileapi/FileReader.cpp:
        (WebCore::FileReader::abort):
        * html/BaseCheckableInputType.cpp:
        (WebCore::BaseCheckableInputType::fireInputAndChangeEvents):
        * html/DirectoryFileListCreator.cpp:
        (WebCore::DirectoryFileListCreator::start):
        * html/FileInputType.cpp:
        (WebCore::FileInputType::didCreateFileList):
        (WebCore::FileInputType::receiveDroppedFilesWithImageTranscoding):
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::focusAndShowValidationMessage):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::submitIfPossible):
        (WebCore::HTMLFormElement::submit):
        (WebCore::HTMLFormElement::resumeFromDocumentSuspension):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::didAttachRenderers):
        (WebCore::HTMLInputElement::resumeFromDocumentSuspension):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setAudioOutputDevice):
        (WebCore::HTMLMediaElement::layoutSizeChanged):
        (WebCore::HTMLMediaElement::setVideoFullscreenStandby):
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::scheduleUpdateForAfterStyleResolution):
        * html/InputType.cpp:
        (WebCore::InputType::applyStep):
        * html/OffscreenCanvas.cpp:
        (WebCore::OffscreenCanvas::scheduleCommitToPlaceholderCanvas):
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::makeXRCompatible):
        * html/canvas/WebGLSync.cpp:
        (WebCore::WebGLSync::scheduleAllowCacheUpdate):
        * inspector/CommandLineAPIHost.cpp:
        (WebCore::CommandLineAPIHost::wrapper):
        * inspector/InspectorFrontendAPIDispatcher.cpp:
        (WebCore::InspectorFrontendAPIDispatcher::suspend):
        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorBackendDispatchTask::scheduleOneShot):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::handleSubstituteDataLoadNow):
        (WebCore::DocumentLoader::redirectReceived):
        (WebCore::DocumentLoader::willSendRequest):
        (WebCore::DocumentLoader::responseReceived):
        * loader/MediaResourceLoader.cpp:
        (WebCore::MediaResource::responseReceived):
        * loader/NetscapePlugInStreamLoader.cpp:
        (WebCore::NetscapePlugInStreamLoader::init):
        (WebCore::NetscapePlugInStreamLoader::willSendRequest):
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::init):
        (WebCore::ResourceLoader::deliverResponseAndData):
        (WebCore::ResourceLoader::loadDataURL):
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::startLoading):
        (WebCore::SubresourceLoader::init):
        (WebCore::SubresourceLoader::willSendRequestInternal):
        * loader/appcache/ApplicationCacheResourceLoader.cpp:
        (WebCore::ApplicationCacheResourceLoader::cancel):
        (WebCore::ApplicationCacheResourceLoader::notifyFinished):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::postMessage):
        (WebCore::DOMWindow::close):
        (WebCore::DOMWindow::dispatchLoadEvent):
        (WebCore::DOMWindow::dispatchEvent):
        * page/Frame.cpp:
        (WebCore::Frame::injectUserScripts):
        * page/FrameView.cpp:
        (WebCore::FrameView::scrollToFocusedElementTimerFired):
        * page/Performance.cpp:
        (WebCore::Performance::scheduleTaskIfNeeded):
        * page/scrolling/ThreadedScrollingTree.cpp:
        (WebCore::ThreadedScrollingTree::scrollingTreeNodeDidScroll):
        (WebCore::ThreadedScrollingTree::willStartRenderingUpdate):
        (WebCore::ThreadedScrollingTree::displayDidRefresh):
        * platform/PreviewConverter.cpp:
        (WebCore::PreviewConverter::updateMainResource):
        (WebCore::PreviewConverter::iterateClients):
        (WebCore::PreviewConverter::didAddClient):
        (WebCore::PreviewConverter::replayToClient):
        (WebCore::PreviewConverter::delegateDidReceiveData):
        (WebCore::PreviewConverter::delegateDidFailWithError):
        * platform/audio/cocoa/AudioDestinationCocoa.cpp:
        (WebCore::AudioDestinationCocoa::render):
        * platform/graphics/ImageSource.cpp:
        (WebCore::ImageSource::startAsyncDecodingQueue):
        * platform/graphics/avfoundation/cf/WebCoreAVCFResourceLoader.cpp:
        (WebCore::WebCoreAVCFResourceLoader::invalidate):
        * platform/graphics/avfoundation/objc/ImageDecoderAVFObjC.mm:
        (WebCore::ImageDecoderAVFObjC::ImageDecoderAVFObjC):
        (WebCore::ImageDecoderAVFObjC::setTrack):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::EffectiveRateChangedListener::effectiveRateChanged):
        * platform/graphics/avfoundation/objc/MediaSampleAVFObjC.mm:
        (WebCore::MediaSampleAVFObjC::divideIntoHomogeneousSamples):
        * platform/graphics/avfoundation/objc/SourceBufferParserAVFObjC.mm:
        (WebCore::SourceBufferParserAVFObjC::didParseStreamDataAsAsset):
        (WebCore::SourceBufferParserAVFObjC::didFailToParseStreamDataWithError):
        (WebCore::SourceBufferParserAVFObjC::didProvideMediaDataForTrackID):
        * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.mm:
        (WebCore::WebCoreAVFResourceLoader::invalidate):
        * platform/graphics/cocoa/SourceBufferParserWebM.cpp:
        (WebCore::SourceBufferParserWebM::appendData):
        (WebCore::SourceBufferParserWebM::OnElementEnd):
        (WebCore::SourceBufferParserWebM::OnBlockGroupEnd):
        (WebCore::SourceBufferParserWebM::provideMediaData):
        * platform/graphics/cocoa/WebCoreDecompressionSession.mm:
        (WebCore::WebCoreDecompressionSession::maybeBecomeReadyForMoreMediaData):
        (WebCore::WebCoreDecompressionSession::handleDecompressionOutput):
        (WebCore::WebCoreDecompressionSession::enqueueDecodedSample):
        (WebCore::WebCoreDecompressionSession::flush):
        * platform/graphics/gstreamer/MainThreadNotifier.h:
        * platform/graphics/gstreamer/mse/SourceBufferPrivateGStreamer.cpp:
        (WebCore::SourceBufferPrivateGStreamer::notifyClientWhenReadyForMoreSamples):
        * platform/graphics/mac/LegacyDisplayRefreshMonitorMac.cpp:
        (WebCore::LegacyDisplayRefreshMonitorMac::dispatchDisplayDidRefresh):
        * platform/graphics/nicosia/NicosiaSceneIntegration.cpp:
        (Nicosia::SceneIntegration::createUpdateScope):
        * platform/ios/VideoFullscreenInterfaceAVKit.mm:
        (VideoFullscreenInterfaceAVKit::setVideoFullscreenModel):
        (VideoFullscreenInterfaceAVKit::didStartPictureInPicture):
        (VideoFullscreenInterfaceAVKit::prepareForPictureInPictureStopWithCompletionHandler):
        (VideoFullscreenInterfaceAVKit::finalizeSetup):
        (VideoFullscreenInterfaceAVKit::doEnterFullscreen):
        (VideoFullscreenInterfaceAVKit::doExitFullscreen):
        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        (VideoFullscreenControllerContext::requestUpdateInlineRect):
        (VideoFullscreenControllerContext::requestVideoContentLayer):
        (VideoFullscreenControllerContext::returnVideoContentLayer):
        (VideoFullscreenControllerContext::didSetupFullscreen):
        (VideoFullscreenControllerContext::willExitFullscreen):
        (VideoFullscreenControllerContext::didExitFullscreen):
        (VideoFullscreenControllerContext::didCleanupFullscreen):
        (VideoFullscreenControllerContext::fullscreenMayReturnToInline):
        (VideoFullscreenControllerContext::durationChanged):
        (VideoFullscreenControllerContext::currentTimeChanged):
        (VideoFullscreenControllerContext::bufferedTimeChanged):
        (VideoFullscreenControllerContext::rateChanged):
        (VideoFullscreenControllerContext::hasVideoChanged):
        (VideoFullscreenControllerContext::videoDimensionsChanged):
        (VideoFullscreenControllerContext::seekableRangesChanged):
        (VideoFullscreenControllerContext::canPlayFastReverseChanged):
        (VideoFullscreenControllerContext::audioMediaSelectionOptionsChanged):
        (VideoFullscreenControllerContext::legibleMediaSelectionOptionsChanged):
        (VideoFullscreenControllerContext::externalPlaybackChanged):
        (VideoFullscreenControllerContext::wirelessVideoPlaybackDisabledChanged):
        (VideoFullscreenControllerContext::mutedChanged):
        (VideoFullscreenControllerContext::volumeChanged):
        (VideoFullscreenControllerContext::requestFullscreenMode):
        (VideoFullscreenControllerContext::setVideoLayerFrame):
        (VideoFullscreenControllerContext::setVideoLayerGravity):
        (VideoFullscreenControllerContext::fullscreenModeChanged):
        (VideoFullscreenControllerContext::play):
        (VideoFullscreenControllerContext::pause):
        (VideoFullscreenControllerContext::togglePlayState):
        (VideoFullscreenControllerContext::toggleMuted):
        (VideoFullscreenControllerContext::setMuted):
        (VideoFullscreenControllerContext::setVolume):
        (VideoFullscreenControllerContext::setPlayingOnSecondScreen):
        (VideoFullscreenControllerContext::beginScrubbing):
        (VideoFullscreenControllerContext::endScrubbing):
        (VideoFullscreenControllerContext::seekToTime):
        (VideoFullscreenControllerContext::fastSeek):
        (VideoFullscreenControllerContext::beginScanningForward):
        (VideoFullscreenControllerContext::beginScanningBackward):
        (VideoFullscreenControllerContext::endScanning):
        (VideoFullscreenControllerContext::setDefaultPlaybackRate):
        (VideoFullscreenControllerContext::setPlaybackRate):
        (VideoFullscreenControllerContext::selectAudioMediaOption):
        (VideoFullscreenControllerContext::selectLegibleMediaOption):
        (VideoFullscreenControllerContext::setUpFullscreen):
        (VideoFullscreenControllerContext::exitFullscreen):
        * platform/mac/VideoFullscreenInterfaceMac.mm:
        (WebCore::VideoFullscreenInterfaceMac::setupFullscreen):
        * platform/mediastream/AudioTrackPrivateMediaStream.cpp:
        (WebCore::AudioTrackPrivateMediaStream::startRenderer):
        * platform/mediastream/MediaStreamPrivate.cpp:
        (WebCore::MediaStreamPrivate::forEachObserver):
        * platform/mediastream/MediaStreamTrackPrivate.cpp:
        (WebCore::MediaStreamTrackPrivate::forEachObserver):
        * platform/mediastream/RealtimeIncomingAudioSource.cpp:
        (WebCore::RealtimeIncomingAudioSource::OnChanged):
        * platform/mediastream/RealtimeIncomingVideoSource.cpp:
        (WebCore::RealtimeIncomingVideoSource::OnChanged):
        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::forEachObserver):
        (WebCore::RealtimeMediaSource::updateHasStartedProducingData):
        (WebCore::RealtimeMediaSource::end):
        (WebCore::RealtimeMediaSource::scheduleDeferredTask):
        * platform/mediastream/RealtimeMediaSourceCenter.cpp:
        (WebCore::RealtimeMediaSourceCenter::triggerDevicesChangedObservers):
        * platform/mediastream/RealtimeOutgoingVideoSource.cpp:
        (WebCore::RealtimeOutgoingVideoSource::applyRotation):
        * platform/mediastream/RealtimeVideoSource.cpp:
        (WebCore::RealtimeVideoSource::whenReady):
        * platform/mediastream/gstreamer/GStreamerCapturer.cpp:
        (WebCore::GStreamerCapturer::forEachObserver):
        * platform/mediastream/mac/MockRealtimeVideoSourceMac.mm:
        (WebCore::MockRealtimeVideoSourceMac::updateSampleBuffer):
        * platform/mediastream/mac/RealtimeOutgoingAudioSourceCocoa.cpp:
        (WebCore::RealtimeOutgoingAudioSourceCocoa::audioSamplesAvailable):
        * platform/mediastream/mac/WebAudioSourceProviderCocoa.mm:
        (WebCore::WebAudioSourceProviderCocoa::prepare):
        * platform/mock/MockAudioDestinationCocoa.cpp:
        (WebCore::MockAudioDestinationCocoa::tick):
        * platform/mock/MockRealtimeAudioSource.cpp:
        (WebCore::MockRealtimeAudioSource::tick):
        * platform/network/BlobResourceHandle.cpp:
        (WebCore::BlobResourceHandle::start):
        (WebCore::BlobResourceHandle::notifyResponseOnSuccess):
        (WebCore::BlobResourceHandle::notifyResponseOnError):
        (WebCore::BlobResourceHandle::notifyFinish):
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::willSendRequest):
        * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::willSendRequest):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didReceiveResponse):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didReceiveData):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didFinishLoading):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didFail):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::willCacheResponse):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didReceiveChallenge):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didSendBodyData):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::canRespondToProtectionSpace):
        * platform/network/cf/SocketStreamHandleImplCFNet.cpp:
        (WebCore::SocketStreamHandleImpl::SocketStreamHandleImpl):
        * platform/network/cocoa/WebCoreNSURLSession.mm:
        (WebCore::WebCoreNSURLSessionDataTaskClient::responseReceived):
        * platform/network/curl/CurlRequest.cpp:
        (WebCore::CurlRequest::cancel):
        (WebCore::CurlRequest::callClient):
        (WebCore::CurlRequest::invokeDidReceiveResponseForFile):
        (WebCore::CurlRequest::completeDidReceiveResponse):
        (WebCore::CurlRequest::invokeCancel):
        (WebCore::CurlRequest::pausedStatusChanged):
        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge):
        (WebCore::ResourceHandle::receivedRequestToContinueWithoutCredential):
        (WebCore::ResourceHandle::receivedCancellation):
        (WebCore::ResourceHandle::willSendRequest):
        (WebCore::ResourceHandle::handleDataURL):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::willSendRequest):
        * platform/xr/openxr/PlatformXROpenXR.cpp:
        (PlatformXR::OpenXRDevice::initialize):
        (PlatformXR::OpenXRDevice::initializeTrackingAndRendering):
        (PlatformXR::OpenXRDevice::shutDownTrackingAndRendering):
        (PlatformXR::OpenXRDevice::requestFrame):
        (PlatformXR::OpenXRDevice::submitFrame):
        (PlatformXR::OpenXRDevice::waitUntilStopping):
        * storage/StorageQuotaManager.cpp:
        (WebCore::StorageQuotaManager::requestSpaceOnMainThread):
        (WebCore::StorageQuotaManager::requestSpaceOnBackgroundThread):
        * testing/WebXRTest.cpp:
        (WebCore::WebXRTest::simulateDeviceConnection):
        * workers/WorkerEventLoop.cpp:
        (WebCore::WorkerEventLoop::scheduleToRun):
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::postMessageToDebugger):
        * workers/WorkerOrWorkletThread.cpp:
        (WebCore::WorkerOrWorkletThread::workerOrWorkletThread):
        * workers/service/ExtendableEvent.cpp:
        (WebCore::ExtendableEvent::addExtendLifetimePromise):
        * workers/service/FetchEvent.cpp:
        (WebCore::FetchEvent::respondWith):
        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::ready):
        (WebCore::ServiceWorkerContainer::getRegistration):
        (WebCore::ServiceWorkerContainer::getRegistrations):
        (WebCore::ServiceWorkerContainer::jobResolvedWithRegistration):
        * workers/service/context/ServiceWorkerThread.cpp:
        (WebCore::ServiceWorkerThread::startHeartBeatTimer):
        * workers/service/context/ServiceWorkerThreadProxy.cpp:
        (WebCore::ServiceWorkerThreadProxy::postTaskToLoader):
        (WebCore::ServiceWorkerThreadProxy::postMessageToDebugger):
        (WebCore::ServiceWorkerThreadProxy::setResourceCachingDisabledByWebInspector):
        (WebCore::ServiceWorkerThreadProxy::startFetch):
        (WebCore::ServiceWorkerThreadProxy::postMessageToServiceWorker):
        (WebCore::ServiceWorkerThreadProxy::fireInstallEvent):
        (WebCore::ServiceWorkerThreadProxy::fireActivateEvent):
        * workers/service/server/RegistrationDatabase.cpp:
        (WebCore::RegistrationDatabase::postTaskToWorkQueue):
        (WebCore::RegistrationDatabase::importRecordsIfNecessary):
        (WebCore::RegistrationDatabase::schedulePushChanges):
        (WebCore::RegistrationDatabase::doPushChanges):
        (WebCore::RegistrationDatabase::importRecords):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::createRequest):
        (WebCore::XMLHttpRequest::didFail):
        (WebCore::XMLHttpRequest::didFinishLoading):

2021-09-20  Jer Noble  <jer.noble@apple.com>

        [Cocoa] Make AVSampleBufferVideoOutput support an Experimental Feature
        https://bugs.webkit.org/show_bug.cgi?id=230424

        Reviewed by Eric Carlson.

        Move AVSampleBufferVideoOutput from a compile-time to a runtime enabled
        feature for A/B testing purposes.

        * page/RuntimeEnabledFeatures.cpp:
        (WebCore::RuntimeEnabledFeatures::setMediaSourceInlinePaintingEnabled):
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::mediaSourceInlinePaintingEnabled const):
        * platform/audio/cocoa/MediaSessionManagerCocoa.h:
        * platform/audio/cocoa/MediaSessionManagerCocoa.mm:
        (WebCore::MediaSessionManagerCocoa::setMediaSourceInlinePaintingEnabled):
        (WebCore::MediaSessionManagerCocoa::mediaSourceInlinePaintingEnabled):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::updateLastPixelBuffer):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::ensureLayer):

2021-09-20  Antoine Quint  <graouts@webkit.org>

        TimingFunction::transformTime() is poorly-named
        https://bugs.webkit.org/show_bug.cgi?id=230478

        Reviewed by Simon Fraser.

        This function transforms an input _progress_ not a time, so we rename it to transformProgress()
        and name its first parameter accordingly.

        * animation/AnimationEffect.cpp:
        (WebCore::AnimationEffect::getComputedTiming const):
        * animation/KeyframeEffect.cpp:
        (WebCore::KeyframeEffect::setAnimatedPropertiesInStyle):
        * platform/ScrollAnimationSmooth.cpp:
        (WebCore::ScrollAnimationSmooth::animateScroll):
        * platform/animation/TimingFunction.cpp:
        (WebCore::TimingFunction::transformProgress const):
        (WebCore::TimingFunction::transformTime const): Deleted.
        * platform/animation/TimingFunction.h:
        * platform/graphics/nicosia/NicosiaAnimation.cpp:
        (Nicosia::Animation::apply):
        * platform/mac/ScrollbarsControllerMac.mm:
        (-[WebScrollbarPartAnimation setCurrentProgress:]):

2021-09-20  Aditya Keerthi  <akeerthi@apple.com>

        Implement input-security
        https://bugs.webkit.org/show_bug.cgi?id=184510
        rdar://79979992

        Reviewed by Antti Koivisto.

        Implement the input-security property as specified in
        https://drafts.csswg.org/css-ui-4/#input-security.

        The property provides authors a way to enable/disable obscuring of text
        in sensitive text inputs, such as <input type=password>. While the
        property is similar to the non-standard -webkit-text-security property
        at a surface level, there are several differences that make input-security
        more than a simple alias/synonym.

        1. -webkit-text-security is an inherited property, input-security is not.

        2. input-security only applies to sensitive text inputs, whereas
           -webkit-text-security applies to everything but sensitive text inputs.
           The latter is due to the presence of an !important rule in the UA
           stylesheet that prevented authors from disabling/controlling obscuring.

        3. -webkit-text-security supports additional values that control the
           appearance of obscured characters. input-security is a simple toggle.

        However, while an alias is not possible, the implementation can still
        leverage the existing text security logic under the hood.

        Tests: fast/css/computed-text-security-for-input-security.html
               imported/w3c/web-platform-tests/css/css-ui/input-security-auto-sensitive-text-input.html
               imported/w3c/web-platform-tests/css/css-ui/input-security-computed.html
               imported/w3c/web-platform-tests/css/css-ui/input-security-non-sensitive-elements.html
               imported/w3c/web-platform-tests/css/css-ui/input-security-none-sensitive-text-input.html
               imported/w3c/web-platform-tests/css/css-ui/input-security-parsing.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::valueForPropertyInStyle):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator InputSecurity const):
        * css/CSSProperties.json:
        * css/html.css:
        (input[type="password"]):

        Remove the -webkit-text-security rule, as password inputs are obscured
        by default (input-security: auto), and to support disabling of
        obscuring.

        (input:-webkit-autofill-strong-password, input:-webkit-autofill-strong-password-viewable):

        Use input-security to make the characters viewable, as
        -webkit-text-security no longer has an effect on password inputs in
        the UA stylesheet. Note that the property already had no effect in
        author stylesheets.

        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):
        (WebCore::CSSParserFastPaths::isKeywordPropertyID):
        * rendering/style/RenderStyle.cpp:
        (WebCore::rareNonInheritedDataChangeRequiresLayout):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::inputSecurity const):
        (WebCore::RenderStyle::setInputSecurity):
        (WebCore::RenderStyle::initialInputSecurity):
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator== const):
        * rendering/style/StyleRareNonInheritedData.h:
        * style/StyleAdjuster.cpp:
        (WebCore::Style::Adjuster::adjust const):

        Control the obscuring of text in password inputs by setting appropriate
        TextSecurity value in RenderStyle, corresponding to the InputSecurity
        value. This implementation was chosen for two reasons:

        1. Leverage the existing logic which obscures characters based on the
           style's TextSecurity value. Note that it is already not possible to
           specify other TextSecurity value's for password inputs, so there is
           no risk in forcing a TextSecurity value for a given InputSecurity.

        2. Ensure the computed value for -webkit-text-security is not "none"
           (the default) when input-security is "auto". This behavior is
           necessary as there are known existing scripts that check the
           computed value for -webkit-text-security to determine whether text
           in an input is obscured.

2021-09-20  Simon Fraser  <simon.fraser@apple.com>

        Have ScrollingMomentumCalculator work in terms of ScrollExtents
        https://bugs.webkit.org/show_bug.cgi?id=230465

        Reviewed by Wenson Hsieh.

        ScrollAnimator gets min/max scroll offsets and the viewport size via a ScrollExtents
        class. To ease a future transition of ScrollingMomentumCalculator to be a ScrollAnimator,
        move ScrollingMomentumCalculator to use the same struct, which is modified to satisfy
        the need to provide ScrollingMomentumCalculatorMac with the contents size.

        * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.h:
        * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.mm:
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::scrollExtents const):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::scrollExtent const): Deleted.
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::viewportSize const): Deleted.
        * platform/ScrollAnimation.h:
        * platform/ScrollAnimationKinetic.cpp:
        (WebCore::ScrollAnimationKinetic::startAnimatedScrollWithInitialVelocity):
        * platform/ScrollAnimationSmooth.cpp:
        (WebCore::ScrollAnimationSmooth::startOrRetargetAnimation):
        (WebCore::ScrollAnimationSmooth::updateScrollExtents):
        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::scrollExtents const):
        (WebCore::ScrollAnimator::scrollExtentsForAnimation):
        (WebCore::ScrollAnimator::scrollExtent const): Deleted.
        (WebCore::ScrollAnimator::viewportSize const): Deleted.
        * platform/ScrollAnimator.h:
        * platform/ScrollSnapAnimatorState.cpp:
        (WebCore::ScrollSnapAnimatorState::transitionToSnapAnimationState):
        (WebCore::ScrollSnapAnimatorState::transitionToGlideAnimationState):
        (WebCore::ScrollSnapAnimatorState::setupAnimationForState):
        (WebCore::ScrollSnapAnimatorState::targetOffsetForStartOffset const):
        * platform/ScrollSnapAnimatorState.h:
        * platform/ScrollTypes.h:
        (WebCore::ScrollExtents::minimumScrollOffset const):
        (WebCore::ScrollExtents::maximumScrollOffset const):
        * platform/ScrollingEffectsController.cpp:
        (WebCore::ScrollingEffectsController::setNearestScrollSnapIndexForAxisAndOffset):
        (WebCore::ScrollingEffectsController::adjustScrollDestination):
        * platform/ScrollingEffectsController.h:
        * platform/ScrollingMomentumCalculator.cpp:
        (WebCore::ScrollingMomentumCalculator::ScrollingMomentumCalculator):
        (WebCore::ScrollingMomentumCalculator::predictedDestinationOffset):
        (WebCore::ScrollingMomentumCalculator::create):
        (WebCore::BasicScrollingMomentumCalculator::BasicScrollingMomentumCalculator):
        * platform/ScrollingMomentumCalculator.h:
        * platform/mac/ScrollingEffectsController.mm:
        (WebCore::ScrollingEffectsController::statelessSnapTransitionTimerFired):
        (WebCore::ScrollingEffectsController::processWheelEventForScrollSnap):
        * platform/mac/ScrollingMomentumCalculatorMac.h:
        * platform/mac/ScrollingMomentumCalculatorMac.mm:
        (WebCore::ScrollingMomentumCalculator::create):
        (WebCore::ScrollingMomentumCalculatorMac::ScrollingMomentumCalculatorMac):
        (WebCore::ScrollingMomentumCalculatorMac::ensurePlatformMomentumCalculator):

2021-09-20  Marcos Caceres  <marcos@marcosc.com>

        Web Share permission policy "web-share" and "self" as the allowlist
        https://bugs.webkit.org/show_bug.cgi?id=214448

        Reviewed by Youenn Fablet.

        Tests: http/tests/webshare/webshare-allow-attribute-canShare.https.html
               http/tests/webshare/webshare-allow-attribute-share.https.html

        * html/FeaturePolicy.cpp:
        (WebCore::policyTypeName):
        (WebCore::FeaturePolicy::parse):
        (WebCore::FeaturePolicy::allows const):
        * html/FeaturePolicy.h:
        * page/Navigator.cpp:
        (WebCore::Navigator::canShare):
        (WebCore::Navigator::share):

2021-09-20  Zalan Bujtas  <zalan@apple.com>

        [LFC][Integration] Remove redundant Run::m_isLineSpanning
        https://bugs.webkit.org/show_bug.cgi?id=230470

        Reviewed by Antti Koivisto.

        FIXME got implemented. Run iterators do skip line spanning inline boxes. We don't need this anymore.

        * layout/formattingContexts/inline/InlineDisplayContentBuilder.cpp:
        (WebCore::Layout::InlineDisplayContentBuilder::createRunsAndUpdateGeometryForLineSpanningInlineBoxes):
        * layout/formattingContexts/inline/InlineLineRun.h:
        (WebCore::Layout::Run::hasContent const):
        (WebCore::Layout::Run::Run):
        (WebCore::Layout::Run::isLineSpanning const): Deleted.

2021-09-19  Simon Fraser  <simon.fraser@apple.com>

        Have ScrollAnimation work in terms of offsets, not positions
        https://bugs.webkit.org/show_bug.cgi?id=230450

        Reviewed by Antti Koivisto.
        
        Scroll positions can have negative values in RTL content. It's simpler for ScrollAnimation
        to work on zero-based scroll offsets. ScrollAnimator handles the mapping from these to
        ScrollPositions.

        Also share a bit of setCurrentPosition() code. This required adding an early return in
        ScrollableArea::setScrollPositionFromAnimation() to avoid re-entrant calls during scrolling
        tree commit, which would cause deadlocks on the scrolling tree lock, which happened when a
        ScrollAnimation set a fractional offset.

        * platform/KeyboardScrollingAnimator.cpp:
        (WebCore::KeyboardScrollingAnimator::scrollableDirectionsFromPosition const): Clarify offset vs. position.
        (WebCore::KeyboardScrollingAnimator::updateKeyboardScrollPosition):
        (WebCore::KeyboardScrollingAnimator::scrollableDirectionsFromOffset const): Deleted.
        * platform/KeyboardScrollingAnimator.h:
        * platform/ScrollAnimation.h:
        * platform/ScrollAnimationKinetic.cpp:
        (WebCore::ScrollAnimationKinetic::PerAxisData::PerAxisData):
        (WebCore::ScrollAnimationKinetic::PerAxisData::animateScroll):
        (WebCore::ScrollAnimationKinetic::startAnimatedScrollWithInitialVelocity):
        (WebCore::ScrollAnimationKinetic::animationTimerFired):
        * platform/ScrollAnimationKinetic.h:
        * platform/ScrollAnimationSmooth.cpp:
        (WebCore::ScrollAnimationSmooth::startAnimatedScroll):
        (WebCore::ScrollAnimationSmooth::startAnimatedScrollToDestination):
        (WebCore::ScrollAnimationSmooth::retargetActiveAnimation):
        (WebCore::ScrollAnimationSmooth::startOrRetargetAnimation):
        (WebCore::ScrollAnimationSmooth::updateScrollExtents):
        (WebCore::ScrollAnimationSmooth::animateScroll):
        (WebCore::ScrollAnimationSmooth::animationTimerFired):
        * platform/ScrollAnimationSmooth.h:
        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::scroll):
        (WebCore::ScrollAnimator::scrollToPositionWithoutAnimation):
        (WebCore::ScrollAnimator::scrollToPositionWithAnimation):
        (WebCore::ScrollAnimator::offsetFromPosition const):
        (WebCore::ScrollAnimator::positionFromOffset const):
        (WebCore::ScrollAnimator::setCurrentPosition):
        (WebCore::ScrollAnimator::notifyPositionChanged):
        (WebCore::ScrollAnimator::scrollAnimationDidUpdate):
        (WebCore::ScrollAnimator::scrollExtentsForAnimation):
        (WebCore::ScrollAnimator::offsetFromPosition): Deleted.
        (WebCore::ScrollAnimator::positionFromOffset): Deleted.
        * platform/ScrollAnimator.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::setScrollOffset):
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::setScrollPositionFromAnimation):
        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::minimumScrollOffset const): minimumScrollOffset is always 0,0 but add this function for symmetry.
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::immediateScrollBy):
        * rendering/RenderLayerScrollableArea.cpp:
        (WebCore::RenderLayerScrollableArea::clampScrollOffset const):

2021-09-19  Wenson Hsieh  <wenson_hsieh@apple.com>

        Teach `WebKit::createShareableBitmap` to snapshot video elements
        https://bugs.webkit.org/show_bug.cgi?id=230468

        Reviewed by Tim Horton.

        Now that `createShareableBitmap` may return images for video elements, we need to ensure that we explicitly
        avoid allowing Live Text in video elements, since doing so will (1) break built-in platform media controls,
        which also share the same shadow root, and (2) lead to confusing results when playing or seeking in videos,
        since the recognized text falls out of sync with the video frame.

        * html/HTMLVideoElement.h:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::textRecognitionCandidateElement const):

        For the above reasons, we refactor logic to check if the currently hovered node is a candidate for text
        recognition, such that the video element check is consolidated all in one place.

        (WebCore::EventHandler::updateMouseEventTargetNode):
        (WebCore::EventHandler::textRecognitionHoverTimerFired):
        * page/EventHandler.h:
        * rendering/RenderVideo.h:

2021-09-19  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] overflow-wrap: anywhere/break-word rules over word-break: keep-all
        https://bugs.webkit.org/show_bug.cgi?id=230458

        Reviewed by Antti Koivisto.

        https://drafts.csswg.org/css-text/#overflow-wrap-property
        "...An otherwise unbreakable sequence of characters may be broken at an arbitrary point if there are
        no otherwise-acceptable break points in the line."

        "word-break: keep all" makes the content "otherwise unbreakable sequence of characters". It simply means
        that "overflow-wrap: anywhere/break-word" may break the content at an arbitrary position even when "keep-all" is set,  

        * layout/formattingContexts/inline/InlineContentBreaker.cpp:
        (WebCore::Layout::InlineContentBreaker::wordBreakBehavior const):

2021-09-19  Antti Koivisto  <antti@apple.com>

        [lFC][Integration] Enable some text painting features
        https://bugs.webkit.org/show_bug.cgi?id=230459

        Reviewed by Sam Weinig.

        Enable text-shadow and background-clip:text.

        * layout/integration/LayoutIntegrationCoverage.cpp:
        (WebCore::LayoutIntegration::printReason):
        (WebCore::LayoutIntegration::canUseForStyle):
        * layout/integration/LayoutIntegrationCoverage.h:
        * layout/integration/LayoutIntegrationLineLayout.cpp:
        (WebCore::LayoutIntegration::LineLayout::paint):

        Allow TextClip paint phase.

2021-09-19  Antti Koivisto  <antti@apple.com>

        [LFC][Integration] Make block selection gap painting use iterator
        https://bugs.webkit.org/show_bug.cgi?id=230457

        Reviewed by Alan Bujtas.

        Make the code not depend on legacy inline boxes.

        * rendering/LegacyRootInlineBox.cpp:
        (WebCore::LegacyRootInlineBox::lineSelectionGap): Deleted.
        * rendering/LegacyRootInlineBox.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::logicalLeftSelectionGap):
        (WebCore::RenderBlock::logicalRightSelectionGap):
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::inlineSelectionGaps):

2021-09-19  Antti Koivisto  <antti@apple.com>

        [LFC][Integration] Paint LFC text runs with TextBoxPainter
        https://bugs.webkit.org/show_bug.cgi?id=230455

        Reviewed by Alan Bujtas.

        This will give LFC path all the same painting features (including selections, markers etc) that
        the legacy path has. This patch does not enable any new features yet.

        * layout/integration/LayoutIntegrationLineLayout.cpp:
        (WebCore::LayoutIntegration::LineLayout::paint):
        (WebCore::LayoutIntegration::LineLayout::paintTextRunUsingPhysicalCoordinates):

        Use TextBoxPainter.

        * layout/integration/LayoutIntegrationLineLayout.h:
        * rendering/LegacyInlineTextBox.cpp:
        (WebCore::LegacyInlineTextBox::textOriginFromBoxRect const): Deleted.
        (WebCore::LegacyInlineTextBox::debugTextShadow const): Deleted.
        * rendering/LegacyInlineTextBox.h:
        * rendering/TextBoxPainter.cpp:
        (WebCore::TextBoxPainter::TextBoxPainter):

        TextBoxPainter now uses the inline iterator instead of directly accessing LegacyInlineTextBox.

        (WebCore::TextBoxPainter::paint):
        (WebCore::TextBoxPainter::createMarkedTextFromSelectionInBox):
        (WebCore::TextBoxPainter::paintBackground):
        (WebCore::TextBoxPainter::paintForegroundAndDecorations):
        (WebCore::TextBoxPainter::paintCompositionBackground):
        (WebCore::TextBoxPainter::paintForeground):
        (WebCore::TextBoxPainter::paintDecoration):
        (WebCore::TextBoxPainter::paintCompositionUnderlines):
        (WebCore::textPosition):
        (WebCore::TextBoxPainter::paintCompositionUnderline):
        (WebCore::TextBoxPainter::paintPlatformDocumentMarkers):
        (WebCore::TextBoxPainter::calculateUnionOfAllDocumentMarkerBounds):
        (WebCore::TextBoxPainter::computePaintRect):
        (WebCore::fontCascadeFor):
        (WebCore::TextBoxPainter::calculateDocumentMarkerBounds):
        (WebCore::TextBoxPainter::computeHaveSelection const):
        (WebCore::TextBoxPainter::combinedText const):
        (WebCore::TextBoxPainter::fontCascade const):
        (WebCore::TextBoxPainter::textOriginFromPaintRect const):
        (WebCore::TextBoxPainter::debugTextShadow const):
        (WebCore::createMarkedTextFromSelectionInBox): Deleted.
        * rendering/TextBoxPainter.h:

2021-09-18  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Add "Shaping" log channel
        https://bugs.webkit.org/show_bug.cgi?id=230440

        Reviewed by Darin Adler.

        This logging has been useful to me before, so I figure it might be useful to other people.

        This new channel is off by default.

        No new tests because there is no behavior change.

        * platform/Logging.h:
        * platform/graphics/coretext/FontCoreText.cpp:
        (WebCore::Font::applyTransforms const):
        * platform/graphics/mac/ComplexTextControllerCoreText.mm:
        (WebCore::ComplexTextController::ComplexTextRun::ComplexTextRun):
        (WebCore::ComplexTextController::collectComplexTextRunsForCharacters):

2021-09-18  Simon Fraser  <simon.fraser@apple.com>

        Move ScrollingMomentumCalculator into the platform directory
        https://bugs.webkit.org/show_bug.cgi?id=230452

        Reviewed by Wenson Hsieh.

        ScrollingMomentumCalculator/ScrollingMomentumCalculatorMac have no non-platform dependencies.

        Other changes are unified sources fallout.

        * Sources.txt:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/ScrollingMomentumCalculator.cpp: Renamed from Source/WebCore/page/scrolling/ScrollingMomentumCalculator.cpp.
        * platform/ScrollingMomentumCalculator.h: Renamed from Source/WebCore/page/scrolling/ScrollingMomentumCalculator.h.
        * platform/gamepad/mac/HIDGamepadElement.cpp:
        * platform/graphics/Model.cpp:
        * platform/mac/ScrollingMomentumCalculatorMac.h: Renamed from Source/WebCore/page/scrolling/mac/ScrollingMomentumCalculatorMac.h.
        * platform/mac/ScrollingMomentumCalculatorMac.mm: Renamed from Source/WebCore/page/scrolling/mac/ScrollingMomentumCalculatorMac.mm.

2021-09-18  Simon Fraser  <simon.fraser@apple.com>

        Scroll offsets in ScrollingMomentumCalculator should be FloatPoint, not FloatSize
        https://bugs.webkit.org/show_bug.cgi?id=230451

        Reviewed by Wenson Hsieh.

        Scroll offsets are generally represented as IntPoint or FloatPoint. Have
        ScrollingMomentumCalculator conform to this convention.

        * page/scrolling/ScrollingMomentumCalculator.cpp:
        (WebCore::ScrollingMomentumCalculator::ScrollingMomentumCalculator):
        (WebCore::ScrollingMomentumCalculator::setRetargetedScrollOffset):
        (WebCore::ScrollingMomentumCalculator::predictedDestinationOffset):
        (WebCore::BasicScrollingMomentumCalculator::linearlyInterpolatedOffsetAtProgress):
        (WebCore::BasicScrollingMomentumCalculator::cubicallyInterpolatedOffsetAtProgress const):
        (WebCore::BasicScrollingMomentumCalculator::scrollOffsetAfterElapsedTime):
        (WebCore::BasicScrollingMomentumCalculator::initializeInterpolationCoefficientsIfNecessary):
        * page/scrolling/ScrollingMomentumCalculator.h:
        (WebCore::ScrollingMomentumCalculator::retargetedScrollOffset const):
        * page/scrolling/mac/ScrollingMomentumCalculatorMac.h:
        * page/scrolling/mac/ScrollingMomentumCalculatorMac.mm:
        (WebCore::ScrollingMomentumCalculatorMac::scrollOffsetAfterElapsedTime):
        (WebCore::ScrollingMomentumCalculatorMac::predictedDestinationOffset):
        (WebCore::ScrollingMomentumCalculatorMac::retargetedScrollOffsetDidChange):
        (WebCore::ScrollingMomentumCalculatorMac::ensurePlatformMomentumCalculator):

2021-09-18  Simon Fraser  <simon.fraser@apple.com>

        Remove some logging left in by mistake.

        Unreviewed.

        * platform/ScrollAnimationSmooth.cpp:
        (WebCore::ScrollAnimationSmooth::startAnimatedScroll):
        (WebCore::ScrollAnimationSmooth::startAnimatedScrollToDestination):
        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::setCurrentPosition):
        (WebCore::ScrollAnimator::scrollAnimationDidUpdate):

2021-09-18  Simon Fraser  <simon.fraser@apple.com>

        Remove use of NSScrollAnimationHelper for animated scrolls
        https://bugs.webkit.org/show_bug.cgi?id=230445

        Reviewed by Martin Robinson.

        NSScrollAnimationHelper provided little utility. Under the hood it's ust an ease-in-out
        animation with a duration based on distance, and that's exactly what ScrollAnimationSmooth
        is now, so we can remove use of NSScrollAnimationHelper in ScrollAnimatorMac and just
        use the ScrollAnimationSmooth from the base class.

        This unifies the scroll animation used for keyboard scrolling and CSS smooth scrolling.

        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::scroll):
        (WebCore::ScrollAnimator::scrollToPositionWithoutAnimation):
        (WebCore::ScrollAnimator::setCurrentPosition):
        (WebCore::ScrollAnimator::scrollAnimationDidUpdate):
        * platform/ScrollAnimator.h:
        (WebCore::ScrollAnimator::platformAllowsScrollAnimation const):
        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::ScrollAnimatorMac):
        (WebCore::scrollAnimationEnabledForSystem):
        (WebCore::ScrollAnimatorMac::platformAllowsScrollAnimation const):
        (WebCore::ScrollAnimatorMac::scroll):
        (abs): Deleted.
        (-[WebScrollAnimationHelperDelegate initWithScrollAnimator:]): Deleted.
        (-[WebScrollAnimationHelperDelegate invalidate]): Deleted.
        (-[WebScrollAnimationHelperDelegate bounds]): Deleted.
        (-[WebScrollAnimationHelperDelegate _immediateScrollToPoint:]): Deleted.
        (-[WebScrollAnimationHelperDelegate _pixelAlignProposedScrollPosition:]): Deleted.
        (-[WebScrollAnimationHelperDelegate convertSizeToBase:]): Deleted.
        (-[WebScrollAnimationHelperDelegate convertSizeFromBase:]): Deleted.
        (-[WebScrollAnimationHelperDelegate convertSizeToBacking:]): Deleted.
        (-[WebScrollAnimationHelperDelegate convertSizeFromBacking:]): Deleted.
        (-[WebScrollAnimationHelperDelegate superview]): Deleted.
        (-[WebScrollAnimationHelperDelegate documentView]): Deleted.
        (-[WebScrollAnimationHelperDelegate window]): Deleted.
        (-[WebScrollAnimationHelperDelegate _recursiveRecomputeToolTips]): Deleted.
        (WebCore::ScrollAnimatorMac::scrollToPositionWithAnimation): Deleted.
        (WebCore::ScrollAnimatorMac::scrollToPositionWithoutAnimation): Deleted.
        (WebCore::ScrollAnimatorMac::immediateScrollToPositionForScrollAnimation): Deleted.
        * platform/mac/ScrollbarsControllerMac.h:

2021-09-18  Simon Fraser  <simon.fraser@apple.com>

        Rename haveScrolledSincePageLoad() and push the state to ScrollbarsController
        https://bugs.webkit.org/show_bug.cgi?id=230444

        Reviewed by Myles C. Maxfield.
        
        r81159 added logic to suppress scrollbar animations during page load (delayed using a 100ms
        timer in ScrollbarsControllerMac), but to unsuppress the animations when receiving user
        events or scrolling. This state using the confusingly named "haveScrolledSincePageLoad",
        which is really "a wheel evnet or scroll requires that we stop suppressing scrollbar
        animations". So name it scrollbarAnimationsUnsuspendedByUserInteraction", and have
        ScrollbarsController maintain the state, rather than ScrollAnimator.

        Add some OverlayScrollbars logging to show this working (although it reveals that the
        100ms timer can fire multiple times).

        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::cancelAnimations):
        * platform/ScrollAnimator.h:
        (WebCore::ScrollAnimator::haveScrolledSincePageLoad const): Deleted.
        (WebCore::ScrollAnimator::setHaveScrolledSincePageLoad): Deleted.
        * platform/ScrollbarsController.cpp:
        (WebCore::ScrollbarsController::shouldSuspendScrollbarAnimations const):
        (WebCore::ScrollbarsController::cancelAnimations):
        (WebCore::ScrollbarsController::didBeginScrollGesture):
        (WebCore::ScrollbarsController::didEndScrollGesture):
        (WebCore::ScrollbarsController::mayBeginScrollGesture):
        * platform/ScrollbarsController.h:
        (WebCore::ScrollbarsController::scrollbarAnimationsUnsuspendedByUserInteraction const):
        (WebCore::ScrollbarsController::setScrollbarAnimationsUnsuspendedByUserInteraction):
        (WebCore::ScrollbarsController::cancelAnimations): Deleted.
        (WebCore::ScrollbarsController::didBeginScrollGesture const): Deleted.
        (WebCore::ScrollbarsController::didEndScrollGesture const): Deleted.
        (WebCore::ScrollbarsController::mayBeginScrollGesture const): Deleted.
        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::scroll):
        (WebCore::ScrollAnimatorMac::handleWheelEventPhase):
        (WebCore::ScrollAnimatorMac::handleWheelEvent):
        (WebCore::ScrollAnimatorMac::cancelAnimations): Deleted.
        * platform/mac/ScrollbarsControllerMac.h:
        * platform/mac/ScrollbarsControllerMac.mm:
        (-[WebScrollbarPartAnimation setCurrentProgress:]):
        (-[WebScrollerImpDelegate setUpAlphaAnimation:scrollerPainter:part:animateAlphaTo:duration:]):
        (WebCore::ScrollbarsControllerMac::cancelAnimations):
        (WebCore::ScrollbarsControllerMac::didBeginScrollGesture):
        (WebCore::ScrollbarsControllerMac::didEndScrollGesture):
        (WebCore::ScrollbarsControllerMac::mayBeginScrollGesture):
        (WebCore::ScrollbarsControllerMac::initialScrollbarPaintTimerFired):
        (WebCore::ScrollbarsControllerMac::haveScrolledSincePageLoad const): Deleted.
        (WebCore::ScrollbarsControllerMac::didBeginScrollGesture const): Deleted.
        (WebCore::ScrollbarsControllerMac::didEndScrollGesture const): Deleted.
        (WebCore::ScrollbarsControllerMac::mayBeginScrollGesture const): Deleted.

2021-09-18  Simon Fraser  <simon.fraser@apple.com>

        Clean up the ScrollAnimator interface a little
        https://bugs.webkit.org/show_bug.cgi?id=230324

        Reviewed by Myles C. Maxfield.

        Reduce brainprint by removing the "scroll to offset" variants; have the caller 
        do offset -> position conversion instead.

        Move virtual functions close together. Remove updateScrollSnapState()
        which was unimplemented.

        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::immediateScrollOnAxis):
        (WebCore::ScrollAnimator::scrollToOffsetWithoutAnimation): Deleted.
        (WebCore::ScrollAnimator::scrollToOffsetWithAnimation): Deleted.
        * platform/ScrollAnimator.h:
        (WebCore::ScrollAnimator::scrollableArea const):
        (WebCore::ScrollAnimator::processWheelEventForScrollSnap):
        (WebCore::ScrollAnimator::currentPosition const):
        (WebCore::ScrollAnimator::haveScrolledSincePageLoad const):
        (WebCore::ScrollAnimator::setHaveScrolledSincePageLoad):
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::scrollToOffsetWithoutAnimation):
        (WebCore::ScrollableArea::doPostThumbMoveSnapping):
        * platform/mac/ScrollAnimatorMac.mm:

2021-09-18  Patrick Griffis  <pgriffis@igalia.com>

        [GTK] Disable MediaSessionManagerGLib when MEDIA_SESSION disabled
        https://bugs.webkit.org/show_bug.cgi?id=230420

        Reviewed by Philippe Normand.

        Previously WebKit would try to own the MPRIS bus names even though
        the feature was disabled.

        * platform/RemoteCommandListener.cpp:
        (WebCore::RemoteCommandListener::resetCreationFunction):
        * platform/audio/PlatformMediaSessionManager.cpp:
        * platform/audio/glib/MediaSessionManagerGLib.cpp:
        * platform/audio/glib/MediaSessionManagerGLib.h:
        * platform/glib/RemoteCommandListenerGLib.cpp:
        * platform/glib/RemoteCommandListenerGLib.h:

2021-09-18  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Stretch the inline box with glyphs coming from fallback fonts.
        https://bugs.webkit.org/show_bug.cgi?id=230439

        Reviewed by Antti Koivisto.

        https://www.w3.org/TR/css-inline-3/#inline-height  
        "...
        When the computed line-height is normal, the layout bounds of an inline box encloses all its glyphs, going from the highest A to the deepest D. 
        (Note that glyphs in a single box can come from different fonts and thus might not all have the same A and D.)
        ..."
        (This is still no-op as TextUtil::fallbackFontsForRun returns an empty set)

        * layout/formattingContexts/inline/InlineLineBoxBuilder.cpp:
        (WebCore::Layout::LineBoxBuilder::adjustVerticalGeometryForInlineBoxWithFallbackFonts const):
        (WebCore::Layout::LineBoxBuilder::constructAndAlignInlineLevelBoxes):
        * layout/formattingContexts/inline/InlineLineBoxBuilder.h:

2021-09-18  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add skeleton implementation for fallback font support
        https://bugs.webkit.org/show_bug.cgi?id=230433

        Reviewed by Antti Koivisto.

        This is in preparation for supporting inline box stretching glyphs coming from fallback fonts.

        * layout/formattingContexts/inline/InlineLineBoxBuilder.cpp:
        (WebCore::Layout::LineBoxBuilder::adjustVerticalGeometryForInlineBoxWithFallbackFonts const):
        (WebCore::Layout::LineBoxBuilder::setInitialVerticalGeometryForInlineBox const):
        (WebCore::Layout::LineBoxBuilder::constructAndAlignInlineLevelBoxes):
        (WebCore::Layout::LineBoxBuilder::setVerticalGeometryForInlineBox const): Deleted.
        * layout/formattingContexts/inline/InlineLineBoxBuilder.h:
        * layout/formattingContexts/inline/text/TextUtil.cpp:
        (WebCore::Layout::TextUtil::fallbackFontsForRun):
        * layout/formattingContexts/inline/text/TextUtil.h:

2021-09-18  Alan Bujtas  <zalan@apple.com>

        [IFC][Integration] Enable surrogate pairs
        https://bugs.webkit.org/show_bug.cgi?id=229434

        Reviewed by Antti Koivisto.

        The "break the content at arbitrary position" feature is already surrogate pair aware, so
        let's enable this for IFC.

        * layout/integration/LayoutIntegrationCoverage.cpp:
        (WebCore::LayoutIntegration::canUseForCharacter):

2021-09-18  Myles C. Maxfield  <mmaxfield@apple.com>

        [iOS Family] Delete letterpress support
        https://bugs.webkit.org/show_bug.cgi?id=230441

        Reviewed by Tim Horton.

        It isn't necessary anymore.

        Tests deleted.

        * PlatformMac.cmake:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::renderTextDecorationFlagsToCSSValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::operator OptionSet<TextDecoration> const):
        * css/CSSValueKeywords.in:
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeTextDecorationLine):
        * platform/graphics/FontCascade.h:
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cocoa/FontCascadeCocoa.cpp: Added.
        (WebCore::FontCascade::canReturnFallbackFontsForComplexText):
        (WebCore::FontCascade::canExpandAroundIdeographsInComplexText):
        * platform/graphics/cocoa/FontCascadeCocoa.mm: Removed.
        * platform/graphics/coretext/FontCascadeCoreText.cpp:
        (WebCore::FontCascade::drawGlyphs):
        (WebCore::shouldUseLetterpressEffect): Deleted.
        * rendering/TextPaintStyle.cpp:
        (WebCore::TextPaintStyle::operator== const):
        (WebCore::computeTextPaintStyle):
        (WebCore::updateGraphicsContext):
        * rendering/TextPaintStyle.h:
        * rendering/style/RenderStyleConstants.cpp:
        (WebCore::operator<<):
        * rendering/style/RenderStyleConstants.h:

2021-09-17  Simon Fraser  <simon.fraser@apple.com>

        Replace all the complex math in ScrollAnimationSmooth with a single call into a CubicBezierTimingFunction
        https://bugs.webkit.org/show_bug.cgi?id=230436

        Reviewed by Tim Horton.

        ScrollAnimationSmooth had a lot of math that computed velocities for attack, drift and
        release phases, but they resulted in odd-feeling animations for long scrolls. We can replace
        it all, and get nice-feeling scrolls, by just using an ease-in-out timing function.

        Duration is compusted from distance with a max of 200ms, matching macOS behavior.

        * platform/ScrollAnimationSmooth.cpp:
        (WebCore::ScrollAnimationSmooth::ScrollAnimationSmooth):
        (WebCore::ScrollAnimationSmooth::startAnimatedScroll):
        (WebCore::ScrollAnimationSmooth::startAnimatedScrollToDestination):
        (WebCore::ScrollAnimationSmooth::startOrRetargetAnimation):
        (WebCore::ScrollAnimationSmooth::updateScrollExtents):
        (WebCore::linearInterpolation):
        (WebCore::ScrollAnimationSmooth::animateScroll):
        (WebCore::ScrollAnimationSmooth::animationTimerFired):
        (WebCore::ScrollAnimationSmooth::initializeAxesData): Deleted.
        (WebCore::curveAt): Deleted.
        (WebCore::attackCurve): Deleted.
        (WebCore::releaseCurve): Deleted.
        (WebCore::coastCurve): Deleted.
        (WebCore::curveIntegralAt): Deleted.
        (WebCore::attackArea): Deleted.
        (WebCore::releaseArea): Deleted.
        (WebCore::getAnimationParametersForGranularity): Deleted.
        (WebCore::ScrollAnimationSmooth::updatePerAxisData): Deleted.
        * platform/ScrollAnimationSmooth.h:

2021-09-17  Simon Fraser  <simon.fraser@apple.com>

        Move scrollbar-related code out of ScrollAnimator and into ScrollbarsController
        https://bugs.webkit.org/show_bug.cgi?id=230295

        Reviewed by Tim Horton.

        As the first step to cleaning up ScrollAnimator/ScrollController, move scrollbar-related code out of
        ScrollAnimator and into a new ScrollbarsController class, with platform-specific subclasses.
        This makes it much easier to understand the responsibilities of ScrollAnimator.

        * Sources.txt:
        * SourcesCocoa.txt:
        * SourcesGTK.txt:
        * SourcesWPE.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::contentsSizeChanged const):
        (WebCore::ScrollAnimator::contentsResized const): Deleted.
        (WebCore::ScrollAnimator::willEndLiveResize): Deleted.
        (WebCore::ScrollAnimator::didAddVerticalScrollbar): Deleted.
        (WebCore::ScrollAnimator::didAddHorizontalScrollbar): Deleted.
        * platform/ScrollAnimator.h:
        (WebCore::ScrollAnimator::haveScrolledSincePageLoad const):
        (WebCore::ScrollAnimator::setHaveScrolledSincePageLoad):
        (WebCore::ScrollAnimator::wheelEventTestMonitor const):
        (WebCore::ScrollAnimator::contentAreaWillPaint const): Deleted.
        (WebCore::ScrollAnimator::mouseEnteredContentArea): Deleted.
        (WebCore::ScrollAnimator::mouseExitedContentArea): Deleted.
        (WebCore::ScrollAnimator::mouseMovedInContentArea): Deleted.
        (WebCore::ScrollAnimator::mouseEnteredScrollbar const): Deleted.
        (WebCore::ScrollAnimator::mouseExitedScrollbar const): Deleted.
        (WebCore::ScrollAnimator::mouseIsDownInScrollbar const): Deleted.
        (WebCore::ScrollAnimator::willStartLiveResize): Deleted.
        (WebCore::ScrollAnimator::contentAreaDidShow): Deleted.
        (WebCore::ScrollAnimator::contentAreaDidHide): Deleted.
        (WebCore::ScrollAnimator::lockOverlayScrollbarStateToHidden): Deleted.
        (WebCore::ScrollAnimator::scrollbarsCanBeActive const): Deleted.
        (WebCore::ScrollAnimator::willRemoveVerticalScrollbar): Deleted.
        (WebCore::ScrollAnimator::willRemoveHorizontalScrollbar): Deleted.
        (WebCore::ScrollAnimator::invalidateScrollbarPartLayers): Deleted.
        (WebCore::ScrollAnimator::verticalScrollbarLayerDidChange): Deleted.
        (WebCore::ScrollAnimator::horizontalScrollbarLayerDidChange): Deleted.
        (WebCore::ScrollAnimator::shouldScrollbarParticipateInHitTesting): Deleted.
        (WebCore::ScrollAnimator::notifyContentAreaScrolled): Deleted.
        (WebCore::ScrollAnimator::horizontalScrollbarStateForTesting const): Deleted.
        (WebCore::ScrollAnimator::verticalScrollbarStateForTesting const): Deleted.
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::scrollAnimator const):
        (WebCore::ScrollableArea::scrollbarsController const):
        (WebCore::ScrollableArea::scrollPositionChanged):
        (WebCore::ScrollableArea::willStartLiveResize):
        (WebCore::ScrollableArea::willEndLiveResize):
        (WebCore::ScrollableArea::contentAreaWillPaint const):
        (WebCore::ScrollableArea::mouseEnteredContentArea const):
        (WebCore::ScrollableArea::mouseExitedContentArea const):
        (WebCore::ScrollableArea::mouseMovedInContentArea const):
        (WebCore::ScrollableArea::mouseEnteredScrollbar const):
        (WebCore::ScrollableArea::mouseExitedScrollbar const):
        (WebCore::ScrollableArea::mouseIsDownInScrollbar const):
        (WebCore::ScrollableArea::contentAreaDidShow const):
        (WebCore::ScrollableArea::contentAreaDidHide const):
        (WebCore::ScrollableArea::lockOverlayScrollbarStateToHidden const):
        (WebCore::ScrollableArea::scrollbarsCanBeActive const):
        (WebCore::ScrollableArea::didAddScrollbar):
        (WebCore::ScrollableArea::willRemoveScrollbar):
        (WebCore::ScrollableArea::contentsResized):
        (WebCore::ScrollableArea::availableContentSizeChanged):
        (WebCore::ScrollableArea::invalidateScrollbars):
        (WebCore::ScrollableArea::verticalScrollbarLayerDidChange):
        (WebCore::ScrollableArea::horizontalScrollbarLayerDidChange):
        (WebCore::ScrollableArea::horizontalScrollbarStateForTesting const):
        (WebCore::ScrollableArea::verticalScrollbarStateForTesting const):
        (WebCore::ScrollableArea::resnapAfterLayout):
        * platform/ScrollableArea.h:
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::shouldParticipateInHitTesting):
        * platform/ScrollbarsController.cpp: Copied from Source/WebCore/platform/ios/ScrollAnimatorIOS.h.
        (WebCore::ScrollbarsController::create):
        (WebCore::ScrollbarsController::ScrollbarsController):
        * platform/ScrollbarsController.h: Added.
        (WebCore::ScrollbarsController::scrollableArea const):
        (WebCore::ScrollbarsController::notifyPositionChanged):
        (WebCore::ScrollbarsController::cancelAnimations):
        (WebCore::ScrollbarsController::didBeginScrollGesture const):
        (WebCore::ScrollbarsController::didEndScrollGesture const):
        (WebCore::ScrollbarsController::mayBeginScrollGesture const):
        (WebCore::ScrollbarsController::contentAreaWillPaint const):
        (WebCore::ScrollbarsController::mouseEnteredContentArea):
        (WebCore::ScrollbarsController::mouseExitedContentArea):
        (WebCore::ScrollbarsController::mouseMovedInContentArea):
        (WebCore::ScrollbarsController::mouseEnteredScrollbar const):
        (WebCore::ScrollbarsController::mouseExitedScrollbar const):
        (WebCore::ScrollbarsController::mouseIsDownInScrollbar const):
        (WebCore::ScrollbarsController::willStartLiveResize):
        (WebCore::ScrollbarsController::contentsSizeChanged const):
        (WebCore::ScrollbarsController::willEndLiveResize):
        (WebCore::ScrollbarsController::contentAreaDidShow):
        (WebCore::ScrollbarsController::contentAreaDidHide):
        (WebCore::ScrollbarsController::lockOverlayScrollbarStateToHidden):
        (WebCore::ScrollbarsController::scrollbarsCanBeActive const):
        (WebCore::ScrollbarsController::didAddVerticalScrollbar):
        (WebCore::ScrollbarsController::willRemoveVerticalScrollbar):
        (WebCore::ScrollbarsController::didAddHorizontalScrollbar):
        (WebCore::ScrollbarsController::willRemoveHorizontalScrollbar):
        (WebCore::ScrollbarsController::invalidateScrollbarPartLayers):
        (WebCore::ScrollbarsController::verticalScrollbarLayerDidChange):
        (WebCore::ScrollbarsController::horizontalScrollbarLayerDidChange):
        (WebCore::ScrollbarsController::shouldScrollbarParticipateInHitTesting):
        (WebCore::ScrollbarsController::notifyContentAreaScrolled):
        (WebCore::ScrollbarsController::horizontalScrollbarStateForTesting const):
        (WebCore::ScrollbarsController::verticalScrollbarStateForTesting const):
        * platform/generic/ScrollAnimatorGeneric.cpp:
        (WebCore::ScrollAnimatorGeneric::ScrollAnimatorGeneric):
        (WebCore::ScrollAnimatorGeneric::didAddVerticalScrollbar): Deleted.
        (WebCore::ScrollAnimatorGeneric::didAddHorizontalScrollbar): Deleted.
        (WebCore::ScrollAnimatorGeneric::willRemoveVerticalScrollbar): Deleted.
        (WebCore::ScrollAnimatorGeneric::willRemoveHorizontalScrollbar): Deleted.
        (WebCore::ScrollAnimatorGeneric::updateOverlayScrollbarsOpacity): Deleted.
        (WebCore::easeOutCubic): Deleted.
        (WebCore::ScrollAnimatorGeneric::overlayScrollbarAnimationTimerFired): Deleted.
        (WebCore::ScrollAnimatorGeneric::showOverlayScrollbars): Deleted.
        (WebCore::ScrollAnimatorGeneric::hideOverlayScrollbars): Deleted.
        (WebCore::ScrollAnimatorGeneric::mouseEnteredContentArea): Deleted.
        (WebCore::ScrollAnimatorGeneric::mouseExitedContentArea): Deleted.
        (WebCore::ScrollAnimatorGeneric::mouseMovedInContentArea): Deleted.
        (WebCore::ScrollAnimatorGeneric::contentAreaDidShow): Deleted.
        (WebCore::ScrollAnimatorGeneric::contentAreaDidHide): Deleted.
        (WebCore::ScrollAnimatorGeneric::notifyContentAreaScrolled): Deleted.
        (WebCore::ScrollAnimatorGeneric::lockOverlayScrollbarStateToHidden): Deleted.
        * platform/generic/ScrollAnimatorGeneric.h:
        * platform/ios/ScrollAnimatorIOS.h:
        * platform/ios/ScrollAnimatorIOS.mm:
        (WebCore::ScrollAnimatorIOS::ScrollAnimatorIOS):
        * platform/mac/ScrollAnimatorMac.h:
        (WebCore::ScrollAnimatorMac::haveScrolledSincePageLoad const): Deleted.
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::ScrollAnimatorMac):
        (WebCore::ScrollAnimatorMac::scroll):
        (WebCore::ScrollAnimatorMac::notifyPositionChanged):
        (WebCore::ScrollAnimatorMac::cancelAnimations):
        (WebCore::ScrollAnimatorMac::handleWheelEventPhase):
        (WebCore::ScrollAnimatorMac::handleWheelEvent):
        (WebCore::macScrollbarTheme): Deleted.
        (WebCore::scrollerImpForScrollbar): Deleted.
        (-[WebScrollerImpPairDelegate initWithScrollableArea:]): Deleted.
        (-[WebScrollerImpPairDelegate invalidate]): Deleted.
        (-[WebScrollerImpPairDelegate contentAreaRectForScrollerImpPair:]): Deleted.
        (-[WebScrollerImpPairDelegate inLiveResizeForScrollerImpPair:]): Deleted.
        (-[WebScrollerImpPairDelegate mouseLocationInContentAreaForScrollerImpPair:]): Deleted.
        (-[WebScrollerImpPairDelegate scrollerImpPair:convertContentPoint:toScrollerImp:]): Deleted.
        (-[WebScrollerImpPairDelegate scrollerImpPair:setContentAreaNeedsDisplayInRect:]): Deleted.
        (-[WebScrollerImpPairDelegate scrollerImpPair:updateScrollerStyleForNewRecommendedScrollerStyle:]): Deleted.
        (operator<<): Deleted.
        (-[WebScrollbarPartAnimation initWithScrollbar:featureToAnimate:animateFrom:animateTo:duration:]): Deleted.
        (-[WebScrollbarPartAnimation startAnimation]): Deleted.
        (-[WebScrollbarPartAnimation setStartValue:]): Deleted.
        (-[WebScrollbarPartAnimation setEndValue:]): Deleted.
        (-[WebScrollbarPartAnimation setCurrentProgress:]): Deleted.
        (-[WebScrollbarPartAnimation invalidate]): Deleted.
        (-[WebScrollbarPartAnimation setDuration:]): Deleted.
        (-[WebScrollbarPartAnimation stopAnimation]): Deleted.
        (-[WebScrollerImpDelegate initWithScrollbar:]): Deleted.
        (-[WebScrollerImpDelegate cancelAnimations]): Deleted.
        (-[WebScrollerImpDelegate scrollAnimator]): Deleted.
        (-[WebScrollerImpDelegate convertRectToBacking:]): Deleted.
        (-[WebScrollerImpDelegate convertRectFromBacking:]): Deleted.
        (-[WebScrollerImpDelegate layer]): Deleted.
        (-[WebScrollerImpDelegate mouseLocationInScrollerForScrollerImp:]): Deleted.
        (-[WebScrollerImpDelegate convertRectToLayer:]): Deleted.
        (-[WebScrollerImpDelegate shouldUseLayerPerPartForScrollerImp:]): Deleted.
        (-[WebScrollerImpDelegate effectiveAppearanceForScrollerImp:]): Deleted.
        (-[WebScrollerImpDelegate setUpAlphaAnimation:scrollerPainter:part:animateAlphaTo:duration:]): Deleted.
        (-[WebScrollerImpDelegate scrollerImp:animateKnobAlphaTo:duration:]): Deleted.
        (-[WebScrollerImpDelegate scrollerImp:animateTrackAlphaTo:duration:]): Deleted.
        (-[WebScrollerImpDelegate scrollerImp:animateUIStateTransitionWithDuration:]): Deleted.
        (-[WebScrollerImpDelegate scrollerImp:animateExpansionTransitionWithDuration:]): Deleted.
        (-[WebScrollerImpDelegate scrollerImp:overlayScrollerStateChangedTo:]): Deleted.
        (-[WebScrollerImpDelegate invalidate]): Deleted.
        (WebCore::ScrollAnimatorMac::~ScrollAnimatorMac): Deleted.
        (WebCore::scrollbarState): Deleted.
        (WebCore::ScrollAnimatorMac::horizontalScrollbarStateForTesting const): Deleted.
        (WebCore::ScrollAnimatorMac::verticalScrollbarStateForTesting const): Deleted.
        (WebCore::ScrollAnimatorMac::contentAreaWillPaint const): Deleted.
        (WebCore::ScrollAnimatorMac::mouseEnteredContentArea): Deleted.
        (WebCore::ScrollAnimatorMac::mouseExitedContentArea): Deleted.
        (WebCore::ScrollAnimatorMac::mouseMovedInContentArea): Deleted.
        (WebCore::ScrollAnimatorMac::mouseEnteredScrollbar const): Deleted.
        (WebCore::ScrollAnimatorMac::mouseExitedScrollbar const): Deleted.
        (WebCore::ScrollAnimatorMac::mouseIsDownInScrollbar const): Deleted.
        (WebCore::ScrollAnimatorMac::willStartLiveResize): Deleted.
        (WebCore::ScrollAnimatorMac::contentsResized const): Deleted.
        (WebCore::ScrollAnimatorMac::willEndLiveResize): Deleted.
        (WebCore::ScrollAnimatorMac::contentAreaDidShow): Deleted.
        (WebCore::ScrollAnimatorMac::contentAreaDidHide): Deleted.
        (WebCore::ScrollAnimatorMac::didBeginScrollGesture const): Deleted.
        (WebCore::ScrollAnimatorMac::didEndScrollGesture const): Deleted.
        (WebCore::ScrollAnimatorMac::mayBeginScrollGesture const): Deleted.
        (WebCore::ScrollAnimatorMac::lockOverlayScrollbarStateToHidden): Deleted.
        (WebCore::ScrollAnimatorMac::scrollbarsCanBeActive const): Deleted.
        (WebCore::ScrollAnimatorMac::didAddVerticalScrollbar): Deleted.
        (WebCore::ScrollAnimatorMac::willRemoveVerticalScrollbar): Deleted.
        (WebCore::ScrollAnimatorMac::didAddHorizontalScrollbar): Deleted.
        (WebCore::ScrollAnimatorMac::willRemoveHorizontalScrollbar): Deleted.
        (WebCore::ScrollAnimatorMac::invalidateScrollbarPartLayers): Deleted.
        (WebCore::ScrollAnimatorMac::verticalScrollbarLayerDidChange): Deleted.
        (WebCore::ScrollAnimatorMac::horizontalScrollbarLayerDidChange): Deleted.
        (WebCore::ScrollAnimatorMac::shouldScrollbarParticipateInHitTesting): Deleted.
        (WebCore::ScrollAnimatorMac::notifyContentAreaScrolled): Deleted.
        (WebCore::ScrollAnimatorMac::updateScrollerStyle): Deleted.
        (WebCore::ScrollAnimatorMac::startScrollbarPaintTimer): Deleted.
        (WebCore::ScrollAnimatorMac::scrollbarPaintTimerIsActive const): Deleted.
        (WebCore::ScrollAnimatorMac::stopScrollbarPaintTimer): Deleted.
        (WebCore::ScrollAnimatorMac::initialScrollbarPaintTimerFired): Deleted.
        (WebCore::ScrollAnimatorMac::sendContentAreaScrolledSoon): Deleted.
        (WebCore::ScrollAnimatorMac::sendContentAreaScrolled): Deleted.
        (WebCore::ScrollAnimatorMac::sendContentAreaScrolledTimerFired): Deleted.
        (WebCore::ScrollAnimatorMac::setVisibleScrollerThumbRect): Deleted.
        * platform/mac/ScrollbarsControllerMac.h: Added.
        * platform/mac/ScrollbarsControllerMac.mm: Copied from Source/WebCore/platform/mac/ScrollAnimatorMac.mm.
        (WebCore::macScrollbarTheme):
        (WebCore::scrollerImpForScrollbar):
        (-[WebScrollerImpPairDelegate initWithScrollableArea:]):
        (-[WebScrollerImpPairDelegate invalidate]):
        (-[WebScrollerImpPairDelegate contentAreaRectForScrollerImpPair:]):
        (-[WebScrollerImpPairDelegate inLiveResizeForScrollerImpPair:]):
        (-[WebScrollerImpPairDelegate mouseLocationInContentAreaForScrollerImpPair:]):
        (-[WebScrollerImpPairDelegate scrollerImpPair:convertContentPoint:toScrollerImp:]):
        (-[WebScrollerImpPairDelegate scrollerImpPair:setContentAreaNeedsDisplayInRect:]):
        (-[WebScrollerImpPairDelegate scrollerImpPair:updateScrollerStyleForNewRecommendedScrollerStyle:]):
        (operator<<):
        (-[WebScrollbarPartAnimation initWithScrollbar:featureToAnimate:animateFrom:animateTo:duration:]):
        (-[WebScrollbarPartAnimation startAnimation]):
        (-[WebScrollbarPartAnimation setStartValue:]):
        (-[WebScrollbarPartAnimation setEndValue:]):
        (-[WebScrollbarPartAnimation setCurrentProgress:]):
        (-[WebScrollbarPartAnimation invalidate]):
        (-[WebScrollbarPartAnimation setDuration:]):
        (-[WebScrollbarPartAnimation stopAnimation]):
        (-[WebScrollerImpDelegate initWithScrollbar:]):
        (-[WebScrollerImpDelegate cancelAnimations]):
        (-[WebScrollerImpDelegate scrollbarsController]):
        (-[WebScrollerImpDelegate convertRectToBacking:]):
        (-[WebScrollerImpDelegate convertRectFromBacking:]):
        (-[WebScrollerImpDelegate layer]):
        (-[WebScrollerImpDelegate mouseLocationInScrollerForScrollerImp:]):
        (-[WebScrollerImpDelegate convertRectToLayer:]):
        (-[WebScrollerImpDelegate shouldUseLayerPerPartForScrollerImp:]):
        (-[WebScrollerImpDelegate effectiveAppearanceForScrollerImp:]):
        (-[WebScrollerImpDelegate setUpAlphaAnimation:scrollerPainter:part:animateAlphaTo:duration:]):
        (-[WebScrollerImpDelegate scrollerImp:animateKnobAlphaTo:duration:]):
        (-[WebScrollerImpDelegate scrollerImp:animateTrackAlphaTo:duration:]):
        (-[WebScrollerImpDelegate scrollerImp:animateUIStateTransitionWithDuration:]):
        (-[WebScrollerImpDelegate scrollerImp:animateExpansionTransitionWithDuration:]):
        (-[WebScrollerImpDelegate scrollerImp:overlayScrollerStateChangedTo:]):
        (-[WebScrollerImpDelegate invalidate]):
        (WebCore::ScrollbarsController::create):
        (WebCore::ScrollbarsControllerMac::ScrollbarsControllerMac):
        (WebCore::ScrollbarsControllerMac::~ScrollbarsControllerMac):
        (WebCore::ScrollbarsControllerMac::notifyPositionChanged):
        (WebCore::ScrollbarsControllerMac::cancelAnimations):
        (WebCore::ScrollbarsControllerMac::setVisibleScrollerThumbRect):
        (WebCore::ScrollbarsControllerMac::haveScrolledSincePageLoad const):
        (WebCore::ScrollbarsControllerMac::contentAreaWillPaint const):
        (WebCore::ScrollbarsControllerMac::mouseEnteredContentArea):
        (WebCore::ScrollbarsControllerMac::mouseExitedContentArea):
        (WebCore::ScrollbarsControllerMac::mouseMovedInContentArea):
        (WebCore::ScrollbarsControllerMac::mouseEnteredScrollbar const):
        (WebCore::ScrollbarsControllerMac::mouseExitedScrollbar const):
        (WebCore::ScrollbarsControllerMac::mouseIsDownInScrollbar const):
        (WebCore::ScrollbarsControllerMac::willStartLiveResize):
        (WebCore::ScrollbarsControllerMac::contentsSizeChanged const):
        (WebCore::ScrollbarsControllerMac::willEndLiveResize):
        (WebCore::ScrollbarsControllerMac::contentAreaDidShow):
        (WebCore::ScrollbarsControllerMac::contentAreaDidHide):
        (WebCore::ScrollbarsControllerMac::didBeginScrollGesture const):
        (WebCore::ScrollbarsControllerMac::didEndScrollGesture const):
        (WebCore::ScrollbarsControllerMac::mayBeginScrollGesture const):
        (WebCore::ScrollbarsControllerMac::lockOverlayScrollbarStateToHidden):
        (WebCore::ScrollbarsControllerMac::scrollbarsCanBeActive const):
        (WebCore::ScrollbarsControllerMac::didAddVerticalScrollbar):
        (WebCore::ScrollbarsControllerMac::willRemoveVerticalScrollbar):
        (WebCore::ScrollbarsControllerMac::didAddHorizontalScrollbar):
        (WebCore::ScrollbarsControllerMac::willRemoveHorizontalScrollbar):
        (WebCore::ScrollbarsControllerMac::invalidateScrollbarPartLayers):
        (WebCore::ScrollbarsControllerMac::verticalScrollbarLayerDidChange):
        (WebCore::ScrollbarsControllerMac::horizontalScrollbarLayerDidChange):
        (WebCore::ScrollbarsControllerMac::shouldScrollbarParticipateInHitTesting):
        (WebCore::ScrollbarsControllerMac::notifyContentAreaScrolled):
        (WebCore::ScrollbarsControllerMac::updateScrollerStyle):
        (WebCore::ScrollbarsControllerMac::startScrollbarPaintTimer):
        (WebCore::ScrollbarsControllerMac::scrollbarPaintTimerIsActive const):
        (WebCore::ScrollbarsControllerMac::stopScrollbarPaintTimer):
        (WebCore::ScrollbarsControllerMac::initialScrollbarPaintTimerFired):
        (WebCore::ScrollbarsControllerMac::sendContentAreaScrolledTimerFired):
        (WebCore::ScrollbarsControllerMac::sendContentAreaScrolledSoon):
        (WebCore::ScrollbarsControllerMac::sendContentAreaScrolled):
        (WebCore::scrollbarState):
        (WebCore::ScrollbarsControllerMac::horizontalScrollbarStateForTesting const):
        (WebCore::ScrollbarsControllerMac::verticalScrollbarStateForTesting const):
        (WebCore::ScrollbarsControllerMac::wheelEventTestMonitor const):
        * platform/mock/ScrollAnimatorMock.h: Removed.
        * platform/mock/ScrollbarsControllerMock.cpp: Renamed from Source/WebCore/platform/mock/ScrollAnimatorMock.cpp.
        (WebCore::ScrollbarsControllerMock::ScrollbarsControllerMock):
        (WebCore::ScrollbarsControllerMock::didAddVerticalScrollbar):
        (WebCore::ScrollbarsControllerMock::didAddHorizontalScrollbar):
        (WebCore::ScrollbarsControllerMock::willRemoveVerticalScrollbar):
        (WebCore::ScrollbarsControllerMock::willRemoveHorizontalScrollbar):
        (WebCore::ScrollbarsControllerMock::mouseEnteredContentArea):
        (WebCore::ScrollbarsControllerMock::mouseMovedInContentArea):
        (WebCore::ScrollbarsControllerMock::mouseExitedContentArea):
        (WebCore::ScrollbarsControllerMock::scrollbarPrefix const):
        (WebCore::ScrollbarsControllerMock::mouseEnteredScrollbar const):
        (WebCore::ScrollbarsControllerMock::mouseExitedScrollbar const):
        (WebCore::ScrollbarsControllerMock::mouseIsDownInScrollbar const):
        * platform/mock/ScrollbarsControllerMock.h: Added.

2021-09-17  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Enable content with synthetic bold for IFC
        https://bugs.webkit.org/show_bug.cgi?id=230383

        Reviewed by Antti Koivisto.

        Synthetic bold prevents us from using the fast text measuring codepath, but IFC does work
        with the slow codepath too (FontCascade::widthForSimpleText vs FontCascade::width).

        * layout/integration/LayoutIntegrationCoverage.cpp:
        (WebCore::LayoutIntegration::canUseForText):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::computeCanUseSimplifiedTextMeasuring const):

2021-09-17  Alex Christensen  <achristensen@webkit.org>

        Use ObjectIdentifier for ResourceLoader
        https://bugs.webkit.org/show_bug.cgi?id=230278

        Reviewed by Michael Catanzaro.

        * Modules/fetch/FetchLoader.cpp:
        (WebCore::FetchLoader::didReceiveResponse):
        (WebCore::FetchLoader::didFinishLoading):
        * Modules/fetch/FetchLoader.h:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WorkerModuleScriptLoader.h:
        * dom/Document.cpp:
        (WebCore::Document::processMetaHttpEquiv):
        * fileapi/FileReaderLoader.cpp:
        (WebCore::FileReaderLoader::didReceiveResponse):
        (WebCore::FileReaderLoader::didFinishLoading):
        * fileapi/FileReaderLoader.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::willSendRequestImpl):
        (WebCore::InspectorInstrumentation::willSendRequestOfTypeImpl):
        (WebCore::InspectorInstrumentation::didReceiveResourceResponseImpl):
        (WebCore::InspectorInstrumentation::didReceiveThreadableLoaderResponseImpl):
        (WebCore::InspectorInstrumentation::didReceiveDataImpl):
        (WebCore::InspectorInstrumentation::didFinishLoadingImpl):
        (WebCore::InspectorInstrumentation::didFailLoadingImpl):
        (WebCore::InspectorInstrumentation::scriptImportedImpl):
        (WebCore::InspectorInstrumentation::didReceiveScriptResponseImpl):
        (WebCore::InspectorInstrumentation::interceptResponseImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::willSendRequest):
        (WebCore::InspectorInstrumentation::willSendRequestOfType):
        (WebCore::InspectorInstrumentation::didReceiveResourceResponse):
        (WebCore::InspectorInstrumentation::didReceiveThreadableLoaderResponse):
        (WebCore::InspectorInstrumentation::didReceiveData):
        (WebCore::InspectorInstrumentation::didFinishLoading):
        (WebCore::InspectorInstrumentation::didFailLoading):
        (WebCore::InspectorInstrumentation::continueAfterXFrameOptionsDenied):
        (WebCore::InspectorInstrumentation::continueWithPolicyDownload):
        (WebCore::InspectorInstrumentation::continueWithPolicyIgnore):
        (WebCore::InspectorInstrumentation::scriptImported):
        (WebCore::InspectorInstrumentation::didReceiveScriptResponse):
        (WebCore::InspectorInstrumentation::interceptResponse):
        * inspector/InspectorInstrumentationWebKit.cpp:
        (WebCore::InspectorInstrumentationWebKit::interceptResponseInternal):
        * inspector/InspectorInstrumentationWebKit.h:
        (WebCore::InspectorInstrumentationWebKit::interceptResponse):
        * inspector/agents/InspectorNetworkAgent.cpp:
        (WebCore::InspectorNetworkAgent::willSendRequest):
        (WebCore::InspectorNetworkAgent::willSendRequestOfType):
        (WebCore::InspectorNetworkAgent::didReceiveResponse):
        (WebCore::InspectorNetworkAgent::didReceiveData):
        (WebCore::InspectorNetworkAgent::didFinishLoading):
        (WebCore::InspectorNetworkAgent::didFailLoading):
        (WebCore::InspectorNetworkAgent::didLoadResourceFromMemoryCache):
        (WebCore::InspectorNetworkAgent::setInitialScriptContent):
        (WebCore::InspectorNetworkAgent::didReceiveScriptResponse):
        (WebCore::InspectorNetworkAgent::didReceiveThreadableLoaderResponse):
        (WebCore::InspectorNetworkAgent::interceptRequest):
        (WebCore::InspectorNetworkAgent::interceptResponse):
        * inspector/agents/InspectorNetworkAgent.h:
        * inspector/agents/WebConsoleAgent.cpp:
        (WebCore::WebConsoleAgent::didReceiveResponse):
        (WebCore::WebConsoleAgent::didFailLoading):
        * inspector/agents/WebConsoleAgent.h:
        * loader/CrossOriginPreflightChecker.cpp:
        (WebCore::CrossOriginPreflightChecker::validatePreflightResponse):
        (WebCore::CrossOriginPreflightChecker::doPreflight):
        * loader/CrossOriginPreflightChecker.h:
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::finishedLoading):
        (WebCore::DocumentLoader::tryLoadingSubstituteData):
        (WebCore::DocumentLoader::stopLoadingAfterXFrameOptionsOrContentSecurityPolicyDenied):
        (WebCore::DocumentLoader::responseReceived):
        (WebCore::DocumentLoader::disallowDataRequest const):
        (WebCore::DocumentLoader::addSubresourceLoader):
        (WebCore::DocumentLoader::loadMainResource):
        (WebCore::DocumentLoader::subresourceLoaderFinishedLoadingOnePart):
        * loader/DocumentLoader.h:
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::didReceiveResponse):
        (WebCore::DocumentThreadableLoader::didReceiveData):
        (WebCore::DocumentThreadableLoader::didFinishLoading):
        (WebCore::DocumentThreadableLoader::didFail):
        (WebCore::DocumentThreadableLoader::preflightFailure):
        (WebCore::DocumentThreadableLoader::loadRequest):
        * loader/DocumentThreadableLoader.h:
        * loader/EmptyClients.cpp:
        (WebCore::EmptyFrameLoaderClient::assignIdentifierToInitialRequest):
        (WebCore::EmptyFrameLoaderClient::shouldUseCredentialStorage):
        (WebCore::EmptyFrameLoaderClient::dispatchWillSendRequest):
        (WebCore::EmptyFrameLoaderClient::dispatchDidReceiveAuthenticationChallenge):
        (WebCore::EmptyFrameLoaderClient::canAuthenticateAgainstProtectionSpace):
        (WebCore::EmptyFrameLoaderClient::connectionProperties):
        (WebCore::EmptyFrameLoaderClient::dispatchDidReceiveResponse):
        (WebCore::EmptyFrameLoaderClient::dispatchDidReceiveContentLength):
        (WebCore::EmptyFrameLoaderClient::dispatchDidFinishLoading):
        (WebCore::EmptyFrameLoaderClient::dispatchDidFailLoading):
        (WebCore::EmptyFrameLoaderClient::willCacheResponse const):
        (WebCore::EmptyFrameLoaderClient::shouldCacheResponse):
        * loader/EmptyFrameLoaderClient.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::willLoadMediaElementURL):
        (WebCore::FrameLoader::commitProvisionalLoad):
        (WebCore::FrameLoader::loadResourceSynchronously):
        (WebCore::FrameLoader::requestFromDelegate):
        (WebCore::FrameLoader::loadedResourceFromMemoryCache):
        (WebCore::FrameLoader::shouldInterruptLoadForXFrameOptions):
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:
        * loader/LoaderStrategy.cpp:
        (WebCore::LoaderStrategy::responseFromResourceLoadIdentifier):
        (WebCore::LoaderStrategy::networkMetricsFromResourceLoadIdentifier):
        (WebCore::LoaderStrategy::intermediateLoadInformationFromResourceLoadIdentifier):
        * loader/LoaderStrategy.h:
        (WebCore::LoaderStrategy::ongoingLoads const):
        (): Deleted.
        * loader/PingLoader.cpp:
        (WebCore::PingLoader::startPingLoad):
        * loader/ProgressTracker.cpp:
        (WebCore::ProgressTracker::incrementProgress):
        (WebCore::ProgressTracker::completeProgress):
        (WebCore::ProgressTracker::createUniqueIdentifier):
        * loader/ProgressTracker.h:
        * loader/ResourceLoadNotifier.cpp:
        (WebCore::ResourceLoadNotifier::didReceiveAuthenticationChallenge):
        (WebCore::ResourceLoadNotifier::assignIdentifierToInitialRequest):
        (WebCore::ResourceLoadNotifier::dispatchWillSendRequest):
        (WebCore::ResourceLoadNotifier::dispatchDidReceiveResponse):
        (WebCore::ResourceLoadNotifier::dispatchDidReceiveData):
        (WebCore::ResourceLoadNotifier::dispatchDidFinishLoading):
        (WebCore::ResourceLoadNotifier::dispatchDidFailLoading):
        (WebCore::ResourceLoadNotifier::sendRemainingDelegateMessages):
        * loader/ResourceLoadNotifier.h:
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::releaseResources):
        (WebCore::ResourceLoader::willSendRequestInternal):
        * loader/ResourceLoader.h:
        (WebCore::ResourceLoader::identifier const):
        * loader/ResourceLoaderIdentifier.h: Copied from Source/WebKit/Shared/URLSchemeTaskParameters.h.
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::init):
        (WebCore::SubresourceLoader::willSendRequestInternal):
        (WebCore::SubresourceLoader::didReceiveResponse):
        (WebCore::SubresourceLoader::didFinishLoading):
        (WebCore::SubresourceLoader::didFail):
        (WebCore::SubresourceLoader::didCancel):
        * loader/ThreadableLoaderClient.h:
        (WebCore::ThreadableLoaderClient::didSendData):
        (WebCore::ThreadableLoaderClient::didReceiveResponse):
        (WebCore::ThreadableLoaderClient::didReceiveData):
        (WebCore::ThreadableLoaderClient::didFinishLoading):
        (WebCore::ThreadableLoaderClient::didFail):
        (WebCore::ThreadableLoaderClient::didFinishTiming):
        (WebCore::ThreadableLoaderClient::notifyIsDone):
        * loader/ThreadableLoaderClientWrapper.h:
        (WebCore::ThreadableLoaderClientWrapper::didReceiveResponse):
        (WebCore::ThreadableLoaderClientWrapper::didFinishLoading):
        (WebCore::ThreadableLoaderClientWrapper::didReceiveAuthenticationCancellation):
        * loader/WorkerThreadableLoader.cpp:
        (WebCore::WorkerThreadableLoader::MainThreadBridge::MainThreadBridge):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didReceiveResponse):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didFinishLoading):
        * loader/WorkerThreadableLoader.h:
        (WebCore::WorkerThreadableLoader::create):
        (WebCore::WorkerThreadableLoader::done const):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::update):
        (WebCore::ApplicationCacheGroup::startLoadingEntry):
        * loader/appcache/ApplicationCacheGroup.h:
        * loader/cache/CachedRawResource.cpp:
        (WebCore::CachedRawResource::CachedRawResource):
        * loader/cache/CachedRawResource.h:
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::load):
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::identifierForLoadWithoutResourceLoader const):
        * page/EventSource.cpp:
        (WebCore::EventSource::didReceiveResponse):
        (WebCore::EventSource::didFinishLoading):
        * page/EventSource.h:
        * workers/Worker.cpp:
        (WebCore::Worker::didReceiveResponse):
        * workers/Worker.h:
        * workers/WorkerFontLoadRequest.cpp:
        (WebCore::WorkerFontLoadRequest::didReceiveResponse):
        (WebCore::WorkerFontLoadRequest::didFinishLoading):
        * workers/WorkerFontLoadRequest.h:
        * workers/WorkerOrWorkletGlobalScope.h:
        (WebCore::WorkerOrWorkletGlobalScope::createUniqueIdentifier): Deleted.
        * workers/WorkerScriptLoader.cpp:
        (WebCore::WorkerScriptLoader::didReceiveResponse):
        (WebCore::WorkerScriptLoader::didFinishLoading):
        * workers/WorkerScriptLoader.h:
        (WebCore::WorkerScriptLoader::identifier const):
        * workers/WorkerScriptLoaderClient.h:
        * workers/service/ServiceWorkerJob.cpp:
        (WebCore::ServiceWorkerJob::didReceiveResponse):
        * workers/service/ServiceWorkerJob.h:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::didFinishLoading):
        (WebCore::XMLHttpRequest::didReceiveResponse):
        * xml/XMLHttpRequest.h:

2021-09-17  Myles C. Maxfield  <mmaxfield@apple.com>

        Fix the Xcode build

        Unreviewed.

        No new tests because there is no behavior change.

        * DerivedSources-output.xcfilelist:

2021-09-17  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Add fast property enumeration mode for JSON.stringify
        https://bugs.webkit.org/show_bug.cgi?id=230393

        Reviewed by Mark Lam.

        * Modules/webaudio/AudioWorkletProcessor.cpp:
        (WebCore::AudioWorkletProcessor::buildJSArguments):
        * Modules/webaudio/AudioWorkletProcessor.h:

2021-09-17  Johnson Zhou  <qiaosong_zhou@apple.com>

        Add CustomToJSObject wrapper for CSSStyleValueCustom
        https://bugs.webkit.org/show_bug.cgi?id=230422

        Reviewed by Alex Christensen.

        * bindings/js/JSCSSStyleValueCustom.cpp:
        (WebCore::toJSNewlyCreated):
        * css/typedom/CSSKeywordValue.h:
        (isType):

2021-09-17  Johnson Zhou  <qiaosong_zhou@apple.com>

        Addition of CSSTransformValue, CSSTransformComponent & subclasses
        https://bugs.webkit.org/show_bug.cgi?id=230284

        Reviewed by Alex Christensen.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:
        * css/DOMMatrix.idl:
        * css/DOMMatrixReadOnly.h:
        * css/typedom/transform/CSSMatrixComponent.cpp: Added.
        (WebCore::CSSMatrixComponent::create):
        (WebCore::CSSMatrixComponent::CSSMatrixComponent):
        (WebCore::CSSMatrixComponent::toString const):
        (WebCore::CSSMatrixComponent::toMatrix):
        * css/typedom/transform/CSSMatrixComponent.h: Added.
        (WebCore::CSSMatrixComponent::create):
        (WebCore::CSSMatrixComponent::matrix):
        (WebCore::CSSMatrixComponent::setMatrix):
        * css/typedom/transform/CSSMatrixComponent.idl: Added.
        * css/typedom/transform/CSSMatrixComponentOptions.h: Added.
        * css/typedom/transform/CSSMatrixComponentOptions.idl: Added.
        * css/typedom/transform/CSSPerspective.cpp: Added.
        (WebCore::CSSPerspective::create):
        (WebCore::CSSPerspective::CSSPerspective):
        (WebCore::CSSPerspective::toString const):
        (WebCore::CSSPerspective::toMatrix):
        * css/typedom/transform/CSSPerspective.h: Added.
        (WebCore::CSSPerspective::length):
        (WebCore::CSSPerspective::setLength):
        * css/typedom/transform/CSSPerspective.idl: Added.
        * css/typedom/transform/CSSRotate.cpp: Added.
        (WebCore::CSSRotate::create):
        (WebCore::CSSRotate::CSSRotate):
        (WebCore::CSSRotate::toString const):
        (WebCore::CSSRotate::toMatrix):
        * css/typedom/transform/CSSRotate.h: Added.
        (WebCore::CSSRotate::x):
        (WebCore::CSSRotate::y):
        (WebCore::CSSRotate::z):
        (WebCore::CSSRotate::angle):
        (WebCore::CSSRotate::setX):
        (WebCore::CSSRotate::setY):
        (WebCore::CSSRotate::setZ):
        (WebCore::CSSRotate::setAngle):
        * css/typedom/transform/CSSRotate.idl: Added.
        * css/typedom/transform/CSSScale.cpp: Added.
        (WebCore::CSSScale::create):
        (WebCore::CSSScale::CSSScale):
        (WebCore::CSSScale::toString const):
        (WebCore::CSSScale::toMatrix):
        * css/typedom/transform/CSSScale.h: Added.
        (WebCore::CSSScale::x):
        (WebCore::CSSScale::y):
        (WebCore::CSSScale::z):
        (WebCore::CSSScale::setX):
        (WebCore::CSSScale::setY):
        (WebCore::CSSScale::setZ):
        * css/typedom/transform/CSSScale.idl: Added.
        * css/typedom/transform/CSSSkew.cpp: Added.
        (WebCore::CSSSkew::create):
        (WebCore::CSSSkew::CSSSkew):
        (WebCore::CSSSkew::toString const):
        (WebCore::CSSSkew::toMatrix):
        * css/typedom/transform/CSSSkew.h: Added.
        (WebCore::CSSSkew::ax):
        (WebCore::CSSSkew::ay):
        (WebCore::CSSSkew::setAx):
        (WebCore::CSSSkew::setAy):
        * css/typedom/transform/CSSSkew.idl: Added.
        * css/typedom/transform/CSSSkewX.cpp: Added.
        (WebCore::CSSSkewX::create):
        (WebCore::CSSSkewX::CSSSkewX):
        (WebCore::CSSSkewX::toString const):
        (WebCore::CSSSkewX::toMatrix):
        * css/typedom/transform/CSSSkewX.h: Added.
        (WebCore::CSSSkewX::ax):
        (WebCore::CSSSkewX::setAx):
        * css/typedom/transform/CSSSkewX.idl: Added.
        * css/typedom/transform/CSSSkewY.cpp: Added.
        (WebCore::CSSSkewY::create):
        (WebCore::CSSSkewY::CSSSkewY):
        (WebCore::CSSSkewY::toString const):
        (WebCore::CSSSkewY::toMatrix):
        * css/typedom/transform/CSSSkewY.h: Added.
        (WebCore::CSSSkewY::ay):
        (WebCore::CSSSkewY::setAy):
        * css/typedom/transform/CSSSkewY.idl: Added.
        * css/typedom/transform/CSSTransformComponent.cpp: Added.
        (WebCore::CSSTransformComponent::toString const):
        (WebCore::CSSTransformComponent::toMatrix):
        * css/typedom/transform/CSSTransformComponent.h: Added.
        (WebCore::CSSTransformComponent::is2D const):
        (WebCore::CSSTransformComponent::setIs2D):
        * css/typedom/transform/CSSTransformComponent.idl: Added.
        * css/typedom/transform/CSSTransformValue.cpp: Added.
        (WebCore::CSSTransformValue::create):
        (WebCore::CSSTransformValue::item):
        (WebCore::CSSTransformValue::setItem):
        (WebCore::CSSTransformValue::is2D const):
        (WebCore::CSSTransformValue::setIs2D):
        (WebCore::CSSTransformValue::toMatrix):
        (WebCore::CSSTransformValue::CSSTransformValue):
        * css/typedom/transform/CSSTransformValue.h: Added.
        (WebCore::CSSTransformValue::length const):
        (isType):
        * css/typedom/transform/CSSTransformValue.idl: Added.
        * css/typedom/transform/CSSTranslate.cpp: Added.
        (WebCore::CSSTranslate::create):
        (WebCore::CSSTranslate::CSSTranslate):
        (WebCore::CSSTranslate::toString const):
        (WebCore::CSSTranslate::toMatrix):
        * css/typedom/transform/CSSTranslate.h: Added.
        (WebCore::CSSTranslate::x):
        (WebCore::CSSTranslate::y):
        (WebCore::CSSTranslate::z):
        (WebCore::CSSTranslate::setX):
        (WebCore::CSSTranslate::setY):
        (WebCore::CSSTranslate::setZ):
        * css/typedom/transform/CSSTranslate.idl: Added.

2021-09-17  Simon Fraser  <simon.fraser@apple.com>

        Make ScrollAnimation a little more generic
        https://bugs.webkit.org/show_bug.cgi?id=230385

        Reviewed by Tim Horton.

        Prepare for new ScrollAnimation subclasses by making it a little more generic. Rather
        than the function callbacks, use a virtual client class, implemented by ScrollAnimator
        and ScrollingTreeScrollingNodeDelegateNicosia. Remove the generic 'scroll' methods
        from the base class, since they only apply to ScrollAnimationSmooth (clients need
        to keep derived class pointers, and most already do).
        
        Remove ambiguity around the currentPosition by requiring it for every 'start' call.
        Remove ambiguity around setCurrentPosition() by removing it. Clients just call stop().
        Remove ambiguity around retargeting by making it explicit.
        
        Do per-axis setup when starting animations, not when creating one, so the animation starts
        out stateless.

        * Sources.txt: Build platform/ScrollAnimationKinetic.cpp for macOS, mostly to catch
        build errors (it's currently unused).
        * WebCore.xcodeproj/project.pbxproj:
        * page/scrolling/nicosia/ScrollingTreeScrollingNodeDelegateNicosia.cpp:
        (WebCore::ScrollingTreeScrollingNodeDelegateNicosia::resetCurrentPosition):
        (WebCore::ScrollingTreeScrollingNodeDelegateNicosia::ensureScrollAnimationKinetic):
        (WebCore::ScrollingTreeScrollingNodeDelegateNicosia::ensureScrollAnimationSmooth):
        (WebCore::ScrollingTreeScrollingNodeDelegateNicosia::handleWheelEvent):
        (WebCore::ScrollingTreeScrollingNodeDelegateNicosia::scrollAnimationDidUpdate):
        (WebCore::ScrollingTreeScrollingNodeDelegateNicosia::scrollAnimationDidEnd):
        (WebCore::ScrollingTreeScrollingNodeDelegateNicosia::scrollExtentsForAnimation):
        * page/scrolling/nicosia/ScrollingTreeScrollingNodeDelegateNicosia.h:
        * platform/ScrollAnimation.h:
        (WebCore::ScrollAnimation::ScrollAnimation):
        (WebCore::ScrollAnimation::updateScrollExtents):
        (WebCore::ScrollAnimation::serviceAnimation):
        (WebCore::ScrollAnimation::~ScrollAnimation): Deleted.
        (WebCore::ScrollAnimation::scroll): Deleted.
        (WebCore::ScrollAnimation::updateVisibleLengths): Deleted.
        (WebCore::ScrollAnimation::setCurrentPosition): Deleted.
        * platform/ScrollAnimationKinetic.cpp:
        (WebCore::ScrollAnimationKinetic::ScrollAnimationKinetic):
        (WebCore::ScrollAnimationKinetic::startAnimatedScrollWithInitialVelocity):
        (WebCore::ScrollAnimationKinetic::animationTimerFired):
        (WebCore::ScrollAnimationKinetic::start): Deleted.
        * platform/ScrollAnimationKinetic.h:
        * platform/ScrollAnimationSmooth.cpp:
        (WebCore::ScrollAnimationSmooth::ScrollAnimationSmooth):
        (WebCore::ScrollAnimationSmooth::startAnimatedScroll):
        (WebCore::ScrollAnimationSmooth::startAnimatedScrollToDestination):
        (WebCore::ScrollAnimationSmooth::stop):
        (WebCore::ScrollAnimationSmooth::updateScrollExtents):
        (WebCore::ScrollAnimationSmooth::initializeAxesData):
        (WebCore::ScrollAnimationSmooth::animationTimerFired):
        (WebCore::ScrollAnimationSmooth::PerAxisData::PerAxisData): Deleted.
        (WebCore::ScrollAnimationSmooth::scroll): Deleted.
        (WebCore::ScrollAnimationSmooth::updateVisibleLengths): Deleted.
        (WebCore::ScrollAnimationSmooth::setCurrentPosition): Deleted.
        * platform/ScrollAnimationSmooth.h: Rename some "time" variables to "duration" for clarity
        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::ScrollAnimator):
        (WebCore::ScrollAnimator::scroll):
        (WebCore::ScrollAnimator::scrollToPositionWithoutAnimation):
        (WebCore::ScrollAnimator::scrollToPositionWithAnimation):
        (WebCore::ScrollAnimator::retargetRunningAnimation):
        (WebCore::ScrollAnimator::contentsResized const):
        (WebCore::ScrollAnimator::willEndLiveResize):
        (WebCore::ScrollAnimator::didAddVerticalScrollbar):
        (WebCore::ScrollAnimator::didAddHorizontalScrollbar):
        (WebCore::ScrollAnimator::scrollAnimationDidUpdate):
        (WebCore::ScrollAnimator::scrollAnimationDidEnd):
        (WebCore::ScrollAnimator::scrollExtentsForAnimation):
        (): Deleted.
        (WebCore::m_keyboardScrollingAnimator): Deleted.
        * platform/ScrollAnimator.h:
        * platform/generic/ScrollAnimatorGeneric.cpp:
        (WebCore::ScrollAnimatorGeneric::ScrollAnimatorGeneric):
        (WebCore::ScrollAnimatorGeneric::handleWheelEvent):
        (WebCore::ScrollAnimatorGeneric::updatePosition):
        (WebCore::ScrollAnimatorGeneric::scrollAnimationDidUpdate):
        * platform/generic/ScrollAnimatorGeneric.h:

2021-09-17  Cameron McCormack  <heycam@apple.com>

        Preserve color space when creating ImageBuffers for ImageBitmaps
        https://bugs.webkit.org/show_bug.cgi?id=229022
        <rdar://problem/81828459>

        Reviewed by Sam Weinig.

        ImageBitmaps can be created with various sources of image data.
        Currently, they always create an sRGB ImageBuffer to copy the
        image data into. This patch tries to preserve the color space
        of the source image data. Because ImageBuffer only works with 8 bit
        RGBA data, other color space models (such as CMYK) get converted
        to Display P3 if available, or sRGB otherwise. The rationale for
        this is that ImageBitmaps are designed to be drawn into canvases,
        and we currently only support sRGB and Display P3 for canvas backing
        stores.

        It's not ideal that we do the color space conversion, since it would
        be better to delay the conversion until it's needed when drawing onto
        the canvas. It's also not ideal that we can't preserve the pixel
        format of the image data, which might be 16 bit color or floats. We
        could support these only if ImageBuffer were extended to support them.
        A different design for ImageBitmap where it can hold on to the image
        data source directly (and support for structured cloning and worker
        thread transferrance added) could also work. For now, we don't worry,
        and accept the loss of color fidelity when downsampling or converting
        from non-RGB color space models.

        Support for structured cloning of ImageBitmaps with non-sRGB data
        isn't added, but a test for this is. (This will need a way to
        serialize the DestinationColorSpace.)

        Tests: imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-Blob.html
               imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-ImageBitmap.html
               imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-ImageData.html
               imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-canvas.html
               imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-cloned.html
               imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-image.html

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::dumpImageBitmap):
        (WebCore::CloneDeserializer::readImageBitmap):
        * html/ImageBitmap.cpp:
        (WebCore::ImageBitmap::create):
        (WebCore::ImageBitmap::createImageBuffer):
        (WebCore::ImageBitmap::resolveWithBlankImageBuffer):
        (WebCore::ImageBitmap::createPromise):
        (WebCore::ImageBitmap::createFromBuffer):
        * html/ImageBitmap.h:
        * html/OffscreenCanvas.cpp:
        (WebCore::OffscreenCanvas::transferToImageBitmap):
        (WebCore::OffscreenCanvas::createImageBuffer const):
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::colorSpace):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/DestinationColorSpace.cpp:
        (WebCore::DestinationColorSpace::asRGB const): New function that
        abstracts out the behavior "tell me whether the color space is
        appropriate for use with an 8 bit RGB buffer", which is common
        to ImageBitmap and ShareableBitmapCG.
        * platform/graphics/DestinationColorSpace.h:
        * platform/graphics/Image.cpp:
        (WebCore::Image::colorSpace):
        * platform/graphics/Image.h:

2021-09-17  Simon Fraser  <simon.fraser@apple.com>

        Convert usesMockScrollAnimator from a DeprecatedGlobalSettings to a WebPreference
        https://bugs.webkit.org/show_bug.cgi?id=230371

        Reviewed by Tim Horton.

        There were ordering problems that resulted from timing of a test calling
        internals.setUsesMockScrollAnimator(true) and the first access of the scrollAnimator(),
        which resulted in fast/scrolling/scroll-animator-select-list-events.html failing
        when run twice in a row.

        Fix by making usesMockScrollAnimator a WebPreference, which means that tests
        can use <!-- webkit-test-runner --> options to enable it, which avoids the
        ordering dependency.

        * page/DeprecatedGlobalSettings.cpp:
        (WebCore::DeprecatedGlobalSettings::setUsesMockScrollAnimator): Deleted.
        (WebCore::DeprecatedGlobalSettings::usesMockScrollAnimator): Deleted.
        * page/DeprecatedGlobalSettings.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::mockScrollAnimatorEnabled const):
        (WebCore::FrameView::usesMockScrollAnimator const): Deleted.
        * page/FrameView.h:
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::scrollAnimator const):
        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::mockScrollAnimatorEnabled const):
        (WebCore::ScrollableArea::usesMockScrollAnimator const): Deleted.
        * rendering/RenderLayerScrollableArea.cpp:
        (WebCore::RenderLayerScrollableArea::mockScrollAnimatorEnabled const):
        (WebCore::RenderLayerScrollableArea::usesMockScrollAnimator const): Deleted.
        * rendering/RenderLayerScrollableArea.h:
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::mockScrollAnimatorEnabled const):
        (WebCore::RenderListBox::usesMockScrollAnimator const): Deleted.
        * rendering/RenderListBox.h:
        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState):
        (WebCore::Internals::setUsesMockScrollAnimator): Deleted.
        * testing/Internals.h:
        * testing/Internals.idl:

2021-09-17  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add InlineInvalidation::horizontalConstraintChanged
        https://bugs.webkit.org/show_bug.cgi?id=230290

        Reviewed by Antti Koivisto.

        Add the "resize" invalidation codepath. It notifies formatting context about the available horizontal space change.

        * layout/formattingContexts/inline/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::invalidateFormattingState):
        * layout/formattingContexts/inline/invalidation/InlineInvalidation.cpp:
        (WebCore::Layout::InlineInvalidation::horizontalConstraintChanged):
        * layout/formattingContexts/inline/invalidation/InlineInvalidation.h:
        * layout/integration/LayoutIntegrationLineLayout.cpp:
        (WebCore::LayoutIntegration::LineLayout::layout):
        (WebCore::LayoutIntegration::LineLayout::updateFormattingRootGeometry):
        (WebCore::LayoutIntegration::LineLayout::prepareLayoutState):
        * layout/integration/LayoutIntegrationLineLayout.h:

2021-09-17  Philippe Normand  <pnormand@igalia.com>

        REGRESSION(r282220): [GCC] Several flaky crashes on media/track/cue tests
        https://bugs.webkit.org/show_bug.cgi?id=230318

        Reviewed by Xabier Rodriguez-Calvar.

        The crashes were happening because the text track(s) managed by the media element still had
        their client set to the media element being destroyed, so the TextTrack destructor was
        looping back to its client, the media element being destroyed. This is particularly an issue
        in GCC/Release builds, most likely undefined behavior. The proposed solution is to
        explicitely break the link between the media element and the tracks it manages when
        destroying the media element. This matches existing code as well in the same destructor
        (CDMClient, audio session).

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::~HTMLMediaElement):

2021-09-17  Sam Weinig  <weinig@apple.com>

        Add MIME type and URL to WebCore::Model to allow processing different model types
        https://bugs.webkit.org/show_bug.cgi?id=230384

        Reviewed by Darin Adler.

        Adds MIME type and URL to WebCore::Model to allow processing different model types.
        This change does not take advantave of them (and we still only support one type)
        but this will allow us to add additional types going forward.

        * Modules/model-element/HTMLModelElement.cpp:
        (WebCore::HTMLModelElement::notifyFinished):
        * platform/graphics/Model.cpp:
        (WebCore::Model::create):
        (WebCore::Model::Model):
        (WebCore::operator<<):
        * platform/graphics/Model.h:
        (WebCore::Model::encode const):
        (WebCore::Model::decode):

2021-09-17  Alan Bujtas  <zalan@apple.com>

        [LFC][Integration] Start using InlineInvalidation to clean runs and lines
        https://bugs.webkit.org/show_bug.cgi?id=229294
        <rdar://problem/82395169>

        Reviewed by Antti Koivisto.

        This patch is in preparation for supporting partial line layout.
        No change in functionality yet.

        * layout/formattingContexts/inline/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::InlineFormattingContext):
        (WebCore::Layout::InlineFormattingContext::invalidateFormattingState):
        * layout/formattingContexts/inline/InlineFormattingContext.h:
        * layout/formattingContexts/inline/InlineFormattingState.h:
        (WebCore::Layout::InlineFormattingState::clearInlineItems):
        * layout/integration/LayoutIntegrationLineLayout.cpp:
        (WebCore::LayoutIntegration::LineLayout::updateStyle):
        (WebCore::LayoutIntegration::LineLayout::layout):
        (WebCore::LayoutIntegration::LineLayout::prepareLayoutState):
        (WebCore::LayoutIntegration::LineLayout::ensureLineDamage):
        * layout/integration/LayoutIntegrationLineLayout.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::styleDidChange): The initial styleDidChange (when oldStyle is nullptr) does not go through the integration codepath.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::styleDidChange):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::styleDidChange):

2021-09-17  Antti Koivisto  <antti@apple.com>

        [LFC][Integration] Add some useful functions to iterators
        https://bugs.webkit.org/show_bug.cgi?id=230398

        Reviewed by Alan Bujtas.

        For future use.

        * layout/integration/LayoutIntegrationLineIterator.cpp:
        (WebCore::LayoutIntegration::LineIterator::closestRunForLogicalLeftPosition):
        (WebCore::LayoutIntegration::PathLine::selectionTopAdjustedForPrecedingBlock const):
        (WebCore::LayoutIntegration::PathLine::selectionHeightAdjustedForPrecedingBlock const):
        (WebCore::LayoutIntegration::PathLine::firstSelectedBox const):
        (WebCore::LayoutIntegration::PathLine::lastSelectedBox const):
        * layout/integration/LayoutIntegrationLineIterator.h:
        (WebCore::LayoutIntegration::PathLine::contentLogicalWidth const):
        * layout/integration/LayoutIntegrationLineIteratorModernPath.h:
        * layout/integration/LayoutIntegrationRunIterator.h:
        (WebCore::LayoutIntegration::PathTextRun::legacyInlineBox const):
        (WebCore::LayoutIntegration::PathRun::legacyInlineBox const):
        (WebCore::LayoutIntegration::PathRun::inlineBox const):
        (WebCore::LayoutIntegration::PathTextRun::createTextRun const):
        * layout/integration/LayoutIntegrationRunIteratorLegacyPath.h:
        (WebCore::LayoutIntegration::RunIteratorLegacyPath::createTextRun const):
        * layout/integration/LayoutIntegrationRunIteratorModernPath.h:
        (WebCore::LayoutIntegration::RunIteratorModernPath::createTextRun const):
        (WebCore::LayoutIntegration::RunIteratorModernPath::run const):
        (WebCore::LayoutIntegration::RunIteratorModernPath::runs const):
        (WebCore::LayoutIntegration::RunIteratorModernPath::legacyInlineBox const): Deleted.
        * rendering/LegacyInlineTextBox.h:

2021-09-17  Antti Koivisto  <antti@apple.com>

        [LFC][Integration] Move non-traversal functions from iterator to the dereferenced type
        https://bugs.webkit.org/show_bug.cgi?id=230396

        Reviewed by Alan Bujtas.

        Improve the logic of the iterator interface so the code does not end up as a mixture of . and -> access.
        This also makes the dereferenced box/line type  more useful in itself.

        For example to get a new iterator pointing to the next line:

            auto nextLine = line->next();

        but to mutate the iterator so it points to the next line:

            line.traverseNext();

        * dom/Position.cpp:
        (WebCore::Position::upstream const):
        (WebCore::Position::downstream const):
        (WebCore::Position::rendersInDifferentPosition const):
        (WebCore::Position::inlineRunAndOffset const):
        * editing/RenderedPosition.cpp:
        (WebCore::RenderedPosition::previousLeafOnLine const):
        (WebCore::RenderedPosition::nextLeafOnLine const):
        (WebCore::RenderedPosition::leftBoundaryOfBidiRun):
        (WebCore::RenderedPosition::rightBoundaryOfBidiRun):
        * editing/RenderedPosition.h:
        (WebCore::RenderedPosition::line const):
        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::leftVisuallyDistinctCandidate const):
        (WebCore::VisiblePosition::rightVisuallyDistinctCandidate const):
        (WebCore::VisiblePosition::absoluteSelectionBoundsForLine const):
        * editing/VisibleUnits.cpp:
        (WebCore::startTextOrLineBreakRun):
        (WebCore::endTextOrLineBreakRun):
        (WebCore::logicallyPreviousRun):
        (WebCore::logicallyNextRun):
        (WebCore::startPositionForLine):
        (WebCore::endPositionForLine):
        (WebCore::previousLinePosition):
        (WebCore::nextLinePosition):
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::valueWithHardLineBreaks const):
        * layout/integration/LayoutIntegrationLineIterator.cpp:
        (WebCore::LayoutIntegration::LineIterator::LineIterator):
        (WebCore::LayoutIntegration::firstLineFor):
        (WebCore::LayoutIntegration::lastLineFor):
        (WebCore::LayoutIntegration::PathLine::next const):
        (WebCore::LayoutIntegration::PathLine::previous const):
        (WebCore::LayoutIntegration::PathLine::firstRun const):
        (WebCore::LayoutIntegration::PathLine::lastRun const):
        (WebCore::LayoutIntegration::PathLine::logicalStartRun const):
        (WebCore::LayoutIntegration::PathLine::logicalEndRun const):
        (WebCore::LayoutIntegration::PathLine::logicalStartRunWithNode const):
        (WebCore::LayoutIntegration::PathLine::logicalEndRunWithNode const):
        (WebCore::LayoutIntegration::PathLine::closestRunForPoint const):
        (WebCore::LayoutIntegration::PathLine::closestRunForLogicalLeftPosition const):
        (WebCore::LayoutIntegration::LineIterator::next const): Deleted.
        (WebCore::LayoutIntegration::LineIterator::previous const): Deleted.
        (WebCore::LayoutIntegration::LineIterator::firstRun const): Deleted.
        (WebCore::LayoutIntegration::LineIterator::lastRun const): Deleted.
        (WebCore::LayoutIntegration::LineIterator::logicalStartRun const): Deleted.
        (WebCore::LayoutIntegration::LineIterator::logicalEndRun const): Deleted.
        (WebCore::LayoutIntegration::LineIterator::logicalStartRunWithNode const): Deleted.
        (WebCore::LayoutIntegration::LineIterator::logicalEndRunWithNode const): Deleted.
        (WebCore::LayoutIntegration::LineIterator::closestRunForPoint): Deleted.
        (WebCore::LayoutIntegration::LineIterator::closestRunForLogicalLeftPosition): Deleted.
        * layout/integration/LayoutIntegrationLineIterator.h:
        (WebCore::LayoutIntegration::PathLine::isFirst const):
        (WebCore::LayoutIntegration::LineIterator::isFirst const): Deleted.
        * layout/integration/LayoutIntegrationRunIterator.cpp:
        (WebCore::LayoutIntegration::RunIterator::RunIterator):
        (WebCore::LayoutIntegration::PathRun::nextOnLine const):
        (WebCore::LayoutIntegration::PathRun::previousOnLine const):
        (WebCore::LayoutIntegration::PathRun::nextOnLineIgnoringLineBreak const):
        (WebCore::LayoutIntegration::PathRun::previousOnLineIgnoringLineBreak const):
        (WebCore::LayoutIntegration::PathRun::style const):
        (WebCore::LayoutIntegration::PathTextRun::nextTextRun const):
        (WebCore::LayoutIntegration::PathTextRun::nextTextRunInTextOrder const):
        (WebCore::LayoutIntegration::TextRunIterator::TextRunIterator):
        (WebCore::LayoutIntegration::RunIterator::nextOnLine const): Deleted.
        (WebCore::LayoutIntegration::RunIterator::previousOnLine const): Deleted.
        (WebCore::LayoutIntegration::RunIterator::nextOnLineIgnoringLineBreak const): Deleted.
        (WebCore::LayoutIntegration::RunIterator::previousOnLineIgnoringLineBreak const): Deleted.
        (WebCore::LayoutIntegration::RunIterator::line const): Deleted.
        * layout/integration/LayoutIntegrationRunIterator.h:
        (WebCore::LayoutIntegration::TextRunIterator::nextTextRun const): Deleted.
        (WebCore::LayoutIntegration::TextRunIterator::nextTextRunInTextOrder const): Deleted.
        * rendering/CaretRectComputation.cpp:
        (WebCore::computeCaretRectForText):
        (WebCore::computeCaretRectForLineBreak):
        (WebCore::computeCaretRectForBox):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::findClosestTextAtAbsolutePoint):
        (WebCore::RenderBlockFlow::positionForPointWithInlineChildren):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::getLeadingCorner const):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::collectSelectionGeometries):
        * rendering/RenderLineBreak.cpp:
        (WebCore::RenderLineBreak::collectSelectionGeometries):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::positionForPoint):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::collectSelectionGeometries):
        (WebCore::lineDirectionPointFitsInBox):
        (WebCore::createVisiblePositionAfterAdjustingOffsetForBiDi):
        (WebCore::RenderText::positionForPoint):
        * style/InlineTextBoxStyle.cpp:
        (WebCore::minLogicalTopForTextDecorationLine):
        (WebCore::maxLogicalBottomForTextDecorationLine):
        (WebCore::computeUnderlineOffset):

2021-09-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][a11y] Add a build option to enable ATSPI
        https://bugs.webkit.org/show_bug.cgi?id=230254

        Reviewed by Adrian Perez de Castro.

        Add stubs for ATSPI implementation.

        * PlatformGTK.cmake:
        * SourcesGTK.txt:
        * accessibility/AccessibilityObjectInterface.h:
        * accessibility/atk/AXObjectCacheAtk.cpp:
        * accessibility/atk/AccessibilityObjectAtk.cpp:
        * accessibility/atk/WebKitAccessible.cpp:
        * accessibility/atk/WebKitAccessible.h:
        * accessibility/atk/WebKitAccessibleHyperlink.cpp:
        * accessibility/atk/WebKitAccessibleHyperlink.h:
        * accessibility/atk/WebKitAccessibleInterfaceAction.cpp:
        * accessibility/atk/WebKitAccessibleInterfaceAction.h:
        * accessibility/atk/WebKitAccessibleInterfaceComponent.cpp:
        * accessibility/atk/WebKitAccessibleInterfaceComponent.h:
        * accessibility/atk/WebKitAccessibleInterfaceDocument.cpp:
        * accessibility/atk/WebKitAccessibleInterfaceDocument.h:
        * accessibility/atk/WebKitAccessibleInterfaceEditableText.cpp:
        * accessibility/atk/WebKitAccessibleInterfaceEditableText.h:
        * accessibility/atk/WebKitAccessibleInterfaceHyperlinkImpl.cpp:
        * accessibility/atk/WebKitAccessibleInterfaceHyperlinkImpl.h:
        * accessibility/atk/WebKitAccessibleInterfaceHypertext.cpp:
        * accessibility/atk/WebKitAccessibleInterfaceHypertext.h:
        * accessibility/atk/WebKitAccessibleInterfaceImage.cpp:
        * accessibility/atk/WebKitAccessibleInterfaceImage.h:
        * accessibility/atk/WebKitAccessibleInterfaceSelection.cpp:
        * accessibility/atk/WebKitAccessibleInterfaceSelection.h:
        * accessibility/atk/WebKitAccessibleInterfaceTable.cpp:
        * accessibility/atk/WebKitAccessibleInterfaceTable.h:
        * accessibility/atk/WebKitAccessibleInterfaceTableCell.cpp:
        * accessibility/atk/WebKitAccessibleInterfaceTableCell.h:
        * accessibility/atk/WebKitAccessibleInterfaceText.cpp:
        * accessibility/atk/WebKitAccessibleInterfaceText.h:
        * accessibility/atk/WebKitAccessibleInterfaceValue.cpp:
        * accessibility/atk/WebKitAccessibleInterfaceValue.h:
        * accessibility/atk/WebKitAccessibleUtil.cpp:
        * accessibility/atk/WebKitAccessibleUtil.h:
        * accessibility/atspi/AXObjectCacheAtspi.cpp: Added.
        (WebCore::AXObjectCache::detachWrapper):
        (WebCore::AXObjectCache::attachWrapper):
        (WebCore::AXObjectCache::platformPerformDeferredCacheUpdate):
        (WebCore::AXObjectCache::postPlatformNotification):
        (WebCore::AXObjectCache::nodeTextChangePlatformNotification):
        (WebCore::AXObjectCache::frameLoadingEventPlatformNotification):
        (WebCore::AXObjectCache::platformHandleFocusedUIElementChanged):
        (WebCore::AXObjectCache::handleScrolledToAnchor):
        * accessibility/atspi/AccessibilityObjectAtspi.cpp: Added.
        (WebCore::AccessibilityObjectAtspi::create):
        (WebCore::AccessibilityObjectAtspi::AccessibilityObjectAtspi):
        (WebCore::AccessibilityObject::detachPlatformWrapper):
        (WebCore::AccessibilityObject::accessibilityIgnoreAttachment const):
        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject const):
        * accessibility/atspi/AccessibilityObjectAtspi.h: Added.
        * accessibility/isolatedtree/AXIsolatedObject.cpp:
        (WebCore::AXIsolatedObject::children):
        * accessibility/isolatedtree/AXIsolatedTree.h:
        * accessibility/isolatedtree/atspi/AXIsolatedObjectAtspi.cpp: Added.
        (WebCore::AXIsolatedObject::initializePlatformProperties):
        (WebCore::AXIsolatedObject::attachPlatformWrapper):
        (WebCore::AXIsolatedObject::detachPlatformWrapper):
        * editing/FrameSelection.h:
        * editing/atk/FrameSelectionAtk.cpp:
        * editing/atspi/FrameSelectionAtspi.cpp: Added.
        (WebCore::FrameSelection::notifyAccessibilityForSelectionChange):
        * page/Settings.yaml:

2021-09-17  Youenn Fablet  <youenn@apple.com>

        Make sure to use event queue when settling RTCPeerConnection.addIceCandidate promise
        https://bugs.webkit.org/show_bug.cgi?id=230346

        Reviewed by Eric Carlson.

        Before the patch, we were resolving the promise in a callOnMainThread lambda.
        We now do like for other methods: hop to main thread, then queue a task in event loop to resolve the promise.
        Covered by existing tests.

        * Modules/mediastream/PeerConnectionBackend.cpp:
        (WebCore::PeerConnectionBackend::addIceCandidate):
        * Modules/mediastream/PeerConnectionBackend.h:
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::addIceCandidate):

2021-09-17  Youenn Fablet  <youenn@apple.com>

        Compute RTCPeerConnection.connectionState as per https://w3c.github.io/webrtc-pc/#rtcpeerconnectionstate-enum
        https://bugs.webkit.org/show_bug.cgi?id=230341

        Reviewed by Eric Carlson.

        We should compute connection states according ICE and DTLS transport state, as per spec.
        Given we compute the state from ICE and DTLS states, we now make sure to update connection state whenever DTLS state changes.
        Make also sure to not fire events in case peer connection is closed, as per spec.

        Covered by existing and rebased tests.

        * Modules/mediastream/RTCDtlsTransport.cpp:
        (WebCore::RTCDtlsTransport::onStateChanged):
        * Modules/mediastream/RTCIceTransport.h:
        (WebCore::RTCIceTransport::connection const):
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::close):
        (WebCore::RTCPeerConnection::computeConnectionState):
        (WebCore::RTCPeerConnection::processIceTransportStateChange):
        * Modules/mediastream/RTCPeerConnection.h:

2021-09-16  Cameron McCormack  <heycam@apple.com>

        Preserve canvas color space when producing JPEGs from toDataURL/toBlob
        https://bugs.webkit.org/show_bug.cgi?id=230209
        <rdar://82948457>

        Reviewed by Sam Weinig.

        Test: imported/w3c/web-platform-tests/html/canvas/element/wide-gamut-canvas/2d.color.space.p3.toDataURL.jpeg.p3.canvas.html

        * platform/graphics/cg/ImageBufferCGBackend.cpp:
        (WebCore::colorSpaceForBitmap): Return an appropriate color space for
        performing any graphics operations on ImageBuffers (such as scaling or
        cropping, or compositing on top of solid colors) becore encoding.
        (WebCore::createBitmapImageAfterScalingIfNeeded):
        (WebCore::ImageBufferCGBackend::copyCGImageForEncoding const):

2021-09-16  Diego Pino Garcia  <dpino@igalia.com>

        Unreviewed build fix for Ubuntu LTS/Debian after r282597

        * layout/integration/LayoutIntegrationRunIterator.cpp:

2021-09-16  Simon Fraser  <simon.fraser@apple.com>

        Fix some issues with the code paths that call into ScrollAnimator::contentAreaWillPaint()
        https://bugs.webkit.org/show_bug.cgi?id=230372

        Reviewed by Tim Horton.

        ScrollAnimator::contentAreaWillPaint() is a hook used to flash overlay scrollbars in some
        situations (e.g. a view becomes newly visible). AppKit wants `[m_scrollerImpPair contentAreaWillDraw]`
        to be called at the equivalent of "viewWillDraw" time, which in WebCore terminology is
        the end of the Page rendering update stage.

        However, existing WebKitLegacy-only code called notifyPageThatContentAreaWillPaint()
        from repaint code paths, including updateControlTints(), which was wrong, and caused
        ordering issues in tests between the calls to setUsesMockScrollAnimator(true) and
        accessing the scroll animator (see also webkit.org/b/230371).

        Fix by calling FrameView::notifyAllFramesThatContentAreaWillPaint() near the end
        of Page::doAfterUpdateRendering(), and having it do a correct Frame tree traversal.

        * page/FrameView.cpp:
        (WebCore::FrameView::notifyAllFramesThatContentAreaWillPaint const):
        (WebCore::FrameView::notifyScrollableAreasThatContentAreaWillPaint const):
        (WebCore::FrameView::notifyPageThatContentAreaWillPaint const): Deleted.
        * page/FrameView.h:
        * page/Page.cpp:
        (WebCore::Page::doAfterUpdateRendering):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::repaintContentRectangle):
        (WebCore::ScrollView::paint):
        (WebCore::ScrollView::notifyPageThatContentAreaWillPaint const): Deleted.
        * platform/ScrollView.h:
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::contentAreaWillPaint const):
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::contentAreaWillPaint const):

2021-09-16  Philip Chimento  <pchimento@igalia.com>

        Fixes for build-webkit --minimal
        https://bugs.webkit.org/show_bug.cgi?id=229780

        Reviewed by Fujii Hironori.

        Covered by existing tests.

        Remove ENABLE_RESIZE_OBSERVER build-time option. This option is quite
        broken if you try to disable it.

        * dom/Document.cpp:
        * dom/Document.h:
        * dom/Element.cpp:
        (WebCore::Element::~Element):
        * dom/Element.h:
        * dom/ElementRareData.cpp:
        * dom/ElementRareData.h:
        (WebCore::ElementRareData::setResizeObserverData):
        (WebCore::ElementRareData::useTypes const):
        * page/Page.cpp:
        (WebCore::Page::updateRendering):
        (WebCore::operator<<):
        * page/Page.h:
        * page/ResizeObservation.cpp:
        * page/ResizeObservation.h:
        * page/ResizeObserver.cpp:
        * page/ResizeObserver.h:
        * page/ResizeObserver.idl:
        * page/ResizeObserverCallback.h:
        * page/ResizeObserverCallback.idl:
        * page/ResizeObserverEntry.h:
        * page/ResizeObserverEntry.idl:
        * testing/Internals.cpp:
        (WebCore::Internals::numberOfResizeObservers const):
        * testing/Internals.h:
        * testing/Internals.idl:

2021-09-16  Cameron McCormack  <heycam@apple.com>

        Support drawImage with a wide gamut image painting into a display-p3 canvas
        https://bugs.webkit.org/show_bug.cgi?id=229021
        <rdar://problem/81828450>

        Reviewed by Sam Weinig.

        Expose the color space of a NativeImage.

        Tests: imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage.html
               imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-settings.html

        * platform/graphics/NativeImage.h:
        * platform/graphics/cairo/NativeImageCairo.cpp:
        (WebCore::NativeImage::colorSpace const):
        * platform/graphics/cg/NativeImageCG.cpp:
        (WebCore::NativeImage::colorSpace const):
        * platform/graphics/win/NativeImageDirect2D.cpp:
        (WebCore::NativeImage::colorSpace const):

2021-09-16  Wenson Hsieh  <wenson_hsieh@apple.com>

        Throttle a couple of editing-related timers in cases where the user has not interacted with subframes
        https://bugs.webkit.org/show_bug.cgi?id=230326

        Reviewed by Tim Horton.

        This patch (1) delays the firing of a WebCore::Timer that is responsible for notifying the injected bundle about
        newly inserted form controls, and (2) limits spellchecking and automatic text replacement to editing contexts in
        documents that are either the main document, or have had user interaction or editing.

        This gives us a small but measurable performance boost on Speedometer, where the DOM manipulations that occur
        during the synchronous script execution phase currently schedule zero-delay WebCore::Timers via these two
        codepaths, which then fire right after we begin counting time in the subsequent asynchronous phase, but before
        that asynchronous phase has ended. This means that we're effectively penalized during the second async phase,
        for timers that are scheduled during the first sync phase.

        While most timers that are scheduled simply trigger work that we would've performed anyways when ensuring layout
        near the end of the async phase (e.g. zero-delay style recalc timers and layout timers), these two timers -
        `Editor::m_editorUIUpdateTimer` and `Document::m_didAssociateFormControlsTimer` - cause us to occasionally do
        nontrivial work (that we would otherwise not have done) before ending the async phase.

        Since these two timers are only used for AutoFill and text checking (respectively), it's likely that we can just
        defer and avoid this work in these (relatively) narrow scenarios.

        * dom/Document.cpp:
        (WebCore::Document::commonTeardown):

        When tearing down the document, additionally avoid triggering the associated form control timer by stopping the
        timer and clearing out all the elements in the weak set.

        (WebCore::Document::didAssociateFormControl):
        (WebCore::Document::didAssociateFormControlsTimerFired):

        Extend the delay to a second in the case of non-top-level documents that have not had any form of user
        interaction.

        * dom/Document.h:
        * editing/Editor.cpp:
        (WebCore::Editor::willApplyEditing):

        Right before we're about to apply any edit command, set a bit indicating that the Editor has handled editing.
        The editor UI update timer then consults this bit below, when determining whether or not it should schedule any
        work.

        (WebCore::Editor::respondToChangedSelection):

        Additionally avoid repeatedly stopping and restarting `m_telephoneNumberDetectionUpdateTimer` when the DOM
        selection changes, by making it a DeferrableOneShotTimer instead; this allows us to just set a bit on the timer
        to reschedule it, instead of having to stop and restart every time.

        (WebCore::Editor::willApplyEditing const): Deleted.
        * editing/Editor.h:

2021-09-16  Chris Dumez  <cdumez@apple.com>

        ASSERTION FAILED: nsData under DataURLResourceMediaLoader::DataURLResourceMediaLoader()
        https://bugs.webkit.org/show_bug.cgi?id=230355
        <rdar://82980375>

        Reviewed by Eric Carlson.

        Port DataURLResourceMediaLoader to use WebKit's DataURLDecoder instead of relying on
        NSData to do so. Also, add data url decoding failure handling instead of crashing in
        debug with an assertion.

        No new tests, covered by existing tests.

        * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.mm:
        (WebCore::DataURLResourceMediaLoader::DataURLResourceMediaLoader):

2021-09-16  Chris Dumez  <cdumez@apple.com>

        [ MacOS & iOS ] imported/w3c/web-platform-tests/html/semantics/links/links-created-by-a-and-area-elements/htmlanchorelement_noopener.html is flaky failing
        https://bugs.webkit.org/show_bug.cgi?id=228089
        <rdar://problem/80801807>

        Reviewed by Darin Adler.

        As per the HTML specification, window.close() should schedule a task on the event loop to actually
        close the window:
        - https://html.spec.whatwg.org/multipage/window-object.html#dom-window-close

        We were failing to do so and this was causing flakiness because event ordering was inconsistent.

        This was discussed on upstream WPT here:
        - https://github.com/web-platform-tests/wpt/pull/30001

        No new tests, unskipped existing test.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::close):

2021-09-16  Chris Dumez  <cdumez@apple.com>

        Add violations reporting support for Cross-Origin-Embedder-Policy
        https://bugs.webkit.org/show_bug.cgi?id=230269

        Reviewed by Youenn Fablet.

        Add support for COEP inheritance violation reporting:
        - https://html.spec.whatwg.org/multipage/origin.html#check-a-navigation-response's-adherence-to-its-embedder-policy
        - https://html.spec.whatwg.org/multipage/origin.html#check-a-global-object's-embedder-policy
        - https://html.spec.whatwg.org/multipage/origin.html#queue-a-cross-origin-embedder-policy-inheritance-violation

        Add support for COEP CORP violation reporting:
        - https://fetch.spec.whatwg.org/#cross-origin-resource-policy-check
        - https://fetch.spec.whatwg.org/#queue-a-cross-origin-embedder-policy-corp-violation-report

        Add support for Fetch destination="iframe" because the COEP test relied on it:
        - https://fetch.spec.whatwg.org/#concept-request-destination

        No new tests, rebaselined existing tests.

        * Modules/fetch/FetchRequest.idl:
        * loader/CrossOriginEmbedderPolicy.cpp:
        (WebCore::contextURLForReport):
        (WebCore::sendCOEPPolicyInheritenceViolation):
        (WebCore::sendCOEPCORPViolation):
        * loader/CrossOriginEmbedderPolicy.h:
        * loader/CrossOriginOpenerPolicy.cpp:
        (WebCore::sendViolationReportWhenNavigatingToCOOPResponse):
        (WebCore::sendViolationReportWhenNavigatingAwayFromCOOPResponse):
        * loader/FetchOptions.h:
        (WebCore::isNonSubresourceRequest):
        * loader/PingLoader.cpp:
        (WebCore::PingLoader::sanitizeURLForReport):
        (WebCore::PingLoader::sendReportToEndpoint):
        * loader/PingLoader.h:
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::destinationForType):
        (WebCore::CachedResourceLoader::requestResource):

2021-09-16  Antti Koivisto  <antti@apple.com>

        Move selection gap adjustment code form LegacyRootInlineBox to RenderBlockFlow
        https://bugs.webkit.org/show_bug.cgi?id=230352

        Reviewed by Alan Bujtas.

        Move the code out of legacy lineboxes and make it use inline iterators.
        Also add selectionState() to the iterators.

        * layout/integration/LayoutIntegrationLineIterator.cpp:
        (WebCore::LayoutIntegration::LineIterator::firstRun const):
        (WebCore::LayoutIntegration::LineIterator::lastRun const):
        (WebCore::LayoutIntegration::PathLine::firstRun const):
        (WebCore::LayoutIntegration::PathLine::lastRun const):
        (WebCore::LayoutIntegration::PathLine::selectionState const):
        * layout/integration/LayoutIntegrationLineIterator.h:
        * layout/integration/LayoutIntegrationRunIterator.cpp:
        (WebCore::LayoutIntegration::PathRun::selectionState const):
        * layout/integration/LayoutIntegrationRunIterator.h:
        * rendering/LegacyRootInlineBox.cpp:
        (WebCore::LegacyRootInlineBox::selectionTopAdjustedForPrecedingBlock const):
        (WebCore::blockBeforeWithinSelectionRoot): Deleted.
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::adjustSelectionTopForPrecedingBlock const):
        * rendering/RenderBlockFlow.h:

2021-09-16  Tim Horton  <timothy_horton@apple.com>

        Adjust ARKIT_INLINE_PREVIEW* compile time flags
        https://bugs.webkit.org/show_bug.cgi?id=230332

        Reviewed by Sam Weinig.

        * Modules/model-element/HTMLModelElement.cpp:
        (WebCore::HTMLModelElement::~HTMLModelElement):
        (WebCore::HTMLModelElement::setSourceURL):
        (WebCore::HTMLModelElement::notifyFinished):
        (WebCore::HTMLModelElement::enterFullscreen):
        * Modules/model-element/HTMLModelElement.h:
        * Modules/model-element/HTMLModelElementCocoa.mm:
        * loader/EmptyClients.cpp:
        * loader/EmptyClients.h:
        * page/ChromeClient.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateConfiguration):
        Adopt the new name.

2021-09-16  Simon Fraser  <simon.fraser@apple.com>

        Fix some WEBCORE_EXPORTS on FrameView
        https://bugs.webkit.org/show_bug.cgi?id=230330

        Reviewed by Wenson Hsieh.

        scrollToPositionWithAnimation() and effectiveFrameFlattening() do not need to be exported.

        Instead of exporting traverseForPaintInvalidation() which is never referenced outside of
        WebCore, make the two functions that wrap it non-inline, and export the one used by
        Internals. traverseForPaintInvalidation() can be private.

        * page/FrameView.cpp:
        (WebCore::FrameView::scrollToPositionWithAnimation):
        (WebCore::FrameView::invalidateControlTints):
        (WebCore::FrameView::invalidateImagesWithAsyncDecodes):
        * page/FrameView.h:

2021-09-16  Tyler Wilcock <twilco.o@protonmail.com> and Myles C. Maxfield  <mmaxfield@apple.com>

        font-weight should always serialize as a number
        https://bugs.webkit.org/show_bug.cgi?id=214230
        <rdar://problem/65623540>

        Reviewed by Antti Koivisto.

        Per spec (https://www.w3.org/TR/2018/REC-css-fonts-3-20180920/#propdef-font-weight),
        the computed value of `font-weight` has been changed to always be a
        number, rather than also sometimes being a keyword in the case of
        weights 400 ('normal') and 700 ('bold').

        Changes covered by existing tests which have been updated to
        reflect this new behavior.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::fontNonKeywordWeightFromStyle):
        (WebCore::ComputedStyleExtractor::valueForPropertyInStyle):
        (WebCore::fontWeightFromStyle): Deleted.
        * editing/EditingStyle.cpp:
        (WebCore::identifierForStyleProperty):
        (WebCore::fontWeightIsBold):
        (WebCore::HTMLFontWeightEquivalent::HTMLFontWeightEquivalent):
        (WebCore::HTMLFontWeightEquivalent::valueIsPresentInStyle const):
        * editing/EditingStyle.h:

2021-09-16  Antti Koivisto  <antti@apple.com>

        Use std::optional for truncation
        https://bugs.webkit.org/show_bug.cgi?id=230311

        Reviewed by Myles Maxfield.

        Replace the constants.
        Use 0 truncation value for "full" truncation.

        * rendering/LegacyEllipsisBox.cpp:
        (WebCore::LegacyEllipsisBox::selectionState const):
        * rendering/LegacyInlineTextBox.cpp:
        (WebCore::LegacyInlineTextBox::placeEllipsisBox):
        (WebCore::LegacyInlineTextBox::nodeAtPoint):
        (WebCore::LegacyInlineTextBox::paint):
        (WebCore::LegacyInlineTextBox::selectableRange const):
        * rendering/LegacyInlineTextBox.h:
        (WebCore::LegacyInlineTextBox::truncation const):
        * rendering/RenderText.cpp:
        (WebCore::ellipsisRectForTextRun):
        * rendering/TextBoxPainter.cpp:
        (WebCore::TextBoxPainter::paintForegroundAndDecorations):
        (WebCore::TextBoxPainter::paintDecoration):

        Remove various full truncation checks. Zero truncation value will make them not paint without needing extra checks.

        (WebCore::TextBoxPainter::paintCompositionUnderlines):
        (WebCore::TextBoxPainter::paintCompositionUnderline):
        (WebCore::TextBoxPainter::paintPlatformDocumentMarker):
        (WebCore::TextBoxPainter::computePaintRect):
        * rendering/TextBoxSelectableRange.h:
        (WebCore::TextBoxSelectableRange::clamp const):

        Maintain the behavior where fully truncated text is selectable so fast/text/scroll-text-overflow-ellipsis.html keeps passing.

        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::paintSelectionBackground):
        (WebCore::SVGInlineTextBox::paint):

2021-09-16  Youenn Fablet  <youenn@apple.com>

        Support RTCPeerConnection lastCreatedOffer/lastCreatedAnswer
        https://bugs.webkit.org/show_bug.cgi?id=230260

        Reviewed by Eric Carlson.

        Update WebIDL to handle optional RTCLocalSessionDescriptionInit.type value.
        In case type is missing, compute its value in setLocalDescription as per
        https://w3c.github.io/webrtc-pc/#dom-peerconnection-setlocaldescription step 4.1.
        If sdp is empty, use local offer/answer as per steps 4.2 and 4.3.
        Store local offer and answer as per spec.
        Refactor code to let PeerConnectionBackend createOffer and createAnswer take a callback instead of a promise
        to store the last offer/answer.

        Covered by existing and rebased tests.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/mediastream/PeerConnectionBackend.cpp:
        (WebCore::PeerConnectionBackend::createOffer):
        (WebCore::PeerConnectionBackend::createOfferSucceeded):
        (WebCore::PeerConnectionBackend::createOfferFailed):
        (WebCore::PeerConnectionBackend::createAnswer):
        (WebCore::PeerConnectionBackend::createAnswerSucceeded):
        (WebCore::PeerConnectionBackend::createAnswerFailed):
        (WebCore::PeerConnectionBackend::stop):
        * Modules/mediastream/PeerConnectionBackend.h:
        * Modules/mediastream/RTCLocalSessionDescriptionInit.h: Added.
        * Modules/mediastream/RTCLocalSessionDescriptionInit.idl: Added.
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::createOffer):
        (WebCore::RTCPeerConnection::createAnswer):
        (WebCore::typeForSetLocalDescription):
        (WebCore::RTCPeerConnection::setLocalDescription):
        (WebCore::RTCPeerConnection::setRemoteDescription):
        (WebCore::RTCPeerConnection::updateDescriptions):
        * Modules/mediastream/RTCPeerConnection.h:
        * Modules/mediastream/RTCPeerConnection.idl:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

2021-09-16  Youenn Fablet  <youenn@apple.com>

        Enable RTCRtpScriptTransform by default
        https://bugs.webkit.org/show_bug.cgi?id=230220

        Reviewed by Eric Carlson.

        No change of behavior, renaming WebRTCInsertableStreamsEnabled to WebRTCEncodedTransformEnabled
        and WebRTCSFrameTransformEnabled.

        * Modules/mediastream/RTCEncodedAudioFrame.idl:
        * Modules/mediastream/RTCEncodedVideoFrame.idl:
        * Modules/mediastream/RTCRtpReceiver+Transform.idl:
        * Modules/mediastream/RTCRtpSFrameTransform.idl:
        * Modules/mediastream/RTCRtpSFrameTransformErrorEvent.idl:
        * Modules/mediastream/RTCRtpScriptTransform.idl:
        * Modules/mediastream/RTCRtpScriptTransformer.idl:
        * Modules/mediastream/RTCRtpSender+Transform.idl:
        * Modules/mediastream/RTCTransformEvent.idl:
        * workers/DedicatedWorkerGlobalScope.idl:

2021-09-16  Cameron McCormack  <heycam@apple.com>

        Disable display-p3 canvas and ImageData on platforms other than Monterey+ and iOS 15+
        https://bugs.webkit.org/show_bug.cgi?id=230139
        <rdar://81828819>

        Reviewed by Sam Weinig.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::write):
        (WebCore::CloneDeserializer::read):
        * html/canvas/PredefinedColorSpace.cpp:
        (WebCore::toDestinationColorSpace):
        (WebCore::toPredefinedColorSpace):
        * html/canvas/PredefinedColorSpace.h:
        * html/canvas/PredefinedColorSpace.idl:

2021-09-16  Youenn Fablet  <youenn@apple.com>

        Use libwebrtc OnStandardizedIceConnectionChange callback instead of OnIceConnectionChange
        https://bugs.webkit.org/show_bug.cgi?id=230314

        Reviewed by Eric Carlson.

        Migrate to standardized variant.
        Covered by existing tests.

        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::OnStandardizedIceConnectionChange):
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h:

2021-09-15  Philip Chimento  <pchimento@igalia.com>

        Fixes for build-webkit --minimal
        https://bugs.webkit.org/show_bug.cgi?id=229780

        Reviewed by Fujii Hironori.

        Covered by existing tests.

        Remove ENABLE_INTERSECTION_OBSERVER build-time option. This option is
        quite broken if you try to disable it.

        * dom/Document.cpp:
        (WebCore::Document::~Document):
        (WebCore::Document::intersectionObserversInitialUpdateTimerFired):
        (WebCore::Document::scheduleRenderingUpdate):
        * dom/Document.h:
        (WebCore::Document::intersectionObserverDataIfExists):
        * dom/Element.cpp:
        (WebCore::Element::~Element):
        (WebCore::Element::didMoveToNewDocument):
        * dom/Element.h:
        * dom/ElementRareData.cpp:
        * dom/ElementRareData.h:
        (WebCore::ElementRareData::setIntersectionObserverData):
        * page/IntersectionObserver.cpp:
        * page/IntersectionObserver.h:
        * page/IntersectionObserver.idl:
        * page/IntersectionObserverCallback.h:
        * page/IntersectionObserverCallback.idl:
        * page/IntersectionObserverEntry.cpp:
        * page/IntersectionObserverEntry.h:
        * page/IntersectionObserverEntry.idl:
        * page/Page.cpp:
        (WebCore::Page::updateRendering):
        (WebCore::operator<<):
        * page/Page.h:
        * testing/Internals.cpp:
        (WebCore::Internals::numberOfIntersectionObservers const):
        * testing/Internals.h:
        * testing/Internals.idl:

2021-09-15  Myles C. Maxfield  <mmaxfield@apple.com>

        Fix Xcode build

        Unreviewed.

        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:

2021-09-15  Alex Christensen  <achristensen@webkit.org>

        Add IDL skeleton for SharedWorker
        https://bugs.webkit.org/show_bug.cgi?id=230293

        Reviewed by Geoff Garen.

        * CMakeLists.txt:
        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:
        * bindings/js/WebCoreJSClientData.h:
        * bindings/scripts/preprocess-idls.pl:
        * dom/EventTargetFactory.in:
        * workers/SharedWorker.cpp: Added.
        (WebCore::SharedWorker::SharedWorker):
        (WebCore::SharedWorker::port const):
        (WebCore::SharedWorker::scriptExecutionContext const):
        (WebCore::SharedWorker::eventTargetInterface const):
        * workers/SharedWorker.h: Added.
        * workers/SharedWorker.idl: Added.
        * workers/SharedWorkerGlobalScope.cpp: Added.
        (WebCore::SharedWorkerGlobalScope::name const):
        (WebCore::SharedWorkerGlobalScope::close):
        * workers/SharedWorkerGlobalScope.h: Added.
        (isType):
        * workers/SharedWorkerGlobalScope.idl: Added.
        * workers/Worker.cpp:
        (WebCore::Worker::Worker):
        (WebCore::Worker::create):
        * workers/Worker.h:
        * workers/Worker.idl:
        * workers/WorkerGlobalScope.h:
        (WebCore::WorkerGlobalScope::isSharedWorkerGlobalScope const):
        * workers/WorkerOptions.h: Copied from Source/WebCore/workers/Worker.idl.
        * workers/WorkerOptions.idl: Copied from Source/WebCore/workers/Worker.idl.

2021-09-15  Simon Fraser  <simon.fraser@apple.com>

        Rename ScrollController to ScollingEffectsController
        https://bugs.webkit.org/show_bug.cgi?id=230312

        Reviewed by Tim Horton.

        ScrollController is about rubberbanding, momentum etc, which are scrolling "effects",
        so rename to ScrollingEffectsController.

        ScrollController is the name I want to ultimately use for ScrollAnimator.

        * PlatformMac.cmake:
        * Sources.txt:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::scrollableAreaCanHandleEvent):
        * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.h:
        * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.mm:
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::startAnimationCallback):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::stopAnimationCallback):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::allowsHorizontalStretching const):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::allowsVerticalStretching const):
        * platform/KeyboardScrollingAnimator.cpp:
        (WebCore::KeyboardScrollingAnimator::KeyboardScrollingAnimator):
        * platform/KeyboardScrollingAnimator.h:
        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::startAnimationCallback):
        (WebCore::ScrollAnimator::stopAnimationCallback):
        * platform/ScrollAnimator.h:
        * platform/ScrollingEffectsController.cpp: Renamed from Source/WebCore/platform/ScrollController.cpp.
        (WebCore::ScrollingEffectsController::ScrollingEffectsController):
        (WebCore::ScrollingEffectsController::animationCallback):
        (WebCore::ScrollingEffectsController::startOrStopAnimationCallbacks):
        (WebCore::ScrollingEffectsController::beginKeyboardScrolling):
        (WebCore::ScrollingEffectsController::stopKeyboardScrolling):
        (WebCore::ScrollingEffectsController::setIsAnimatingRubberBand):
        (WebCore::ScrollingEffectsController::setIsAnimatingScrollSnap):
        (WebCore::ScrollingEffectsController::setIsAnimatingKeyboardScrolling):
        (WebCore::ScrollingEffectsController::usesScrollSnap const):
        (WebCore::ScrollingEffectsController::setSnapOffsetsInfo):
        (WebCore::ScrollingEffectsController::snapOffsetsInfo const):
        (WebCore::ScrollingEffectsController::activeScrollSnapIndexForAxis const):
        (WebCore::ScrollingEffectsController::setActiveScrollSnapIndexForAxis):
        (WebCore::ScrollingEffectsController::setNearestScrollSnapIndexForAxisAndOffset):
        (WebCore::ScrollingEffectsController::adjustScrollDestination):
        (WebCore::ScrollingEffectsController::updateActiveScrollSnapIndexForClientOffset):
        (WebCore::ScrollingEffectsController::resnapAfterLayout):
        (WebCore::ScrollingEffectsController::updateKeyboardScrollingAnimatingState):
        (WebCore::ScrollingEffectsController::~ScrollingEffectsController):
        (WebCore::ScrollingEffectsController::stopAllTimers):
        (WebCore::ScrollingEffectsController::scrollPositionChanged):
        (WebCore::ScrollingEffectsController::updateScrollSnapAnimatingState):
        (WebCore::ScrollingEffectsController::updateRubberBandAnimatingState):
        * platform/ScrollingEffectsController.h: Renamed from Source/WebCore/platform/ScrollController.h.
        * platform/mac/ScrollingEffectsController.mm: Renamed from Source/WebCore/platform/mac/ScrollController.mm.
        (WebCore::ScrollingEffectsController::~ScrollingEffectsController):
        (WebCore::ScrollingEffectsController::stopAllTimers):
        (WebCore::ScrollingEffectsController::handleWheelEvent):
        (WebCore::ScrollingEffectsController::wheelDeltaBiasingTowardsVertical):
        (WebCore::ScrollingEffectsController::directionFromEvent):
        (WebCore::ScrollingEffectsController::updateRubberBandAnimatingState):
        (WebCore::ScrollingEffectsController::scrollPositionChanged):
        (WebCore::ScrollingEffectsController::isUserScrollInProgress const):
        (WebCore::ScrollingEffectsController::isRubberBandInProgress const):
        (WebCore::ScrollingEffectsController::isScrollSnapInProgress const):
        (WebCore::ScrollingEffectsController::stopRubberbanding):
        (WebCore::ScrollingEffectsController::startRubberbandAnimation):
        (WebCore::ScrollingEffectsController::stopSnapRubberbandAnimation):
        (WebCore::ScrollingEffectsController::snapRubberBand):
        (WebCore::ScrollingEffectsController::shouldRubberBandInHorizontalDirection const):
        (WebCore::ScrollingEffectsController::shouldRubberBandInDirection const):
        (WebCore::ScrollingEffectsController::isRubberBandInProgressInternal const):
        (WebCore::ScrollingEffectsController::updateRubberBandingState):
        (WebCore::ScrollingEffectsController::updateRubberBandingEdges):
        (WebCore::ScrollingEffectsController::shouldOverrideMomentumScrolling const):
        (WebCore::ScrollingEffectsController::scheduleStatelessScrollSnap):
        (WebCore::ScrollingEffectsController::statelessSnapTransitionTimerFired):
        (WebCore::ScrollingEffectsController::startDeferringWheelEventTestCompletionDueToScrollSnapping):
        (WebCore::ScrollingEffectsController::stopDeferringWheelEventTestCompletionDueToScrollSnapping):
        (WebCore::ScrollingEffectsController::processWheelEventForScrollSnap):
        (WebCore::ScrollingEffectsController::updateGestureInProgressState):
        (WebCore::ScrollingEffectsController::startScrollSnapAnimation):
        (WebCore::ScrollingEffectsController::stopScrollSnapAnimation):
        (WebCore::ScrollingEffectsController::updateScrollSnapAnimatingState):

2021-09-15  Devin Rousso  <drousso@apple.com>

        Unreviewed, build fix after r282464

        * Modules/applepay/ApplePayDetailsUpdateData.h:
        (WebCore::ApplePayDetailsUpdateData::encode const):
        (WebCore::ApplePayDetailsUpdateData::decodeData):

2021-09-15  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, build failure on Big Sur

        Whether encoder / decoder are used is relying on the Internal code expanded by the macro.

        * Modules/applepay/ApplePayDetailsUpdateData.h:
        (WebCore::ApplePayDetailsUpdateData::encode const):
        (WebCore::ApplePayDetailsUpdateData::decodeData):

2021-09-15  Devin Rousso  <drousso@apple.com>

        [Payment Request] Clean up some WKA hooks
        https://bugs.webkit.org/show_bug.cgi?id=230182
        <rdar://problem/78824639>

        Reviewed by Tim Horton.

        * Modules/applepay/ApplePaySession.cpp:
        (WebCore::convertAndValidate):
        (WebCore::merge):
        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp:
        (WebCore::convertAndValidate):
        * testing/MockPaymentCoordinator.h:
        * testing/MockPaymentCoordinator.cpp:
        (WebCore::MockPaymentCoordinator::showPaymentUI):
        (WebCore::MockPaymentCoordinator::completeShippingMethodSelection):
        (WebCore::MockPaymentCoordinator::completeShippingContactSelection):
        (WebCore::MockPaymentCoordinator::completePaymentMethodSelection):
        (WebCore::MockPaymentCoordinator::completeCouponCodeChange):
        (WebCore::MockPaymentCoordinator::merge):
        Instead of using `#define`, create actual functions so that the code in WKA is cleaner.

        * Modules/applepay/ApplePayRequestBase.h:
        * Modules/applepay/ApplePayRequestBase.cpp:
        (WebCore::convertAndValidate):
        Remove unnecessary WKA hooks.

        * Modules/applepay/PaymentSummaryItems.h:
        * Modules/applepay/cocoa/PaymentSummaryItemsCocoa.mm:
        (WebCore::platformRecurringSummaryItem): Added.
        (WebCore::platformDeferredSummaryItem): Added.
        (WebCore::platformSummaryItem): Added.
        (WebCore::toPKPaymentSummaryItem): Deleted.
        Expose functions that convert `ApplePayLineItem` to `PKPaymentSummaryItem` (and subclasses).

2021-09-15  Ziran Sun  <zsun@igalia.com>

        [css-grid] Overflow should be computed with the actual logical bottom
        https://bugs.webkit.org/show_bug.cgi?id=226981

        Reviewed by Javier Fernandez.

        When computing the overflow area in the grid container, we need to obtain the result of ClientLogicalBottom
        function. This value should be retrieved after computing the actual logical height rather than before.

        For grid, width/height of the overflow rect should be the width/height of the grid area of the items rather than
        the width/height of the container block. As per https://github.com/w3c/csswg-drafts/issues/3653, child's margins
        along with padding should contribute to the scrollable overflow area.

        Test: imported/w3c/web-platform-tests/css/css-grid/alignment/grid-content-alignment-overflow-002.html
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::clientLogicalBottomAfterRepositioning):
        (WebCore::RenderBlock::computeOverflow):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::logicalLeftForChild const):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::clientLogicalBottomAfterRepositioning): Deleted.
        * rendering/RenderFlexibleBox.h:
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::layoutBlock):

2021-09-15  Youenn Fablet  <youenn@apple.com>

        imported/w3c/web-platform-tests/webrtc-extensions/transfer-datachannel.html is failing after https://trac.webkit.org/changeset/282445/webkit
        https://bugs.webkit.org/show_bug.cgi?id=230308

        Reviewed by Eric Carlson.

        Covered by no longer failing test.

        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::OnDataChannel):
        We need to create the data channel object at the time we fire the event,
        so that JS can transfer it synchronously in the same event loop.
        This got regressed as we were creating the data channel, enqueuing a task to fire the data channel event.

2021-09-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        AX: Move platform specific code for isolated tree mode to the platform files
        https://bugs.webkit.org/show_bug.cgi?id=230301
        <rdar://problem/83138024>

        Unreviewed follow up after r282450.

        * accessibility/isolatedtree/AXIsolatedObject.cpp:
        (WebCore::AXIsolatedObject::initializeAttributeData): Remove PreventKeyboardDOMEventDispatch property set that
        I forgot in r282450, since it's now done in initializePlatformProperties().

2021-09-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        Fix size calculation in ImageBufferCairoImageSurfaceBackend::create()
        https://bugs.webkit.org/show_bug.cgi?id=229365

        Reviewed by Don Olmstead.

        * platform/graphics/cairo/ImageBufferCairoImageSurfaceBackend.cpp:
        (WebCore::ImageBufferCairoImageSurfaceBackend::calculateSafeBackendSize): Check the result of
        cairo_format_stride_for_width() and the multiplication doesn't overflow.
        (WebCore::ImageBufferCairoImageSurfaceBackend::create): Use tryFastCalloc() instead of tryFastZeroedMalloc().

2021-09-15  Antti Koivisto  <antti@apple.com>

        [LFC][Integration] TextBoxSelectableRange::additionalLengthAtEnd miscomputed
        https://bugs.webkit.org/show_bug.cgi?id=230306

        Reviewed by Alan Bujtas.

        It should be non-zero only if the run contains a hyphen. This doesn't yet affect
        anything, but it will.

        * layout/integration/LayoutIntegrationRunIteratorModernPath.h:
        (WebCore::LayoutIntegration::RunIteratorModernPath::selectableRange const):

2021-09-15  Aditya Keerthi  <akeerthi@apple.com>

        [iOS] Search inputs with '-webkit-appearance: textfield' should have a textfield background color
        https://bugs.webkit.org/show_bug.cgi?id=229883
        rdar://82146288

        Reviewed by Tim Horton.

        In iOS 15, search inputs have a gray background color by default.
        Some sites, such as booking.com, request that the input appear like
        a textfield, by specifying '-webkit-appearance: textfield', over the
        default 'searchfield'. This request was previously ignored, but there
        was no observable difference since search inputs and text inputs had
        the same default styling before iOS 15.

        Now that the default styling is different, the appearance should be
        honored, so that sites get the background color they expect.

        Test: fast/forms/ios/form-control-refresh/search/textfield-appearance-background.html

        * rendering/RenderThemeIOS.h:
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::adjustTextFieldStyle const):

        Exclude any elements that have a textfield appearance by default from
        the background color adjustment, so that their background color can be
        customized.

2021-09-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        AX: Move platform specific code for isolated tree mode to the platform files
        https://bugs.webkit.org/show_bug.cgi?id=230301
        <rdar://problem/83138024>

        Reviewed by Adrian Perez de Castro.

        Add missing ifdefs in the headers and move the mac specific code to mac files.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::isolatedTreeRootObject):
        (WebCore::AXObjectCache::clientSupportsIsolatedTree): Deleted.
        (WebCore::AXObjectCache::isIsolatedTreeEnabled): Deleted.
        (WebCore::AXObjectCache::initializeSecondaryAXThread): Deleted.
        (WebCore::AXObjectCache::usedOnAXThread): Deleted.
        * accessibility/isolatedtree/AXIsolatedObject.cpp:
        (WebCore::AXIsolatedObject::initializeAttributeData):
        (WebCore::AXIsolatedObject::children):
        (WebCore::AXIsolatedObject::preventKeyboardDOMEventDispatch const): Deleted.
        (WebCore::AXIsolatedObject::setPreventKeyboardDOMEventDispatch): Deleted.
        (WebCore::AXIsolatedObject::convertRectToPlatformSpace const): Deleted.
        * accessibility/isolatedtree/AXIsolatedObject.h:
        * accessibility/isolatedtree/mac/AXIsolatedObjectMac.mm:
        (WebCore::AXIsolatedObject::initializePlatformProperties):
        (WebCore::AXIsolatedObject::convertRectToPlatformSpace const):
        (WebCore::AXIsolatedObject::preventKeyboardDOMEventDispatch const):
        (WebCore::AXIsolatedObject::setPreventKeyboardDOMEventDispatch):
        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::clientSupportsIsolatedTree):
        (WebCore::AXObjectCache::isIsolatedTreeEnabled):
        (WebCore::AXObjectCache::initializeSecondaryAXThread):
        (WebCore::AXObjectCache::usedOnAXThread):

2021-09-15  Antti Koivisto  <antti@apple.com>

        [Layout][Integration] Remove unnecessary Run typedef
        https://bugs.webkit.org/show_bug.cgi?id=230303

        Reviewed by Alan Bujtas.

        Use Layout::Run directly instead of LayoutIntegration::Run.

        * layout/integration/LayoutIntegrationInlineContent.cpp:
        (WebCore::LayoutIntegration:: const):
        (WebCore::LayoutIntegration::InlineContent::indexForRun const):
        (WebCore::LayoutIntegration::InlineContent::firstRunForLayoutBox const):
        * layout/integration/LayoutIntegrationInlineContent.h:
        (WebCore::LayoutIntegration::InlineContent::lineForRun const):
        * layout/integration/LayoutIntegrationLineLayout.cpp:
        (WebCore::LayoutIntegration::LineLayout::paintTextRunUsingPhysicalCoordinates):
        * layout/integration/LayoutIntegrationLineLayout.h:
        * layout/integration/LayoutIntegrationPagination.cpp:
        (WebCore::LayoutIntegration::makeAdjustedContent):
        * layout/integration/LayoutIntegrationRunIterator.cpp:
        (WebCore::LayoutIntegration::textRunFor):
        * layout/integration/LayoutIntegrationRunIterator.h:
        * layout/integration/LayoutIntegrationRunIteratorModernPath.h:
        (WebCore::LayoutIntegration::RunIteratorModernPath::run const):
        * rendering/TextPainter.cpp:
        (WebCore::TextPainter::clearGlyphDisplayLists):

2021-09-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        AX: Remove AXCoreObject::containsText
        https://bugs.webkit.org/show_bug.cgi?id=230299
        <rdar://problem/83134668>

        Reviewed by Adrian Perez de Castro.

        It's only used by isAccessibilityTextSearchMatch() in AccessibilityObject.cpp. We can move the implementation
        there and avoid to include TextIterator.h in AccessibilityObjectInterface.h.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::Accessibility::isAccessibilityTextSearchMatch):
        * accessibility/AccessibilityObjectInterface.h:
        (WebCore::AXCoreObject::containsText const): Deleted.
        * accessibility/isolatedtree/AXIsolatedTree.cpp:
        * accessibility/mac/WebAccessibilityObjectWrapperBase.mm:
        * page/mac/ServicesOverlayController.mm:

2021-09-15  Martin Robinson  <mrobinson@webkit.org>

        offsetLeft on display:inline element in vertical-rl parent can return a negative number
        https://bugs.webkit.org/show_bug.cgi?id=230217

        Reviewed by Darin Adler.

        No new tests. This is covered by imported/w3c/web-platform-tests/css/cssom-view/offsetTopLeft-inline.html.

        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::firstInlineBoxTopLeft const): When calculating offsetLeft and offsetTop instead
        of using topLeft unconditionally, use LegacyInlineBox::locationIncludingFlipping which takes into
        account writing mode.

2021-09-15  Youenn Fablet  <youenn@apple.com>

        Use event queue to fire RTCPeerConnection events
        https://bugs.webkit.org/show_bug.cgi?id=229944
        <rdar://problem/83045723>

        Reviewed by Eric Carlson.

        Instead of using a dedicated task queue in peer connection to handle the suspend cases,
        we now rely on queueTask to do this.
        We do this for both promise resolution and dispatching events.

        This allows to better order some promise resolutions and some event dispatching as well.
        Previously, we were sometimes resolving a promise, then scheduling a task to fire an event.
        The promise resolution callbacks in that case are expected to run first, in the same event loop,
        then the event listeners are supposed to be executed.
        It was not happening since we were not in the event loop, so the event was fired then the promise resolution callbacks executed.

        Drive-by fix to reject createOffer/createAnswer in case signaling state is not correct as per
        https://w3c.github.io/webrtc-pc/#dfn-creating-an-offer and https://w3c.github.io/webrtc-pc/#dfn-creating-an-answer.
        Drive-by fix to not fire open event when data channel is closing as per https://w3c.github.io/webrtc-pc/#announcing-a-data-channel-as-open.

        Update mock backend to correctly report signaling state.

        Covered by updated tests.
        Some tests are still flaky which might mean we still have some races that need to be investigated.

        * Modules/mediastream/PeerConnectionBackend.cpp:
        (WebCore::PeerConnectionBackend::createOfferSucceeded):
        (WebCore::PeerConnectionBackend::createOfferFailed):
        (WebCore::PeerConnectionBackend::createAnswerSucceeded):
        (WebCore::PeerConnectionBackend::createAnswerFailed):
        (WebCore::PeerConnectionBackend::setLocalDescriptionSucceeded):
        (WebCore::PeerConnectionBackend::setLocalDescriptionFailed):
        (WebCore::PeerConnectionBackend::setRemoteDescriptionSucceeded):
        (WebCore::PeerConnectionBackend::setRemoteDescriptionFailed):
        (WebCore::PeerConnectionBackend::iceGatheringStateChanged):
        (WebCore::PeerConnectionBackend::newICECandidate):
        (WebCore::PeerConnectionBackend::doneGatheringCandidates):
        * Modules/mediastream/PeerConnectionBackend.h:
        * Modules/mediastream/RTCDataChannel.cpp:
        (WebCore::RTCDataChannel::didChangeReadyState):
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::createOffer):
        (WebCore::RTCPeerConnection::createAnswer):
        (WebCore::RTCPeerConnection::resume):
        (WebCore::RTCPeerConnection::setSignalingState):
        (WebCore::RTCPeerConnection::updateIceGatheringState):
        (WebCore::RTCPeerConnection::updateIceConnectionState):
        (WebCore::RTCPeerConnection::updateConnectionState):
        (WebCore::RTCPeerConnection::processIceTransportStateChange):
        (WebCore::RTCPeerConnection::updateNegotiationNeededFlag):
        (WebCore::RTCPeerConnection::scheduleEvent):
        * Modules/mediastream/RTCPeerConnection.h:
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::OnDataChannel):
        (WebCore::toRTCIceGatheringState):
        (WebCore::LibWebRTCMediaEndpoint::OnIceGatheringChange):
        * testing/MockLibWebRTCPeerConnection.cpp:
        (WebCore::MockLibWebRTCPeerConnection::signaling_state):
        * testing/MockLibWebRTCPeerConnection.h:

2021-09-15  Youenn Fablet  <youenn@apple.com>

        Migrate to libwebrtc non-racy setRemoteDescription/setLocalDescription variants
        https://bugs.webkit.org/show_bug.cgi?id=230262

        Reviewed by Darin Adler.

        We were using the old versions of libwebrtc SetLocalDescription/SetRemoteDescription.
        As per the header file, these versions are potentially racy.
        This patch migrates to new versions of the same API which in addition take more modern parameters instead of raw pointers.
        We also modernize a bit the code by using methods manipulating unique_ptr instead of raw pointers.
        Drive-by fix: Add support for getting back to new for ICE gathering state. This was missing and without it,
        imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-explicit-rollback-iceGatheringState.html would time out.
        Update mock to implement the new method versions.

        Covered by existing tests.

        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::sessionDescriptionType):
        (WebCore::LibWebRTCMediaEndpoint::doSetLocalDescription):
        (WebCore::LibWebRTCMediaEndpoint::doSetRemoteDescription):
        (WebCore::LibWebRTCMediaEndpoint::OnIceGatheringChange):
        * Modules/mediastream/libwebrtc/LibWebRTCObservers.h:
        * testing/MockLibWebRTCPeerConnection.cpp:
        (WebCore::MockLibWebRTCPeerConnection::SetLocalDescription):
        (WebCore::MockLibWebRTCPeerConnection::SetRemoteDescription):
        * testing/MockLibWebRTCPeerConnection.h:

2021-09-15  Said Abou-Hallawa  <said@apple.com>

        Linear gradient sometimes is drawn incorrectly and sometimes hangs
        https://bugs.webkit.org/show_bug.cgi?id=230145
        <rdar://82428383>

        Reviewed by Simon Fraser.

        Gradient::paint() has a few flaws:

        1) We have to use atan2() instead of acos() to get the angle of the vector
           (p0, p1) in the correct quadrant. acos() returns an angle between [0, pi].

        2) The order in the case of 'repeat' and 'reflect' should be the following:
            -- Move the points forward towards the bounding box.
            -- Draw gradient and move the points forward till they are not
               intersecting the bounding box.
            -- Move the points backward towards the bounding box.
            -- Draw gradient and move the points backward till they are not
               intersecting the bounding box.

        Tests: svg/gradients/gradient-flipped-start-end-points-expected.svg
               svg/gradients/gradient-flipped-start-end-points.svg

        * platform/graphics/cg/GradientCG.cpp:
        (WebCore::Gradient::paint):

2021-09-14  Simon Fraser  <simon.fraser@apple.com>

        Implement the borderBoxSize/contentBoxSize parts of ResizeObserver
        https://bugs.webkit.org/show_bug.cgi?id=230242

        Reviewed by Sam Weinig.

        The Resize Observer spec has been updated to allow authors to observe
        "content-box", "border-box" and "device-pixel-content-box". Add support
        for the first two, adding ResizeObserverSize, ResizeObserverBoxOptions and
        ResizeObserverOptions per spec.

        ResizeObserverEntry also contains borderBoxSize and contentBoxSize now,
        so support that.

        Add some helpers to make it easier to get box logical sizes.

        "device-pixel-content-box" is not yet supported because it's expensive to compute[2].

        [1] https://drafts.csswg.org/resize-observer
        [2] https://github.com/w3c/csswg-drafts/issues/6608

        Tested by WPT.

        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * page/ResizeObservation.cpp:
        (WebCore::ResizeObservation::create):
        (WebCore::ResizeObservation::ResizeObservation):
        (WebCore::ResizeObservation::updateObservationSize):
        (WebCore::ResizeObservation::computeObservedSizes const):
        (WebCore::ResizeObservation::computeContentRect const):
        (WebCore::ResizeObservation::borderBoxSize const):
        (WebCore::ResizeObservation::contentBoxSize const):
        (WebCore::ResizeObservation::snappedContentBoxSize const):
        (WebCore::ResizeObservation::elementSizeChanged const):
        (WebCore::ResizeObservation::~ResizeObservation): Deleted.
        (WebCore::ResizeObservation::computeObservedSize const): Deleted.
        * page/ResizeObservation.h:
        (WebCore::ResizeObservation::observedBox const):
        * page/ResizeObserver.cpp:
        (WebCore::ResizeObserver::observe):
        (WebCore::ResizeObserver::gatherObservations):
        (WebCore::ResizeObserver::deliverObservations):
        * page/ResizeObserver.h:
        * page/ResizeObserver.idl:
        * page/ResizeObserverBoxOptions.h: Added.
        * page/ResizeObserverBoxOptions.idl: Copied from Source/WebCore/page/ResizeObserverEntry.idl.
        * page/ResizeObserverEntry.h:
        (WebCore::ResizeObserverEntry::create):
        (WebCore::ResizeObserverEntry::contentRect const):
        (WebCore::ResizeObserverEntry::borderBoxSize const):
        (WebCore::ResizeObserverEntry::contentBoxSize const):
        (WebCore::ResizeObserverEntry::ResizeObserverEntry):
        (WebCore::ResizeObserverEntry::m_contentBoxSizes):
        * page/ResizeObserverEntry.idl:
        * page/ResizeObserverOptions.h: Added.
        * page/ResizeObserverOptions.idl: Copied from Source/WebCore/page/ResizeObserverEntry.idl.
        * page/ResizeObserverSize.h: Added.
        (WebCore::ResizeObserverSize::create):
        (WebCore::ResizeObserverSize::inlineSize const):
        (WebCore::ResizeObserverSize::blockSize const):
        (WebCore::ResizeObserverSize::ResizeObserverSize):
        * page/ResizeObserverSize.idl: Copied from Source/WebCore/page/ResizeObserverEntry.idl.
        * rendering/RenderBox.h:
        (WebCore::RenderBox::logicalSize const):
        (WebCore::RenderBox::borderBoxLogicalSize const):
        (WebCore::RenderBox::contentLogicalSize const):
        * rendering/RenderElement.h:
        (WebCore::adjustLayoutSizeForAbsoluteZoom):
        * rendering/style/RenderStyle.h:
        (WebCore::adjustLayoutSizeForAbsoluteZoom):

2021-09-14  Rob Buis  <rbuis@igalia.com>

        Fix button-min-width.html
        https://bugs.webkit.org/show_bug.cgi?id=229984

        Reviewed by Simon Fraser.

        Do not use theme min-width/min-height values unless
        it is bigger than the actual CSS property values.

        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::adjustStyle):

2021-09-14  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GStreamer][EME] Accomodate cbcs as cipher-mode instead of mime
        https://bugs.webkit.org/show_bug.cgi?id=230265

        Reviewed by Philippe Normand.

        In https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/1013
        it was decided that there should not be x-cbcs as mime type but
        rather x-cenc with cbcs as cipher-mode.

        Fly-by change, we will return GST_FLOW_NOT_SUPPORTED when we get
        skip and crypt cbcs encryption scheme.

        * platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.cpp:
        (transformInPlace):

2021-09-14  Rob Buis  <rbuis@igalia.com>

        imported/w3c/web-platform-tests/css/css-sizing/image-min-max-content-intrinsic-size-change* tests fail
        https://bugs.webkit.org/show_bug.cgi?id=203508

        Reviewed by Simon Fraser.

        For replaced elements like images, non specified min/max logical widths are a
        reason for re-layout after intrinsic size change (for example min-width: min-content).

        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::setNeedsLayoutIfNeededAfterIntrinsicSizeChange):

2021-09-14  Don Olmstead  <don.olmstead@sony.com>

        Non-unified build fixes, mid September 2021 edition
        https://bugs.webkit.org/show_bug.cgi?id=230110

        Unreviewed non-unified build fixes.

        * css/calc/CSSCalcOperationNode.cpp:
        * css/calc/CSSCalcPrimitiveValueNode.cpp:
        * layout/formattingContexts/FormattingQuirks.cpp:
        * layout/formattingContexts/inline/invalidation/InlineDamage.h:
        * layout/formattingContexts/inline/invalidation/InlineInvalidation.h:
        * loader/CrossOriginOpenerPolicy.cpp:
        * loader/DocumentWriter.cpp:
        * rendering/TextBoxPainter.cpp:

2021-09-14  John Wilander  <wilander@apple.com>

        Rename RESOURCE_LOAD_STATISTICS to INTELLIGENT_TRACKING_PREVENTION
        https://bugs.webkit.org/show_bug.cgi?id=230279
        <rdar://problem/83118683>

        Reviewed by Darin Adler.

        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::connect):
        * dom/BroadcastChannel.cpp:
        (WebCore::shouldPartitionOrigin):
        * dom/Document+StorageAccess.idl:
        * dom/Document.cpp:
        (WebCore::Document::referrer):
        * dom/Document.h:
        * dom/DocumentStorageAccess.cpp:
        * dom/DocumentStorageAccess.h:
        * history/CachedPage.cpp:
        (WebCore::CachedPage::CachedPage):
        (WebCore::CachedPage::restore):
        (WebCore::CachedPage::clear):
        * history/CachedPage.h:
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::responseReceived):
        * loader/EmptyClients.cpp:
        * loader/EmptyFrameLoaderClient.h:
        * loader/FrameLoaderClient.h:
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::willSendRequestInternal):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestResource):
        * page/ChromeClient.h:
        * page/CrossSiteNavigationDataTransfer.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::open):
        * page/Quirks.cpp:
        (WebCore::Quirks::triggerOptionalStorageAccessQuirk const):
        * page/Quirks.h:
        * platform/network/NetworkStorageSession.cpp:
        * platform/network/NetworkStorageSession.h:
        * platform/network/cocoa/NetworkStorageSessionCocoa.mm:
        (WebCore::NetworkStorageSession::cookiesForURL const):
        (WebCore::NetworkStorageSession::setCookiesFromDOM const):
        * platform/network/curl/NetworkStorageSessionCurl.cpp:
        (WebCore::NetworkStorageSession::setCookiesFromDOM const):
        * platform/network/soup/NetworkStorageSessionSoup.cpp:
        (WebCore::NetworkStorageSession::setCookiesFromDOM const):
        (WebCore::NetworkStorageSession::getRawCookies const):
        (WebCore::cookiesForSession):

2021-09-14  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] Avoid computing post-layout EditorState data unless necessary
        https://bugs.webkit.org/show_bug.cgi?id=230204
        <rdar://problem/83078713>

        Reviewed by Devin Rousso.

        See WebKit/ChangeLog for more details.

        * page/Page.h:
        (WebCore::Page::isEditable const): Mark this getter `const`.
        (WebCore::Page::isEditable): Deleted.

2021-09-14  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, reverting r282408.

        Breaks internal builds.

        Reverted changeset:

        "Enable RTCRtpScriptTransform by default"
        https://bugs.webkit.org/show_bug.cgi?id=230220
        https://commits.webkit.org/r282408

2021-09-14  Myles C. Maxfield  <mmaxfield@apple.com>

        CSSFontFaceSrcValue.cssText should be quoted consistently with other browsers
        https://bugs.webkit.org/show_bug.cgi?id=230273
        <rdar://problem/79644124>

        Reviewed by Darin Adler.

        In a src: line like "src: local(foobar)", Firefox and Chrome will both quote
        "foobar" when reading out of the OM. Same thing with "src: url(foobar)".
        We should match them.

        Test: imported/w3c/web-platform-tests/css/css-fonts/font-family-src-quoted.html

        * css/CSSFontFaceSrcValue.cpp:
        (WebCore::CSSFontFaceSrcValue::customCSSText const):
        * css/CSSMarkup.cpp:
        (WebCore::serializeIdentifier):
        (WebCore::serializeString):

2021-09-14  Youenn Fablet  <youenn@apple.com>

        Enable RTCRtpScriptTransform by default
        https://bugs.webkit.org/show_bug.cgi?id=230220

        Reviewed by Eric Carlson.

        No change of behavior, renaming WebRTCInsertableStreamsEnabled to WebRTCEncodedTransformEnabled
        and WebRTCSFrameTransformEnabled.

        * Modules/mediastream/RTCEncodedAudioFrame.idl:
        * Modules/mediastream/RTCEncodedVideoFrame.idl:
        * Modules/mediastream/RTCRtpReceiver+Transform.idl:
        * Modules/mediastream/RTCRtpSFrameTransform.idl:
        * Modules/mediastream/RTCRtpSFrameTransformErrorEvent.idl:
        * Modules/mediastream/RTCRtpScriptTransform.idl:
        * Modules/mediastream/RTCRtpScriptTransformer.idl:
        * Modules/mediastream/RTCRtpSender+Transform.idl:
        * Modules/mediastream/RTCTransformEvent.idl:
        * workers/DedicatedWorkerGlobalScope.idl:

2021-09-14  Darin Adler  <darin@apple.com>

        URLs in CSS variables must be resolved against the base URL of the stylesheet, not the document
        https://bugs.webkit.org/show_bug.cgi?id=230243

        Reviewed by Antti Koivisto.

        Test: fast/css/variables/url-with-variable-is-sheet-relative.html

        * css/CSSPendingSubstitutionValue.h: Removed baseURL, since CSSVariableReferenceValue now
        contains an appropriate parsing context, which includes the base URL.

        * css/CSSVariableReferenceValue.cpp:
        (WebCore::CSSVariableReferenceValue::CSSVariableReferenceValue): Store a CSSParserContext.
        (WebCore::CSSVariableReferenceValue::create): Ditto.
        * css/CSSVariableReferenceValue.h: Updated for the above.

        * css/parser/CSSParser.cpp:
        (WebCore::CSSParser::parseValueWithVariableReferences): Use the context from the
        variable reference, not the current one in the parser.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::parseValueStart): Pass a parser context when creating a
        CSSVariableReferenceValue.
        * css/parser/CSSVariableParser.cpp:
        (WebCore::CSSVariableParser::parseDeclarationValue): Ditto.

        * style/StyleBuilder.cpp:
        (WebCore::Style::Builder::resolvedVariableValue): Remove the special case for
        CSSPendingSubstitutionValue since CSSParser::parseValueWithVariableReferences
        now takes care of this.

2021-09-14  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Introduce InlineInvalidation/InlineDamage
        https://bugs.webkit.org/show_bug.cgi?id=229225
        <rdar://problem/82324227>

        Reviewed by Antti Koivisto.

        This is in preparation for supporting partial inline layout.

        The initial implementation is going to only support a single type of damage (content changed, style changed etc) on a single line.
        Anything more involved either
        1. folds into a full damage type of layout (i.e. no range support) e.g changing multiple images on different lines triggers vertical alignment on all the lines
        2. triggers the lowest level type of layout e.g. changing content on the first line while resizing the containing block folds into NeedsContentUpdateAndLineLayout.

        * CMakeLists.txt:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * layout/formattingContexts/inline/invalidation/InlineDamage.h: Added.
        (WebCore::Layout::InlineDamage::type const):
        (WebCore::Layout::InlineDamage::line const):
        (WebCore::Layout::InlineDamage::setDamageType):
        (WebCore::Layout::InlineDamage::setDamagedLine):
        * layout/formattingContexts/inline/invalidation/InlineInvalidation.cpp: Added.
        (WebCore::Layout::InlineInvalidation::InlineInvalidation):
        (WebCore::Layout::InlineInvalidation::styleChanged):
        (WebCore::Layout::InlineInvalidation::textInserted):
        (WebCore::Layout::InlineInvalidation::textWillBeRemoved):
        (WebCore::Layout::InlineInvalidation::inlineLevelBoxInserted):
        (WebCore::Layout::InlineInvalidation::inlineLevelBoxWillBeRemoved):
        * layout/formattingContexts/inline/invalidation/InlineInvalidation.h: Added.

2021-09-14  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Migrate to CTFontHasTable() from CTFontCopyAvailableTables()
        https://bugs.webkit.org/show_bug.cgi?id=230248

        Reviewed by Anders Carlsson.

        CTFontHasTable() has been around for a while, but it's only actually
        faster than CTFontCopyAvailableTables() on certain operating systems.

        No new tests because there is no behavior change.

        * platform/graphics/coretext/FontCoreText.cpp:
        (WebCore::fontHasTable):
        (WebCore::fontHasEitherTable):

2021-09-14  Myles C. Maxfield  <mmaxfield@apple.com>

        Implement text-decoration-skip-ink
        https://bugs.webkit.org/show_bug.cgi?id=230244

        Reviewed by Antti Koivisto.

        First, there was "text-decoration-skip: ink", and that was what we implemented in WebKit. That had a
        problem, though, which was that you couldn't add a value into the set without resetting the entire
        property, so the CSSWG split it up into a bunch of constituent properties:
        - text-decoration-skip-self
        - text-decoration-skip-box
        - text-decoration-skip-inset
        - text-decoration-skip-spaces
        - text-decoration-skip-ink
        text-decoration-skip was turned into a shorthand for all of these constituent properties.

        Chrome and Firefox, however, implemented text-decoration-skip-ink rather than text-decoration-skip.
        From what I understand, Firefox isn't interested in implementing the shorthand until they implement
        all the longhands. Therefore, because WebKit implements only the shorthand and Firefox implements only
        the longhand, authors have to write two different properties in their style for the two different
        browsers. That's unfortunate, so this patch makes WebKit follow the CSSWG, and turns
        text-decoration-skip into a shorthand, and adds support for text-decoration-skip-ink. Therefore,
        there's no new behavior here; it's just a new way of accessing the same functionality we already have.

        The spec actually removed the "ink" value from the text-decoration-skip shorthand, but we have to
        maintain it because of compat. So, this patch maps "text-decoration-skip: ink" to
        "text-decoration-skip-ink: auto". There's an issue in the spec about this:
        https://drafts.csswg.org/css-text-decor-4/#issue-070668ae

        Back when we implemented text-decoration-skip: ink, we only implemented the "ink" value, and none of
        the other values. This patch also doesn't implement the other values.

        Also, previously, we used to parse "text-decoration-skip: objects" but we didn't do anything with it.
        This patch removes parsing support for that, so @supports works properly.

        Covered by existing tests.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::renderTextDecorationSkipToCSSValue):
        (WebCore::ComputedStyleExtractor::valueForPropertyInStyle):
        (WebCore::renderTextDecorationSkipFlagsToCSSValue): Deleted.
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator TextDecorationSkipInk const):
        * css/CSSProperties.json:
        * css/StyleProperties.cpp:
        (WebCore::StyleProperties::getPropertyValue const):
        (WebCore::StyleProperties::textDecorationSkipValue const):
        * css/StyleProperties.h:
        * css/html.css:
        (ins, del):
        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):
        (WebCore::CSSParserFastPaths::isKeywordPropertyID):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::consumeTextDecorationSkip):
        (WebCore::CSSPropertyParser::parseSingleValue):
        (WebCore::CSSPropertyParser::parseShorthand):
        (WebCore::consumeTextDecorationSkip): Deleted.
        * css/parser/CSSPropertyParser.h:
        * rendering/TextDecorationPainter.cpp:
        (WebCore::TextDecorationPainter::paintTextDecoration):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::changeRequiresRepaintIfTextOrBorderOrOutline const):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::textDecorationSkipInk const):
        (WebCore::RenderStyle::setTextDecorationSkipInk):
        (WebCore::RenderStyle::initialTextDecorationSkipInk):
        (WebCore::RenderStyle::textDecorationSkip const): Deleted.
        (WebCore::RenderStyle::setTextDecorationSkip): Deleted.
        (WebCore::RenderStyle::initialTextDecorationSkip): Deleted.
        * rendering/style/RenderStyleConstants.cpp:
        (WebCore::operator<<):
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::operator== const):
        * rendering/style/StyleRareInheritedData.h:
        * style/InlineTextBoxStyle.cpp:
        (WebCore::minLogicalTopForTextDecorationLine):
        (WebCore::maxLogicalBottomForTextDecorationLine):
        * style/PropertyCascade.cpp:
        (WebCore::Style::shouldApplyPropertyInParseOrder):
        * style/StyleBuilderConverter.h:
        (WebCore::Style::BuilderConverter::valueToDecorationSkip): Deleted.
        (WebCore::Style::BuilderConverter::convertTextDecorationSkip): Deleted.

2021-09-14  Sam Sneddon  <gsnedders@apple.com>

        Support the `x` resolution unit
        https://bugs.webkit.org/show_bug.cgi?id=229777

        Reviewed by Simon Fraser.

        Covered by existing (progressing) tests.

        * css/CSSPrimitiveValue.cpp:
        (WebCore::isValidCSSUnitTypeForDoubleConversion):
        (WebCore::isStringType):
        (WebCore::CSSPrimitiveValue::cleanup):
        (WebCore::CSSPrimitiveValue::conversionToCanonicalUnitsScaleFactor):
        (WebCore::CSSPrimitiveValue::unitTypeString):
        (WebCore::CSSPrimitiveValue::formatNumberForCustomCSSText const):
        (WebCore::CSSPrimitiveValue::equals const):
        * css/CSSPrimitiveValue.h:
        * css/CSSUnits.cpp:
        (WebCore::unitCategory):
        (WebCore::operator<<):
        * css/CSSUnits.h:
        * css/DeprecatedCSSOMPrimitiveValue.cpp:
        (WebCore::DeprecatedCSSOMPrimitiveValue::primitiveType const):
        (WebCore::DeprecatedCSSOMPrimitiveValue::getFloatValue const):
        * css/calc/CSSCalcCategoryMapping.cpp:
        (WebCore::hasDoubleValue):
        * css/parser/CSSParserToken.cpp:
        (WebCore::cssPrimitiveValueUnitFromTrie):
        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::consumeResolutionCSSPrimitiveValueWithKnownTokenTypeDimension):
        (WebCore::CSSPropertyParserHelpers::consumeResolution):
        (WebCore::CSSPropertyParserHelpers::consumeImageSet):
        * css/parser/CSSPropertyParserHelpers.h:
        (WebCore::CSSPropertyParserHelpers::consumeResolution):
        Remove the optional allowX argument now it's part of the normal syntax.

2021-09-14  Youenn Fablet  <youenn@apple.com>

        Refactor WritableStream to better integrate https://streams.spec.whatwg.org/#create-writable-stream
        https://bugs.webkit.org/show_bug.cgi?id=230219

        Reviewed by Sihui Liu.

        Previously to create a WritableStream as https://streams.spec.whatwg.org/#create-writable-stream,
        we were still going through the WritableStream constructor taking an underlying sink.
        We refactor code to stop doing that, which will make it easy to introduce https://streams.spec.whatwg.org/#writablestream-set-up
        which is now used in other web specifications.

        To do so, we introduce a createFromUnderlyingSink built-in function that creates a WritableStream from an InternalWritableStream.
        Covered by existing tests.

        * Modules/streams/StreamInternals.js:
        (extractHighWaterMark): Make sure extractHighWaterMark returns a number as WebIDL defines HWM as a double.
        * Modules/streams/WritableStream.cpp:
        (WebCore::WritableStream::create):
        * Modules/streams/WritableStream.h:
        * Modules/streams/WritableStreamInternals.js:
        (createWritableStream):
        (createInternalWritableStreamFromUnderlyingSink):
        * bindings/js/InternalWritableStream.cpp:
        (WebCore::InternalWritableStream::createFromUnderlyingSink):
        (WebCore::InternalWritableStream::fromObject):
        (WebCore::InternalWritableStream::create): Deleted.
        * bindings/js/InternalWritableStream.h:
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSC_DEFINE_HOST_FUNCTION):
        (WebCore::JSDOMGlobalObject::addBuiltinGlobals):
        * bindings/js/WebCoreBuiltinNames.h:

2021-09-14  Chris Dumez  <cdumez@apple.com>

        [Hardening] Validate IDBValue's blob paths in WebIDBServer::putOrAdd()
        https://bugs.webkit.org/show_bug.cgi?id=230233
        <rdar://79562514>

        Reviewed by Brady Eidson.

        Rename writeBlobsToTemporaryFiles() to writeBlobsToTemporaryFilesForIndexedDB() for clarity
        since it is currently only used for IndexedDB and we wouldn't want to expand usage to
        other things.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::SerializedScriptValue::writeBlobsToDiskForIndexedDB):
        * platform/network/BlobRegistry.h:
        * platform/network/BlobRegistryImpl.cpp:
        (WebCore::BlobRegistryImpl::writeBlobsToTemporaryFilesForIndexedDB):
        * platform/network/BlobRegistryImpl.h:

2021-09-14  Antti Koivisto  <antti@apple.com>

        Don't schedule text rendering updates for a non-rendered Document
        https://bugs.webkit.org/show_bug.cgi?id=230246
        rdar://81905586

        Reviewed by Anders Carlsson.

        Memory use could grow without limit as these updates would not get cleared until
        the document was destroyed.

        No test, hard to make a reasonable regression test as the memory growth is not extreme.

        * dom/Document.cpp:
        (WebCore::Document::updateTextRenderer):

        Bail out if the Document has no render tree.

2021-09-14  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] InlineDisplayContentBuilder should not operate on the global inline run list
        https://bugs.webkit.org/show_bug.cgi?id=230232

        Reviewed by Antti Koivisto.

        InlineDisplayContentBuilder builds one line worth of runs. It should not have access to the global (all runs in the formatting context) run list.

        * layout/formattingContexts/inline/InlineDisplayContentBuilder.cpp:
        (WebCore::Layout::InlineDisplayContentBuilder::build):
        (WebCore::Layout::InlineDisplayContentBuilder::createRunsAndUpdateGeometryForLineContent):
        (WebCore::Layout::InlineDisplayContentBuilder::createRunsAndUpdateGeometryForLineSpanningInlineBoxes):
        (WebCore::Layout::InlineDisplayContentBuilder::collectInkOverflowForInlineBoxRuns):
        * layout/formattingContexts/inline/InlineDisplayContentBuilder.h:
        * layout/formattingContexts/inline/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::computeGeometryForLineContent):
        * layout/formattingContexts/inline/InlineFormattingState.h:
        (WebCore::Layout::InlineFormattingState::addRuns):
        (WebCore::Layout::InlineFormattingState::addRun): Deleted.
        * layout/formattingContexts/inline/InlineLineRun.h:

2021-09-14  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GStreamer] Enable H265 codec
        https://bugs.webkit.org/show_bug.cgi?id=229920

        Reviewed by Philippe Normand.

        Check for H265 decoder and parser and add the corresponding
        variants.

        Test: media/media-can-play-h265-video.html

        * platform/graphics/gstreamer/GStreamerRegistryScanner.cpp:
        (WebCore::GStreamerRegistryScanner::initializeDecoders):

2021-09-14  Nikos Mouchtaris  <nmouchtaris@apple.com>

        Fix bug in calc functions sin/cos/tan
        https://bugs.webkit.org/show_bug.cgi?id=230133

        Reviewed by Myles Maxfield.

        WPTs added in seperate patch: https://bugs.webkit.org/show_bug.cgi?id=230129.

        * css/calc/CSSCalcOperationNode.cpp:
        (WebCore::CSSCalcOperationNode::simplifyNode):
        Fix bug where sin,cos,tan functions are applied twice when root.

2021-09-13  Simon Fraser  <simon.fraser@apple.com>

        Fix computed style for transform-origin on SVG boxes
        https://bugs.webkit.org/show_bug.cgi?id=230172

        Reviewed by Alan Bujtas.

        When getting the computed value for transform-origin on SVG boxes, we need to get
        the appropriate "reference box" from the renderer. Do minor refactoring to share
        code between rendering and computed style for SVG and non-SVG boxes.

        Tested by imported/w3c/web-platform-tests/css/css-transforms/transform-origin-014.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::transformReferenceBox):
        (WebCore::ComputedStyleExtractor::valueForPropertyInStyle):
        * rendering/RenderLayer.cpp:
        (WebCore::transformBoxToCSSBoxType): Deleted.
        * rendering/style/RenderStyleConstants.cpp:
        (WebCore::transformBoxToCSSBoxType):
        * rendering/style/RenderStyleConstants.h:
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::transformReferenceBox):
        * rendering/svg/SVGRenderSupport.h:
        * svg/SVGGraphicsElement.cpp:
        (WebCore::SVGGraphicsElement::animatedLocalTransform const):

2021-09-13  Chris Dumez  <cdumez@apple.com>

        [WK2] Reduce amount of IPC needed by BroadcastChannel
        https://bugs.webkit.org/show_bug.cgi?id=230181

        Reviewed by Alex Christensen.

        Introduce ScriptExecutionContext::ensureOnContextThread() which is similar to
        ScriptExecutionContext::postTaskTo() but doesn't call postTask() if we're already
        on the ScriptExecutionContext's context thread. Use it in BroadcastChannel::dispatchMessageTo()
        to avoid unnecessary thread hopping when the BroadcastChannel belongs to a Window
        environment.

        * dom/BroadcastChannel.cpp:
        (WebCore::BroadcastChannel::dispatchMessageTo):
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::ensureOnContextThread):
        * dom/ScriptExecutionContext.h:

2021-09-13  Jean-Yves Avenard  <jya@apple.com>

        Playback stops although the progress bar moves
        https://bugs.webkit.org/show_bug.cgi?id=230210
        rdar://81123838

        Reviewed by Eric Carlson.

        When playback has stalled due to insufficient data being buffered, the effective rate
        should be 0 as time is no longer progressing.
        While the GPU process would indicate that the rate has changed once the player has
        stalled, the effective rate reported would remain the same causing the current time
        position to continue moving as it's estimated based on the effective rate.
        This is also workaround rdar://83048005 which can report that the buffer is both
        full and empty at the same time.

        Fly-By fix: set the new rate in HTMLMediaElement if previously the requested rate
        is different.

        The buffering is handled by the AVPlayer and is dependent on network conditions making
        it difficult to test.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::updatePlaybackRate):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::playerItemStatus const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::effectiveRate const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::timeControlStatusDidChange):

2021-09-13  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] -toggleAutomaticSpellingCorrection: menu item validation shouldn't require post-layout editor state
        https://bugs.webkit.org/show_bug.cgi?id=230205

        Reviewed by Darin Adler.

        See WebKit ChangeLog for more details.

        * editing/AlternativeTextController.cpp:
        (WebCore::AlternativeTextController::canEnableAutomaticSpellingCorrection const):

        Slightly improve the performance of this method in the case where we're focusing a text field, by only
        consulting the host form control element, rather than both the form control and the contenteditable shadow root
        element.

2021-09-13  Andres Gonzalez  <andresg_22@apple.com>

        AX: set insertion point to the end of a native text control does not work when passing a collapsed TextMarkerRange with both start and end equals to the end TextMarker for the element.
        https://bugs.webkit.org/show_bug.cgi?id=230166

        Reviewed by Chris Fleizach.

        Test: accessibility/mac/native-text-control-set-selected-textmarker-range.html

        Added a special case to AX object's setSelectedVisiblePositionRange for
        when the passed range is a collapsed range to the end of a native text
        control element's range.
        To accomplish this, it is necessary to compare for equality two
        VisiblePositions obtained from TextMarkers.
        In order to reconstruct the VisiblePositions from the TextMarkers in a
        way that equality is preserved, the AnchorType of the underlying
        Position needs to be added to the TextMarkerData.

        * accessibility/AXObjectCache.cpp:
        Added the AnchorType to the TextMarkerData struct.
        (WebCore::AXObjectCache::visiblePositionForTextMarkerData):
        (WebCore::AXObjectCache::textMarkerDataForVisiblePosition):
        * accessibility/AXObjectCache.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::setSelectedVisiblePositionRange const):
        * accessibility/mac/AXObjectCacheMac.mm:
        Exposed textMarkerRangeFromMarkers.
        (WebCore::textMarkerRangeFromMarkers):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.h:
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        Added the AXTextMarkerRangeForTextMarkers attribute which, unlike
        AXTextMarkerRangeForUnorderedTextMarkers, assumes that the range's start
        and end are ordered, and thus is more efficient.
        (-[WebAccessibilityObjectWrapper ALLOW_DEPRECATED_IMPLEMENTATIONS_END]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]):

2021-09-13  Chris Dumez  <cdumez@apple.com>

        Relax BroadcastChannel origin partitioning if iframe has storage access
        https://bugs.webkit.org/show_bug.cgi?id=230164

        Reviewed by Alex Christensen.

        In r282105, we started partitioning origins for BroadcastChannel using topOrigin/frameOrigin.
        This prevents a topFrame of origin A to message a subframe of origin A if that subframe if under
        another domain B. However, the `document.requestStorageAccess()` API exists to relax storage
        partitioning and Gecko relies on this to relax BroadcastChannel origin partitioning as well.
        This patch aligns WebKit's behavior with Gecko.

        Test: http/tests/messaging/broadcastchannel-partitioning-with-storage-access.html

        * dom/BroadcastChannel.cpp:
        (WebCore::shouldPartitionOrigin):
        (WebCore::BroadcastChannel::MainThreadBridge::create):
        (WebCore::BroadcastChannel::MainThreadBridge::name const):
        (WebCore::BroadcastChannel::MainThreadBridge::identifier const):
        (WebCore::BroadcastChannel::MainThreadBridge::MainThreadBridge):
        (WebCore::BroadcastChannel::MainThreadBridge::ensureOnMainThread):
        (WebCore::BroadcastChannel::MainThreadBridge::registerChannel):
        (WebCore::BroadcastChannel::MainThreadBridge::unregisterChannel):
        (WebCore::BroadcastChannel::MainThreadBridge::postMessage):
        (WebCore::BroadcastChannel::BroadcastChannel):
        (WebCore::BroadcastChannel::~BroadcastChannel):
        (WebCore::BroadcastChannel::identifier const):
        (WebCore::BroadcastChannel::name const):
        (WebCore::BroadcastChannel::postMessage):
        (WebCore::BroadcastChannel::close):
        (WebCore::BroadcastChannel::dispatchMessage):
        * dom/BroadcastChannel.h:
        * page/ChromeClient.h:
        (WebCore::ChromeClient::hasPageLevelStorageAccess const):

2021-09-13  Youenn Fablet  <youenn@apple.com>

        Fire RTCPeerConnection.signalstatechange as per spec
        https://bugs.webkit.org/show_bug.cgi?id=230093

        Reviewed by Eric Carlson.

        Instead of using the built-in OnSignalingChange mechanism, we only update when setting descriptions.
        As per spec, we fire the event before other tracks related events in case of setting remote description.
        Covered by existing and updated tests.

        * Modules/mediastream/PeerConnectionBackend.cpp:
        (WebCore::PeerConnectionBackend::setRemoteDescriptionSucceeded):
        * Modules/mediastream/PeerConnectionBackend.h:
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::setSignalingState):
        (WebCore::RTCPeerConnection::updateDescriptions):
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::OnSignalingChange):
        (WebCore::toRTCSignalingState):
        (WebCore::descriptionsFromPeerConnection):
        (WebCore::LibWebRTCMediaEndpoint::setLocalSessionDescriptionSucceeded):
        (WebCore::LibWebRTCMediaEndpoint::setRemoteSessionDescriptionSucceeded):

2021-09-13  Sihui Liu  <sihui_liu@apple.com>

        Add stub for File System Access API
        https://bugs.webkit.org/show_bug.cgi?id=230101

        Reviewed by Youenn Fablet.

        Add some bindings code and a feature flag for File System Access API.
        Spec: https://wicg.github.io/file-system-access/

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Headers.cmake:
        * Modules/filesystemaccess/FileSystemDirectoryHandle.cpp: Added.
        (WebCore::FileSystemDirectoryHandle::create):
        (WebCore::FileSystemDirectoryHandle::FileSystemDirectoryHandle):
        (WebCore::FileSystemDirectoryHandle::getFileHandle):
        (WebCore::FileSystemDirectoryHandle::getDirectoryHandle):
        (WebCore::FileSystemDirectoryHandle::removeEntry):
        (WebCore::FileSystemDirectoryHandle::resolve):
        * Modules/filesystemaccess/FileSystemDirectoryHandle.h: Copied from Source/WebCore/Modules/storage/StorageManager.h.
        * Modules/filesystemaccess/FileSystemDirectoryHandle.idl: Copied from Source/WebCore/Modules/storage/StorageManager.h.
        * Modules/filesystemaccess/FileSystemFileHandle.cpp: Copied from Source/WebCore/Modules/storage/StorageManager.h.
        (WebCore::FileSystemFileHandle::create):
        (WebCore::FileSystemFileHandle::FileSystemFileHandle):
        (WebCore::FileSystemFileHandle::getFile):
        * Modules/filesystemaccess/FileSystemFileHandle.h: Copied from Source/WebCore/Modules/storage/StorageManager.h.
        * Modules/filesystemaccess/FileSystemFileHandle.idl: Copied from Source/WebCore/Modules/storage/StorageManager.h.
        * Modules/filesystemaccess/FileSystemHandle.cpp: Copied from Source/WebCore/Modules/storage/StorageManager.h.
        (WebCore::FileSystemHandle::FileSystemHandle):
        (WebCore::FileSystemHandle::isSameEntry):
        * Modules/filesystemaccess/FileSystemHandle.h: Copied from Source/WebCore/Modules/storage/StorageManager.h.
        (WebCore::FileSystemHandle::kind const):
        (WebCore::FileSystemHandle::name const):
        * Modules/filesystemaccess/FileSystemHandle.idl: Copied from Source/WebCore/Modules/storage/StorageManager.h.
        * Modules/filesystemaccess/StorageManager+FileSystemAccess.idl: Copied from Source/WebCore/Modules/storage/StorageManager.h.
        * Modules/filesystemaccess/StorageManagerFileSystemAccess.h: Copied from Source/WebCore/Modules/storage/StorageManager.h.
        (WebCore::StorageManagerFileSystemAccess::getDirectory):
        * Modules/permissions/PermissionDescriptor.h:
        * Modules/storage/StorageManager.cpp:
        (WebCore::StorageManager::fileSystemAccessGetDirectory):
        * Modules/storage/StorageManager.h:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:

2021-09-13  Joonghun Park  <jh718.park@samsung.com>

        transform-origin should not accept 4 lengths
        https://bugs.webkit.org/show_bug.cgi?id=186965

        transform-origin accepts 1, 2, or 3 values per the spec below.
        https://drafts.csswg.org/css-transforms/#propdef-transform-origin

        Reviewed by Simon Fraser.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::consumeTransformOrigin):

2021-09-13  Tyler Wilcock  <tyler_w@apple.com>

        AX: Make PDFs loaded via <embed> accessible
        https://bugs.webkit.org/show_bug.cgi?id=229556

        Reviewed by Chris Fleizach and Andres Gonzalez.

        This patch makes PDFs loaded in `<embed>` elements accessible to
        clients by exposing the underlying `WKPDFPluginAccessibilityObject`
        created by PDF plugins.

        Full-frame PDF accessibility support (e.g. file:///path/to/example.pdf) was
        implemented in https://bugs.webkit.org/show_bug.cgi?id=170589, but this
        wasn't sufficient for PDFs loaded in `<embed>`s.

        This patch only implements `<embed>` PDF support for Mac - iOS support will
        need to follow in a separate patch.

        Test: accessibility/mac/basic-embed-pdf-accessibility.html

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::getOrCreate):
        Change comment that suggests PluginViewBase Widgets are not supported,
        because they are now.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isAttachment const):
        Don't consider plugins to be attachments since they need to be handled
        differently.
        (WebCore::AccessibilityRenderObject::computeAccessibilityIsIgnored const):
        Don't ignore widgets with underlying accessibilty objects (such as PDF
        plugins).

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper renderWidgetChildren]):
        Extract underlying accessibility object from widgets that have one.
        (-[WebAccessibilityObjectWrapper accessibilityHitTest:]):
        Forward hit test to underlying plugin accessibility object if one
        exists.
        (isMatchingPlugin): Added.
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]):
        Match `renderWidgetChildren` for searches with `SearchKey::AnyType`
        criteria.

        * platform/Widget.h:
        (WebCore::Widget::accessibilityHitTest const): Added this virtual
        method.
        (WebCore::Widget::accessibilityObject const): Added this virtual
        method.

2021-09-13  Sam Sneddon  <gsnedders@apple.com>

        Move ENABLE_RESOLUTION_MEDIA_QUERY to a runtime flag, start running tests again
        https://bugs.webkit.org/show_bug.cgi?id=229776

        Reviewed by Simon Fraser.

        No new tests, unskipped & rebaselined existing tests.

        * css/CSSUnits.cpp:
        (WebCore::canonicalUnitTypeForCategory):
        * css/MediaList.cpp:
        Fix compilation with resolution enabled.
        (WebCore::addResolutionWarningMessageToConsole):
        Simplify code generating message.
        (WebCore::reportMediaQueryWarningIfNeeded):
        * css/MediaList.h:
        (WebCore::reportMediaQueryWarningIfNeeded): Deleted.
        * css/MediaQueryEvaluator.cpp:
        (WebCore::resolutionEvaluate):

2021-09-13  Johnson Zhou  <qiaosong_zhou@apple.com>

        Addition of CSSNumericValue and subclasses. (CSS Typed OM)
        https://bugs.webkit.org/show_bug.cgi?id=230031

        Reviewed by Alex Christensen.

        * WebCore.xcodeproj/project.pbxproj:
        * css/typedom/CSSKeywordValue.h:
        * css/typedom/CSSNumericValue.cpp:
        (WebCore::CSSNumericValue::add):
        (WebCore::CSSNumericValue::sub):
        (WebCore::CSSNumericValue::mul):
        (WebCore::CSSNumericValue::div):
        (WebCore::CSSNumericValue::min):
        (WebCore::CSSNumericValue::max):
        (WebCore::CSSNumericValue::rectifyNumberish):
        (WebCore::CSSNumericValue::equals):
        (WebCore::CSSNumericValue::to):
        (WebCore::CSSNumericValue::toSum):
        (WebCore::CSSNumericValue::type):
        (WebCore::CSSNumericValue::parse):
        * css/typedom/CSSNumericValue.h:
        * css/typedom/CSSNumericValue.idl:
        * css/typedom/numeric/CSSMathInvert.cpp:
        (WebCore::CSSMathInvert::create):
        (WebCore::CSSMathInvert::CSSMathInvert):
        * css/typedom/numeric/CSSMathInvert.h:
        (isType):
        * css/typedom/numeric/CSSMathMax.cpp:
        (WebCore::CSSMathMax::create):
        (WebCore::CSSMathMax::CSSMathMax):
        (WebCore::CSSMathMax::values):
        * css/typedom/numeric/CSSMathMax.h:
        (isType):
        (WebCore::CSSMathMax::values): Deleted.
        * css/typedom/numeric/CSSMathMin.cpp:
        (WebCore::CSSMathMin::create):
        (WebCore::CSSMathMin::CSSMathMin):
        (WebCore::CSSMathMin::values):
        * css/typedom/numeric/CSSMathMin.h:
        (isType):
        (WebCore::CSSMathMin::values): Deleted.
        * css/typedom/numeric/CSSMathMin.idl:
        * css/typedom/numeric/CSSMathNegate.cpp:
        (WebCore::CSSMathNegate::create):
        (WebCore::CSSMathNegate::CSSMathNegate):
        * css/typedom/numeric/CSSMathNegate.h:
        (isType):
        * css/typedom/numeric/CSSMathOperator.cpp:
        * css/typedom/numeric/CSSMathOperator.h:
        * css/typedom/numeric/CSSMathProduct.cpp:
        (WebCore::CSSMathProduct::create):
        (WebCore::CSSMathProduct::CSSMathProduct):
        (WebCore::CSSMathProduct::values):
        * css/typedom/numeric/CSSMathProduct.h:
        (isType):
        (WebCore::CSSMathProduct::values): Deleted.
        * css/typedom/numeric/CSSMathSum.cpp:
        (WebCore::CSSMathSum::create):
        (WebCore::CSSMathSum::CSSMathSum):
        (WebCore::CSSMathSum::values):
        * css/typedom/numeric/CSSMathSum.h:
        (isType):
        (WebCore::CSSMathSum::values): Deleted.
        * css/typedom/numeric/CSSMathValue.cpp:
        (WebCore::CSSMathValue::CSSMathValue):
        * css/typedom/numeric/CSSMathValue.h:
        (WebCore::CSSMathValue::getOperator const):
        (isType):
        * css/typedom/numeric/CSSNumericArray.cpp:
        (WebCore::CSSNumericArray::create):
        (WebCore::CSSNumericArray::CSSNumericArray):
        * css/typedom/numeric/CSSNumericArray.h:
        * css/typedom/numeric/CSSNumericBaseType.cpp: Copied from Source/WebCore/css/typedom/numeric/CSSMathMin.cpp.
        * css/typedom/numeric/CSSNumericType.cpp: Copied from Source/WebCore/css/typedom/numeric/CSSMathMin.cpp.
        * css/typedom/numeric/CSSNumericType.idl:

2021-09-13  Fujii Hironori  <Hironori.Fujii@sony.com>

        REGRESSION(r282278): ASSERTION FAILED: !m_needExceptionCheck in JSC::VM::verifyExceptionCheckNeedIsSatisfied
        https://bugs.webkit.org/show_bug.cgi?id=230208

        Reviewed by Youenn Fablet.

        r282278 introduced a new assertion failure for
        js/dom/transform-stream.html in WinCairo Debug WK2.

        JSObject::get throws an simulated exception. DECLARE_THROW_SCOPE
        failed the assertion after that.

        * bindings/js/InternalWritableStream.cpp:
        (WebCore::invokeWritableStreamFunction): Removed
        DECLARE_THROW_SCOPE because this function doesn't throw. Added
        DECLARE_CATCH_SCOPE to use assertNoExceptionExceptTermination
        after JSObject::get.

2021-09-13  Alan Bujtas  <zalan@apple.com>

        [LFC] Rename LayoutState::established*FormattingState to formattingStateFor*FormattingContext
        https://bugs.webkit.org/show_bug.cgi?id=229263
        <rdar://problem/82365067>

        Reviewed by Antti Koivisto.

        Stop using "established" when asking for the state object associated with a formatting context. 
        The spec term, "established", is used to indicate that a particular node in the layout tree forces a set of formatting rules on its descendants.
        This terms works well in the context of forming formatting contexts. However the corresponding (persistent)formatting states are not "established" in the same sense.

        * display/DisplayTreeBuilder.cpp:
        (WebCore::Display::TreeBuilder::buildInlineDisplayTree):
        * layout/FormattingState.cpp:
        (WebCore::Layout::FormattingState::boxGeometry):
        * layout/LayoutState.cpp:
        (WebCore::Layout::LayoutState::formattingStateForBox const):
        (WebCore::Layout::LayoutState::formattingStateForFormattingContext const):
        (WebCore::Layout::LayoutState::formattingStateForInlineFormattingContext const):
        (WebCore::Layout::LayoutState::formattingStateForBlockFormattingContext const):
        (WebCore::Layout::LayoutState::formattingStateForTableFormattingContext const):
        (WebCore::Layout::LayoutState::formattingStateForFlexFormattingContext const):
        (WebCore::Layout::LayoutState::ensureInlineFormattingState):
        (WebCore::Layout::LayoutState::establishedFormattingState const): Deleted.
        (WebCore::Layout::LayoutState::establishedInlineFormattingState const): Deleted.
        (WebCore::Layout::LayoutState::establishedBlockFormattingState const): Deleted.
        (WebCore::Layout::LayoutState::establishedTableFormattingState const): Deleted.
        (WebCore::Layout::LayoutState::establishedFlexFormattingState const): Deleted.
        * layout/LayoutState.h:
        * layout/Verification.cpp:
        (WebCore::Layout::outputMismatchingComplexLineInformationIfNeeded):
        * layout/formattingContexts/FormattingGeometry.cpp:
        (WebCore::Layout::FormattingGeometry::computedWidthValue const):
        (WebCore::Layout::FormattingGeometry::shrinkToFitWidth const):
        (WebCore::Layout::FormattingGeometry::complicatedCases const):
        * layout/formattingContexts/block/BlockFormattingGeometry.cpp:
        (WebCore::Layout::BlockFormattingGeometry::inFlowNonReplacedContentHeightAndMargin const):
        * layout/formattingContexts/block/BlockMarginCollapse.cpp:
        (WebCore::Layout::BlockMarginCollapse::marginsCollapseThrough const):
        * layout/formattingContexts/block/tablewrapper/TableWrapperBlockFormattingContext.cpp:
        (WebCore::Layout::TableWrapperBlockFormattingContext::computeBorderAndPaddingForTableBox):
        (WebCore::Layout::TableWrapperBlockFormattingContext::computeWidthAndMarginForTableBox):
        * layout/formattingContexts/inline/InlineLineBoxBuilder.cpp:
        (WebCore::Layout::LineBoxBuilder::constructAndAlignInlineLevelBoxes):
        * layout/formattingContexts/table/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::setUsedGeometryForCells):
        * layout/formattingContexts/table/TableFormattingGeometry.cpp:
        (WebCore::Layout::TableFormattingGeometry::usedBaselineForCell const):
        * layout/layouttree/LayoutTreeBuilder.cpp:
        (WebCore::Layout::showInlineTreeAndRuns):

2021-09-13  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Do not pass in the InvalidationState to the layout functions
        https://bugs.webkit.org/show_bug.cgi?id=229221
        <rdar://problem/82321574>

        Reviewed by Antti Koivisto.

        This is in preparation for introducing formatting context specific invalidation.
        Each type of formatting context may require a very different invalidation logic. While BFC could mark whole subtrees dirty, IFC's invalidation logic should be looking at lines instead.
        The invalidation code (triggered by style/content change) produces a "damage state" which is input to the FormattingContext construction
        the same way we pass in the FormattingState 
        (i.e. FormattinContext takes the root of the formatting subtree (the extent of the formatting context), the damaged state (how much we need to layout in this frame) and the formatting state (the data we can use from previous layout))

        * CMakeLists.txt:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * layout/LayoutContext.cpp:
        (WebCore::Layout::LayoutContext::layout):
        (WebCore::Layout::LayoutContext::layoutFormattingContextSubtree):
        (WebCore::Layout::LayoutContext::layoutWithPreparedRootGeometry): Deleted.
        * layout/LayoutContext.h:
        * layout/formattingContexts/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::layoutOutOfFlowContent):
        * layout/formattingContexts/FormattingContext.h:
        * layout/formattingContexts/block/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::layoutInFlowContent):
        * layout/formattingContexts/block/BlockFormattingContext.h:
        * layout/formattingContexts/block/tablewrapper/TableWrapperBlockFormattingContext.cpp:
        (WebCore::Layout::TableWrapperBlockFormattingContext::layoutInFlowContent):
        (WebCore::Layout::TableWrapperBlockFormattingContext::layoutTableBox):
        * layout/formattingContexts/block/tablewrapper/TableWrapperBlockFormattingContext.h:
        * layout/formattingContexts/flex/FlexFormattingContext.cpp:
        (WebCore::Layout::FlexFormattingContext::layoutInFlowContent):
        (WebCore::Layout::FlexFormattingContext::sizeAndPlaceFlexItems):
        * layout/formattingContexts/flex/FlexFormattingContext.h:
        * layout/formattingContexts/inline/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::layoutInFlowContent):
        (WebCore::Layout::InlineFormattingContext::lineLayoutForIntergration):
        (WebCore::Layout::InlineFormattingContext::invalidateFormattingState):
        * layout/formattingContexts/inline/InlineFormattingContext.h:
        * layout/formattingContexts/table/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::layoutInFlowContent):
        (WebCore::Layout::TableFormattingContext::setUsedGeometryForCells):
        (WebCore::Layout::TableFormattingContext::computeAndDistributeExtraSpace):
        * layout/formattingContexts/table/TableFormattingContext.h:
        * layout/integration/LayoutIntegrationLineLayout.cpp:
        (WebCore::LayoutIntegration::LineLayout::layout):
        * layout/invalidation/InvalidationContext.cpp: Removed.
        * layout/invalidation/InvalidationContext.h: Removed.
        * layout/invalidation/InvalidationState.cpp: Removed.
        * layout/invalidation/InvalidationState.h: Removed.
        * layout/layouttree/LayoutTreeBuilder.cpp:
        (WebCore::Layout::printLayoutTreeForLiveDocuments):
        * page/FrameViewLayoutContext.cpp:
        (WebCore::FrameViewLayoutContext::layoutUsingFormattingContext):

2021-09-13  Youenn Fablet  <youenn@apple.com>

        Remove WritableStream runtime flag
        https://bugs.webkit.org/show_bug.cgi?id=230148

        Reviewed by Sihui Liu.

        WritableStream is enabled in all platforms and is mirroring ReadableStream which no longer has a runtime flag.

        No change of behavior.

        * Modules/streams/ReadableStream.js:
        (pipeThrough):
        (pipeTo):
        (pipeTo.doPipe): Deleted.
        (pipeTo.closeDestination): Deleted.
        (pipeTo.abortDestination): Deleted.
        * Modules/streams/WritableStream.idl:
        * Modules/streams/WritableStreamDefaultController.idl:
        * Modules/streams/WritableStreamDefaultWriter.idl:
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::addBuiltinGlobals):
        * bindings/js/WebCoreBuiltinNames.h:
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::readableByteStreamAPIEnabled const):
        (WebCore::RuntimeEnabledFeatures::setWritableStreamAPIEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::writableStreamAPIEnabled const): Deleted.

2021-09-13  Ziran Sun  <zsun@igalia.com>

        [css-grid] calling correct offset function for RTL for out of flow child
        https://bugs.webkit.org/show_bug.cgi?id=229968

        Reviewed by Javier Fernandez.

        Handle RTL case to return the correct border values when calculating offsets for start and end edges
        of a column for out of flow child.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::gridAreaPositionForOutOfFlowChild const):

2021-09-13  Antti Koivisto  <antti@apple.com>

        Expose TextBoxSelectableRange in the iterator
        https://bugs.webkit.org/show_bug.cgi?id=230213

        Reviewed by Alan Bujtas.

        Replace isSelectable with more generic TextBoxSelectableRange accessor.
        This will be helpful in the future.

        * layout/integration/LayoutIntegrationRunIterator.h:
        (WebCore::LayoutIntegration::PathTextRun::selectableRange const):
        (WebCore::LayoutIntegration::PathTextRun::isSelectable const): Deleted.
        * layout/integration/LayoutIntegrationRunIteratorLegacyPath.h:
        (WebCore::LayoutIntegration::RunIteratorLegacyPath::selectableRange const):
        (WebCore::LayoutIntegration::RunIteratorLegacyPath::isSelectable const): Deleted.
        * layout/integration/LayoutIntegrationRunIteratorModernPath.h:
        (WebCore::LayoutIntegration::RunIteratorModernPath::selectableRange const):
        (WebCore::LayoutIntegration::RunIteratorModernPath::isSelectable const): Deleted.
        * rendering/LegacyInlineTextBox.cpp:
        (WebCore::LegacyInlineTextBox::isSelectable const): Deleted.
        * rendering/LegacyInlineTextBox.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::inlineSelectionGaps):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::absoluteQuadsForRange const):

2021-09-13  Antti Koivisto  <antti@apple.com>

        Remove redundant copy of visibleToHitTesting function
        https://bugs.webkit.org/show_bug.cgi?id=230212

        Reviewed by Alan Bujtas.

        Remove the LegacyInlineBox version.

        * layout/integration/LayoutIntegrationLineLayout.cpp:
        (WebCore::LayoutIntegration::LineLayout::hitTest):

        Also use visibleToHitTesting here.

        * rendering/LegacyEllipsisBox.cpp:
        (WebCore::LegacyEllipsisBox::nodeAtPoint):
        * rendering/LegacyInlineBox.h:
        * rendering/LegacyInlineFlowBox.cpp:
        (WebCore::LegacyInlineFlowBox::nodeAtPoint):
        * rendering/LegacyInlineTextBox.cpp:
        (WebCore::LegacyInlineTextBox::nodeAtPoint):
        * rendering/LegacyRootInlineBox.cpp:
        (WebCore::LegacyRootInlineBox::nodeAtPoint):
        * rendering/TextBoxPainter.cpp:
        (WebCore::TextBoxPainter::paint):

2021-09-13  Antti Koivisto  <antti@apple.com>

        LegacyInlineTextBox::selectionState accessor mutates ellipsis selection state
        https://bugs.webkit.org/show_bug.cgi?id=205528
        <rdar://problem/58125978>

        Reviewed by Alan Bujtas.

        An accessor shouldn't mutate state.

        * rendering/LegacyEllipsisBox.cpp:
        (WebCore::LegacyEllipsisBox::paintSelection):

        Also position ellipsis selection correctly when painting.

        (WebCore::LegacyEllipsisBox::nodeAtPoint):
        (WebCore::LegacyEllipsisBox::selectionState const):
        * rendering/LegacyEllipsisBox.h:
        * rendering/LegacyInlineTextBox.cpp:
        (WebCore::LegacyInlineTextBox::selectionState const):

        Compute the selection state of the ellipsis box by looking at the selection state of the
        last text box on the line.

        * rendering/LegacyRootInlineBox.cpp:
        (WebCore::LegacyRootInlineBox::lineSelectionGap):
        (WebCore::LegacyRootInlineBox::firstSelectedBox const):
        (WebCore::LegacyRootInlineBox::lastSelectedBox const):
        (WebCore::LegacyRootInlineBox::firstSelectedBox): Deleted.
        (WebCore::LegacyRootInlineBox::lastSelectedBox): Deleted.
        * rendering/LegacyRootInlineBox.h:

2021-09-13  Kimmo Kinnunen  <kkinnunen@apple.com>

        image-rendering: pixelated does not work with WebGL (but does with Canvas2D)
        https://bugs.webkit.org/show_bug.cgi?id=193895
        <rdar://problem/47656086>

        Reviewed by Simon Fraser.

        Implement image-rendering: crisp-edges for WebGL canvas elements
        normal on-screen compositing code path on Cocoa by using CA layer filtering
        properties.

        Similar to non-compositing code path, approximate image-rendering: pixelated
        by making it an alias of crisp-edges.

        Test: webgl/webgl-image-rendering.html

        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::setContentsMinificationFilter):
        (WebCore::GraphicsLayer::contentsMinificationFilter const):
        (WebCore::GraphicsLayer::setContentsMagnificationFilter):
        (WebCore::GraphicsLayer::contentsMagnificationFilter const):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::toPlatformCALayerFilterType):
        (WebCore::GraphicsLayerCA::setContentsMinificationFilter):
        (WebCore::GraphicsLayerCA::setContentsMagnificationFilter):
        (WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers):
        (WebCore::GraphicsLayerCA::updateContentsScalingFilters):
        (WebCore::GraphicsLayerCA::updateContentsPlatformLayer):
        (WebCore::GraphicsLayerCA::layerChangeAsString):
        * platform/graphics/ca/GraphicsLayerCA.h:
        * rendering/RenderHTMLCanvas.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::createPrimaryGraphicsLayer):
        (WebCore::RenderLayerBacking::updateContentsScalingFilters):
        (WebCore::RenderLayerBacking::updateConfigurationAfterStyleChange):
        (WebCore::RenderLayerBacking::updateGeometry):
        (WebCore::RenderLayerBacking::paintIntoLayer):
        * rendering/RenderLayerBacking.h:

2021-09-13  Alan Bujtas  <zalan@apple.com>

        [LFC] Remove redundant LayoutState::ensureFormattingState
        https://bugs.webkit.org/show_bug.cgi?id=229259

        Reviewed by Antti Koivisto.

        * layout/LayoutState.cpp:
        (WebCore::Layout::LayoutState::ensureInlineFormattingState): No need to call ensure*. There has to be a parent formatting state at this point.
        (WebCore::Layout::LayoutState::ensureFormattingState): Deleted.
        * layout/LayoutState.h:

2021-09-13  Diego Pino Garcia  <dpino@igalia.com>

        Unreviewed build fix for Ubuntu LTS/Debian r282270 

        * rendering/LegacyInlineTextBox.h:

2021-09-12  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add scrollable overflow to LineGeometry
        https://bugs.webkit.org/show_bug.cgi?id=230200

        Reviewed by Antti Koivisto.

        This is in preparation for making the integration line structure redundant.
        (LineGeometry should be able to contain all the geometry information required for layout/paint/hittest).

        * layout/formattingContexts/inline/InlineLineBoxBuilder.cpp:
        (WebCore::Layout::LineBoxBuilder::build):
        * layout/formattingContexts/inline/InlineLineGeometry.h:
        (WebCore::Layout::LineGeometry::scrollableOverflow const):
        (WebCore::Layout::LineGeometry::LineGeometry):
        * layout/integration/LayoutIntegrationInlineContentBuilder.cpp:
        (WebCore::LayoutIntegration::lineOverflowWidth):
        (WebCore::LayoutIntegration::InlineContentBuilder::InlineContentBuilder):
        (WebCore::LayoutIntegration::InlineContentBuilder::createDisplayLines const):
        * layout/integration/LayoutIntegrationInlineContentBuilder.h:
        * layout/integration/LayoutIntegrationLineLayout.cpp:
        (WebCore::LayoutIntegration::LineLayout::constructContent):

2021-09-12  Simon Fraser  <simon.fraser@apple.com>

        Implement getClientRects() for SVG elements
        https://bugs.webkit.org/show_bug.cgi?id=230197

        Reviewed by Sam Weinig.

        For SVG elements we can just use absoluteQuads().

        Test: svg/custom/getClientRects.xhtml

        * dom/Element.cpp:
        (WebCore::Element::getClientRects):

2021-09-11  Simon Fraser  <simon.fraser@apple.com>

        css/css-transforms/translate-getComputedStyle.html fails
        https://bugs.webkit.org/show_bug.cgi?id=230178

        Reviewed by Antti Koivisto.
        
        https://drafts.csswg.org/css-transforms-2/#propdef-translate says that the computed value of
        the translate property is "the keyword none or a pair of computed <length-percentage> values
        and an absolute length" and has a note saying "Note: The resolved value of the translate
        property is the computed value, and thus getComputedStyle() includes percentage values in
        its results." so implement that.

        Tested by imported/w3c/web-platform-tests/css/css-transforms/translate-getComputedStyle.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::computedTranslate):

2021-09-11  Antti Koivisto  <antti@apple.com>

        Move rest of the LegacyInlineTextBox painting code to TextBoxPainter
        https://bugs.webkit.org/show_bug.cgi?id=230188

        Reviewed by Alan Bujtas.

        Move the remaining painting code.

        * rendering/LegacyEllipsisBox.h:
        * rendering/LegacyInlineBox.cpp:
        (WebCore::LegacyInlineBox::selectionState const):
        (WebCore::LegacyInlineBox::selectionState): Deleted.
        * rendering/LegacyInlineBox.h:
        * rendering/LegacyInlineFlowBox.cpp:
        (WebCore::LegacyInlineFlowBox::selectionState const):
        (WebCore::LegacyInlineFlowBox::selectionState): Deleted.
        * rendering/LegacyInlineFlowBox.h:
        * rendering/LegacyInlineTextBox.cpp:
        (WebCore::LegacyInlineTextBox::selectionState const):
        (WebCore::LegacyInlineTextBox::paint):
        (WebCore::LegacyInlineTextBox::selectionState): Deleted.
        (WebCore::createMarkedTextFromSelectionInBox): Deleted.
        * rendering/LegacyInlineTextBox.h:
        * rendering/LegacyRootInlineBox.cpp:
        (WebCore::LegacyRootInlineBox::selectionState const):
        (WebCore::LegacyRootInlineBox::selectionState): Deleted.
        * rendering/LegacyRootInlineBox.h:
        * rendering/MarkedText.cpp:
        (WebCore::MarkedText::collectForHighlights):
        * rendering/MarkedText.h:
        * rendering/TextBoxPainter.cpp:
        (WebCore::TextBoxPainter::TextBoxPainter):
        (WebCore::TextBoxPainter::~TextBoxPainter):
        (WebCore::TextBoxPainter::paint):
        (WebCore::createMarkedTextFromSelectionInBox):
        (WebCore::TextBoxPainter::paintBackground):
        (WebCore::TextBoxPainter::paintForegroundAndDecorations):
        (WebCore::TextBoxPainter::paintForeground):
        (WebCore::TextBoxPainter::paintDecoration):
        (WebCore::TextBoxPainter::paintCompositionUnderline):
        (WebCore::TextBoxPainter::paintPlatformDocumentMarker):
        (WebCore::TextBoxPainter::computePaintRect):
        * rendering/TextBoxPainter.h:

2021-09-11  Philippe Normand  <pnormand@igalia.com>

        [GLIB] MediaSession is not enabled
        https://bugs.webkit.org/show_bug.cgi?id=217991
        <rdar://problem/70740119>

        Reviewed by Michael Catanzaro.

        Implementation of a GLib MediaSessionManager, able to provide a MPRIS DBus service, so that
        third-party host tools can query the media playback status and potentially emit remote
        control commands as well.

        Covered by media-session layout tests now unskipped.

        * Modules/mediasession/MediaImage.h:
        * Modules/mediasession/MediaSession.cpp:
        (WebCore::logChannel):
        (WebCore::logClassName):
        * Modules/mediasession/MediaSession.h:
        * PlatformGTK.cmake:
        * PlatformWPE.cmake:
        * platform/LogInitialization.cpp:
        (WebCore::getLogChannel):
        * platform/PlatformScreen.h:
        * platform/RemoteCommandListener.cpp:
        (WebCore::RemoteCommandListener::resetCreationFunction):
        * platform/SourcesGLib.txt:
        * platform/audio/PlatformMediaSessionManager.cpp:
        * platform/audio/glib/MediaSessionManagerGLib.cpp: Added.
        (WebCore::PlatformMediaSessionManager::create):
        (WebCore::MediaSessionManagerGLib::MediaSessionManagerGLib):
        (WebCore::MediaSessionManagerGLib::~MediaSessionManagerGLib):
        (WebCore::getCommand):
        (WebCore::handleMethodCall):
        (WebCore::getProperty):
        (WebCore::handleGetProperty):
        (WebCore::handleSetProperty):
        (WebCore::MediaSessionManagerGLib::setupMpris):
        (WebCore::MediaSessionManagerGLib::busAcquired):
        (WebCore::MediaSessionManagerGLib::nameLost):
        (WebCore::MediaSessionManagerGLib::beginInterruption):
        (WebCore::MediaSessionManagerGLib::scheduleSessionStatusUpdate):
        (WebCore::MediaSessionManagerGLib::sessionWillBeginPlayback):
        (WebCore::MediaSessionManagerGLib::sessionDidEndRemoteScrubbing):
        (WebCore::MediaSessionManagerGLib::addSession):
        (WebCore::MediaSessionManagerGLib::removeSession):
        (WebCore::MediaSessionManagerGLib::setCurrentSession):
        (WebCore::MediaSessionManagerGLib::sessionWillEndPlayback):
        (WebCore::MediaSessionManagerGLib::sessionStateChanged):
        (WebCore::MediaSessionManagerGLib::clientCharacteristicsChanged):
        (WebCore::MediaSessionManagerGLib::sessionCanProduceAudioChanged):
        (WebCore::MediaSessionManagerGLib::addSupportedCommand):
        (WebCore::MediaSessionManagerGLib::removeSupportedCommand):
        (WebCore::MediaSessionManagerGLib::nowPlayingEligibleSession):
        (WebCore::MediaSessionManagerGLib::updateNowPlayingInfo):
        (WebCore::MediaSessionManagerGLib::getPlaybackStatusAsGVariant):
        (WebCore::MediaSessionManagerGLib::getActiveSessionPosition):
        (WebCore::MediaSessionManagerGLib::dispatch):
        (WebCore::MediaSessionManagerGLib::emitPropertiesChanged):
        * platform/audio/glib/MediaSessionManagerGLib.h: Added.
        (WebCore::MediaSessionManagerGLib::nameAcquired):
        (WebCore::MediaSessionManagerGLib::getMetadataAsGVariant const):
        (WebCore::MediaSessionManagerGLib::providePresentingApplicationPIDIfNecessary):
        * platform/glib/ApplicationGLib.cpp: Added.
        (WebCore::setApplicationName):
        (WebCore::getApplicationName):
        (WebCore::setApplicationID):
        (WebCore::getApplicationID):
        * platform/glib/ApplicationGLib.h: Added.
        * platform/glib/RemoteCommandListenerGLib.cpp: Added.
        (WebCore::RemoteCommandListenerGLib::create):
        (WebCore::RemoteCommandListenerGLib::updateSupportedCommands):
        (WebCore::RemoteCommandListenerGLib::RemoteCommandListenerGLib):
        * platform/glib/RemoteCommandListenerGLib.h: Added.
        * platform/graphics/ImageFrame.h:
        * platform/graphics/ImageOrientation.h:

2021-09-10  Alan Bujtas  <zalan@apple.com>

        [Legacy Line Layout] Do not integral round the root inlinebox's top position
        https://bugs.webkit.org/show_bug.cgi?id=227751
        <rdar://problem/80584346>

        Reviewed by Antti Koivisto.

        Pixel (in this case integral) snapping should be reserved for paint time only.

        * layout/formattingContexts/inline/InlineDisplayContentBuilder.cpp:
        (WebCore::Layout::InlineDisplayContentBuilder::createRunsAndUpdateGeometryForLineContent):
        (WebCore::Layout::InlineDisplayContentBuilder::createRunsAndUpdateGeometryForLineSpanningInlineBoxes):
        * layout/formattingContexts/inline/InlineLineGeometry.h:
        (WebCore::Layout::LineGeometry::moveVertically):
        (WebCore::Layout::LineGeometry::needsIntegralPosition const): Deleted.
        (WebCore::Layout::LineGeometry::setNeedsIntegralPosition): Deleted.
        * layout/formattingContexts/inline/InlineLineRun.h:
        (WebCore::Layout::Run::setVerticalPositionIntegral): Deleted.
        * layout/integration/LayoutIntegrationInlineContentBuilder.cpp:
        (WebCore::LayoutIntegration::InlineContentBuilder::createDisplayLines const):
        * rendering/LegacyInlineFlowBox.cpp:
        (WebCore::LegacyInlineFlowBox::placeBoxesInBlockDirection):

2021-09-10  Chris Dumez  <cdumez@apple.com>

        Implement navigation reporting for Cross-Origin-Opener-Policy
        https://bugs.webkit.org/show_bug.cgi?id=230046

        Reviewed by Alex Christensen.

        Implement navigation reporting for Cross-Origin-Opener-Policy as per:
        - https://html.spec.whatwg.org/multipage/origin.html#coop-violation-navigation-to
        - https://html.spec.whatwg.org/multipage/origin.html#coop-violation-navigation-from

        With support for the Report-To HTTP header as documented here:
        - https://www.w3.org/TR/reporting/#header

        When adopting Cross-Origin-Opener-Policy or Cross-Origin-Opener-Policy-Report-Only HTTP headers,
        developers can now specify a `report-to` directive with the name of the endpoint to report
        COOP violations to. The mapping from endpoint name to URL is provided via teh Report-To HTTP
        header, as is expected by the WPT tests.

        No new tests, unskipped and rebaselined existing tests.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/CrossOriginOpenerPolicy.cpp:
        (WebCore::sanitizeReferrerForURLReport):
        (WebCore::crossOriginOpenerPolicyValueToString):
        (WebCore::sendCOOPViolationReport):
        (WebCore::sendViolationReportWhenNavigatingToCOOPResponse):
        (WebCore::sendViolationReportWhenNavigatingAwayFromCOOPResponse):
        * loader/CrossOriginOpenerPolicy.h:
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::willSendRequest):
        (WebCore::checkIfEnforcingReportOnlyCOOPWouldRequireBrowsingContextGroupSwitch):
        (WebCore::DocumentLoader::enforceResponseCrossOriginOpenerPolicy):
        (WebCore::DocumentLoader::responseReceived):
        * loader/PingLoader.cpp:
        (WebCore::PingLoader::sendViolationReport):
        (WebCore::PingLoader::startPingLoad):
        * loader/PingLoader.h:
        * loader/ReportingEndpointsCache.cpp: Added.
        (WebCore::ReportingEndpointsCache::singleton):
        (WebCore::ReportingEndpointsCache::addEndPointsFromResponse):
        (WebCore::ReportingEndpointsCache::addEndpointFromDictionary):
        (WebCore::ReportingEndpointsCache::endpointURL const):
        (WebCore::ReportingEndpointsCache::EndPoint::EndPoint):
        (WebCore::ReportingEndpointsCache::EndPoint::hasExpired const):
        * loader/ReportingEndpointsCache.h: Added.
        * loader/ResourceLoaderOptions.h:
        (WebCore::ResourceLoaderOptions::shouldOmitUserAgent):
        (WebCore::ResourceLoaderOptions::ResourceLoaderOptions):
        * loader/WorkerThreadableLoader.cpp:
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::updateHTTPRequestHeaders):
        * platform/network/HTTPHeaderNames.in:

2021-09-10  Myles C. Maxfield  <mmaxfield@apple.com>

        Start teaching WidthIterator about character clusters
        https://bugs.webkit.org/show_bug.cgi?id=229393

        Reviewed by Fujii Hironori.

        If we remove the complex text codepath, we have to teach the fast text
        codepath about character clusters, so it can perform font fallback correctly.
        We don't want to do things like split up emoji families because we didn't realize
        they should all be kept together as an atomic unit!

        No new tests because this isn't enabled yet.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/ComposedCharacterClusterTextIterator.h: Added.
        (WebCore::ComposedCharacterClusterTextIterator::ComposedCharacterClusterTextIterator):
        (WebCore::ComposedCharacterClusterTextIterator::consume):
        (WebCore::ComposedCharacterClusterTextIterator::advance):
        (WebCore::ComposedCharacterClusterTextIterator::currentIndex const):
        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::advance):

2021-09-10  Alex Christensen  <achristensen@webkit.org>

        Use std::not_fn instead of lambda in URLParser
        https://bugs.webkit.org/show_bug.cgi?id=230058

        Reviewed by Darin Adler.

        Add a few explicit template parameters needed since we are passing a template parameter now instead of a function pointer.

        * html/DOMTokenList.cpp:
        (WebCore::tokenContainsHTMLSpace):
        * html/parser/XSSAuditor.cpp:
        (WebCore::truncateForScriptLikeAttribute):

2021-09-10  Marcos Caceres  <marcos@marcosc.com>

        [Web-Share] handle non-fully active documents
        https://bugs.webkit.org/show_bug.cgi?id=230088

        Reviewed by Darin Adler.

        Test: imported/w3c/web-platform-tests/web-share/test-fully-active.https.html

        * page/Navigator.cpp:
        (WebCore::Navigator::canShare):
        (WebCore::Navigator::share):

2021-09-10  Youenn Fablet  <youenn@apple.com>

        Implement RTCPeerConnection implicit rollback
        https://bugs.webkit.org/show_bug.cgi?id=229991

        Reviewed by Eric Carlson.

        Add missing steps in setRemoteDescription to implement implict rollback as defined in
        https://w3c.github.io/webrtc-pc/#dom-peerconnection-setremotedescription step 3.1.
        In case setRemoteDescription would fail given signaling state, we do a rollback
        and then call setRemoteDescription.
        To implement this, PeerConnectionBackend::setRemoteDescription now takes a lambda instead of a promise.
        We do the same refactoring for PeerConnectionBackend::setLocalDescription.

        Covered by rebased tests.

        * Modules/mediastream/PeerConnectionBackend.cpp:
        (WebCore::PeerConnectionBackend::setLocalDescription):
        (WebCore::PeerConnectionBackend::setLocalDescriptionSucceeded):
        (WebCore::PeerConnectionBackend::setLocalDescriptionFailed):
        (WebCore::PeerConnectionBackend::setRemoteDescription):
        (WebCore::PeerConnectionBackend::setRemoteDescriptionSucceeded):
        (WebCore::PeerConnectionBackend::setRemoteDescriptionFailed):
        (WebCore::PeerConnectionBackend::stop):
        * Modules/mediastream/PeerConnectionBackend.h:
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::setLocalDescription):
        (WebCore::RTCPeerConnection::setRemoteDescription):

2021-09-10  Youenn Fablet  <youenn@apple.com>

        Allow to subclass WritableStream
        https://bugs.webkit.org/show_bug.cgi?id=230146

        Reviewed by Alex Christensen.

        Introduce a WebIDL-based WritableStream C++ class.
        To keep the existing implementation, the previous JS WritableStream implementation is wrapped around an InternalWritableStream C++ class
        which is a wrapper around JS-builtins manipulated objects.
        InternalWritableStream is made DOMGuarded to enable to keep a ref to the JS object from WritableStream.

        Update JS built-in code to manage hopping to the InternalWritableStream JS object from the exposed WritableStream JS object.
        We introduce getInternalWritableStream routine for that purpose.

        Transition existing WritableStream users to the new C++ class.
        Minor code generator change to make use of the now available JSWritableStream.

        Covered by existing and rebased tests.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/mediastream/RTCRtpSFrameTransform.cpp:
        (WebCore::RTCRtpSFrameTransform::isAttached const):
        (WebCore::RTCRtpSFrameTransform::createStreams):
        (WebCore::RTCRtpSFrameTransform::readable):
        (WebCore::RTCRtpSFrameTransform::writable):
        * Modules/mediastream/RTCRtpSFrameTransform.h:
        * Modules/streams/ReadableStream.js:
        (pipeThrough):
        * Modules/streams/TransformStreamInternals.js:
        (initializeTransformStream):
        (transformStreamErrorWritableAndUnblockWrite):
        (transformStreamDefaultSinkWriteAlgorithm):
        * Modules/streams/WritableStream.cpp: Added.
        (WebCore::WritableStream::create):
        (WebCore::WritableStream::WritableStream):
        (WebCore::JSWritableStream::abort):
        (WebCore::JSWritableStream::close):
        (WebCore::JSWritableStream::getWriter):
        * Modules/streams/WritableStream.h: Added.
        (WebCore::WritableStream::lock):
        (WebCore::WritableStream::locked const):
        (WebCore::WritableStream::internalWritableStream):

        * Modules/streams/WritableStream.idl:
        * Modules/streams/WritableStream.js: Removed.
        * Modules/streams/WritableStreamDefaultWriter.js:
        (initializeWritableStreamDefaultWriter):
        * Modules/streams/WritableStreamInternals.js:
        (initializeWritableStreamSlots):
        (writableStreamCloseForBindings):
        (writableStreamAbortForBindings):
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/InternalWritableStream.cpp: Added.
        (WebCore::invokeWritableStreamFunction):
        (WebCore::InternalWritableStream::create):
        (WebCore::InternalWritableStream::locked const):
        (WebCore::InternalWritableStream::lock):
        (WebCore::InternalWritableStream::abort):
        (WebCore::InternalWritableStream::close):
        (WebCore::InternalWritableStream::getWriter):
        * bindings/js/InternalWritableStream.h: Added.
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSC_DEFINE_HOST_FUNCTION):
        (WebCore::JSDOMGlobalObject::addBuiltinGlobals):
        * bindings/js/WebCoreBuiltinNames.h:
        * bindings/js/WritableStream.cpp: Removed.
        * bindings/js/WritableStream.h: Removed.
        * bindings/scripts/CodeGeneratorJS.pm:
        (AddToIncludesForIDLType):

2021-09-10  Antti Koivisto  <antti@apple.com>

        Factor more text painting functions to TextBoxPainter
        https://bugs.webkit.org/show_bug.cgi?id=230155

        Reviewed by Alan Bujtas.

        Composition underlines and document markers.

        * WebCore.xcodeproj/project.pbxproj:
        * rendering/LegacyInlineFlowBox.cpp:
        (WebCore::LegacyInlineFlowBox::addTextBoxVisualOverflow):
        * rendering/LegacyInlineTextBox.cpp:
        (WebCore::LegacyInlineTextBox::paint):
        (WebCore::LegacyInlineTextBox::paintPlatformDocumentMarkers): Deleted.
        (WebCore::LegacyInlineTextBox::calculateUnionOfAllDocumentMarkerBounds const): Deleted.
        (WebCore::LegacyInlineTextBox::calculateDocumentMarkerBounds const): Deleted.
        (WebCore::LegacyInlineTextBox::paintPlatformDocumentMarker): Deleted.
        (WebCore::LegacyInlineTextBox::paintCompositionUnderlines const): Deleted.
        (WebCore::mirrorRTLSegment): Deleted.
        (WebCore::LegacyInlineTextBox::paintCompositionUnderline const): Deleted.
        * rendering/LegacyInlineTextBox.h:
        * rendering/TextBoxPainter.cpp:
        (WebCore::TextBoxPainter::paintCompositionUnderlines):
        (WebCore::mirrorRTLSegment):
        (WebCore::TextBoxPainter::paintCompositionUnderline):
        (WebCore::TextBoxPainter::paintPlatformDocumentMarkers):
        (WebCore::TextBoxPainter::calculateUnionOfAllDocumentMarkerBounds):
        (WebCore::TextBoxPainter::paintPlatformDocumentMarker):
        (WebCore::TextBoxPainter::calculateDocumentMarkerBounds):
        * rendering/TextBoxPainter.h:

2021-09-10  Antoine Quint  <graouts@webkit.org>

        [Media Controls] Allow buttons in a controls bar to have standalone background tint
        https://bugs.webkit.org/show_bug.cgi?id=230149
        <rdar://problem/82206275>

        Reviewed by Dean Jackson.

        Buttons hosted in a ControlsBar currently are grouped in a way that the controls bar has a single background
        tint shared by all buttons. Some new design style require the buttons in a controls bar to be standalone rounded
        buttons and to each have their own background tint.

        To allow this, we add a new Button.Styles.Rounded style and add a new hasBackgroundTint property to ControlsBar.

        * Modules/modern-media-controls/controls/button.css:
        (button.rounded):
        * Modules/modern-media-controls/controls/button.js:
        * Modules/modern-media-controls/controls/controls-bar.js:
        (ControlsBar.prototype.get hasBackgroundTint):
        (ControlsBar.prototype.set hasBackgroundTint):
        (ControlsBar.prototype.set children):

2021-09-10  Antti Koivisto  <antti@apple.com>

        Factor painting functions from LegacyInlineTextBox into a class
        https://bugs.webkit.org/show_bug.cgi?id=230147

        Reviewed by Alan Bujtas.

        Add TextBoxPainter class and move some of the painting functions from LegacyInlineTextBox there.

        This patch is largely mechanical but will make it easier to decouple text painting from the legacy
        inline boxes in the future.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/LegacyInlineTextBox.cpp:
        (WebCore::LegacyInlineTextBox::paint):
        (WebCore::LegacyInlineTextBox::debugTextShadow const):
        (WebCore::LegacyInlineTextBox::paintMarkedTexts): Deleted.
        (WebCore::LegacyInlineTextBox::paintMarkedTextBackground): Deleted.
        (WebCore::LegacyInlineTextBox::paintMarkedTextForeground): Deleted.
        (WebCore::LegacyInlineTextBox::paintMarkedTextDecoration): Deleted.
        (WebCore::LegacyInlineTextBox::paintCompositionBackground): Deleted.
        (WebCore::LegacyInlineTextBox::debugTextShadow): Deleted.
        * rendering/LegacyInlineTextBox.h:
        (WebCore::LegacyInlineTextBox::paintMarkedTexts): Deleted.
        * rendering/MarkedText.h:
        * rendering/StyledMarkedText.cpp:
        (WebCore::resolveStyleForMarkedText):
        (WebCore::computeStyleForUnmarkedMarkedText):
        * rendering/StyledMarkedText.h:
        * rendering/TextBoxPainter.cpp: Added.
        (WebCore::TextBoxPainter::TextBoxPainter):
        (WebCore::TextBoxPainter::~TextBoxPainter):
        (WebCore::TextBoxPainter::paintCompositionBackground):
        (WebCore::TextBoxPainter::paintBackground):
        (WebCore::TextBoxPainter::paintForeground):
        (WebCore::TextBoxPainter::paintDecoration):
        * rendering/TextBoxPainter.h: Added.

2021-09-07  Sergio Villar Senin  <svillar@igalia.com>

        [css-flexbox] Add support for self-start & self-end css-align-3 positional alignment properties
        https://bugs.webkit.org/show_bug.cgi?id=229996

        Reviewed by Manuel Rego Casasnovas.

        Added support for SelfStart and SelfEnd positional alignment properties from
        https://drafts.csswg.org/css-align-3/#positional-values. These two properties
        align the alignment subject (flex item) to be flush with the edge of the alignment container (flex line)
        corresponding to the alignment subject's start side in the appropriate axis. This allows authors to align
        the flex items based on their writing modes instead of the writing mode of the container.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::alignmentOffset):
        (WebCore::RenderFlexibleBox::alignmentForChild const):

2021-09-10  Alan Bujtas  <zalan@apple.com>

        changing border size on rows with border-collapse not redrawing
        https://bugs.webkit.org/show_bug.cgi?id=116868
        <rdar://problem/82844412>

        Reviewed by Simon Fraser.

        Cells in adjacent rows share the same collapsed border.
        When this collapsed border width changes on a row, the cells at the adjacent rows need to know about it too so that
        they can update their size accordingly.

        Test: fast/table/collapsed-border-width-change-on-row.html

        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::styleDidChange):

2021-09-10  Youenn Fablet  <youenn@apple.com>

        Use RTCErrorEvent for data channel error event
        https://bugs.webkit.org/show_bug.cgi?id=230090

        Reviewed by Eric Carlson.

        When detecting an error before closing the data channel, the backend now generates a RTCError and pass it to didDetectError.

        Covered by updated test.

        * Headers.cmake:
        * Modules/mediastream/RTCDataChannel.cpp:
        (WebCore::RTCDataChannel::didDetectError):
        * Modules/mediastream/RTCDataChannel.h:
        * Modules/mediastream/RTCDataChannelRemoteHandler.cpp:
        (WebCore::RTCDataChannelRemoteHandler::didDetectError):
        * Modules/mediastream/RTCDataChannelRemoteHandler.h:
        * Modules/mediastream/RTCDataChannelRemoteSource.h:
        * Modules/mediastream/RTCError.h:
        * Modules/mediastream/RTCErrorDetailType.h:
        * Modules/mediastream/RTCErrorEvent.h:
        * Modules/mediastream/libwebrtc/LibWebRTCDataChannelHandler.cpp:
        (WebCore::LibWebRTCDataChannelHandler::checkState):
        * Modules/mediastream/libwebrtc/LibWebRTCUtils.cpp:
        (WebCore::toRTCErrorDetailType):
        (WebCore::toRTCError):
        * Modules/mediastream/libwebrtc/LibWebRTCUtils.h:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/mediastream/RTCDataChannelHandlerClient.h:
        * platform/mediastream/RTCDataChannelRemoteSourceConnection.h:

2021-09-10  Rob Buis  <rbuis@igalia.com>

        Fix aspect-ratio-intrinsic-size-004.html
        https://bugs.webkit.org/show_bug.cgi?id=228283

        Reviewed by Sergio Villar Senin.

        Flex items using aspect-ratio that are stretched
        and depend on flex container height also need
        to have the preferred widths recalculated.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::needsPreferredWidthsRecalculation const):

2021-09-10  Jean-Yves Avenard  <jya@apple.com>

        Use of memcpy with overlapping memory pointers
        https://bugs.webkit.org/show_bug.cgi?id=230140
        rdar://82946555

        Reviewed by David Kilzer.

        We use memcpy with overlapping pointers which triggers Asan. In practice,
        with how memcpy was used the behaviour wasn't undefined and so would have
        been fine.
        Already covered by existing tests.

        * platform/audio/cocoa/AudioFileReaderCocoa.cpp:
        (WebCore::AudioFileReader::decodeWebMData const): Replace memcpy with memmove

2021-09-10  Myles C. Maxfield  <mmaxfield@apple.com>

        The document.fonts accessor should not update style
        https://bugs.webkit.org/show_bug.cgi?id=229850

        Reviewed by Antti Koivisto.

        For example, when content says "document.fonts.has(...)", the ".has(...)" part
        needs to update style instead of the "document.fonts" part. This is because it's
        totally legal for content to say:

        var f = document.fonts;
        // Modify style here
        ... f.has(...) ... <=== This needs to reflect the style changes.

        The child bugs of this bug migrate the updateStyle() calls into the specific
        operations on the FontFaceSet, so now it's okay stop updating style in the
        accessor.

        Test: PerformanceTests/CSS/FontFaceSetUpdateStyle.html

        * dom/Document.cpp:
        (WebCore::Document::fonts):

2021-09-09  Myles C. Maxfield  <mmaxfield@apple.com>

        FontFaceSet.load() needs to react to style changes
        https://bugs.webkit.org/show_bug.cgi?id=230132

        Reviewed by Antti Koivisto.

        If content does something like
        let fonts = document.fonts;
        ... modify style sheets ...
        fonts.load(...)

        The load() function needs to see the result of hte style sheet modification.

        Test: imported/w3c/web-platform-tests/css/css-font-loading/fontfaceset-load-css-connected.html

        * css/FontFaceSet.cpp:
        (WebCore::FontFaceSet::load):

2021-09-09  Frédéric Wang  <fwang@igalia.com>

        Nullptr crash in CompositeEditCommand::splitTreeToNode via InsertParagraphSeparatorCommand::doApply
        https://bugs.webkit.org/show_bug.cgi?id=229276

        Reviewed by Ryosuke Niwa.

        The loop in CompositeEditCommand::splitTreeToNode calls splitElement with the parent node as an
        argument. This patch fixes a nullptr crash by following the rule of [1]: store the parent node as
        a local smart pointer. Additionally, it ensures that editingIgnoresContent() returns false on the
        parent so that the corresponding ASSERT in Position's constructor does not fail when
        firstPositionInNode is called.

        [1] https://lists.webkit.org/pipermail/webkit-dev/2020-September/031386.html

        Tests: editing/execCommand/indent-input-in-image-crash.html
               editing/execCommand/indent-input-in-image-editing-ignores-content-assert.html

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::moveParagraphs): Store parent node in a smart pointer and exit loop
        if it returns true for editingIgnoresContent.

2021-09-09  Alan Bujtas  <zalan@apple.com>

        [Table layout] Incorrect vertical position when the inline level box has 0px used height.
        https://bugs.webkit.org/show_bug.cgi?id=230118

        Reviewed by Antti Koivisto.

        Intrinsic padding is used in table cells to offset the content with their alignments as the content box may not be as tall as the cell itself.
        This patch ensures that zero height content (where the baseline is also 0) gets the alignment offset as well.
        (This patch also fixes the bug where we may reset the intrinsic padding to 0 on subsequent layouts.)

        Test: fast/table/vertical-position-with-0-height-box.html

        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::computeIntrinsicPadding):

2021-09-09  Diego Pino Garcia  <dpino@igalia.com>

        Build fix for Ubuntu LTS and Debian after r282211

        Some functions need to be guarded by ENABLE(LAYOUT_FORMATTING_CONTEXT)

        * layout/integration/LayoutIntegrationRunIterator.cpp:
        * layout/integration/LayoutIntegrationRunIterator.h:

2021-09-09  Darin Adler  <darin@apple.com>

        Improve performance by using StringView, not "const StringView&"
        https://bugs.webkit.org/show_bug.cgi?id=229834

        Reviewed by Anders Carlsson.

        * html/BaseDateAndTimeInputType.h:
        * html/DateInputType.cpp:
        (WebCore::DateInputType::parseToDateComponents const):
        * html/DateInputType.h:
        * html/DateTimeLocalInputType.cpp:
        (WebCore::DateTimeLocalInputType::parseToDateComponents const):
        * html/DateTimeLocalInputType.h:
        * html/MonthInputType.cpp:
        (WebCore::MonthInputType::parseToDateComponents const):
        * html/MonthInputType.h:
        * html/TimeInputType.cpp:
        (WebCore::TimeInputType::parseToDateComponents const):
        * html/TimeInputType.h:
        * html/WeekInputType.cpp:
        (WebCore::WeekInputType::parseToDateComponents const):
        * html/WeekInputType.h:
        * html/parser/HTMLParserIdioms.cpp:
        (WebCore::parseMetaHTTPEquivRefresh):
        * html/parser/HTMLParserIdioms.h:
        * html/parser/HTMLSrcsetParser.h:
        * layout/formattingContexts/inline/InlineTextItem.cpp:
        (WebCore::Layout::moveToNextNonWhitespacePosition):
        * layout/layouttree/LayoutTreeBuilder.cpp:
        (WebCore::Layout::canUseSimplifiedTextMeasuring):
        * mathml/MathMLPresentationElement.cpp:
        (WebCore::MathMLPresentationElement::parseNumberAndUnit):
        (WebCore::MathMLPresentationElement::parseNamedSpace):
        * mathml/MathMLPresentationElement.h:
        * page/Quirks.cpp:
        (WebCore::shouldSuppressAutocorrectionAndAutocaptializationInHiddenEditableAreasForHost):
        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::expansionOpportunityCount):
        (WebCore::FontCascade::leftExpansionOpportunity):
        (WebCore::FontCascade::rightExpansionOpportunity):
        * platform/graphics/FontCascade.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::conformFragmentIdentifierForURL):
        * rendering/LegacyLineLayout.cpp:
        (WebCore::LegacyLineLayout::computeInlineDirectionPositionsForSegment):
        * svg/SVGParserUtilities.cpp:
        (WebCore::parseNumber):
        (WebCore::parseNumberOptionalNumber):
        (WebCore::parsePoint):
        (WebCore::parseRect):
        (WebCore::parseGlyphName):
        (WebCore::parseKerningUnicodeString):
        * svg/SVGParserUtilities.h:
        Use StringView, not const StringView&.

2021-09-09  Chris Dumez  <cdumez@apple.com>

        Potential crash under CachedRawResource::didAddClient()
        https://bugs.webkit.org/show_bug.cgi?id=230121
        <rdar://82936913>

        Reviewed by Alex Christensen.

        In r280083, I tried to address this crash by holding a strong reference
        to the SharedBuffer before calling forEachSegment() on it. However, the
        crash is still happening after this fix.

        My suspicion is that the SharedBuffer's internal m_segments vector gets
        modified as we iterate over it. As a result, I am reverting r280083 and
        iterating over a copy of m_segments in forEachSegment() instead.

        No new tests, we haven't been able to reproduce.

        * WebCore.xcodeproj/project.pbxproj:
        * loader/cache/CachedRawResource.cpp:
        (WebCore::CachedRawResource::didAddClient):
        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::forEachSegment const):

2021-09-09  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] REGRESSION(r282123): some layout tests are failing because the bgcolor of text input forms are unexpectedly black
        https://bugs.webkit.org/show_bug.cgi?id=230077

        Reviewed by Don Olmstead.

        r282123 enabled HAVE_OS_DARK_MODE_SUPPORT for WinCairo. It uses
        '-webkit-control-background' in the user-agent style sheet.
        RenderThemeWin::systemColor always returned black for it. Because
        WinCairo doesn't support dark mode yet, it is always light mode.
        So, '-webkit-control-background' should be white at the moment.

        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::systemColor const): Return white for CSSValueWebkitControlBackground.

2021-09-09  Sihui Liu  <sihui_liu@apple.com>

        Unreviewed build fix for win after r282222.
        https://bugs.webkit.org/show_bug.cgi?id=230059

        * Modules/storage/StorageManager.h:

2021-09-09  Simon Fraser  <simon.fraser@apple.com>

        right- and bottom-relative values in background-position-x/y don't work
        https://bugs.webkit.org/show_bug.cgi?id=202148

        Reviewed by Antti Koivisto.

        Test: fast/backgrounds/background-position-xy.html

        background-position[1] and background-position-x/background-position-y allow authors
        to specify edge-relative values, like "background-position-x: right 10px". We
        failed to handle this syntax in background-position-x and background-position-y,
        but we do handle it in background-position.

        So fix consumePositionX()/consumePositionY(), which are used when parsing
        background-position-x/y, -webkit-mask-position-x/y, perspective-origin-x/y, and
        transform-origin-x.y, to handle this edge-relative form.

        A failure on imported/w3c/web-platform-tests/css/css-backgrounds/parsing/background-position-x-computed.html
        (which only passes in Firefox) suggets that we should convert "right 10px" to "calc(100% - 10px)"
        but for now, this patch serializes with edge keywords, as we do for the shorthand.

        [1] https://www.w3.org/TR/css-backgrounds-3/#background-position

        Test: fast/backgrounds/background-position-xy.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::createSingleAxisPositionValueForLayer):
        (WebCore::ComputedStyleExtractor::valueForPropertyInStyle):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumePositionX):
        (WebCore::consumePositionY):
        (WebCore::consumePositionLonghand): Deleted.
        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::consumePositionCoordinates):
        (WebCore::CSSPropertyParserHelpers::consumeSingleAxisPosition):
        * css/parser/CSSPropertyParserHelpers.h:

2021-09-09  Antti Koivisto  <antti@apple.com>

        Cull inline culling
        https://bugs.webkit.org/show_bug.cgi?id=202920

        Reviewed by Alan Bujtas.

        The optimization was already disabled in r282129.
        This patch removes all the associated code.

        * editing/SimplifyMarkupCommand.cpp:
        (WebCore::SimplifyMarkupCommand::doApply):
        * page/FrameView.cpp:
        (WebCore::FrameView::paintContents):
        * rendering/LegacyInlineFlowBox.cpp:
        (WebCore::LegacyInlineFlowBox::nodeAtPoint):
        * rendering/LegacyLineLayout.cpp:
        (WebCore::LegacyLineLayout::createLineBoxes):
        (WebCore::LegacyLineLayout::layoutLineBoxes):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::RenderElement):
        * rendering/RenderElement.h:
        (WebCore::RenderElement::setRenderInlineAlwaysCreatesLineBoxes): Deleted.
        (WebCore::RenderElement::renderInlineAlwaysCreatesLineBoxes const): Deleted.
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::styleDidChange):
        (WebCore::RenderInline::mayAffectLayout const):

        Rename mayAffectRendering -> mayAffectLayout for specificity.

        (WebCore::RenderInline::generateLineBoxRects const):
        (WebCore::RenderInline::firstInlineBoxTopLeft const):
        (WebCore::RenderInline::linesBoundingBox const):
        (WebCore::RenderInline::linesVisualOverflowBoundingBox const):
        (WebCore::RenderInline::linesVisualOverflowBoundingBoxInFragment const):
        (WebCore::RenderInline::clippedOverflowRect const):
        (WebCore::RenderInline::dirtyLineBoxes):
        (WebCore::RenderInline::createAndAppendInlineFlowBox):
        (WebCore::RenderInline::mayAffectRendering const): Deleted.
        (WebCore::RenderInline::updateAlwaysCreateLineBoxes): Deleted.
        (WebCore::RenderInline::generateCulledLineBoxRects const): Deleted.
        (WebCore::RenderInline::hitTestCulledInline): Deleted.
        (WebCore::RenderInline::culledInlineFirstLineBox const): Deleted.
        (WebCore::RenderInline::culledInlineLastLineBox const): Deleted.
        (WebCore::RenderInline::culledInlineVisualOverflowBoundingBox const): Deleted.
        * rendering/RenderInline.h:
        (WebCore::RenderInline::lastLineBox const):
        (WebCore::RenderInline::firstLineBoxIncludingCulling const): Deleted.
        (WebCore::RenderInline::lastLineBoxIncludingCulling const): Deleted.
        (WebCore::RenderInline::alwaysCreateLineBoxes const): Deleted.
        (WebCore::RenderInline::setAlwaysCreateLineBoxes): Deleted.
        * rendering/RenderLineBoxList.cpp:
        (WebCore::RenderLineBoxList::dirtyLinesFromChangedChild):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::linesVisualOverflowBoundingBox const): Deleted.
        * rendering/RenderText.h:
        * rendering/RenderTextLineBoxes.cpp:
        (WebCore::RenderTextLineBoxes::visualOverflowBoundingBox const): Deleted.
        * rendering/RenderTextLineBoxes.h:
        * rendering/RenderTreeAsText.cpp:
        (WebCore::hasNonEmptySibling):
        * rendering/svg/RenderSVGInline.cpp:
        (WebCore::RenderSVGInline::RenderSVGInline):

2021-09-09  Sihui Liu  <sihui_liu@apple.com>

        Address post-commit comments on r282130 (Add basic support for Storage API)
        https://bugs.webkit.org/show_bug.cgi?id=230059

        Reviewed by Youenn Fablet.

        No new tests as no behavior change.

        * Modules/storage/StorageManager.cpp:
        (WebCore::StorageManager::StorageManager):
        (WebCore::StorageManager::persisted):
        (WebCore::StorageManager::persist):
        (WebCore::clientOrigin): Deleted.
        * Modules/storage/StorageManager.h:
        * dom/Document.cpp:
        (WebCore::Document::storageConnection):
        * dom/Document.h:
        * dom/ScriptExecutionContext.h:
        (WebCore::ScriptExecutionContext::storageConnection):
        * page/NavigatorBase.cpp:
        (WebCore::NavigatorBase::storage):
        * page/NavigatorBase.h:

2021-09-09  Jer Noble  <jer.noble@apple.com>

        Refactor Video,Audio,TextTrack and TrackLists to not depend on HTMLMediaElement
        https://bugs.webkit.org/show_bug.cgi?id=229924

        Reviewed by Eric Carlson.

        TrackBase and its derived classes currently are only able to handle a single "client"
        at a time, which means a complicated re-sending of notifications from one client to
        the next to ensure everything flows to the HTMLMediaElement. In addition to this
        complicated client heirarchy, Tracks and their TrackLists being tightly bound to their
        HTMLMediaElement will make MSE-in-a-Worker much more difficult to implement.

        Refactor AudioTrack, VideoTrack, and TextTrack to have multiple clients, tracked by
        a WeakHashSet. Remove HTMLMediaElement from that class heirarchy, and replace it with
        a WeakPtr to their TrackList for opaqueRoot purposes.

        Similarly, refactor AudioTrackList, VideoTrackList, and TextTrackList to not require
        a backpointer to HTMLMediaElement, and use a WeakPtr<void> instead, allowing either
        SourceBuffer or HTMLMediaElement to be the list's opaqueRoot.

        A TrackBase needed access to a HTMLMediaElement only for the necessity of outputting
        a warning to the console when a language error occurred; instead, make TrackBase a
        ContextDestructionObserver, and pass a ScriptExecutionContext to the TrackBase (and
        all its derived classes) in the constructor.

        A TrackListBase now has a type() method, which allows it to be safely cast to AudioTrack,
        VideoTrack, and TextTrack, through type trait specialization.

        TextTrack used HTMLMediaElement to retrieve its TextTrackList for certain operations,
        and now that each TrackBase has a backpointer to its TrackList, this is no longer necessary.

        TextTrackList now has setDuration()/duration() member functions, so that when TextTrack
        receives a cue with an indefinite duration, that cue's endTime can be calculated.

        The AudioTrack, VideoTrack, and TextTrack IDLs previously specified GenerateIsReachable,
        with a parameter of ImplElementRoot, which required an element() method on each; now
        that TrackBase has an opaqueRoot() method, this parameter is no longer necessary.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::videoTracks):
        (WebCore::SourceBuffer::audioTracks):
        (WebCore::SourceBuffer::textTracks):
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveInitializationSegment):
        (WebCore::SourceBuffer::videoTrackSelectedChanged):
        (WebCore::SourceBuffer::videoTrackKindChanged):
        (WebCore::SourceBuffer::videoTrackLabelChanged):
        (WebCore::SourceBuffer::videoTrackLanguageChanged):
        (WebCore::SourceBuffer::audioTrackEnabledChanged):
        (WebCore::SourceBuffer::audioTrackKindChanged):
        (WebCore::SourceBuffer::audioTrackLabelChanged):
        (WebCore::SourceBuffer::audioTrackLanguageChanged):
        (WebCore::SourceBuffer::textTrackModeChanged):
        (WebCore::SourceBuffer::textTrackKindChanged):
        (WebCore::SourceBuffer::textTrackLanguageChanged):
        (WebCore::SourceBuffer::sourceBufferPrivateDurationChanged):
        * Modules/mediasource/SourceBuffer.h:
        * bindings/js/JSTrackCustom.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::~HTMLMediaElement):
        (WebCore::HTMLMediaElement::audioTrackKindChanged):
        (WebCore::HTMLMediaElement::audioTrackLabelChanged):
        (WebCore::HTMLMediaElement::audioTrackLanguageChanged):
        (WebCore::HTMLMediaElement::willRemoveAudioTrack):
        (WebCore::HTMLMediaElement::textTrackModeChanged):
        (WebCore::HTMLMediaElement::textTrackKindChanged):
        (WebCore::HTMLMediaElement::textTrackLabelChanged):
        (WebCore::HTMLMediaElement::textTrackLanguageChanged):
        (WebCore::HTMLMediaElement::willRemoveTextTrack):
        (WebCore::HTMLMediaElement::videoTrackKindChanged):
        (WebCore::HTMLMediaElement::videoTrackLabelChanged):
        (WebCore::HTMLMediaElement::videoTrackLanguageChanged):
        (WebCore::HTMLMediaElement::willRemoveVideoTrack):
        (WebCore::HTMLMediaElement::mediaPlayerDidAddAudioTrack):
        (WebCore::HTMLMediaElement::mediaPlayerDidAddTextTrack):
        (WebCore::HTMLMediaElement::mediaPlayerDidAddVideoTrack):
        (WebCore::HTMLMediaElement::addAudioTrack):
        (WebCore::HTMLMediaElement::addTextTrack):
        (WebCore::HTMLMediaElement::addVideoTrack):
        (WebCore::HTMLMediaElement::removeAudioTrack):
        (WebCore::HTMLMediaElement::removeTextTrack):
        (WebCore::HTMLMediaElement::removeVideoTrack):
        (WebCore::HTMLMediaElement::ensureAudioTracks):
        (WebCore::HTMLMediaElement::ensureTextTracks):
        (WebCore::HTMLMediaElement::ensureVideoTracks):
        (WebCore::HTMLMediaElement::mediaPlayerDurationChanged):
        * html/HTMLMediaElement.h:
        * html/HTMLTrackElement.cpp:
        (WebCore::HTMLTrackElement::~HTMLTrackElement):
        (WebCore::HTMLTrackElement::track):
        (WebCore::HTMLTrackElement::textTrackModeChanged):
        * html/HTMLTrackElement.h:
        * html/track/AudioTrack.cpp:
        (WebCore::AudioTrack::AudioTrack):
        (WebCore::AudioTrack::setLanguage):
        (WebCore::AudioTrack::setEnabled):
        (WebCore::AudioTrack::addClient):
        (WebCore::AudioTrack::clearClient):
        (WebCore::AudioTrack::enabledChanged):
        (WebCore::AudioTrack::idChanged):
        (WebCore::AudioTrack::labelChanged):
        (WebCore::AudioTrack::willRemove):
        * html/track/AudioTrack.h:
        (WebCore::AudioTrackClient::audioTrackEnabledChanged):
        (WebCore::AudioTrackClient::audioTrackIdChanged):
        (WebCore::AudioTrackClient::audioTrackKindChanged):
        (WebCore::AudioTrackClient::audioTrackLabelChanged):
        (WebCore::AudioTrackClient::audioTrackLanguageChanged):
        (WebCore::AudioTrackClient::willRemoveAudioTrack):
        * html/track/AudioTrack.idl:
        * html/track/AudioTrackList.cpp:
        (WebCore::AudioTrackList::AudioTrackList):
        (WebCore::AudioTrackList::append):
        (WebCore::AudioTrackList::remove):
        * html/track/AudioTrackList.h:
        (isType):
        * html/track/AudioTrackList.idl:
        * html/track/InbandDataTextTrack.cpp:
        (WebCore::InbandDataTextTrack::InbandDataTextTrack):
        (WebCore::InbandDataTextTrack::create):
        (WebCore::InbandDataTextTrack::addDataCue):
        (WebCore::InbandDataTextTrack::updateDataCue):
        * html/track/InbandDataTextTrack.h:
        * html/track/InbandGenericTextTrack.cpp:
        (WebCore::InbandGenericTextTrack::InbandGenericTextTrack):
        (WebCore::InbandGenericTextTrack::create):
        (WebCore::InbandGenericTextTrack::updateCueFromCueData):
        * html/track/InbandGenericTextTrack.h:
        * html/track/InbandTextTrack.cpp:
        (WebCore::InbandTextTrack::create):
        (WebCore::InbandTextTrack::InbandTextTrack):
        (WebCore::InbandTextTrack::willRemove):
        * html/track/InbandTextTrack.h:
        * html/track/InbandWebVTTTextTrack.cpp:
        (WebCore::InbandWebVTTTextTrack::InbandWebVTTTextTrack):
        (WebCore::InbandWebVTTTextTrack::create):
        * html/track/InbandWebVTTTextTrack.h:
        * html/track/LoadableTextTrack.cpp:
        (WebCore::LoadableTextTrack::LoadableTextTrack):
        (WebCore::LoadableTextTrack::newCuesAvailable):
        * html/track/LoadableTextTrack.h:
        * html/track/TextTrack.cpp:
        (WebCore::TextTrack::captionMenuOffItem):
        (WebCore::TextTrack::captionMenuAutomaticItem):
        (WebCore::TextTrack::TextTrack):
        (WebCore::TextTrack::create):
        (WebCore::TextTrack::~TextTrack):
        (WebCore::TextTrack::textTrackList const):
        (WebCore::TextTrack::addClient):
        (WebCore::TextTrack::clearClient):
        (WebCore::TextTrack::setKind):
        (WebCore::TextTrack::setMode):
        (WebCore::TextTrack::removeAllCues):
        (WebCore::TextTrack::addCue):
        (WebCore::TextTrack::removeCue):
        (WebCore::TextTrack::cueWillChange):
        (WebCore::TextTrack::cueDidChange):
        (WebCore::TextTrack::trackIndex):
        (WebCore::TextTrack::trackIndexRelativeToRenderedTracks):
        (WebCore::TextTrack::setLanguage):
        (WebCore::TextTrack::setId):
        (WebCore::TextTrack::setLabel):
        (WebCore::TextTrack::newCuesAvailable):
        * html/track/TextTrack.h:
        (WebCore::TextTrackClient::textTrackIdChanged):
        (WebCore::TextTrackClient::textTrackKindChanged):
        (WebCore::TextTrackClient::textTrackModeChanged):
        (WebCore::TextTrackClient::textTrackLabelChanged):
        (WebCore::TextTrackClient::textTrackLanguageChanged):
        (WebCore::TextTrackClient::textTrackAddCues):
        (WebCore::TextTrackClient::textTrackRemoveCues):
        (WebCore::TextTrackClient::textTrackAddCue):
        (WebCore::TextTrackClient::textTrackRemoveCue):
        (WebCore::TextTrackClient::willRemoveTextTrack):
        * html/track/TextTrack.idl:
        * html/track/TextTrackList.cpp:
        (WebCore::TextTrackList::TextTrackList):
        (WebCore::TextTrackList::~TextTrackList):
        (WebCore::TextTrackList::append):
        (WebCore::TextTrackList::remove):
        * html/track/TextTrackList.h:
        (isType):
        * html/track/TextTrackList.idl:
        * html/track/TrackBase.cpp:
        (WebCore::TrackBase::TrackBase):
        (WebCore::TrackBase::setTrackList):
        (WebCore::TrackBase::clearTrackList):
        (WebCore::TrackBase::trackList const):
        (WebCore::TrackBase::setLanguage):
        (WebCore::MediaTrackBase::MediaTrackBase):
        * html/track/TrackBase.h:
        (WebCore::TrackBase::id const):
        (WebCore::TrackBase::label const):
        (WebCore::TrackBase::language const):
        (WebCore::TrackBase::opaqueRoot):
        (WebCore::TrackBase::setId):
        (WebCore::TrackBase::setLabel):
        (WebCore::root):
        * html/track/TrackListBase.cpp:
        (WebCore::TrackListBase::TrackListBase):
        (WebCore::TrackListBase::~TrackListBase):
        (WebCore::TrackListBase::opaqueRoot):
        (WebCore::TrackListBase::remove):
        * html/track/TrackListBase.h:
        (WebCore::TrackListBase::type const):
        (WebCore::TrackListBase::setOpaqueRoot):
        (WebCore::root):
        * html/track/VideoTrack.cpp:
        (WebCore::VideoTrack::VideoTrack):
        (WebCore::VideoTrack::setSelected):
        (WebCore::VideoTrack::addClient):
        (WebCore::VideoTrack::clearClient):
        (WebCore::VideoTrack::selectedChanged):
        (WebCore::VideoTrack::idChanged):
        (WebCore::VideoTrack::labelChanged):
        (WebCore::VideoTrack::willRemove):
        (WebCore::VideoTrack::setKind):
        (WebCore::VideoTrack::setLanguage):
        (WebCore::VideoTrack::updateKindFromPrivate):
        * html/track/VideoTrack.h:
        (WebCore::VideoTrackClient::videoTrackIdChanged):
        (WebCore::VideoTrackClient::videoTrackKindChanged):
        (WebCore::VideoTrackClient::videoTrackLabelChanged):
        (WebCore::VideoTrackClient::videoTrackLanguageChanged):
        (WebCore::VideoTrackClient::videoTrackSelectedChanged):
        (WebCore::VideoTrackClient::willRemoveVideoTrack):
        * html/track/VideoTrack.idl:
        * html/track/VideoTrackList.cpp:
        (WebCore::VideoTrackList::VideoTrackList):
        (WebCore::VideoTrackList::append):
        * html/track/VideoTrackList.h:
        (isType):
        * html/track/VideoTrackList.idl:
2021-09-09  Youenn Fablet  <youenn@apple.com>

        Update RTCPeerConnection descriptions as per specification
        https://bugs.webkit.org/show_bug.cgi?id=229963

        Reviewed by Eric Carlson.

        A peer connection has two sets of descriptions: main thread descriptions which are exposed to JS and signaling thread descriptions
        which are used/modified internally by the backend.
        WebRTC spec describes when signaling thread descriptions should be used to set main thread descriptions.
        This should be done at the end of setting remote/local descriptions, as well as when adding or surfacing an ICE candidate.
        We make sure to grab signaling thread descriptions at those moments, then hop to main thread to set the main thread descriptions.

        In case of closed connection, we stop early as we do not need to surface new descriptions (as well as resolve promises/fire events).

        Covered by rebased tests.

        * Modules/mediastream/PeerConnectionBackend.cpp:
        (WebCore::PeerConnectionBackend::setLocalDescriptionSucceeded):
        (WebCore::PeerConnectionBackend::setRemoteDescriptionSucceeded):
        (WebCore::PeerConnectionBackend::addIceCandidate):
        (WebCore::PeerConnectionBackend::newICECandidate):
        * Modules/mediastream/PeerConnectionBackend.h:
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::updateDescription):
        (WebCore::RTCPeerConnection::updateDescriptions):
        * Modules/mediastream/RTCPeerConnection.h:
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::fromSessionDescriptionType):
        (WebCore::descriptionsFromPeerConnection):
        (WebCore::LibWebRTCMediaEndpoint::addIceCandidate):
        (WebCore::LibWebRTCMediaEndpoint::OnIceCandidate):
        (WebCore::LibWebRTCMediaEndpoint::setLocalSessionDescriptionSucceeded):
        (WebCore::LibWebRTCMediaEndpoint::setRemoteSessionDescriptionSucceeded):
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h:
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::LibWebRTCPeerConnectionBackend::doAddIceCandidate):
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.h:

2021-09-09  Antti Koivisto  <antti@apple.com>

        Add cache to InlineContent for O(1) inline box access
        https://bugs.webkit.org/show_bug.cgi?id=230092

        Reviewed by Alan Bujtas.

        Add lazy caches for getting the index of the first run and all non-root inline boxes for a layout box.

        * layout/integration/LayoutIntegrationInlineContent.cpp:
        (WebCore::LayoutIntegration::InlineContent::indexForRun const):
        (WebCore::LayoutIntegration::InlineContent::firstRunForLayoutBox const):
        (WebCore::LayoutIntegration::InlineContent::firstRunIndexForLayoutBox const):

        For small run vectors (<16) just search directly.

        (WebCore::LayoutIntegration::InlineContent::nonRootInlineBoxIndexesForLayoutBox const):
        (WebCore::LayoutIntegration::InlineContent::releaseCaches):

        Memory cleanup support.

        (WebCore::LayoutIntegration::InlineContent::shrinkToFit):
        (WebCore::LayoutIntegration::InlineContent::iteratorForRun const): Deleted.
        (WebCore::LayoutIntegration::InlineContent::iteratorForTextRun const): Deleted.

        Cleanup the interface by removing iterator dependency (iterator depends on InlineContent, not other way round).

        * layout/integration/LayoutIntegrationInlineContent.h:
        (WebCore::LayoutIntegration::InlineContent::traverseNonRootInlineBoxes):

        Traversal helper.

        (WebCore::LayoutIntegration::InlineContent::shrinkToFit): Deleted.
        * layout/integration/LayoutIntegrationLineLayout.cpp:
        (WebCore::LayoutIntegration::LineLayout::textRunsFor const):
        (WebCore::LayoutIntegration::LineLayout::runFor const):
        (WebCore::LayoutIntegration::LineLayout::firstInlineBoxRect const):
        (WebCore::LayoutIntegration::LineLayout::visualOverflowBoundingBoxRectFor const):
        (WebCore::LayoutIntegration::LineLayout::collectInlineBoxRects const):

        Use the new cache-backed interfaces.

        (WebCore::LayoutIntegration::LineLayout::releaseCaches):
        (WebCore::LayoutIntegration::LineLayout::paintTextRunUsingPhysicalCoordinates):
        (WebCore::LayoutIntegration::LineLayout::releaseInlineItemCache): Deleted.
        * layout/integration/LayoutIntegrationLineLayout.h:
        * layout/integration/LayoutIntegrationRunIterator.cpp:
        (WebCore::LayoutIntegration::textRunFor):
        (WebCore::LayoutIntegration::runFor):
        * layout/integration/LayoutIntegrationRunIterator.h:

2021-09-09  Frederic Wang  <fwang@igalia.com>

        Chromium test-case asserts with ASSERTION FAILED: propertyMissingOrEqualToNone
        https://bugs.webkit.org/show_bug.cgi?id=202904

        Reviewed by Darin Adler.

        WebCore::CompositeEditCommand::moveParagraphs calls createFragmentFromMarkup with a parameter
        AnnotateForInterchange set to No. As a consequence, StyledMarkupAccumulator::serializeNodes
        will not call EditingStyle::wrappingStyleForSerialization (in order to remove
        -webkit-text-decorations-in-effect) contrary to the assumption of the ASSERT in
        propertyMissingOrEqualToNone. This can lead to the ASSERT failing e.g. with the JustifyRight
        command. This patch fixes that wrong expectation by importing the corresponding change and
        test from Chromium [1].

        [1] https://codereview.chromium.org/1522063002

        Test: imported/blink/editing/execCommand/justify-right-in-effect-crash.html

        * editing/markup.cpp:
        (WebCore::StyledMarkupAccumulator::appendStyleNodeOpenTag): Skip the assert if we should not
        annotate and update the code comment accordingly.

2021-09-09  Myles C. Maxfield  <mmaxfield@apple.com>

        FontFaceSet.has() needs to react to style changes
        https://bugs.webkit.org/show_bug.cgi?id=229848

        Reviewed by Antti Koivisto.

        When content says "document.fonts.has(...)", the ".has(...)" part needs to
        update style instead of the "document.fonts" part. This is because it's
        totally legal for content to say:

        var f = document.fonts;
        // Modify style here
        ... f.has(...) ... <=== This needs to reflect the style changes.

        Test: imported/w3c/web-platform-tests/css/css-font-loading/fontfaceset-has.html

        * css/FontFaceSet.cpp:
        (WebCore::FontFaceSet::has const):

2021-09-09  Antti Koivisto  <antti@apple.com>

        RenderInline offsetTop/Left should not switch to legacy layout
        https://bugs.webkit.org/show_bug.cgi?id=230040

        Reviewed by Alan Bujtas.

        Get position of the LFC inline box.

        * layout/integration/LayoutIntegrationLineLayout.cpp:
        (WebCore::LayoutIntegration::LineLayout::firstInlineBoxRect const):
        * layout/integration/LayoutIntegrationLineLayout.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::offsetLeft const):
        (WebCore::RenderInline::offsetTop const):
        (WebCore::RenderInline::firstInlineBoxTopLeft const):
        (WebCore::RenderInline::positionForPoint const):

        Also fix positionForPoint as a failing test revealed a missing LFC path here.

        * rendering/RenderInline.h:

2021-09-09  Martin Robinson  <mrobinson@webkit.org>

        Position sticky does not work within table cells
        https://bugs.webkit.org/show_bug.cgi?id=155496

        Reviewed by Simon Fraser.

        When computing the content box rect of a sticky container, do not include
        intrinsic padding. Instead, use the values computed from CSS. The instrinsic
        padding should not limit the movement area of a position:sticky item.

        * web-platform-tests/css/css-position/sticky/position-sticky-contained-by-display-table-ref.html: Added.
        * web-platform-tests/css/css-position/sticky/position-sticky-contained-by-display-table.html: Added.

        Test: imported/w3c/web-platform-tests/css/css-position/sticky/position-sticky-contained-by-display-table.html

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::computeStickyPositionConstraints const): Use CSS computed
        values which do not include intrinsic padding.

2021-09-09  Youenn Fablet  <youenn@apple.com>

        Add support for RTCError and RTCErrorEvent
        https://bugs.webkit.org/show_bug.cgi?id=229987

        Reviewed by Eric Carlson.

        Add support for RTCError and RTCErrorEvent as per https://w3c.github.io/webrtc-pc/#rtcerror-interface
        and https://w3c.github.io/webrtc-pc/#rtcerrorevent-interface.

        Covered by updated tests.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/mediastream/RTCError.cpp: Added.
        (WebCore::RTCError::RTCError):
        * Modules/mediastream/RTCError.h: Added.
        * Modules/mediastream/RTCError.idl: Added.
        * Modules/mediastream/RTCErrorDetailType.h: Added.
        * Modules/mediastream/RTCErrorDetailType.idl: Added.
        * Modules/mediastream/RTCErrorEvent.cpp: Added.
        (WebCore::RTCErrorEvent::RTCErrorEvent):
        * Modules/mediastream/RTCErrorEvent.h: Added.
        * Modules/mediastream/RTCErrorEvent.idl: Added.
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:
        * dom/DOMException.h:
        * dom/EventNames.in:

2021-09-09  Youenn Fablet  <youenn@apple.com>

        Add support for RTCDataChannel closing event
        https://bugs.webkit.org/show_bug.cgi?id=229988

        Reviewed by Eric Carlson.

        Add support for the closing event.
        Updating close method as per https://w3c.github.io/webrtc-pc/#dom-rtcdatachannel-close:
        - make the channel enter closing state (without firing event)
        - wait for the state to move to closed from the backend.

        We also add support for the error event by checking, when entering closed state whether
        the channel is in an error state.

        Covered by rebased test.

        * Modules/mediastream/RTCDataChannel.cpp:
        (WebCore::RTCDataChannel::close):
        (WebCore::RTCDataChannel::didChangeReadyState):
        (WebCore::RTCDataChannel::stop):
        * Modules/mediastream/RTCDataChannel.idl:
        * Modules/mediastream/libwebrtc/LibWebRTCDataChannelHandler.cpp:
        (WebCore::LibWebRTCDataChannelHandler::checkState):
        * dom/EventNames.h:

2021-09-09  Youenn Fablet  <youenn@apple.com>

        Add support for RTCSctpTransport
        https://bugs.webkit.org/show_bug.cgi?id=229292
        <rdar://problem/82394152>

        Reviewed by Eric Carlson.

        Expose RTSctpTransport API and getter from the peer connection.
        Implement event mechanism and getters.
        Additional work will be needed to make ice transport objects consistent between SCTP and senders/receivers.
        Covered by rebased tests.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/mediastream/PeerConnectionBackend.cpp:
        (WebCore::PeerConnectionBackend::setLocalDescriptionSucceeded):
        (WebCore::PeerConnectionBackend::setRemoteDescriptionSucceeded):
        * Modules/mediastream/PeerConnectionBackend.h:
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::updateSctpBackend):
        * Modules/mediastream/RTCPeerConnection.h:
        * Modules/mediastream/RTCPeerConnection.idl:
        * Modules/mediastream/RTCSctpTransport.cpp: Added.
        (WebCore::RTCSctpTransport::RTCSctpTransport):
        (WebCore::RTCSctpTransport::~RTCSctpTransport):
        (WebCore::RTCSctpTransport::stop):
        (WebCore::RTCSctpTransport::virtualHasPendingActivity const):
        (WebCore::RTCSctpTransport::onStateChanged):
        * Modules/mediastream/RTCSctpTransport.h: Added.
        * Modules/mediastream/RTCSctpTransport.idl: Added.
        * Modules/mediastream/RTCSctpTransportBackend.h: Added.
        (WebCore::operator==):
        * Modules/mediastream/RTCSctpTransportState.h: Added.
        * Modules/mediastream/RTCSctpTransportState.idl: Added.
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::SctpTransportState::SctpTransportState):
        (WebCore::SctpTransportState::createBackend):
        (WebCore::LibWebRTCMediaEndpoint::setLocalSessionDescriptionSucceeded):
        (WebCore::LibWebRTCMediaEndpoint::setLocalSessionDescriptionFailed):
        (WebCore::LibWebRTCMediaEndpoint::setRemoteSessionDescriptionSucceeded):
        * Modules/mediastream/libwebrtc/LibWebRTCSctpTransportBackend.cpp: Added.
        (WebCore::toRTCSctpTransportState):
        (WebCore::LibWebRTCSctpTransportBackendObserver::LibWebRTCSctpTransportBackendObserver):
        (WebCore::LibWebRTCSctpTransportBackendObserver::updateState):
        (WebCore::LibWebRTCSctpTransportBackendObserver::start):
        (WebCore::LibWebRTCSctpTransportBackendObserver::stop):
        (WebCore::LibWebRTCSctpTransportBackendObserver::OnStateChange):
        (WebCore::LibWebRTCSctpTransportBackend::LibWebRTCSctpTransportBackend):
        (WebCore::LibWebRTCSctpTransportBackend::~LibWebRTCSctpTransportBackend):
        (WebCore::LibWebRTCSctpTransportBackend::dtlsTransportBackend):
        (WebCore::LibWebRTCSctpTransportBackend::registerClient):
        (WebCore::LibWebRTCSctpTransportBackend::unregisterClient):
        * Modules/mediastream/libwebrtc/LibWebRTCSctpTransportBackend.h: Added.
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:
        * dom/EventTargetFactory.in:

2021-09-09  Jean-Yves Avenard  <jya@apple.com>

        [WebAudio/WebM] Incorrect number of frames returned if decoding frame rate doesn't match original
        https://bugs.webkit.org/show_bug.cgi?id=229251
        rdar://problem/82095650

        Reviewed by Eric Carlson..

        We can't rely on CoreMedia to performed the trimming correctly when resampling is also to be done.
        It gives unexpected results. Let's do it ourselves instead.
        Test: webaudio/decode-audio-data-webm-opus-resample.html

        * platform/audio/cocoa/AudioFileReaderCocoa.cpp:
        (WebCore::AudioFileReader::decodeWebMData const):

2021-09-08  Youenn Fablet  <youenn@apple.com>

        RTCPeerConnection.addIceCandidate takes an optional argument
        https://bugs.webkit.org/show_bug.cgi?id=229962

        Reviewed by Eric Carlson.

        Covered by rebased test.

        * Modules/mediastream/RTCPeerConnection.idl:

2021-09-08  Youenn Fablet  <youenn@apple.com>

        Add video metrics logging to LocalSampleBufferDisplayLayer
        https://bugs.webkit.org/show_bug.cgi?id=229930

        Reviewed by Eric Carlson.

        No change of behavior.

        * platform/graphics/avfoundation/objc/LocalSampleBufferDisplayLayer.mm:
        (WebCore::LocalSampleBufferDisplayLayer::enqueueSampleBuffer):
        Log every minute AVSBDL metrics, which can help to evaluate video freeze issues.

2021-09-08  Kimmo Kinnunen  <kkinnunen@apple.com>

        webgl/2.0.y/conformance2/vertex_arrays/vertex-array-object.html fails
        https://bugs.webkit.org/show_bug.cgi?id=223360
        <rdar://problem/75774546>

        Reviewed by Dean Jackson.

        Deleting a buffer will remove the buffer from currently active
        vertex array buffer bindings. This worked.
        Drawing with a vertex array object that has enabled indexes
        but missing buffers for those indexes should fail. This
        WebGL specific constraint is checked by ANGLE. However, WebCore
        relies on buffer deletion to update the ANGLE VAO. The deletion
        does not happen due to the buffers in the test being bound to
        multiple VAOs.
        Add this check also to WebCore.

        Fixed tests:
        webgl/1.0.x/conformance/extensions/oes-vertex-array-object.html
        webgl/2.0.y/conformance2/vertex_arrays/vertex-array-object.html

        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::initializeVertexArrayObjects):
        (WebCore::WebGL2RenderingContext::drawRangeElements):
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::initializeVertexArrayObjects):
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::disableVertexAttribArray):
        (WebCore::WebGLRenderingContextBase::validateVertexArrayObject):
        (WebCore::WebGLRenderingContextBase::drawArrays):
        (WebCore::WebGLRenderingContextBase::drawElements):
        (WebCore::WebGLRenderingContextBase::enableVertexAttribArray):
        (WebCore::WebGLRenderingContextBase::vertexAttribPointer):
        (WebCore::WebGLRenderingContextBase::initVertexAttrib0):
        (WebCore::WebGLRenderingContextBase::drawArraysInstanced):
        (WebCore::WebGLRenderingContextBase::drawElementsInstanced):
        * html/canvas/WebGLRenderingContextBase.h:
        * html/canvas/WebGLVertexArrayObjectBase.cpp:
        (WebCore::WebGLVertexArrayObjectBase::WebGLVertexArrayObjectBase):
        (WebCore::WebGLVertexArrayObjectBase::setVertexAttribEnabled):
        (WebCore::WebGLVertexArrayObjectBase::setVertexAttribState):
        (WebCore::WebGLVertexArrayObjectBase::unbindBuffer):
        (WebCore::WebGLVertexArrayObjectBase::updateVertexAttrib0):
        (WebCore::WebGLVertexArrayObjectBase::areAllEnabledAttribBuffersBound):
        * html/canvas/WebGLVertexArrayObjectBase.h:
        (WebCore::WebGLVertexArrayObjectBase::getVertexAttribState):
        Make VertexAttribState& a const so that we can maintain confidence
        that the cached value of "all enabled attrib buffers are bound"
        is maintained, e.g. that the callers cannot modify enabled or bound
        buffer status.

2021-09-08  Ryosuke Niwa  <rniwa@webkit.org>

        Deploy CheckedRef on FocusController
        https://bugs.webkit.org/show_bug.cgi?id=230037

        Reviewed by Wenson Hsieh.

        Make FocusController inherit from CanMakeCheckedPtr and deploy CheckedRef / CheckedPtr wherever appropriate.
 
        * dom/Element.cpp:
        (WebCore::Element::focus):
        (WebCore::Element::blur):
         * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::selectFrameElementInParentIfFullySelected):
        (WebCore::FrameSelection::setFocusedElementIfNeeded):
        * editing/cocoa/AutofillElements.cpp:
        (WebCore::AutofillElements::computeAutofillElements):
        * editing/cocoa/DictionaryLookup.mm:
        (WebCore::DictionaryLookup::rangeAtHitTestResult):
        * history/BackForwardCache.cpp:
        (WebCore::BackForwardCache::trySuspendPage):
        * history/CachedPage.cpp:
        (WebCore::CachedPage::restore):
        * html/BaseDateAndTimeInputType.cpp:
        (WebCore::BaseDateAndTimeInputType::handleFocusEvent):
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::setFocus):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::focus):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handlePasteGlobalSelection):
        (WebCore::EventHandler::dispatchMouseEvent):
        (WebCore::EventHandler::defaultArrowEventHandler):
        (WebCore::EventHandler::defaultTabEventHandler):
        (WebCore::EventHandler::focusDocumentView):
        * page/FocusController.h:
        * page/Frame.cpp:
        (WebCore::Frame::willDetachPage):
        * page/Page.cpp:
        (WebCore::Page::findString):
        (WebCore::Page::replaceSelectionWithText):
        (WebCore::Page::editableElementsInRect const):
        (WebCore::Page::selection const):
        (WebCore::Page::setActivityState):
        (WebCore::Page::revealCurrentSelection):
        * page/ios/EventHandlerIOS.mm:
        (WebCore::EventHandler::focusDocumentView):
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::focusDocumentView):
        * page/mac/ServicesOverlayController.mm:
        (WebCore::ServicesOverlayController::remainingTimeUntilHighlightShouldBeShown const):
        (WebCore::ServicesOverlayController::telephoneNumberRangesForFocusedFrame):
        (WebCore::ServicesOverlayController::handleClick):

2021-09-08  Fujii Hironori  <Hironori.Fujii@sony.com>

        generated MessageArgumentDescriptions.cpp can't compile for non-Cocoa ports due to missing headers
        https://bugs.webkit.org/show_bug.cgi?id=230075

        Reviewed by Ryosuke Niwa.

        * workers/service/ServiceWorkerFetchResult.h: Added a missing
        header inclusion for MessageArgumentDescriptions.cpp.

2021-09-08  Fujii Hironori  <Hironori.Fujii@sony.com>

        KeyboardEvent should setDefaultHandled if EventHandler::startKeyboardScrolling returns true
        https://bugs.webkit.org/show_bug.cgi?id=229784

        Reviewed by Darin Adler.

        If a KeyboardEvent is handled by the default event handler, it
        should be marked by Event::setDefaultHandled.

        Test: fast/scrolling/keyboard-scrolling-last-timestamp.html

        * page/EventHandler.cpp:
        (WebCore::EventHandler::defaultKeyboardEventHandler):
        (WebCore::EventHandler::defaultArrowEventHandler):

2021-09-08  Nikos Mouchtaris  <nmouchtaris@apple.com>

        Implement sin, cos, tan, e and pi for calc
        https://bugs.webkit.org/show_bug.cgi?id=229507

        Reviewed by Simon Fraser.

        Tests: css3/calc/simple-trig-functions.html
               css3/calc/trig-functions-with-constants.html
        
        Add support for sin, cos, and tan functions within calc. Also add e and pi
        constant values within calc.
        
        * css/CSSValueKeywords.in:
        Add sin,cos,e and pi keywords.
        
        * css/calc/CSSCalcExpressionNodeParser.cpp:
        (WebCore::getConstantTable):
        Add helper function with table mapping e and pi keywords to their
        approximate numerical value.
        
        (WebCore::CSSCalcExpressionNodeParser::parseCalcFunction):
        Add handling for creation of sin,cos,tan operation nodes.
        
        (WebCore::CSSCalcExpressionNodeParser::parseValue):
        Add handling for creation of primitive css value when constant is parsed.
        
        * css/calc/CSSCalcOperationNode.cpp:
        (WebCore::determineCategory):
        Add sin,cos,tan to switch statement.
        
        (WebCore::functionFromOperator):
        Add sin,cos,tan to switch statement.
        
        (WebCore::CSSCalcOperationNode::createTrig):
        Add function for creation of sin,cos,tan operation node.
        
        (WebCore::CSSCalcOperationNode::combineChildren):
        Add handling for performing sin,cos,tan function on child node.
        
        (WebCore::CSSCalcOperationNode::simplifyNode):
        Add handling for sin,cos,tan.
        
        (WebCore::CSSCalcOperationNode::primitiveType const):
        Remove assert that is no longer correct. Trig functions take can take an
        angle and return a number, so it is no longer the case that all children
        of a node producing a number must be numbers themself.
        
        (WebCore::CSSCalcOperationNode::doubleValue const):
        Convert chilren nodes that are angles to radians.
        
        (WebCore::functionPrefixForOperator):
        Add handling for sin,cos,tan.
        
        (WebCore::CSSCalcOperationNode::evaluateOperator):
        Add functionality for sin,cos,tan functions.
        
        * css/calc/CSSCalcOperationNode.h:
        * css/calc/CSSCalcValue.cpp:
        (WebCore::createCSS):
        Add handling for creation of sin,cos,tan operation nodes.
        
        (WebCore::CSSCalcValue::isCalcFunction):
        Add handling for sin,cos,tan.
        
        * platform/calc/CalcExpressionOperation.cpp:
        (WebCore::CalcExpressionOperation::evaluate const):
        Add functionality for sin,cos,tan function.
        
        * platform/calc/CalcOperator.cpp:
        (WebCore::operator<<):
        Add handling for sin,cos,tan.
        
        * platform/calc/CalcOperator.h:

2021-09-08  Kimmo Kinnunen  <kkinnunen@apple.com>

        webgl/2.0.y/conformance/extensions/webgl-compressed-texture-etc.html fails on Metal
        https://bugs.webkit.org/show_bug.cgi?id=229940

        Reviewed by Dean Jackson.

        Add compressed texture upload internal format validation back.
        This was disabled when ANGLE was integrated.
        ANGLE does not check whether the extensions are enabled or not.

        Fixes tests:
        webgl/1.0.x/conformance/extensions/webgl-compressed-texture-etc.html 
        webgl/2.0.y/conformance/extensions/webgl-compressed-texture-etc.html 

        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::compressedTexImage2D):
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::compressedTexImage2D):
        (WebCore::WebGLRenderingContextBase::compressedTexSubImage2D):
        (WebCore::WebGLRenderingContextBase::validateCompressedTexFormat):
        * html/canvas/WebGLRenderingContextBase.h:

2021-09-08  Manuel Rego Casasnovas  <rego@igalia.com>

        [css-text-decor] text-decoration-* properties are no longer experimental
        https://bugs.webkit.org/show_bug.cgi?id=230039

        Reviewed by Simon Fraser.

        * css/CSSProperties.json: Remove experimental status from text-decoration-* properties.

2021-09-08  Antti Koivisto  <antti@apple.com>

        [LFC][Integration] Hovering over link switches to legacy inline boxes
        https://bugs.webkit.org/show_bug.cgi?id=226812
        <rdar://problem/79394047>

        Reviewed by Alan Bujtas.

        Implement rect/quad collection functions in RenderInline by getting data from LFC.

        * layout/integration/LayoutIntegrationLineLayout.cpp:
        (WebCore::LayoutIntegration::LineLayout::visualOverflowBoundingBoxRectFor const):

        Some tests taking LFC path were affected by the missing implementation here.

        (WebCore::LayoutIntegration::LineLayout::collectInlineBoxRects const):
        * layout/integration/LayoutIntegrationLineLayout.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::generateLineBoxRects const):
        (WebCore::RenderInline::absoluteRects const):
        (WebCore::RenderInline::absoluteQuads const):
        (WebCore::RenderInline::absoluteQuadsIgnoringContinuation const):
        (WebCore::RenderInline::absoluteQuadsForSelection const):
        (WebCore::RenderInline::addFocusRingRects):

2021-09-08  Youenn Fablet  <youenn@apple.com>

        webrtc/ephemeral-certificates-and-cnames.html needs to close its connections between two tests
        https://bugs.webkit.org/show_bug.cgi?id=229931

        Reviewed by Eric Carlson.

        Covered by updated test.

        * Modules/mediastream/PeerConnectionBackend.cpp:
        (WebCore::PeerConnectionBackend::addIceCandidate):
        As per https://w3c.github.io/webrtc-pc/#dom-peerconnection-addicecandidate step 4.7, abort if peer connection is closed.
        (WebCore::PeerConnectionBackend::newICECandidate):
        As per https://w3c.github.io/webrtc-pc/#dfn-surface-the-candidate,
        no need to fire an ICE candidate event if peer connection is closed.
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::addIceCandidate):
        Return early if peer connection is closed as per https://w3c.github.io/webrtc-pc/#dom-peerconnection-addicecandidate.

2021-09-08  Simon Fraser  <simon.fraser@apple.com>

        Support percentages in the scale() transform functions, and the scale property
        https://bugs.webkit.org/show_bug.cgi?id=202501

        Reviewed by Sam Weinig.

        Support percentage values in the scale*() functions in the transform property, and
        on the scale property. These value are converted by numbers by dividing by 100
        at parse time, as we do for alpha values in colors. We have to keep calc() intact,
        so % calcs need to be divided by 100 at use time.

        Test: transforms/2d/scale-percent.html

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::doubleValueDividingBy100IfPercentage const):
        * css/CSSPrimitiveValue.h:
        * css/TransformFunctions.cpp:
        (WebCore::transformsForValue):
        (WebCore::scaleForValue):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeNumbersOrPercents):
        (WebCore::consumeTransformValue):
        (WebCore::consumeScale):
        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::consumeNumberRawOrPercentRaw):
        (WebCore::CSSPropertyParserHelpers::consumeNumberRawOrPercentRawAllowingSymbolTableIdent):
        (WebCore::CSSPropertyParserHelpers::consumeNumberOrPercent):
        * css/parser/CSSPropertyParserHelpers.h:

2021-09-08  Simon Fraser  <simon.fraser@apple.com>

        Add a temporarily prefixed property for mask-mode, aliased to -webkit-mask-source-type
        https://bugs.webkit.org/show_bug.cgi?id=229915

        Reviewed by Antti Koivisto.
        
        In preparation for unprefixing the "mask" property, add -webkit-mask-mode. This is 
        almost an alias to the existing -webkit-mask-source-type, but takes a "match-source"
        value rather than "auto".

        To make it easier to have aliases with different parsing requirements, add support
        in CSSProperties.json for "synonyms"; these are like aliases but they get their
        own CSSPropertyID to allow for customized parsing. They share style builder code
        with the related property.
        
        FillLayer now uses MaskMode rather than MaskSourceType.

        Test: fast/masking/parsing-mask-mode.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::maskSourceTypeToCSSValue):
        (WebCore::maskModeToCSSValue):
        (WebCore::ComputedStyleExtractor::valueForPropertyInStyle):
        (WebCore::fillSourceTypeToCSSValue): Deleted.
        * css/CSSProperties.json:
        * css/CSSToStyleMap.cpp:
        (WebCore::CSSToStyleMap::mapFillMaskMode):
        (WebCore::CSSToStyleMap::mapFillMaskSourceType): Deleted.
        * css/CSSToStyleMap.h:
        * css/CSSValueKeywords.in:
        * css/makeprop.pl:
        (addProperty):
        (generateFillLayerPropertyValueSetter):
        (generateValueSetter):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeWebkitMaskMode):
        (WebCore::consumeBackgroundComponent):
        (WebCore::CSSPropertyParser::parseSingleValue):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * rendering/style/FillLayer.cpp:
        (WebCore::FillLayer::FillLayer):
        (WebCore::FillLayer::operator=):
        (WebCore::FillLayer::operator== const):
        (WebCore::operator<<):
        * rendering/style/FillLayer.h:
        (WebCore::FillLayer::maskMode const):
        (WebCore::FillLayer::isMaskModeSet const):
        (WebCore::FillLayer::setMaskMode):
        (WebCore::FillLayer::clearMaskMode):
        (WebCore::FillLayer::initialFillMaskMode):
        (WebCore::FillLayer::maskSourceType const): Deleted.
        (WebCore::FillLayer::isMaskSourceTypeSet const): Deleted.
        (WebCore::FillLayer::setMaskSourceType): Deleted.
        (WebCore::FillLayer::clearMaskSourceType): Deleted.
        (WebCore::FillLayer::initialFillMaskSourceType): Deleted.
        * rendering/style/RenderStyleConstants.cpp:
        (WebCore::operator<<):
        * rendering/style/RenderStyleConstants.h:

2021-09-08  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add a fast path for atomizing strings when parsing HTML
        https://bugs.webkit.org/show_bug.cgi?id=229907
        rdar://82854612

        Reviewed by Yusuke Suzuki and Darin Adler.

        On various subtests in Speedometer 2, a nontrivial amount of time is spent mapping raw UChar data vectors into
        AtomStrings while parsing HTML tag names, attribute names and attribute values. Most of this happens underneath
        the AtomHTMLToken constructor, which computes a hash for each string in the process of adding it to the atom
        string table; the time it takes to compute this string hash increases linearly with the length of the string.

        However, over the course of the benchmark, the vast majority of AtomStrings created out of tag names, attribute
        names and attribute values are both:

        (1) Strings that we've already recently atomized, and
        (2) Usually distinguishable from other atom strings based solely on their first character, last character, and
            overall string length.

        As such, it's possible to slightly improve string atomization performance in this particular case (i.e. parsing
        HTML) by maintaining a smaller cache of recently atomized AtomStrings that we index using a simple, constant-
        time hash function that considers only the first character, last character, and length of the string. In terms
        of the cache hit rate in this AtomString cache, the default string hashing algorithm only barely outperforms
        this simple hash function on Speedometer (i.e., a cache hit rate of 99.24% using the default hash algorithm vs.
        99.15% using the "first/last character and length" hash).

        Using this technique, we can get a significant performance improvement on Speedometer by introducing two small,
        fixed-size (512 capacity) AtomString tables: one to hold tag names and attribute names, and another to hold
        attribute values (which seems to contain a much larger set of unique strings); we additionally use the cheap "2-
        char & length" hash algorithm described above to index into these fixed-size tables.

        This allows us to more efficiently atomize not only known tag and attribute names, but also custom element tag
        names and attribute names and values that tend to appear frequently in markup (e.g. due to using certain
        JavaScript frameworks that get and set HTML attributes).

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * html/parser/AtomHTMLToken.h:
        (WebCore::AtomHTMLToken::initializeAttributes):
        (WebCore::AtomHTMLToken::AtomHTMLToken):
        * html/parser/HTMLAtomStringCache.cpp: Added.
        (WebCore::HTMLAtomStringCache::cache):
        * html/parser/HTMLAtomStringCache.h: Added.

        Add a helper class that exposes three static inline helper methods: `makeTagOrAttributeName` and
        `makeAttributeValue`, which return AtomStrings for the given `Vector<UChar>` (consulting the corresponding
        cache if possible); and `clear`, which empties all cached atom strings.

        (WebCore::HTMLAtomStringCache::makeTagOrAttributeName):
        (WebCore::HTMLAtomStringCache::makeAttributeValue):
        (WebCore::HTMLAtomStringCache::clear):
        (WebCore::HTMLAtomStringCache::make):

        Additionally add an upper length limit for characters that we include in this cache; in practice, longer strings
        tend to be repeatedly atomized less frequently than shorter strings. The 36-character limit also allows for
        frequently-parsed (and atomized) UUIDs to be cached.

        (WebCore::HTMLAtomStringCache::cacheSlot):

        This hashing algorithm was inspired by `calculateWithTwoCharacters`, but with constants specifically chosen to
        minimize collisions between common HTML tag and attribute names.

        * page/MemoryRelease.cpp:
        (WebCore::releaseNoncriticalMemory):
        * page/cocoa/MemoryReleaseCocoa.mm:
        (WebCore::jettisonExpensiveObjectsOnTopLevelNavigation):

        Add logic to clear the HTML atom string cache upon receiving a low memory warning, and upon top-level
        navigation.

2021-09-08  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add support for inline box ink overflow
        https://bugs.webkit.org/show_bug.cgi?id=230026

        Reviewed by Antti Koivisto.

        Collecting the ink overflow from the descendant boxes has 2 phases.
        1. Update the ink overflow on the parent inline box (unless it's a root inline box) as we walk the line content
        and find the atomic inline level boxes (e.g. <span><img></span>)
        2. Collect the ink overflow on nested inline boxes (e.g. <span>some<span style="font-size: 100px">text</span><span>). 

        * layout/formattingContexts/inline/InlineDisplayContentBuilder.cpp:
        (WebCore::Layout::InlineDisplayContentBuilder::InlineDisplayContentBuilder):
        (WebCore::Layout::InlineDisplayContentBuilder::build):
        (WebCore::Layout::InlineDisplayContentBuilder::createRunsAndUpdateGeometryForLineContent):
        (WebCore::Layout::InlineDisplayContentBuilder::createRunsAndUpdateGeometryForLineSpanningInlineBoxes):
        (WebCore::Layout::InlineDisplayContentBuilder::collectInkOverflowForInlineBoxRuns):
        * layout/formattingContexts/inline/InlineDisplayContentBuilder.h:
        * layout/formattingContexts/inline/InlineLineRun.h:
        (WebCore::Layout::Run::adjustInkOverflow):

2021-09-08  Martin Robinson  <mrobinson@webkit.org>

        [css-position-sticky] Sticky constraints are calculated incorrectly when scrolling container has padding and borders
        https://bugs.webkit.org/show_bug.cgi?id=229997

        Reviewed by Simon Fraser.

        No new tests. This is covered by two existing WPT tests:
            web-platform-tests/css/css-position/sticky/position-sticky-large-top-2.tentative-expected.html
            web-platform-tests/css/css-position/sticky/position-sticky-large-top.tentative-expected.html

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::computeStickyPositionConstraints const): When the containing block and the scroll container
        are the same, fix the calculation of the container content rect. layoutOverflowRect() already does not include the border,
        so stop adjusting for that. In addition, instead of simply adjusting the rect location by the padding, actually contract
        it so that the bottom and right edges of the rectangle are correct.

2021-09-08  Jean-Yves Avenard  <jya@apple.com>

        Safari TP 131 audio canPlayType() reports false negatives
        https://bugs.webkit.org/show_bug.cgi?id=229799
        rdar://problem/82776747

        Reviewed by Youenn Fablet.

        webaudio now supports the same webm content as the video and audio element,
        making this workaround no longer necessary.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::canPlayType const): Remove work around
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::webMParserEnabled const): Remove now unused method.

2021-09-08  Kimmo Kinnunen  <kkinnunen@apple.com>

        webgl/2.0.y/deqp/functional/gles3/negativeshaderapi.html fails on Metal
        https://bugs.webkit.org/show_bug.cgi?id=229946

        Reviewed by Kenneth Russell.

        Add a missing check for link status.

        Fixes tests:
        webgl/2.0.0/deqp/functional/gles3/negativeshaderapi.html
        webgl/2.0.y/deqp/functional/gles3/negativeshaderapi.html

        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::getTransformFeedbackVarying):

2021-09-08  Kimmo Kinnunen  <kkinnunen@apple.com>

        webgl/2.0.y/deqp/functional/gles3/negativetextureapi.html fails on Metal
        https://bugs.webkit.org/show_bug.cgi?id=229948

        Reviewed by Dean Jackson.

        Validate the texStorage3D target using correct
        validation function. The validation should be removed, as
        same is done in ANGLE, but for consistency it should be
        removed from all functions. Until removal, use correct
        WebKit-side validation too.

        Fixes tests:
        webgl/2.0.0/deqp/functional/gles3/negativetextureapi.html
        webgl/2.0.y/deqp/functional/gles3/negativetextureapi.html
        webgl/2.0.0/conformance2/textures/misc/tex-storage-and-subimage-3d.html
        webgl/2.0.y/conformance2/textures/misc/tex-storage-and-subimage-3d.html

        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::texStorage3D):

2021-09-08  Tim Nguyen  <ntim@apple.com>

        Support animations on ::backdrop
        https://bugs.webkit.org/show_bug.cgi?id=229042

        Reviewed by Antoine Quint.

        * style/StyleTreeResolver.cpp:
        (WebCore::Style::TreeResolver::resolveElement):
        (WebCore::Style::TreeResolver::resolvePseudoStyle):

2021-09-08  Kimmo Kinnunen  <kkinnunen@apple.com>

        webgl/2.0.y/deqp/functional/gles3/rbostatequery.html fails on Metal
        https://bugs.webkit.org/show_bug.cgi?id=229950

        Reviewed by Dean Jackson.

        Request ANGLE_framebuffer_multisample when creating WebGL2 context.
        WebGL2 spec requires multisampled framebuffers.

        The test that would fail is:
                gl.renderbufferStorageMultisample(gl.RENDERBUFFER, samples, gl.RGBA8, 128, 128);
                var value = /** @type {number} */ (gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_SAMPLES));
                this.check(value >= samples, 'Expected greater or equal to ' + samples + ' got ' + value);
        for `samples == 1` the test would have `value == 0` with INVALID_OPERATION from ANGLE due to
        the extension not being enabled.

        Fixes tests:
        webgl/2.0.0/deqp/functional/gles3/rbostatequery.html
        webgl/2.0.y/deqp/functional/gles3/rbostatequery.html

        * platform/graphics/cocoa/GraphicsContextGLOpenGLCocoa.mm:
        (WebCore::GraphicsContextGLOpenGL::GraphicsContextGLOpenGL):

2021-09-07  Kimmo Kinnunen  <kkinnunen@apple.com>

        webgl/2.0.y/deqp/functional/gles3/negativestateapi.html get_query_parameter  fails on Metal
        https://bugs.webkit.org/show_bug.cgi?id=229982

        Reviewed by Dean Jackson.

        Check that the query being queried with getQueryParameter is not part
        of the currently active queries.

        Failing part of the test:
                bufferedLogToConsole('gl.INVALID_OPERATION is generated if id is the name of a currently active query object.');
                gl.beginQuery (gl.ANY_SAMPLES_PASSED, id);
                this.expectError (gl.NO_ERROR);
                gl.getQueryParameter (id, gl.QUERY_RESULT_AVAILABLE);
                this.expectError (gl.INVALID_OPERATION);

        Fixes test:
        webgl/2.0.y/deqp/functional/gles3/negativestateapi.html

        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::~WebGL2RenderingContext):
        (WebCore::WebGL2RenderingContext::deleteQuery):
        (WebCore::WebGL2RenderingContext::validateQueryTarget):
        (WebCore::WebGL2RenderingContext::beginQuery):
        (WebCore::WebGL2RenderingContext::endQuery):
        (WebCore::WebGL2RenderingContext::getQuery):
        (WebCore::WebGL2RenderingContext::getQueryParameter):
        (WebCore::WebGL2RenderingContext::addMembersToOpaqueRoots):
        * html/canvas/WebGL2RenderingContext.h:
        Change the 2-element HashMap to 2-element array for ease of
        enumeration and trivial size optimization.

2021-09-07  Sihui Liu  <sihui_liu@apple.com>

        Add basic support for Storage API
        https://bugs.webkit.org/show_bug.cgi?id=229925

        Reviewed by Darin Adler.

        Add bindings code and a feature flag for Storage API.
        Spec: https://storage.spec.whatwg.org

        Rebaselined existing tests.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Headers.cmake:
        * Modules/storage/DummyStorageProvider.h: Added.
        * Modules/storage/StorageConnection.h: Added.
        * Modules/storage/StorageManager.cpp: Added.
        (WebCore::StorageManager::create):
        (WebCore::StorageManager::StorageManager):
        (WebCore::clientOrigin):
        (WebCore::StorageManager::persisted):
        (WebCore::StorageManager::persist):
        * Modules/storage/StorageManager.h: Added.
        * Modules/storage/StorageManager.idl: Added.
        * Modules/storage/StorageProvider.h: Added.
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:
        * dom/Document.cpp:
        (WebCore::Document::storageConnection):
        * dom/Document.h:
        * dom/ScriptExecutionContext.h:
        (WebCore::ScriptExecutionContext::storageConnection):
        * loader/EmptyClients.cpp:
        (WebCore::pageConfigurationWithEmptyClients):
        * page/Navigator.idl:
        * page/NavigatorBase.cpp:
        * page/NavigatorBase.h:
        * page/NavigatorStorage.idl: Added.
        * page/Page.cpp:
        (WebCore::m_storageProvider):
        (WebCore::Page::storageConnection):
        (WebCore::m_permissionController): Deleted.
        * page/Page.h:
        * page/PageConfiguration.cpp:
        (WebCore::PageConfiguration::PageConfiguration):
        * page/PageConfiguration.h:

2021-09-07  Antti Koivisto  <antti@apple.com>

        Disable inline culling
        https://bugs.webkit.org/show_bug.cgi?id=229993

        Reviewed by Alan Bujtas.

        Inline culling is an optimization that avoids creating LegacyInlineFlowBoxes for inline
        elements under certain circumstances (basically if they don't affect rendering).

        The optimization is is complex and requires a ton of code. It is a constant source of bugs.
        Meanwhile the kind of content where this is beneficial is already mostly taken over by LFC.
        It is time to remove it.

        This patch disables the optimization but doesn't yet remove the code.

        * editing/SimplifyMarkupCommand.cpp:
        (WebCore::SimplifyMarkupCommand::doApply):
        * rendering/LegacyEllipsisBox.cpp:
        (WebCore::LegacyEllipsisBox::markupBox const):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::mayAffectRendering const):
        (WebCore::RenderInline::updateAlwaysCreateLineBoxes):
        (WebCore::RenderInline::shouldCreateLineBoxes const): Deleted.
        * rendering/RenderInline.h:
        (WebCore::RenderInline::alwaysCreateLineBoxes const):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::hasNonEmptySibling):

2021-09-07  Alex Christensen  <achristensen@webkit.org>

        Fix iOS debug build, probably after r282115
       ​https://bugs.webkit.org/show_bug.cgi?id=229664

        A symbol was missing when linking WebKit framework.  Export it from WebCore framework.

        * dom/ViewportArguments.h:

2021-09-07  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Construct line spanning inline boxes first
        https://bugs.webkit.org/show_bug.cgi?id=230018

        Reviewed by Antti Koivisto.

        Runs for line spanning inline boxes (e.g. <span>first line<br>second line</span>) can now be constrcuted before getting to the actual line content.
        (It simply means that we can keep adding runs to the vector instead of using insert to position the line spanning inline box runs right after the root inline box run.) 

        * layout/formattingContexts/inline/InlineDisplayContentBuilder.cpp:
        (WebCore::Layout::InlineDisplayContentBuilder::build):
        (WebCore::Layout::InlineDisplayContentBuilder::createRunsAndUpdateGeometryForLineContent):
        (WebCore::Layout::InlineDisplayContentBuilder::createRunsAndUpdateGeometryForLineSpanningInlineBoxes):
        * layout/formattingContexts/inline/InlineDisplayContentBuilder.h:

2021-09-07  Ryosuke Niwa  <rniwa@webkit.org>

        Eagerly resolve slot elements to simply the code in SlotAssignment
        https://bugs.webkit.org/show_bug.cgi?id=229748
        <rdar://problem/82732031>

        Unreviewed. Restore the code that got erroneously removed in r281878.

        * dom/SlotAssignment.cpp:
        (WebCore::SlotAssignment::addSlotElementByName):

2021-09-07  Cameron McCormack  <heycam@apple.com>

        Ensure ImageBuffers are destroyed on the main thread
        https://bugs.webkit.org/show_bug.cgi?id=229906
        <rdar://problem/82745925>

        Reviewed by Ryosuke Niwa.

        * platform/graphics/ImageBuffer.h:

2021-09-07  Cameron McCormack  <heycam@apple.com>

        Add an IPCMessages channel to log all IPC messages
        https://bugs.webkit.org/show_bug.cgi?id=229664
        <rdar://problem/82511640>

        Reviewed by Alex Christensen.

        Add a way to get the type of process we're in as a string, for
        logging.

        * platform/RuntimeApplicationChecks.cpp:
        (WebCore::processType):
        (WebCore::processTypeDescription):
        * platform/RuntimeApplicationChecks.h:

2021-09-07  Chris Dumez  <cdumez@apple.com>

        Implement origin partitioning (top-origin/frame-origin) for BroadcastChannel
        https://bugs.webkit.org/show_bug.cgi?id=229814

        Reviewed by Alex Christensen.

        Implement origin partitioning (top-origin/frame-origin) for BroadcastChannel to address privacy
        concerns, as discussed here:
        - https://github.com/whatwg/html/issues/5803

        Test: http/tests/messaging/broadcastchannel-partitioning.html

        * dom/BroadcastChannel.cpp:
        (WebCore::BroadcastChannel::BroadcastChannel):
        (WebCore::m_identifier):
        (WebCore::BroadcastChannel::dispatchMessage):
        * dom/BroadcastChannel.h:
        * dom/BroadcastChannelRegistry.h:
        * loader/EmptyClients.cpp:

2021-09-07  Kimmo Kinnunen  <kkinnunen@apple.com>

        webgl/2.0.y/deqp/functional/gles3/negativestateapi.html get_framebuffer_attachment_parameter fails on Metal
        https://bugs.webkit.org/show_bug.cgi?id=229947

        Reviewed by Kenneth Russell.

        Fix get_framebuffer_attachment_parameter part of
        webgl/2.0.y/deqp/functional/gles3/negativestateapi.html.
        The code was querying the attachment parameters of default framebuffer from ANGLE.
        However, this is problematic as WebGL default framebuffer is emulated with
        a FBO with texture and stencil attachment. As such, some properties returned
        values that should have returned errors.
        WebGL2 specification specifies all the properties that can be queried.
        All these properties are known at the WebCore level, so just return them
        there.
        Failing test part was:
            gl.bindFramebuffer(gl.FRAMEBUFFER, null);
            gl.getFramebufferAttachmentParameter(gl.FRAMEBUFFER, gl.BACK, gl.FRAMEBUFFER_ATTACHMENT_OBJECT_NAME);
            this.expectError(gl.INVALID_ENUM);
        and:
            gl.bindFramebuffer(gl.FRAMEBUFFER, null);
            gl.getFramebufferAttachmentParameter(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.FRAMEBUFFER_ATTACHMENT_OBJECT_NAME);
            this.expectError([gl.INVALID_OPERATION, gl.INVALID_ENUM]);

        Tested by:
        webgl/2.0.y/deqp/functional/gles3/negativestateapi.html

        Does modify test expectations since the test fails in other, unrelated parts.

        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::getFramebufferAttachmentParameter):

2021-09-07  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r282086.
        https://bugs.webkit.org/show_bug.cgi?id=230005

        Turns out -webkit-line-clamp with link is used by iTunes store

        Reverted changeset:

        "Remove -webkit-line-clamp behaviour where last link is placed
        after ellipsis box"
        https://bugs.webkit.org/show_bug.cgi?id=229985
        https://commits.webkit.org/r282086

2021-09-07  Antti Koivisto  <antti@apple.com>

        Remove -webkit-line-clamp behaviour where last link is placed after ellipsis box
        https://bugs.webkit.org/show_bug.cgi?id=229985

        Reviewed by Alan Bujtas.

        -webkit-line-clamp has a bizarre and random behavior where the last link in a paragraph gets
        rendered after the ellipsis box. It was exists to support some long-dead UI. No other engine does this.
        The implementation is buggy and only works at all under a narrow set of cicrumstances.

        This patch removes the behavior.

        * rendering/LegacyEllipsisBox.cpp:
        (WebCore::LegacyEllipsisBox::LegacyEllipsisBox):
        (WebCore::LegacyEllipsisBox::paint):
        (WebCore::LegacyEllipsisBox::nodeAtPoint):
        (WebCore::LegacyEllipsisBox::markupBox const): Deleted.
        (WebCore::LegacyEllipsisBox::paintMarkupBox): Deleted.
        * rendering/LegacyEllipsisBox.h:
        * rendering/LegacyRootInlineBox.cpp:
        (WebCore::LegacyRootInlineBox::placeEllipsis):
        * rendering/LegacyRootInlineBox.h:
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::RenderDeprecatedFlexibleBox::applyLineClamp):

2021-08-26  Sergio Villar Senin  <svillar@igalia.com>

        Interoperability issue in margin collapsing with overflow:hidden elements
        https://bugs.webkit.org/show_bug.cgi?id=224185

        Reviewed by Alan Bujtas.

        Margins should not self collapse for those elements that create new formatting contexts
        like when using overflow:hidden.

        Test: fast/block/margin-collapse/self-collapsing-block-with-overflow-hidden.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::isSelfCollapsingBlock const): Boxes that create new formatting context should
        not self collapse.

2021-09-07  Brent Fulgham  <bfulgham@apple.com>

        [wpt-improvement] Improve CSP support for window reuse
        https://bugs.webkit.org/show_bug.cgi?id=229882
        <rdar://78416553>

        Reviewed by Chris Dumez.

        If window.open is used to host content with a CSP sandbox header, we should always
        create a new window, rather than reusing the existing one, unless the header
        includes 'allow-same-site'.

        This improves our WPT score.

        Tested by: imported/w3c/web-platform-tests/content-security-policy/sandbox/window-reuse-sandboxed.html

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::responseReceived): Parse the HTTP headers earlier so we can
        make decisions based on their state.
        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::begin): Don't reuse the current window if 'allow-same-site'
        is not allowed.

2021-09-01  Sergio Villar Senin  <svillar@igalia.com>

        Do not let RenderFragmentContainers create new formatting contexts
        https://bugs.webkit.org/show_bug.cgi?id=229759

        Reviewed by Alan Bujtas.

        The isRenderFragmentContainer() condition was added in r176957 when the createsNewFormattingContext() function
        was introduced. Back then it was actually isRenderRegion() which was later renamed. However that was wrongly added
        to the method because it should have remained in the caller RenderBlockFlow::addOverhangingFloats().

        Instead of removing it (as the patch does) I thought about moving it back to the addOverhangingFloats() method
        where it was added as part of r167602. That revision is actually two fixes and the one that required this code
        was an import of a Blink patch. However moving it to its original location does not seem to regress anything and
        what's more Blink has also removed it from there some time ago. That's why I decided just to remove it.

        Does not directly fix any test at the moment but it's a precondition for wkb.ug/224185 which will fix 3 tests.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::createsNewFormattingContext const):

2021-09-07  Adrian Perez de Castro  <aperez@igalia.com>

        Non-unified build fixes, early September 2021 edition
        https://bugs.webkit.org/show_bug.cgi?id=229983

        Unreviewed non-unified build fixes.

        * rendering/ReferencedSVGResources.cpp: Add missing wtf/IsoMallocInlines.h header.
        * rendering/ReferencedSVGResources.h: Add missing wtf/IsoMalloc.h and wtf/text/AtomString.h
        headers, and missing forward declarations for the Document and RenderElement classes.
        * rendering/RenderView.cpp:
        (WebCore::RenderView::shouldPaintBaseBackground const): Add missing HTMLNames:: namespace
        prefix to usage of HTMLNames::frameTag member.
        * rendering/TextPainter.cpp: Add missing LayoutIntegrationInlineContent.h header.
        * workers/Worker.h: Add missing wtf/Deque.h header.
        * workers/service/ServiceWorkerRegistrationData.cpp: Add missing wtf/CrossThreadCopier.h
        header.

2021-09-01  Sergio Villar Senin  <svillar@igalia.com>

        [css-flexbox] Add support for left & right css-align-3 positional alignment properties
        https://bugs.webkit.org/show_bug.cgi?id=229756

        Reviewed by Javier Fernandez.

        Added support for Left and Right positional alignment properties from
        https://drafts.csswg.org/css-align-3/#positional-values. These two properties
        align the flex item to be flush with the alignment container's (the flex line)
        line-left|right or physical left|right whichever is in the appropriate axis. Note that
        contrary to start/end which change according to the text direction, left always refer
        to where ltr text would start and right always refer to where rtl text would start.

        The only caveat is that specs mention that in the case of having orthogonal start<->end and
        left<->right axis (only happens in column flexboxes) then both left|right behave as start.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::initialJustifyContentOffset):
        (WebCore::alignmentOffset):
        (WebCore::RenderFlexibleBox::staticMainAxisPositionForPositionedChild):
        (WebCore::RenderFlexibleBox::alignmentForChild const):
        (WebCore::RenderFlexibleBox::layoutAndPlaceChildren):
        (WebCore::RenderFlexibleBox::layoutColumnReverse):

2021-09-07  Rob Buis  <rbuis@igalia.com>

        Nullptr crash in DeleteSelectionCommand::removeNodeUpdatingStates
        https://bugs.webkit.org/show_bug.cgi?id=229279

        Reviewed by Ryosuke Niwa.

        Fix DeleteSelectionCommand::removeNodeUpdatingStates logic
        to use m_endBlock rather than m_startBlock here.

        Test: editing/deleting/delete-shadow-tree-crash.html

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::removeNodeUpdatingStates):

2021-09-07  Rob Buis  <rbuis@igalia.com>

        Nullptr crash in CSSValue::cssText() via DeleteSelectionCommand::calculateTypingStyleAfterDelete
        https://bugs.webkit.org/show_bug.cgi?id=229281

        Reviewed by Ryosuke Niwa.

        Null check the CSSValue in EditingStyle::init.

        Test: editing/deleting/forward-delete-crash.html

        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::init):

2021-09-06  Alan Bujtas  <zalan@apple.com>

        [LFC][Integration] Remove redundant NonRootInlineBox
        https://bugs.webkit.org/show_bug.cgi?id=229967

        Reviewed by Antti Koivisto.

        Now that all the inline boxes generate runs, and we use those runs to do painint/hittest, this
        helper structure is not needed anymore.

        * layout/integration/LayoutIntegrationInlineContent.h:
        * layout/integration/LayoutIntegrationInlineContentBuilder.cpp:
        (WebCore::LayoutIntegration::InlineContentBuilder::build const):
        (WebCore::LayoutIntegration::InlineContentBuilder::createDisplayLines const):
        (WebCore::LayoutIntegration::InlineContentBuilder::createDisplayRuns const): Deleted.
        * layout/integration/LayoutIntegrationInlineContentBuilder.h:
        * layout/integration/LayoutIntegrationLine.h:
        (WebCore::LayoutIntegration::NonRootInlineBox::NonRootInlineBox): Deleted.
        (WebCore::LayoutIntegration::NonRootInlineBox::layoutBox const): Deleted.
        (WebCore::LayoutIntegration::NonRootInlineBox::style const): Deleted.
        (WebCore::LayoutIntegration::NonRootInlineBox::lineIndex const): Deleted.
        (WebCore::LayoutIntegration::NonRootInlineBox::rect const): Deleted.
        (WebCore::LayoutIntegration::NonRootInlineBox::setVerticalPositionIntegral): Deleted.
        (WebCore::LayoutIntegration::NonRootInlineBox::hasScrollableContent const): Deleted.

2021-09-06  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r282058.
        https://bugs.webkit.org/show_bug.cgi?id=229978

        broken two css layout tests on iOS

        Reverted changeset:

        "Add a temporarily prefixed property for mask-mode, aliased to
        -webkit-mask-source-type"
        https://bugs.webkit.org/show_bug.cgi?id=229915
        https://commits.webkit.org/r282058

2021-09-06  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r282057.
        https://bugs.webkit.org/show_bug.cgi?id=229977

        made a layout test extremely flaky

        Reverted changeset:

        "Add support for RTCSctpTransport"
        https://bugs.webkit.org/show_bug.cgi?id=229292
        https://commits.webkit.org/r282057

2021-09-06  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r280017): Calling getBoundingClientRect() on an empty element with "break-before: column" in columns returns a rect with all zeros
        https://bugs.webkit.org/show_bug.cgi?id=229747

        Reviewed by Alan Bujtas.
        
        A zero-height element with `break-before: column` ends up with an offset which is exactly
        equal to the column height, and therefore logically can be positioned at the bottom of one
        column, or the top of the next. For elements with non-zero height, we have logic to avoid
        putting the bottom of the box into the next column. Fix this logic for zero-height elements
        to avoid the end column being less than the start column. This avoids an early return in
        RenderMultiColumnSet::fragmentRectsForFlowContentRect() which resulted in a zero client rect.

        Test: fast/multicol/newmulticol/client-rects-column-breakers.html

        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::firstAndLastColumnsFromOffsets const):

2021-09-06  Antti Koivisto  <antti@apple.com>

        [LFC][Integration] Use inline boxes in run vector for hit testing
        https://bugs.webkit.org/show_bug.cgi?id=229933

        Reviewed by Alan Bujtas.

        Stop using nonRootInlineBoxes.

        * layout/integration/LayoutIntegrationLineLayout.cpp:
        (WebCore::LayoutIntegration::LineLayout::hitTest):

2021-09-06  Enrique Ocaña González  <eocanha@igalia.com>

        [MSE] Prevent false-positive "stalled" event iff MSE used
        https://bugs.webkit.org/show_bug.cgi?id=226882
        <rdar://problem/79454993>

        Reviewed by Alicia Boya Garcia.

        "progress" and "stalled" events make no sense in context of MSE:
        https://github.com/w3c/media-source/issues/88
        and hence they will likely be removed soon:
        https://w3c.github.io/media-source/#h-note-19

        This patch is authored by Pawel Lampe <pawel.lampe@gmail.com>.
        See: https://github.com/WebPlatformForEmbedded/WPEWebKit/pull/711

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::progressEventTimerFired): Only fire the progess event if the player supports progress monitoring.
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::supportsProgressMonitoring const): Forward call to the player private.
        * platform/graphics/MediaPlayer.h: Added new supportsProgressMonitoring() method.
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::supportsProgressMonitoring const): Added method, defaulting to true to trigger the old behaviour.
        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.h: Return false on new supportsProgressMonitoring() method to prevent progress event triggering.

2021-09-06  Simon Fraser  <simon.fraser@apple.com>

        Add a temporarily prefixed property for mask-mode, aliased to -webkit-mask-source-type
        https://bugs.webkit.org/show_bug.cgi?id=229915

        Reviewed by Antti Koivisto.
        
        In preparation for unprefixing the "mask" property, add -webkit-mask-mode. This is 
        almost an alias to the existing -webkit-mask-source-type, but takes a "match-source"
        value rather than "auto".

        To make it easier to have aliases with different parsing requirements, add support
        in CSSProperties.json for "synonyms"; these are like aliases but they get their
        own CSSPropertyID to allow for customized parsing. They share style builder code
        with the related property.
        
        FillLayer now uses MaskMode rather than MaskSourceType.

        Test: fast/masking/parsing-mask-mode.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::maskSourceTypeToCSSValue):
        (WebCore::maskModeToCSSValue):
        (WebCore::ComputedStyleExtractor::valueForPropertyInStyle):
        (WebCore::fillSourceTypeToCSSValue): Deleted.
        * css/CSSProperties.json:
        * css/CSSToStyleMap.cpp:
        (WebCore::CSSToStyleMap::mapFillMaskMode):
        (WebCore::CSSToStyleMap::mapFillMaskSourceType): Deleted.
        * css/CSSToStyleMap.h:
        * css/CSSValueKeywords.in:
        * css/makeprop.pl:
        (addProperty):
        (generateFillLayerPropertyValueSetter):
        (generateValueSetter):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeWebkitMaskMode):
        (WebCore::consumeBackgroundComponent):
        (WebCore::CSSPropertyParser::parseSingleValue):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * rendering/style/FillLayer.cpp:
        (WebCore::FillLayer::FillLayer):
        (WebCore::FillLayer::operator=):
        (WebCore::FillLayer::operator== const):
        (WebCore::operator<<):
        * rendering/style/FillLayer.h:
        (WebCore::FillLayer::maskMode const):
        (WebCore::FillLayer::isMaskModeSet const):
        (WebCore::FillLayer::setMaskMode):
        (WebCore::FillLayer::clearMaskMode):
        (WebCore::FillLayer::initialFillMaskMode):
        (WebCore::FillLayer::maskSourceType const): Deleted.
        (WebCore::FillLayer::isMaskSourceTypeSet const): Deleted.
        (WebCore::FillLayer::setMaskSourceType): Deleted.
        (WebCore::FillLayer::clearMaskSourceType): Deleted.
        (WebCore::FillLayer::initialFillMaskSourceType): Deleted.
        * rendering/style/RenderStyleConstants.cpp:
        (WebCore::operator<<):
        * rendering/style/RenderStyleConstants.h:

2021-09-06  Youenn Fablet  <youenn@apple.com>

        Add support for RTCSctpTransport
        https://bugs.webkit.org/show_bug.cgi?id=229292
        <rdar://problem/82394152>

        Reviewed by Eric Carlson.

        Expose RTSctpTransport API and getter from the peer connection.
        Implement event mechanism and getters.
        Additional work will be needed to make ice transport objects consistent between SCTP and senders/receivers.
        Covered by rebased tests.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/mediastream/PeerConnectionBackend.cpp:
        (WebCore::PeerConnectionBackend::setLocalDescriptionSucceeded):
        (WebCore::PeerConnectionBackend::setRemoteDescriptionSucceeded):
        * Modules/mediastream/PeerConnectionBackend.h:
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::updateSctpBackend):
        * Modules/mediastream/RTCPeerConnection.h:
        * Modules/mediastream/RTCPeerConnection.idl:
        * Modules/mediastream/RTCSctpTransport.cpp: Added.
        (WebCore::RTCSctpTransport::RTCSctpTransport):
        (WebCore::RTCSctpTransport::~RTCSctpTransport):
        (WebCore::RTCSctpTransport::stop):
        (WebCore::RTCSctpTransport::virtualHasPendingActivity const):
        (WebCore::RTCSctpTransport::onStateChanged):
        * Modules/mediastream/RTCSctpTransport.h: Added.
        * Modules/mediastream/RTCSctpTransport.idl: Added.
        * Modules/mediastream/RTCSctpTransportBackend.h: Added.
        (WebCore::operator==):
        * Modules/mediastream/RTCSctpTransportState.h: Added.
        * Modules/mediastream/RTCSctpTransportState.idl: Added.
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::SctpTransportState::SctpTransportState):
        (WebCore::SctpTransportState::createBackend):
        (WebCore::LibWebRTCMediaEndpoint::setLocalSessionDescriptionSucceeded):
        (WebCore::LibWebRTCMediaEndpoint::setLocalSessionDescriptionFailed):
        (WebCore::LibWebRTCMediaEndpoint::setRemoteSessionDescriptionSucceeded):
        * Modules/mediastream/libwebrtc/LibWebRTCSctpTransportBackend.cpp: Added.
        (WebCore::toRTCSctpTransportState):
        (WebCore::LibWebRTCSctpTransportBackendObserver::LibWebRTCSctpTransportBackendObserver):
        (WebCore::LibWebRTCSctpTransportBackendObserver::updateState):
        (WebCore::LibWebRTCSctpTransportBackendObserver::start):
        (WebCore::LibWebRTCSctpTransportBackendObserver::stop):
        (WebCore::LibWebRTCSctpTransportBackendObserver::OnStateChange):
        (WebCore::LibWebRTCSctpTransportBackend::LibWebRTCSctpTransportBackend):
        (WebCore::LibWebRTCSctpTransportBackend::~LibWebRTCSctpTransportBackend):
        (WebCore::LibWebRTCSctpTransportBackend::dtlsTransportBackend):
        (WebCore::LibWebRTCSctpTransportBackend::registerClient):
        (WebCore::LibWebRTCSctpTransportBackend::unregisterClient):
        * Modules/mediastream/libwebrtc/LibWebRTCSctpTransportBackend.h: Added.
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:
        * dom/EventTargetFactory.in:

2021-09-06  Enrique Ocaña González  <eocanha@igalia.com>

        [GStreamer][MSE] Check ContentType parameters when checking supported types
        https://bugs.webkit.org/show_bug.cgi?id=229859

        Reviewed by Xabier Rodriguez-Calvar.

        Some services like YouTube TV or Apple TV use ContentType parameters (channels, features, width, height,
        framerate) to check for extra features or device maximum capabilities and just don't work if they're not
        honored.

        This patch checks that those parameters don't go over reasonable limits and reject support for the type
        if they do.

        This patch is an adaptation of the following downstream patches:

        - https://github.com/WebPlatformForEmbedded/WPEWebKit/commit/12c726290ac3395a0b7dd09861355e97be42e434 (authored by me)
        - https://github.com/WebPlatformForEmbedded/WPEWebKit/commit/b33dfe9fea5f991cf98884ef3bb3e3d9c660bc6b (authored by Pawel Lampe)

        * platform/graphics/gstreamer/GStreamerRegistryScanner.cpp:
        (WebCore::GStreamerRegistryScanner::supportsFeatures const): Check the features parameter. Factored out as a method with the idea to add more checks it in the future.
        (WebCore::GStreamerRegistryScanner::isContentTypeSupported const): Check the channels, features, width, height and framerate parameters against sane maximum values.
        * platform/graphics/gstreamer/GStreamerRegistryScanner.h: Added supportsFeatures() method.

2021-09-06  Youenn Fablet  <youenn@apple.com>

        Implement libwebrtc network manager GetMdnsResponder
        https://bugs.webkit.org/show_bug.cgi?id=229757

        Reviewed by Eric Carlson.

        Use libwebrtc mDNS support instead of applying it within PeerConnectionBackend.
        This allows a better integration and is more consistent with the API and other browsers.
        For instance mDNS candidates now show up in local descriptions.
        We introduce RTCNetworkManager which is responsible for WebRTC network.
        RTCNetworkManager is responsible of all peer connections of a document. It can thus reuse mDNS names from one connection to another.
        When document goes away, RTCNetworkManager needs to unregister all mDNS names.
        Update existing SDP and ICE candidate filtering code by only keeping debug assert that we do not leak private IP addresses in case ICE filtering is on.
        WK1 does not support mDNS candidates. In that case, we expose private IP addresses.

        Covered by updated and existing tests.

        * Headers.cmake:
        * Modules/mediastream/PeerConnectionBackend.cpp:
        (WebCore::PeerConnectionBackend::createOfferSucceeded):
        (WebCore::PeerConnectionBackend::enableICECandidateFiltering):
        (WebCore::PeerConnectionBackend::disableICECandidateFiltering):
        (WebCore::PeerConnectionBackend::validateSDP const):
        (WebCore::PeerConnectionBackend::newICECandidate):
        (WebCore::PeerConnectionBackend::doneGatheringCandidates):
        * Modules/mediastream/PeerConnectionBackend.h:
        * Modules/mediastream/RTCController.cpp:
        (WebCore::RTCController::add):
        (WebCore::RTCController::disableICECandidateFilteringForAllOrigins):
        (WebCore::RTCController::disableICECandidateFilteringForDocument):
        (WebCore::RTCController::enableICECandidateFiltering):
        * Modules/mediastream/RTCNetworkManager.h: Added.
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::setConfiguration):
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::LibWebRTCPeerConnectionBackend::currentLocalDescription const):
        (WebCore::LibWebRTCPeerConnectionBackend::pendingLocalDescription const):
        (WebCore::LibWebRTCPeerConnectionBackend::localDescription const):
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::willBeRemovedFromFrame):
        (WebCore::Document::suspend):
        * dom/Document.h:
        (WebCore::Document::rtcNetworkManager):
        (WebCore::Document::setRTCNetworkManager):
        * platform/mediastream/MDNSRegisterError.h: Added.
        * platform/mediastream/libwebrtc/LibWebRTCProvider.cpp:
        (WebCore::LibWebRTCProvider::createPeerConnection):
        * platform/mediastream/libwebrtc/LibWebRTCProvider.h:

2021-09-06  Kimmo Kinnunen  <kkinnunen@apple.com>

        webgl/1.0.x/conformance/context/constants-and-properties.html fails
        https://bugs.webkit.org/show_bug.cgi?id=223311
        <rdar://problem/75772425>

        Reviewed by Antti Koivisto.

        Remove STENCIL_INDEX, it was removed from the spec 2017.

        Fixes tests: 
        webgl/1.0.x/conformance/context/constants-and-properties.html
        webgl/2.0.y/conformance2/context/constants-and-properties-2.html
        
        * html/canvas/WebGLRenderingContextBase.idl:
        * platform/graphics/GraphicsContextGL.h:

2021-09-05  Alan Bujtas  <zalan@apple.com>

        In-page search results overlay broken if the result spans more than two elements
        https://bugs.webkit.org/show_bug.cgi?id=229926
        <rdar://82741616>

        Reviewed by Tim Horton.

        pathsWithShrinkWrappedRects fails to form a closed path for adjoining rects when they are horizontally out-of-order.
        e.g.
        1: (60,0) (30x20)
        2:  (0,0) (30x20)
        3: (30,0) (30x20)
        Let's sort the rects horizontally too (as we already do y ordering in polygonsForRect).

        * platform/graphics/PathUtilities.cpp:
        (WebCore::polygonsForRect):

2021-09-05  Alan Bujtas  <zalan@apple.com>

        Let content with newlineCharacter be measured by FontCascade::widthForSimpleText
        https://bugs.webkit.org/show_bug.cgi?id=229849
        <rdar://problem/82708348>

        Reviewed by Simon Fraser.

        Apparently r281978 did not address it properly.

        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::characterCanUseSimplifiedTextMeasuring):

2021-09-05  Antti Koivisto  <antti@apple.com>

        [LFC][Integration] Skip inline boxes in iterator
        https://bugs.webkit.org/show_bug.cgi?id=229922

        Reviewed by Alan Bujtas.

        Start including root and non-root inline boxes to the run vector.
        Change the iterator to skip over these boxes.

        The new boxes are not used for anything yet.

        * layout/formattingContexts/inline/InlineDisplayContentBuilder.cpp:
        (WebCore::Layout::InlineDisplayContentBuilder::build):
        (WebCore::Layout::InlineDisplayContentBuilder::createRunsAndUpdateGeometryForLineSpanningInlineBoxes):
        * layout/integration/LayoutIntegrationInlineContent.cpp:
        (WebCore::LayoutIntegration::InlineContent::hasContent const):
        * layout/integration/LayoutIntegrationInlineContent.h:
        * layout/integration/LayoutIntegrationLineIteratorModernPath.h:
        (WebCore::LayoutIntegration::LineIteratorModernPath::firstRun const):
        (WebCore::LayoutIntegration::LineIteratorModernPath::lastRun const):
        * layout/integration/LayoutIntegrationLineLayout.cpp:
        (WebCore::LayoutIntegration::LineLayout::lineCount const):
        (WebCore::LayoutIntegration::LineLayout::enclosingBorderBoxRectFor const):
        (WebCore::LayoutIntegration::LineLayout::paint):
        (WebCore::LayoutIntegration::LineLayout::hitTest):
        * layout/integration/LayoutIntegrationRunIteratorModernPath.h:
        (WebCore::LayoutIntegration::RunIteratorModernPath::traverseNextTextRun):
        (WebCore::LayoutIntegration::RunIteratorModernPath::traverseNextOnLine):
        (WebCore::LayoutIntegration::RunIteratorModernPath::traversePreviousOnLine):
        (WebCore::LayoutIntegration::RunIteratorModernPath::traverseNextLeaf):
        (WebCore::LayoutIntegration::RunIteratorModernPath::traversePreviousLeaf):

2021-09-05  Myles C. Maxfield  <mmaxfield@apple.com>

        Remove unnecessary uses of Ref protect = m_backing from FontFaceSet
        https://bugs.webkit.org/show_bug.cgi?id=229911

        Reviewed by Anders Carlsson.

        The only callers of these are from JS. So, JS will maintain a ref to
        the FontFaceSet, and the FontFaceSet will maintain a ref to its
        CSSFontFaceSet. So it doesn't need to be protected.

        No new tests because there is no behavior change.

        * css/FontFaceSet.cpp:
        (WebCore::FontFaceSet::size):
        (WebCore::FontFaceSet::check):
        (WebCore::FontFaceSet::status const):

2021-09-05  Alan Bujtas  <zalan@apple.com>

        Ensure fragmented flow state invalidation even when the cached fragmented flow is not present.
        https://bugs.webkit.org/show_bug.cgi?id=229914
        <rdar://82025006>

        Reviewed by Antti Koivisto.

        The cached fragmented flow is the byproduct of querying the enclosing fragment during layout/repaint.
        Sometimes when the layout process, between 2 subsequent style change does not generate such cached fragmented flows
        the invalidation process stops early and leaves subtrees in an inconsistent state.

        Let's use the passed in fragmented flow when the cached value is not present.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::resetEnclosingFragmentedFlowAndChildInfoIncludingDescendants):

2021-09-04  Peng Liu  <peng.liu6@apple.com>

        [iOS] Play/pause button's icon does not update when pausing in full screen
        https://bugs.webkit.org/show_bug.cgi?id=229904

        Reviewed by Eric Carlson.

        AVKit expects KVO notification of `rate` to update the play/pause icon.
        However, with the changes in r280840, `-[WebAVPlayerController setRate]`
        will be called by AVKit only. When a user taps the play/pause button,
        `-[WebAVPlayerController setRate:fromJavaScript:]` will be called, which
        does not generate the KVO notification.

        This patch fixes the issue by manually generate the KVO notification.

        To be safe, this patch manually generates the KVO notification for
        property `defaultPlaybackRate` as well.

        Tested manually.

        * platform/ios/WebAVPlayerController.mm:
        (-[WebAVPlayerController setDefaultPlaybackRate:fromJavaScript:]):
        (-[WebAVPlayerController setRate:fromJavaScript:]):

2021-09-04  Antti Koivisto  <antti@apple.com>

        REGRESSION(r275515): pointer-events:none may get stuck in LFC runs
        https://bugs.webkit.org/show_bug.cgi?id=229854
        rdar://81165275

        Reviewed by Alan Bujtas.

        We only update run style with diff >= StyleDifference::Repaint but pointer-events changes don't require repaint.

        Test: fast/events/pointer-events-mutation.html

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::styleDidChange):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::styleDidChange):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::styleDidChange):

        Fix by pushing the new style to LFC unconditionally. This has no meaningful cost.

2021-09-03  Johnson Zhou  <qiaosong_zhou@apple.com>

        Addition of CSSNumericFactory in CSS Typed OM
        https://bugs.webkit.org/show_bug.cgi?id=229699

        Reviewed by Alex Christensen.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * css/DOMCSSNamespace+CSSNumericFactory.idl: Added.
        * css/typedom/CSSNumericFactory.cpp: Copied from Source/WebCore/css/typedom/CSSUnitValue.h.
        (WebCore::CSSNumericFactory::from):
        (WebCore::CSSNumericFactory::supplementName):
        * css/typedom/CSSNumericFactory.h: Added.
        * css/typedom/CSSNumericFactory.idl: Added.
        * css/typedom/CSSUnitValue.h:
        (isType):

2021-09-03  Chris Dumez  <cdumez@apple.com>

        Regression(r277571) Call to SQLiteDatabase::turnOnIncrementalAutoVacuum() from ITP fails
        https://bugs.webkit.org/show_bug.cgi?id=229886
        <rdar://82581507>

        Reviewed by Alex Christensen.

        Before r277571, `lastError()` was getting called after the call to `statement->columnInt(0)`
        and *before* the call to `statement.finalize()`. After r277571, the call to `statement.finalize()`
        became implicit, and gets called when `statement` does out of scope. As a result, `lastError()`
        was getting called *after* the statement finalization instead of after. This is an issue because
        the code expects the last error to be for `statement->columnInt(0)` and thus expects SQLITE_ROW.
        I moved the `lastError()` call so that it now after between `statement->columnInt(0)` and the
        implicit statement finalization, like it used to.

        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::turnOnIncrementalAutoVacuum):

2021-09-03  Devin Rousso  <drousso@apple.com>

        [Web App Manifest] Always fetch the first manifest if provided
        https://bugs.webkit.org/show_bug.cgi?id=229059
        <rdar://problem/82148333>

        Reviewed by Brent Fulgham.

        Before this patch, WebKit only fetched/parsed/applied/etc. the web app manifest when
        `-[WKWebView _getApplicationManifestWithCompletionHandler:]` was called. This patch makes
        WebKit do all that as soon as a `<link rel="manifest">` (with a valid URL) is encountered.
        This allows manifests that have specified a `"theme_color"` to actually have an effect.

        Tests: ApplicationManifest.AlwaysFetch
               ApplicationManifest.OnlyFirstManifest
               ApplicationManifest.NoManifest
               ApplicationManifest.MediaAttriute
               ApplicationManifest.DoesNotExist
               ApplicationManifest.Blocked

        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::process):

        * loader/DocumentLoader.h:
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::stopLoading):
        (WebCore::DocumentLoader::loadApplicationManifest):
        (WebCore::DocumentLoader::finishedLoadingApplicationManifest):
        (WebCore::DocumentLoader::notifyFinishedLoadingApplicationManifest): Deleted.
        Simplify the way that the UIProcess communicates with the WebProcess (and between WebKit and
        WebCore). There's no need to have a `HashMap` of callbacks since each document can only have
        at most one web app manifest. Furthermore, instead of having a `HashMap` in both WebKit and
        WebCore, just pass along the `CompletionHandler` to the `DocumentLoader` for a single list
        of completion callbacks (a list is needed because it's possible for a client to invoke
        `-[WKWebView _getApplicationManifestWithCompletionHandler:]` multiple times).

2021-09-03  Tim Nguyen  <ntim@apple.com>

        AX: findModalNodes() and currentModalNode() should include modal <dialog>
        https://bugs.webkit.org/show_bug.cgi?id=229815

        Reviewed by Chris Fleizach.

        Test: accessibility/dialog-showModal.html

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::isModalElement const):
        (WebCore::AXObjectCache::findModalNodes):
        (WebCore::AXObjectCache::handleAttributeChange):
        (WebCore::AXObjectCache::handleModalChange):
        * accessibility/AXObjectCache.h:

2021-09-03  Aditya Keerthi  <akeerthi@apple.com>

        iframes should get an opaque background when the embedding element and embedded root color-schemes do not match
        https://bugs.webkit.org/show_bug.cgi?id=228124
        <rdar://problem/80922070>

        Reviewed by Simon Fraser.

        Currently, iframes always have a transparent underlying background
        color. The existing behavior is undesirable, as it can result in
        scenarios where text in iframes is illegible, due to a mismatch between
        the used color scheme of the embedding element and embedded root.

        To address this problem, it has been resolved [1] that iframes should get
        an opaque background when the embedding element and embedded root color-schemes
        do not match. The background color used should be appropriate to the
        embedded root color-scheme.

        [1] https://drafts.csswg.org/css-color-adjust-1/#color-scheme-effect

        Test: imported/w3c/web-platform-tests/css/css-color-adjust/rendering/dark-color-scheme/support/dark-frame-ref.html

        * page/FrameView.cpp:
        (WebCore::FrameView::updateBackgroundRecursively):

        Ensure subframes have a base background color appropriate to their
        color-scheme, rather than simply inheriting their parent's base
        background color.

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):

        Moved root element background painting logic into RenderView.

        * rendering/RenderView.cpp:
        (WebCore::RenderView::shouldPaintBaseBackground const):

        Paint the base background for the root element of an iframe if its used
        color scheme does not match the color scheme of the embedding element.

        * rendering/RenderView.h:

2021-09-03  Myles C. Maxfield  <mmaxfield@apple.com>

        @font-face rules accessed over file: urls to a file which does not exist are not visible to document.fonts
        https://bugs.webkit.org/show_bug.cgi?id=229639

        Reviewed by Alan Bujtas.

        Because all the sources were failed, we were marking the whole CSSFontFace as failed, and then
        not adding it to the CSSFontFaceSource. Unfortunately, this optimization is observable, so we
        can't do it.

        Tests: fast/text/font-file-failed.html
               imported/w3c/web-platform-tests/css/css-font-loading/nonexistent-file-url.html

        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::addFontFaceRule):

2021-09-03  Myles C. Maxfield  <mmaxfield@apple.com>

        FontFaceSet.check() needs to react to style changes
        https://bugs.webkit.org/show_bug.cgi?id=229844

        Reviewed by Sam Weinig.

        When content says "document.fonts.check(...)", the ".check(...)" part needs to
        update style instead of the "document.fonts" part. This is because it's
        totally legal for content to say:

        var f = document.fonts;
        // Modify style here
        ... f.check(...) ... <=== This needs to reflect the style changes.

        Test: fast/text/FontFaceSet-check-after-style-update.html

        * WebCore.xcodeproj/xcshareddata/xcschemes/WebCore.xcscheme:
        * css/CSSFontFaceSet.cpp:
        (WebCore::CSSFontFaceSet::check):
        * css/FontFaceSet.cpp:
        (WebCore::FontFaceSet::check):

2021-09-03  Myles C. Maxfield  <mmaxfield@apple.com>

        FontFaceSet.status needs to react to style changes
        https://bugs.webkit.org/show_bug.cgi?id=229839

        Reviewed by Sam Weinig.

        When content says "document.fonts.status", the ".status" part needs to
        update style instead of the "document.fonts" part. This is because it's
        totally legal for content to say:

        var f = document.fonts;
        // Modify style here
        ... f.status ... <=== This needs to reflect the style changes.

        Test: fast/text/FontFaceSet-status-after-style-update.html

        * css/FontFaceSet.cpp:
        (WebCore::FontFaceSet::status const):

2021-09-03  Ziran Sun  <zsun@igalia.com>

        REGRESSION(r280078): broke fast/images/exif-orientation-composited.html on windows
        https://bugs.webkit.org/show_bug.cgi?id=228325

        Reviewed by Javier Fernandez.

        The is to fix regression caused by r280078. After updating overridingLogicalWidth,
        there is no need to reset the logicalWidth.

        No test needed. Test fast/images/exif-orientation-composited.html is enough to cover
        the affected code.
   
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::applyStretchAlignmentToChildIfNeeded):

2021-09-03  Peng Liu  <peng.liu6@apple.com>

        [iOS] Media playback continues after backgrounding Safari
        https://bugs.webkit.org/show_bug.cgi?id=229827

        Reviewed by Eric Carlson.

        In r277766, we make a video element ignore the background playback restriction
        (`HTMLMediaElement::shouldOverrideBackgroundPlaybackRestriction()` returns true)
        if the video element can *potentially* enter picture-in-picture automatically
        (either the video element is currently in the video fullscreen mode
        or m_videoFullscreenStandby is true).

        Unfortunately, this is not the correct fix if the OS has disabled the
        "Start PiP Automatically" feature. The problem is that a video continues
        playing after Safari is in the background.

        Only when the video element is in the picture-in-picture mode, the video element
        can ignore the background playback restriction.

        The UI process will receive "didStartPictureInPicture" notification (if any)
        and "applicationDidEnterBackground" notification in order. The UI process will
        send IPC messages to the WebContent process regarding the notifications.

        1) For the "didStartPictureInPicture" notification, the WebContent process will
        modify the corresponding video element's presentation mode to picture-in-picture.
        2) For the "applicationDidEnterBackground" notification, the WebContent process
        will call `PlatformMediaSession::beginInterruption()` to suspend media playback
        if needed.

        It is guaranteed that 1) happens before 2). Therefore, when
        `PlatformMediaSession::beginInterruption()` calls `HTMLMediaElement::shouldOverrideBackgroundPlaybackRestriction()`,
        if the video element enters picture-in-picture ("Start PiP Automatically" is enabled),
        `m_videoFullscreenMode` must be `VideoFullscreenModePictureInPicture`.
        Therefore, `HTMLMediaElement::shouldOverrideBackgroundPlaybackRestriction()`
        should return true when `m_videoFullscreenMode == VideoFullscreenModePictureInPicture`.

        Tested manually.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::shouldOverrideBackgroundPlaybackRestriction const):

2021-08-18  Sergio Villar Senin  <svillar@igalia.com>

        [css-writing-modes] Fix absolutely positioning with orthogonal writing modes
        https://bugs.webkit.org/show_bug.cgi?id=228914

        Reviewed by Manuel Rego Casasnovas.

        Computing the position of an absolutely positioned object was not well supported for those cases in which
        the absolutely positioned child is orthogonal to its containing block, i.e. the child has horizontal writing mode
        and the containing block vertical writing mode or viceversa.

        This is a two level fix. First of all we had to modify the two methods that retrieve the static distance to use
        the position of the perpendicular axis in those cases where we have orthogonal flows. The static distances are relative
        to the container's writing mode, i.e., the inline distance of a vertical child inside a horizontal container is the child's
        block position (same for a horizontal child inside a vertical container).

        And the second fix was to adapt the methods that flip the position in the axis if needed. That is needed for those cases
        in which we have orthogonal writing modes and either the child or the container have flipped blocks writing mode. In particular
        we have to do it for the cases in which the positioned properties are not both auto because in those cases, neither
        computeInlineStaticDistance() nor computeBlockStaticDistance() are called and thus no adjustment was made.

        No need to add new tests because this fix unskips 48 WPT tests from css/css-writing-modes that work fine now. Apart from
        that a good number of other subtests are also fixed by this patch.

        * rendering/RenderBox.cpp:
        (WebCore::isOrthogonal):
        (WebCore::computeInlineStaticDistance): Add support for orthogonal writing modes.
        (WebCore::computeLogicalLeftPositionedOffset): Ditto.
        (WebCore::computeBlockStaticDistance): Ditto.
        (WebCore::computeLogicalTopPositionedOffset): Ditto.
        (WebCore::isVerticalLRChildInHorizontalTBParent): Deleted.

2021-09-03  Lauro Moura  <lmoura@igalia.com>

        [GStreamer] Update mock display resolution after Mac mock was updated
        https://bugs.webkit.org/show_bug.cgi?id=229868

        Reviewed by Philippe Normand.

        r281880 added this test and swapped the resolutions of Mac's mock
        SCREEN-1 and SCREEN-2. As r281305 did, this commit matches the
        GStreamer mock with the mac one.

        Fixes fast/mediastream/get-display-media-capabilities.html

        * platform/mediastream/gstreamer/MockRealtimeVideoSourceGStreamer.cpp:
        (WebCore::MockDisplayCaptureSourceGStreamer::capabilities):

2021-09-03  Simon Fraser  <simon.fraser@apple.com>

        Scrollbars on pointer-events: none element still intercepts events
        https://bugs.webkit.org/show_bug.cgi?id=225229

        Reviewed by Alan Bujtas.
        
        When hit-testing overflow scrollbars, and the resizer control, check visibleToHitTesting()
        which consults the pointer-events property.

        Test: fast/events/hittest-pointer-event-none-scrollbars.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::nodeAtPoint):
        * rendering/RenderLayerScrollableArea.cpp:
        (WebCore::RenderLayerScrollableArea::hitTestResizerInFragments const):

2021-09-03  Youenn Fablet  <youenn@apple.com>

        Signaling state check when applying a local or remote description is no longer aligned with the WebRTC spec
        https://bugs.webkit.org/show_bug.cgi?id=229138

        Reviewed by Eric Carlson.

        These checks have been removed from the spec and are no longer valid.
        Covered by rebased tests.

        * Modules/mediastream/PeerConnectionBackend.cpp:
        (WebCore::PeerConnectionBackend::setLocalDescription):
        (WebCore::PeerConnectionBackend::setRemoteDescription):
        (WebCore::isLocalDescriptionTypeValidForState): Deleted.
        (WebCore::isRemoteDescriptionTypeValidForState): Deleted.
        * testing/MockLibWebRTCPeerConnection.cpp:
        (WebCore::MockLibWebRTCPeerConnection::SetLocalDescription):
        (WebCore::MockLibWebRTCPeerConnection::SetRemoteDescription):
        * testing/MockLibWebRTCPeerConnection.h:

2021-09-03  David Kilzer  <ddkilzer@apple.com>

        RemoteVideoSample needs CVPixelBufferRef to be kept alive, but relies on caller to retain it
        <https://webkit.org/b/229806>
        <rdar://problem/82684479>

        Reviewed by Darin Adler.

        Covered by tests:
            webrtc/video-mute.html
            webrtc/video-unmute.html

        * platform/graphics/RemoteVideoSample.cpp:
        (WebCore::RemoteVideoSample::create):
        - Pass CVPixelBufferRef to RemoteVideoSample
          constructor.
        (WebCore::RemoteVideoSample::RemoteVideoSample):
        - Change constructor to accept CVPixelBufferRef
          argument.
        * platform/graphics/RemoteVideoSample.h:
        (WebCore::RemoteVideoSample::RemoteVideoSample):
        - Change constructor to accept CVPixelBufferRef
          argument.
        - Add m_imageBuffer instance variable to hold on to the
          CVPixelBufferRef.

2021-09-03  Rob Buis  <rbuis@igalia.com>

        Remove some SVG code from dirtyForLayoutFromPercentageHeightDescendants
        https://bugs.webkit.org/show_bug.cgi?id=229805

        Reviewed by Darin Adler.

        Remove some SVG code from dirtyForLayoutFromPercentageHeightDescendants
        that was needed when we were using containingBlock but not anymore
        now we use container in dirtyForLayoutFromPercentageHeightDescendants.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::dirtyForLayoutFromPercentageHeightDescendants):

2021-09-03  Youenn Fablet  <youenn@apple.com>

        Migrate to latest libwebrtc AddIceCandidate
        https://bugs.webkit.org/show_bug.cgi?id=229700

        Reviewed by Eric Carlson.

        AddIceCandidate can now take a callback to return a RTCError which provides necessary information to reject the promise as needed.
        Update binding code accordingly.
        This allows to use a lambda that takes the promise instead of having the promise as a member of PeerConnectionBackend.
        Covered by updated and rebased tests.

        * Modules/mediastream/PeerConnectionBackend.cpp:
        (WebCore::PeerConnectionBackend::addIceCandidate):
        (WebCore::PeerConnectionBackend::stop):
        (WebCore::PeerConnectionBackend::addIceCandidateSucceeded): Deleted.
        (WebCore::PeerConnectionBackend::addIceCandidateFailed): Deleted.
        * Modules/mediastream/PeerConnectionBackend.h:
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::addIceCandidate):
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h:
        (WebCore::LibWebRTCMediaEndpoint::addIceCandidate): Deleted.
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::LibWebRTCPeerConnectionBackend::doSetLocalDescription):
        (WebCore::LibWebRTCPeerConnectionBackend::doSetRemoteDescription):
        (WebCore::LibWebRTCPeerConnectionBackend::doAddIceCandidate):
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.h:
        * testing/MockLibWebRTCPeerConnection.h:

2021-09-03  Said Abou-Hallawa  <said@apple.com>

        Add a layout test to detect memory leaks when drawing images to a detached canvas
        https://bugs.webkit.org/show_bug.cgi?id=229790

        Reviewed by Darin Adler.

        Add an internal API to return the number of remote images which are cached
        by WebProcess and GPUProcess. It can be used after rendering update is
        finished to verify that there are no images cached because they are
        referenced in a DispalyList of a detached canvas.

        Test: fast/canvas/canvas-drawImage-detached-leak.html

        * page/ChromeClient.h:
        (WebCore::ChromeClient::remoteImagesCountForTesting const):
        * testing/Internals.cpp:
        (WebCore::Internals::remoteImagesCountForTesting const):
        * testing/Internals.h:
        * testing/Internals.idl:

2021-09-03  Frédéric Wang  <fwang@igalia.com>

        Use isRendererReplacedElement for SimplifiedBackwardsTextIterator
        https://bugs.webkit.org/show_bug.cgi?id=229798

        Reviewed by Darin Adler.

        TextIterator::advance() relies on isRendererReplacedElement to determine whether an element
        should be treated as a replaced element and emit a comma ','. SimplifiedBackwardsTextIterator
        has similar logic to check for replaced elements, but it has not been updated and is now
        out-of-sync. This patch makes SimplifiedBackwardsTextIterator use the same function
        isRendererReplacedElement, adding support for attachment (r200509), media (r158743),
        element with a11y role "img" (r152388) as well as various control elements (r15966).
        This makes the two iterators more consistent and facilitates code maintenance.

        Tests: editing/text-iterator/backwards-text-iterator-attachment.html
               editing/text-iterator/backwards-text-iterator.html

        * editing/TextIterator.cpp:
        (WebCore::SimplifiedBackwardsTextIterator::advance): Use isRendererReplacedElement.

2021-09-02  Alan Bujtas  <zalan@apple.com>

        Let content with newlineCharacter be measured by FontCascade::widthForSimpleText
        https://bugs.webkit.org/show_bug.cgi?id=229849

        Reviewed by Simon Fraser.

        This logic was added as part of r281423 to make sure we properly compute the advance width of certain characters by
        avoiding the simplified measuring codepath.

        However in case of newlineCharacter/carriageReturn: 
        1. they are treated as _space_ when preserved
        2. the _space_ character takes the simplified codepath
        We should be fine taking the simplified codepath when such characters are present.
        This also caused regression on certain text heavy micro-benchmarks on perf.webkit.org.

        Let's restore the pre-r281423 (long time) behavior while figuring out what to do with such characters. 

        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::characterCanUseSimplifiedTextMeasuring):

2021-09-02  Myles C. Maxfield  <mmaxfield@apple.com>

        The CSS Font Loading API shouldn't be able to delete a CSS-connected font
        https://bugs.webkit.org/show_bug.cgi?id=229640

        Reviewed by Alan Bujtas.

        https://drafts.csswg.org/css-font-loading-3/#dom-fontfaceset-delete
        "1. If font is CSS-connected, return false and exit this algorithm immediately."

        Tests: web-platform-tests/css/css-font-loading/fontfaceset-delete-css-connected.html
               web-platform-tests/css/css-font-loading/fontfaceset-delete-css-connected-2.html

        * css/FontFaceSet.cpp:
        (WebCore::FontFaceSet::remove):

2021-09-02  Alan Bujtas  <zalan@apple.com>

        Relative -webkit-scrollbar width value may lead to unstable layout
        https://bugs.webkit.org/show_bug.cgi?id=229833.
        <rdar://80336247>

        Reviewed by Simon Fraser.

        The way we resolve the relative property value for the webkit-scrollbar width (using the owning renderer’s width) can lead to unstable layout with
        circular dependency. While -webkit-scrollbar itself is non-standard, Chrome supports it but not with relative width/height values. They are resolved to 0px.
        Here we use the default platform value instead.

        * rendering/RenderScrollbarPart.cpp:
        (WebCore::calcScrollbarThicknessUsing): Do not try to resolve the relative length value.
        (WebCore::RenderScrollbarPart::computeScrollbarWidth):
        (WebCore::RenderScrollbarPart::computeScrollbarHeight):

2021-09-02  Simon Fraser  <simon.fraser@apple.com>

        Changes to clip-path and filter SVG elements referenced by CSS don't trigger repaints
        https://bugs.webkit.org/show_bug.cgi?id=204204

        Reviewed by Antti Koivisto.

        Create a mechanism that allows SVG clipping and filter resources referenced from
        CSS to trigger repaints when they change. This fixes bugs where change to the
        SVG, via script or animations, failed to cause CSS-rendered elements that
        reference them, via clip-path:url(#foo) or filter:url(#foo) to repaint.

        The key is that SVGElement stores a set of SVGResourceElementClients, as it does for
        element references which are the equivalent for intra-SVG resource refs.

        RenderElementRareData holds a ReferencedSVGResources class, which stores a map
        of resourceID -> SVGResourceElementClient, and its implementation of SVGResourceElementClients
        triggers the repaint.

        ReferencedSVGResources are updated after a style change, which works because
        they only ever find elements, not SVG renderers.

        Change filter and clip-path code go via ReferencedSVGResources to find their
        appropriate filter element or clipping renderer, for cleanliness.

        Tests: css3/filters/reference-filter-change-repaint.html
               css3/masking/reference-clip-path-animate-transform-repaint.html
               css3/masking/reference-clip-path-change-repaint.html

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/CSSFilter.cpp:
        (WebCore::CSSFilter::buildReferenceFilter): Remove some code related to looking
        for resources in external documents, since this functionality was removed.
        * rendering/ReferencedSVGResources.cpp: Added.
        (WebCore::CSSSVGResourceElementClient::resourceChanged):
        (WebCore::ReferencedSVGResources::ReferencedSVGResources):
        (WebCore::ReferencedSVGResources::~ReferencedSVGResources):
        (WebCore::ReferencedSVGResources::removeClientForTarget):
        (WebCore::ReferencedSVGResources::referencedSVGResourceIDs):
        (WebCore::ReferencedSVGResources::updateReferencedResources):
        (WebCore::ReferencedSVGResources::elementForResourceID):
        (WebCore::ReferencedSVGResources::referencedFilterElement):
        (WebCore::ReferencedSVGResources::referencedClipperRenderer):
        * rendering/ReferencedSVGResources.h: Added.
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::styleDidChange):
        (WebCore::RenderElement::ensureReferencedSVGResources):
        (WebCore::RenderElement::clearReferencedSVGResources):
        (WebCore::RenderElement::updateReferencedSVGResources):
        * rendering/RenderElement.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::setupClipPath):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::RenderObjectRareData::RenderObjectRareData):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::RenderObjectRareData::RenderObjectRareData): Deleted.
        * rendering/svg/RenderSVGResource.cpp:
        (WebCore::removeFromCacheAndInvalidateDependencies):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::referencingCSSClients const):
        (WebCore::SVGElement::addReferencingCSSClient):
        (WebCore::SVGElement::removeReferencingCSSClient):
        * svg/SVGElement.h:
        * svg/SVGElementRareData.h:
        (WebCore::SVGElementRareData::addReferencingCSSClient):
        (WebCore::SVGElementRareData::removeReferencingCSSClient):
        (WebCore::SVGElementRareData::referencingCSSClients const):
        * svg/SVGResourceElementClient.h: Added.

2021-09-02  Aditya Keerthi  <akeerthi@apple.com>

        [iOS] Simplify date picker logic for datetime-local inputs
        https://bugs.webkit.org/show_bug.cgi?id=229773

        Reviewed by Darin Adler.

        * platform/DateComponents.cpp:

        Add comments pointing to the specification for parsing date/time information.

2021-09-02  Myles C. Maxfield  <mmaxfield@apple.com>

        FontFaceSet.add() needs to throw when called on a CSS-connected font
        https://bugs.webkit.org/show_bug.cgi?id=229641

        Reviewed by Simon Fraser.

        https://drafts.csswg.org/css-font-loading-3/#dom-fontfaceset-add
        "2. If font is CSS-connected, throw an InvalidModificationError exception and exit this algorithm immediately."

        Test: imported/w3c/web-platform-tests/css/css-font-loading/fontfaceset-add-css-connected.html

        * css/FontFaceSet.cpp:
        (WebCore::FontFaceSet::add): Deleted.
        * css/FontFaceSet.h:

2021-09-02  David Kilzer  <ddkilzer@apple.com>

        Leak of VTImageRotationSessionRef (176 bytes) in com.apple.WebKit.GPU.Development process
        <https://webkit.org/b/229781>
        <rdar://problem/82651897>

        Reviewed by Darin Adler.

        * platform/graphics/cv/ImageRotationSessionVT.mm:
        (WebCore::ImageRotationSessionVT::initialize):
        - Add missing adoptCF() to fix the leak.

2021-09-02  Peng Liu  <peng.liu6@apple.com>

        [MSE][GPUP] SourceBufferPrivateAVFObjC does not work properly when audio and video exchange their track IDs
        https://bugs.webkit.org/show_bug.cgi?id=229617

        Reviewed by Jer Noble.

        When a page appends a new initialization segment with new track IDs, the `SourceBuffer`
        notifies its `SourceBufferPrivate` about that. If a `SourceBuffer` has only
        one audio track and one video track, the `SourceBufferPrivate` will update its
        hash map (`m_trackBufferMap`), which maps track IDs to track buffers of audio and
        video data.

        In a special case that the new initialization segment switches the track IDs of
        audio and video, e.g., currently audio and video have track IDs 2 and 1 respectively,
        while the new initialization segment defines audio and video track IDs as 1 and 2,
        the current implementation of `SourceBuffer/SourceBufferPrivate` will overwrite
        one key in the hash map, and eventually the hash map will have only one key.

        This patch fixes this bug by creating a new hash map instead of updating the hash
        map in-place.

        Test: media/media-source/media-source-init-segment-swap-track-ids.html

        * platform/graphics/SourceBufferPrivate.cpp:
        (WebCore::SourceBufferPrivate::updateTrackIds):

        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::didParseInitializationData):
        `AudioTrackPrivate::EnabledChangedCallback` and `VideoTrackPrivate::SelectedChangedCallback`
        should be called after the initialization segment is handled.
        Because `SourceBuffer` may update the track IDs of audio and video when processing the
        initialization segment, and the hash map of `SourceBufferPrivate` will be changed accordingly.
        We should not enqueue samples to the parser (in those callbacks) before the hash map change
        is completed.

        (WebCore::SourceBufferPrivateAVFObjC::trackDidChangeEnabled):
        Fix a minor issue in the log.

2021-09-02  Johnson Zhou  <qiaosong_zhou@apple.com>

        Add support for CSSKeywordValue in CSS Typed OM
        https://bugs.webkit.org/show_bug.cgi?id=229705

        Reviewed by Alex Christensen.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:
        * css/typedom/CSSKeywordValue.cpp: Added.
        (WebCore::CSSKeywordValue::create):
        (WebCore::CSSKeywordValue::setValue):
        * css/typedom/CSSKeywordValue.h: Added.
        (WebCore::CSSKeywordValue::value):
        (WebCore::CSSKeywordValue::CSSKeywordValue):
        (isType):
        * css/typedom/CSSKeywordValue.idl: Added.

2021-09-02  Chris Dumez  <cdumez@apple.com>

        [COOP] html/cross-origin-opener-policy/coop-navigate-same-origin-csp-sandbox.html WPT test is failing
        https://bugs.webkit.org/show_bug.cgi?id=229716

        Reviewed by Darin Adler.

        The COOP algorithm is relying on the response origin for some of the checks. We were computing the
        response origin via `SecurityOrigin::create(response.url())`, which worked fine in most cases.
        However, the response may contain a CSP header, which could set sandbox flags. If sandbox flags
        are set, the response origin should be unique, not the origin of the response URL. This patch fixes
        that.

        No new tests, rebaselined existing WPT test.

        * loader/DocumentLoader.cpp:
        (WebCore::computeResponseOriginAndCOOP):
        (WebCore::DocumentLoader::doCrossOriginOpenerHandlingOfResponse):
        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::contentSecurityPolicy const):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::didBeginDocument):
        * page/csp/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::copyStateFrom):
        (WebCore::ContentSecurityPolicy::didReceiveHeaders):
        * page/csp/ContentSecurityPolicy.h:
        (WebCore::ContentSecurityPolicy::sandboxFlags const):

2021-09-02  Chris Dumez  <cdumez@apple.com>

        [COOP] Cross origin isolation doesn't happen when going from an HTTP URL to a HTTPS one with COOP+COEP
        https://bugs.webkit.org/show_bug.cgi?id=229745
        <rdar://problem/82630927>

        Reviewed by Alex Christensen.

        When calling obtainCrossOriginOpenerPolicy() / obtainCrossOriginEmbedderPolicy() to get the COOP / COEP
        policy from a resource response, we should check if the response's URL is potentially trustworty to
        determine if COOP/COEP apply, instead of relying on the current context's isSecureContext().

        When navigating from a HTTP URL to a HTTPS one with COOP+COEP, we obviously want cross-origin isolation
        to happen, even if the source context is not a secure context.

        Test: http/wpt/cross-origin-opener-policy/non-secure-to-secure-context-navigation.https.html

        * loader/CrossOriginEmbedderPolicy.cpp:
        (WebCore::obtainCrossOriginEmbedderPolicy):
        * loader/CrossOriginEmbedderPolicy.h:
        * loader/CrossOriginOpenerPolicy.cpp:
        (WebCore::obtainCrossOriginOpenerPolicy):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::didBeginDocument):
        * workers/WorkerScriptLoader.cpp:
        (WebCore::WorkerScriptLoader::loadSynchronously):
        (WebCore::WorkerScriptLoader::loadAsynchronously):
        (WebCore::WorkerScriptLoader::didReceiveResponse):
        * workers/WorkerScriptLoader.h:

2021-09-02  Alex Christensen  <achristensen@webkit.org>

        Remove optimistic assertion from r281860
        https://bugs.webkit.org/show_bug.cgi?id=229751

        This assertion was being hit in debug WK1 tests because of the way ResourceHandle updates timing data.
        When it is hit, there is no issue.  It is replacing data with equal data.

        * page/PerformanceNavigationTiming.cpp:
        (WebCore::PerformanceNavigationTiming::navigationFinished):

2021-09-02  Tim Nguyen  <ntim@apple.com>

        Add more inert checks for selection-related functionality
        https://bugs.webkit.org/show_bug.cgi?id=229728

        Reviewed by Antti Koivisto.

        Test: LayoutTests/imported/w3c/web-platform-tests/inert/inert-node-is-unselectable.tentative.html

        * dom/Position.cpp:
        (WebCore::Position::nodeIsInertOrUserSelectNone):
        (WebCore::Position::isCandidate const):
        (WebCore::Position::nodeIsUserSelectNone): Deleted.
        (WebCore::Position::nodeIsUserSelectAll):
        * dom/Position.h:
        * dom/PositionIterator.cpp:
        (WebCore::PositionIterator::isCandidate const):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::updateSelectionForMouseDownDispatchingSelectStart):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::collectSelectionGeometriesInternal):

2021-09-02  Antti Koivisto  <antti@apple.com>

        [CSS Cascade Layers] Support layer argument in @import rules
        https://bugs.webkit.org/show_bug.cgi?id=229795

        Reviewed by Simon Fraser.

        Add support for

        @import "style.css" layer;
        @import "style.css" layer(foo);

        * css/StyleRuleImport.cpp:
        (WebCore::StyleRuleImport::create):
        (WebCore::StyleRuleImport::StyleRuleImport):

        Add layer name member.

        * css/StyleRuleImport.h:
        * css/parser/CSSParserImpl.cpp:
        (WebCore::consumeCascadeLayerName):

        Factor into a standalone function.

        (WebCore::CSSParserImpl::consumeImportRule):

        Parse layer and layer() arguments for @import.

        (WebCore::CSSParserImpl::consumeLayerRule):
        * style/RuleSet.cpp:
        (WebCore::Style::RuleSet::Builder::addRulesFromSheet):

        Register the layers specified in import rules.

2021-09-02  Youenn Fablet  <youenn@apple.com>

        Migrate LibWebRTCMediaEndpoint from OnRenegotiationNeeded to OnRenegotiationNeededEvent
        https://bugs.webkit.org/show_bug.cgi?id=229562

        Reviewed by Eric Carlson.

        OnRenegotiationNeededEvent is the more spec-aligned version of OnRenegotiationNeeded.
        We switch to it and update to check for validity of the event by using the given eventId.
        We can remove some state variables like m_negotiationNeeded given we use the backend with eventId to know whether we can send the event.

        Covered by existing tests.

        * Modules/mediastream/PeerConnectionBackend.cpp:
        (WebCore::PeerConnectionBackend::markAsNeedingNegotiation):
        * Modules/mediastream/PeerConnectionBackend.h:
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::updateNegotiationNeededFlag):
        (WebCore::RTCPeerConnection::chainOperation):
        Update code to better align with spec steps.
        * Modules/mediastream/RTCPeerConnection.h:
        * Modules/mediastream/RTCRtpTransceiver.cpp:
        (WebCore::RTCRtpTransceiver::stop):
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::isNegotiationNeeded const):
        (WebCore::LibWebRTCMediaEndpoint::OnNegotiationNeededEvent):
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h:
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::LibWebRTCPeerConnectionBackend::isNegotiationNeeded const):
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.h:
        * testing/MockLibWebRTCPeerConnection.cpp:
        (WebCore::MockLibWebRTCPeerConnection::AddTrack):
        (WebCore::MockLibWebRTCPeerConnection::RemoveTrack):

2021-09-02  Philippe Normand  <pnormand@igalia.com>

        REGRESSION(r277763): [Debug][GLib] fast/mediastream timeouts
        https://bugs.webkit.org/show_bug.cgi?id=229665

        Reviewed by Xabier Rodriguez-Calvar.

        The tests were timing out in Debug because of the unaccelerated PixelBuffer conversions
        triggered from the GStreamer mock video source. Making the AlphaPremultiplication value
        match between the source and destination buffers allows us to skip this expensive
        conversion. A memcpy is now done if the source and destination parameters match, there is no
        need to do pixel-per-pixel copies in this case.

        * platform/graphics/PixelBufferConversion.cpp:
        (WebCore::convertImagePixels):
        * platform/mediastream/gstreamer/MockRealtimeVideoSourceGStreamer.cpp:
        (WebCore::MockRealtimeVideoSourceGStreamer::updateSampleBuffer):

2021-09-02  Andres Gonzalez  <andresg_22@apple.com>

        Braille display is blank in contenteditable elements when the field is followed by another element.
        https://bugs.webkit.org/show_bug.cgi?id=229713
        rdar://82095237

        Reviewed by Chris Fleizach.

        Test: accessibility/mac/range-for-line-index.html

        We were making the length of line ranges in text fields 1 more than the
        number of characters in the line even when no line break character
        existed, like in the case of a single line text field.
        Clients like VoiceOver expect the length of the line ranges in text
        fields to match the number of charaters in the line including the line
        break if one exists.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::isHardLineBreak): Helper function used in doAXRangeForLine.
        Determines whether the given VisiblePosition corresponds to a hard line
        break.
        (WebCore::AccessibilityRenderObject::doAXRangeForLine const):
        Returns a PlainTextRange whose length matches the number of characters
        in the given line, accounting for line break characters.

2021-09-02  Rob Buis  <rbuis@igalia.com>

        Absolutely positioned and negative z-index div with canvas child gets drawn with wrong stacking order
        https://bugs.webkit.org/show_bug.cgi?id=217154

        Reviewed by Simon Fraser.

        Keep overlap map accurate.

        Test: compositing/subtree-div-overlaps-multiple-negative-z-divs.html

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):

2021-09-02  Mark Lam  <mark.lam@apple.com>

        Add more support for JIT operation validation testing.
        https://bugs.webkit.org/show_bug.cgi?id=229534
        rdar://81526335

        Reviewed by Saam Barati.

        * bindings/js/WebCoreJITOperations.cpp:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * bindings/scripts/test/JS/JSTestDOMJIT.cpp:
        (WebCore::JSTestDOMJITDOMConstructor::prototypeForStructure):
        * cssjit/SelectorCompiler.cpp:
        * testing/js/WebCoreTestSupport.cpp:

2021-09-01  Kimmo Kinnunen  <kkinnunen@apple.com>

        Implement ANGLE version of WebGL layer snapshot copyImageSnapshotWithColorSpace
        https://bugs.webkit.org/show_bug.cgi?id=217377
        <rdar://problem/70248151>

        Reviewed by Tim Horton.

        Remove the function. The snapshots go through the paint codepath now.

        * platform/graphics/cocoa/WebGLLayer.h:
        * platform/graphics/cocoa/WebGLLayer.mm:

2021-09-01  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Do not generate integration runs out of IFC's display runs
        https://bugs.webkit.org/show_bug.cgi?id=229719

        Reviewed by Antti Koivisto.

        Integration runs and IFC display runs hold the exact same set of data, so let's not duplicate then for the integration layer.

        * WebCore.xcodeproj/project.pbxproj:
        * display/css/DisplayTextBox.cpp:
        (WebCore::Display::TextBox::debugDescription const):
        * layout/formattingContexts/inline/InlineDisplayContentBuilder.cpp:
        (WebCore::Layout::InlineDisplayContentBuilder::build):
        (WebCore::Layout::InlineDisplayContentBuilder::createRunsAndUpdateGeometryForLineSpanningInlineBoxes):
        * layout/formattingContexts/inline/InlineLineRun.h:
        (WebCore::Layout::Run::Text::originalContent const):
        (WebCore::Layout::Run::Text::renderedContent const):
        (WebCore::Layout::Run::setVerticalPositionIntegral):
        * layout/formattingContexts/inline/InlineRect.h:
        (WebCore::Layout::InlineRect::InlineRect):
        * layout/integration/LayoutIntegrationInlineContent.h:
        * layout/integration/LayoutIntegrationInlineContentBuilder.cpp:
        (WebCore::LayoutIntegration::InlineContentBuilder::build const):
        (WebCore::LayoutIntegration::InlineContentBuilder::createDisplayRuns const):
        (WebCore::LayoutIntegration::InlineContentBuilder::createDisplayLines const):
        * layout/integration/LayoutIntegrationInlineContentBuilder.h:
        * layout/integration/LayoutIntegrationLineLayout.cpp:
        (WebCore::LayoutIntegration::LineLayout::paintTextRunUsingPhysicalCoordinates):
        * layout/integration/LayoutIntegrationPagination.cpp:
        (WebCore::LayoutIntegration::makeAdjustedContent):
        * layout/integration/LayoutIntegrationRun.h: Removed.
        * rendering/TextPainter.cpp:

2021-09-01  Marcos Caceres  <marcos@marcosc.com>

        Add "payment" permissions policy
        https://bugs.webkit.org/show_bug.cgi?id=229406

        Reviewed by Devin Rousso.

        Test: http/tests/paymentrequest/payment-allow-attribute.https.html

        * Modules/applepay/PaymentSession.cpp:
        (WebCore::PaymentSession::canCreateSession):
        * html/FeaturePolicy.cpp:
        (WebCore::policyTypeName):
        (WebCore::FeaturePolicy::parse):
        (WebCore::FeaturePolicy::allows const):
        * html/FeaturePolicy.h:

2021-09-01  Alex Christensen  <achristensen@webkit.org>

        PerformanceNavigationTiming should be instantiated before scripts run then updated when response finishes
        https://bugs.webkit.org/show_bug.cgi?id=229751

        Reviewed by Chris Dumez.

        This removes an optimistic assertion that was firing in some appcache tests.

        * page/Performance.cpp:
        (WebCore::Performance::navigationFinished):

2021-09-01  Eric Carlson  <eric.carlson@apple.com>

        [macOS] getDisplayMedia should capture at the constrained size if possible
        https://bugs.webkit.org/show_bug.cgi?id=229357
        <rdar://problem/82191109>

        Reviewed by Youenn Fablet.

        Create display stream with preferred width, height, and frame rate.

        Test: fast/mediastream/get-display-media-capabilities.html

        * platform/mediastream/mac/CGDisplayStreamCaptureSource.cpp:
        (WebCore::CGDisplayStreamCaptureSource::start): Remove frame rate parameter.
        (WebCore::CGDisplayStreamCaptureSource::startDisplayStream): Ditto.
        (WebCore::CGDisplayStreamCaptureSource::commitConfiguration): Pass source settings
        instead of frame rate. Release and recreate the display stream if width, height,
        or frame rate has changed.
        * platform/mediastream/mac/CGDisplayStreamCaptureSource.h:
        (WebCore::CGDisplayStreamCaptureSource::width const):
        (WebCore::CGDisplayStreamCaptureSource::height const):
        (WebCore::CGDisplayStreamCaptureSource::frameRate const):

        * platform/mediastream/mac/CGDisplayStreamScreenCaptureSource.h:
        * platform/mediastream/mac/CGDisplayStreamScreenCaptureSource.mm:
        (WebCore::CGDisplayStreamScreenCaptureSource::createDisplayStream): Remove
        frame rate parameter. Create display stream with the configured width and height,
        not the size of the screen.
        (WebCore::CGDisplayStreamScreenCaptureSource::intrinsicSize const): Return screen
        size so track capabilities are accurate.

        * platform/mediastream/mac/CGWindowCaptureSource.h:
        * platform/mediastream/mac/CGWindowCaptureSource.mm:
        (WebCore::CGWindowCaptureSource::create): Remove frame rate parameter.
        (WebCore::CGWindowCaptureSource::intrinsicSize const): Return window size.

        * platform/mediastream/mac/DisplayCaptureSourceMac.cpp:
        (WebCore::DisplayCaptureSourceMac::capabilities): Use capturer intrinsic size for 
        width and height capabilities.

        * platform/mediastream/mac/DisplayCaptureSourceMac.h:
        * platform/mock/MockRealtimeMediaSourceCenter.cpp: Change the mock screen sizes to
        make the first one is different than the old hard-coded sizes so we're able to detect
        that it is used in a test.
        (WebCore::MockDisplayCapturer::start): Remove frame rate parameter.
        (WebCore::MockDisplayCapturer::intrinsicSize const):

2021-09-01  Chris Dumez  <cdumez@apple.com>

        Improve time precision when cross-origin isolated via COOP+COEP
        https://bugs.webkit.org/show_bug.cgi?id=228137
        <rdar://problem/81197138>

        Reviewed by Ryosuke Niwa.

        Increase the precision of our high precision time (used by performance.now()) from
        1ms to 20us when cross-origin isolated via COOP=same-origin + COEP=require-corp.
        Precision remains the same (1ms) when not cross-origin isolated.

        This aligns our behavior with Firefox.

        Note that Chrome provides higher precision (100us in general and 5us when
        cross-origin-isolated).

        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::setCrossOriginMode):
        * page/Performance.cpp:
        (WebCore::Performance::reduceTimeResolution):
        (WebCore::Performance::allowHighPrecisionTime):
        * page/Performance.h:

2021-09-01  Ryosuke Niwa  <rniwa@webkit.org>

        Eagerly resolve slot elements to simply the code in SlotAssignment
        https://bugs.webkit.org/show_bug.cgi?id=229748

        Reviewed by Chris Dumez.

        This patch makes the resolution of slot elements eager. Lazily resolution stopped making any sense
        once slotchange event was required whenever a slot element was inserted or removed per r235650.

        Right now, this lazy optimization only applies when scripts repeatedly inserts & removes a slot element
        in such a manner that there are multiple slot elements of the same name in a single shadow tree,
        and there are assigned nodes to the slot. There is no reason to overcomplicate the slot assignment code
        for this insane edge case.

        No new tests since there should be no observable behavior change.

        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::findAssignedSlot):
        * dom/SlotAssignment.cpp:
        (WebCore::SlotAssignment::findAssignedSlot):
        (WebCore::SlotAssignment::addSlotElementByName): Always call resolveSlotsAfterSlotMutation when there
        is an ambiguity as to whether this is the first slot element or not.
        (WebCore::SlotAssignment::removeSlotElementByName): Ditto for removal case.
        (WebCore::SlotAssignment::resolveSlotsAfterSlotMutation):
        (WebCore::SlotAssignment::resolveSlotsBeforeNodeInsertionOrRemoval): Moved to the header file.
        (WebCore::SlotAssignment::willRemoveAllChildren): Ditto.
        (WebCore::SlotAssignment::didChangeSlot):
        (WebCore::SlotAssignment::assignedNodesForSlot):
        (WebCore::SlotAssignment::findFirstSlotElement):
        (WebCore::SlotAssignment::resolveAllSlotElements): Deleted.
        * dom/SlotAssignment.h:
        (WebCore::SlotAssignment::resolveSlotsBeforeNodeInsertionOrRemoval): Moved from cpp file now that it
        doesn't optionally call resolveAllSlotElements. I'm not renaming this function for now since I want to
        remove it altogether in a followup.
        (WebCore::SlotAssignment::willRemoveAllChildren): Ditto.
        (WebCore::ShadowRoot::resolveSlotsBeforeNodeInsertionOrRemoval): Always update the slot mutation version
        and clear m_willBeRemovingAllChildren for simplicity. This extra condition will only apply for
        the deatils element, which nobody cares about it. Meanwhile, we're wasting many IC entries for all other
        node types whenever a node is inserted or removed. It's a pure madness.
        (WebCore::ShadowRoot::willRemoveAllChildren): Ditto.

2021-09-01  Jean-Yves Avenard  <jya@apple.com>

         'Show Next Frame' and 'Show Previous Frame' keyboard shortcuts seem out of context and only pause video
        https://bugs.webkit.org/show_bug.cgi?id=229538
        rdar://78161031

        Reviewed by Eric Carlson.

        On its own, this change will do nothing as currently AVKit doesn't check those properties
        and will always attempt to seek one frame forward or backward which isn't currently
        supported.
        AVKit will be amended so that it will call canSeekFrameBackward/canSeekFrameForward
        as necessary.
        This change will be reverted once https://bugs.webkit.org/show_bug.cgi?id=229539 is
        complete.

        * platform/ios/WebAVPlayerController.mm:
        (-[WebAVPlayerController canSeekFrameBackward]):
        (-[WebAVPlayerController canSeekFrameForward]):

2021-09-01  David Kilzer  <ddkilzer@apple.com>

        [WebRTC] Leak or over-release of CFPixelBufferRef returned from webrtc::createPixelBufferFromFrame()
        <https://webkit.org/b/229661>
        <rdar://problem/82507827>

        Reviewed by Eric Carlson.

        * platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.mm:
        (WebCore::RealtimeIncomingVideoSourceCocoa::pixelBufferFromVideoFrame):
        - Use adoptCF() to prevent a leak since
          webrtc::createPixelBufferFromFrame() always returns a +1
          retained CVPixelBufferRef now.
        - Change the functor to return a +1 retained CVPixelBufferRef.

2021-09-01  Fujii Hironori  <Hironori.Fujii@sony.com>

        REGRESSION(r280928) The smooth keyboard scrolling is unconditionally enabled for PageUp and PageDown keys
        https://bugs.webkit.org/show_bug.cgi?id=229733

        Reviewed by Tim Horton.

        Even though WinCairo port doesn't enable
        EventHandlerDrivenSmoothKeyboardScrollingEnabled yet, it had been
        enabled only for PageUp and PageDown keys since r280928. Other
        keys (Space and Arrow keys) don't trigger the smooth scrolling.

        r280928 changed to call startKeyboardScrolling for PageUp and
        PageDown keys, but it didn't check the setting.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::startKeyboardScrolling):
        (WebCore::EventHandler::defaultKeyboardEventHandler):

2021-09-01  Kimmo Kinnunen  <kkinnunen@apple.com>

        ImageRenderingMode.h is not used
        https://bugs.webkit.org/show_bug.cgi?id=229753

        Reviewed by Antti Koivisto.

        Remove the file. `InterpolationQuality` from `GraphicsTypes.h` seems
        to be the type used nowadays.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/ImageRenderingMode.h: Removed.

2021-09-01  Alex Christensen  <achristensen@webkit.org>

        PerformanceNavigationTiming should be instantiated before scripts run then updated when response finishes
        https://bugs.webkit.org/show_bug.cgi?id=229751

        Reviewed by Chris Dumez.

        Test: imported/w3c/web-platform-tests/navigation-timing/nav2_test_response_end_and_duration_before_during_and_after_load_event.html

        I noticed some server timing tests were calling performance.getEntriesByType('navigation')[0] before the document loaded, and in WebKit
        it would return undefined and in Chrome and Firefox it would return a PerformanceNavigationTiming object.  The solution is to make the object
        available earlier.  But what about responseEnd and duration before the main resource is finished responding?  It turns out in Chrome and now
        WebKit they are both 0 until they are filled in.  I added a WPT test to verify this behavior.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::notifyFinished):
        (WebCore::DocumentLoader::commitData):
        * loader/ResourceTiming.h:
        (WebCore::ResourceTiming::networkLoadMetrics):
        * page/Performance.cpp:
        (WebCore::Performance::addNavigationTiming):
        (WebCore::Performance::navigationFinished):
        * page/Performance.h:
        * page/PerformanceNavigationTiming.cpp:
        (WebCore::PerformanceNavigationTiming::navigationFinished):
        * page/PerformanceNavigationTiming.h:
        * page/PerformanceResourceTiming.cpp:
        (WebCore::PerformanceResourceTiming::responseEnd const):
        * page/PerformanceResourceTiming.h:

2021-09-01  Chris Dumez  <cdumez@apple.com>

        Add support for ServiceWorkerGlobalScope.serviceWorker
        https://bugs.webkit.org/show_bug.cgi?id=229720

        Reviewed by Youenn Fablet.

        Add support for ServiceWorkerGlobalScope.serviceWorker:
        - https://w3c.github.io/ServiceWorker/#dom-serviceworkerglobalscope-serviceworker

        Also add support for the "parsed" initial ServiceWorkerState:
        - https://w3c.github.io/ServiceWorker/#enumdef-serviceworkerstate

        No new tests, rebaselined existing tests.

        * workers/service/ServiceWorker.idl:
        * workers/service/ServiceWorkerGlobalScope.cpp:
        (WebCore::ServiceWorkerGlobalScope::create):
        (WebCore::ServiceWorkerGlobalScope::ServiceWorkerGlobalScope):
        * workers/service/ServiceWorkerGlobalScope.h:
        * workers/service/ServiceWorkerGlobalScope.idl:
        * workers/service/ServiceWorkerTypes.h:
        * workers/service/context/ServiceWorkerThread.cpp:
        (WebCore::ServiceWorkerThread::ServiceWorkerThread):
        (WebCore::ServiceWorkerThread::createWorkerGlobalScope):
        * workers/service/context/ServiceWorkerThread.h:
        * workers/service/context/ServiceWorkerThreadProxy.cpp:
        (WebCore::ServiceWorkerThreadProxy::ServiceWorkerThreadProxy):
        * workers/service/context/ServiceWorkerThreadProxy.h:
        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::installContextData):
        (WebCore::SWServer::runServiceWorker):
        * workers/service/server/SWServerRegistration.cpp:
        (WebCore::SWServerRegistration::clear):
        * workers/service/server/SWServerToContextConnection.h:
        * workers/service/server/SWServerWorker.cpp:
        (WebCore::SWServerWorker::SWServerWorker):

2021-09-01  Eric Carlson  <eric.carlson@apple.com>

        [macOS] Refactor screen capture class
        https://bugs.webkit.org/show_bug.cgi?id=229142
        <rdar://problem/81983306>

        Reviewed by Youenn Fablet.
        
        Rename classes based on the frameworks they use. Create CGDisplayStream base class.

        No new tests, no functional change.

        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/mediastream/mac/CGDisplayStreamCaptureSource.cpp: Added.
        (WebCore::CGDisplayStreamCaptureSource::~CGDisplayStreamCaptureSource):
        (WebCore::CGDisplayStreamCaptureSource::start):
        (WebCore::CGDisplayStreamCaptureSource::stop):
        (WebCore::CGDisplayStreamCaptureSource::generateFrame):
        (WebCore::CGDisplayStreamCaptureSource::startDisplayStream):
        (WebCore::CGDisplayStreamCaptureSource::commitConfiguration):
        (WebCore::CGDisplayStreamCaptureSource::displayWasReconfigured):
        (WebCore::CGDisplayStreamCaptureSource::displayReconfigurationCallBack):
        (WebCore::CGDisplayStreamCaptureSource::newFrame):
        (WebCore::CGDisplayStreamCaptureSource::frameAvailableHandler):
        * platform/mediastream/mac/CGDisplayStreamCaptureSource.h: Copied from Source/WebCore/platform/mediastream/mac/ScreenDisplayCapturerMac.h.
        (WebCore::CGDisplayStreamCaptureSource::checkDisplayStream):
        (WebCore::CGDisplayStreamCaptureSource::displayStream const):
        (WebCore::CGDisplayStreamCaptureSource::invalidateDisplayStream):
        * platform/mediastream/mac/CGDisplayStreamScreenCaptureSource.h: Renamed from Source/WebCore/platform/mediastream/mac/ScreenDisplayCapturerMac.h.
        * platform/mediastream/mac/CGDisplayStreamScreenCaptureSource.mm: Added.
        (WebCore::updateDisplayID):
        (WebCore::CGDisplayStreamScreenCaptureSource::create):
        (WebCore::CGDisplayStreamScreenCaptureSource::CGDisplayStreamScreenCaptureSource):
        (WebCore::CGDisplayStreamScreenCaptureSource::checkDisplayStream):
        (WebCore::CGDisplayStreamScreenCaptureSource::createDisplayStream):
        (WebCore::CGDisplayStreamScreenCaptureSource::screenCaptureDeviceWithPersistentID):
        (WebCore::CGDisplayStreamScreenCaptureSource::screenCaptureDevices):
        * platform/mediastream/mac/CGWindowCaptureSource.h: Renamed from Source/WebCore/platform/mediastream/mac/WindowDisplayCapturerMac.h.
        * platform/mediastream/mac/CGWindowCaptureSource.mm: Renamed from Source/WebCore/platform/mediastream/mac/WindowDisplayCapturerMac.mm.
        (WebCore::CGWindowCaptureSource::create):
        (WebCore::CGWindowCaptureSource::CGWindowCaptureSource):
        (WebCore::CGWindowCaptureSource::windowImage):
        (WebCore::CGWindowCaptureSource::generateFrame):
        (WebCore::CGWindowCaptureSource::windowCaptureDeviceWithPersistentID):
        (WebCore::CGWindowCaptureSource::windowCaptureDevices):
        * platform/mediastream/mac/DisplayCaptureManagerCocoa.cpp:
        (WebCore::DisplayCaptureManagerCocoa::updateDisplayCaptureDevices):
        (WebCore::DisplayCaptureManagerCocoa::updateWindowCaptureDevices):
        (WebCore::DisplayCaptureManagerCocoa::screenCaptureDeviceWithPersistentID):
        (WebCore::DisplayCaptureManagerCocoa::windowCaptureDeviceWithPersistentID):
        * platform/mediastream/mac/DisplayCaptureSourceMac.cpp: Renamed from Source/WebCore/platform/mediastream/mac/DisplayCaptureSourceCocoa.cpp.
        (WebCore::DisplayCaptureSourceMac::create):
        (WebCore::DisplayCaptureSourceMac::DisplayCaptureSourceMac):
        (WebCore::DisplayCaptureSourceMac::~DisplayCaptureSourceMac):
        (WebCore::DisplayCaptureSourceMac::capabilities):
        (WebCore::DisplayCaptureSourceMac::settings):
        (WebCore::DisplayCaptureSourceMac::settingsDidChange):
        (WebCore::DisplayCaptureSourceMac::startProducingData):
        (WebCore::DisplayCaptureSourceMac::stopProducingData):
        (WebCore::DisplayCaptureSourceMac::elapsedTime):
        (WebCore::DisplayCaptureSourceMac::updateFrameSize):
        (WebCore::DisplayCaptureSourceMac::emitFrame):
        (WebCore::DisplayCaptureSourceMac::Capturer::setLogger):
        (WebCore::DisplayCaptureSourceMac::Capturer::logChannel const):
        * platform/mediastream/mac/DisplayCaptureSourceMac.h: Renamed from Source/WebCore/platform/mediastream/mac/DisplayCaptureSourceCocoa.h.
        * platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp:
        * platform/mediastream/mac/ScreenDisplayCapturerMac.mm: Removed.
        * platform/mock/MockRealtimeMediaSourceCenter.cpp:
        (WebCore::MockDisplayCapturer::generateFrame):

2021-09-01  Chris Dumez  <cdumez@apple.com>

        Regression(r272607) Removal of alert()/confirm() in third-party iframes breaks Salesforce
        https://bugs.webkit.org/show_bug.cgi?id=229737
        <rdar://82591122>

        Unreviewed, Revert behavior change made in r272607 as it broke Salesforce. My understanding is that
        Chrome had to revert this too.

        Tests: http/tests/security/cross-origin-js-prompt-allowed.html
               http/tests/security/same-origin-different-domain-js-prompt-allowed.html

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::alert):
        (WebCore::DOMWindow::confirmForBindings):
        (WebCore::DOMWindow::prompt):

2021-09-01  Alan Bujtas  <zalan@apple.com>

        visualWordPosition should operate on a clean tree
        https://bugs.webkit.org/show_bug.cgi?id=229744
        <rdar://80684065>

        Reviewed by Antti Koivisto.

        This function expects the tree to not be mutated while walking the inline runs.

        * editing/VisibleUnits.cpp:
        (WebCore::visualWordPosition):

2021-09-01  Myles C. Maxfield  <mmaxfield@apple.com>

        document.fonts.size needs to update style so it doesn't return stale values
        https://bugs.webkit.org/show_bug.cgi?id=229644

        Reviewed by Darin Adler.

        Currently, we only update style inside the document::fonts() call.
        This isn't correct because content can save the results of document.fonts,
        do some work, then ask for its size.

        Test: web-platform-tests/css/css-font-loading/fontfaceset-update-after-stylesheet-change.html

        * css/CSSFontFace.cpp:
        (WebCore::CSSFontFace::updateStyleIfNeeded):
        * css/CSSFontFace.h:
        * css/CSSFontFaceSet.cpp:
        (WebCore::CSSFontFaceSet::updateStyleIfNeeded):
        * css/CSSFontFaceSet.h:
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::updateStyleIfNeeded):
        (WebCore::CSSFontSelector::fontStyleUpdateNeeded): Deleted.
        * css/CSSFontSelector.h:
        * css/FontFaceSet.cpp:
        (WebCore::FontFaceSet::size):
        (WebCore::FontFaceSet::size const): Deleted.
        * css/FontFaceSet.h:
        * dom/Document.cpp:
        (WebCore::Document::fonts):

2021-09-01  Myles C. Maxfield  <mmaxfield@apple.com>

        CSSFontFaceSet.clear() should not clear CSS-connected members
        https://bugs.webkit.org/show_bug.cgi?id=229643

        Reviewed by Darin Adler.

        The spec https://drafts.csswg.org/css-font-loading-3/#dom-fontfaceset-clear says:

        > Remove all non-CSS-connected items

        * css/CSSFontFaceSet.h:
        * css/FontFaceSet.cpp:
        (WebCore::FontFaceSet::clear):

2021-08-13  Sergio Villar Senin  <svillar@igalia.com>

        [css-flexbox] Add initial support for css-align-3 positional alignment properties
        https://bugs.webkit.org/show_bug.cgi?id=229074

        Reviewed by Simon Fraser.

        Added initial support for Start and End positional alignment properties from
        https://drafts.csswg.org/css-align-3/#positional-values. These two properties
        align the flex item to be flush with the alignment container's (the flex container)
        start and end edges in the appropriate axis.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::isColumnOrRowReverse const): New method.
        (WebCore::initialJustifyContentOffset): Handle Start and End.
        (WebCore::alignmentOffset): Ditto.
        (WebCore::RenderFlexibleBox::staticMainAxisPositionForPositionedChild):
        (WebCore::RenderFlexibleBox::alignmentForChild const):
        (WebCore::RenderFlexibleBox::layoutAndPlaceChildren):
        (WebCore::RenderFlexibleBox::layoutColumnReverse):
        (WebCore::initialAlignContentOffset): Handle Start and End.
        (WebCore::RenderFlexibleBox::alignFlexLines):
        * rendering/RenderFlexibleBox.h:

2021-09-01  Said Abou-Hallawa  <said@apple.com>

        [GPU Process](REGRESSION): A detached canvas leaks all the images it draws
        https://bugs.webkit.org/show_bug.cgi?id=229668
        <rdar://problem/82532484>

        Reviewed by Simon Fraser.

        Before drawing the canvas to the page, the canvas element may need to 
        prepare its context for display. For 2D canvas elements, this should 
        happen regardless whether they are attached to the Document or not.
        Because prepareForDisplay() calls ImageBuffer::flushDrawingContextAsync(),
        this will ensure the canvas drawing commands are pushed from WebProcess
        to GPUProcess. It will also release the cached shared images from both
        WebProcess and GPUProcess.

        Move the decision to skip the context prepareForDisplay() step from 
        Document::prepareCanvasesForDisplayIfNeeded() to 
        WebGLRenderingContextBase::prepareForDisplay().

        * dom/Document.cpp:
        (WebCore::Document::prepareCanvasesForDisplayIfNeeded):
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::prepareForDisplay):

2021-08-31  Lauro Moura  <lmoura@igalia.com>

        Non-unified build partial fixes, late late August 2021
        https://bugs.webkit.org/show_bug.cgi?id=229741

        Unreviewed non-unified build fixes.

        Still missing a strange WebCoreTestSupport.a-related link error.

        * Modules/mediastream/RTCIceTransportBackend.h: Add missing header.
        * Modules/mediastream/RTCPeerConnection.cpp: Ditto.
        * Modules/mediastream/libwebrtc/LibWebRTCIceTransportBackend.cpp:
        Ditto.
        * html/FormController.cpp:
        (WebCore::formSignature): Namespace HTMLNames.
        * html/FormController.h: Add missing header.
        * html/track/LoadableTextTrack.cpp: Add missing header.
        * loader/PrivateClickMeasurement.cpp: Ditto.
        * page/PageConfiguration.cpp: Ditto.

2021-08-31  Chris Dumez  <cdumez@apple.com>

        Enable SharedArrayBuffer support when COOP/COEP headers are used
        https://bugs.webkit.org/show_bug.cgi?id=229559
        <rdar://problem/82391945>

        Reviewed by Alex Christensen.

        Make sure window.crossOriginIsolated returns true when COOP=same-origin and
        COEP=require-corp are used. Also make sure that cross-origin-isolates pages
        are allowed to use SharedArrayBuffer.

        Change is covered by rebaselined layout tests and new API tests.

        * loader/DocumentLoader.cpp:
        (WebCore::toNeedsBrowsingContextGroupSwitch):
        (WebCore::DocumentLoader::responseReceived):
        * loader/EmptyClients.cpp:
        (WebCore::EmptyFrameLoaderClient::dispatchDecidePolicyForResponse):
        * loader/EmptyFrameLoaderClient.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::checkContentPolicy):
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:
        * loader/FrameLoaderTypes.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::crossOriginIsolated const):
        * page/DOMWindow.idl:

2021-08-31  Kate Cheney  <katherine_cheney@apple.com>

        Use after move in ServiceWorkerThreadProxy
        https://bugs.webkit.org/show_bug.cgi?id=229731

        Reviewed by Chris Dumez.

        * workers/service/context/ServiceWorkerThreadProxy.cpp:
        (WebCore::ServiceWorkerThreadProxy::ServiceWorkerThreadProxy):

2021-08-31  Marcos Caceres  <marcos@marcosc.com>

        [Payment Request] Calling PaymentRequest's show() should consume user activation
        https://bugs.webkit.org/show_bug.cgi?id=217365

        Reviewed by Youenn Fablet and Devin Rousso.

        Tested by existing WPT tests.

        * Modules/paymentrequest/PaymentRequest.cpp:
        (WebCore::PaymentRequest::show):

2021-08-31  Thibault Saunier  <tsaunier@igalia.com>

        [GStreamer] Fix deadlock tearing down pipeline when using fallback sink
        https://bugs.webkit.org/show_bug.cgi?id=229619

        Reviewed by Xabier Rodriguez-Calvar.

        Whenever GstGL is disabled for whatever reason the fallback sink might
        be used and cancelling repaint need to be taken into account in any case.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::cancelRepaint):

2021-08-31  Sihui Liu  <sihui_liu@apple.com>

        REGRESSION (r281771): ASSERTION FAILED: !m_deletionHasBegun under WebCore::Permissions::~Permissions()
        https://bugs.webkit.org/show_bug.cgi?id=229714
        <rdar://problem/82581552>

        Reviewed by Chris Dumez.

        PageConfiguration should hold Ref<PermissionController> instead of UniqueRef.

        * Modules/permissions/PermissionController.h:
        * loader/EmptyClients.cpp:
        (WebCore::pageConfigurationWithEmptyClients):
        * page/Page.h:
        * page/PageConfiguration.cpp:
        (WebCore::PageConfiguration::PageConfiguration):
        * page/PageConfiguration.h:

2021-08-31  Kate Cheney  <katherine_cheney@apple.com>

        Loads after session restore marked app initiated in Safari
        https://bugs.webkit.org/show_bug.cgi?id=229721
        <rdar://problem/82084236>

        Reviewed by Brent Fulgham.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadDifferentDocumentItem):
        Set the proper app initiated value when creating a new request.

2021-08-31  Antti Koivisto  <antti@apple.com>

        REGRESSION (r272900): wpt.fyi loading performance is very slow (regressed, and slower than other browsers)
        https://bugs.webkit.org/show_bug.cgi?id=229680
        <rdar://problem/82541045>

        Reviewed by Darin Adler.

        The page is inserting new children to shadow host and on each insertion we are traversing the composed
        tree to tear down renderers, even though there are none.

        * rendering/updating/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::tearDownRenderersAfterSlotChange):

        If the host doesn't have a renderer or 'display:contents' there can't be any renderers left in the subtree.

2021-08-31  Ross Kirsling  <ross.kirsling@sony.com>

        Unreviewed build fix for PlayStation following r241123.

        * css/typedom/CSSStyleValue.h:
        Add missing include.

2021-08-31  Johnson Zhou  <qiaosong_zhou@apple.com>

        Addition of CSSUnparsedValue. (TypedOM)
        https://bugs.webkit.org/show_bug.cgi?id=229069

        Reviewed by Darin Adler.

        * css/typedom/CSSOMVariableReferenceValue.cpp:

2021-08-31  Chris Dumez  <cdumez@apple.com>

        Implement self.structuredClone()
        https://bugs.webkit.org/show_bug.cgi?id=228331
        <rdar://problem/81468374>

        Reviewed by Ryosuke Niwa.

        Implement self.structuredClone() as per:
        - https://html.spec.whatwg.org/#dom-structuredclone

        Tests: imported/w3c/web-platform-tests/html/webappapis/structured-clone/structured-clone.any.html
               imported/w3c/web-platform-tests/html/webappapis/structured-clone/structured-clone.any.worker.html

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Headers.cmake:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/MessagePort.cpp:
        (WebCore::MessagePort::postMessage):
        * dom/MessagePort.h:
        * dom/MessagePort.idl:
        * page/Base64Utilities.h:
        * page/DOMWindow.h:
        (WebCore::WindowPostMessageOptions::WindowPostMessageOptions):
        * page/DOMWindow.idl:
        * page/StructuredSerializeOptions.h: Renamed from Source/WebCore/page/PostMessageOptions.h.
        (WebCore::StructuredSerializeOptions::StructuredSerializeOptions):
        * page/StructuredSerializeOptions.idl: Renamed from Source/WebCore/page/PostMessageOptions.idl.
        * page/WindowOrWorkerGlobalScope.cpp: Copied from Source/WebCore/workers/service/ServiceWorkerClient.h.
        (WebCore::WindowOrWorkerGlobalScope::reportError):
        (WebCore::WindowOrWorkerGlobalScope::structuredClone):
        * page/WindowOrWorkerGlobalScope.h: Copied from Source/WebCore/page/Base64Utilities.h.
        (WebCore::WindowOrWorkerGlobalScope::structuredClone):
        * page/WindowOrWorkerGlobalScope.idl:
        * workers/DedicatedWorkerGlobalScope.cpp:
        (WebCore::DedicatedWorkerGlobalScope::postMessage):
        * workers/DedicatedWorkerGlobalScope.h:
        * workers/DedicatedWorkerGlobalScope.idl:
        * workers/Worker.cpp:
        (WebCore::Worker::postMessage):
        * workers/Worker.h:
        * workers/Worker.idl:
        * workers/WorkerGlobalScope.h:
        * workers/service/ServiceWorker.cpp:
        (WebCore::ServiceWorker::postMessage):
        * workers/service/ServiceWorker.h:
        * workers/service/ServiceWorker.idl:
        * workers/service/ServiceWorkerClient.cpp:
        (WebCore::ServiceWorkerClient::postMessage):
        * workers/service/ServiceWorkerClient.h:
        * workers/service/ServiceWorkerClient.idl:

2021-08-31  Alan Bujtas  <zalan@apple.com>

        [LFC][Integration] Remove unused LayoutIntegation::Run functions
        https://bugs.webkit.org/show_bug.cgi?id=229711

        Reviewed by Antti Koivisto.

        * layout/integration/LayoutIntegrationRun.h:
        (WebCore::LayoutIntegration::Run::image const): Deleted.
        (WebCore::LayoutIntegration::Run::hasUnderlyingLayout const): Deleted.
        * layout/integration/LayoutIntegrationRunIteratorModernPath.h:
        (WebCore::LayoutIntegration::RunIteratorModernPath::atEnd const):

2021-08-31  Alan Bujtas  <zalan@apple.com>

        [IFC][Integration] Move integral vertical position adjustment over to createDisplayLines
        https://bugs.webkit.org/show_bug.cgi?id=229679

        Reviewed by Antti Koivisto.

        This is in preparation for not constructing text runs in InlineContentBuilder::createDisplayLineRuns.

        * layout/integration/LayoutIntegrationInlineContentBuilder.cpp:
        (WebCore::LayoutIntegration::InlineContentBuilder::build const):
        (WebCore::LayoutIntegration::InlineContentBuilder::createDisplayLineRuns const):
        (WebCore::LayoutIntegration::InlineContentBuilder::createDisplayLines const):
        * layout/integration/LayoutIntegrationInlineContentBuilder.h:
        * layout/integration/LayoutIntegrationLine.h:
        (WebCore::LayoutIntegration::NonRootInlineBox::setVerticalPositionIntegral):
        * layout/integration/LayoutIntegrationRun.h:
        (WebCore::LayoutIntegration::Run::setVerticalPositionIntegral):

2021-08-31  Chris Dumez  <cdumez@apple.com>

        [COOP] html/cross-origin-opener-policy/coop-same-origin-allow-popups-document-write.html WPT test is failing
        https://bugs.webkit.org/show_bug.cgi?id=229692

        Reviewed by Darin Adler.

        The test does the following:
        1. An opener document with `COOP=same-origin-allow-popups` opens a new window that shows the initial empty document.
           Note that the openee inherits `COOP=same-origin-allow-popups` from its opener.
        2. The opener document then calls document.write() on the openee.
           Note that, as per the HTML specification, this clears the 'is displaying initial empty document' flag.
        3. The openee is navigated cross-origin to a destination without COOP.

        Normally, `COOP=same-origin-allow-popups` would allow the popup to be navigated cross-origin as per the logic here [1]:
        """
        If all of the following are true:
            - isInitialAboutBlank,
            - activeDocumentCOOPValue's value is "same-origin-allow-popups".
            - responseCOOPValue is "unsafe-none",
        then return false (meaning, no context group switch).
        """

        However, because of the document.write() call at step 2, the isInitialAboutBlank flag is no longer true
        and the check should fail, thus causing a browsing context group switch.

        [1] https://html.spec.whatwg.org/multipage/origin.html#check-browsing-context-group-switch-coop-value

        No new tests, rebaselined existing test.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::maybeLoadEmpty):
        Replace the bad check to committedFirstRealDocumentLoad (which stays true after calling document.write()
        on the initial empty document) with a check to !isDisplayingInitialEmptyDocument, which matches the
        specification text. isDisplayingInitialEmptyDocument correctly becomes false after calling document.write()
        on the initial empty document.

        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::crossOriginOpenerPolicy const):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::didBeginDocument):
        Fix didBeginDocument() so that it doesn't overwrite the document's cross-origin-opener-policy when the
        DocumentLoader does not know what the policy is. When opening a popup, Document::initSecurityContext()
        will set the popup's cross-origin-opener-policy to the one of its opener. When didBeginDocument()
        gets called later for the initial empty document, we don't want to overwrite the inherited policy
        with a new default cross-origin-opener-policy of unsafe-none. The reason the DocumentLoader does not
        have a policy for us is because this is the initial empty document and DocumentLoader's
        doCrossOriginOpenerHandlingOfResponse() was thus never called with an actual network response.

2021-08-31  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Assertion in startObservingCookieChanges()
        https://bugs.webkit.org/show_bug.cgi?id=229708

        Reviewed by Philippe Normand.

        Add an implementation for startObservingCookieChanges() and stopObservingCookieChanges() setting the cookies
        observer callback on the given storage session.

        * platform/network/CookieStorage.h:
        * platform/network/cf/CookieStorageCFNet.cpp:
        (WebCore::startObservingCookieChanges):
        (WebCore::stopObservingCookieChanges):
        * platform/network/curl/CookieStorageCurl.cpp:
        (WebCore::startObservingCookieChanges):
        (WebCore::stopObservingCookieChanges):
        * platform/network/mac/CookieStorageMac.mm:
        (WebCore::startObservingCookieChanges):
        (WebCore::stopObservingCookieChanges):
        * platform/network/soup/CookieStorageSoup.cpp:
        (WebCore::startObservingCookieChanges):
        (WebCore::stopObservingCookieChanges):

2021-08-31  Alan Bujtas  <zalan@apple.com>

        [LFC][Integration] Make naming more consistent across Layout::Run and Integration::Run structs
        https://bugs.webkit.org/show_bug.cgi?id=229693

        Reviewed by Antti Koivisto.

        This is in preparation for merging these 2 structs.

        * display/DisplayTreeBuilder.cpp:
        (WebCore::Display::TreeBuilder::buildInlineDisplayTree):
        * display/css/DisplayBoxFactory.cpp:
        (WebCore::Display::BoxFactory::displayBoxForTextRun const):
        * display/css/DisplayBoxFactory.h:
        * display/css/DisplayTextBox.cpp:
        (WebCore::Display::TextBox::TextBox):
        * display/css/DisplayTextBox.h:
        (WebCore::Display::TextBox::expansion const):
        (WebCore::Display::TextBox::text const):
        * layout/Verification.cpp:
        (WebCore::Layout::checkForMatchingNonTextRuns):
        (WebCore::Layout::checkForMatchingTextRuns):
        (WebCore::Layout::outputMismatchingComplexLineInformationIfNeeded):
        * layout/formattingContexts/inline/InlineDisplayContentBuilder.cpp:
        (WebCore::Layout::InlineDisplayContentBuilder::build):
        (WebCore::Layout::InlineDisplayContentBuilder::createRunsAndUpdateGeometryForLineContent):
        (WebCore::Layout::InlineDisplayContentBuilder::createRunsAndUpdateGeometryForLineSpanningInlineBoxes):
        * layout/formattingContexts/inline/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::lineLayout):
        (WebCore::Layout::InlineFormattingContext::computeStaticPositionForOutOfFlowContent):
        * layout/formattingContexts/inline/InlineFormattingState.h:
        (WebCore::Layout::InlineFormattingState::runs const):
        (WebCore::Layout::InlineFormattingState::runs):
        (WebCore::Layout::InlineFormattingState::addRun):
        (WebCore::Layout::InlineFormattingState::clearLineAndRuns):
        (WebCore::Layout::InlineFormattingState::shrinkToFit):
        (WebCore::Layout::InlineFormattingState::lineRuns const): Deleted.
        (WebCore::Layout::InlineFormattingState::lineRuns): Deleted.
        (WebCore::Layout::InlineFormattingState::addLineRun): Deleted.
        * layout/formattingContexts/inline/InlineLine.h:
        (WebCore::Layout::Line::Run::expansion const):
        (WebCore::Layout::Line::Run::setExpansion):
        * layout/formattingContexts/inline/InlineLineRun.h:
        (WebCore::Layout::Run::style const):
        (WebCore::Layout::Run::Run):
        (WebCore::Layout::Run::Text::Text):
        (WebCore::Layout::LineRun::Text::start const): Deleted.
        (WebCore::Layout::LineRun::Text::end const): Deleted.
        (WebCore::Layout::LineRun::Text::length const): Deleted.
        (WebCore::Layout::LineRun::Text::originalContent const): Deleted.
        (WebCore::Layout::LineRun::Text::renderedContent const): Deleted.
        (WebCore::Layout::LineRun::Text::hasHyphen const): Deleted.
        (WebCore::Layout::LineRun::isText const): Deleted.
        (WebCore::Layout::LineRun::isSoftLineBreak const): Deleted.
        (WebCore::Layout::LineRun::isLineBreakBox const): Deleted.
        (WebCore::Layout::LineRun::isLineBreak const): Deleted.
        (WebCore::Layout::LineRun::isAtomicInlineLevelBox const): Deleted.
        (WebCore::Layout::LineRun::isInlineBox const): Deleted.
        (WebCore::Layout::LineRun::isNonRootInlineBox const): Deleted.
        (WebCore::Layout::LineRun::isRootInlineBox const): Deleted.
        (WebCore::Layout::LineRun::isGenericInlineLevelBox const): Deleted.
        (WebCore::Layout::LineRun::isInlineLevelBox const): Deleted.
        (WebCore::Layout::LineRun::isNonRootInlineLevelBox const): Deleted.
        (WebCore::Layout::LineRun::type const): Deleted.
        (WebCore::Layout::LineRun::hasContent const): Deleted.
        (WebCore::Layout::LineRun::isLineSpanning const): Deleted.
        (WebCore::Layout::LineRun::logicalRect const): Deleted.
        (WebCore::Layout::LineRun::inkOverflow const): Deleted.
        (WebCore::Layout::LineRun::logicalTop const): Deleted.
        (WebCore::Layout::LineRun::logicalBottom const): Deleted.
        (WebCore::Layout::LineRun::logicalLeft const): Deleted.
        (WebCore::Layout::LineRun::logicalRight const): Deleted.
        (WebCore::Layout::LineRun::logicalWidth const): Deleted.
        (WebCore::Layout::LineRun::logicalHeight const): Deleted.
        (WebCore::Layout::LineRun::moveVertically): Deleted.
        (WebCore::Layout::LineRun::text): Deleted.
        (WebCore::Layout::LineRun::text const): Deleted.
        (WebCore::Layout::LineRun::expansion const): Deleted.
        (WebCore::Layout::LineRun::layoutBox const): Deleted.
        (WebCore::Layout::LineRun::lineIndex const): Deleted.
        (WebCore::Layout::LineRun::LineRun): Deleted.
        (WebCore::Layout::LineRun::Text::Text): Deleted.
        * layout/formattingContexts/table/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::setUsedGeometryForCells):
        * layout/integration/LayoutIntegrationInlineContent.cpp:
        (WebCore::LayoutIntegration::InlineContent::iteratorForTextRun const):
        * layout/integration/LayoutIntegrationInlineContentBuilder.cpp:
        (WebCore::LayoutIntegration::InlineContentBuilder::build const):
        (WebCore::LayoutIntegration::InlineContentBuilder::createDisplayRuns const):
        (WebCore::LayoutIntegration::InlineContentBuilder::createDisplayLines const):
        (WebCore::LayoutIntegration::InlineContentBuilder::createDisplayLineRuns const): Deleted.
        * layout/integration/LayoutIntegrationInlineContentBuilder.h:
        * layout/integration/LayoutIntegrationLineLayout.cpp:
        (WebCore::LayoutIntegration::LineLayout::paint):
        (WebCore::LayoutIntegration::LineLayout::hitTest):
        (WebCore::LayoutIntegration::LineLayout::paintTextRunUsingPhysicalCoordinates):
        * layout/integration/LayoutIntegrationPagination.cpp:
        (WebCore::LayoutIntegration::makeAdjustedContent):
        * layout/integration/LayoutIntegrationRun.h:
        (WebCore::LayoutIntegration::Run::logicalRect const):
        (WebCore::LayoutIntegration::Run::text):
        (WebCore::LayoutIntegration::Run::text const):
        (WebCore::LayoutIntegration::Run::isLineBreak const):
        (WebCore::LayoutIntegration::Run::Run):
        (WebCore::LayoutIntegration::Run::Text::Text):
        (WebCore::LayoutIntegration::Run::TextContent::start const): Deleted.
        (WebCore::LayoutIntegration::Run::TextContent::end const): Deleted.
        (WebCore::LayoutIntegration::Run::TextContent::length const): Deleted.
        (WebCore::LayoutIntegration::Run::TextContent::originalContent const): Deleted.
        (WebCore::LayoutIntegration::Run::TextContent::renderedContent const): Deleted.
        (WebCore::LayoutIntegration::Run::TextContent::hasHyphen const): Deleted.
        (WebCore::LayoutIntegration::Run::rect const): Deleted.
        (WebCore::LayoutIntegration::Run::textContent): Deleted.
        (WebCore::LayoutIntegration::Run::textContent const): Deleted.
        (WebCore::LayoutIntegration::Run::TextContent::TextContent): Deleted.
        * layout/integration/LayoutIntegrationRunIteratorModernPath.h:
        (WebCore::LayoutIntegration::RunIteratorModernPath::isText const):
        (WebCore::LayoutIntegration::RunIteratorModernPath::rect const):
        (WebCore::LayoutIntegration::RunIteratorModernPath::hasHyphen const):
        (WebCore::LayoutIntegration::RunIteratorModernPath::text const):
        (WebCore::LayoutIntegration::RunIteratorModernPath::start const):
        (WebCore::LayoutIntegration::RunIteratorModernPath::end const):
        (WebCore::LayoutIntegration::RunIteratorModernPath::length const):
        (WebCore::LayoutIntegration::RunIteratorModernPath::traverseNextTextRun):
        * layout/layouttree/LayoutTreeBuilder.cpp:
        (WebCore::Layout::showInlineTreeAndRuns):

2021-08-31  Antti Koivisto  <antti@apple.com>

        [CSS Cascade Layers] Compute order correctly for late added sublayers
        https://bugs.webkit.org/show_bug.cgi?id=229666

        Reviewed by Simon Fraser.

        In cases like

            @layer a.b { ... }
            @layer c { ... }
            @layer a.d { ... }

        'c' should have higher priority than 'a.d'.

        Replace the per-RuleData layer order vector with references (indexes) to layer entry vector.
        These entries have order field that can be recomputed.

        * style/RuleSet.cpp:
        (WebCore::Style::RuleSet::addRule):
        (WebCore::Style::RuleSet::Builder::addStyleRule):
        (WebCore::Style::RuleSet::Builder::pushCascadeLayer):

        Instead of computing order directly we just give each layer an identifier and add an entry for it to the layer vector.

        (WebCore::Style::RuleSet::Builder::popCascadeLayer):
        (WebCore::Style::RuleSet::Builder::~Builder):

        Compute layer order after building for all layers.

        (WebCore::Style::RuleSet::shrinkToFit):
        * style/RuleSet.h:
        (WebCore::Style::RuleSet::cascadeLayerForIdentifier):
        (WebCore::Style::RuleSet::cascadeLayerForIdentifier const):
        (WebCore::Style::RuleSet::cascadeLayerOrderFor const):

2021-08-31  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, OpenXR build warning fix.

        * platform/xr/openxr/OpenXRInputMappings.h:

2021-08-31  Youenn Fablet  <youenn@apple.com>

        Add support for RTCIceTransport
        https://bugs.webkit.org/show_bug.cgi?id=229285

        Reviewed by Eric Carlson.

        Introduce RTCIceTransport as per spec.
        Reuse the same model as RTCDtlsTransport with a backend and RTCPeerConnection be responsible to reuse or create transports as needed.

        Covered by updated tests.

        * Modules/mediastream/RTCDtlsTransport.cpp:
        (WebCore::RTCDtlsTransport::RTCDtlsTransport):
        * Modules/mediastream/RTCDtlsTransport.h:
        * Modules/mediastream/RTCDtlsTransport.idl:
        * Modules/mediastream/RTCDtlsTransportBackend.h:
        * Modules/mediastream/RTCIceTransport.cpp:
        (WebCore::RTCIceTransport::RTCIceTransport):
        (WebCore::RTCIceTransport::~RTCIceTransport):
        (WebCore::RTCIceTransport::stop):
        (WebCore::RTCIceTransport::virtualHasPendingActivity const):
        (WebCore::RTCIceTransport::onStateChanged):
        (WebCore::RTCIceTransport::onGatheringStateChanged):
        * Modules/mediastream/RTCIceTransport.h:
        (WebCore::RTCIceTransport::create):
        (WebCore::RTCIceTransport::state const):
        (WebCore::RTCIceTransport::backend const):
        * Modules/mediastream/RTCIceTransport.idl:
        * Modules/mediastream/RTCIceTransportBackend.h: Added.
        (WebCore::operator==):
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::computeConnectionState):
        (WebCore::RTCPeerConnection::updateConnectionState):
        (WebCore::isIceTransportUsedByTransceiver):
        (WebCore::RTCPeerConnection::computeIceConnectionStateFromIceTransports):
        (WebCore::RTCPeerConnection::processIceTransportStateChange):
        (WebCore::RTCPeerConnection::getOrCreateIceTransport):
        (WebCore::RTCPeerConnection::getOrCreateDtlsTransport):
        * Modules/mediastream/RTCPeerConnection.h:
        * Modules/mediastream/libwebrtc/LibWebRTCDtlsTransportBackend.cpp:
        (WebCore::LibWebRTCDtlsTransportBackend::iceTransportBackend):
        * Modules/mediastream/libwebrtc/LibWebRTCDtlsTransportBackend.h:
        * Modules/mediastream/libwebrtc/LibWebRTCIceTransportBackend.cpp: Added.
        (WebCore::toRTCIceTransportState):
        (WebCore::toRTCIceGatheringState):
        (WebCore::LibWebRTCIceTransportBackendObserver::LibWebRTCIceTransportBackendObserver):
        (WebCore::LibWebRTCIceTransportBackendObserver::start):
        (WebCore::LibWebRTCIceTransportBackendObserver::stop):
        (WebCore::LibWebRTCIceTransportBackendObserver::onIceTransportStateChanged):
        (WebCore::LibWebRTCIceTransportBackendObserver::onGatheringStateChanged):
        (WebCore::LibWebRTCIceTransportBackend::LibWebRTCIceTransportBackend):
        (WebCore::LibWebRTCIceTransportBackend::~LibWebRTCIceTransportBackend):
        (WebCore::LibWebRTCIceTransportBackend::registerClient):
        (WebCore::LibWebRTCIceTransportBackend::unregisterClient):
        * Modules/mediastream/libwebrtc/LibWebRTCIceTransportBackend.h: Added.
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::OnIceConnectionChange):
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/EventNames.h:
        * dom/EventTargetFactory.in:

2021-08-31  Rob Buis  <rbuis@igalia.com>

        Nullptr crash in TypingCommand::willAddTypingToOpenCommand via TypingCommand::deleteKeyPressed
        https://bugs.webkit.org/show_bug.cgi?id=229277

        Reviewed by Ryosuke Niwa.

        Rewtite CompositeEditCommand::shouldBreakOutOfEmptyListItem() to return just VisibleSelection
        and check that it is not none in TypingCommand::willAddTypingToOpenCommand.

        Test: editing/deleting/delete-key-crash.html

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::moveParagraphs):
        * editing/CompositeEditCommand.h:
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::deleteKeyPressed):

2021-08-31  Ryosuke Niwa  <rniwa@webkit.org>

        Re-generalize top layer element concept
        https://bugs.webkit.org/show_bug.cgi?id=229488

        Reviewed by Antti Koivisto.

        r281548 made the concept of top layer is confined to dialog element to eliminate the runtime cost
        of making 5+ function calls and looking up the list hash set per removal of every element.

        This patch re-generalize this concept for all elements by introducing a new node flag to avoid
        the runtime cost so that we may use it in the future for the full screen element.

        No new tests since there should be no observable behavior changes.

        This patch also inverts the relationship between member functions in Element and Document
        to reduce the number of function calls involved by 1.

        * dom/Document.cpp:
        (Document::removedLastRef): Make sure the list of top layer elements is empty.
        (WebCore::Document::addTopLayerElement): Renamed from addToTopLayer. The code to update the layer
        has been moved to Element::addToTopLayer. Also release-time assert that the element is connected
        to this document.
        (WebCore::Document::removeTopLayerElement): Ditto.
        * dom/Document.h:
        * dom/Element.cpp:
        (WebCore::Element::removedFromAncestor): Call removeTopLayerElement if this element had a top layer.
        (WebCore::renderLayerForElement): Added.
        (WebCore::Element::addToTopLayer): Moved from Document. Set the node flag: IsInTopLayer.
        (WebCore::Element::removeFromTopLayer): Ditto, clear the node flag.
        (WebCore::Element::isInTopLayerWillChange): Deleted.
        (WebCore::Element::isInTopLayerDidChange): Deleted.
        * dom/Element.h:
        (WebCore::Element::isInTopLayer const): Rewritten to make use of new node flag.
        * dom/Node.h:
        (WebCore::NodeFlag): Added a new node flag: IsInTopLayer.
        * html/HTMLDialogElement.cpp:
        (WebCore::HTMLDialogElement::showModal):
        (WebCore::HTMLDialogElement::close):
        (WebCore::HTMLDialogElement::removedFromAncestor): Deleted.
        * html/HTMLDialogElement.h:

2021-08-26  Darin Adler  <darin@apple.com>

        Cut down on use of CFGetTypeID, using dynamic_cf_cast instead; related streamlining
        https://bugs.webkit.org/show_bug.cgi?id=229414

        Reviewed by Tim Horton.

        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp:
        (WebCore::makeSimpleColorFromARGBCFArray): Use dynamic_cf_cast.
        (WebCore::InbandTextTrackPrivateAVF::processCueAttributes): Ditto.
        Also removed unnecessary type casts when comparing with kCFBooleanTrue.

        * platform/graphics/avfoundation/objc/SourceBufferParserAVFObjC.mm:
        Use dynamic_cf_cast.
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::FontCache::systemFontFamilies): Ditto.
        (WebCore::isUserInstalledFont): Use kCFBooleanTrue.
        * platform/graphics/cocoa/HEVCUtilitiesCocoa.mm:
        (WebCore::validateHEVCParameters): Use dynamic_cf_cast and kCFBooleanTrue.
        (WebCore::validateDoViParameters): Ditto.

        * platform/graphics/cocoa/WebCoreDecompressionSession.mm:
        (WebCore::WebCoreDecompressionSession::shouldDecodeSample):
        Use kCFBooleanFalse.

        * platform/graphics/coretext/FontPlatformDataCoreText.cpp:
        (WebCore::FontPlatformData::objectForEqualityCheck): Use auto.

        * platform/graphics/cv/GraphicsContextGLCVANGLE.cpp:
        (WebCore::transferFunctionFromString): Removed type check, which caller
        should do since the agument type is CFStringRef.
        (WebCore::GraphicsContextGLCVANGLE::copyPixelBufferToTexture): Use
        dynamic_cf_cast instead of an unchecked static_cast.

        * platform/ios/UserAgentIOS.mm:
        (WebCore::deviceNameForUserAgent): Improved efficiency by returning
        a StringView instead of a String, no need to create and destroy a string
        or churn the reference count each time this function is called.
        (WebCore::standardUserAgentWithApplicationName): Improved efficiency
        by using a better idiom for the space before the application name.
        Use dynamic_cf_cast.

        * platform/mediastream/mac/WindowDisplayCapturerMac.mm:
        (WebCore::anyOfCGWindow): Use kCFBooleanFalse.

        * platform/network/cf/ProxyServerCFNet.cpp:
        (WebCore::processProxyServers): Use dynamic_cf_cast.

        * platform/network/cf/ResourceRequestCFNet.cpp: Move
        WTF_DECLARE_CF_TYPE_TRAIT for CFURLRef out of here.

        * platform/network/cf/SocketStreamHandleImplCFNet.cpp:
        (WebCore::SocketStreamHandleImpl::chooseProxyFromArray): Ditto.

        * platform/network/ios/WebCoreURLResponseIOS.h: Tweaked a bit.

        * platform/network/ios/WebCoreURLResponseIOS.mm:
        (WebCore::createExtensionToMIMETypeMap): Deleted.
        (WebCore::adjustMIMETypeIfNecessary): Simplified the code that maps ".mjs"
        to "text/javascript" to make it much more efficient and not use a dictionary.
        Refactored to share code with the Mac, via the WebCoreURLResponse.h/mm
        files, which are not macOS-specific even though they are in a directory
        named "mac". Fixed one place where we did adoptCF where it should be adoptNS.
        Use CFSTR("application/octet-stream") directly instead of using
        WebCore::defaultMIMEType().

        * platform/network/mac/NetworkStateNotifierMac.cpp:
        (WebCore::NetworkStateNotifier::updateStateWithoutNotifying): Use
        dynamic_cf_cast.

        * platform/network/mac/UTIUtilities.h: Renamed MIMETypeFromUTITree
        to mimeTypeFromUTITree to make the style robot happy. Changed the
        argument and return type to CFStringRef since that's what the callers
        all want, and what the implementation uses, and there is no reason to
        convert back and forth to WTF::String.

        * platform/network/mac/UTIUtilities.mm:
        (WebCore::mimeTypeFromUTITree): Use nullptr, not emptyString(), for the
        value when there is no MIME type found. Use auto. Use dynamic_cf_cast.
        Make recursion more efficient since we don't keep converting back and
        forth between CFStringRef and WTF::String.
        (WebCore::UTIFromTag): Removed unneeded explicit converstion to WTF::String.

        * platform/network/mac/WebCoreURLResponse.h: Added helper functions
        to the header, shared by WebCoreURLResponse.mm and WebCoreURLResponseIOS.mm.
        Use CFSTR("application/octet-stream") directly instead of using
        WebCore::defaultMIMEType().6
        * platform/network/mac/WebCoreURLResponse.mm:
        (WebCore::createExtensionToMIMETypeMap): Deleted.
        (WebCore::adjustMIMETypeIfNecessary): Refactored to use a SortedArrayMap
        instead of a CFDictionary, eliminating various type casts and conversions.
        Refactored to use the new functions below. Use makeNeverDestroyed to
        instead of RetainPtr::leakRef. Removed unnecessary check for equality
        since this function only does work when CFURLResponseGetMIMEType is nullptr.
        (WebCore::filePathExtension): Added. Refactored the code to get a path extension
        from a CFURLResponseRef into a function since it's used in two places.
        (WebCore::preferredMIMETypeForFileExtensionFromUTType): Added. Refactored
        this logical operation, mapping a file extension to a MIME type, into a function.
        This is used in two places. Also puts ALLOW_DEPRECATED_DECLARATIONS_BEGIN/END
        pair into a single place, and this is where we'll switch to use newer UTType
        machinery later on.

        * testing/cocoa/WebArchiveDumpSupport.mm:
        (WebCoreTestSupport::convertWebResourceResponseToDictionary): Use auto and
        dynamic_cf_cast.

2021-08-30  Patrick Angle  <pangle@apple.com>

        Web Inspector: Refactor `WorkerInspectorAgent` to use weak pointers for `WorkerInspectorProxy`s
        https://bugs.webkit.org/show_bug.cgi?id=229632

        Reviewed by Chris Dumez.

        Covered by existing tests in LayoutTests/inspector/worker/*

        Make `WorkerInspectorProxy` reference counted, and use `WeakPtr`s to them in `InspectorWorkerAgent`.

        * inspector/agents/InspectorWorkerAgent.cpp:
        (WebCore::InspectorWorkerAgent::initialized):
        (WebCore::InspectorWorkerAgent::sendMessageToWorker):
        (WebCore::InspectorWorkerAgent::connectToAllWorkerInspectorProxiesForPage):
        (WebCore::InspectorWorkerAgent::disconnectFromAllWorkerInspectorProxies):
        (WebCore::InspectorWorkerAgent::connectToWorkerInspectorProxy):
        * inspector/agents/InspectorWorkerAgent.h:
        * workers/WorkerInspectorProxy.cpp:
        (WebCore::WorkerInspectorProxy::allWorkerInspectorProxies):
        (WebCore::WorkerInspectorProxy::workerStarted):
        (WebCore::WorkerInspectorProxy::workerTerminated):
        * workers/WorkerInspectorProxy.h:
        (WebCore::WorkerInspectorProxy::create):
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::WorkerMessagingProxy):
        * workers/WorkerMessagingProxy.h:

2021-08-30  Johnson Zhou  <qiaosong_zhou@apple.com>

        Addition of CSSUnparsedValue. (TypedOM)
        https://bugs.webkit.org/show_bug.cgi?id=229069

        Reviewed by Alex Christensen.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCSSStyleValueCustom.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/js/WebCoreBuiltinNames.h:
        * css/typedom/CSSNumericValue.h:
        (WebCore::CSSNumericValue::getType const):
        * css/typedom/CSSOMVariableReferenceValue.cpp: Copied from Source/WebCore/css/typedom/CSSUnparsedValue.cpp.
        (WebCore::CSSOMVariableReferenceValue::create):
        (WebCore::CSSOMVariableReferenceValue::setVariable):
        (WebCore::CSSOMVariableReferenceValue::toString const):
        * css/typedom/CSSOMVariableReferenceValue.h: Copied from Source/WebCore/css/typedom/CSSUnparsedValue.h.
        * css/typedom/CSSOMVariableReferenceValue.idl: Copied from Source/WebCore/css/typedom/CSSStyleValue.idl.
        * css/typedom/CSSStyleImageValue.cpp:
        (WebCore::CSSStyleImageValue::CSSStyleImageValue):
        * css/typedom/CSSStyleImageValue.h:
        * css/typedom/CSSStyleValue.cpp:
        (WebCore::CSSStyleValue::parseStyleValue):
        (WebCore::CSSStyleValue::parse):
        (WebCore::CSSStyleValue::parseAll):
        (WebCore::CSSStyleValue::create):
        (WebCore::CSSStyleValue::CSSStyleValue):
        (WebCore::CSSStyleValue::reifyValue):
        (WebCore::CSSStyleValue::toString const):
        * css/typedom/CSSStyleValue.h:
        (WebCore::CSSStyleValue::getType const):
        (WebCore::CSSStyleValue::isUnitValue): Deleted.
        (WebCore::CSSStyleValue::isUnparsedValue): Deleted.
        (WebCore::CSSStyleValue::isImageValue): Deleted.
        * css/typedom/CSSStyleValue.idl:
        * css/typedom/CSSUnitValue.h:
        * css/typedom/CSSUnparsedValue.cpp:
        (WebCore::CSSUnparsedValue::create):
        (WebCore::CSSUnparsedValue::CSSUnparsedValue):
        (WebCore::CSSUnparsedValue::toString const):
        (WebCore::CSSUnparsedValue::item):
        (WebCore::CSSUnparsedValue::setItem):
        * css/typedom/CSSUnparsedValue.h:
        (WebCore::CSSUnparsedValue::length const):
        (isType):
        * css/typedom/CSSUnparsedValue.idl:
        * css/typedom/StylePropertyMapReadOnly.cpp:
        (WebCore::StylePropertyMapReadOnly::reifyValue):
        (WebCore::StylePropertyMapReadOnly::customPropertyValueOrDefault):
        * css/typedom/StylePropertyMapReadOnly.h:
        * dom/StyledElement.cpp:
        * html/CustomPaintImage.cpp:
        (WebCore::extractComputedProperty):

2021-08-30  Kiet Ho  <tho22@apple.com>

        Remove hardcoded CSSUnitType enum values
        https://bugs.webkit.org/show_bug.cgi?id=229672

        Reviewed by Simon Fraser.

        * css/CSSPrimitiveValue.h:
        (WebCore::CSSPrimitiveValue::isFontIndependentLength):
        (WebCore::CSSPrimitiveValue::isLength):
        (WebCore::CSSPrimitiveValue::isResolution):
        (WebCore::CSSPrimitiveValue::isViewportPercentageLength):
        * css/CSSUnits.h:

2021-08-30  Jer Noble  <jer.noble@apple.com>

        Fix include guards in PlatformScreenMac.mm
        https://bugs.webkit.org/show_bug.cgi?id=229430

        Reviewed by Alex Christensen.

        The include guards should refer to the file they're including.

        * platform/mac/PlatformScreenMac.mm:

2021-08-30  Alex Christensen  <achristensen@webkit.org>

        WKWebViewConfiguration._loadsSubresources=NO should prevent preconnecting
        https://bugs.webkit.org/show_bug.cgi?id=229684

        Reviewed by Tim Horton.

        * Modules/websockets/ThreadableWebSocketChannel.cpp:
        (WebCore::ThreadableWebSocketChannel::validateURL):
        * loader/ResourceLoadNotifier.cpp:
        (WebCore::ResourceLoadNotifier::dispatchWillSendRequest):
        * page/Page.cpp:
        (WebCore::Page::allowsLoadFromURL const):
        * page/Page.h:
        (WebCore::Page::loadsSubresources const): Deleted.

2021-08-30  Lauro Moura  <lmoura@igalia.com>

        [LFC][IFC] Remove unused variables after r281744
        https://bugs.webkit.org/show_bug.cgi?id=229677

        Reviewed by Darin Adler.

        Silence compiler warnings.

        Covered by existing tests.

        * display/css/DisplayBoxFactory.cpp:
        (WebCore::Display::BoxFactory::displayBoxForTextRun const):

2021-08-30  Sihui Liu  <sihui_liu@apple.com>

        Add stubs for Permissions API
        https://bugs.webkit.org/show_bug.cgi?id=229339
        <rdar://problem/82442205>

        Reviewed by Chris Dumez.

        Add bindings code and a feature flag for Permissions API.
        Spec: https://w3c.github.io/permissions/

        No new tests. Rebaseline existing tests.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Headers.cmake:
        * Modules/permissions/Navigator+Permissions.idl: Added.
        * Modules/permissions/NavigatorPermissions.cpp: Added.
        (WebCore::NavigatorPermissions::NavigatorPermissions):
        (WebCore::NavigatorPermissions::permissions):
        (WebCore::NavigatorPermissions::from):
        (WebCore::NavigatorPermissions::supplementName):
        * Modules/permissions/NavigatorPermissions.h: Added.
        * Modules/permissions/PermissionController.h: Added.
        * Modules/permissions/PermissionDescriptor.h: Added.
        (WebCore::PermissionDescriptor::operator== const):
        (WebCore::PermissionDescriptor::encode const):
        (WebCore::PermissionDescriptor::decode):
        * Modules/permissions/PermissionDescriptor.idl: Added.
        * Modules/permissions/PermissionName.h: Added.
        * Modules/permissions/PermissionName.idl: Added.
        * Modules/permissions/PermissionObserver.h: Added.
        * Modules/permissions/PermissionState.h: Added.
        * Modules/permissions/PermissionState.idl: Added.
        * Modules/permissions/PermissionStatus.cpp: Added.
        (WebCore::PermissionStatus::create):
        (WebCore::PermissionStatus::PermissionStatus):
        (WebCore::PermissionStatus::~PermissionStatus):
        (WebCore::PermissionStatus::stateChanged):
        (WebCore::PermissionStatus::activeDOMObjectName const):
        (WebCore::PermissionStatus::virtualHasPendingActivity const):
        (WebCore::PermissionStatus::eventListenersDidChange):
        * Modules/permissions/PermissionStatus.h: Added.
        * Modules/permissions/PermissionStatus.idl: Added.
        * Modules/permissions/Permissions.cpp: Added.
        (WebCore::Permissions::create):
        (WebCore::Permissions::Permissions):
        (WebCore::Permissions::navigator):
        (WebCore::Permissions::query):
        * Modules/permissions/Permissions.h: Added.
        * Modules/permissions/Permissions.idl: Added.
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:
        * dom/Document.cpp:
        (WebCore::Document::permissionController):
        * dom/Document.h:
        * dom/EventTargetFactory.in:
        * dom/ScriptExecutionContext.h:
        (WebCore::ScriptExecutionContext::permissionController):
        * dom/TaskSource.h:
        * loader/EmptyClients.cpp:
        (WebCore::pageConfigurationWithEmptyClients):
        * page/Page.cpp:
        (WebCore::m_permissionController):
        (WebCore::Page::permissionController):
        (WebCore::m_httpsUpgradeEnabled): Deleted.
        * page/Page.h:
        * page/PageConfiguration.cpp:
        (WebCore::PageConfiguration::PageConfiguration):
        * page/PageConfiguration.h:

2021-08-30  Chris Dumez  <cdumez@apple.com>

        SubmitEvent.submitter property isn't set for <button type="submit">
        https://bugs.webkit.org/show_bug.cgi?id=229660

        Reviewed by Ryosuke Niwa.

        Make sure HTMLButtonElement::defaultEventHandler() properly passes |this| as submitter
        when calling HTMLFormElement::submitIfPossible(). This was causing the SubmitEvent.submitter
        property to not be set when submitting a form by clicking a `<button type="submit">`.

        Test: fast/forms/submit-button-submit-event.html

        * html/HTMLButtonElement.cpp:
        (WebCore::HTMLButtonElement::defaultEventHandler):

2021-08-30  Alan Bujtas  <zalan@apple.com>

        [IFC][Integration] Remove unused bidi handling
        https://bugs.webkit.org/show_bug.cgi?id=229663

        Reviewed by Antti Koivisto.

        Re-introduce it when bidi gets enabled for IFC.

        * layout/integration/LayoutIntegrationInlineContentBuilder.cpp:
        (WebCore::LayoutIntegration::InlineContentBuilder::createDisplayLineRuns const):
        (WebCore::LayoutIntegration::Iterator::offset const): Deleted.
        (WebCore::LayoutIntegration::Iterator::operator== const): Deleted.
        (WebCore::LayoutIntegration::Iterator::operator!= const): Deleted.
        (WebCore::LayoutIntegration::Iterator::atEnd const): Deleted.
        (WebCore::LayoutIntegration::Iterator::currentRun const): Deleted.
        (): Deleted.
        (WebCore::LayoutIntegration::Iterator::Iterator): Deleted.
        (WebCore::LayoutIntegration::Iterator::direction const): Deleted.
        (WebCore::LayoutIntegration::Iterator::increment): Deleted.
        (WebCore::LayoutIntegration::BidiRun::start const): Deleted.
        (WebCore::LayoutIntegration::BidiRun::end const): Deleted.
        (WebCore::LayoutIntegration::BidiRun::level const): Deleted.
        (WebCore::LayoutIntegration::BidiRun::next const): Deleted.
        (WebCore::LayoutIntegration::BidiRun::setNext): Deleted.
        (WebCore::LayoutIntegration::BidiRun::takeNext): Deleted.
        (WebCore::LayoutIntegration::BidiRun::BidiRun): Deleted.

2021-08-30  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Move hyphen handling from the integration run to IFC's display run
        https://bugs.webkit.org/show_bug.cgi?id=229662

        Reviewed by Antti Koivisto.

        Move the rendered content handling (hyphen only atm) over to the IFC display runs.
        This is in preparation for merging integration and IFC's display runs.

        * display/css/DisplayBoxPainter.cpp:
        (WebCore::Display::BoxPainter::paintBoxContent):
        * display/css/DisplayTextBox.cpp:
        (WebCore::Display::TextBox::debugDescription const):
        * layout/formattingContexts/inline/InlineDisplayContentBuilder.cpp:
        (WebCore::Layout::InlineDisplayContentBuilder::createRunsAndUpdateGeometryForLineContent):
        * layout/formattingContexts/inline/InlineLineRun.h:
        (WebCore::Layout::LineRun::Text::originalContent const):
        (WebCore::Layout::LineRun::Text::renderedContent const):
        (WebCore::Layout::LineRun::Text::hasHyphen const):
        (WebCore::Layout::LineRun::Text::Text):
        (WebCore::Layout::LineRun::Text::content const): Deleted.
        (WebCore::Layout::LineRun::Text::needsHyphen const): Deleted.
        * layout/integration/LayoutIntegrationInlineContentBuilder.cpp:
        (WebCore::LayoutIntegration::InlineContentBuilder::createDisplayLineRuns const):

2021-08-30  Chris Dumez  <cdumez@apple.com>

        Implement self.reportError()
        https://bugs.webkit.org/show_bug.cgi?id=228316
        <rdar://problem/81446162>

        Reviewed by Sam Weinig.

        Implement self.reportError() as per:
        - https://github.com/whatwg/html/pull/1196

        Firefox already shipped this and Chrome will do so soon too.

        Tests: imported/w3c/web-platform-tests/html/webappapis/scripting/reporterror.any.html
               imported/w3c/web-platform-tests/html/webappapis/scripting/reporterror.any.worker.html

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::reportError):
        * page/DOMWindow.h:
        * page/WindowOrWorkerGlobalScope.idl:
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::reportError):
        * workers/WorkerGlobalScope.h:

2021-08-30  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Introduce Line::Run::Text to hold text content related properties
        https://bugs.webkit.org/show_bug.cgi?id=229658

        Reviewed by Antti Koivisto.

        Let's use a dedicated (and more compact) structure here instead of relying on a display type of structure.
        This is in preparation for merging the display and the integration runs.

        * layout/formattingContexts/inline/InlineDisplayContentBuilder.cpp:
        (WebCore::Layout::InlineDisplayContentBuilder::createRunsAndUpdateGeometryForLineContent):
        * layout/formattingContexts/inline/InlineLine.cpp:
        (WebCore::Layout::Line::applyRunExpansion):
        (WebCore::Layout::Line::TrimmableTrailingContent::remove):
        (WebCore::Layout::Line::Run::Run):
        (WebCore::Layout::m_textContent):
        (WebCore::Layout::Line::Run::expand):
        (WebCore::Layout::Line::Run::removeTrailingWhitespace):
        * layout/formattingContexts/inline/InlineLine.h:
        (WebCore::Layout::Line::Run::textContent const):
        (WebCore::Layout::Line::Run::setNeedsHyphen):
        * layout/formattingContexts/inline/InlineLineBuilder.cpp:
        (WebCore::Layout::LineBuilder::close):
        * layout/formattingContexts/inline/InlineLineRun.h:
        (WebCore::Layout::LineRun::Text::needsHyphen const):
        (WebCore::Layout::LineRun::Text::Text):
        (WebCore::Layout::LineRun::Text::setNeedsHyphen): Deleted.
        (WebCore::Layout::LineRun::Text::expand): Deleted.
        (WebCore::Layout::LineRun::Text::shrink): Deleted.

2021-08-29  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Move "line needs integral snapping" computing to IFC from the integration layer
        https://bugs.webkit.org/show_bug.cgi?id=229654

        Reviewed by Antti Koivisto.

        This is in preparation for merging the integration layer runs with IFC's display runs.
        This also save a loop over the runs to compute the "line needs integration position" bit.

        * layout/formattingContexts/inline/InlineDisplayContentBuilder.cpp:
        (WebCore::Layout::InlineDisplayContentBuilder::createRunsAndUpdateGeometryForLineContent):
        * layout/formattingContexts/inline/InlineLineGeometry.h:
        (WebCore::Layout::LineGeometry::needsIntegralPosition const):
        (WebCore::Layout::LineGeometry::setNeedsIntegralPosition):
        * layout/integration/LayoutIntegrationInlineContentBuilder.cpp:
        (WebCore::LayoutIntegration::InlineContentBuilder::build const):
        (WebCore::LayoutIntegration::InlineContentBuilder::createDisplayLineRuns const):
        (WebCore::LayoutIntegration::InlineContentBuilder::createDisplayLines const):
        (WebCore::LayoutIntegration::InlineContentBuilder::computeLineLevelVisualAdjustmentsForRuns const): Deleted.
        * layout/integration/LayoutIntegrationInlineContentBuilder.h:

2021-08-29  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add ink overflow to the line runs
        https://bugs.webkit.org/show_bug.cgi?id=229653

        Reviewed by Antti Koivisto.

        Let's move the ink overflow computation from the integration layer to IFC.
        This is in preparation for merging display runs (IFC) and the integration layer runs.

        * layout/formattingContexts/inline/InlineDisplayContentBuilder.cpp:
        (WebCore::Layout::InlineDisplayContentBuilder::build):
        (WebCore::Layout::InlineDisplayContentBuilder::createRunsAndUpdateGeometryForLineContent):
        (WebCore::Layout::InlineDisplayContentBuilder::createRunsAndUpdateGeometryForLineSpanningInlineBoxes):
        * layout/formattingContexts/inline/InlineLineRun.h:
        (WebCore::Layout::LineRun::inkOverflow const):
        (WebCore::Layout::LineRun::LineRun):
        * layout/integration/LayoutIntegrationInlineContentBuilder.cpp:
        (WebCore::LayoutIntegration::InlineContentBuilder::createDisplayLineRuns const):

2021-08-29  Rob Buis  <rbuis@igalia.com>

        Nullptr crash in ReplaceSelectionCommand::removeRedundantStylesAndKeepStyleSpanInline
        https://bugs.webkit.org/show_bug.cgi?id=229280

        Reviewed by Ryosuke Niwa.

        Null check context in removeRedundantStylesAndKeepStyleSpanInline
        since the parent node can be null.

        Test: editing/selection/replace-selection-crash-02.html

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::removeRedundantStylesAndKeepStyleSpanInline):

2021-08-29  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Make line runs relative to the formatting root border box.
        https://bugs.webkit.org/show_bug.cgi?id=229652

        Reviewed by Antti Koivisto.

        Let's construct the line runs relative to the border box of the inline formatting context root
        (as opposed to relative to the line box), so that the integration runs could just copy their positions.

        This is in preparation for merging line runs with the integration runs.

        * display/css/DisplayBoxFactory.cpp:
        (WebCore::Display::BoxFactory::displayBoxForTextRun const):
        * layout/formattingContexts/inline/InlineDisplayContentBuilder.cpp:
        (WebCore::Layout::InlineDisplayContentBuilder::createRunsAndUpdateGeometryForLineContent):
        (WebCore::Layout::InlineDisplayContentBuilder::createRunsAndUpdateGeometryForLineSpanningInlineBoxes):
        * layout/integration/LayoutIntegrationInlineContentBuilder.cpp:
        (WebCore::LayoutIntegration::InlineContentBuilder::createDisplayLineRuns const):

2021-08-29  Antti Koivisto  <antti@apple.com>

        [CSS Cascade Layers] Factor RuleSet building into a Builder type
        https://bugs.webkit.org/show_bug.cgi?id=229655

        Reviewed by Alan Bujtas.

        Factor build time state into a stack-allocate type.

        * style/RuleSet.cpp:
        (WebCore::Style::RuleSet::addRule):
        (WebCore::Style::RuleSet::addRulesFromSheet):
        (WebCore::Style::RuleSet::Builder::addChildRules):
        (WebCore::Style::RuleSet::Builder::addRulesFromSheet):
        (WebCore::Style::RuleSet::Builder::addStyleRule):
        (WebCore::Style::RuleSet::Builder::pushCascadeLayer):
        (WebCore::Style::RuleSet::Builder::popCascadeLayer):
        (WebCore::Style::RuleSet::addChildRules): Deleted.
        (WebCore::Style::RuleSet::addStyleRule): Deleted.
        * style/RuleSet.h:

2021-08-29  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Track handling refactoring
        https://bugs.webkit.org/show_bug.cgi?id=229497

        Reviewed by Xabier Rodriguez-Calvar.

        The TrackPrivateBaseGStreamer class now factors most of the common code used by its
        sub-classes. The code style was modernised, some MSE-related dead code was removed from the
        player. More could be done in the MSE AppendPipeline by making it rely on parsebin, but
        that's another quest. The tracks created by the AppendPipeline were triggering track ID
        mismatches between the player and those tracks, so a new flag was added in the constructor
        of those to prevent stream-start event handling. Ideally that code should rely on GstStream,
        that would remove the need of that flag.

        No new tests, existing media tests cover this change.

        * platform/graphics/gstreamer/AudioTrackPrivateGStreamer.cpp:
        (WebCore::AudioTrackPrivateGStreamer::AudioTrackPrivateGStreamer):
        * platform/graphics/gstreamer/AudioTrackPrivateGStreamer.h:
        * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.cpp:
        (WebCore::InbandTextTrackPrivateGStreamer::InbandTextTrackPrivateGStreamer):
        * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.h:
        (WebCore::InbandTextTrackPrivateGStreamer::create):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfTrack):
        (WebCore::MediaPlayerPrivateGStreamer::handleTextSample):
        (WebCore::MediaPlayerPrivateGStreamer::updateTracks):
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.cpp:
        (WebCore::TrackPrivateBaseGStreamer::generateUniquePlaybin2StreamID):
        (WebCore::TrackPrivateBaseGStreamer::TrackPrivateBaseGStreamer):
        (WebCore::TrackPrivateBaseGStreamer::setPad):
        (WebCore::TrackPrivateBaseGStreamer::tagsChanged):
        (WebCore::TrackPrivateBaseGStreamer::notifyTrackOfStreamChanged):
        (WebCore::TrackPrivateBaseGStreamer::streamChanged):
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.h:
        (WebCore::TrackPrivateBaseGStreamer::setIndex):
        (WebCore::TrackPrivateBaseGStreamer::stream):
        * platform/graphics/gstreamer/VideoTrackPrivateGStreamer.cpp:
        (WebCore::VideoTrackPrivateGStreamer::VideoTrackPrivateGStreamer):
        * platform/graphics/gstreamer/VideoTrackPrivateGStreamer.h:
        * platform/graphics/gstreamer/mse/AppendPipeline.cpp:
        (WebCore::AppendPipeline::makeWebKitTrack):

2021-08-29  Joonghun Park  <jh718.park@samsung.com>

        Unreviewed. Remove the build warning below since r280958.
        warning: control reaches end of non-void function [-Wreturn-type]

        No new tests, no new behavioral changes.

        * Modules/mediastream/RTCRtpSFrameTransform.cpp:
        (WebCore::errorTypeFromInformation):

2021-08-28  Cameron McCormack  <heycam@apple.com>

        Miscellaneous typo fixes
        https://bugs.webkit.org/show_bug.cgi?id=229642

        Reviewed by Fujii Hironori.

        * platform/MIMETypeRegistry.cpp:
        (WebCore::MIMETypeRegistry::isSupportedImageMIMEType):
        * platform/graphics/cpu/arm/filters/FELightingNEON.cpp:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::computeClipPath const):
        * rendering/style/RenderStyle.cpp:
        (WebCore::rareNonInheritedDataChangeRequiresLayout):

2021-08-28  Simon Fraser  <simon.fraser@apple.com>

        Zooming browser does not properly scale SVG clip paths
        https://bugs.webkit.org/show_bug.cgi?id=224795

        Reviewed by Tim Horton.
        
        Clip-path and Command+ zooming were fixed in r268138, but that change didn't address
        reference clip paths.
        
        Fix by having effectiveZoom scale the clip in the two codepaths; the "clip via a path"
        path, and the "clip by painting a mask" path that we fall into for more complex clips.

        We only need to fix the userSpaceOnUse code path, since with objectBoundingBox clips
        the input bounds has already been scaled.

        Tests use the non-standard "zoom" property, so can't be WPT tests.

        Tests: css3/masking/clip-path-reference-painted-mask-zoom.html
               css3/masking/clip-path-reference-zoom-objectBoundingBox.html
               css3/masking/clip-path-reference-zoom.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::setupClipPath):
        * rendering/svg/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::applyResource):
        (WebCore::RenderSVGResourceClipper::pathOnlyClipping):
        (WebCore::RenderSVGResourceClipper::applyClippingToContext):
        (WebCore::RenderSVGResourceClipper::drawContentIntoMaskImage):
        * rendering/svg/RenderSVGResourceClipper.h:

2021-08-28  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Move content builder functionality to a dedicated class
        https://bugs.webkit.org/show_bug.cgi?id=229631

        Reviewed by Antti Koivisto.

        Let's use a dedicated class for constructing the final line runs. This is also going to be used
        for computing overflow and other "display" type of value once it's merged with LayoutIntegration::InlineContentBuilder.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * layout/LayoutUnits.h:
        * layout/formattingContexts/inline/InlineDisplayContentBuilder.cpp: Added.
        (WebCore::Layout::InlineDisplayContentBuilder::InlineDisplayContentBuilder):
        (WebCore::Layout::InlineDisplayContentBuilder::build):
        (WebCore::Layout::InlineDisplayContentBuilder::createRunsAndUpdateGeometryForLineContent):
        (WebCore::Layout::InlineDisplayContentBuilder::createRunsAndUpdateGeometryForLineSpanningInlineBoxes):
        * layout/formattingContexts/inline/InlineDisplayContentBuilder.h: Copied from Source/WebCore/layout/formattingContexts/inline/InlineLineBoxBuilder.h.
        (WebCore::Layout::InlineDisplayContentBuilder::root const):
        (WebCore::Layout::InlineDisplayContentBuilder::formattingState const):
        * layout/formattingContexts/inline/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::lineLayout):
        (WebCore::Layout::InlineFormattingContext::computeGeometryForLineContent):
        * layout/formattingContexts/inline/InlineFormattingContext.h:
        * layout/formattingContexts/inline/InlineLevelBox.h:
        (WebCore::Layout::InlineLevelBox::isInlineBox const):
        (WebCore::Layout::InlineLevelBox::isLineSpanningInlineBox const):
        (WebCore::Layout::InlineLevelBox::createInlineBox):
        * layout/formattingContexts/inline/InlineLine.h:
        (WebCore::Layout::Line::Run::type const):
        * layout/formattingContexts/inline/InlineLineBoxBuilder.cpp:
        (WebCore::Layout::LineBoxBuilder::constructAndAlignInlineLevelBoxes):
        * layout/formattingContexts/inline/InlineLineBoxBuilder.h:
        * layout/integration/LayoutIntegrationInlineContentBuilder.cpp:
        (WebCore::LayoutIntegration::lineOverflowWidth):
        * layout/integration/LayoutIntegrationRun.h:

2021-08-27  Myles C. Maxfield  <mmaxfield@apple.com>

        The simple text codepath does not handle unpaired surrogates
        https://bugs.webkit.org/show_bug.cgi?id=229392

        Reviewed by Alan Bujtas.

        The simple text codepath was taking an early return if it encountered an unpaired surrogate.
        This essentially ends up being data loss, because everything after that surrogate is just gone.
        The other browsers render the unpaired surrogate, and the text after it too.

        Removing the early return uncovered a preexisting bug, where word-break: break-all would cause
        both RenderText::computePreferredLogicalWidths() and BreakingContext::handleText() to try to
        break in between two adjacent joining surrogates.

        Because both fixes depend on each other to be observable, this patch does both together.

        Test: fast/text/unpaired-surrogate.html

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCore.xcodeproj/xcshareddata/xcschemes/WebCore.xcscheme:
        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::getEmphasisMarkGlyphData const):
        * platform/graphics/SurrogatePairAwareTextIterator.cpp: Removed.
        * platform/graphics/SurrogatePairAwareTextIterator.h:
        (WebCore::SurrogatePairAwareTextIterator::SurrogatePairAwareTextIterator):
        (WebCore::SurrogatePairAwareTextIterator::consume):
        (WebCore::SurrogatePairAwareTextIterator::currentIndex const):
        (WebCore::SurrogatePairAwareTextIterator::characters const): Deleted.
        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::advanceInternal):
        * platform/graphics/freetype/SimpleFontDataFreeType.cpp:
        * rendering/InlineIterator.h:
        (WebCore::InlineIterator::incrementByCodePointInTextNode):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::computePreferredLogicalWidths):
        * rendering/line/BreakingContext.h:
        (WebCore::BreakingContext::handleText):

2021-08-27  Simon Fraser  <simon.fraser@apple.com>

        Define ENABLE_CONTENT_CHANGE_OBSERVER for IOS_FAMILY and use it to wrap content observation code
        https://bugs.webkit.org/show_bug.cgi?id=229624

        Reviewed by Alan Bujtas.

        Deploy ENABLE(CONTENT_CHANGE_OBSERVER).

        * dom/Document.cpp:
        (WebCore::Document::updateStyleIfNeeded):
        (WebCore::Document::willDetachPage):
        (WebCore::Document::platformSuspendOrStopActiveDOMObjects):
        * dom/Document.h:
        * dom/Node.cpp:
        (WebCore::Node::defaultEventHandler):
        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::install):
        (WebCore::DOMTimer::removeById):
        (WebCore::DOMTimer::fired):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::internalKeyEvent):
        * page/ios/ContentChangeObserver.cpp:
        * page/ios/ContentChangeObserver.h:
        * page/ios/DOMTimerHoldingTank.cpp:
        * page/ios/DOMTimerHoldingTank.h:
        * page/ios/EventHandlerIOS.mm:
        (WebCore::EventHandler::mouseMoved):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::willBeDestroyed):
        * rendering/updating/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::updateElementRenderer):

2021-08-27  Eric Carlson  <eric.carlson@apple.com>

        [ Catalina EWS ] media/track/track-disabled-addcue.html is flaky crashing
        https://bugs.webkit.org/show_bug.cgi?id=229462
        <rdar://problem/82302915>

        Reviewed by Darin Adler.

        Use `queueTaskKeepingObjectAlive` instead of a timer when scheduling text track
        loading.

        * html/HTMLTrackElement.cpp:
        (WebCore::HTMLTrackElement::HTMLTrackElement):
        (WebCore::HTMLTrackElement::scheduleLoad):
        (WebCore::HTMLTrackElement::scheduleTask):
        (WebCore::HTMLTrackElement::loadTimerFired): Deleted.
        * html/HTMLTrackElement.h:
        * html/track/LoadableTextTrack.cpp:
        (WebCore::LoadableTextTrack::LoadableTextTrack):
        (WebCore::LoadableTextTrack::scheduleLoad):
        (WebCore::LoadableTextTrack::element):
        (WebCore::LoadableTextTrack::loadTimerFired): Deleted.
        * html/track/LoadableTextTrack.h:

2021-08-27  Russell Epstein  <repstein@apple.com>

        Land Windows build fixes from safari-612.1.29.14-branch.
        https://bugs.webkit.org/show_bug.cgi?id=229627.

        Reviewed by Per Arne Vollan.

        * WebCore.vcxproj/WebCore.proj:

2021-08-27  Simon Fraser  <simon.fraser@apple.com>

        [CSS3 Backgrounds and Borders] The border image area should be empty if border-style is none and border-image-width is not set
        https://bugs.webkit.org/show_bug.cgi?id=99922

        Reviewed by Alan Bujtas.
        
        Per CSS WG discussion[1] and https://drafts.csswg.org/css-backgrounds/#border-image-area
        border images do not affect layout; border-width does, and only then if border-style is not
        "none".

        Even with zero-width borders, border-image can paint (thus triggering visual overflow) if
        border-image-width is specified.

        Patch based on Adenilson Cavalcanti's patch, with a fix to not bail early from
        RenderBoxModelObject::paintBorder().

        Replace RenderStyle::hasBorderFill() with hasBorderImage(); there is no border-fill
        property; this was referring to the "fill" keyword for border-image

        [1] https://lists.w3.org/Archives/Public/www-style/2015Nov/0258.html

        Test: fast/borders/border-image-should-not-display.html

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintBorder):
        * rendering/style/BorderData.h:
        (WebCore::BorderData::hasBorder const): Remove special-casing for border-image.
        (WebCore::BorderData::hasVisibleBorder const): Ditto.
        (WebCore::BorderData::hasBorderImage const):
        (WebCore::BorderData::borderLeftWidth const):
        (WebCore::BorderData::borderRightWidth const):
        (WebCore::BorderData::borderTopWidth const):
        (WebCore::BorderData::borderBottomWidth const):
        (WebCore::BorderData::hasFill const): Deleted.
        * rendering/style/BorderValue.h:
        (WebCore::BorderValue::nonZero const):
        (WebCore::BorderValue::isVisible const):
        * rendering/style/NinePieceImage.h:
        (WebCore::NinePieceImage::computeOutset): Rename parameters for clarity.
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::hasBorderImage const):
        (WebCore::RenderStyle::hasVisibleBorderDecoration const):
        (WebCore::RenderStyle::hasBorderFill const): Deleted.

2021-08-27  Alex Christensen  <achristensen@webkit.org>

        Separate PrivateClickMeasurement database from ResourceLoadStatistics database and add SPI to set its location
        https://bugs.webkit.org/show_bug.cgi?id=229527

        Reviewed by Kate Cheney.

        * loader/PrivateClickMeasurement.cpp:
        (WebCore::PrivateClickMeasurement::SourceSecretToken::isolatedCopy const):
        (WebCore::PrivateClickMeasurement::EphemeralSourceNonce::isolatedCopy const):
        (WebCore::PrivateClickMeasurement::SourceUnlinkableToken::isolatedCopy const):
        (WebCore::PrivateClickMeasurement::isolatedCopy const):
        * loader/PrivateClickMeasurement.h:

2021-08-27  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Move LineBoxBuilder to its own file
        https://bugs.webkit.org/show_bug.cgi?id=229616

        Reviewed by Antti Koivisto.

        This is in preparation for supporting incremental line layout.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * layout/formattingContexts/inline/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::computeGeometryForLineContent):
        * layout/formattingContexts/inline/InlineFormattingGeometry.cpp:
        (WebCore::Layout::LineBoxBuilder::formattingContext const): Deleted.
        (WebCore::Layout::LineBoxBuilder::rootBox const): Deleted.
        (WebCore::Layout::LineBoxBuilder::layoutState const): Deleted.
        (WebCore::Layout::LineBoxBuilder::isRootLayoutBox const): Deleted.
        (WebCore::Layout::hangingGlyphWidth): Deleted.
        (WebCore::Layout::horizontalAlignmentOffset): Deleted.
        (WebCore::Layout::LineBoxBuilder::LineBoxBuilder): Deleted.
        (WebCore::Layout::LineBoxBuilder::build): Deleted.
        (WebCore::Layout::LineBoxBuilder::setVerticalGeometryForInlineBox const): Deleted.
        (WebCore::Layout::LineBoxBuilder::constructAndAlignInlineLevelBoxes): Deleted.
        (WebCore::Layout::InlineFormattingGeometry::lineBoxForLineContent const): Deleted.
        * layout/formattingContexts/inline/InlineFormattingGeometry.h:

2021-08-27  Alan Bujtas  <zalan@apple.com>

        [IFC][Integration] Generate runs for the root inlinebox
        https://bugs.webkit.org/show_bug.cgi?id=229599

        Reviewed by Antti Koivisto.

        This is in preparation for using runs only for all the boxes.

        * layout/formattingContexts/inline/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::computeGeometryForLineContent):
        * layout/integration/LayoutIntegrationInlineContentBuilder.cpp:
        (WebCore::LayoutIntegration::InlineContentBuilder::createDisplayLineRuns const):

2021-08-27  Antti Koivisto  <antti@apple.com>

        [CSS Cascade Layers] Initial support
        https://bugs.webkit.org/show_bug.cgi?id=229542

        Reviewed by Simon Fraser.

        https://www.w3.org/TR/css-cascade-5/#cascade-layers

        This patch adds initial support for @layer rules, including both the block and the statement syntax.
        No support for @import or CSSOM yet but basic functionality mostly works.

        The feature is disabled by default.

        * css/StyleRule.cpp:
        (WebCore::StyleRuleBase::destroy):
        (WebCore::StyleRuleBase::copy const):
        (WebCore::StyleRuleBase::createCSSOMWrapper const):
        (WebCore::StyleRuleLayer::StyleRuleLayer):
        (WebCore::m_nameVariant):
        (WebCore::StyleRuleLayer::create):
        * css/StyleRule.h:
        (WebCore::StyleRuleBase::isGroupRule const):

        Add support for casting to StyleRuleGroup.

        (WebCore::StyleRuleBase::isLayerRule const):
        (isType):
        * css/StyleRuleType.h:

        Add subclass for layer.

        * css/StyleSheetContents.cpp:
        (WebCore::traverseRulesInVector):
        (WebCore::StyleSheetContents::traverseSubresources const):

        Traversal support. Also cover other missing group rules.

        * css/parser/CSSAtRuleID.cpp:
        (WebCore::cssAtRuleID):
        * css/parser/CSSAtRuleID.h:
        * css/parser/CSSParserContext.cpp:

        Enable bit.

        (WebCore::operator==):
        (WebCore::add):
        * css/parser/CSSParserContext.h:
        * css/parser/CSSParserImpl.cpp:
        (WebCore::CSSParserImpl::consumeAtRule):
        (WebCore::CSSParserImpl::consumeLayerRule):

        Parsing support.

        * css/parser/CSSParserImpl.h:
        * style/ElementRuleCollector.cpp:
        (WebCore::Style::ElementRuleCollector::addMatchedRule):
        (WebCore::Style::ElementRuleCollector::collectMatchingRulesForList):

        Save the layer order to MatchResult.

        (WebCore::Style::compareRules):

        Layer order has higher priority than specificity but lower than scope.

        * style/ElementRuleCollector.h:
        * style/RuleSet.cpp:
        (WebCore::Style::RuleSet::addRule):
        (WebCore::Style::RuleSet::addChildRules):
        (WebCore::Style::RuleSet::pushCascadeLayer):
        (WebCore::Style::RuleSet::popCascadeLayer):

        Compute layer order when adding the rules to RuleSet.

        * style/RuleSet.h:
        (WebCore::Style::RuleSet::cascadeLayerOrderFor const):

        Resolved order is kept in a side vector to avoid bloating RuleSet. The vector is initialized
        only if cascade layers are being used.

2021-08-27  Antti Koivisto  <antti@apple.com>

        REGRESSION (r276882): Shadow trees may use stale style information after inline stylesheet is mutated via CSSOM
        https://bugs.webkit.org/show_bug.cgi?id=228917
        rdar://81483998

        Reviewed by Alan Bujtas.

        If a stylesheet in a shadow tree is mutated via CSSOM we fail to remove cached style resolver for the mutated sheet
        and may end up with stale style.

        Test: fast/shadow-dom/shadow-stylesheet-mutation.html

        * style/StyleScope.cpp:
        (WebCore::Style::Scope::unshareShadowTreeResolverBeforeMutation):

        Remove an assert relevant to the previous call site only.

        (WebCore::Style::Scope::scheduleUpdate):

        Unshare shadow tree resolver immeditaly when stylesheet contents or interpretation changes.

2021-08-27  Emilio Cobos Álvarez  <emilio@crisal.io>

        Don't forget about the outer selector when matching ::slotted().
        https://bugs.webkit.org/show_bug.cgi?id=229438

        Reviewed by Antti Koivisto.

        Test: imported/w3c/web-platform-tests/css/css-scoping/slotted-specificity-002.html

        * css/CSSSelector.cpp:
        (WebCore::simpleSelectorSpecificityInternal):
        * style/ElementRuleCollector.cpp:
        (WebCore::Style::ElementRuleCollector::ruleMatches):

2021-08-27  Andres Gonzalez  <andresg_22@apple.com>

        Make AXCoreObject::setSelectedVisiblePositionRange work in native text controls on MacOS.
        https://bugs.webkit.org/show_bug.cgi?id=229529

        Reviewed by Chris Fleizach.

        Test: accessibility/mac/native-text-control-set-selected-textmarker-range.html

        Trying to set the selection in native text controls using the atribute
        AXSelectedTextMarkerRange didn't work for MacOS AX clients. This patch
        implements this functionality by properly handling native text controls
        in AccessibilityRenderObject::setSelectedVisiblePositionRange.

        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityObjectInterface.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::documentBasedSelectedTextRange const):
        (WebCore::AccessibilityRenderObject::selectedVisiblePositionRange const): Added.
        (WebCore::AccessibilityRenderObject::setSelectedVisiblePositionRange const):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/isolatedtree/AXIsolatedObject.cpp:
        (WebCore::AXIsolatedObject::selectedVisiblePositionRange const):
        * accessibility/isolatedtree/AXIsolatedObject.h:
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
        (-[WebAccessibilityObjectWrapper textMarkerRangeForSelection]): Renamed selectedTextMarkerRange for consistency.

2021-08-26  Myles C. Maxfield  <mmaxfield@apple.com>

        Synthetic bold additional advances need to be applied after shaping
        https://bugs.webkit.org/show_bug.cgi?id=189448
        <rdar://problem/40994395>

        Reviewed by Alan Bujtas.

        We implement synthetic bold by drawing every glyph twice, the second time 1px to the right of the
        first time. This effectively means that the advance of such glyphs needs to be increased by 1px.
        Previously, we were doing this before shaping, which is a problem for some fonts which clobber the
        input advances during shaping, and emit totally new advances. Osaka is one such font. In order to
        make sure that these fonts have their synthetic bold advances correctly increased, we need to do
        the increasing after text shaping, rather than before it.

        This patch temporarily disables LFC when synthetic bold is in effect. I will teach LFC how to handle
        synthetic bold in a follow-up patch.

        Test: fast/text/osaka-synthetic-bold.html

        * layout/integration/LayoutIntegrationCoverage.cpp:
        (WebCore::LayoutIntegration::canUseForText):
        * platform/graphics/Font.h:
        (WebCore::Font::syntheticBoldOffset const):
        (WebCore::Font::widthForGlyph const):
        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::adjustForSyntheticBold):
        (WebCore::WidthIterator::applyCSSVisibilityRules):
        * platform/graphics/WidthIterator.h:
        * platform/graphics/coretext/FontCoreText.cpp:
        (WebCore::Font::platformWidthForGlyph const):
        (WebCore::Font::platformBoundsForGlyph const):

2021-08-26  Joone Hur  <joone@webkit.org>

        Caret should respect text background color
        https://bugs.webkit.org/show_bug.cgi?id=117493

        Reviewed by Ryosuke Niwa.

        An earlier fix for caret color, which we are now improving, was this commit:
        https://trac.webkit.org/changeset/152612/webkit

        This patch allows the caret to become visible in the black background
        by getting the caret color from the element containing
        the text, not the root editable element that has the contentEditable attribute.

        * editing/FrameSelection.cpp:
        (WebCore::CaretBase::computeCaretColor):

2021-08-26  Simon Fraser  <simon.fraser@apple.com>

        CSS keyframed animations don't respect edges in 4 value background-position
        https://bugs.webkit.org/show_bug.cgi?id=228995

        Reviewed by Darin Adler.

        For some background-position animations we'd fail to set backgroundOriginX/Y in the
        destination style's FillLayer, because this is not set in the destination style initially.
        
        So have FillLayerPositionPropertyWrapper::blend() always set it.

        Test: animations/background-position.html

        * animation/CSSPropertyAnimation.cpp:

2021-08-26  Simon Fraser  <simon.fraser@apple.com>

        Remove some historical iOS CGContext flipping
        https://bugs.webkit.org/show_bug.cgi?id=229589

        Reviewed by Tim Horton.

        Remove some iOS-only code that flipped the CGContext CTM for pattern drawing. Back
        in the mists of time there were some iOS-only differences in image flipping, but those
        have long since disappeared.

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::drawPatternCallback):
        (WebCore::GraphicsContextCG::drawPattern):

2021-08-26  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Enforce the policy against WebKit causing Core Text font download prompts in WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=229391

        Reviewed by Alan Bujtas.

        For most apps, if you ask Core Text to create a font which is a mobileasset font, it will
        show a synchronous blocking prompt asking the user if they want to download the font.
        However, this policy isn't a great one for web content, because webpages will request tons
        of fonts all the time, and it's totally likely that many of them will be mobileasset fonts.
        Because of this, WebKit has a policy where we will opt out of showing these prompts, by
        specifying kCTFontEnabledAttribute:kCFBooleanTrue in the attributes dictionary.

        We do this in some places, but we forgot one additional place. This patch adds it to this
        place, and adds a test which intentionally requests a MobileAsset font and makes sure the
        test doesn't timeout (by showing a blocking prompt forever).

        Test: fast/text/mobileasset-font.html

        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::autoActivateFont):

2021-08-26  Alan Bujtas  <zalan@apple.com>

        [LFC][Integration] Use the line runs to check for legacy integral positioning
        https://bugs.webkit.org/show_bug.cgi?id=228069
        <rdar://problem/81087857>

        Reviewed by Antti Koivisto.

        Now that the line runs list has all the inline boxes (including spanning inline boxes), we
        can use this list to check for legacy integral positioning and not directly iterating the LineBox's non-rootinlinebox list.
        While this may be a bit more expensive, the legacy positioning is temporary and will be removed shortly.

        This is in preparation for keeping the inline box structure private to the layout code.

        * layout/integration/LayoutIntegrationInlineContentBuilder.cpp:
        (WebCore::LayoutIntegration::InlineContentBuilder::build const):
        (WebCore::LayoutIntegration::InlineContentBuilder::computeLineLevelVisualAdjustmentsForRuns const):
        * layout/integration/LayoutIntegrationInlineContentBuilder.h:

2021-08-26  Alan Bujtas  <zalan@apple.com>

        REGRESSION(r275754): Using MarkOnlyThis to make the preferred width dirty introduces unexpected state
        https://bugs.webkit.org/show_bug.cgi?id=229586
        <rdar://82141454>

        Unreviewed revert.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::recomputeLogicalWidth):
        (WebCore::shouldRecalculateMinMaxWidthsAffectedByAncestor): Deleted.

2021-08-26  Myles C. Maxfield  <mmaxfield@apple.com>

        Drawing small caps web fonts into canvas causes the GPU process to hang
        https://bugs.webkit.org/show_bug.cgi?id=229401
        <rdar://problem/82282054>

        Reviewed by Wenson Hsieh.

        Web fonts retain their downloaded data in case they need to send that data to the GPU process
        to render into canvas. Small caps fonts are implemented by creating a "derivative" variant font.
        When we were creating these derivative fonts, we weren't forwarding this downloaded data to
        those new fonts. Without it, the font fails to transfer across IPC.

        Test: fast/text/small-caps-canvas.html

        * platform/graphics/FontPlatformData.cpp:
        (WebCore::makeOptionalFromPointer):
        (WebCore::FontPlatformData::FontPlatformData):
        * platform/graphics/FontPlatformData.h:
        * platform/graphics/HEVCUtilities.cpp:
        (WebCore::makeOptionalFromPointer):
        * platform/graphics/coretext/FontCoreText.cpp:
        (WebCore::createDerivativeFont):
        (WebCore::Font::createFontWithoutSynthesizableFeatures const):
        (WebCore::Font::platformCreateScaledFont const):
        * platform/graphics/coretext/FontPlatformDataCoreText.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        * platform/graphics/win/FontPlatformDataCairoWin.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        * platform/graphics/win/FontPlatformDataWin.cpp:
        (WebCore::FontPlatformData::FontPlatformData):

2021-08-26  Myles C. Maxfield  <mmaxfield@apple.com>

        REGRESSION(r256659): We try to remove fonts from the CSSFontFace which were never added
        https://bugs.webkit.org/show_bug.cgi?id=229535
        <rdar://problem/78857440>

        Reviewed by Darin Adler.

        After r256659, asking for a failed CSSFontFace's families() returns nullopt. It's possible to add
        a failed font to a CSSFontFaceSet (of course). When we do that, we recognize the font is failed
        and don't update our internal data structures, because there's no need to - we can't do anything
        useful with a failed font.

        If you _then_ try to remove the font from the CSSFontFace, we don't call families(), but instead
        just pull out the raw m_families member, and look in our internal data structures for it, but we
        don't find it, because it was never added.

        * css/CSSFontFaceSet.cpp:
        (WebCore::CSSFontFaceSet::addToFacesLookupTable):
        (WebCore::CSSFontFaceSet::removeFromFacesLookupTable):

2021-08-26  Alan Bujtas  <zalan@apple.com>

        [IFC] Use the inline run list in showRenderTree to print inline level box information
        https://bugs.webkit.org/show_bug.cgi?id=228070

        Reviewed by Antti Koivisto.

        showInlineTreeAndRuns is the last client of the InlineFormattingState::lineBoxes.
        Let's use the inline run list instead to print the inline level box geometry information. It provides slightly less
        information than before but it is sufficient for now.

        This is in preparation for keeping the inline box structure private to the layout code.

        * layout/layouttree/LayoutTreeBuilder.cpp:
        (WebCore::Layout::showInlineTreeAndRuns):

2021-08-26  Michael Catanzaro  <mcatanzaro@gnome.org>

        [FreeType] Avoid yucky strong alias computations in font fallback code
        https://bugs.webkit.org/show_bug.cgi?id=228927

        Reviewed by Myles C. Maxfield.

        If built against the upcoming Fontconfig 2.13.95, we can avoid compiling a bunch of arcane
        font matching code. It will be a while before we can require Fontconfig 2.13.95, so use
        preprocessor guards for now.

        * platform/graphics/freetype/FontCacheFreeType.cpp:
        (WebCore::areStronglyAliased):
        (WebCore::FontCache::createFontPlatformData):

2021-08-26  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r281616.
        https://bugs.webkit.org/show_bug.cgi?id=229570

        It is crashing in iOS Debug

        Reverted changeset:

        "Signaling state check when applying a local or remote
        description is no longer aligned with the WebRTC spec"
        https://bugs.webkit.org/show_bug.cgi?id=229138
        https://commits.webkit.org/r281616

2021-08-26  Kimmo Kinnunen  <kkinnunen@apple.com>

        WebGL calls into static GraphicsContextGLOpenGL functions needlessly
        https://bugs.webkit.org/show_bug.cgi?id=229402

        Reviewed by Kenneth Russell.

        The calls are problematic:
        - No other call sites than WebGL layer
        - The functionality is not needed for ANGLE, but present
        - GraphicsContextGL is now an interface with multiple implementations,
          GraphicsContextGLOpenGL is just one implementation

        Move the functions into WebGL, inside #if !USE(ANGLE) blocks.
        From there, they're simpler to move into !ANGLE specific files,
        if possible.

        This is work towards making it possible to remove ANGLE specific #if
        blocks from WebGL implementation.

        No new tests, refactor.

        * html/canvas/WebGLFramebuffer.cpp:
        (WebCore::getClearBitsByAttachmentType):
        (WebCore::getClearBitsByFormat):
        (WebCore::isAttachmentComplete):
        (WebCore::WebGLFramebuffer::initializeAttachments):
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::getChannelBitsByFormat):
        (WebCore::possibleFormatAndTypeForInternalFormat):
        (WebCore::WebGLRenderingContextBase::copyTexSubImage2D):
        (WebCore::WebGLRenderingContextBase::isTexInternalFormatColorBufferCombinationValid):
        * platform/graphics/GraphicsContextGL.cpp:
        * platform/graphics/GraphicsContextGL.h:
        * platform/graphics/opengl/GraphicsContextGLOpenGL.cpp:
        * platform/graphics/opengl/GraphicsContextGLOpenGL.h:

2021-08-26  Enrique Ocaña González  <eocanha@igalia.com>

        [GStreamer][MSE] Implement the "sequence" mode in SourceBuffer for the GStreamer ports
        https://bugs.webkit.org/show_bug.cgi?id=210341

        Reviewed by Alicia Boya Garcia.

        Declare audio/mpeg support and handle it properly in AppendPipeline. This media type
        doesn't have any container format, so an identity element is used in place of the
        demuxer (dummy demuxer). As this element isn't an actual demuxer, the standard
        no-more-pads signal isn't present, so its behaviour is simulated when the first buffer
        is emitted by the element (detected by a probe).

        A parser element is needed to process the data (mpegaudioparse for mpeg audio v1,
        aacparse for mpeg audio v2 & v4). The existing createOptionalParserForFormat()
        infrastructure is used for that after analyzing the caps, and an identity element is
        now also used instead in the cases when a parser isn't needed. This simplifies the code
        that links the pipeline elements, as now there aren't any optional (non existing)
        elements in place, just GstIdentity instances there.

        Still, the selection of the proper mpeg/aac parser requires precise caps. A new typefind
        element is now used after the appsrc (when needed, and another identity element when
        not).

        Return TypeError in SourceBuffer::setMode(), instead of InvalidAccessError. The MSE spec
        changed this behaviour at some point before June 2016 and the WebKit code never reflected
        the change, still returning the deprecated InvalidAccessError when generate timestamps
        flag equals true and new mode equals "segments".

        Finally, the MediaSample::setTimestamps() method has been implemented for the GStreamer
        port. It had an empty implementation and no problem had been detected before because
        the "sequence" SourceBuffer mode had never been used until now.

        Covered by existing tests.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::setMode): Return TypeError.
        * platform/graphics/gstreamer/GStreamerRegistryScanner.cpp:
        (WebCore::GStreamerRegistryScanner::initializeDecoders): Declare audio/mpeg support.
        * platform/graphics/gstreamer/MediaSampleGStreamer.cpp:
        (WebCore::MediaSampleGStreamer::setTimestamps): Implement method.
        * platform/graphics/gstreamer/MediaSampleGStreamer.h: Removed setTimestamps() empty implementation.
        * platform/graphics/gstreamer/mse/AppendPipeline.cpp:
        (WebCore::AppendPipeline::AppendPipeline): Support audio/mpeg by instancing a typefind element when needed (or identity when not), using an identity element instead of a demuxer and simulating what would be done in the no-more-pads signal handlers, but using a probe to detect the first buffer traversing the parser.
        (WebCore::createOptionalParserForFormat): Use the mpegversion caps field to instance the right kind of parser when detecting the audio/mpeg media type in the caps. An identity element is now returned in case no parser is needed.
        (WebCore::AppendPipeline::Track::initializeElements): Simplify element linking now that the parser (or identity) is always guaranteed to exist.
        (WebCore::AppendPipeline::streamTypeToString): Added default branch to switch to fix build warning.
        * platform/graphics/gstreamer/mse/AppendPipeline.h: Added m_typefind. Reordered some attributes and added comments to improve readability.

2021-08-26  Youenn Fablet  <youenn@apple.com>

        Signaling state check when applying a local or remote description is no longer aligned with the WebRTC spec
        https://bugs.webkit.org/show_bug.cgi?id=229138

        Reviewed by Eric Carlson.

        These checks have been removed from the spec and are no longer valid.
        Covered by rebased tests.

        * Modules/mediastream/PeerConnectionBackend.cpp:
        (WebCore::PeerConnectionBackend::setLocalDescription):
        (WebCore::PeerConnectionBackend::setRemoteDescription):
        (WebCore::isLocalDescriptionTypeValidForState): Deleted.
        (WebCore::isRemoteDescriptionTypeValidForState): Deleted.
        * testing/MockLibWebRTCPeerConnection.cpp:
        (WebCore::MockLibWebRTCPeerConnection::SetLocalDescription):
        (WebCore::MockLibWebRTCPeerConnection::SetRemoteDescription):
        * testing/MockLibWebRTCPeerConnection.h:

2021-08-25  Alex Christensen  <achristensen@webkit.org>

        Crash in GraphicsContextGLOpenGL::reshapeDisplayBufferBacking
        https://bugs.webkit.org/show_bug.cgi?id=229309

        Reviewed by Myles C. Maxfield.

        Test: fast/canvas/xr-compatible-crash.html

        Null check m_swapChain because reshapeDisplayBufferBacking can be called before it is set.

        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::addContextObject):
        * platform/graphics/angle/GraphicsContextGLANGLE.cpp:
        (WebCore::GraphicsContextGLOpenGL::reshapeFBOs):
        * platform/graphics/cocoa/GraphicsContextGLOpenGLCocoa.mm:
        (WebCore::GraphicsContextGLOpenGL::reshapeDisplayBufferBacking):

2021-08-25  Wenson Hsieh  <wenson_hsieh@apple.com>

        Remove some iOS-specific compile-time guards that are no longer needed
        https://bugs.webkit.org/show_bug.cgi?id=229500

        Reviewed by Tim Horton.

        See WebKit/ChangeLog for more details.

        * dom/KeyboardEvent.cpp:
        (WebCore::KeyboardEvent::KeyboardEvent):
        * platform/PlatformKeyboardEvent.h:
        * platform/ios/KeyEventIOS.mm:
        (WebCore::isFunctionKey):

2021-08-25  Eric Carlson  <eric.carlson@apple.com>

        [GPUP] RemoteAudioSession doesn't implement begin/endInterruption
        https://bugs.webkit.org/show_bug.cgi?id=229514
        rdar://80896732

        Reviewed by Jer Noble.

        Move the code necessary to deal with interruptions from AudioSessionIOS to the
        base class so it can be shared with RemoteAudioSession.

        Tested manually.

        * platform/audio/AudioSession.cpp:
        (WebCore::AudioSession::addInterruptionObserver): Move implementation from AudioSessionIOS
        so it can be shared.
        (WebCore::AudioSession::removeInterruptionObserver): Ditto.
        (WebCore::AudioSession::beginInterruption): Ditto.
        (WebCore::AudioSession::endInterruption): Ditto.
        (WebCore::AudioSession::setCategoryOverride): Ditto.
        (WebCore::AudioSession::categoryOverride const): Ditto.
        * platform/audio/AudioSession.h:

        * platform/audio/ios/AudioSessionIOS.h:
        * platform/audio/ios/AudioSessionIOS.mm:
        (WebCore::AudioSessionIOS::setCategoryOverride): Deleted.
        (WebCore::AudioSessionIOS::categoryOverride const): Deleted.
        (WebCore::AudioSessionIOS::addInterruptionObserver): Deleted.
        (WebCore::AudioSessionIOS::removeInterruptionObserver): Deleted.
        (WebCore::AudioSessionIOS::beginInterruption): Deleted.
        (WebCore::AudioSessionIOS::endInterruption): Deleted.
        * platform/audio/mac/AudioSessionMac.h:
        * platform/audio/mac/AudioSessionMac.mm:
        (WebCore::AudioSessionMac::setCategoryOverride): Deleted.

2021-08-25  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Line spanning inline boxes should also be in the run list
        https://bugs.webkit.org/show_bug.cgi?id=228059
        <rdar://problem/81077420>

        Reviewed by Antti Koivisto.

        Consider the following case:
          <div><span>first line text<br>second line text<br>third line text</span></div>

        Here is the list of runs we generate for the content above:

          [inline box][first line text][hard linebreak][second line text][hard linebreak][third line text]

        This list does not include the spanning inline boxes, i.e. the missing inline box on the second and the third line.
        The integration code then looks inside the LineBox to find these spanning inline boxes (see createDisplayNonRootInlineBoxes)

        In this patch we start including such spanning inline boxes in the run list.
          [inline box][first line text][hard linebreak][inline box][second line text][hard linebreak][inline box][third line text]

        This is also in preparation for making LineBox completely internal to the layout code. 

        * layout/formattingContexts/inline/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::computeGeometryForLineContent):
        * layout/formattingContexts/inline/InlineLineRun.h:
        (WebCore::Layout::LineRun::isText const):
        (WebCore::Layout::LineRun::isLineBreak const):
        (WebCore::Layout::LineRun::isAtomicInlineLevelBox const):
        (WebCore::Layout::LineRun::isInlineBox const):
        (WebCore::Layout::LineRun::isRootInlineBox const):
        (WebCore::Layout::LineRun::type const):
        (WebCore::Layout::LineRun::hasContent const):
        (WebCore::Layout::LineRun::isLineSpanning const):
        (WebCore::Layout::LineRun::LineRun):
        * layout/integration/LayoutIntegrationInlineContentBuilder.cpp:
        (WebCore::LayoutIntegration::InlineContentBuilder::build const):
        (WebCore::LayoutIntegration::InlineContentBuilder::createDisplayLineRuns const):
        (WebCore::LayoutIntegration::InlineContentBuilder::createDisplayNonRootInlineBoxes const): Deleted.
        * layout/integration/LayoutIntegrationInlineContentBuilder.h:

2021-08-25  Sonia Singla  <ssingla@igalia.com>

        Add onsecuritypolicyviolation on GlobalEventHandlers
        https://bugs.webkit.org/show_bug.cgi?id=229381

        Reviewed by Frédéric Wang.

        `onsecuritypolicyviolation` attribute has been added to
        `GlobalEventHandlers` by https://github.com/whatwg/html/pull/2651

        This patch supports it.

        Tests: imported/w3c/web-platform-tests/dom/idlharness.window.html
               imported/w3c/web-platform-tests/html/webappapis/scripting/events/event-handler-all-global-events.html
               imported/w3c/web-platform-tests/html/webappapis/scripting/events/event-handler-attributes-body-window-expected.txt
               imported/w3c/web-platform-tests/mathml/relations/html5-tree/math-global-event-handlers.tentative.html

        * dom/GlobalEventHandlers.idl:
        * html/HTMLAttributeNames.in:
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::createEventHandlerNameMap):

2021-08-25  Alan Bujtas  <zalan@apple.com>

        [IFC][Integration] Non-empty inline boxes may affect overflow scroll
        https://bugs.webkit.org/show_bug.cgi?id=229436

        Reviewed by Antti Koivisto.

        Use a more focused check whether an inline box (<span>) should contribute to scroll overflow.

        * layout/integration/LayoutIntegrationInlineContentBuilder.cpp:
        (WebCore::LayoutIntegration::InlineContentBuilder::createDisplayLines const):
        (WebCore::LayoutIntegration::InlineContentBuilder::createDisplayNonRootInlineBoxes const):
        * layout/integration/LayoutIntegrationLine.h:
        (WebCore::LayoutIntegration::NonRootInlineBox::NonRootInlineBox):
        (WebCore::LayoutIntegration::NonRootInlineBox::hasScrollableContent const):
        (WebCore::LayoutIntegration::NonRootInlineBox::canContributeToLineOverflow const): Deleted.

2021-08-25  Peng Liu  <peng.liu6@apple.com>

        [Monterey] LayoutTest media/element-containing-pip-video-going-into-fullscreen.html is flaky timeout/crash
        https://bugs.webkit.org/show_bug.cgi?id=229453
        <rdar://80346428>

        Reviewed by Eric Carlson.

        No new tests. Fix a flaky test.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        We need to initialize `m_changingVideoFullscreenMode` to false in the constructor.
        Otherwise, it might be initialized to true and ignore requests to change video
        presentation mode.

2021-08-25  Tyler Wilcock  <tyler_w@apple.com>

        AX: Return radiobuttons part of ad-hoc radiogroups from AX search queries
        https://bugs.webkit.org/show_bug.cgi?id=229415

        Reviewed by Chris Fleizach.

        Test: accessibility/mac/search-predicate-for-adhoc-radio-groups.html

        Enable the ability for WebKit UI element accessibility searches to find
        ad-hoc radiogroups. An ad-hoc radiogroup is a group of radiobuttons
        connected only by `name` attribute, missing an appropriate role="radiogroup"
        container.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::Accessibility::isRadioButtonInDifferentAdhocGroup): Added.
        (WebCore::Accessibility::isAccessibilityObjectSearchMatchAtIndex):
        When searching for radiogroups, also return radiobuttons in different
        ad-hoc radiogroups.

2021-08-25  Kate Cheney  <katherine_cheney@apple.com>

        WebCrypto uses deprecated CCKeyDerivationHMac
        https://bugs.webkit.org/show_bug.cgi?id=229443
        <rdar://problem/48896021>

        Reviewed by Brent Fulgham.

        No new tests because no behavior change. This should be covered by
        existing webrtc tests which use this functionality.

        Replace deprecated CCKeyDerivationHMac with CCDeriveKey.

        * crypto/mac/CryptoUtilitiesCocoa.cpp:
        (WebCore::keyDerivationHMAC):
        (WebCore::deriveHDKFBits):
        * crypto/mac/CryptoUtilitiesCocoa.h:

2021-08-25  Zan Dobersek  <zdobersek@igalia.com>

        [LibWPE] Properly retrieve eglGetPlatformDisplayEXT entrypoint
        https://bugs.webkit.org/show_bug.cgi?id=229234

        Reviewed by Carlos Garcia Campos.

        * platform/graphics/libwpe/PlatformDisplayLibWPE.cpp:
        (WebCore::PlatformDisplayLibWPE::initialize): Along with testing for the
        EGL_EXT_platform_base extension, the eglGetPlatformDisplayEXT entrypoint
        should be specifically looked up when that extension is present.
        EGL_KHR_platform_base check-and-lookup should be done separately, but
        should be removed in the near future since the KHR-type variant of this
        extension doesn't actually exist.

2021-08-25  Carlos Garcia Campos  <cgarcia@igalia.com>

        Add missing null check in AccessibilitySVGElement::inheritsPresentationalRole
        https://bugs.webkit.org/show_bug.cgi?id=228884

        Reviewed by Darin Adler.

        * accessibility/AccessibilitySVGElement.cpp:
        (WebCore::AccessibilitySVGElement::inheritsPresentationalRole const): Check parent element is not nullptr before
        trying to use it.

2021-08-24  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r281540.
        https://bugs.webkit.org/show_bug.cgi?id=229487

        causes local builds to fail reliably

        Reverted changeset:

        "Improve diagnostics for missing files in DerivedSources.make"
        https://bugs.webkit.org/show_bug.cgi?id=229348
        https://commits.webkit.org/r281540

2021-08-24  Ryosuke Niwa  <rniwa@webkit.org>

        removeFromTopLayer shouldn't be called in every removal of an element
        https://bugs.webkit.org/show_bug.cgi?id=229480

        Reviewed by Simon Fraser.

        Call it in HTMLDialogElement::removedFromAncestor for now since that's
        the only place where top layer is currenlty used.

        * dom/Element.cpp:
        (WebCore::Element::removedFromAncestor):
        * html/HTMLDialogElement.cpp:
        (WebCore::HTMLDialogElement::removedFromAncestor): Added.
        * html/HTMLDialogElement.h:

2021-08-24  Cameron McCormack  <heycam@apple.com>

        Windows build fix after r281470
        https://bugs.webkit.org/show_bug.cgi?id=229476
        <rdar://problem/82316227>

        Unreviewed.

        * platform/graphics/ca/win/CACFLayerTreeHost.cpp:
        (WebCore::CACFLayerTreeHost::initialize):

2021-08-24  Mark Lam  <mark.lam@apple.com>

        Refactor ENABLE(JIT_OPERATION_VALIDATION) code to emit no code when disabled.
        https://bugs.webkit.org/show_bug.cgi?id=229482
        rdar://82318317

        Reviewed by Yusuke Suzuki.

        * bindings/js/WebCoreJITOperations.cpp:
        (WebCore::populateJITOperations):
        * bindings/js/WebCoreJITOperations.h:
        (WebCore::populateJITOperations):
        * testing/js/WebCoreTestSupport.cpp:
        (WebCoreTestSupport::populateJITOperations):
        * testing/js/WebCoreTestSupport.h:
        (WebCoreTestSupport::populateJITOperations):

2021-08-24  Jean-Yves Avenard  <jya@apple.com>

        [Cocoa] Should video stop being live, time scrubber will not show
        https://bugs.webkit.org/show_bug.cgi?id=229286
        rdar://82114447

        Reviewed by Eric Carlson.

        Work around an issue with AVKit AVTouchBarPlaybackControlsProvider SPI which will
        not properly make the time scrubber to be displayed when only the content duration
        change.
        We do so by toggling the canSeek property to force a relayout of the touch bar
        content.

        While we can reproduce the issue programatically, at this stage we can only
        visually confirm that it's been fixed as we have no infrastructure to check
        the content of the touch bar and that the issue itself is in AVKit.
        Test: ManualTests/video-livechange-touchbar.html

        * platform/mac/WebPlaybackControlsManager.mm:
        (-[WebPlaybackControlsManager canSeek]): Add code as property is otherwise read-only.
        (-[WebPlaybackControlsManager setCanSeek:]): Add code as property is otherwise read-only.
        (-[WebPlaybackControlsManager setContentDuration:]):
        (-[WebPlaybackControlsManager setSeekableTimeRanges:]): Explictly set canSeek propery to
        ensure property watchers will be called.

2021-08-24  Alexey Proskuryakov  <ap@apple.com>

        Improve diagnostics for missing files in DerivedSources.make
        https://bugs.webkit.org/show_bug.cgi?id=229348

        Reviewed by Alexey Proskuryakov.

        Patch by Alexei Kolomiets.

        We are seeing flaky build failures in certain scenarios (rdar://81042866), which
        look like this:

        make: *** No rule to make target `UserAgentScripts.h', needed by `all'.  Stop.

        The theory is that some files that should be present in the file system aren't,
        but the error is not clear enough. Let's add better diagnostics to isolate the issue.

        * DerivedSources.make:

2021-08-24  Jean-Yves Avenard  <jya@apple.com>

        MediaSession artwork URL is showing in logs.
        https://bugs.webkit.org/show_bug.cgi?id=229320
        rdar://82156288

        Reviewed by Eric Carlson.

        Only enable artwork logging in debug builds.

        * platform/audio/cocoa/MediaSessionManagerCocoa.mm:
        (WebCore::MediaSessionManagerCocoa::updateNowPlayingInfo):

2021-08-24  Chris Dumez  <cdumez@apple.com>

        change event is dispatched when .files property is set at <input type="file"> element
        https://bugs.webkit.org/show_bug.cgi?id=180465

        Reviewed by Darin Adler.

        We should not dispatch a change / input events when setting input.files via JavaScript,
        as per:
        - https://html.spec.whatwg.org/multipage/input.html#dom-input-files

        This aligns our behavior with both Chrome and Firefox.

        Test: fast/dom/HTMLInputElement/input-setFiles-no-change-event.html

        * html/FileInputType.cpp:
        (WebCore::FileInputType::setFiles):
        (WebCore::FileInputType::didCreateFileList):
        * html/FileInputType.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setFiles):
        * html/HTMLInputElement.h:
        (WebCore::HTMLInputElement::filesForBindings):
        (WebCore::HTMLInputElement::setFilesForBindings):
        * html/HTMLInputElement.idl:
        * html/InputType.cpp:
        (WebCore::InputType::setFiles):
        * html/InputType.h:

2021-08-24  Tim Nguyen  <ntim@apple.com>

        Use RefPtr instead of auto* in EventHandler::defaultKeyboardEventHandler.
        https://bugs.webkit.org/show_bug.cgi?id=229475

        Unreviewed.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::defaultKeyboardEventHandler):

2021-08-24  Chris Dumez  <cdumez@apple.com>

        Geolocation API should callback with error if doc is not fully active
        https://bugs.webkit.org/show_bug.cgi?id=228319
        <rdar://problem/81450315>

        Reviewed by Ryosuke Niwa.

        Test: imported/w3c/web-platform-tests/geolocation-API/non-fully-active.https.html

        * Modules/geolocation/Geolocation.cpp:
        (WebCore::Geolocation::getCurrentPosition):
        (WebCore::Geolocation::watchPosition):
        Schedule a task to call the error callback if the document is not fully active, as
        per the specification:
        - https://github.com/w3c/geolocation-api/issues/96
        - https://github.com/w3c/geolocation-api/pull/97

        * bindings/js/JSDOMConvertCallbacks.h:
        (WebCore::Converter<IDLCallbackFunction<T>>::convert):
        (WebCore::Converter<IDLCallbackInterface<T>>::convert):
        Make sure we use the incumbent global object when constructing callback functions /
        interfaces, as per the Web IDL specification:
        - https://heycam.github.io/webidl/#es-callback-interface
        - https://heycam.github.io/webidl/#es-callback-function
        Without this, the geolocation API would be unable to call its error callback when in
        a detached frame because the callback's global object would be the geolocation object's
        global object.

        * dom/IdleCallbackController.cpp:
        (WebCore::IdleCallbackController::invokeIdleCallbacks):
        Make sure we don't fire requestIdleCallback callbacks in detached iframes, to maintain
        pre-existing behavior and keep layout tests passing. I had to make this change because
        callback interfaces / functions are now using a different global object and can now
        get called in cases when they previously couldn't.

        * dom/TaskSource.h:
        As Geolocation task source for the HTML5 event loop, as per the Geolocation
        specification.

2021-08-24  Chris Dumez  <cdumez@apple.com>

        [WK2] Implement process-swapping based on Cross-Origin-Opener-Policy HTTP header
        https://bugs.webkit.org/show_bug.cgi?id=229203
        <rdar://problem/82047686>

        Reviewed by Alex Christensen.

        We recently added support for the Cross-Origin-Opener-Policy (COOP) HTTP header. However,
        when switching browsing context group on HTTP response, we would keep using the same
        WebProcess. This patch makes it so that we now swap WebProcess when switching browsing
        context group on network response as this will be required to securely re-enable Web APIs
        such as SharedArrayBuffer.

        For process-swapping, we reuse most of the same logic as process-swap on navigation (PSON).
        A few differences are that:
        - We swap on response policy decision instead of navigation policy decision
        - We used to have a ShouldTreatAsContinuingLoad Yes/No enum. It is now tri-state: No,
          YesAfterNavigationPolicyDecision, YesAfterResponsePolicyDecision. We need this new state
          to avoid duplicate response policy delegate calls after process-swapping and to avoid
          sending duplicate didStartProvisionalLoad IPCs after proces-swapping.
        - After process-swapping on navigation response, we close the previous page instead of trying
          to put it into the back/forward cache. Per the specification, in a case of a browsing context
          group switch, the previous browsing context needs to be discarded (which is Web-observable).

        One important thing to note is that we currently send the HTTP request to the server AGAIN after
        a process-swap. This is because the on-going load currently gets cancelled upon receiving the
        network response and deciding to process-swap and a new fresh load gets issued by the new
        WebProcess after swapping. I will address this in a follow-up to decrease patch size and
        complexity. We will need to transition the load in the network process from the old WebProcess
        to the new one in case of process-swap.

        Covered by existing COOP/COEP layout tests that are still passing and new API tests
        that validate that we are indeed process-swapping.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::doCrossOriginOpenerHandlingOfResponse):
        (WebCore::DocumentLoader::responseReceived):
        (WebCore::DocumentLoader::maybeLoadEmpty):
        (WebCore::DocumentLoader::clearMainResource):
        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::isContinuingLoadAfterResponsePolicyCheck const):
        (WebCore::DocumentLoader::setIsContinuingLoadAfterResponsePolicyCheck):
        * loader/EmptyClients.cpp:
        (WebCore::EmptyFrameLoaderClient::dispatchDecidePolicyForResponse):
        * loader/EmptyFrameLoaderClient.h:
        * loader/FrameLoadRequest.h:
        (WebCore::FrameLoadRequest::setShouldTreatAsContinuingLoad):
        (WebCore::FrameLoadRequest::shouldTreatAsContinuingLoad const):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::checkContentPolicy):
        (WebCore::FrameLoader::prepareForLoadStart):
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::loadDifferentDocumentItem):
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:
        * loader/HistoryController.h:
        * loader/ShouldTreatAsContinuingLoad.h:
        * page/Page.h:

2021-08-24  Alex Christensen  <achristensen@webkit.org>

        Unprefix -webkit-backface-visibility
        https://bugs.webkit.org/show_bug.cgi?id=170983

        Reviewed by Simon Fraser.

        This has already been done by Chrome and Firefox.
        Keep the prefixed version as an alias.

        Test: imported/w3c/web-platform-tests/css/css-transforms/css-transform-property-existence.html

        * animation/CSSPropertyAnimation.cpp:
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::valueForPropertyInStyle):
        * css/CSSProperties.json:
        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):
        (WebCore::CSSParserFastPaths::isKeywordPropertyID):

2021-08-24  Darin Adler  <darin@apple.com>

        Remove inefficient use of HashMap from FormController along with a bit of other streamlining and modernizing
        https://bugs.webkit.org/show_bug.cgi?id=228854

        Reviewed by Chris Dumez.

        * html/FormController.cpp:
        (WebCore::ownerForm): Renamed from ownerFormForState. Removed unnecessary use of
        inline; trust the compiler to inline if needed without the keyword. Removed
        "using namespace HTMLNames". Use nullptr instead of 0.
        (WebCore::StringVectorReader::consumeString): Added. Helps parse a vector without
        so many index range checks. Returns null string at end of vector.
        (WebCore::StringVectorReader::consumeSubvector): Added. Helps parse a vector
        without so many index range checks. Returns the subvector.
        (WebCore::appendSerializedFormControlState): Renamed from
        serializeFormControlStateTo to make clear this appends to an existing vector.
        (WebCore::consumeSerializedFormControlState): Renamed from
        deserializeFormControlState to make clear this reads part of a vector and
        indicates what was read. Use the StringVectorReader class for the argument type
        to make that clear. Refactored to use the new consumeString and consumeSubvector
        functions. Also use parseInteger because there is no need to allow trailing junk.
        (WebCore::FormElementKey): Deleted this entire class, kind of a lot of code,
        because we can instead use std::pair and only lose a little bit of clarity.
        (WebCore::FormController::SavedFormState): Made this class a member of
        FormController. Also use std::pair, renamed m_stateForNewFormElements to m_map,
        and removed m_controlStateCount. The only code that was using this was
        in SavedFormState::serializeTo, and that in turn was only used on a
        SavedFormState which contained
        (WebCore::SavedFormState::serializeTo const): Deleted. All the logic from this
        function is now in the FormController::formElementsState function, which is
        the only place it was used.
        (WebCore::FormController::SavedFormState::consumeSerializedState): Renamed
        from deserialize to make it clear that it reads part of a vector and indicates
        what is read. Use the StringVectorReader class for the argument type to make
        that clear. Moved the isNotFormControlTypeCharacter from a separate function
        to be a lambda inside this function. Use consumeString, StringView::contains,
        and consumeSerializedFormControlState to streamline the implementation.
        Moved call to HashMap::add here instead of separate appendControlState
        function since we no longer need to track m_controlStateCount.
        (WebCore::SavedFormState::appendControlState): Deleted.
        (WebCore::FormController::SavedFormState::takeControlState): Take the arguments
        as a FormElementKey, already in a pair, instead of as two separate values.
        Removed the code to maintain m_controlStateCount.
        (WebCore::FormController::SavedFormState::appendReferencedFilePaths const):
        Renamed from referencedFilePaths and change this to append to an existing
        vector, since that's what the only caller was doing.
        (WebCore::FormController::FormKeyGenerator): Made this class a member of
        FormController. Also changed to just use String for the formKey, since there
        is no significant sharing or other optimization made possible by using
        AtomString. Also use a reference instead of a pointer in one place.
        (WebCore::recordFormStructure): Deleted.
        (WebCore::formSignature): Merge in the logic from the recordFormStructure
        function, since that was an awkward function name and this is clearer as
        just one function. Added a comment about fragment identifiers. Use unsigned
        instead of size_t to count up to 2. Improved the comment about why the
        maximum is 2 and used simpler loop logic, is<> instead of a specific
        function call, downcast<> instead of static_cast<>, and Ref instead of RefPtr<...>.
        (WebCore::FormController::FormKeyGenerator::formKey): Use RefPtr on the
        left side instead of makeRefPtr. Use String instead of AtomString.
        (WebCore::FormController::FormKeyGenerator::willDeleteForm): Take a reference.
        (WebCore::formStateSignature): Use MainThreadNeverDestroyed.
        (WebCore::FormController::createSavedFormStateMap): Deleted. This was only
        ever used by formElementsState, which does not need a map.
        (WebCore::FormController::formElementsState const): Use a vector that
        uses Ref<> since it's a little safer for object lifetime and that also stores
        the form key so we can grouop controls in the same form as part of sorting.
        Added an early return when there are no controls instead of
        detecting that at the end of the function. Moved the code from
        createSavedFormStateMap and SavedFormState::serializeTo in here to avoid
        creating a HashMap just to iterate it and build a string vector, using
        sorting to group and count the controls in each form. Use shrinkToFit to make
        sure the vector is not permanently overallocated instead of an always-too-small
        reserveInitialCapacity.
        (WebCore::FormController::setStateForNewFormElements): Update for the change in
        parseStateVector.
        (WebCore::FormController::takeStateForFormElement): Updated for the change to
        m_savedFormStateMap values. Use auto a bit and "iterator" insted of "it".
        (WebCore::FormController::parseStateVector): Renamed from
        formStatesFromStateVector and changed to use a return value instead of an out
        argument. Use StringVectorReader and consumeString to streamline the code and
        make it a bit more foolproof. Check the exhaustion of the input vector inside
        the loop instead of checking for an error after the loop.
        (WebCore::FormController::willDeleteForm): Pass a reference.
        (WebCore::FormController::restoreControlStateFor): Tweak comment and use ||
        instead of two separate if statements.
        (WebCore::FormController::restoreControlStateIn): Ditto.
        (WebCore::FormController::referencedFilePaths): Use parseStateVector and
        appendReferencedFilePaths.

        * html/FormController.h: Removed almost all the includes, which were not needed.
        Made the FormKeyGenerator and SavedFormState classes members of FormController.
        Changed SavedFormStateMap to use String as the key instead of RefPtr<AtomStringImpl>,
        no need for the exotic type. Changed SavedFormStateMap to use SavedFormState
        as the value instead of std::unique_ptr<SavedFormState>. Removed the unused
        member function createSavedFormStateMap and renamed formStatesFromStateVector
        to parseStateVector and changed it to use a return value.

2021-08-24  Jer Noble  <jer.noble@apple.com>

        Add support for new pseudo-classes for media from CSS Selectors Level 4.
        https://bugs.webkit.org/show_bug.cgi?id=229431

        Reviewed by Eric Carlson.

        Tests: media/media-css-muted.html
               media/media-css-playing-paused.html
               media/media-css-volume-locked.html
               (Tests for buffering and stalled states are forthcoming, waiting on
               a non-flakey mechanism for inducing network stalls)

        Add support for the following new pseudo-classes from CSS Selectors Level 4:
        - :playing, :paused, :seeking
        - :buffering, :stalled
        - :muted, :volume-locked

        Ensure CSS styles are invalidated when playback state changes by encapsulating
        modifications to HTMLMediaElement::m_paused into a setPaused() function.

        Add methods to query for volumeLocked() on HTMLMediaElement, as well as a way
        to override the value through Internals.

        Invalidate styles when the "muted" attribute changes state.

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::selectorText const):
        * css/CSSSelector.h:
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne const):
        * css/SelectorCheckerTestFunctions.h:
        (WebCore::matchesPlayingPseudoClass):
        (WebCore::matchesPausedPseudoClass):
        (WebCore::matchesSeekingPseudoClass):
        (WebCore::matchesBufferingPseudoClass):
        (WebCore::matchesStalledPseudoClass):
        (WebCore::matchesMutedPseudoClass):
        (WebCore::matchesVolumeLockedPseudoClass):
        * css/SelectorPseudoClassAndCompatibilityElementMap.in:
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::JSC_DEFINE_JIT_OPERATION):
        (WebCore::SelectorCompiler::addPseudoClassType):
        * html/HTMLMediaElement.cpp:
        (WebCore::defaultVolumeLocked):
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        (WebCore::HTMLMediaElement::parseAttribute):
        (WebCore::HTMLMediaElement::prepareForLoad):
        (WebCore::HTMLMediaElement::setNetworkState):
        (WebCore::HTMLMediaElement::setReadyState):
        (WebCore::HTMLMediaElement::setPaused):
        (WebCore::HTMLMediaElement::playInternal):
        (WebCore::HTMLMediaElement::pauseInternal):
        (WebCore::HTMLMediaElement::setMuted):
        (WebCore::HTMLMediaElement::setVolumeLocked):
        (WebCore::HTMLMediaElement::buffering const):
        (WebCore::HTMLMediaElement::stalled const):
        (WebCore::HTMLMediaElement::mediaPlayerTimeChanged):
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::volumeLocked const):
        * testing/Internals.cpp:
        (WebCore::Internals::setMediaElementVolumeLocked):
        * testing/Internals.h:
        * testing/Internals.idl:

2021-08-24  Chris Dumez  <cdumez@apple.com>

        Fire a load event for <iframe src="about:blank#foo">
        https://bugs.webkit.org/show_bug.cgi?id=228958
        <rdar://problem/82035810>

        Reviewed by Darin Adler.

        When loading an iframe with src="about:blank#foo", we would fail to fire the load event because we would treat
        the navigation as a fragment navigation. The reason for that is that the iframe is initially displaying the
        initial empty document, which has URL "about:blank". Because the source and destination URL would be the same
        when ignoring fragments, our logic would treat this as a pure fragment navigation. To address this, I have
        updated FrameLoader::shouldPerformFragmentNavigation() to special case the initial empty document.        

        Test: imported/w3c/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/load-event-iframe-element.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::shouldPerformFragmentNavigation):

2021-08-24  Alex Christensen  <achristensen@webkit.org>

        ThreadSanitizer: data race in WTF::StringImpl::deref() for WebCore::FormDataElement::EncodedFileData::filename
        https://bugs.webkit.org/show_bug.cgi?id=229432

        Reviewed by Darin Adler.

        Call the FormDataElement destructor on the main thread in advanceCurrentStream.

        * platform/network/cf/FormDataStreamCFNet.cpp:
        (WebCore::advanceCurrentStream):
        (WebCore::createHTTPBodyCFReadStream):

2021-08-24  Adrian Perez de Castro  <aperez@igalia.com>

        Non-unified build fixes, late August 2021
        https://bugs.webkit.org/show_bug.cgi?id=229440

        Unreviewed non-unified build fixes.

        * Modules/mediastream/libwebrtc/LibWebRTCDtlsTransportBackend.cpp: Add missing
        LibWebRTCProvider.h and JavaScriptCore/ArrayBuffer.h headers.
        * fileapi/ThreadableBlobRegistry.cpp: Add missing PolicyContainer.h header.
        * layout/formattingContexts/inline/InlineFormattingGeometry.cpp: Add missing FontCascade.h
        header.
        * layout/formattingContexts/inline/InlineLineBoxVerticalAligner.cpp: Add missing
        FontCascade.h, InlineFormattingContext.h, and LayoutBoxGeometry.h headers.

2021-08-24  Tim Nguyen  <ntim@apple.com>

        Move cancel dialog task to `defaultKeyboardEventHandler`.
        https://bugs.webkit.org/show_bug.cgi?id=228845

        Reviewed by Antti Koivisto.

        Test: imported/w3c/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/dialog-keydown-preventDefault.html

        Allows preventDefault() on keydown event to prevent cancelation.

        Also rename HTMLDialogElement::cancel to HTMLDialogElement::queueCancelTask to reflect better what the function does.

        * html/HTMLDialogElement.cpp:
        (WebCore::HTMLDialogElement::queueCancelTask):
        (WebCore::HTMLDialogElement::cancel): Deleted.
        * html/HTMLDialogElement.h:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::internalKeyEvent):
        (WebCore::EventHandler::defaultKeyboardEventHandler):

2021-08-24  Philippe Normand  <pnormand@igalia.com>

        REGRESSION(r281305) [GStreamer] fast/mediastream/getDisplayMedia-frame-rate.html timeouts
        https://bugs.webkit.org/show_bug.cgi?id=229343

        Reviewed by Youenn Fablet.

        Proxy the video samples from the wrapped mock source to its parent. The test was timing out
        because the video samples were never notified to the top level observer in Internals.

        * platform/mediastream/gstreamer/MockRealtimeVideoSourceGStreamer.cpp:
        (WebCore::MockDisplayCaptureSourceGStreamer::MockDisplayCaptureSourceGStreamer):
        (WebCore::MockDisplayCaptureSourceGStreamer::requestToEnd):
        (WebCore::MockDisplayCaptureSourceGStreamer::videoSampleAvailable):
        * platform/mediastream/gstreamer/MockRealtimeVideoSourceGStreamer.h:

2021-08-24  Tim Nguyen  <ntim@apple.com>

        Implement inert attribute behind feature flag
        https://bugs.webkit.org/show_bug.cgi?id=165279

        Reviewed by Chris Dumez.

        Tests: imported/w3c/web-platform-tests/inert/frame/button.html
               imported/w3c/web-platform-tests/inert/inert-does-not-match-disabled-selector.tentative.html
               imported/w3c/web-platform-tests/inert/inert-in-shadow-dom.tentative.html
               imported/w3c/web-platform-tests/inert/inert-inlines.tentative.html
               imported/w3c/web-platform-tests/inert/inert-label-focus.tentative.html
               imported/w3c/web-platform-tests/inert/inert-node-is-uneditable.tentative.html
               imported/w3c/web-platform-tests/inert/inert-node-is-unfocusable.tentative.html
               imported/w3c/web-platform-tests/inert/inert-node-is-unselectable.tentative.html
               imported/w3c/web-platform-tests/inert/inert-on-slots.tentative.html
               imported/w3c/web-platform-tests/inert/inert-retargeting-iframe.tentative.html
               imported/w3c/web-platform-tests/inert/inert-retargeting.tentative.html

        * dom/Node.cpp:
        (WebCore::Node::isInert const):
        * html/HTMLAttributeNames.in:
        * html/HTMLElement.idl:

2021-08-23  Cameron McCormack  <heycam@apple.com>

        Avoid unnecessary CGColor creation in Gradient::createCGGradient for common sRGB-only cases
        https://bugs.webkit.org/show_bug.cgi?id=229422
        <rdar://problem/82261384>

        Reviewed by Sam Weinig.

        * platform/graphics/Gradient.h:
        * platform/graphics/cg/GradientCG.cpp:
        (WebCore::Gradient::hasOnlyBoundedSRGBColorStops const):
        (WebCore::Gradient::createCGGradient):

2021-08-23  Rob Buis  <rbuis@igalia.com>

        Null check scriptExecutionContext
        https://bugs.webkit.org/show_bug.cgi?id=229272

        Reviewed by Ryosuke Niwa.

        Null check scriptExecutionContext in ensureLocalFontFacesForFamilyRegistered.

        Tests: fast/text/font-face-set-add-crash.html

        * css/CSSFontFaceSet.cpp:
        (WebCore::CSSFontFaceSet::ensureLocalFontFacesForFamilyRegistered):

2021-08-23  Alex Christensen  <achristensen@webkit.org>

        ThreadSanitizer: data race of WTF::StringImpl in WebCoreNSURLSessionDataTask._metrics instance variable
        https://bugs.webkit.org/show_bug.cgi?id=229435

        Reviewed by David Kilzer.

        Move the isolated copy to the WebCoreNSURLSessionTaskMetrics instead of keeping a copy on the delegate thread
        and a copy on whatever thread our media stack wants to use the WebCoreNSURLSessionTaskMetrics on.

        * platform/network/cocoa/WebCoreNSURLSession.mm:
        (-[WebCoreNSURLSessionTaskTransactionMetrics _initWithMetrics:]):
        (-[WebCoreNSURLSessionTaskMetrics _initWithMetrics:]):
        (-[WebCoreNSURLSessionDataTask _resource:loadFinishedWithError:metrics:]):

2021-08-23  John Wilander  <wilander@apple.com>

        PCM: Support ephemeral measurement with non-persistent WebCore::PrivateClickMeasurement
        https://bugs.webkit.org/show_bug.cgi?id=228984
        <rdar://problem/81778213>

        Reviewed by Kate Cheney.

        This patch adds support for ephemeral measurement with non-persistent
        WebCore::PrivateClickMeasurement for direct response advertising.
        Such advertising means there is only one pending click, held in memory,
        and only stored right before the triggering event causes attribution
        reports to be scheduled.

        Test: http/tests/privateClickMeasurement/attribution-conversion-through-image-redirect-ephemeral.html

        * loader/PrivateClickMeasurement.h:
        (WebCore::PrivateClickMeasurement::SourceSite::operator!= const):
        (WebCore::PrivateClickMeasurement::AttributionDestinationSite::operator!= const):
        (WebCore::PrivateClickMeasurement::PrivateClickMeasurement):
            Now takes an optional PrivateClickMeasurementAttributionEphemeral
            parameter, set to PrivateClickMeasurementAttributionEphemeral::No
            by default.
        (WebCore::PrivateClickMeasurement::isEphemeral const):
        (WebCore::PrivateClickMeasurement::setEphemeral):
        (WebCore::PrivateClickMeasurement::encode const):
        (WebCore::PrivateClickMeasurement::decode):

2021-08-23  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Decouple line box building and vertical aligning
        https://bugs.webkit.org/show_bug.cgi?id=229162
        <rdar://problem/82260272>

        Reviewed by Antti Koivisto.

        This is in preparation for supporting incremental inline layout.
        We should be able to vertically align the inline level boxes on any line without rebuilding the LineBox.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * layout/formattingContexts/inline/InlineFormattingGeometry.cpp:
        (WebCore::Layout::LineBoxBuilder::build):
        (WebCore::Layout::LineBoxBuilder::constructAndAlignInlineLevelBoxes):
        (WebCore::Layout::LineBoxBuilder::SimplifiedVerticalAlignment::rootInlineBoxLogicalTop const): Deleted.
        (WebCore::Layout::LineBoxBuilder::SimplifiedVerticalAlignment::lineBoxHeight const): Deleted.
        (WebCore::Layout::LineBoxBuilder::SimplifiedVerticalAlignment::setEnabled): Deleted.
        (WebCore::Layout::LineBoxBuilder::SimplifiedVerticalAlignment::isEnabled const): Deleted.
        (): Deleted.
        (WebCore::Layout::LineBoxBuilder::computeLineBoxHeightAndAlignInlineLevelBoxesVertically): Deleted.
        (WebCore::Layout::LineBoxBuilder::SimplifiedVerticalAlignment::SimplifiedVerticalAlignment): Deleted.
        (WebCore::Layout::LineBoxBuilder::SimplifiedVerticalAlignment::canUseSimplifiedAlignment): Deleted.
        (WebCore::Layout::LineBoxBuilder::SimplifiedVerticalAlignment::align): Deleted.
        (WebCore::Layout::LineBoxBuilder::SimplifiedVerticalAlignment::adjust): Deleted.
        * layout/formattingContexts/inline/InlineLevelBox.h:
        * layout/formattingContexts/inline/InlineLineBox.h:

2021-08-23  Alex Christensen  <achristensen@webkit.org>

        Setting window.location.href to an invalid URL should throw a TypeError
        https://bugs.webkit.org/show_bug.cgi?id=229303

        Reviewed by Chris Dumez.

        This matches Firefox and the specification, and Chrome also throws an exception in this case.

        * page/Location.cpp:
        (WebCore::Location::setLocation):

2021-08-23  Cameron McCormack  <heycam@apple.com>

        Preserve color space when getting current color in DisplayList::DrawGlyphsRecorder
        https://bugs.webkit.org/show_bug.cgi?id=229024
        <rdar://problem/81828477>

        Reviewed by Sam Weinig.

        When GPU canvas is enabled, DrawGlyphsRecorder records the text fill,
        stroke, and shadow colors by getting them from the context using
        CGGStateGetFillColor etc.  This is done so that color glyphs have each
        part painted in the right color.  But the current conversion from
        CGColor to WebCore::Color lossily converts to sRGB.  So we need to get
        the color space and color components from the CGColor and preserve them.

        The existing Color(CGColorRef) constructor is replaced by two
        constructor functions, createAndPreserveColorSpace and
        roundAndClampToSRGBALossy, so the conversion behavior is clear at call
        sites.  createAndPreserveColorSpace will match the CGColor's color
        space to one of the predefined spaces that WebCore::Color can
        represent.  If it's some other color space, we convert to XYZ (on
        platforms where that's available), since that will result in the least
        loss, or to sRGB (on platforms where XYZ is not available).

        CGColorSpaceEqualToColorSpace, which is used when determining the
        CGColor's color space, is not very expensive, but it will do more than a
        pointer comparison in case we pass in two CGColorSpaceRefs that are
        equivalent but not the same pointer value.  Since our new
        colorSpaceForCGColorSpace function will be used with CGColors that have
        been set WebCore during canvas drawing, we will get back the same
        pointers that we have cached in sRGBColorSpaceRef(),
        displayP3ColorSpaceRef(), etc.  If calling CGColorSpaceEqualToColorSpace
        on all our supported color spaces turns out to be too expensive, we
        could start by doing a pointer comparison on each before calling
        CGColorSpaceEqualToColorSpace.

        The way colorSpaceForCGColorSpace is written we could end up
        instantiating all of our supported color spaces, if an author used an
        XYZ color when drawing text (the last color profile we check).  We
        could try harder to avoid doing this if it's important.

        Tests: imported/w3c/web-platform-tests/html/canvas/element/wide-gamut-canvas/2d.color.space.p3.fillText.html
               imported/w3c/web-platform-tests/html/canvas/element/wide-gamut-canvas/2d.color.space.p3.fillText.shadow.html
               imported/w3c/web-platform-tests/html/canvas/element/wide-gamut-canvas/2d.color.space.p3.strokeText.html

        * page/CaptionUserPreferencesMediaAF.cpp:
        (WebCore::CaptionUserPreferencesMediaAF::captionsWindowCSS const):
        (WebCore::CaptionUserPreferencesMediaAF::captionsBackgroundCSS const):
        (WebCore::CaptionUserPreferencesMediaAF::captionsTextColor const):
        * platform/graphics/Color.h:
        (WebCore::Color::createAndPreserveColorSpace):
        (WebCore::Color::createAndLosslesslyConvertToSupportedColorSpace):
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:
        (WebCore::PlatformCALayerCocoa::backgroundColor const):
        * platform/graphics/ca/cocoa/WebTiledBackingLayer.mm:
        (-[WebTiledBackingLayer setBorderColor:]):
        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        (PlatformCALayerWin::backgroundColor const):
        (printColor):
        * platform/graphics/ca/win/PlatformCALayerWinInternal.cpp:
        (PlatformCALayerWinInternal::drawRepaintCounters):
        * platform/graphics/cg/ColorCG.cpp:
        (WebCore::roundAndClampToSRGBALossy):
        (WebCore::Color::createAndLosslesslyConvertToSupportedColorSpace):
        (WebCore::Color::createAndPreserveColorSpace):
        (WebCore::platformConvertColorComponents):
        * platform/graphics/cg/ColorSpaceCG.cpp:
        (WebCore::colorSpaceForCGColorSpace):
        * platform/graphics/cg/ColorSpaceCG.h:
        * platform/graphics/displaylists/DisplayListDrawGlyphsRecorderCoreText.cpp:
        (WebCore::DisplayList::DrawGlyphsRecorder::updateShadow):
        (WebCore::DisplayList::DrawGlyphsRecorder::recordDrawGlyphs):
        * platform/graphics/win/MediaPlayerPrivateFullscreenWindow.cpp:
        (WebCore::MediaPlayerPrivateFullscreenWindow::setRootChildLayer):
        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::PlatformPasteboard::color):
        * rendering/RenderThemeIOS.mm:
        (WebCore::systemColorFromCSSValueSystemColorInformation):

2021-08-23  Alan Bujtas  <zalan@apple.com>

        Simplified text measuring only works with the primary font
        https://bugs.webkit.org/show_bug.cgi?id=228617
        <rdar://problem/81588175>

        Reviewed by Myles C. Maxfield.

        This is in preparation for adding fallback font support (IFC).

        The reason why this works on trunk is because computeCanUseSimplifiedTextMeasuring() is only used by
        the modern line layout codepath which does not support fallback font support yet.

        * layout/layouttree/LayoutTreeBuilder.cpp:
        (WebCore::Layout::canUseSimplifiedTextMeasuring):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::computeCanUseSimplifiedTextMeasuring const):

2021-08-23  Alan Bujtas  <zalan@apple.com>

        Pre-formatted content gets distorted when attempting to select content
        https://bugs.webkit.org/show_bug.cgi?id=228655
        <rdar://81288187>

        Reviewed by Simon Fraser.

        https://drafts.csswg.org/css-text/#overflow-wrap-property

        "This property specifies whether the UA may break at otherwise disallowed points within
        a line to prevent overflow, when an otherwise-unbreakable string is too long to fit within the line box.
        It only has an effect when white-space allows wrapping."

        (also see https://trac.webkit.org/changeset/10095/webkit where the wrapping behavior was introduced)

        Test: fast/text/no-wrap-in-pre-with-word-wrap.html

        * rendering/line/BreakingContext.h:
        (WebCore::BreakingContext::handleText):

2021-08-23  Martin Robinson  <mrobinson@webkit.org>

        Sticky position should not use transformed position to compute sticky offset.
        https://bugs.webkit.org/show_bug.cgi?id=164292
        <rdar://problem/29054773>

        Reviewed by Simon Fraser.

        No new tests. This change is tested by the following WPT test:
          web-platform-tests/css/css-position/sticky/position-sticky-transforms-translate.html

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::computeStickyPositionConstraints const): When calling localToContainerQuad,
        pass 0 for the mode which means that the transformation between coordinate systems does not include
        transforms.

2021-08-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        Create a RenderLineBreak when BR element has unsupported content data style
        https://bugs.webkit.org/show_bug.cgi?id=224849

        Reviewed by Antti Koivisto.

        Instead of falling back to RenderElement::createFor(), create a RenderLineBreak just ignoring the unsupported
        content data.

        * html/HTMLBRElement.cpp:
        (WebCore::HTMLBRElement::createElementRenderer):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::isContentDataSupported):
        (WebCore::RenderElement::createFor):
        * rendering/RenderElement.h:

2021-08-23  Chris Dumez  <cdumez@apple.com>

        HTMLStyleElement should be able to fire the load event more than once
        https://bugs.webkit.org/show_bug.cgi?id=228975

        Reviewed by Youenn Fablet.

        HTMLStyleElement should be able to fire the load event more than once. WebKit has a flag
        preventing the load event to fire more than once but this behavior is not present in the
        HTML specification and doesn't match other browsers.

        No new tests, rebaselined existing test.

        * html/HTMLStyleElement.cpp:
        (WebCore::HTMLStyleElement::notifyLoadedSheetAndAllCriticalSubresources):
        * html/HTMLStyleElement.h:

2021-08-23  Alicia Boya García  <aboya@igalia.com>

        [MSE][GStreamer] Implement multi-track support
        https://bugs.webkit.org/show_bug.cgi?id=229072

        Reviewed by Xabier Rodriguez-Calvar.

        This patch adds support for SourceBuffer having more than one track in
        the GStreamer port.

        This fixes the following LayoutTests:

        imported/w3c/web-platform-tests/media-source/mediasource-activesourcebuffers.html
        media/media-source/media-source-has-audio-video.html
        media/media-source/only-bcp47-language-tags-accepted-as-valid.html

        * platform/graphics/gstreamer/GStreamerCommon.h:
        (GstIteratorAdaptor::GstIteratorAdaptor):
        (GstIteratorAdaptor::iterator::iterator):
        (GstIteratorAdaptor::iterator::operator*):
        (GstIteratorAdaptor::iterator::operator++):
        (GstIteratorAdaptor::iterator::operator==):
        (GstIteratorAdaptor::iterator::operator!=):
        (GstIteratorAdaptor::begin):
        (GstIteratorAdaptor::end):
        * platform/graphics/gstreamer/mse/AppendPipeline.cpp:
        (WebCore::AppendPipeline::AppendPipeline):
        (WebCore::AppendPipeline::~AppendPipeline):
        (WebCore::AppendPipeline::parseDemuxerSrcPadCaps):
        (WebCore::AppendPipeline::appsinkCapsChanged):
        (WebCore::AppendPipeline::handleEndOfAppend):
        (WebCore::AppendPipeline::appsinkNewSample):
        (WebCore::AppendPipeline::didReceiveInitializationSegment):
        (WebCore::AppendPipeline::consumeAppsinksAvailableSamples):
        (WebCore::AppendPipeline::resetParserState):
        (WebCore::AppendPipeline::handleAppsinkNewSampleFromStreamingThread):
        (WebCore::createOptionalParserForFormat):
        (WebCore::AppendPipeline::generateTrackId):
        (WebCore::AppendPipeline::tryCreateTrackFromPad):
        (WebCore::AppendPipeline::tryMatchPadToExistingTrack):
        (WebCore::AppendPipeline::linkPadWithTrack):
        (WebCore::AppendPipeline::makeWebKitTrack):
        (WebCore::AppendPipeline::Track::initializeElements):
        (WebCore::AppendPipeline::hookTrackEvents):
        (WebCore::AppendPipeline::streamTypeToString):
        (WebCore::AppendPipeline::id): Deleted.
        (WebCore::AppendPipeline::trackId): Deleted.
        (WebCore::AppendPipeline::consumeAppsinkAvailableSamples): Deleted.
        (WebCore::AppendPipeline::connectDemuxerSrcPadToAppsinkFromStreamingThread): Deleted.
        (WebCore::AppendPipeline::connectDemuxerSrcPadToAppsink): Deleted.
        (WebCore::AppendPipeline::disconnectDemuxerSrcPadFromAppsinkFromAnyThread): Deleted.
        * platform/graphics/gstreamer/mse/AppendPipeline.h:
        (WebCore::AppendPipeline::sourceBufferPrivate):
        (WebCore::AppendPipeline::Track::Track):
        (WebCore::AppendPipeline::appsrc):
        (WebCore::AppendPipeline::appsinkCaps): Deleted.
        (WebCore::AppendPipeline::track): Deleted.
        (WebCore::AppendPipeline::appsink): Deleted.
        (WebCore::AppendPipeline::demuxerSrcPadCaps): Deleted.
        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:
        (WebCore::MediaPlayerPrivateGStreamerMSE::setInitialVideoSize):
        (WebCore::MediaPlayerPrivateGStreamerMSE::trackDetected): Deleted.
        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.h:

2021-08-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        [Freetype] Set maximum allowed font size for Freetype
        https://bugs.webkit.org/show_bug.cgi?id=228893

        Reviewed by Michael Catanzaro.

        Maximum allowed font size in Freetype2 is 65535 because x_ppem and y_ppem fields in FreeType structs are of type
        'unsigned short'.

        * rendering/style/RenderStyleConstants.h:

2021-08-22  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add support for vertical-align: super
        https://bugs.webkit.org/show_bug.cgi?id=228235

        Reviewed by Antti Koivisto.

        * layout/formattingContexts/inline/InlineFormattingGeometry.cpp:
        (WebCore::Layout::LineBoxBuilder::computeLineBoxHeightAndAlignInlineLevelBoxesVertically):
        * layout/integration/LayoutIntegrationCoverage.cpp:
        (WebCore::LayoutIntegration::canUseForChild):

2021-08-22  Kate Cheney  <katherine_cheney@apple.com>

        Report correct blocked URI in CSP violation report
        https://bugs.webkit.org/show_bug.cgi?id=226316
        <rdar://problem/78552912>

        Reviewed by Alex Christensen.

        Tests: http/tests/security/contentSecurityPolicy/report-blocked-uri-after-blocked-redirect.html
               http/tests/security/contentSecurityPolicy/report-blocked-uri-after-multiple-redirects.html
        
        Currently for a blocked redirection we report the blocked URI as the
        target URL. This is not up to spec and we should actually report the
        requested URL.

        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::redirectReceived):
        (WebCore::DocumentThreadableLoader::isAllowedByContentSecurityPolicy):
        * loader/DocumentThreadableLoader.h:
        * page/csp/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::allowConnectToSource const):
        (WebCore::ContentSecurityPolicy::reportViolation const):
        * page/csp/ContentSecurityPolicy.h:

2021-08-22  Myles C. Maxfield  <mmaxfield@apple.com>

        Tiny cleanups in CSS parsing code
        https://bugs.webkit.org/show_bug.cgi?id=229369

        Reviewed by Alan Bujtas.

        Use references for non-nullable pointers, and pass nullptr instead of 0 to other pointer parameters.

        No new tests because there is no behavior change.

        * css/StyleSheetContents.cpp:
        (WebCore::StyleSheetContents::parseAuthorStyleSheet):
        (WebCore::StyleSheetContents::parseString):
        * css/StyleSheetContents.h:
        * css/parser/CSSParser.cpp:
        (WebCore::CSSParser::parseSheet):
        * css/parser/CSSParser.h:
        * css/parser/CSSParserImpl.cpp:
        (WebCore::CSSParserImpl::parseStyleSheet):
        * css/parser/CSSParserImpl.h:

2021-08-22  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add support for out-of-flow box static positioning
        https://bugs.webkit.org/show_bug.cgi?id=229103

        Reviewed by Antti Koivisto.

        This patch is in preparation for enabling positioned content for IFC handling.

        In this patch we compute the static position for out-of-flow content inside the inline formatting context.
        As per spec, the static position of an out-of-flow box is computed as if the position was set to static.
        However it does not mean that the out-of-flow box should be involved in the inline layout process.
        Instead we figure out this static position after the inline layout by looking at
        the previous sibling (or parent) box's geometry and place the out-of-flow box at the logical right position.

        * layout/formattingContexts/inline/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::layoutInFlowContent):
        (WebCore::Layout::InlineFormattingContext::lineLayoutForIntergration):
        (WebCore::Layout::InlineFormattingContext::computeStaticPositionForOutOfFlowContent):
        (WebCore::Layout::InlineFormattingContext::computedIntrinsicWidthConstraints):
        (WebCore::Layout::InlineFormattingContext::collectContentIfNeeded):
        (WebCore::Layout::InlineFormattingContext::collectInlineContentIfNeeded): Deleted.
        * layout/formattingContexts/inline/InlineFormattingContext.h:

2021-08-22  Myles C. Maxfield  <mmaxfield@apple.com>

        REGRESSION(r281389): canUseSimplifiedTextMeasuring() needs to match with WidthIterator::applyCSSVisibilityRules()
        https://bugs.webkit.org/show_bug.cgi?id=229388

        Reviewed by Alan Bujtas.

        WidthIterator::applyCSSVisibilityRules() has some special handling for specific characters.
        If those characters are present, we need to make sure we actually use WidthIterator::applyCSSVisibilityRules()
        instead of taking the fast path in FontCascade::widthForSimpleText().

        This is split out from https://bugs.webkit.org/show_bug.cgi?id=215643, and will be tested by that bug's test.

        * layout/layouttree/LayoutTreeBuilder.cpp:
        (WebCore::Layout::canUseSimplifiedTextMeasuring):
        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::characterCanUseSimplifiedTextMeasuring):
        (WebCore::WidthIterator::applyCSSVisibilityRules):
        * platform/graphics/WidthIterator.h:
        * rendering/RenderText.cpp:
        (WebCore::RenderText::computeCanUseSimplifiedTextMeasuring const):

2021-08-22  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add support for vertical-align: sub
        https://bugs.webkit.org/show_bug.cgi?id=228217

        Reviewed by Antti Koivisto.

        Adjust legacy's integral alignment too.

        * layout/formattingContexts/inline/InlineFormattingGeometry.cpp:
        (WebCore::Layout::LineBoxBuilder::computeLineBoxHeightAndAlignInlineLevelBoxesVertically):
        * layout/integration/LayoutIntegrationCoverage.cpp:
        (WebCore::LayoutIntegration::canUseForChild):

2021-08-22  Myles C. Maxfield  <mmaxfield@apple.com>

        Control characters (Unicode category Cc) should be rendered visibly
        https://bugs.webkit.org/show_bug.cgi?id=149128
        <rdar://problem/79224941>

        Reviewed by Alan Bujtas.

        We can map these glyphs to the .notdef glyph, which is (supposed to be) visible.

        Tests: fast/dom/52776.html
               fast/text/fixed-pitch-control-characters.html
               fast/text/wide-zero-width-space.html
               fast/text/zero-width-characters.html
               imported/w3c/web-platform-tests/css/css-text/white-space*

        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::applyCSSVisibilityRules):

2021-08-21  Myles C. Maxfield  <mmaxfield@apple.com>

        overwriteCodePoint() in createAndFillGlyphPage() is wrong
        https://bugs.webkit.org/show_bug.cgi?id=215643
        <rdar://problem/67430461>

        Reviewed by Alan Bujtas.

        The CSS spec says that certain characters have to be invisible. Previously, we were doing this
        by just treating these characters as if they were the zero width space character. However, this
        is wrong for 2 reasons:

        1. If the primary font supports the desired character but doesn't support the zero width space
               character, we'll fallback past it and trigger a download for secondary fonts until
               we find one that supports the ZWS character (which the page didn't even ask for!)
        2. Shaping is Turing-complete, and expects that the correct glyphIDs are fed into the shaper.
               We can't just arbitrarily swap out glyphIDs before shaping just because we feel like it.

        Instead, the solution is to handle these invisible characters after font fallback, and after
        shaping. This patch does it just like we handle adding letter-spacing, word-spacing, and
        justification after shaping - by iterating over the glyphs output by the shaper and seeing if
        any need to be adjusted.

        This patch also includes a fix for the situation where the glyph buffer might be left in an
        inconsistent state, where the array of glyphs is shorter than the array of characters -
        this new codepath added in this patch revealed this existing problem, and fixes it here too.

        Test: fast/text/zwj-ligature.html

        * platform/graphics/Font.cpp:
        (WebCore::createAndFillGlyphPage):
        (WebCore::overrideControlCharacters): Deleted.
        * platform/graphics/GlyphBuffer.h:
        (WebCore::GlyphBuffer::glyphAt const):
        (WebCore::GlyphBuffer::deleteGlyphWithoutAffectingSize):
        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::applyCSSVisibilityRules):
        (WebCore::WidthIterator::advance):
        * platform/graphics/WidthIterator.h:

2021-08-21  Alan Bujtas  <zalan@apple.com>

        [LFC][Integration] Do not create an InlineFormattingContext object for constructing display lines and runs
        https://bugs.webkit.org/show_bug.cgi?id=228061

        Reviewed by Sam Weinig.

        We've got all we need in the inlineFormattingState object.

        * layout/integration/LayoutIntegrationInlineContentBuilder.cpp:
        (WebCore::LayoutIntegration::InlineContentBuilder::build const):
        (WebCore::LayoutIntegration::InlineContentBuilder::createDisplayLineRuns const):
        (WebCore::LayoutIntegration::InlineContentBuilder::createDisplayLines const):
        * layout/integration/LayoutIntegrationInlineContentBuilder.h:
        * layout/integration/LayoutIntegrationLineLayout.cpp:
        (WebCore::LayoutIntegration::LineLayout::constructContent):

2021-08-21  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add support for -webkit-text-security: disc
        https://bugs.webkit.org/show_bug.cgi?id=229047

        Reviewed by Antti Koivisto.

        The disc glyph affects layout, so let's replace the text before we start measuring the inline content.

        * layout/integration/LayoutIntegrationBoxTree.cpp:
        (WebCore::LayoutIntegration::BoxTree::buildTree):
        * layout/integration/LayoutIntegrationCoverage.cpp:
        (WebCore::LayoutIntegration::printReason):
        (WebCore::LayoutIntegration::canUseForStyle):
        * layout/integration/LayoutIntegrationCoverage.h:

2021-08-21  Alan Bujtas  <zalan@apple.com>

        [IFC][Integration] Enable modern line layout for placeholder elements
        https://bugs.webkit.org/show_bug.cgi?id=228887

        Reviewed by Antti Koivisto.

        Apparently placeholders don't do strange things anymore (this check is originated in SLL).

        * layout/integration/LayoutIntegrationCoverage.cpp:
        (WebCore::LayoutIntegration::canUseForLineLayoutWithReason):

2021-08-21  Sihui Liu  <sihui_liu@apple.com>

        IndexedDB: crash when triggering IDBOpenRequest completion back on a worker thread
        https://bugs.webkit.org/show_bug.cgi?id=229375

        Reviewed by Brady Eidson.

        Client may dispatch custom events to an IDBRequest, and we should only change request state based on events
        created internally.

        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::dispatchEvent):

2021-08-21  Zalan Bujtas  <zalan@apple.com>

        [IFC][Integration] Group non-standard CSS properties
        https://bugs.webkit.org/show_bug.cgi?id=228855
        <rdar://problem/81880442>

        Reviewed by Antti Koivisto.

        List of unsupported non-standard CSS properties (consider it a priority list).

        * layout/integration/LayoutIntegrationCoverage.cpp:
        (WebCore::LayoutIntegration::canUseForStyle):

2021-08-21  Per Arne  <pvollan@apple.com>

        [Win] Crash under FontCache::lastResortFallbackFont
        https://bugs.webkit.org/show_bug.cgi?id=228186

        Reviewed by Myles C. Maxfield.

        Add null check to resolve crash in FontCache::lastResortFallbackFont. Additionally, return early in BitmapImage::getHBITMAPOfSize
        when the bits per pixel in the bitmap is of unexpected size, since that will cause a crash under this function. This can happen
        if an event is being handled while already in the Windows paint handler.

        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::FontCache::lastResortFallbackFont):
        * platform/graphics/win/GraphicsContextCGWin.cpp:
        (WebCore::CGContextWithHDC):
        * platform/graphics/win/ImageCGWin.cpp:
        (WebCore::BitmapImage::getHBITMAPOfSize):

2021-08-21  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Single characters don't get shaped in the fast text codepath
        https://bugs.webkit.org/show_bug.cgi?id=186804

        Reviewed by Alan Bujtas.

        Previously, single characters weren't shaped in the fast text codepath,
        because shaping in the fast text codepath was just for kerning and
        ligatures. Kerning didn't need to shape individual characters because
        kerning only applies to pairs of characters, and ligatures didn't need
        to shape individual characters because two characters are required to
        form a ligature. However, now that we want to replace the complex text
        codepath with a new-and-improved fast text codepath, we have to perform
        all shaping in the fast text codepath, regardless of how many characters
        are present.

        Test: fast/text/single-character-shaping.html

        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::applyFontTransforms):
        (WebCore::WidthIterator::commitCurrentFontRange):
        (WebCore::WidthIterator::advanceInternal):
        (WebCore::WidthIterator::shouldApplyFontTransforms const): Deleted.
        * platform/graphics/WidthIterator.h:
        * platform/graphics/coretext/FontCoreText.cpp:
        (WebCore::Font::applyTransforms): Keep kerning disabled for single glyphs,
        because of performance. This will be able to be removed when rdar://82195405
        is fixed.
        * rendering/mathml/RenderMathMLOperator.cpp:
        (WebCore::RenderMathMLOperator::computePreferredLogicalWidths):

2021-08-21  Alan Bujtas  <zalan@apple.com>

        [IFC][Integration] Add painting support for vertical text content
        https://bugs.webkit.org/show_bug.cgi?id=228940

        Reviewed by Antti Koivisto.

        Translate the logical layout coordinates to physical paint coordinates by taking the writing mode into account.
        (e.g. writing-mode: vertical-rl;
          run logical rect: [0, 0][20x18]
          in a flipped block box: [10, 10][100x50]
          with the paint offset: [8, 8]

          translates to: [90, 8][20x18]
        )

        * layout/integration/LayoutIntegrationLineLayout.cpp:
        (WebCore::LayoutIntegration::LineLayout::paint):
        (WebCore::LayoutIntegration::LineLayout::paintTextRunUsingPhysicalCoordinates):
        * layout/integration/LayoutIntegrationLineLayout.h:

2021-08-21  Zalan Bujtas  <zalan@apple.com>

        [IFC][Integration] Do not scan the content for overflowing glyph when line-box-contain is set to glyph
        https://bugs.webkit.org/show_bug.cgi?id=228895
        <rdar://problem/81651487>

        Reviewed by Antti Koivisto.

        This is in preparation for removing content scanning completely.

        * layout/integration/LayoutIntegrationCoverage.cpp:
        (WebCore::LayoutIntegration::printReason):
        (WebCore::LayoutIntegration::canUseForText):
        (WebCore::LayoutIntegration::canUseForFontAndText):
        * layout/integration/LayoutIntegrationCoverage.h:

2021-08-21  Zalan Bujtas  <zalan@apple.com>

        Fix spelling: MidWorkdBreak -> MidWordBreak

        Unreviewed.

        * layout/formattingContexts/inline/InlineContentBreaker.cpp:
        (WebCore::Layout::InlineContentBreaker::tryBreakingTextRun const):
        * layout/formattingContexts/inline/text/TextUtil.cpp:
        (WebCore::Layout::TextUtil::midWordBreak):
        (WebCore::Layout::TextUtil::midWorkdBreak): Deleted.
        * layout/formattingContexts/inline/text/TextUtil.h:

2021-08-21  Youenn Fablet  <youenn@apple.com>

        Prevent AudioSession category from moving out of PlayAndRecord too quickly
        https://bugs.webkit.org/show_bug.cgi?id=229327
        <rdar://81997024>

        Reviewed by Eric Carlson.

        If category is PlayAndRecord, we stick to PlayAndRecord until audio is no longer playing at which point we
        transition to whatever category is most appropriate.
        Introduce PlatformMediaSession::isPlaying in addition to canProduceAudio to compute whether audio is being played.

        Test: http/tests/media/media-stream/audio-capture-and-category.https.html

        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::isPlaying const):
        * Modules/webaudio/AudioContext.h:
        * html/HTMLMediaElement.h:
        * platform/audio/PlatformMediaSession.cpp:
        (WebCore::PlatformMediaSession::isPlaying const):
        * platform/audio/PlatformMediaSession.h:
        (WebCore::PlatformMediaSessionClient::isPlaying const):
        * platform/audio/cocoa/MediaSessionManagerCocoa.mm:
        (WebCore::MediaSessionManagerCocoa::updateSessionState):

2021-08-20  Tim Nguyen  <ntim@apple.com>

        Walk up stacking contexts in RenderLayerBacking::compositingOpacity
        https://bugs.webkit.org/show_bug.cgi?id=229350

        Reviewed by Simon Fraser.

        Shorter way to do the same thing, since stackingContext() chain is top-layer aware and opacity creates stacking contexts anyway.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::compositingOpacity const):

2021-08-20  Alan Bujtas  <zalan@apple.com>

        [IFC][Integration] canUseForLineLayoutWithReason's establishesInlineFormattingContext should check against inflow content
        https://bugs.webkit.org/show_bug.cgi?id=229104

        Reviewed by Antti Koivisto.

        <div><div style="position: absolute"></div>this is still a inline formatting context</div>
        We don't allow to mix inline and block inflow content.
        However out-of-flow block level boxes can certainly have inline siblings. canUseForLineLayoutWithReason should check
        the content accordingly.

        * layout/integration/LayoutIntegrationCoverage.cpp:
        (WebCore::LayoutIntegration::canUseForLineLayoutWithReason):

2021-08-20  Alan Bujtas  <zalan@apple.com>

        [IFC][Integration] Walk the box tree to update the replaced content location
        https://bugs.webkit.org/show_bug.cgi?id=229105

        Reviewed by Antti Koivisto.

        Normally there are more runs than entries in the box list. It's more performant to iterate
        the box list for the renderer location adjustment.

        * layout/integration/LayoutIntegrationBoxTree.h:
        (WebCore::LayoutIntegration::BoxTree::boxAndRendererList):
        * layout/integration/LayoutIntegrationLineLayout.cpp:
        (WebCore::LayoutIntegration::LineLayout::constructContent):

2021-08-20  Simon Fraser  <simon.fraser@apple.com>

        Use UserMediaRequestIdentifier in WebKit rather than a mysterious uint64_t
        https://bugs.webkit.org/show_bug.cgi?id=229308

        Reviewed by Youenn Fablet.

        Move UserMediaRequestIdentifier to its own header.

        * Headers.cmake:
        * Modules/mediastream/UserMediaRequest.h:
        * WebCore.xcodeproj/project.pbxproj:

2021-08-20  Alan Bujtas  <zalan@apple.com>

        [LFC][Integration] Initialize root box's border and padding values
        https://bugs.webkit.org/show_bug.cgi?id=229109

        Reviewed by Antti Koivisto.

        This is what LFC would normally do.

        * layout/integration/LayoutIntegrationLineLayout.cpp:
        (WebCore::LayoutIntegration::LineLayout::layout):
        (WebCore::LayoutIntegration::LineLayout::prepareLayoutState):

2021-08-20  Alan Bujtas  <zalan@apple.com>

        [LFC][Integration] HTMLTextFormControlElement should use the inline iterator to collect content for wrap=hard
        https://bugs.webkit.org/show_bug.cgi?id=228882

        Reviewed by Antti Koivisto.

        getNextSoftBreak is simply returns the position of the last item on the line unless it's a hard line break.
        (endsWithBreak -> previousLineBrokeCleanly -> previousLineBrokeAtBR  see https://trac.webkit.org/changeset/6107)

        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::valueWithHardLineBreaks const):
        (WebCore::getNextSoftBreak): Deleted. line->lineBreakPos() translates to the position where the line breaks within the run.
        maximumCaretOffset() returns the same value, though the naming is a bit confusing and probably should be renamed or introduce
        something similar on the line iterator.
        * layout/integration/LayoutIntegrationCoverage.cpp:
        (WebCore::LayoutIntegration::canUseForLineLayoutWithReason):

2021-08-20  Zalan Bujtas  <zalan@apple.com>

        [IFC][Integration] Enable inline level boxes with relative (min/max)width and (min/max)height values
        https://bugs.webkit.org/show_bug.cgi?id=229065

        Reviewed by Antti Koivisto.

        When a block level box's style changes, while we mark the box itself for layout we normally don't
        walk the subtree for damaged inline content. Instead during layout, we dirty these individual descendant renderers as needed.
        Inline level boxes with relative width/height values are part of this group.
        It's also similar to what we do in LegacyLineLayout::layoutLineBoxes.

        * layout/integration/LayoutIntegrationCoverage.cpp:
        (WebCore::LayoutIntegration::canUseForChild):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::layoutModernLines):

2021-08-20  Alan Bujtas  <zalan@apple.com>

        [IFC][Integration] Enable non-auto line-break values
        https://bugs.webkit.org/show_bug.cgi?id=228842

        Reviewed by Antti Koivisto.

        IFC already supports line-break (except after-white-space).

        * layout/integration/LayoutIntegrationCoverage.cpp:
        (WebCore::LayoutIntegration::canUseForStyle):

2021-08-20  Patrick Angle  <pangle@apple.com>

        Web Inspector: Style rules declared after a rule whose selector has over 8192 components are not shown correctly
        https://bugs.webkit.org/show_bug.cgi?id=229218

        Reviewed by Devin Rousso.

        Test: inspector/css/getMatchedStylesForNodeLargeSelectors.html

        CSS rules are limited to 8192 selector components in WebCore, and when more components are present the rule is
        split into multiple `StyleRule` instances. This meant Web Inspector could not reliably resolve a `StyleRule`
        back to its source data, which we do to enable things like editing, as well as to make sure we show the un-split
        selector in the Styles sidebar of the Elements tab. Previously, the presences of multiple `StyleRule`s for a
        single source data declaration was not accounted for, which meant that rules after the split rules would show a
        mix of style information from the actual rule as well as a rule some number of declarations later in the same
        style sheet. This is resolved by marking `StyleRule`s that have been split and marking the last of the split
        rules. This allows us to then forgo incrementing the index for looking up raw declarations until we encounter
        the last rule from a split `StyleRule`.

         * css/StyleRule.cpp:
        (WebCore::StyleRule::StyleRule):
        (WebCore::StyleRule::createForSplitting):
        (WebCore::StyleRule::splitIntoMultipleRulesWithMaximumSelectorComponentCount const):

        * css/StyleRule.h:
        - Added two members to track rules that are split into multiple rules due to exceeding the 8192 component limit
        for selectors in order to determine later which rules are effectively duplicates of each other. We use two
        members here, one to track that the rule was split from a larger authored rule (`m_isSplitRule`), and one to
        mark the last rule split from a given rule (`m_isLastRuleInSplitRule`). The second member prevents situations
        where we might otherwise accidentally continue iterating into a list of `StyleRule` where two large authored
        rules that had to be split are present next to each other in an ordered collection of `StyleRule`.
        
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::selectorsFromSource):
        - Use a vector of `CSSSelector`s for specificity information since we now collect selectors from potentially
        multiple `CSSStyleRule`s.

        (WebCore::InspectorStyleSheet::cssStyleRulesSplitFromSameRule):
        - Find any neighboring CSSStyleRules that were split from the same original rule based on the order of rules as
        well as the new flags in `StyleRule`
        
        (WebCore::InspectorStyleSheet::selectorsForCSSStyleRule):
        - Find all selectors for a given CSSStyleRule, including other `CSSStyleRule`s split from the same rule in a
        style sheet.

        (WebCore::InspectorStyleSheet::buildObjectForSelectorList):
        - Use all CSSSelectors from for the CSSStyleRule and other rules that were split from the same rule in a style
        sheet.

        (WebCore::InspectorStyleSheet::ruleSourceDataFor const):
        (WebCore::InspectorStyleSheet::ruleIndexByStyle const):
        - When looking up an index to get rule source data, make sure we don't overcount split rules.

        * inspector/InspectorStyleSheet.h:

2021-08-20  Simon Fraser  <simon.fraser@apple.com>

        Outdent WorkerRunLoop class definition
        https://bugs.webkit.org/show_bug.cgi?id=229352

        Reviewed by Wenson Hsieh.

        Just outdent the class.

        * workers/WorkerRunLoop.h:
        (WebCore::WorkerRunLoop::terminated const):
        (WebCore::WorkerRunLoop::createUniqueId):
        (WebCore::WorkerRunLoop::Task::mode const):
        (WebCore::WorkerRunLoop::isBeingDebugged const):

2021-08-20  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Make mid-word breaking surrogate pair aware
        https://bugs.webkit.org/show_bug.cgi?id=229026

        Reviewed by Antti Koivisto.

        Surrogate pairs represent one "character" (U16_IS_LEAD + U16_IS_TAIL).
        We should never break them half even when CSS tells us to break the word at arbitrary position. 
        This is in preparation for removing the U16_IS_SURROGATE check in canUseForCharacter.

        * layout/formattingContexts/inline/InlineContentBreaker.cpp:
        (WebCore::Layout::InlineContentBreaker::tryBreakingTextRun const):
        * layout/formattingContexts/inline/text/TextUtil.cpp:
        (WebCore::Layout::TextUtil::midWorkdBreak):
        (WebCore::Layout::TextUtil::split): Deleted.
        * layout/formattingContexts/inline/text/TextUtil.h:

2021-08-20  Alan Bujtas  <zalan@apple.com>

        [LFC][Integration] Use the logical width when passing in the constraint for the inline content
        https://bugs.webkit.org/show_bug.cgi?id=228942

        Reviewed by Simon Fraser.

        Let's pass in the logical width (e.g. block box's height in case of vertical writing direction) to the inline line layout.

        * layout/integration/LayoutIntegrationLineLayout.cpp:
        (WebCore::LayoutIntegration::LineLayout::layout):

2021-08-20  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add support for justified non-breaking space
        https://bugs.webkit.org/show_bug.cgi?id=228727

        Reviewed by Antti Koivisto.

        Let's use FontCascade::expansionOpportunityCount to figure out the number of expansion counts in a run.
        It helps with finding non-breakable space in an otherwise non-whitespace content (foo&nbsp;bar where the contet forms one run but the because
        of the non-breakable _space_ in the middle, it also produces an expansion opportunity).
        This patch moves all the expansion handling over to Line::applyRunExpansion as we anyway need to walk the content to find such spaces (i.e. not worth trying to pre-compute them).

        * layout/formattingContexts/inline/InlineLine.cpp:
        (WebCore::Layout::Line::applyRunExpansion):
        (WebCore::Layout::Line::Run::Run):
        (WebCore::Layout::Line::Run::expand):
        (WebCore::Layout::Line::Run::visuallyCollapseTrailingWhitespace):
        (WebCore::Layout::Line::Run::setExpansionBehavior): Deleted.
        (WebCore::Layout::Line::Run::expansionBehavior const): Deleted.
        (WebCore::Layout::Line::Run::setHorizontalExpansion): Deleted.
        * layout/formattingContexts/inline/InlineLine.h:
        (WebCore::Layout::Line::Run::expansion const):
        (WebCore::Layout::Line::Run::setExpansion):
        (WebCore::Layout::Line::Run::hasExpansionOpportunity const): Deleted.
        (WebCore::Layout::Line::Run::expansionOpportunityCount const): Deleted.
        * layout/integration/LayoutIntegrationCoverage.cpp:
        (WebCore::LayoutIntegration::canUseForCharacter):
        (WebCore::LayoutIntegration::canUseForText):
        (WebCore::LayoutIntegration::canUseForFontAndText):
        (WebCore::LayoutIntegration::canUseForStyle):

2021-08-20  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] LineBox provides redundant geometry information
        https://bugs.webkit.org/show_bug.cgi?id=228050

        Reviewed by Sam Weinig.

        LineBoxGeometry class provides the line's geometry. This is also in preparation for making LineBox a non-persistent type of structure.

        * layout/formattingContexts/inline/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::computeGeometryForLineContent):
        * layout/formattingContexts/inline/InlineFormattingGeometry.cpp:
        (WebCore::Layout::LineBoxBuilder::build):
        (WebCore::Layout::LineBoxBuilder::constructAndAlignInlineLevelBoxes):
        (WebCore::Layout::LineBoxBuilder::computeLineBoxHeightAndAlignInlineLevelBoxesVertically):
        (WebCore::Layout::InlineFormattingGeometry::verticallyAdjustedLineForLineContent const):
        (WebCore::Layout::InlineFormattingGeometry::lineBoxForLineContent const): Deleted.
        * layout/formattingContexts/inline/InlineFormattingGeometry.h:
        * layout/formattingContexts/inline/InlineLineBox.cpp:
        (WebCore::Layout::LineBox::LineBox):
        (WebCore::Layout::m_rootInlineBox): Deleted.
        * layout/formattingContexts/inline/InlineLineBox.h:
        (WebCore::Layout::LineBox::logicalRect const): Deleted.
        (WebCore::Layout::LineBox::alignmentBaseline const): Deleted.
        (WebCore::Layout::LineBox::setLogicalHeight): Deleted.
        * layout/integration/LayoutIntegrationInlineContentBuilder.cpp:
        (WebCore::LayoutIntegration::InlineContentBuilder::createDisplayNonRootInlineBoxes const):

2021-08-20  Wenson Hsieh  <wenson_hsieh@apple.com>

        Followup to <trac.webkit.org/r281288>
        https://bugs.webkit.org/show_bug.cgi?id=229269
        rdar://81349236

        Reviewed by Jer Noble.

        Make two minor adjustments after the changes in r281288:

        1.  Rename `keyPathsForValuesAffectingValueCanBeginTouchBarScrubbing` to just
            `keyPathsForValuesAffectingCanBeginTouchBarScrubbing`, since the Objective-C property name is
            `-canBeginTouchBarScrubbing` rather than `-valueCanBeginTouchBarScrubbing`.

        2.  After fixing (1), the implementation of this method is no longer dead code, so we'll to make sure that the
            `NSSet` we create and return contains valid Objective-C objects (i.e. NSString instead of `const char*`) --
            in particular, this affects `"contentDuration"`.

        * platform/mac/WebPlaybackControlsManager.mm:
        (+[WebPlaybackControlsManager keyPathsForValuesAffectingCanBeginTouchBarScrubbing]):
        (+[WebPlaybackControlsManager keyPathsForValuesAffectingValueCanBeginTouchBarScrubbing]): Deleted.

2021-08-20  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        REGRESSION(r274166): [GTK] It broke run-javascriptcore-tests causing all tests to use lot of memory
        https://bugs.webkit.org/show_bug.cgi?id=229321

        Unreviewed, reverting r274166 because it caused JSC tests to use too much memory.

        Reverted changeset:
                "[GTK] Reenable -fvisibility=hidden"
                https://bugs.webkit.org/show_bug.cgi?id=181916
                https://commits.webkit.org/r274166

        Covered by existing tests.

        * PlatformGTK.cmake:
        * dom/EventTarget.cpp:
        * dom/EventTarget.h:

2021-08-20  Dean Jackson  <dino@apple.com>

        [WebXR] A session with only one view should cover the full screen
        https://bugs.webkit.org/show_bug.cgi?id=229110
        <rdar://problem/81940621>

        Reviewed by Tim Horton.

        If we get into the state with an immersive session and only one view,
        we should treat that view as the full width. This situation should never
        happen with a real headset, but can be found in testing scenarios.

        Test: http/wpt/webxr/xrViewport_singleView_valid.https.html

        * Modules/webxr/WebXRWebGLLayer.cpp:
        (WebCore::WebXRWebGLLayer::computeViewports): Add test for only one
        view and assume it is the left eye.

2021-08-20  Aditya Keerthi  <akeerthi@apple.com>

        [macOS] Crash when painting <meter> with large scale
        https://bugs.webkit.org/show_bug.cgi?id=229273
        rdar://81219669

        Reviewed by Wenson Hsieh.

        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintMeter):

        Draw the cell into an image buffer to avoid an assertion beneath WebKit.

2021-08-20  Patrick Angle  <pangle@apple.com>

        Release assert in ScriptController::canExecuteScripts via WebCore::WebSocket::didReceiveMessage
        https://bugs.webkit.org/show_bug.cgi?id=229301

        Reviewed by Ryosuke Niwa.

        Test: http/tests/websocket/tests/hybi/inspector/send-and-recieve-debugger.html

        `WebCore::WebSocket::didReceiveMessage` and other functions that fire JS events may be called while the
        `WebSocketChannel` is being resumed, but it is not yet safe to evaluate JavaScript during resuming. This was
        already accounted for with some events like errors and closing, but it holds true for all events. We should
        delay firing these events as well.

        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::didConnect):
        (WebCore::WebSocket::didReceiveMessage):
        (WebCore::WebSocket::didReceiveBinaryData):

2021-08-20  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r281307.
        https://bugs.webkit.org/show_bug.cgi?id=229336

        broke layout tests

        Reverted changeset:

        "[IFC][Integration] Enable non-auto line-break values"
        https://bugs.webkit.org/show_bug.cgi?id=228842
        https://commits.webkit.org/r281307

2021-08-20  Alan Bujtas  <zalan@apple.com>

        [IFC] Undo incorrect InlineTextBox -> LegacyInlineTextBox renaming
        https://bugs.webkit.org/show_bug.cgi?id=229081

        Reviewed by Antti Koivisto.

        * layout/formattingContexts/inline/text/TextUtil.h:
        * layout/layouttree/LayoutBox.h:
        (WebCore::Layout::Box::isInlineTextBox const):
        * layout/layouttree/LayoutInlineTextBox.cpp:
        (WebCore::Layout::InlineTextBox::InlineTextBox):

2021-08-20  Antti Koivisto  <antti@apple.com>

        [LFC][Integration] Enable full underline support
        https://bugs.webkit.org/show_bug.cgi?id=229322

        Reviewed by Alan Bujtas.

        We can now paint all underlines.

        * layout/integration/LayoutIntegrationCoverage.cpp:
        (WebCore::LayoutIntegration::printReason):
        (WebCore::LayoutIntegration::canUseForStyle):
        * layout/integration/LayoutIntegrationCoverage.h:
        * layout/integration/LayoutIntegrationInlineContent.cpp:
        (WebCore::LayoutIntegration::InlineContent::iteratorForRun const):
        (WebCore::LayoutIntegration::InlineContent::iteratorForTextRun const):
        * layout/integration/LayoutIntegrationInlineContent.h:
        * layout/integration/LayoutIntegrationLineLayout.cpp:
        (WebCore::LayoutIntegration::LineLayout::paint):

2021-08-20  Alan Bujtas  <zalan@apple.com>

        [IFC][Integration] Enable custom hyphen strings
        https://bugs.webkit.org/show_bug.cgi?id=229049

        Reviewed by Antti Koivisto.

        This was most likely the case of non-primary font handling in SLL. It just works in IFC.

        * layout/integration/LayoutIntegrationCoverage.cpp:
        (WebCore::LayoutIntegration::canUseForStyle):

2021-08-20  Tim Nguyen  <ntim@apple.com>

        Initial implementation of inert subtrees
        https://bugs.webkit.org/show_bug.cgi?id=110952

        Reviewed by Antti Koivisto.

        Currently covers:
        - Blocking focus & selecting
        - aria-hidden like behaviour

        Hit testing/event retargeting will be covered by https://bugs.webkit.org/show_bug.cgi?id=229330 pending a spec issue

        Relevant WPT enabled. More testing coverage will be provided with the inert attribute.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::isAXHidden const):
        * dom/Element.cpp:
        (WebCore::Element::isFocusable const):
        * dom/Node.cpp:
        (WebCore::Node::canStartSelection const):
        (WebCore::Node::isInert const):
        * dom/Node.h:

2021-08-20  Alan Bujtas  <zalan@apple.com>

        [LFC][Integration] line-clamp is an unsupported CSS property
        https://bugs.webkit.org/show_bug.cgi?id=228794

        Reviewed by Simon Fraser.

        Let's bail out on -webkit-line-clamp instead of the presence of a deprecated flex box. While line clamping requires legacy line layout, regular flex item content is fine with either line layout codepaths. 

        * layout/integration/LayoutIntegrationCoverage.cpp:
        (WebCore::LayoutIntegration::printReason):
        (WebCore::LayoutIntegration::canUseForLineLayoutWithReason):
        * layout/integration/LayoutIntegrationCoverage.h:

2021-08-20  Alan Bujtas  <zalan@apple.com>

        [IFC][Integration] Enable non-auto line-break values
        https://bugs.webkit.org/show_bug.cgi?id=228842

        Reviewed by Antti Koivisto.

        IFC already supports line-break.

        * layout/integration/LayoutIntegrationCoverage.cpp:
        (WebCore::LayoutIntegration::canUseForStyle):

2021-08-20  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add support for -webkit-nbsp-mode: space
        https://bugs.webkit.org/show_bug.cgi?id=228805

        Reviewed by Antti Koivisto.

        Treat non-breaking space as regular space.
        TextUtil::findNextBreakablePosition already covers the "find the soft wrapping opportunity" part.

        e.g.
            <div style="-webkit-nbsp-mode: space">1&nbsp2</div>
          produces 3 InlineTextItem objects as follows
            [1][whitespace][2]
          as opposed to just 1 [1non-breakable-space2]

        * layout/formattingContexts/inline/InlineTextItem.cpp:
        (WebCore::Layout::moveToNextNonWhitespacePosition):
        (WebCore::Layout::InlineTextItem::createAndAppendTextItems):
        * layout/integration/LayoutIntegrationCoverage.cpp:
        (WebCore::LayoutIntegration::canUseForStyle):

2021-08-20  Philippe Normand  <pnormand@igalia.com>

        REGRESSION(r280732) [GStreamer] fast/mediastream/getDisplayMedia-max-constraints1.html and other are failing
        https://bugs.webkit.org/show_bug.cgi?id=228941

        Reviewed by Youenn Fablet.

        The GStreamer mock display capture source is now wrapped in another RealtimeMediaSource in
        order to avoid a spurious setSize() call from the RealtimeVideoSource constructor that would
        then prevent the mock source to ensure its size matches the intrinsic size.

        For the non-mock display capture source, we now ensure the size matches the intrinsic size
        whenever the capture settings have changed.

        * platform/mediastream/RealtimeVideoCaptureSource.h:
        * platform/mediastream/gstreamer/GStreamerVideoCaptureSource.cpp:
        (WebCore::GStreamerVideoCaptureSource::settingsDidChange):
        * platform/mediastream/gstreamer/MockRealtimeVideoSourceGStreamer.cpp:
        (WebCore::MockDisplayCaptureSourceGStreamer::create):
        (WebCore::MockDisplayCaptureSourceGStreamer::capabilities):
        (WebCore::MockDisplayCaptureSourceGStreamer::settings):
        * platform/mediastream/gstreamer/MockRealtimeVideoSourceGStreamer.h:
        * platform/mock/MockRealtimeMediaSourceCenter.cpp:
        * platform/mock/MockRealtimeVideoSource.cpp:
        (WebCore::MockRealtimeVideoSource::generateFrame):

2021-08-20  Myles C. Maxfield  <mmaxfield@apple.com>

        GlyphBuffer can become inconsistent with its backing string
        https://bugs.webkit.org/show_bug.cgi?id=229064

        Reviewed by Alan Bujtas.

        This is split out from https://bugs.webkit.org/show_bug.cgi?id=215643.

        Before shaping, the glyphs in the GlyphBuffer need to match one-to-one with code units in the string.
        We iterate over the string, adding glyphs into the GlyphBuffer, but there was one early "continue"
        in the loop that skips the add() call.

        Because this patch adds ASSERT()s, this is actually covered by existing tests.

        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::commitCurrentFontRange):
        (WebCore::addToGlyphBuffer):
        (WebCore::WidthIterator::advanceInternal):
        * platform/graphics/WidthIterator.h:

2021-08-20  Tim Nguyen  <ntim@apple.com>

        Ensure ancestors with opacity don't affect top layer elements
        https://bugs.webkit.org/show_bug.cgi?id=229317

        Reviewed by Antti Koivisto.

        Test: imported/w3c/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/top-layer-parent-opacity.html

        Associated WPT PR: https://github.com/web-platform-tests/wpt/pull/30104

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::compositingOpacity const):

2021-08-20  Youenn Fablet  <youenn@apple.com>

        Add support for RTCPeerConnection.canTrickleIceCandidates
        https://bugs.webkit.org/show_bug.cgi?id=229287

        Reviewed by Eric Carlson.

        Add support for https://w3c.github.io/webrtc-pc/#dom-rtcpeerconnection-cantrickleicecandidates.
        Return null in case connection is closed or setRemoteDescription was never called successfully.
        Add binding code to get the value from webrtc backend.
        Covered by rebased tests.

        * Modules/mediastream/PeerConnectionBackend.h:
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::canTrickleIceCandidates const):
        * Modules/mediastream/RTCPeerConnection.h:
        * Modules/mediastream/RTCPeerConnection.idl:
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::canTrickleIceCandidates const):
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h:
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::LibWebRTCPeerConnectionBackend::canTrickleIceCandidates const):
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.h:

2021-08-19  Tim Nguyen  <ntim@apple.com>

        Implement top layer rendering bits
        https://bugs.webkit.org/show_bug.cgi?id=84796

        Reviewed by Simon Fraser.

        Enabled relevant WPTs. Some WPTs need extra layout work.

        * dom/Document.cpp:
        (WebCore::Document::addToTopLayer):
        (WebCore::Document::removeFromTopLayer):
        * dom/Element.cpp:
        (WebCore::Element::isInTopLayerWillChange):
        (WebCore::Element::isInTopLayerDidChange):
        * dom/Element.h:
        * rendering/RenderLayer.cpp:
        (WebCore::canCreateStackingContext):
        (WebCore::RenderLayer::stackingContext const):
        (WebCore::RenderLayer::rebuildZOrderLists):
        (WebCore::RenderLayer::collectLayers):
        (WebCore::RenderLayer::enclosingAncestorForPosition const):
        (WebCore::RenderLayer::establishesTopLayer const):
        (WebCore::RenderLayer::establishesTopLayerWillChange):
        (WebCore::RenderLayer::establishesTopLayerDidChange):
        * rendering/RenderLayer.h:

2021-08-19  Antti Koivisto  <antti@apple.com>

        [:has() pseudo-class] Basic support
        https://bugs.webkit.org/show_bug.cgi?id=228894

        Reviewed by Simon Fraser.

        This patch adds basic support for :has() pseudo-class, https://drafts.csswg.org/selectors/#has-pseudo.
        The initial implementation is very inefficient. There is no support for invalidation yet.

        The feature is disabled by default.

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::selectorText const):

        Serialization.

        * css/CSSSelector.h:
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne const):

        Selector matching using nested SelectorChecker.

        * css/SelectorPseudoClassAndCompatibilityElementMap.in:
        * css/parser/CSSParserContext.cpp:
        (WebCore::operator==):
        (WebCore::add):
        * css/parser/CSSParserContext.h:
        * css/parser/CSSParserSelector.h:
        (WebCore::CSSParserSelector::setPseudoClassType):
        * css/parser/CSSSelectorParser.cpp:
        (WebCore::CSSSelectorParser::consumeForgivingSelectorList):

        Add a template version of the forgiving parsing function.

        (WebCore::CSSSelectorParser::consumeForgivingComplexSelectorList):

        Use it for complex selector lists.

        (WebCore::CSSSelectorParser::consumeForgivingRelativeSelectorList):

        And the new relative selector lists.

        (WebCore::CSSSelectorParser::consumeRelativeSelector):

        Parse relative selectors like "> foo".

        (WebCore::CSSSelectorParser::consumePseudo):
        (WebCore::CSSSelectorParser::consumeComplexForgivingSelectorList): Deleted.
        * css/parser/CSSSelectorParser.h:
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::addPseudoClassType):

        No compiler support yet.

2021-08-19  Myles C. Maxfield  <mmaxfield@apple.com>

        The fast text codepath does not handle run initial advances
        https://bugs.webkit.org/show_bug.cgi?id=227979

        Reviewed by Alan Bujtas.

        This is the next step to delete the complex text codepath from Cocoa ports.

        The initial advance contributes to the layout width of text. Its purpose is to move
        all the visually successive glyphs to the right. For the leftmost run, WidthIterator
        saves this initial advance to the GlyphBuffer, because knowing it is necessary to
        compute the paint location of glyphs (inside GlyphBuffer::flatten()). For all other
        runs other than the leftmost run, those runs' initial advance is added to the advance
        width of whichever glyph ends up being just to the left of the run. In LTR, this is
        the last glyph of the last (logical) run, whereas in RTL this is the first glyph of
        the next (logical) run.

        Because this is just adding infrastructure, it doesn't add any tests yet. This will be
        tested when we delete the complex text codepath.

        * platform/graphics/ComplexTextController.h: Because we're going to stop using
        ComplexTextController, we should move this (presumably helpful) comment somewhere
        where it will be accessible to the Cocoa ports. This would be GlyphBuffer::flatten().
        * platform/graphics/Font.cpp:
        (WebCore::Font::applyTransforms const): Return the initial advance.
        * platform/graphics/Font.h: Ditto.
        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::widthOfTextRange const):
        (WebCore::FontCascade::widthForSimpleText const): Make sure that the initial advance
        contributes to layout width.
        (WebCore::FontCascade::layoutSimpleText const): The initial advance is actually NOT
        supposed to point directly to the first glyph's paint position. See
        https://bugs.webkit.org/show_bug.cgi?id=228180.
        (WebCore::FontCascade::drawEmphasisMarks const):
        * platform/graphics/GlyphBuffer.h:
        (WebCore::GlyphBuffer::flatten):
        (WebCore::GlyphBuffer::isFlattened const):
        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::applyFontTransforms): Return the initial advance.
        (WebCore::expandWithInitialAdvance):
        (WebCore::WidthIterator::applyInitialAdvance): This implements the logic above, where
        the initial advance of non-leftmost runs get added to the visually previous glyph's
        advance. For LTR, we can just add it directly to the previously-recorded glyph advance.
        However, for RTL, we have to save the initial advance to a variable, which is named
        m_leftoverInitialAdvance, and apply it when we encounter the next run. This is because
        WidthIterator encounters run in logical order.
        (WebCore::WidthIterator::commitCurrentFontRange):
        (WebCore::WidthIterator::finalize): For RTL, if the last run has an initial advance,
        we need to save it to the GlyphBuffer's initial advance field. We know if the last run
        has an initial advance because there will still be data in m_leftoverInitialAdvance
        left over.
        * platform/graphics/WidthIterator.h:
        * platform/graphics/coretext/FontCoreText.cpp:
        (WebCore::Font::applyTransforms const): Return the initial advance.

2021-08-19  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Stop honoring any dot-prefixed font names
        https://bugs.webkit.org/show_bug.cgi?id=228177

        Reviewed by Sam Weinig.

        Dot-prefixed fonts are intentionally unsupported. We should stop supporting them.
        If authors want to access the various system fonts, they can use system-ui,
        ui-serif, ui-monospace, or ui-rounded.

        Test: fast/text/font-lookup-dot-prefix-case-sensitive.html

        * platform/cocoa/VersionChecks.h:
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::isDotPrefixedForbiddenFont):
        (WebCore::platformFontLookupWithFamily):

2021-08-19  Alan Bujtas  <zalan@apple.com>

        [IFC][Integration] The root inlinebox's style is always the IFC's root style
        https://bugs.webkit.org/show_bug.cgi?id=228062

        Reviewed by Antti Koivisto.

        This is in preparation for keeping the inline box structure private to the layout code.

        * layout/integration/LayoutIntegrationInlineContentBuilder.cpp:
        (WebCore::LayoutIntegration::InlineContentBuilder::computeLineLevelVisualAdjustmentsForRuns const):

2021-08-19  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Stop treating the system font as a non-variable font
        https://bugs.webkit.org/show_bug.cgi?id=228176

        Reviewed by Sam Weinig.

        Modern versions of macOS and iOS can treat the system font as a variable font,
        and be able to apply weights like "342" instead of just "300" or "400".

        Tests: fast/text/variable-system-font-2.html
               fast/text/variable-system-font.html

        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::preparePlatformFont):

2021-08-19  Jean-Yves Avenard  <jya@apple.com>

        Touchbar not showing time scrubbing
        https://bugs.webkit.org/show_bug.cgi?id=229269
        rdar://81349236

        Reviewed by Jer Noble.

        AVKit uses canSeek to determine when to show the time scrubber
        in the touch bar. This was a synthesized method determined on weither the video
        is seekable and has a seekable range set.
        Should the value of either boolean change which would impact the final value of
        [AVTouchBarPlaybackControlsControlling canSeek] , no observers would be called.
        Add the appropriate obj-c methods to explicitly set a dependency between properties
        willChange/didChange.
        Been unable to reproduce the problem programatically, the issue is highly timing
        dependent.
        An API test will be added with https://bugs.webkit.org/show_bug.cgi?id=229286.

        * platform/mac/WebPlaybackControlsManager.mm:
        (+[WebPlaybackControlsManager keyPathsForValuesAffectingCanSeek]):
        (+[WebPlaybackControlsManager keyPathsForValuesAffectingContentDuration]):
        (-[WebPlaybackControlsManager setSeekableTimeRanges:]):
        (+[WebPlaybackControlsManager keyPathsForValuesAffectingValueCanBeginTouchBarScrubbing]):

2021-08-19  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Remove redundant inlineBoxEndSet in InlineFormattingContext::computeGeometryForLineContent
        https://bugs.webkit.org/show_bug.cgi?id=228054

        Reviewed by Antti Koivisto.

        It's not used anymore.

        * layout/formattingContexts/inline/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::computeGeometryForLineContent):

2021-08-19  Chris Dumez  <cdumez@apple.com>

        Implement Crypto.randomUUID()
        https://bugs.webkit.org/show_bug.cgi?id=229240

        Reviewed by Geoff Garen.

        Implement Crypto.randomUUID():
        - https://wicg.github.io/uuid/#extensions-to-the-crypto-interface

        Chrome already implements this and Firefox seems to be working on it
        (https://bugzilla.mozilla.org/show_bug.cgi?id=1705264).

        No new tests, rebaselined existing tests.

        * page/Crypto.cpp:
        (WebCore::Crypto::randomUUID const):
        * page/Crypto.h:
        * page/Crypto.idl:

2021-08-19  Simon Fraser  <simon.fraser@apple.com>

        Remove unused RenderLayerCompositor member variable
        https://bugs.webkit.org/show_bug.cgi?id=229257

        Reviewed by Alan Bujtas.

        m_inPostLayoutUpdate was unused.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateCompositingLayers):
        * rendering/RenderLayerCompositor.h:

2021-08-19  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Remove redundant LineBox functions
        https://bugs.webkit.org/show_bug.cgi?id=228046

        Reviewed by Sam Weinig.

        The line box's contentLogicalWidth always matches the root inlinebox's logical width. 

        * layout/formattingContexts/inline/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::computeGeometryForLineContent):
        * layout/formattingContexts/inline/InlineFormattingGeometry.cpp:
        (WebCore::Layout::LineBoxBuilder::constructAndAlignInlineLevelBoxes):
        (WebCore::Layout::LineBoxBuilder::computeLineBoxHeightAndAlignInlineLevelBoxesVertically):
        * layout/formattingContexts/inline/InlineLineBox.cpp:
        (WebCore::Layout::LineBox::LineBox):
        * layout/formattingContexts/inline/InlineLineBox.h:
        (WebCore::Layout::LineBox::logicalRect const):
        (WebCore::Layout::LineBox::logicalWidth const): Deleted.
        (WebCore::Layout::LineBox::logicalHeight const): Deleted.
        (WebCore::Layout::LineBox::logicalTopLeft const): Deleted.
        (WebCore::Layout::LineBox::logicalSize const): Deleted.
        (WebCore::Layout::LineBox::contentLogicalWidth const): Deleted.

2021-08-19  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Remove support for the meaningful tap heuristic
        https://bugs.webkit.org/show_bug.cgi?id=229298
        rdar://82130066

        Reviewed by Tim Horton.

        See WebKit ChangeLog for more details.

        * page/ChromeClient.h:
        (WebCore::ChromeClient::didHandleOrPreventMouseDownOrMouseUpEvent): Deleted.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::EventHandler::handleMouseDoubleClickEvent):
        (WebCore::EventHandler::handleMouseReleaseEvent):

2021-08-19  Alan Bujtas  <zalan@apple.com>

        [Line layout] "zero width space" (U+200B) is a breaking space
        https://bugs.webkit.org/show_bug.cgi?id=227858

        Reviewed by Antti Koivisto.

        This is a workaround for handling mismatching prior-context content in break iterators.

        * layout/formattingContexts/inline/InlineLineBuilder.cpp:
        (WebCore::Layout::endsWithSoftWrapOpportunity):

2021-08-19  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add support for negative horizontal margin (inline box)
        https://bugs.webkit.org/show_bug.cgi?id=227837

        Reviewed by Antti Koivisto.

        When building up the line for line breaking, each inline item is placed adjacent with no gaps
        in-between the neighboring entries. They are considered atomic with their margins, padding, borders and content width.
        Later when we form the inline runs out of these entries, we offset them by their horizontal margin values. 

        * layout/formattingContexts/inline/InlineLine.cpp:
        (WebCore::Layout::Line::appendInlineBoxStart):
        * layout/integration/LayoutIntegrationCoverage.cpp:
        (WebCore::LayoutIntegration::printReason):
        (WebCore::LayoutIntegration::canUseForChild):
        * layout/integration/LayoutIntegrationCoverage.h:

2021-08-19  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add support for overflow-wrap: anywhere
        https://bugs.webkit.org/show_bug.cgi?id=227695

        Reviewed by Antti Koivisto.

        Adjust the line breaking logic in IFC to support "overflow-wrap: anywhere".
        From the line breaking point of view, "anywhere" and "break-word" work the same way
        (i.e. an unbreakable content can be broken at an arbitrary position if there are no other, previous break points in the line).

        https://drafts.csswg.org/css-text-3/#overflow-wrap-property

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator OverflowWrap const):
        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):
        * layout/formattingContexts/inline/InlineContentBreaker.cpp:
        (WebCore::Layout::InlineContentBreaker::wordBreakBehavior const):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::breakWords const):
        * rendering/style/RenderStyleConstants.cpp:
        (WebCore::operator<<):
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleRareInheritedData.h:

2021-08-19  Alex Christensen  <achristensen@webkit.org>

        Remove more non-inclusive language from Source
        https://bugs.webkit.org/show_bug.cgi?id=229230

        Reviewed by Myles C. Maxfield.

        No change in behavior.

        * WebCore.order:
        * features.json:

2021-08-19  Simon Fraser  <simon.fraser@apple.com>

        Rename Element::clientRect() which does not return a value in web-exposed "client" coordinates
        https://bugs.webkit.org/show_bug.cgi?id=229243

        Reviewed by Wenson Hsieh.

        The result of Element::clientRect() is in the coordinate space of the root view,
        not in the space of the Element's Frame, so does not match the other functions on Element
        with "client" in the name.

        Rename to Element::boundingBoxInRootViewCoordinates() for clarity.

        * dom/Element.cpp:
        (WebCore::Element::boundingBoxInRootViewCoordinates const):
        (WebCore::Element::clientRect const): Deleted.
        * dom/Element.h:
        * html/MediaElementSession.cpp:
        (WebCore::isElementMainContentForPurposesOfAutoplay):
        (WebCore::isElementRectMostlyInMainFrame):
        * page/Page.cpp:
        (WebCore::Page::editableElementsInRect const):

2021-08-13  Tim Nguyen  <ntim@apple.com>

        Top layer: handle display: contents and non out-of-flow position values
        https://bugs.webkit.org/show_bug.cgi?id=229093

        Reviewed by Simon Fraser.

        From: https://fullscreen.spec.whatwg.org/#new-stacking-layer
        If its specified display property is contents, it computes to block.
        If its specified position property is not absolute or fixed, it computes to absolute.

        Test: imported/w3c/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/modal-dialog-display-contents.html

        * style/StyleAdjuster.cpp:
        (WebCore::Style::Adjuster::adjust const):
        (WebCore::Style::Adjuster::adjustDisplayContentsStyle const):

2021-08-19  Simon Fraser  <simon.fraser@apple.com>

        Rename EventHandler::sendScrollEvent() to scheduleScrollEvent() since the event is not sent synchronously
        https://bugs.webkit.org/show_bug.cgi?id=229256

        Reviewed by Geoffrey Garen.

        Rename EventHandler::sendScrollEvent() and FrameView::sendScrollEvent()
        to scheduleScrollEvent() since the event dispatch happens via the next rendering update.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::scheduleScrollEvent):
        (WebCore::EventHandler::sendScrollEvent): Deleted.
        * page/EventHandler.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::scrollPositionChanged):
        (WebCore::FrameView::scheduleScrollEvent):
        (WebCore::FrameView::sendScrollEvent): Deleted.
        * page/FrameView.h:

2021-08-19  Kyle Piddington  <kpiddington@apple.com>

        WebGL via Metal experimental feature does not correctly toggle metal backend
        https://bugs.webkit.org/show_bug.cgi?id=229267
        <rdar://81855735>

        Reviewed by Dean Jackson.

        GraphicsContextGLAttributes defines 'useMetal' as 'true' by default.
        Since this branch was only checking if Metal was enabled via the
        setting, rather than checking the status of the flag, the metal backend
        was never disabled, even when requested.

        Tests: webgl/webgl-metal-disabled.html
               webgl/webgl-metal-enabled.html

        * WebCore.xcodeproj/project.pbxproj:
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::create):
        * testing/Internals.cpp:
        (WebCore::Internals::requestedMetal):
        * testing/Internals.h:
        * testing/Internals.idl:
        * testing/Internals.mm:
        (WebCore::Internals::platformSupportsMetal):

2021-08-19  Simon Fraser  <simon.fraser@apple.com>

        Avoid DOMRect overhead in VTTRegion
        https://bugs.webkit.org/show_bug.cgi?id=229249

        Reviewed by Eric Carlson.

        Use Element::boundingClientRect() instead of Element::getBoundingClientRect() to
        avoid DOMRect overhead. No behavior change.

        * html/track/VTTRegion.cpp:
        (WebCore::VTTRegion::displayLastTextTrackCueBox):
        (WebCore::VTTRegion::willRemoveTextTrackCueBox):

2021-08-19  Antti Koivisto  <antti@apple.com>

        TextDecorationPainter should not depend on LegacyInlineTextBox
        https://bugs.webkit.org/show_bug.cgi?id=228814

        Reviewed by Alan Bujtas.

        Use the inline iterator instead.

        * layout/integration/LayoutIntegrationLineIterator.h:
        (WebCore::LayoutIntegration::LineIterator::isFirst const):
        (WebCore::LayoutIntegration::PathLine::baselineType const):
        * layout/integration/LayoutIntegrationLineIteratorLegacyPath.h:
        (WebCore::LayoutIntegration::LineIteratorLegacyPath::baselineType const):
        * layout/integration/LayoutIntegrationLineIteratorModernPath.h:
        (WebCore::LayoutIntegration::LineIteratorModernPath::baselineType const):
        * layout/integration/LayoutIntegrationRunIterator.cpp:
        (WebCore::LayoutIntegration::RunIterator::line const):
        (WebCore::LayoutIntegration::PathRun::line const):
        (WebCore::LayoutIntegration::PathRun::style const):
        (WebCore::LayoutIntegration::textRunFor):
        * layout/integration/LayoutIntegrationRunIterator.h:
        (WebCore::LayoutIntegration::PathTextRun::renderer const):
        * layout/integration/LayoutIntegrationRunIteratorModernPath.h:
        * rendering/LegacyInlineFlowBox.cpp:
        (WebCore::LegacyInlineFlowBox::maxLogicalBottomForTextDecorationLine const): Deleted.
        (WebCore::LegacyInlineFlowBox::minLogicalTopForTextDecorationLine const): Deleted.
        * rendering/LegacyInlineFlowBox.h:
        * rendering/LegacyInlineTextBox.cpp:
        (WebCore::LegacyInlineTextBox::paintMarkedTextDecoration):
        * rendering/LegacyLineLayout.cpp:
        (WebCore::setLogicalWidthForTextRun):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::enclosingRendererWithTextDecoration const): Deleted.
        * rendering/RenderElement.h:
        * rendering/TextDecorationPainter.cpp:
        (WebCore::TextDecorationPainter::paintTextDecoration):
        * rendering/TextDecorationPainter.h:
        (WebCore::TextDecorationPainter::setTextRunIterator):
        (WebCore::TextDecorationPainter::setInlineTextBox): Deleted.
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::changeAffectsVisualOverflow const):
        * style/InlineTextBoxStyle.cpp:
        (WebCore::isAncestorAndWithinBlock):
        (WebCore::minLogicalTopForTextDecorationLine):
        (WebCore::maxLogicalBottomForTextDecorationLine):

        Moved from LegacyInlineFlowBox.

        (WebCore::enclosingRendererWithTextDecoration):

        Moved from RenderElement.

        (WebCore::computeUnderlineOffset):
        (WebCore::visualOverflowForDecorations):
        * style/InlineTextBoxStyle.h:

2021-08-19  Antti Koivisto  <antti@apple.com>

        Move MarkedTextStyle into StyledMarkedText scope
        https://bugs.webkit.org/show_bug.cgi?id=228956

        Reviewed by Alan Bujtas.

        As StyledMarkedText::Style.
        Also other cleanups and a file rename to match the type.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/LegacyInlineTextBox.cpp:
        (WebCore::LegacyInlineTextBox::paint):
        * rendering/StyledMarkedText.cpp: Renamed from Source/WebCore/rendering/MarkedTextStyle.cpp.
        (WebCore::resolveStyleForMarkedText):
        (WebCore::computeStyleForUnmarkedMarkedText):
        (WebCore::StyledMarkedText::subdivideAndResolve):
        (WebCore::coalesceAdjacent):
        (WebCore::StyledMarkedText::coalesceAdjacentWithEqualBackground):
        (WebCore::StyledMarkedText::coalesceAdjacentWithEqualForeground):
        (WebCore::StyledMarkedText::coalesceAdjacentWithEqualDecorations):
        * rendering/StyledMarkedText.h: Renamed from Source/WebCore/rendering/MarkedTextStyle.h.

2021-08-19  Simon Fraser  <simon.fraser@apple.com>

        Use an OptionSet<MapCoordinatesMode> in place of MapCoordinatesFlags
        https://bugs.webkit.org/show_bug.cgi?id=229170

        Reviewed by Antti Koivisto.

        Replace MapCoordinatesFlags with OptionSet<MapCoordinatesMode>. No behavior
        change.

        * html/HTMLAnchorElement.cpp:
        (WebCore::appendServerMapMousePosition):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::mapLocalToContainer const):
        (WebCore::RenderBox::mapAbsoluteToLocalPoint const):
        * rendering/RenderBox.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::mapAbsoluteToLocalPoint const):
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderFragmentedFlow.cpp:
        (WebCore::RenderFragmentedFlow::mapLocalToContainer const):
        * rendering/RenderFragmentedFlow.h:
        * rendering/RenderGeometryMap.cpp:
        (WebCore::RenderGeometryMap::RenderGeometryMap):
        (WebCore::RenderGeometryMap::pushMappingsToAncestor):
        * rendering/RenderGeometryMap.h:
        (WebCore::RenderGeometryMap::mapCoordinatesFlags const):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::mapLocalToContainer const):
        * rendering/RenderInline.h:
        * rendering/RenderMultiColumnFlow.cpp:
        (WebCore::RenderMultiColumnFlow::mapAbsoluteToLocalPoint const):
        * rendering/RenderMultiColumnFlow.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::absoluteBoundingBoxRect const):
        (WebCore::RenderObject::localToAbsolute const):
        (WebCore::RenderObject::absoluteToLocal const):
        (WebCore::RenderObject::absoluteToLocalQuad const):
        (WebCore::RenderObject::mapLocalToContainer const):
        (WebCore::RenderObject::mapAbsoluteToLocalPoint const):
        (WebCore::RenderObject::localToContainerQuad const):
        (WebCore::RenderObject::localToContainerPoint const):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::localToAbsolute):
        (WebCore::RenderObject::absoluteToLocal):
        (WebCore::RenderObject::localToAbsoluteQuad const):
        * rendering/RenderObjectEnums.h:
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::volumeSliderOffsetFromMuteButton const):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::mapLocalToContainer const):
        (WebCore::RenderView::mapAbsoluteToLocalPoint const):
        * rendering/RenderView.h:
        * rendering/svg/RenderSVGForeignObject.cpp:
        (WebCore::RenderSVGForeignObject::mapLocalToContainer const):
        * rendering/svg/RenderSVGForeignObject.h:
        * rendering/svg/RenderSVGInline.cpp:
        (WebCore::RenderSVGInline::mapLocalToContainer const):
        * rendering/svg/RenderSVGInline.h:
        * rendering/svg/RenderSVGModelObject.cpp:
        (WebCore::RenderSVGModelObject::mapLocalToContainer const):
        * rendering/svg/RenderSVGModelObject.h:
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::mapLocalToContainer const):
        * rendering/svg/RenderSVGRoot.h:
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::mapLocalToContainer const):
        * rendering/svg/RenderSVGText.h:
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::mapLocalToContainer):

2021-08-19  Simon Fraser  <simon.fraser@apple.com>

        Remove duplicate LayerTreeAsText enums and use an OptionSet<>
        https://bugs.webkit.org/show_bug.cgi?id=229226

        Reviewed by Antti Koivisto.

        GraphicsLayerClient had enum LayerTreeAsTextBehaviorFlags and Frame had an anonymous
        enum and typedef unsigned LayerTreeFlags. Clean up by adding LayerTreeAsTextOptions.h
        and using OptionSet<LayerTreeAsTextOptions> everywhere.

        * Headers.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * page/Frame.h:
        * page/PageOverlayController.cpp:
        (WebCore::PageOverlayController::shouldSkipLayerInDump const):
        * page/PageOverlayController.h:
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::dumpLayer const):
        (WebCore::dumpChildren):
        (WebCore::GraphicsLayer::dumpProperties const):
        (WebCore::GraphicsLayer::layerTreeAsText const):
        (showGraphicsLayerTree):
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::dumpLayer):
        (WebCore::GraphicsLayer::layerTreeAsText):
        (WebCore::GraphicsLayer::dumpAdditionalProperties const):
        * platform/graphics/GraphicsLayerClient.h:
        (WebCore::GraphicsLayerClient::shouldSkipLayerInDump const):
        (WebCore::GraphicsLayerClient::shouldDumpPropertyForLayer const):
        * platform/graphics/LayerTreeAsTextOptions.h: Added.
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::dumpAdditionalProperties const):
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::dumpInnerLayer):
        (WebCore::CoordinatedGraphicsLayer::dumpAdditionalProperties const):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::shouldSkipLayerInDump const):
        (WebCore::RenderLayerBacking::shouldDumpPropertyForLayer const):
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::layerTreeAsText):
        * rendering/RenderLayerCompositor.h:
        * testing/Internals.cpp:
        (WebCore::toLayerTreeAsTextOptions):
        (WebCore::Internals::layerTreeAsText const):
        (WebCore::Internals::pageOverlayLayerTreeAsText const):
        (WebCore::toLayerTreeFlags): Deleted.
        * testing/MockPageOverlayClient.cpp:
        (WebCore::MockPageOverlayClient::layerTreeAsText):
        * testing/MockPageOverlayClient.h:

2021-08-19  Simon Fraser  <simon.fraser@apple.com>

        Use an enum for the forVisitedLink argument to BuilderState::colorFromPrimitiveValue()
        https://bugs.webkit.org/show_bug.cgi?id=229224

        Reviewed by Alex Christensen.

        Convert the bool argument to an enum class.

        * css/makeprop.pl:
        (colorFromPrimitiveValue):
        * style/StyleBuilderCustom.h:
        (WebCore::Style::BuilderCustom::applyValueCaretColor):
        (WebCore::Style::BuilderCustom::applyValueStrokeColor):
        * style/StyleBuilderState.cpp:
        (WebCore::Style::BuilderState::colorFromPrimitiveValue const):
        * style/StyleBuilderState.h:

2021-08-19  Youenn Fablet  <youenn@apple.com>

        RTCPeerConnection::m_transceiverSet does not need to be allocated separately from its RTCPeerConnection
        https://bugs.webkit.org/show_bug.cgi?id=229183

        Reviewed by Eric Carlson.

        No change of behavior.

        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::addTrack):
        (WebCore::RTCPeerConnection::removeTrack):
        (WebCore::RTCPeerConnection::getStats):
        (WebCore::RTCPeerConnection::doClose):
        (WebCore::RTCPeerConnection::addInternalTransceiver):
        (WebCore::RTCPeerConnection::getSenders const):
        (WebCore::RTCPeerConnection::getReceivers const):
        (WebCore::RTCPeerConnection::getTransceivers const):
        * Modules/mediastream/RTCPeerConnection.h:

2021-08-19  Tim Nguyen  <ntim@apple.com>

        Port HTMLDetailsElement to use modern event handling code
        https://bugs.webkit.org/show_bug.cgi?id=228863

        Reviewed by Antti Koivisto.

        No behaviour change, follows: https://html.spec.whatwg.org/#details-notification-task-steps

        * html/HTMLDetailsElement.cpp:
        (WebCore::HTMLDetailsElement::parseAttribute):
        (WebCore::HTMLDetailsElement::toggleOpen):
        (WebCore::detailToggleEventSender): Deleted.
        (WebCore::HTMLDetailsElement::~HTMLDetailsElement): Deleted.
        (WebCore::HTMLDetailsElement::dispatchPendingEvent): Deleted.
        * html/HTMLDetailsElement.h:

2021-08-19  Tim Nguyen  <ntim@apple.com>

        Implement ::backdrop pseudo element
        https://bugs.webkit.org/show_bug.cgi?id=227801

        Reviewed by Antti Koivisto.

        This adds UA styles, RenderTreeBuilder support and WebInspector support for ::backdrop.
        Some imported blink tests now start passing, some still need proper top layer support.

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::pseudoId):
        * css/CSSSelector.h:
        * css/SelectorPseudoElementTypeMap.in:
        * css/dialog.css:
        (dialog::backdrop):
        (::backdrop):
        * inspector/agents/InspectorCSSAgent.cpp:
        (WebCore::protocolValueForPseudoId):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::backdropRenderer const):
        (WebCore::RenderElement::setBackdropRenderer):
        * rendering/RenderElement.h:
        * rendering/RenderObject.h:
        * rendering/style/RenderStyleConstants.cpp:
        (WebCore::operator<<):
        * rendering/style/RenderStyleConstants.h:
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::destroyAndCleanUpAnonymousWrappers):
        * rendering/updating/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::updateAfterDescendants):
        * rendering/updating/RenderTreeUpdaterGeneratedContent.cpp:
        (WebCore::RenderTreeUpdater::GeneratedContent::updateBackdropRenderer):
        * rendering/updating/RenderTreeUpdaterGeneratedContent.h:
        * style/StyleTreeResolver.cpp:
        (WebCore::Style::TreeResolver::resolvePseudoStyle):

2021-08-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        document.hasFocus() returns true for unfocused pages
        https://bugs.webkit.org/show_bug.cgi?id=229139

        Reviewed by Adrian Perez de Castro.

        We are always claiming to be focused when the document in the active window even if the page is not actually
        focused.

        * dom/Document.cpp:
        (WebCore::Document::hasFocus const): Check also that page is focused.

2021-08-19  Youenn Fablet  <youenn@apple.com>

        Rename MediaPlayer::setVisible to MediaPlayer::setPageIsVisible
        https://bugs.webkit.org/show_bug.cgi?id=228837
        <rdar://problem/81857023>

        Reviewed by Eric Carlson.

        No change of behavior, just renaming a method to make its name more accurate.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::visibilityStateChanged):
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::loadWithNextMediaEngine):
        (WebCore::MediaPlayer::setPageIsVisible):
        (WebCore::MediaPlayer::setVisible): Deleted.
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::setVisibleForCanvas):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::setPageIsVisible):
        (WebCore::MediaPlayerPrivateAVFoundation::setVisible): Deleted.
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setPageIsVisible):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setVisible): Deleted.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::setPageIsVisible):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::setVisible): Deleted.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        * platform/graphics/holepunch/MediaPlayerPrivateHolePunch.h:
        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:
        (WebCore::MediaPlayerPrivateMediaFoundation::setPageIsVisible):
        (WebCore::MediaPlayerPrivateMediaFoundation::setVisible): Deleted.
        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.h:
        * platform/mock/mediasource/MockMediaPlayerMediaSource.cpp:
        (WebCore::MockMediaPlayerMediaSource::setPageIsVisible):
        (WebCore::MockMediaPlayerMediaSource::setVisible): Deleted.
        * platform/mock/mediasource/MockMediaPlayerMediaSource.h:
        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::willBeDestroyed):
        (WebCore::RenderVideo::updatePlayer):

2021-08-19  Youenn Fablet  <youenn@apple.com>

        RTCRtpTransceiver does not need an ice transport
        https://bugs.webkit.org/show_bug.cgi?id=229186

        Reviewed by Eric Carlson.

        No change of behavior, we are removing a member from RTCRtpTransceiver which is unused.
        We are also updating RTCIceTransport as it does not need to have virtual methods yet.

        * Modules/mediastream/RTCIceTransport.cpp:
        (WebCore::RTCIceTransport::~RTCIceTransport):
        * Modules/mediastream/RTCIceTransport.h:
        * Modules/mediastream/RTCIceTransport.idl:
        * Modules/mediastream/RTCRtpTransceiver.cpp:
        (WebCore::RTCRtpTransceiver::RTCRtpTransceiver):
        * Modules/mediastream/RTCRtpTransceiver.h:

2021-08-19  Youenn Fablet  <youenn@apple.com>

        Add support for RTCDtlsTransport
        https://bugs.webkit.org/show_bug.cgi?id=229133

        Reviewed by Eric Carlson.

        RTCDtlsTransport is an object representing the transport used by RTCRtp senders and receivers.
        Add WebIDL and backend implementation.
        In particular, we set sender/receiver transports as per spec when setting the descriptions.
        Add support for state and certificates access. Add support for statechange event.

        Covered by rebased tests.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/mediastream/PeerConnectionBackend.cpp:
        (WebCore::PeerConnectionBackend::setLocalDescriptionSucceeded):
        (WebCore::PeerConnectionBackend::setRemoteDescriptionSucceeded):
        * Modules/mediastream/PeerConnectionBackend.h:
        * Modules/mediastream/RTCDtlsTransport.cpp: Added.
        (WebCore::RTCDtlsTransport::RTCDtlsTransport):
        (WebCore::RTCDtlsTransport::~RTCDtlsTransport):
        (WebCore::RTCDtlsTransport::getRemoteCertificates):
        (WebCore::RTCDtlsTransport::stop):
        (WebCore::RTCDtlsTransport::virtualHasPendingActivity const):
        (WebCore::RTCDtlsTransport::onStateChanged):
        (WebCore::RTCDtlsTransport::onError):
        * Modules/mediastream/RTCDtlsTransport.h: Added.
        * Modules/mediastream/RTCDtlsTransport.idl: Added.
        * Modules/mediastream/RTCDtlsTransportBackend.h: Added.
        (WebCore::operator==):
        * Modules/mediastream/RTCDtlsTransportState.h: Added.
        * Modules/mediastream/RTCDtlsTransportState.idl: Added.
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::getOrCreateDtlsTransport):
        (WebCore::RTCPeerConnection::updateTransceiverTransports):
        (WebCore::RTCPeerConnection::updateTransceiversAfterSuccessfulLocalDescription):
        (WebCore::RTCPeerConnection::updateTransceiversAfterSuccessfulRemoteDescription):
        * Modules/mediastream/RTCPeerConnection.h:
        * Modules/mediastream/RTCRtpReceiver.cpp:
        * Modules/mediastream/RTCRtpReceiver.h:
        * Modules/mediastream/RTCRtpReceiver.idl:
        * Modules/mediastream/RTCRtpReceiverBackend.h:
        * Modules/mediastream/RTCRtpSender.cpp:
        * Modules/mediastream/RTCRtpSender.h:
        * Modules/mediastream/RTCRtpSender.idl:
        * Modules/mediastream/RTCRtpSenderBackend.h:
        * Modules/mediastream/libwebrtc/LibWebRTCDtlsTransportBackend.cpp: Added.
        (WebCore::toRTCDtlsTransportState):
        (WebCore::LibWebRTCDtlsTransportBackendObserver::LibWebRTCDtlsTransportBackendObserver):
        (WebCore::LibWebRTCDtlsTransportBackendObserver::updateState):
        (WebCore::LibWebRTCDtlsTransportBackendObserver::start):
        (WebCore::LibWebRTCDtlsTransportBackendObserver::stop):
        (WebCore::LibWebRTCDtlsTransportBackendObserver::OnStateChange):
        (WebCore::LibWebRTCDtlsTransportBackendObserver::OnError):
        (WebCore::LibWebRTCDtlsTransportBackend::LibWebRTCDtlsTransportBackend):
        (WebCore::LibWebRTCDtlsTransportBackend::~LibWebRTCDtlsTransportBackend):
        (WebCore::LibWebRTCDtlsTransportBackend::registerClient):
        (WebCore::LibWebRTCDtlsTransportBackend::unregisterClient):
        * Modules/mediastream/libwebrtc/LibWebRTCDtlsTransportBackend.h: Added.
        * Modules/mediastream/libwebrtc/LibWebRTCRtpReceiverBackend.cpp:
        (WebCore::LibWebRTCRtpReceiverBackend::rtpDtlsTransportBackend):
        * Modules/mediastream/libwebrtc/LibWebRTCRtpReceiverBackend.h:
        * Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.cpp:
        (WebCore::LibWebRTCRtpSenderBackend::rtpDtlsTransportBackend):
        * Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.h:
        * Modules/mediastream/libwebrtc/LibWebRTCUtils.cpp:
        * Modules/mediastream/libwebrtc/LibWebRTCUtils.h:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:
        * dom/EventTargetFactory.in:

2021-08-18  David Kilzer  <ddkilzer@apple.com>

        Bug 229264: Leak of CMBufferQueueRef (up to 752 bytes each) in com.apple.WebKit.GPU.Development process
        <https://webkit.org/b/229264>
        <rdar://problem/82101153>

        Reviewed by Anders Carlsson.

        Covered by running layout tests with --leaks plus future patch
        to check for leaks in the GPU process.

        * platform/mediarecorder/cocoa/VideoSampleBufferCompressor.mm:
        (WebCore::VideoSampleBufferCompressor::initialize):
        - Use adoptCF() to fix the leak since CMBufferQueueCreate()
          returns a retained object.

2021-08-18  David Kilzer  <ddkilzer@apple.com>

        Leak of CMSampleBufferRef (up to 2.25 KB each) in com.apple.WebKit.GPU.Development process
        <https://webkit.org/b/229262>
        <rdar://problem/82076765>

        Reviewed by Darin Adler.

        Covered by running layout tests with --leaks plus future patch
        to check for leaks in the GPU process.

        * platform/mediarecorder/cocoa/AudioSampleBufferCompressor.h:
        (WebCore::AudioSampleBufferCompressor::sampleBufferWithNumPackets):
        - Update signature to return RetainPtr<CMSampleBufferRef>.

        * platform/mediarecorder/cocoa/AudioSampleBufferCompressor.mm:
        (WebCore::AudioSampleBufferCompressor::sampleBufferWithNumPackets):
        - Update signature to return RetainPtr<CMSampleBufferRef>.
        - Rename `sampleBuffer` to `rawSampleBuffer` to match similar
          pattern used in other code, then use `sampleBuffer` to store
          `rawSampleBuffer` wrapped in a RetainPtr<>.
        (WebCore::AudioSampleBufferCompressor::processSampleBuffersUntilLowWaterTime):
        - Add get() to `buffer` variable since it is now a RetainPtr<>.

2021-08-18  Chris Dumez  <cdumez@apple.com>

        Unreviewed, reverting r281206.

        Reverting because of branching, will re-land soon

        Reverted changeset:

        "Implement Crypto.randomUUID()"
        https://bugs.webkit.org/show_bug.cgi?id=229240
        https://commits.webkit.org/r281206

2021-08-18  Chris Dumez  <cdumez@apple.com>

        Implement Crypto.randomUUID()
        https://bugs.webkit.org/show_bug.cgi?id=229240

        Reviewed by Geoffrey Garen.

        Implement Crypto.randomUUID():
        - https://wicg.github.io/uuid/#extensions-to-the-crypto-interface

        Chrome already implements this and Firefox seems to be working on it
        (https://bugzilla.mozilla.org/show_bug.cgi?id=1705264).

        No new tests, rebaselined existing tests.

        * page/Crypto.cpp:
        (WebCore::Crypto::randomUUID const):
        * page/Crypto.h:
        * page/Crypto.idl:

2021-08-18  Andres Gonzalez  <andresg_22@apple.com>

        Add layout test for WebAccessibilityObjectWrapper handler for attribute AXLineForTextMarker on MacOS.
        https://bugs.webkit.org/show_bug.cgi?id=229220
        <rdar://problem/82057459>

        Reviewed by Chris Fleizach.

        Test: accessibility/mac/line-index-for-textmarker.html

        There was not a layout test that exercised directly the handler for the
        AXLineForTextMarker attribute in [WebAccessibilityObjectWrapper
        accessibilityAttributeValue:withParameter:].
        This patch adds the above test to exercise this method for textarea and
        contenteditable elements. The text in these elements includes soft and
        hard linebreaks, which are important test cases for this API.
        The handler for AXLineForTextMarker in turn calls
        AccessibilityObject::lineForPosition, and analyzing this method, made a
        minor optimization by getting rid off of an unnecessary local variable
        and object copy.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::lineForPosition const):

2021-08-18  Simon Fraser  <simon.fraser@apple.com>

        Update feature statuses in features.json
        https://bugs.webkit.org/show_bug.cgi?id=229212

        Reviewed by Wenson Hsieh.
        
        Update the status of various features in features.json to reflect their current state.

        Remove `"enabled-by-default": true` from features that are marked as Supported.

        * features.json:

2021-08-18  Megan Gardner  <megan_gardner@apple.com>

        Add Highlight API to features.json
        https://bugs.webkit.org/show_bug.cgi?id=208226

        Reviewed by Simon Fraser.

        * features.json:

2021-08-18  Jer Noble  <jer.noble@apple.com>

        REGRESSION(r280723): Protected HLS + EME playback fails with "temporary error"
        https://bugs.webkit.org/show_bug.cgi?id=229201
        <rdar://81807216>

        Reviewed by Eric Carlson.

        In r280723, we stopped unconditionally creating an AVPlayerLayer when we create an AVPlayer. However,
        we will still create an AVPlayerItemVideoOutput when we create an AVPlayerItem. This leaves our
        AVPlayer in a state where AVFoundation will throw a "temporary error; try again later" when given
        an otherwise valid protected HLS stream and key data through EME.

        To work around this behavior, delay creating the AVPlayerItemVideoOutput until explicitly told to
        create video renderers, typically simultaneous to creating an AVPlayerLayer.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerItem):

2021-08-18  Martin Robinson  <mrobinson@webkit.org>

        [css-scroll-snap] Don't snap to offscreen snap areas in unidirectional scrolls
        https://bugs.webkit.org/show_bug.cgi?id=227949
        <rdar://problem/80895783>

        Reviewed by Frédéric Wang.

        No new tests. This is covered by two existing WPT tests.

        * page/scrolling/ScrollSnapOffsetsInfo.cpp:
        (WebCore::componentForAxis): Added this helper.
        (WebCore::hasCompatibleSnapArea): Added this helper that checks to see if any of the snap areas
        at a given scroll snap position are compatible with the viewport.
        (WebCore::adjustPreviousAndNextForOnscreenSnapAreas): Adjusts the selected previous and next snap
        positions by looking backward and forward for the first compatible snap position.
        (WebCore::closestSnapOffsetWithInfoAndAxis): Use the new helper.

2021-08-18  Chris Dumez  <cdumez@apple.com>

        Crash under JSIntersectionObserverCallback::handleEvent()
        https://bugs.webkit.org/show_bug.cgi?id=229196
        <rdar://82016054>

        Reviewed by Geoffrey Garen.

        Early return in IntersectionObserver::notify() if the callback has already been destroyed.
        This is not supposed to happen as we're supposed to be keeping the JSIntersectionObserver
        wrapper alive as long as the IntersectionObserver may fire events, which should keep the
        callback alive too. However, despite Ryosuke's fix in r280549, the crash is still happening
        in the wild. To address the crash, I am simply doing an early return for now, similarly to
        what we already do in MutationObserver::deliver(), while keeping a debug assertion around
        in hope of finding the root cause at some point.

        No new tests, we do not not how this is happening yet.

        * page/IntersectionObserver.cpp:
        (WebCore::IntersectionObserver::notify):

2021-08-18  Martin Robinson  <mrobinson@webkit.org>

        position: sticky with display: inline-block
        https://bugs.webkit.org/show_bug.cgi?id=224415
        <rdar://problem/76811968>

        Reviewed by Simon Fraser.

        Improve sticky positioning applied to inline items. The first improvement is to
        skip anonymous RenderBlock parents of inline display items when looking for the
        containing block used to calculate sticky constraints. These anonymous parents
        are not the containing block that constrains the movement of these kind of stickily
        positioned items. Instead look for containing block for the anonymous parent,
        which does limit the scroll boundaries of inline stickily position items.

        Previously, when converting the frame rect from the coordinate space of the stickily
        positioned item to that of the scrolling container, the code used to apply the offset
        from the containing block to the scrolling ancestor directly to the frame rect. That
        doesn't work when the containing block that determines sticky constraints is not the
        direct containing block of the stickily positioned items (as it is for inlines).

        Instead, the code now just maps the frame rect directly from the item parent to
        the scrolling ancestor. This simplifies things a bit and allows it to work with
        inline stickily positioned items.

        Finally, this change adds comments to make it clearer what this method is doing.

        No new tests. This is covered by existing WPT tests. Specifically the following
        tests are now passing:
         imported/w3c/web-platform-tests/css/css-position/sticky/position-sticky-hyperlink.html
         imported/w3c/web-platform-tests/css/css-position/sticky/position-sticky-nested-table.html
         imported/w3c/web-platform-tests/css/css-position/sticky/position-sticky-table-parts.html
         imported/w3c/web-platform-tests/css/css-position/sticky/position-sticky-table-th-bottom.html
         imported/w3c/web-platform-tests/css/css-position/sticky/position-sticky-nested-thead-th.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::positionOffsetValue): enclosingClippingBoxForStickyPosition now returns a pair
        to avoid passing in a pointer. Only look at the first part of the pair here.
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::computeStickyPositionConstraints const): Modified this method
        to return a pair in order to avoid dealing with input parameters. This allows simplifying this
        method, making the code a bit simpler.
        (WebCore::RenderBoxModelObject::enclosingClippingBoxForStickyPosition const): Deleted.
        (WebCore::RenderBoxModelObject::computeStickyPositionConstraints const): Make two changes
        to this method to improve sticky positioning for inline elements. The first change is
        to be a bit better about finding the appropriate containing block for calculating sticky
        constraints. The second is to more resiliently move from coordinate systems. In addition,
        improve the comments for this method to make it clearer what is happening at each step.
        * rendering/RenderBoxModelObject.h: Updated method declaration.

2021-08-18  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GStreamer][EME] Try to parse XML init datas that could possibly come from MPD manifests
        https://bugs.webkit.org/show_bug.cgi?id=229145

        Reviewed by Alicia Boya Garcia.

        Added GStreamerEMEUtilities to include implementation of
        InitData::extractCencIfNeeded. This tries to parse the possible
        XML inside an init data that could come from MPD manifests. If it
        succeeds, it keeps the parsed init data, if not, it returns the
        original one.

        Based on a patch by Philippe Normand.

        * platform/GStreamer.cmake:
        * platform/graphics/gstreamer/eme/GStreamerEMEUtilities.cpp: Added.
        (WebCore::markupStartElement):
        (WebCore::markupEndElement):
        (WebCore::markupText):
        (WebCore::markupPassthrough):
        (WebCore::markupError):
        (WebCore::InitData::extractCencIfNeeded):
        * platform/graphics/gstreamer/eme/GStreamerEMEUtilities.h:
        (WebCore::InitData::InitData):

2021-08-17  Devin Rousso  <drousso@apple.com>

        Web Inspector: match the undocked tab bar style when docked bottom/side
        https://bugs.webkit.org/show_bug.cgi?id=212398

        Reviewed by Timothy Hatcher.

        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::platformVersionName const):
        Add macOS Monterey.

2021-08-17  Jer Noble  <jer.noble@apple.com>

        De-duplicate the Cocoa-specific MediaPlayerPrivateRemote constructor
        https://bugs.webkit.org/show_bug.cgi?id=229193

        Reviewed by Eric Carlson.

        Don't include a Objective-C header in a file which will be included by C++ source; forward-declare
        the class instead.

        * platform/graphics/avfoundation/objc/VideoLayerManagerObjC.h:
        * platform/graphics/avfoundation/objc/VideoLayerManagerObjC.mm:

2021-08-17  Alex Christensen  <achristensen@webkit.org>

        Document load events should update timing in PerformanceNavigationTiming even after its instantiation
        https://bugs.webkit.org/show_bug.cgi?id=229181

        Reviewed by Chris Dumez.

        When we make a PerformanceNavigationTiming object, we copy the DocumentLoadTiming and DocumentEventTiming values.
        If PerformanceNavigationTiming is accessed before the document has finished loading, we still need to update the timing values.

        Covered by a newly passing WPT test, which Chrome and Firefox already pass.

        * dom/Document.cpp:
        (WebCore::Document::documentEventTimingFromNavigationTiming):
        (WebCore::Document::setReadyState):
        (WebCore::Document::finishedParsing):
        * dom/Document.h:
        * loader/DocumentLoadTiming.h:
        (WebCore::DocumentLoadTiming::setLoadEventStart):
        (WebCore::DocumentLoadTiming::setLoadEventEnd):
        (WebCore::DocumentLoadTiming::markLoadEventStart): Deleted.
        (WebCore::DocumentLoadTiming::markLoadEventEnd): Deleted.
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::dispatchLoadEvent):
        * page/Performance.h:
        * page/PerformanceNavigationTiming.h:

2021-08-17  Antti Koivisto  <antti@apple.com>

        Incorrect repaint when inline level box style change triggers line height change
        https://bugs.webkit.org/show_bug.cgi?id=229140
        <rdar://problem/81980863>

        Reviewed by Alan Bujtas.

        If an existing block shrinks vertically as a result of layout we fail to invalidate the
        old content area for repaint, thus potentially leaving painting artefacts behind.
        This is often hidden by the content shift triggering other repaints.

        Test: fast/repaint/line-layout-block-shrink.html

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::layoutModernLines):

        Adjust the repaint area to include the content size before the layout.

2021-08-17  Philippe Normand  <pnormand@igalia.com>

        REGRESSION(r218083): [GStreamer] webrtc unexpected failures
        https://bugs.webkit.org/show_bug.cgi?id=229187

        Reviewed by Xabier Rodriguez-Calvar.

        The stream-collection messages actually don't need to be handled synchronously in the
        mediastream cases. The limitations of the MSE backend do not apply there.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::handleStreamCollectionMessage):
        (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin):

2021-08-17  Jean-Yves Avenard  <jya@apple.com>

        Implement API to ensure MediaRemote key mapping is correct
        https://bugs.webkit.org/show_bug.cgi?id=229070
        <rdar://problem/81894480>

        Reviewed by Eric Carlson.

        This change adds Internals entries to test bug 229068.
        While we do not mock the MediaRemote service, we still go one step further in
        ensuring that the mappings between MediaSession action handlers and
        PlatformMediaSession are correct.

        Test: media/media-session/actionHandlerInternalMappings.html

        * platform/NowPlayingManager.cpp:
        (WebCore::NowPlayingManager::supportedCommands const):
        * platform/NowPlayingManager.h:
        * platform/audio/PlatformMediaSession.h:
        * platform/audio/PlatformMediaSessionManager.h:
        (WebCore::PlatformMediaSessionManager::supportedCommands const):
        * platform/audio/cocoa/MediaSessionManagerCocoa.h:
        * platform/audio/cocoa/MediaSessionManagerCocoa.mm:
        (WebCore::MediaSessionManagerCocoa::supportedCommands const):
        * testing/Internals.cpp:
        (WebCore::Internals::platformSupportedCommands const):
        * testing/Internals.h:
        * testing/Internals.idl:

2021-08-17  Philippe Normand  <pnormand@igalia.com>

        REGRESSION(r278981): [GStreamer][Debug] Assert crashes when running media/track tests
        https://bugs.webkit.org/show_bug.cgi?id=229123
        <rdar://problem/81978494>

        Reviewed by Xabier Rodriguez-Calvar.

        Implement a dummy id() method for InbandTextTrackPrivateGStreamer.
        
        * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.cpp:
        (WebCore::InbandTextTrackPrivateGStreamer::InbandTextTrackPrivateGStreamer):
        * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.h:

2021-08-17  Jer Noble  <jer.noble@apple.com>

        LayoutTests imported/w3c/web-platform-tests/html/canvas/element/imagebitmap/createImageBitmap-* are flakey
        https://bugs.webkit.org/show_bug.cgi?id=229169

        Reviewed by Eric Carlson.

        When a data:// URL is passed to AVFoundation, the loading of that URL is handled by WebCoreAVFResourceLoader,
        which in turn relies on a PlatformMediaResourceLoader to turn the data URL into a data buffer. However, in the
        case of the GPU process, this means dispatching the request from GPU, to WebContent, to Network process and to
        send the data back from the Network, to WebContent, to GPU process. If a synchronous operation (like painting)
        is underway, the data response can block until that synchronous operation completes. If that operation is a
        paint, and the data requested is required to complete that paint, the paint will fail.

        For the narrow case of a data:// URL, it's not necessary to dispatch to another process to turn that URL into
        data; it can happen locally, avoiding the hop to another process and the subsequent deadlock.

        * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.h:
        (WebCore::WebCoreAVFResourceLoader::logger const):
        * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.mm:
        (WebCore::DataURLResourceMediaLoader::DataURLResourceMediaLoader):
        (WebCore::WebCoreAVFResourceLoader::~WebCoreAVFResourceLoader):
        (WebCore::WebCoreAVFResourceLoader::startLoading):

2021-08-16  Antti Koivisto  <antti@apple.com>

        REGRESSION (r275756): Accelerated animations freeze when invalidating layout with shadow dom
        https://bugs.webkit.org/show_bug.cgi?id=228954
        <rdar://problem/81750217>

        Reviewed by Ryosuke Niwa.

        Test: animations/shadow-host-child-change.html

        Tearing down the host renderer after slot assignments change cancels animations on it.

        * dom/SlotAssignment.cpp:
        (WebCore::SlotAssignment::didChangeSlot):
        * rendering/updating/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::tearDownRenderersAfterSlotChange):

        Add a version that keeps the animations going on the teardown root.

        (WebCore::RenderTreeUpdater::tearDownRenderers):
        * rendering/updating/RenderTreeUpdater.h:

2021-08-16  Devin Rousso  <drousso@apple.com>

        Web Share CanShare() should be called after transient activation check
        https://bugs.webkit.org/show_bug.cgi?id=229132

        Reviewed by Tim Horton.

        Test: web-platform-tests/web-share/share-consume-activation.https.html

        * page/Navigator.cpp:
        (WebCore::Navigator::share):

2021-08-16  Alex Christensen  <achristensen@webkit.org>

        Report resource timing when SubresourceLoader::checkForHTTPStatusCodeError returns true
        https://bugs.webkit.org/show_bug.cgi?id=229167

        Reviewed by Chris Dumez.

        Since r281110 we report timing data for loads which "fail" because of HTTP status codes in the 400-599 range.
        This matches the behavior of Chrome, Firefox, and the spec, but there was a code path where we still weren't reporting
        those resources' timing data.  This wasn't a problem before r281110 because we would've discarded it anyways, but
        this code path needs to report the timing data before calling SubresourceLoader::cancel.

        Covered by several newly passing WPT tests, which Chrome and Firefox already pass.

        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didReceiveResponse):
        (WebCore::SubresourceLoader::checkForHTTPStatusCodeError):

2021-08-16  Dean Jackson  <dino@apple.com>

        WebXR contexts have to use high-power GPUs
        https://bugs.webkit.org/show_bug.cgi?id=229111
        <rdar://81658893>

        Reviewed by Sam Weinig.

        The WebGL context used by WebXR needs to be using the same GPU
        as the headset it is talking to. However, the API allows for the
        creation of the WebGL context before initializing the WebXR
        session.

        For now, assume this will trigger the high-performance GPU
        on any dual-GPU system. i.e. when the WebGL is created, look
        for the "webXRCompatible" creation attribute and force
        the high-power GPU if available.

        Test: webxr/high-performance.html

        * html/canvas/WebGLRenderingContextBase.h: Export the method to retrieve attributes.
        * platform/graphics/GraphicsContextGLAttributes.h: Add a flag for forcing the
        high performance gpu.
        * platform/graphics/cocoa/GraphicsContextGLOpenGLCocoa.mm:
        (WebCore::InitializeEGLDisplay):
        (WebCore::GraphicsContextGLOpenGL::GraphicsContextGLOpenGL):
        * testing/Internals.cpp: New internals method to check what GPU was requested.
        (WebCore::Internals::requestedGPU):
        * testing/Internals.h:
        * testing/Internals.idl:

2021-08-16  Alex Christensen  <achristensen@webkit.org>

        Fix null crash after r281110
        https://bugs.webkit.org/show_bug.cgi?id=225737

        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::reportResourceTiming):
        I saw a nullptr crash here in EWS from bug 229167.
        Looks like there's a case where we can call reportResourceTiming without a resource.
        Early return if m_resource is null.

2021-08-16  Alex Christensen  <achristensen@webkit.org>

        Resource Timing: Duration is 0 in many cases
        https://bugs.webkit.org/show_bug.cgi?id=225737

        Reviewed by Chris Dumez.

        This fixes two problems with our PerformanceResourceTiming implementation:
        1. ResourceTimingInformation::shouldAddResourceTiming wasn't adding timing data if CachedResource::errorOccurred returned true,
        which includes when the server responds with an HTTP 404.  We want loadFailedOrCanceled instead, which only returns true if
        there's a network error or if the load is cancelled.  This matches the behavior of other browsers.
        2. ResourceTiming::fromMemoryCache was assuming that it never had network information to report because we pulled from the cache,
        not the network.  However, a common case is that HTMLPreloadScanner::scan calls HTMLResourcePreloader::preload which loads the resource
        while the HTML parser is blocked on loading scripts or other things, then CachedResourceLoader::requestResource pulls it out of the
        memory cache.  In this case, use the network metrics that we are already storing if it's the first time we are pulling this resource
        out of the memory cache.  After that, 0 load time is quite accurate.

        Covered by newly passing Web Platform Tests, which Chrome and Firefox already passed.

        * loader/ResourceTiming.cpp:
        (WebCore::ResourceTiming::fromMemoryCache):
        (WebCore::ResourceTiming::ResourceTiming):
        (WebCore::ResourceTiming::initServerTiming): Deleted.
        * loader/ResourceTiming.h:
        (WebCore::ResourceTiming::ResourceTiming):
        * loader/ResourceTimingInformation.cpp:
        (WebCore::ResourceTimingInformation::shouldAddResourceTiming):
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::takeNetworkLoadMetrics):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestResource):
        * platform/network/ResourceResponseBase.h:
        (WebCore::ResourceResponseBase::deprecatedNetworkLoadMetricsOrNull const):
        (WebCore::ResourceResponseBase::takeNetworkLoadMetrics):

2021-08-16  Andres Gonzalez  <andresg_22@apple.com>

        Expose [WebAccessibilityObjectWrapper lineRectsAndText] on MacOS.
        https://bugs.webkit.org/show_bug.cgi?id=229045
        <rdar://81819301>

        Reviewed by Chris Fleizach.

        Test: accessibility/element-line-rects-and-text.html

        Moved the [WebAccessibilityObjectWrapper lineRectsAndText] method, and
        supporting methods and functions, from the iOS subclass to the base
        (Cocoa) class so that it can be used in both iOS and MacOS.

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        Moved the following methods and functions to WebAccessibilityObjectWrapperBase.mm.
        (-[WebAccessibilityObjectWrapper _prepareAccessibilityCall]): Deleted.
        (-[WebAccessibilityObjectWrapper _addAccessibilityObject:toTextMarkerArray:]): Deleted.
        (blockquoteLevel): Deleted.
        (AXAttributeStringSetLanguage): Deleted.
        (AXAttributeStringSetBlockquoteLevel): Deleted.
        (AXAttributeStringSetHeadingLevel): Deleted.
        (AXAttributeStringSetFont): Deleted.
        (AXAttributeStringSetNumber): Deleted.
        (AXAttributeStringSetStyle): Deleted.
        (AXAttributedStringAppendText): Deleted.
        (-[WebAccessibilityObjectWrapper contentForSimpleRange:attributed:]): Deleted.
        (-[WebAccessibilityObjectWrapper lineRectsAndText]): Deleted.
        * accessibility/mac/WebAccessibilityObjectWrapperBase.h:
        * accessibility/mac/WebAccessibilityObjectWrapperBase.mm:
        (-[WebAccessibilityObjectWrapperBase _prepareAccessibilityCall]):
        (addObjectWrapperToArray):
        (blockquoteLevel):
        (AXAttributeStringSetLanguage):
        (AXAttributeStringSetBlockquoteLevel):
        (AXAttributeStringSetHeadingLevel):
        (AXAttributeStringSetFont):
        (AXAttributeStringSetNumber):
        (AXAttributeStringSetStyle):
        (AXAttributedStringAppendText):
        (-[WebAccessibilityObjectWrapperBase contentForSimpleRange:attributed:]):
        (-[WebAccessibilityObjectWrapperBase lineRectsAndText]):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
        Added handling of the attribute "AXLineRectsAndText".

2021-08-16  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r281093.
        https://bugs.webkit.org/show_bug.cgi?id=229159

        broke many GTK media tests

        Reverted changeset:

        "REGRESSION(r278981): [GStreamer][Debug] Assert crashes when
        running media/track tests"
        https://bugs.webkit.org/show_bug.cgi?id=229123
        https://commits.webkit.org/r281093

2021-08-16  Brent Fulgham  <bfulgham@apple.com>

        REGRESSION (r281012): WebInspector console no longer shows script integrity information
        https://bugs.webkit.org/show_bug.cgi?id=229097
        <rdar://problem/81915909>

        Reviewed by Youenn Fablet.

        * bindings/js/ScriptModuleLoader.cpp:
        (WebCore::ScriptModuleLoader::notifyFinished): Add full console message during promise rejection.
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::reportIntegrityMetadataError): Treat integrity mismatch as
        a ResourceError::Type::AccessControl so that it gets detailed console logging.

2021-08-16  Philippe Normand  <pnormand@igalia.com>

        REGRESSION(r278981): [GStreamer][Debug] Assert crashes when running media/track tests
        https://bugs.webkit.org/show_bug.cgi?id=229123

        Reviewed by Xabier Rodriguez-Calvar.

        The TrackPrivateBaseGStreamer class now includes all the common code that is used by its
        subclasses. InbandTextTrackPrivateGStreamer now returns valid track IDs (fixing the issue of
        this regression: ASSERTs). The patch also includes coding style fixes, removal of un-needed
        includes and a few other clean-ups related with the Track support in the GStreamer platform
        layer.

        * platform/graphics/gstreamer/AudioTrackPrivateGStreamer.cpp:
        (WebCore::AudioTrackPrivateGStreamer::AudioTrackPrivateGStreamer):
        * platform/graphics/gstreamer/AudioTrackPrivateGStreamer.h:
        * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.cpp:
        (WebCore::InbandTextTrackPrivateGStreamer::InbandTextTrackPrivateGStreamer):
        (WebCore::InbandTextTrackPrivateGStreamer::disconnect): Deleted.
        (WebCore::InbandTextTrackPrivateGStreamer::streamChanged): Deleted.
        (WebCore::InbandTextTrackPrivateGStreamer::notifyTrackOfStreamChanged): Deleted.
        * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.h:
        (WebCore::InbandTextTrackPrivateGStreamer::create):
        (WebCore::InbandTextTrackPrivateGStreamer::streamId const): Deleted.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfTrack):
        (WebCore::MediaPlayerPrivateGStreamer::handleTextSample):
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.cpp:
        (WebCore::TrackPrivateBaseGStreamer::generateUniquePlaybin2StreamID):
        (WebCore::TrackPrivateBaseGStreamer::TrackPrivateBaseGStreamer):
        (WebCore::TrackPrivateBaseGStreamer::setPad):
        (WebCore::TrackPrivateBaseGStreamer::notifyTrackOfStreamChanged):
        (WebCore::TrackPrivateBaseGStreamer::streamChanged):
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.h:
        (WebCore::TrackPrivateBaseGStreamer::setIndex):
        (WebCore::TrackPrivateBaseGStreamer::stream):
        * platform/graphics/gstreamer/VideoTrackPrivateGStreamer.cpp:
        (WebCore::VideoTrackPrivateGStreamer::VideoTrackPrivateGStreamer):
        * platform/graphics/gstreamer/VideoTrackPrivateGStreamer.h:

2021-08-16  David Kilzer  <ddkilzer@apple.com>

        "make analyze" should run clang static analyzer in deep mode
        <https://webkit.org/b/229127>
        <rdar://problem/81960587>

        Reviewed by Alexey Proskuryakov.

        * Scripts/generate-derived-sources.sh:
        - Treat "analyze" the same as "build" for "ACTION" environment
          variable.

2021-08-16  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r281078.
        https://bugs.webkit.org/show_bug.cgi?id=229144

        broke GTK/WPE mediastream tests

        Reverted changeset:

        "REGRESSION(r278981): [GStreamer][Debug] Assert crashes when
        running media/track tests"
        https://bugs.webkit.org/show_bug.cgi?id=229123
        https://commits.webkit.org/r281078

2021-08-16  Philippe Normand  <pnormand@igalia.com>

        [GTK][WPE] Test fast/mediastream/mediastreamtrack-video-clone.html is flaky timeout since r280775
        https://bugs.webkit.org/show_bug.cgi?id=229063

        Reviewed by Xabier Rodriguez-Calvar.

        Ignore redundant stream collections also in the mediastream case. Both the mediastream and
        MSE source elements behave similarly regarding stream collections.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::handleStreamCollectionMessage):

2021-08-16  Philippe Normand  <pnormand@igalia.com>

        REGRESSION(r278981): [GStreamer][Debug] Assert crashes when running media/track tests
        https://bugs.webkit.org/show_bug.cgi?id=229123

        Reviewed by Xabier Rodriguez-Calvar.

        The TrackPrivateBaseGStreamer class now includes all the common code that is used by its
        subclasses. InbandTextTrackPrivateGStreamer now returns valid track IDs (fixing the issue of
        this regression: ASSERTs). The patch also includes coding style fixes, removal of un-needed
        includes and a few other clean-ups related with the Track support in the GStreamer platform
        layer.

        * platform/graphics/gstreamer/AudioTrackPrivateGStreamer.cpp:
        (WebCore::AudioTrackPrivateGStreamer::AudioTrackPrivateGStreamer):
        * platform/graphics/gstreamer/AudioTrackPrivateGStreamer.h:
        * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.cpp:
        (WebCore::InbandTextTrackPrivateGStreamer::InbandTextTrackPrivateGStreamer):
        (WebCore::InbandTextTrackPrivateGStreamer::disconnect): Deleted.
        (WebCore::InbandTextTrackPrivateGStreamer::streamChanged): Deleted.
        (WebCore::InbandTextTrackPrivateGStreamer::notifyTrackOfStreamChanged): Deleted.
        * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.h:
        (WebCore::InbandTextTrackPrivateGStreamer::create):
        (WebCore::InbandTextTrackPrivateGStreamer::streamId const): Deleted.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfTrack):
        (WebCore::MediaPlayerPrivateGStreamer::handleTextSample):
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.cpp:
        (WebCore::TrackPrivateBaseGStreamer::generateUniquePlaybin2StreamID):
        (WebCore::TrackPrivateBaseGStreamer::TrackPrivateBaseGStreamer):
        (WebCore::TrackPrivateBaseGStreamer::setPad):
        (WebCore::TrackPrivateBaseGStreamer::notifyTrackOfStreamChanged):
        (WebCore::TrackPrivateBaseGStreamer::streamChanged):
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.h:
        (WebCore::TrackPrivateBaseGStreamer::setIndex):
        (WebCore::TrackPrivateBaseGStreamer::stream):
        * platform/graphics/gstreamer/VideoTrackPrivateGStreamer.cpp:
        (WebCore::VideoTrackPrivateGStreamer::VideoTrackPrivateGStreamer):
        * platform/graphics/gstreamer/VideoTrackPrivateGStreamer.h:

2021-08-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        Move WebMAudioUtilitiesCocoa.h from Headers.cmake to PlatformMac.cmake
        https://bugs.webkit.org/show_bug.cgi?id=229129

        Unreviewed. Fix GTK/WPE distcheck build.

        * Headers.cmake:
        * PlatformMac.cmake:

2021-08-15  Simon Fraser  <simon.fraser@apple.com>

        [LFC Display] Make Display::ImageBox a CachedImageClient to get image repaint working
        https://bugs.webkit.org/show_bug.cgi?id=229125

        Reviewed by Anders Carlsson.

        Make Display::ImageBox hold a CachedResourceHandle<CachedImage> so it can register
        as a client and get notified about image changes, for repainting.

        * display/css/DisplayBoxFactory.cpp:
        (WebCore::Display::BoxFactory::displayBoxForLayoutBox const):
        * display/css/DisplayImageBox.cpp:
        (WebCore::Display::ImageBox::ImageBox):
        (WebCore::Display::m_cachedImage):
        (WebCore::Display::ImageBox::~ImageBox):
        (WebCore::Display::ImageBox::image const):
        (WebCore::Display::ImageBox::imageChanged):
        (WebCore::Display::ImageBox::debugDescription const):
        (WebCore::Display::m_image): Deleted.
        * display/css/DisplayImageBox.h:
        (WebCore::Display::ImageBox::image const): Deleted.

2021-08-15  David Kilzer  <ddkilzer@apple.com>

        Bug 229112: ThreadSanitizer: data races of WTF::String in WebResourceLoadStatisticsStore
        <https://webkit.org/b/229112>
        <rdar://problem/81940951>

        Reviewed by Kate Cheney.

        Covered by running layout tests with TSan in:
            http/tests/privateClickMeasurement/

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::parsePrivateClickMeasurement const):
        - Add WTFMove() for updated SourceSite constructor.  Verified
          that this doesn't create a use-after-move issue.

        * loader/PrivateClickMeasurement.h:
        (WebCore::PrivateClickMeasurement::SourceSite::SourceSite):
        - Change to take rvalue reference for efficiency and to match
          AttributionDestinationSite constructor.
        (WebCore::PrivateClickMeasurement::SourceSite::isolatedCopy const): Add.
        (WebCore::PrivateClickMeasurement::AttributionDestinationSite::isolatedCopy const): Add.
        - Add isolatedCopy() methods to use in multi-threaded scenarios.

2021-08-15  Rob Buis  <rbuis@igalia.com>

        Remove shadow related SVG functionality
        https://bugs.webkit.org/show_bug.cgi?id=228870

        Reviewed by Simon Fraser.

        Remove shadow related SVG functionality since it was added
        for the removed property -webkit-svg-shadow (see r238071).

        * rendering/style/SVGRenderStyle.cpp:
        (WebCore::SVGRenderStyle::SVGRenderStyle):
        (WebCore::SVGRenderStyle::operator== const):
        (WebCore::SVGRenderStyle::copyNonInheritedFrom):
        (WebCore::SVGRenderStyle::diff const):
        * rendering/style/SVGRenderStyle.h:
        (WebCore::SVGRenderStyle::initialLightingColor):
        (WebCore::SVGRenderStyle::baselineShiftValue const):
        (WebCore::SVGRenderStyle::isolatesBlending const):
        (WebCore::SVGRenderStyle::initialShadow): Deleted.
        (WebCore::SVGRenderStyle::setShadow): Deleted.
        (WebCore::SVGRenderStyle::shadow const): Deleted.
        * rendering/svg/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::layout):
        * rendering/svg/RenderSVGImage.h:
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::computeFloatVisibleRectInContainer const):
        (WebCore::RenderSVGRoot::updateCachedBoundaries):
        * rendering/svg/RenderSVGRoot.h:
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::clippedOverflowRectForRepaint):
        (WebCore::SVGRenderSupport::computeFloatVisibleRectInContainer):
        * rendering/svg/SVGRenderingContext.cpp:
        (WebCore::SVGRenderingContext::~SVGRenderingContext):
        (WebCore::SVGRenderingContext::prepareToRenderSVGContent):
        * rendering/svg/SVGRenderingContext.h:

2021-08-15  Simon Fraser  <simon.fraser@apple.com>

        [LFC Display] Introduce type-safe rect types for the display tree
        https://bugs.webkit.org/show_bug.cgi?id=220214

        Reviewed by Alan Bujtas.

        Introduce AbsoluteFloatRect, UnadjustedAbsoluteFloatRect and ViewFloatRect which are
        type-safe float rect types for the display tree.

        AbsoluteFloatRect is relative to document origin. UnadjustedAbsoluteFloatRect is similar,
        but is computed before scrolling and transforms are taken into account.

        ViewFloatRect is relative to the view.

        * WebCore.xcodeproj/project.pbxproj:
        * display/DisplayGeometryTypes.h: Copied from Source/WebCore/display/css/DisplayReplacedBox.h.
        (WebCore::Display::intersection):
        (WebCore::Display::unionRect):
        * display/DisplayTree.cpp:
        (WebCore::Display::Tree::setBoxNeedsDisplay const):
        * display/DisplayTree.h:
        * display/DisplayTreeBuilder.cpp:
        * display/css/DisplayBox.cpp:
        (WebCore::Display::Box::Box):
        (WebCore::Display::Box::setNeedsDisplay):
        * display/css/DisplayBox.h:
        (WebCore::Display::Box::Box):
        (WebCore::Display::Box::absoluteBoxRect const):
        (WebCore::Display::Box::absolutePaintingExtent const):
        * display/css/DisplayBoxClip.cpp:
        (WebCore::Display::BoxClip::pushClip):
        (WebCore::Display::BoxClip::pushRoundedClip):
        * display/css/DisplayBoxClip.h:
        (WebCore::Display::BoxClip::clipRect const):
        * display/css/DisplayBoxDecorationPainter.cpp:
        (WebCore::Display::BoxDecorationPainter::paintFillLayer const):
        * display/css/DisplayBoxFactory.cpp:
        (WebCore::Display::BoxFactory::displayBoxForRootBox const):
        (WebCore::Display::BoxFactory::displayBoxForLayoutBox const):
        (WebCore::Display::BoxFactory::displayBoxForTextRun const):
        (WebCore::Display::BoxFactory::setupBoxGeometry const):
        * display/css/DisplayBoxModelBox.cpp:
        (WebCore::Display::BoxModelBox::BoxModelBox):
        (WebCore::Display::BoxModelBox::clipForDescendants const):
        (WebCore::Display::BoxModelBox::absolutePaintingExtent const):
        * display/css/DisplayBoxModelBox.h:
        (WebCore::Display::BoxModelBox::BoxModelBox):
        (WebCore::Display::BoxModelBox::absoluteBorderBoxRect const):
        (WebCore::Display::BoxModelBox::absolutePaddingBoxRect const):
        (WebCore::Display::BoxModelBox::absoluteContentBoxRect const):
        (WebCore::Display::BoxModelBox::setAbsolutePaddingBoxRect):
        (WebCore::Display::BoxModelBox::setAbsoluteContentBoxRect):
        * display/css/DisplayContainerBox.cpp:
        (WebCore::Display::ContainerBox::ContainerBox):
        * display/css/DisplayContainerBox.h:
        * display/css/DisplayImageBox.cpp:
        (WebCore::Display::ImageBox::ImageBox):
        * display/css/DisplayImageBox.h:
        * display/css/DisplayReplacedBox.cpp:
        (WebCore::Display::ReplacedBox::ReplacedBox):
        * display/css/DisplayReplacedBox.h:
        (WebCore::Display::ReplacedBox::replacedContentRect const):
        (WebCore::Display::ReplacedBox::setReplacedContentRect):
        * display/css/DisplayStackingItem.h:
        (WebCore::Display::StackingItem::paintedContentBounds const):
        (WebCore::Display::StackingItem::paintedBoundsIncludingDescendantItems const):
        (WebCore::Display::StackingItem::setPaintedContentBounds):
        (WebCore::Display::StackingItem::setPaintedBoundsIncludingDescendantItems):
        * display/css/DisplayTextBox.cpp:
        (WebCore::Display::TextBox::TextBox):
        * display/css/DisplayTextBox.h:

2021-08-15  Simon Fraser  <simon.fraser@apple.com>

        [LFC Display] Add a Display::Box flag for HasTransfrom
        https://bugs.webkit.org/show_bug.cgi?id=229115

        Reviewed by Alan Bujtas.

        It's possible for a non-box model box to have a RenderStyle with a transform, but that
        style isn't applied because transforms only apply to atomic inline or block boxes,
        so store a bit on Box for boxes that have transforms.

        * display/css/DisplayBox.h:
        (WebCore::Display::Box::setHasTransform):
        (WebCore::Display::Box::hasTransform const):
        * display/css/DisplayBoxFactory.cpp:
        (WebCore::Display::BoxFactory::constructBoxRareGeometry const):
        (WebCore::Display::BoxFactory::setupBoxModelBox const):
        * display/css/DisplayCSSPainter.cpp:
        (WebCore::Display::CSSPainter::paintAtomicallyPaintedBox):

2021-08-14  Said Abou-Hallawa  <said@apple.com>

        [GPU Process] REGRESSION: WebContent often crashes when opening a Google spreadsheet with charts
        https://bugs.webkit.org/show_bug.cgi?id=229106
        <rdar://81806877>

        Reviewed by Wenson Hsieh.

        Add a method to return the backend of the ImageBuffer.

        * platform/graphics/ConcreteImageBuffer.h:
        * platform/graphics/ImageBuffer.h:

2021-08-13  Chris Dumez  <cdumez@apple.com>

        Add Cross-Origin-Embedder-Policy support for Blob URLs
        https://bugs.webkit.org/show_bug.cgi?id=229041

        Reviewed by Alex Christensen.

        Add Cross-Origin-Embedder-Policy (COEP) support for Blob URLs. We do the same thing as for COOP,
        we pass the COEP policy when registering the Blob URL and store it in the BlobData. When we need
        the construct a Blob resource response as a result of a load, we add the right COEP headers
        based on the BlobData's COEP policy.

        No new tests, rebaselined existing tests.

        * Modules/fetch/FetchLoader.cpp:
        (WebCore::FetchLoader::startLoadingBlobURL):
        * fileapi/Blob.cpp:
        (WebCore::BlobURLRegistry::registerURL):
        (WebCore::Blob::Blob):
        * fileapi/FileReaderLoader.cpp:
        (WebCore::FileReaderLoader::start):
        * fileapi/ThreadableBlobRegistry.cpp:
        (WebCore::ThreadableBlobRegistry::registerBlobURL):
        * fileapi/ThreadableBlobRegistry.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::loadResource):
        * loader/CrossOriginEmbedderPolicy.cpp:
        (WebCore::addCrossOriginEmbedderPolicyHeaders):
        * loader/CrossOriginEmbedderPolicy.h:
        (WebCore::operator==):
        * loader/CrossOriginOpenerPolicy.cpp:
        (WebCore::addCrossOriginOpenerPolicyHeaders):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::didBeginDocument):
        * platform/network/BlobData.h:
        (WebCore::BlobData::crossOriginEmbedderPolicy const):
        (WebCore::BlobData::setCrossOriginEmbedderPolicy):
        * platform/network/BlobRegistry.h:
        * platform/network/BlobRegistryImpl.cpp:
        (WebCore::BlobRegistryImpl::registerBlobURL):
        (WebCore::BlobRegistryImpl::registerBlobURLOptionallyFileBacked):
        * platform/network/BlobRegistryImpl.h:
        * platform/network/BlobResourceHandle.cpp:
        (WebCore::BlobResourceHandle::notifyResponseOnSuccess):

2021-08-13  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed build fix after r281012
        https://bugs.webkit.org/show_bug.cgi?id=228861

        Add missing constructor signature when USE(CFURLCONNECTION) is true.

        * platform/network/cf/ResourceError.h:
        * platform/network/cf/ResourceErrorCF.cpp: Add missing constructor signature.
        (WebCore::ResourceError::ResourceError):

2021-08-13  Alex Christensen  <achristensen@webkit.org>

        Unreviewed, reverting r281009.

        Timing not quite right

        Reverted changeset:

        "Unprefix -webkit-backface-visibility"
        https://bugs.webkit.org/show_bug.cgi?id=170983
        https://commits.webkit.org/r281009

2021-08-13  Tim Nguyen  <ntim@apple.com>

        Check for dialog existence in top layer in HTMLDialogElement::showModal & close
        https://bugs.webkit.org/show_bug.cgi?id=227907

        Reviewed by Antti Koivisto.

        Test: imported/w3c/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/dialog-showModal.html

        Test expectations are unchanged because the test uses elementFromPoint, meaning that behaviour difference isn't noticeable
        until top layer rendering bits are implemented (which would change elementFromPoint's result by shuffling z-order based on top layer elements).

        * dom/Element.h:
        (WebCore::Element::isInTopLayer const):
        * html/HTMLDialogElement.cpp:
        (WebCore::HTMLDialogElement::showModal):
        (WebCore::HTMLDialogElement::close):

2021-08-13  Jean-Yves Avenard  <jya@apple.com>

        nexttrack and previoustrack MediaSession handlers not working
        https://bugs.webkit.org/show_bug.cgi?id=229068
        rdar://80100092

        Reviewed by Youenn Fablet.

        Map between MediaSession action next/previousTrack and RemoteControlCommandType ones
        were inverted.
        There is no infrastrure in place to ensure that the right MRMediaRemoteCommand is
        used with the MediaRemote backend, which prevents automating the test.

        * Modules/mediasession/MediaSession.cpp:
        (WebCore::platformCommandForMediaSessionAction):

2021-08-13  Youenn Fablet  <youenn@apple.com>

        Overly verbose catchable fetch error messages lead to cross-origin leaks
        https://bugs.webkit.org/show_bug.cgi?id=228861

        Reviewed by Brent Fulgham.

        Standardize error messages to get more uniform with other browsers.
        To continue supporting service worker errors going to page errors,
        we add a boolean to ResourceError to control whether sanitizing the error message or not.
        This allows to keep error messages from service worker type exceptions to be exposed in window environments through fetch rejection.
        Also handle ScriptModuleLoader since it is doing its own SRI checks.
        Covered by rebased tests.

        * Modules/fetch/FetchBodyOwner.cpp:
        (WebCore::FetchBodyOwner::loadingException const):
        * Modules/fetch/FetchResponse.cpp:
        (WebCore::FetchResponse::BodyLoader::didFail):
        * platform/network/ResourceErrorBase.h:
        (WebCore::ResourceErrorBase::sanitizedDescription const):
        (WebCore::ResourceErrorBase::isSanitized const):
        (WebCore::ResourceErrorBase::setAsSanitized):
        (WebCore::ResourceErrorBase::ResourceErrorBase):
        * platform/network/cf/ResourceError.h:
        (WebCore::ResourceError::ResourceError):
        * platform/network/curl/ResourceError.h:
        (WebCore::ResourceError::ResourceError):
        * platform/network/soup/ResourceError.h:
        (WebCore::ResourceError::ResourceError):
        * workers/WorkerScriptLoader.cpp:
        (WebCore::WorkerScriptLoader::loadSynchronously):
        * workers/service/FetchEvent.cpp:
        (WebCore::FetchEvent::createResponseError):
        (WebCore::FetchEvent::respondWith):
        (WebCore::FetchEvent::promiseIsSettled):
        * workers/service/FetchEvent.h:
        * workers/service/context/ServiceWorkerFetch.cpp:
        (WebCore::ServiceWorkerFetch::processResponse):
        (WebCore::ServiceWorkerFetch::dispatchFetchEvent):
        * bindings/js/ScriptModuleLoader.cpp:
        (WebCore::ScriptModuleLoader::notifyFinished):

2021-08-13  Sergio Villar Senin  <svillar@igalia.com>

        Crash in MockMediaSourcePrivate
        https://bugs.webkit.org/show_bug.cgi?id=226795

        Reviewed by Darin Adler.

        The MockMediaPlayerMediaSource uses callOnMainThread() to execute advanceCurrentTime(). It might
        happen that the object is destructed before the callback is executed as it isn't a ref counted
        object. That leads to a crash on ASAN builds.

        Made the object capable of creating weak ptrs so that we could check whether the _this_ object
        has been freed in the meantime or not. For the former case we just bail out.

        * platform/mock/mediasource/MockMediaPlayerMediaSource.cpp:
        (WebCore::MockMediaPlayerMediaSource::play): Create a WeakPtr.
        (WebCore::MockMediaPlayerMediaSource::seekWithTolerance): Ditto.
        (WebCore::MockMediaPlayerMediaSource::seekCompleted): Ditto.
        * platform/mock/mediasource/MockMediaPlayerMediaSource.h: inherit from CanMakeWeakPtr.

2021-08-12  Alex Christensen  <achristensen@webkit.org>

        Unprefix -webkit-backface-visibility
        https://bugs.webkit.org/show_bug.cgi?id=170983

        Reviewed by Simon Fraser.

        This has already been done by Chrome and Firefox.
        Keep the prefixed version as an alias.

        Test: imported/w3c/web-platform-tests/css/css-transforms/css-transform-property-existence.html

        * animation/CSSPropertyAnimation.cpp:
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::valueForPropertyInStyle):
        * css/CSSProperties.json:
        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):
        (WebCore::CSSParserFastPaths::isKeywordPropertyID):

2021-08-12  Cameron McCormack  <heycam@apple.com>

        Fix bounds checks for WhitespaceCache string lengths
        https://bugs.webkit.org/show_bug.cgi?id=229066
        <rdar://81850871>

        Reviewed by Simon Fraser.

        When the whitespace string length is maximumWhitespaceStringLength,
        we read from and write to one element past the end of m_codes and
        m_indexes. Since we don't need to store codes and indexes for zero
        length strings, subtract one from the index we use.

        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::WhitespaceCache::lookup):
        * html/parser/HTMLConstructionSite.h:

2021-08-12  David Kilzer  <ddkilzer@apple.com>

        ThreadSanitizer: data race in WebCore::CARingBufferStorageVector::setCurrentFrameBounds() / getCurrentFrameBounds()
        <https://webkit.org/b/229014>
        <rdar://problem/81817224>

        Reviewed by Chris Dumez.

        This turned out to be a false-positive since reads and writes
        are protected differently, and it's okay if a read returns data
        from the ring buffer that is one slot older than the current
        write.

        Covered by layout tests running with TSan:
            fast/mediastream/getUserMedia-webaudio.html
            fast/mediastream/mediastreamtrack-audio-clone.html
            imported/w3c/web-platform-tests/webrtc/RTCDTMFSender-insertDTMF.https.html
            imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-iceConnectionState.https.html
            imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-track-stats.https.html
            imported/w3c/web-platform-tests/webrtc/protocol/missing-fields.html
            webrtc/audio-peer-connection-g722.html
            webrtc/audio-peer-connection-webaudio.html
            webrtc/audio-replace-track.html
            webrtc/peer-connection-audio-mute.html
            webrtc/peer-connection-audio-mute2.html
            webrtc/peer-connection-createMediaStreamDestination.html
            webrtc/peer-connection-remote-audio-mute.html
            webrtc/peer-connection-remote-audio-mute2.html

        * platform/audio/cocoa/CARingBuffer.cpp:
        (WebCore::CARingBufferStorageVector::getCurrentFrameBounds):
        (WebCore::CARingBufferStorageVector::currentStartFrame const):
        (WebCore::CARingBufferStorageVector::currentEndFrame const):
        - Add SUPPRESS_TSAN attribute since reads are protected by
          std::atomic<int32_t> m_timeBoundsQueuePtr only being
          incremented after the next m_timeBoundsQueue slot is updated.
          Writes are potected by
          Locker locker { m_currentFrameBoundsLock }.

2021-08-12  Alex Christensen  <achristensen@webkit.org>

        Unreviewed, reverting r280977.

        Seems to have broken a test in debug

        Reverted changeset:

        "Migrate Performance::resourceTimingBufferFullTimerFired to
        HTML event loop"
        https://bugs.webkit.org/show_bug.cgi?id=229044
        https://commits.webkit.org/r280977

2021-08-12  Alex Christensen  <achristensen@webkit.org>

        Migrate Performance::resourceTimingBufferFullTimerFired to HTML event loop
        https://bugs.webkit.org/show_bug.cgi?id=229044

        Reviewed by Geoff Garen.

        Covered by existing tests.
        There should be no change in behavior.

        * page/Performance.cpp:
        (WebCore::Performance::Performance):
        (WebCore::Performance::addResourceTiming):
        (WebCore::Performance::dispatchResourceTimingBufferFullEvent):
        (WebCore::Performance::contextDestroyed): Deleted.
        (WebCore::Performance::resourceTimingBufferFullTimerFired): Deleted.
        * page/Performance.h:

2021-08-12  Jer Noble  <jer.noble@apple.com>

        [macOS] Enter fullscreen animation interferes with auto-hiding menu bar
        https://bugs.webkit.org/show_bug.cgi?id=229039
        <rdar://79150656>

        Reviewed by Eric Carlson.

        Add a new utility method to calculate the available screen rect taking menu bar
        hiding into account.

        * platform/PlatformScreen.h:
        * platform/mac/PlatformScreenMac.mm:
        (WebCore::screenRectAvoidingMenuBar):

2021-08-12  Devin Rousso  <drousso@apple.com>

        Fix some `NSAttributedString` inconsistencies between WK1 and WK2
        https://bugs.webkit.org/show_bug.cgi?id=229013
        <rdar://problem/81215696>

        Reviewed by Timothy Hatcher.

        `NSAttributedString` now uses WK2, which has caused us to discover some inconsistencies (and bugs).

        Tests: NSAttributedStringWebKitAdditions.DefaultFontSize
               NSAttributedStringWebKitAdditions.MultipleParagraphs

        * editing/cocoa/HTMLConverter.mm:
        (HTMLConverter::_blockLevelElementForNode):
        Check the given node before looking at the parent as it could already be a block. This
        allows for sequental `<p>` to each have their own positioning instead of only the first one.
        (HTMLConverter::computedAttributesForElement):
        Fix typo that used `margin-right` instead of `margin-bottom` when setting `paragraphSpacing`.

2021-08-12  Youenn Fablet  <youenn@apple.com>

        Adopt span in RTCRtpSFrameTransform
        https://bugs.webkit.org/show_bug.cgi?id=229029

        Reviewed by Eric Carlson.

        Transition to Span for improved readability, no change of behavior.

        * Modules/mediastream/RTCEncodedFrame.cpp:
        (WebCore::RTCEncodedFrame::data const):
        * Modules/mediastream/RTCRtpSFrameTransform.cpp:
        (WebCore::processFrame):
        (WebCore::RTCRtpSFrameTransform::initializeTransformer):
        (WebCore::transformFrame):
        (WebCore::RTCRtpSFrameTransform::createStreams):
        * Modules/mediastream/RTCRtpSFrameTransformer.cpp:
        (WebCore::RTCRtpSFrameTransformer::decryptFrame):
        (WebCore::RTCRtpSFrameTransformer::encryptFrame):
        (WebCore::RTCRtpSFrameTransformer::transform):
        * Modules/mediastream/RTCRtpSFrameTransformer.h:
        * Modules/mediastream/RTCRtpScriptTransformer.cpp:
        (WebCore::RTCRtpScriptTransformer::writable):
        * Modules/mediastream/RTCRtpTransformableFrame.h:
        (): Deleted.
        * Modules/mediastream/libwebrtc/LibWebRTCRtpTransformableFrame.cpp:
        (WebCore::LibWebRTCRtpTransformableFrame::data const):
        (WebCore::LibWebRTCRtpTransformableFrame::setData):
        * Modules/mediastream/libwebrtc/LibWebRTCRtpTransformableFrame.h:

2021-08-12  Johnson Zhou  <qiaosong_zhou@apple.com>

        Removal of "TypedOM" prefix for CSSOM Object names
        https://bugs.webkit.org/show_bug.cgi?id=229028

        Reviewed by Alex Christensen.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCSSStyleValueCustom.cpp: Renamed from Source/WebCore/bindings/js/JSTypedOMCSSStyleValueCustom.cpp.
        (WebCore::toJSNewlyCreated):
        (WebCore::toJS):
        * css/typedom/CSSNumericValue.cpp: Renamed from Source/WebCore/css/typedom/TypedOMCSSUnitValue.cpp.
        * css/typedom/CSSNumericValue.h: Renamed from Source/WebCore/css/typedom/TypedOMCSSNumericValue.h.
        * css/typedom/CSSNumericValue.idl: Renamed from Source/WebCore/css/typedom/TypedOMCSSNumericValue.idl.
        * css/typedom/CSSStyleImageValue.cpp: Renamed from Source/WebCore/css/typedom/TypedOMCSSImageValue.cpp.
        (WebCore::CSSStyleImageValue::CSSStyleImageValue):
        (WebCore::CSSStyleImageValue::document const):
        * css/typedom/CSSStyleImageValue.h: Renamed from Source/WebCore/css/typedom/TypedOMCSSImageValue.h.
        * css/typedom/CSSStyleImageValue.idl: Renamed from Source/WebCore/css/typedom/TypedOMCSSImageValue.idl.
        * css/typedom/CSSStyleValue.cpp: Renamed from Source/WebCore/css/typedom/TypedOMCSSStyleValue.cpp.
        * css/typedom/CSSStyleValue.h: Renamed from Source/WebCore/css/typedom/TypedOMCSSStyleValue.h.
        * css/typedom/CSSStyleValue.idl: Renamed from Source/WebCore/css/typedom/TypedOMCSSStyleValue.idl.
        * css/typedom/CSSUnitValue.cpp: Renamed from Source/WebCore/css/typedom/TypedOMCSSNumericValue.cpp.
        * css/typedom/CSSUnitValue.h: Renamed from Source/WebCore/css/typedom/TypedOMCSSUnitValue.h.
        * css/typedom/CSSUnitValue.idl: Renamed from Source/WebCore/css/typedom/TypedOMCSSUnitValue.idl.
        * css/typedom/CSSUnparsedValue.cpp: Renamed from Source/WebCore/css/typedom/TypedOMCSSUnparsedValue.cpp.
        * css/typedom/CSSUnparsedValue.h: Renamed from Source/WebCore/css/typedom/TypedOMCSSUnparsedValue.h.
        * css/typedom/CSSUnparsedValue.idl: Renamed from Source/WebCore/css/typedom/TypedOMCSSUnparsedValue.idl.
        * css/typedom/StylePropertyMapReadOnly.cpp:
        (WebCore::StylePropertyMapReadOnly::reifyValue):
        (WebCore::StylePropertyMapReadOnly::customPropertyValueOrDefault):
        * css/typedom/StylePropertyMapReadOnly.h:
        * css/typedom/StylePropertyMapReadOnly.idl:
        * dom/StyledElement.cpp:
        * html/CustomPaintImage.cpp:
        (WebCore::extractComputedProperty):
        (WebCore::CustomPaintImage::doCustomPaint):
        * html/ImageBitmap.cpp:
        (WebCore::ImageBitmap::createPromise):
        * html/ImageBitmap.h:
        * html/canvas/CanvasDrawImage.idl:
        * html/canvas/CanvasFillStrokeStyles.idl:
        * html/canvas/CanvasRenderingContext.cpp:
        (WebCore::CanvasRenderingContext::checkOrigin):
        * html/canvas/CanvasRenderingContext.h:
        * html/canvas/CanvasRenderingContext2DBase.cpp:
        (WebCore::size):
        (WebCore::CanvasRenderingContext2DBase::drawImage):
        (WebCore::CanvasRenderingContext2DBase::createPattern):
        * html/canvas/CanvasRenderingContext2DBase.h:
        * inspector/InspectorCanvas.cpp:
        (WebCore::InspectorCanvas::processArgument):
        (WebCore::InspectorCanvas::indexForData):
        * inspector/InspectorCanvas.h:
        * inspector/InspectorCanvasCallTracer.cpp:
        * inspector/InspectorCanvasCallTracer.h:
        * inspector/agents/InspectorCanvasAgent.cpp:
        * page/WindowOrWorkerGlobalScope.idl:

2021-08-12  Kimmo Kinnunen  <kkinnunen@apple.com>

        webgl/1.0.x/conformance/textures/misc/texture-corner-case-videos.html fails on Cocoa
        https://bugs.webkit.org/show_bug.cgi?id=228821
        <rdar://problem/81562236>

        Reviewed by Kenneth Russell.

        When uploading the WebGL texture content from videos, use the video
        visible data size instead of video element size. The video data can
        be scaled with its filters, but we should upload only the original
        pixels.

        The GPU codepath already did this, but CPU codepath did not.
        This change fixes the CPU codepath.

        Fixes webgl/1.0.x/conformance/textures/misc/texture-corner-case-videos.html
        webgl/2.0.y/conformance/textures/misc/texture-corner-case-videos.html

        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::texImageSourceHelper):
        (WebCore::WebGLRenderingContextBase::videoFrameToImage):
        (WebCore::WebGLRenderingContextBase::LRUImageBufferCache::imageBuffer):
        * html/canvas/WebGLRenderingContextBase.h:

2021-08-12  Youenn Fablet  <youenn@apple.com>

        Implement SFrameTransform error handling
        https://bugs.webkit.org/show_bug.cgi?id=228947

        Reviewed by Eric Carlson.

        Add support for RTCRtpSFrameTransformErrorEvent.
        When RTCRtpSFrameTransformer encounters an issue, dispatch a task to RTCRtpSFrameTransform context and fire a corresponding event.
        This follows https://w3c.github.io/webrtc-encoded-transform/#sframe-transform-algorithm, except that:
        - we are not yet exposing some fields in RTCRtpSFrameTransformErrorEvent.
        - we are using errorType instead of type which should be fixed in the spec.

        Test: imported/w3c/web-platform-tests/webrtc-encoded-transform/sframe-transform-error.html

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/mediastream/RTCRtpSFrameTransform.cpp:
        (WebCore::RTCRtpSFrameTransform::RTCRtpSFrameTransform):
        (WebCore::errorTypeFromInformation):
        (WebCore::processFrame):
        (WebCore::RTCRtpSFrameTransform::hasKey const):
        (WebCore::RTCRtpSFrameTransform::initializeTransformer):
        (WebCore::transformFrame):
        (WebCore::RTCRtpSFrameTransform::createStreams):
        (WebCore::RTCRtpSFrameTransform::writable):
        (WebCore::RTCRtpSFrameTransform::virtualHasPendingActivity const):
        * Modules/mediastream/RTCRtpSFrameTransform.h:
        * Modules/mediastream/RTCRtpSFrameTransform.idl:
        * Modules/mediastream/RTCRtpSFrameTransformErrorEvent.cpp: Added.
        (WebCore::RTCRtpSFrameTransformErrorEvent::create):
        (WebCore::RTCRtpSFrameTransformErrorEvent::RTCRtpSFrameTransformErrorEvent):
        (WebCore::RTCRtpSFrameTransformErrorEvent::eventInterface const):
        * Modules/mediastream/RTCRtpSFrameTransformErrorEvent.h: Added.
        * Modules/mediastream/RTCRtpSFrameTransformErrorEvent.idl: Added.
        * Modules/mediastream/RTCRtpSFrameTransformer.cpp:
        (WebCore::RTCRtpSFrameTransformer::hasKey const):
        (WebCore::RTCRtpSFrameTransformer::decryptFrame):
        (WebCore::RTCRtpSFrameTransformer::encryptFrame):
        (WebCore::RTCRtpSFrameTransformer::transform):
        * Modules/mediastream/RTCRtpSFrameTransformer.h:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:
        * dom/EventNames.in:
        * dom/EventTargetFactory.in:

2021-08-11  Alex Christensen  <achristensen@webkit.org>

        Remove optimistic assertion added in r280931
        https://bugs.webkit.org/show_bug.cgi?id=229008

        * page/PerformanceTiming.cpp:
        (WebCore::PerformanceTiming::fetchStart const):
        This assertion is hit in the test fast/dom/Window/property-access-on-cached-window-after-frame-removed.html
        when accessing window.performance.fetchStart from a detached window object from a frame that has been removed from the DOM.

2021-08-11  Chris Dumez  <cdumez@apple.com>

        Add initial support for Cross-Origin-Embedder-Policy (COEP)
        https://bugs.webkit.org/show_bug.cgi?id=228754

        Reviewed by Alex Christensen.

        Add initial support for Cross-Origin-Embedder-Policy (COEP) behind a runtime feature flag, off by default:
        - https://html.spec.whatwg.org/multipage/origin.html#coep

        The COEP header has the following impacts:
        - When a document with `Cross-Origin-Embedder-Policy: require-corp` loads an iframe or a worker script, if the network
          response for that iframe doesn't also contain `Cross-Origin-Embedder-Policy: require-corp`, then we fail the load.
        - When a document with `Cross-Origin-Embedder-Policy: require-corp` loads cross-origin subresources, then either CORS
          must be used or the resource response must be allowed by Cross-Origin-Resource-Policy (CORP) header.

        Support is only for WK2 and checks are done in the network process for better security. Support for workers and service
        workers (including cache storage) is included.

        Most of the Web-Platform-Tests for COEP are passing with this patch. The exceptions are:
        - Some tests relying on Blob are failing. Similarly to COOP, Blobs need to inherit COEP from their
          creator. This is currently unimplemented as the change will likely be non-trivial. I will follow-up
          to fix Blob support for both COOP and COEP.
        - Tests in the credentialless/ folder are failing because we do not support `Cross-Origin-Embedder-Policy: credentialless`.
          This seems to be a fairly recent extension proposed by Google and it is not part of the HTML specification yet.
        - Some tests expect violation reporting and they are failing and we do not implement reporting yet.

        Note that `self.crossOriginIsolated` still returns false, even if the pages opts into both COOP & COEP, and APIs such
        as SharedArrayBuffer still are not permitted to use. In order to support this, we will have to actually implement process
        swapping so that we know a process is not actually shared by several origins.

        Test: http/wpt/html/cross-origin-embedder-policy/require-corp.https.html

        * Modules/cache/DOMCache.cpp:
        (WebCore::DOMCache::queryCache):
        * Modules/cache/DOMCacheEngine.cpp:
        (WebCore::DOMCacheEngine::convertToException):
        * Modules/cache/DOMCacheEngine.h:
        * Modules/cache/RetrieveRecordsOptions.h:
        (WebCore::RetrieveRecordsOptions::isolatedCopy const):
        (WebCore::RetrieveRecordsOptions::encode const):
        (WebCore::RetrieveRecordsOptions::decode):
        * dom/Document.cpp:
        (WebCore::Document::initSecurityContext):
        * dom/SecurityContext.h:
        (WebCore::SecurityContext::crossOriginEmbedderPolicy const):
        (WebCore::SecurityContext::setCrossOriginEmbedderPolicy):
        * loader/CrossOriginAccessControl.cpp:
        (WebCore::shouldCrossOriginResourcePolicyCancelLoad):
        (WebCore::validateCrossOriginResourcePolicy):
        * loader/CrossOriginAccessControl.h:
        * loader/CrossOriginEmbedderPolicy.cpp:
        (WebCore::obtainCrossOriginEmbedderPolicy):
        (WebCore::CrossOriginEmbedderPolicy::isolatedCopy const):
        * loader/CrossOriginEmbedderPolicy.h:
        (WebCore::CrossOriginEmbedderPolicy::encode const):
        (WebCore::CrossOriginEmbedderPolicy::decode):
        * loader/CrossOriginOpenerPolicy.cpp:
        (WebCore::obtainCrossOriginOpenerPolicy):
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::loadResourceSynchronously):
        (WebCore::DocumentThreadableLoader::create):
        (WebCore::DocumentThreadableLoader::DocumentThreadableLoader):
        (WebCore::DocumentThreadableLoader::crossOriginEmbedderPolicy const):
        * loader/DocumentThreadableLoader.h:
        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::begin):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::didBeginDocument):
        * loader/ResourceLoaderOptions.h:
        * loader/WorkerThreadableLoader.cpp:
        (WebCore::WorkerThreadableLoader::MainThreadBridge::MainThreadBridge):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestResource):
        * page/SecurityOrigin.h:
        * platform/network/HTTPParsers.cpp:
        (WebCore::parseCrossOriginResourcePolicyHeader):
        * platform/network/HTTPParsers.h:
        * workers/Worker.cpp:
        (WebCore::Worker::notifyFinished):
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::WorkerGlobalScope):
        * workers/WorkerGlobalScopeProxy.h:
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::startWorkerGlobalScope):
        * workers/WorkerMessagingProxy.h:
        * workers/WorkerScriptLoader.cpp:
        (WebCore::WorkerScriptLoader::loadSynchronously):
        (WebCore::WorkerScriptLoader::loadAsynchronously):
        (WebCore::WorkerScriptLoader::didReceiveResponse):
        * workers/WorkerScriptLoader.h:
        (WebCore::WorkerScriptLoader::crossOriginEmbedderPolicy const):
        * workers/WorkerThread.cpp:
        (WebCore::WorkerParameters::isolatedCopy const):
        * workers/WorkerThread.h:
        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::jobFinishedLoadingScript):
        * workers/service/ServiceWorkerContainer.h:
        * workers/service/ServiceWorkerContextData.cpp:
        (WebCore::ServiceWorkerContextData::isolatedCopy const):
        * workers/service/ServiceWorkerContextData.h:
        (WebCore::ServiceWorkerContextData::encode const):
        (WebCore::ServiceWorkerContextData::decode):
        * workers/service/ServiceWorkerFetchResult.h:
        (WebCore::ServiceWorkerFetchResult::isolatedCopy const):
        (WebCore::serviceWorkerFetchError):
        (WebCore::ServiceWorkerFetchResult::encode const):
        (WebCore::ServiceWorkerFetchResult::decode):
        * workers/service/ServiceWorkerJob.cpp:
        (WebCore::ServiceWorkerJob::notifyFinished):
        * workers/service/ServiceWorkerJobClient.h:
        * workers/service/context/ServiceWorkerThread.cpp:
        (WebCore::ServiceWorkerThread::ServiceWorkerThread):
        * workers/service/server/RegistrationDatabase.cpp:
        (WebCore::RegistrationDatabase::doPushChanges):
        (WebCore::RegistrationDatabase::importRecords):
        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::addRegistrationFromStore):
        (WebCore::SWServer::updateWorker):
        (WebCore::SWServer::installContextData):
        * workers/service/server/SWServer.h:
        * workers/service/server/SWServerJobQueue.cpp:
        (WebCore::SWServerJobQueue::scriptFetchFinished):
        * workers/service/server/SWServerWorker.cpp:
        (WebCore::SWServerWorker::SWServerWorker):
        (WebCore::SWServerWorker::contextData const):
        * workers/service/server/SWServerWorker.h:

2021-08-11  Jean-Yves Avenard  <jya@apple.com>

        Audio buffer may contain more frames than decoded.
        https://bugs.webkit.org/show_bug.cgi?id=228732
        rdar://problem/81447014

        Reviewed by Eric Carlson.

        It is necessary to call repeatedly ExtAudioFileRead until it explicitly indicates that
        it reached EOF.
        Test: webaudio/decode-audio-data-wav.html.

        * platform/audio/cocoa/AudioFileReaderCocoa.cpp:
        (WebCore::AudioFileReader::createBus): Ensure that all frames have been decoded and
        trim length to the actual number of frames returned.
        This was already done for the webm case.

2021-08-11  Chris Dumez  <cdumez@apple.com>

        <a rel="opener noopener" target="_blank"> should create a window without opener
        https://bugs.webkit.org/show_bug.cgi?id=229011

        Reviewed by Alex Christensen.

        <a rel="opener noopener" target="_blank"> should create a window without opener, as per:
        - https://html.spec.whatwg.org/#get-an-element's-noopener (noopener is checked *before* opener).

        Firefox and Chrome match the specification.

        No new tests, rebaselined existing tests.

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::handleClick):

2021-08-11  Alex Christensen  <achristensen@webkit.org>

        REGRESSION (r278392) performance.measure should never throw an InvalidAccessError for fetchStart
        https://bugs.webkit.org/show_bug.cgi?id=229008
        <rdar://79960877>

        Reviewed by Chris Dumez.

        Test: http/tests/performance/performance-measure-fetch-start.html

        PerformanceTiming::fetchStart is returning 0 when we get a main resource from the cache sometimes.
        This is causing PerformanceUserTiming::convertMarkToTimestamp to throw an error, which it should.
        Like PerformanceResourceTiming::fetchStart we need to fall back to ResourceLoadTiming::startTime
        if the NetworkLoadMetrics doesn't have any useful data for us.

        * page/PerformanceTiming.cpp:
        (WebCore::PerformanceTiming::fetchStart const):

2021-08-11  John Wilander  <wilander@apple.com>

        PCM: Flip WebCore's FraudPreventionEnabled to true if HAVE(RSA_BSSA) to match the experimental setting
        https://bugs.webkit.org/show_bug.cgi?id=228961

        Reviewed by Tim Horton.

        Existing tests use the affected anchor attribute.

        * page/RuntimeEnabledFeatures.h:
        * page/Settings.yaml:

2021-08-11  Dana Estra  <destra@apple.com>

        Start smooth keyboard scrolling animation when pageUp or pageDown key is pressed.
        https://bugs.webkit.org/show_bug.cgi?id=228156

        Reviewed by Tim Horton.
        
        UIProcess now no longer handles scrollPageUp and scrollPageDown events. They return to eventHandler as
        unhandled and the keyboard scroll animation is started.

        Tests: fast/scrolling/keyboard-scrolling-distance-downArrow.html
               fast/scrolling/keyboard-scrolling-distance-pageDown.html

        * page/EventHandler.cpp:
        (WebCore::EventHandler::defaultKeyboardEventHandler):
        * platform/KeyboardScrollingAnimator.cpp:
        (WebCore::KeyboardScrollingAnimator::keyboardScrollForKeyboardEvent const):

2021-08-11  Aditya Keerthi  <akeerthi@apple.com>

        REGRESSION (r273072): Caps lock indicator in password field is too large
        https://bugs.webkit.org/show_bug.cgi?id=228970
        rdar://81546781

        Reviewed by Wenson Hsieh.

        r273072 made it so that flex items with an intrinsic size will honor
        their aspect ratio when computing their content size. Prior to the
        change, in taller password fields, the flex item representing the caps
        lock indicator would be tall and narrow. The height would stretch to
        fill the container, but the width would maintain its intrinsic width of
        17px. Now that aspect ratio is accounted for, the width increases to
        match the height, resulting in a much larger indicator in taller password
        fields.

        However, while r273072 regressed the appearance of the caps lock
        indicator, it merely exposed an issue with the styling of the indicator.

        Consider the following test case, which is a reduced version how the
        caps lock indicator is styled:

        <div style="display: flex; height: 100px">
            <div style="content: url(17_x_17_blue_square.svg); align-self: stretch;"></div>
        </div>

        Prior to r273072, this displayed a 17x17 blue square (inside a 17x100
        flex item). However, in Chrome, Firefox, and WebKit after r273072, this
        shows a 100x100 blue square (inside a 100x100 flex item). This is the
        expected behavior now that aspect ratio is accounted for.

        Consequently, to fix the issue, the width of the indicator must be
        limited to a maximum value. 17px was chosen to be the max-width, as the
        indicator's width would not exceed 17px prior to r273072.

        Test: fast/forms/caps-lock-indicator-width.html

        * css/html.css:
        (input::-webkit-caps-lock-indicator):

2021-08-11  Chris Dumez  <cdumez@apple.com>

        Stop evaluating <script>s moved between Documents during fetching
        https://bugs.webkit.org/show_bug.cgi?id=202714
        <rdar://problem/56208425>

        Reviewed by Geoffrey Garen.

        Stop evaluating <script>s moved between Documents during fetching:
        - https://github.com/whatwg/html/issues/2469
        - https://github.com/whatwg/html/pull/2673

        Both Firefox and Chrome already behave this way.

        No new tests, rebaselined existing tests.

        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::prepareScript):
        Set the element's preparation-time document to its node document, as per:
        - https://html.spec.whatwg.org/multipage/scripting.html#prepare-a-script (step 11)

        (WebCore::ScriptElement::executePendingScript):
        If scriptElement's preparation-time document is not equal to scriptElement's node document, then return, as per:
        - https://html.spec.whatwg.org/multipage/scripting.html#execute-the-script-block (step 2)

        * dom/ScriptElement.h:

2021-08-11  Youenn Fablet  <youenn@apple.com>

        Media element is not always autoplaying when going from background to foreground if it is initially not in viewport
        https://bugs.webkit.org/show_bug.cgi?id=228955

        Reviewed by Eric Carlson.

        In case video element is autoplayable but is paused, we should try to autoplay even if we are not interrupted due to invisible autoplay.
        Covered by API test.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::updateShouldAutoplay):

2021-08-11  Youenn Fablet  <youenn@apple.com>

        Remove --no-demangle XLinker option from WebCore
        https://bugs.webkit.org/show_bug.cgi?id=228949

        Reviewed by Alexey Proskuryakov.

        Remove options that were added inadvertently.
        No change of behavior as this is changing the linker log only.

        * Configurations/WebCore.xcconfig:
        * Configurations/WebCoreTestSupport.xcconfig:

2021-08-11  Chris Dumez  <cdumez@apple.com>

        HTMLMetaElement http-equiv should not be processed in shadow trees
        https://bugs.webkit.org/show_bug.cgi?id=228973

        Reviewed by Geoffrey Garen.

        HTMLMetaElement http-equiv should not be processed in shadow trees:
        - https://html.spec.whatwg.org/#attr-meta-http-equiv
        - https://html.spec.whatwg.org/multipage/infrastructure.html#insert-an-element-into-a-document
        - https://dom.spec.whatwg.org/#in-a-document-tree

        Firefox and Chrome already match the specification here.

        No new tests, rebaselined existing test.

        * dom/Node.h:
        (WebCore::Node::isInDocumentTree const):
        * html/HTMLMetaElement.cpp:
        (WebCore::HTMLMetaElement::attributeChanged):
        (WebCore::HTMLMetaElement::process):

2021-08-11  Chris Dumez  <cdumez@apple.com>

        HTMLStyleElement should create its style sheet even if its media attribute is invalid
        https://bugs.webkit.org/show_bug.cgi?id=228977

        Reviewed by Antti Koivisto.

        HTMLStyleElement should create its style sheet even if its media attribute is invalid.

        WebKit currently didn't and this was causing us to fail the following WPT test:
        - html/semantics/document-metadata/the-style-element/style_non_matching_media.html

        This WPT test is passing in both Firefox and Chrome.

        No new tests, rebaselined existing tests.

        * dom/InlineStyleSheetOwner.cpp:
        (WebCore::InlineStyleSheetOwner::createSheet):

2021-08-11  Chris Dumez  <cdumez@apple.com>

        Dynamically changing HTMLStyleElement.type should change the rendering accordingly
        https://bugs.webkit.org/show_bug.cgi?id=228980

        Reviewed by Antti Koivisto.

        Dynamically changing HTMLStyleElement.type should change the rendering accordingly.

        This is causing the following WPT test to fail in WebKit:
        - html/semantics/document-metadata/the-style-element/style_type_change.html 

        This test is passing in both Firefox and Chrome.

        No new tests, rebaselined existing test.

        * html/HTMLStyleElement.cpp:
        (WebCore::HTMLStyleElement::parseAttribute):

2021-08-11  Adrian Perez de Castro  <aperez@igalia.com>

        Non-unified build fixes, mid August 2021 edition
        https://bugs.webkit.org/show_bug.cgi?id=228985

        Unreviewed non-unified build fixes.

        * fileapi/ThreadableBlobRegistry.cpp: Add missing CrossOriginOpenerPolicy.h include.
        * html/FormController.cpp: Add missing TypedElementDescendantIterator.h include.
        * html/FormController.h: Add missing forward declaration for the Document type.
        * loader/CrossOriginEmbedderPolicy.cpp: Add missing ResourceResponse.h include.
        * loader/CrossOriginOpenerPolicy.cpp: Ditto.

2021-08-11  Cathie Chen  <cathiechen@igalia.com>

        REGRESSION (r277997): Max-height not applied for image
        https://bugs.webkit.org/show_bug.cgi?id=228872

        Reviewed by Antti Koivisto.

        The image get stretched because constrainLogicalHeightByMinMax uses the intrinsic height for the minimum height.
        According to [1], the automatic minimum size in the ratio-dependent axis of a box is its min-content size,
        not the intrinsic size. To fix this, the ratio-dependent minimum height of a box should be computed from aspect-ratio
        if it doesn't have any child, otherwise, then it should consider the intrinsic height. 

        [1] https://www.w3.org/TR/css-sizing-4/#aspect-ratio-minimum

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::constrainLogicalHeightByMinMax const): The minimum height is computed from aspect-ratio if it doesn't have any child.

2021-08-11  Rob Buis  <rbuis@igalia.com>

        [SVG] Attribute change triggers redundant (and out of order) setNeedsLayout call
        https://bugs.webkit.org/show_bug.cgi?id=228125

        Reviewed by Darin Adler.

        As explained in the bug the setNeedsLayout call is redundant, however
        keep using it for embedded SVG's to update width/height of the embedder.

        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::svgAttributeChanged):

2021-08-10  Chris Dumez  <cdumez@apple.com>

        Add Cross-Origin-Opener-Policy support for Blob URLs
        https://bugs.webkit.org/show_bug.cgi?id=228924

        Reviewed by Alex Christensen.

        Pass ScriptExecutionContext's cross-origin-opener-policy when registering a public
        Blob URL and store it in the blob registry alongside the blob data. As a result,
        we are able to service the right COOP headers on the blob response later on when
        doing a load of this blob. In the future, we'll pass the cross-origin-embedder-policy
        as well, once we support it.

        No new tests, rebaselined existing test.

        * Modules/fetch/FetchLoader.cpp:
        (WebCore::FetchLoader::startLoadingBlobURL):
        * dom/Document.h:
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::crossOriginOpenerPolicy const):
        * dom/ScriptExecutionContext.h:
        * fileapi/Blob.cpp:
        (WebCore::BlobURLRegistry::registerURL):
        (WebCore::Blob::Blob):
        * fileapi/FileReaderLoader.cpp:
        (WebCore::FileReaderLoader::start):
        * fileapi/ThreadableBlobRegistry.cpp:
        (WebCore::ThreadableBlobRegistry::registerBlobURL):
        * fileapi/ThreadableBlobRegistry.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::loadResource):

        * loader/CrossOriginEmbedderPolicy.cpp:
        (WebCore::obtainCrossOriginEmbedderPolicy):
        For WebKit1, the initial empty document seems to have an empty URL instead of
        "about:blank" so I had to extend the check so that COEP properly gets enabled.

        * loader/CrossOriginOpenerPolicy.cpp:
        (WebCore::obtainCrossOriginOpenerPolicy):
        For WebKit1, the initial empty document seems to have an empty URL instead of
        "about:blank" so I had to extend the check so that COOP properly gets enabled.

        (WebCore::crossOriginOpenerPolicyToString):
        (WebCore::CrossOriginOpenerPolicy::isolatedCopy const):
        (WebCore::addCrossOriginOpenerPolicyHeaders):
        * loader/CrossOriginOpenerPolicy.h:
        (WebCore::operator==):
        (WebCore::CrossOriginOpenerPolicy::encode const):
        (WebCore::CrossOriginOpenerPolicy::decode):
        * platform/network/BlobData.cpp:
        (WebCore::BlobData::clone const):
        * platform/network/BlobData.h:
        (WebCore::BlobData::crossOriginOpenerPolicy const):
        (WebCore::BlobData::setCrossOriginOpenerPolicy):
        * platform/network/BlobRegistry.h:
        * platform/network/BlobRegistryImpl.cpp:
        (WebCore::BlobRegistryImpl::registerBlobURL):
        (WebCore::BlobRegistryImpl::registerBlobURLOptionallyFileBacked):
        * platform/network/BlobRegistryImpl.h:
        * platform/network/BlobResourceHandle.cpp:
        (WebCore::BlobResourceHandle::notifyResponseOnSuccess):

2021-08-10  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Live Text] Unable to start drag on image when the first piece of text inside the image is selected
        https://bugs.webkit.org/show_bug.cgi?id=228967
        rdar://80471465

        Reviewed by Tim Horton.

        When selecting text inside an image element using Live Text, if the text selection contains the very first
        character (in DOM order) that appears in the image element's shadow root, the user will be unable to start an
        image drag on the same image by clicking another part of the image that does not contain Live Text. This happens
        because `DragController::startDrag` to handle the drag as a selection drag rather than an image drag, which (in
        turn) happens because `DragController::draggableElement` computes a drag source type of
        `DragSourceAction::Selection`.

        This occurs because `FrameSelection::contains(const LayoutPoint&)` returns `true` for any point inside the
        shadow root of an image element with Live Text that does NOT hit-test to a text node, because we end up hit-
        testing to the image overlay container `div` as our `innerNode`, which means that the DOM position for the given
        point is going to be at the first position inside the image overlay container. Since this canonicalizes to the
        beginning of the first text node (in DOM order) inside the image overlay, if that first text node happens to be
        selected, we'll end up believing that the layout point (which is not over any text inside the image) is inside
        the selection.

        To avoid this, we make a minor adjustment to the logic in `FrameSelection::contains`, so that we handle text
        inside image overlays by mapping the selected text range to absolute quads, and then checking whether the given
        point (in absolute coordinates) is contained in any of those quads.

        While we could theoretically use this approach for all selections, it's both more expensive than a hit-test and
        might result in compatibility issues, so we just limit it to the case where we know (a-prior) that all
        selectable text is arbitrarily positioned using transforms.

        This change fixes an API test that currently fails on macOS: DragAndDropTests.DragElementWithImageOverlay

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::contains const):

2021-08-10  Chris Dumez  <cdumez@apple.com>

        Meta HTTP refresh should not navigate if document has sandboxed automatic features browsing context flag set
        https://bugs.webkit.org/show_bug.cgi?id=228965

        Reviewed by Darin Adler.

        Meta HTTP refresh should not navigate if document has sandboxed automatic features browsing context flag set:
        - https://html.spec.whatwg.org/multipage/semantics.html#shared-declarative-refresh-steps (Step 13)

        Firefox and Chrome already behave this way.

        No new tests, rebaselined existing tests.

        * dom/Document.cpp:
        (WebCore::Document::processMetaHttpEquiv):
        * dom/Document.h:
        * html/HTMLMetaElement.cpp:
        (WebCore::HTMLMetaElement::process):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::responseReceived):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::receivedFirstData):
        (WebCore::FrameLoader::scheduleRefreshIfNeeded):
        * loader/FrameLoader.h:
        * loader/FrameLoaderTypes.h:
        * loader/NavigationScheduler.cpp:
        (WebCore::ScheduledRedirect::ScheduledRedirect):
        (WebCore::NavigationScheduler::scheduleRedirect):
        * loader/NavigationScheduler.h:

2021-08-10  Ryosuke Niwa  <rniwa@webkit.org>

        Deploy some more smart pointers in DOMWindow.cpp
        https://bugs.webkit.org/show_bug.cgi?id=228883

        Reviewed by Darin Adler.

        A follow up to r279661. Deploy even more smart pointers.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::dispatchAllPendingBeforeUnloadEvents):
        (WebCore::DOMWindow::failedToRegisterDeviceMotionEventListener):
        (WebCore::DOMWindow::dispatchEvent):

2021-08-10  Antti Koivisto  <antti@apple.com>

        Remove some dead code from LegacyInlineFlowBox::nodeAtPoint
        https://bugs.webkit.org/show_bug.cgi?id=228960

        Reviewed by Alan Bujtas.

        * rendering/LegacyInlineFlowBox.cpp:
        (WebCore::LegacyInlineFlowBox::nodeAtPoint):

        This hit test quirk got accidentally disabled 7 years ago (in http://trac.webkit.org/changeset/170875/webkit)
        and this became dead code. No one has complained.

2021-08-10  Ben Nham  <nham@apple.com>

        Fix nested resource load tracepoints
        https://bugs.webkit.org/show_bug.cgi?id=228242

        Reviewed by Alex Christensen.

        The main resource and subresource load tracepoints aren't interpreted correctly if there are
        multiple resource loads in flight at the same time. To fix this, we pass the pointer to the
        FrameLoader or SubresourceLoader to ktrace so that the tracing tool can use that pointer to
        properly nest overlapping resource loading trace intervals.

        One additional change I made is to move the SubresourceLoadWillStart tracepoint to after the
        call to willSendRequestInternal. The reason for this is because I wanted to log the resource
        ID associated with the subresource request, but we only generate that ID after the call to
        willSendRequestInternal.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::provisionalLoadStarted):
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame):
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::willSendRequestInternal):
        (WebCore::SubresourceLoader::didFinishLoading):
        (WebCore::SubresourceLoader::didFail):
        (WebCore::SubresourceLoader::didCancel):

2021-08-10  Chris Dumez  <cdumez@apple.com>

        Document.baseURI is inaccurate for iframe srcdoc documents
        https://bugs.webkit.org/show_bug.cgi?id=228933

        Reviewed by Alex Christensen.

        Document.baseURI is inaccurate for iframe srcdoc documents:
        - https://html.spec.whatwg.org/#fallback-base-url

        This aligns our behavior with both Chrome and Firefox.

        No new tests, rebaselined existing tests.

        * dom/Document.cpp:
        (WebCore::Document::fallbackBaseURL const):
        (WebCore::Document::updateBaseURL):
        Extract "fallback base URL" logic out of updateBaseURL() and into its own function so that
        it can be called from other places. Add logic to deal with iframe srcdoc documents to
        our "fallback base URL" logic, as per:
        - https://html.spec.whatwg.org/#fallback-base-url

        (WebCore::Document::processBaseElement):
        As per https://html.spec.whatwg.org/#set-the-frozen-base-url, we should use the document's fallback base URL
        as base URL when parsing the base element's href attribute.

        * dom/Document.h:

        * html/HTMLBaseElement.cpp:
        (WebCore::HTMLBaseElement::href const):
        Per https://html.spec.whatwg.org/#dom-base-href, we should use the document's fallback base URL when
        parsing the base element's href attribute. Also we should return the attribute value if the URL fails
        parsing, not a null URL.

        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::openFunc):
        Keep in sync with HTMLBaseElement::href(), as per comment.

2021-08-10  Kimmo Kinnunen  <kkinnunen@apple.com>

        Scripts/generate-derived-sources.sh: line 19: [: binary operator expected while building Source/WebKit
        https://bugs.webkit.org/show_bug.cgi?id=228908

        Reviewed by Per Arne Vollan.


        * Scripts/generate-derived-sources.sh:
        Quote the use of CC so that future copy-paste does not make the same mistake
        as this bug.

2021-08-10  Devin Rousso  <drousso@apple.com>

        [macOS] REGRESSION(r278850): modifying `playbackRate` via JS on a TouchBar mac only sometimes works and also causes the `defaultPlaybackRate` to change
        https://bugs.webkit.org/show_bug.cgi?id=228939
        <rdar://problem/80427578>

        Reviewed by Eric Carlson.

        Test: VideoControlsManager.VideoControlsManagerDoesNotChangeValuesExposedToJavaScript

        * platform/mac/PlaybackSessionInterfaceMac.mm:
        (WebCore::PlaybackSessionInterfaceMac::rateChanged):
        Make sure to change the `defaultPlaybackRate` before the `rate` as otherwise the former will
        override changes made to the latter (see r278850 (and r277203) for details as to why).

        * platform/mac/WebPlaybackControlsManager.h:
        * platform/mac/WebPlaybackControlsManager.mm:
        (-[WebPlaybackControlsManager setDefaultPlaybackRate:]):
        (-[WebPlaybackControlsManager setDefaultPlaybackRate:fromJavaScript:]): Added.
        (-[WebPlaybackControlsManager setRate:]):
        (-[WebPlaybackControlsManager setRate:fromJavaScript:]): Added.
        Add a way to distinguish whether the change to the `rate`/`defaultPlaybackRate` came from JS
        or some native call (e.g. AVKit). If the former, don't propagate the change to the playback
        model (which eventually is the `HTMLMediaElement` in the WebProcess) as that's where the
        value came from in the first place. Note that we still want to propagate the `rate` to the
        `defaultPlaybackRate` (and vice versa when `isPlaying`) in the UIProcess for the reasons
        described in r278850 (and r277203), but we don't want to expose it to JS.

        * platform/ios/PlaybackSessionInterfaceAVKit.mm:
        (WebCore::PlaybackSessionInterfaceAVKit::rateChanged):
        * platform/ios/WebAVPlayerController.h:
        * platform/ios/WebAVPlayerController.mm:
        (-[WebAVPlayerController setDefaultPlaybackRate:]):
        (-[WebAVPlayerController setDefaultPlaybackRate:fromJavaScript:]): Added.
        (-[WebAVPlayerController setRate:]):
        (-[WebAVPlayerController setRate:fromJavaScript:]): Added.
        Drive-by: r278850 was based r277203 (which added the above), so fix that code now too.

2021-08-09  Yusuke Suzuki  <ysuzuki@apple.com>

        Partially revert r280256 behavior change since it broke Facetime
        https://bugs.webkit.org/show_bug.cgi?id=228943
        rdar://81700268

        Reviewed by Mark Lam.

        In r280256, custom accessors start getting holder's JSGlobalObject (this is right behavior).
        We also introduced IncumbentWindow IDL attribute to get the caller's JSGlobalObject, which is
        necessary in Location. At that time, we replaced all ActiveWindow to IncumbentWindow, but it
        changes the JSGlobalObject of `replace`, `assign`, and `reload` since they are functions (not
        custom accessors). We observed that, after this change, facetime Web page is broken: when opening
        the link to Facetime, it should show the prompt of "Open in Facetime app" in iOS. But after this
        change, it won't happen.

        We revert the semantic change by using ActiveWindow for replace, assign, and reload. This is
        not the correct semantics from the spec, but this is the same to one before r280256, and we
        will change this once we find the way to bypass this issue.

        * page/Location.cpp:
        (WebCore::Location::assign):
        (WebCore::Location::replace):
        (WebCore::Location::reload):
        * page/Location.h:
        * page/Location.idl:

2021-08-09  Chris Dumez  <cdumez@apple.com>

        Blob URL changes after loading it
        https://bugs.webkit.org/show_bug.cgi?id=228923

        Reviewed by Geoff Garen.

        Blob URL changes after loading it. This is because we use URLWithBlobURLLifetimeExtension to
        extend the lifetime of the Blob URL during the load and URLWithBlobURLLifetimeExtension ends
        up creating a new public Blob URL. This is Web-observable so we need a way to extend the
        lifetime of a Blob URL without actually generating a new Blob URL.

        This patch replaces URLWithBlobURLLifetimeExtension with a new BlobURLHandle class which
        extends the lifetime of a Blob URL as long as there are BlobURLHandle objects referring
        to it. BlobURLHandle works with both private and public Blob URLs so it replaces
        Blob::Handle as well (which I recently introduced via r280547). The Blob URL no longer
        changes when we extend its lifetime. Instead, the Blob registry now keeps track of
        references to a given Blob and only removes a Blob URL once there are no longer any
        references to it.

        Test: fast/files/blob-as-frame-url.html

        * Headers.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::serialize):
        (WebCore::CloneSerializer::CloneSerializer):
        (WebCore::CloneSerializer::dumpIfTerminal):
        (WebCore::SerializedScriptValue::SerializedScriptValue):
        (WebCore::SerializedScriptValue::create):
        * bindings/js/SerializedScriptValue.h:
        (WebCore::SerializedScriptValue::blobHandles const):
        (WebCore::SerializedScriptValue::SerializedScriptValue):
        * fileapi/Blob.cpp:
        (WebCore::Blob::Blob):
        (WebCore::Blob::slice const):
        (WebCore::Blob::size const):
        (WebCore::Blob::handle const):
        * fileapi/Blob.h:
        (WebCore::Blob::url const):
        * fileapi/BlobURL.cpp:
        (WebCore::BlobURLHandle::BlobURLHandle):
        (WebCore::BlobURLHandle::~BlobURLHandle):
        (WebCore::BlobURLHandle::registerBlobURLHandleIfNecessary):
        (WebCore::BlobURLHandle::unregisterBlobURLHandleIfNecessary):
        (WebCore::BlobURLHandle::operator=):
        (WebCore::BlobURLHandle::clear):
        * fileapi/BlobURL.h:
        (WebCore::BlobURLHandle::BlobURLHandle):
        (WebCore::BlobURLHandle::url const):
        * fileapi/ThreadableBlobRegistry.cpp:
        (WebCore::ThreadableBlobRegistry::registerBlobURLHandle):
        (WebCore::ThreadableBlobRegistry::unregisterBlobURLHandle):
        * fileapi/ThreadableBlobRegistry.h:
        * loader/PolicyChecker.cpp:
        (WebCore::FrameLoader::PolicyChecker::extendBlobURLLifetimeIfNecessary const):
        (WebCore::FrameLoader::PolicyChecker::checkNavigationPolicy):
        (WebCore::FrameLoader::PolicyChecker::checkNewWindowPolicy):
        * loader/PolicyChecker.h:
        * platform/network/BlobRegistry.h:
        * platform/network/BlobRegistryImpl.cpp:
        (WebCore::BlobRegistryImpl::registerFileBlobURL):
        (WebCore::BlobRegistryImpl::registerBlobURL):
        (WebCore::BlobRegistryImpl::registerBlobURLOptionallyFileBacked):
        (WebCore::BlobRegistryImpl::registerBlobURLForSlice):
        (WebCore::BlobRegistryImpl::unregisterBlobURL):
        (WebCore::BlobRegistryImpl::addBlobData):
        (WebCore::BlobRegistryImpl::registerBlobURLHandle):
        (WebCore::BlobRegistryImpl::unregisterBlobURLHandle):
        * platform/network/BlobRegistryImpl.h:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::setResponseType):
        (WebCore::XMLHttpRequest::open):
        (WebCore::XMLHttpRequest::prepareToSend):
        (WebCore::XMLHttpRequest::send):
        (WebCore::XMLHttpRequest::createRequest):
        (WebCore::XMLHttpRequest::clearRequest):
        (WebCore::XMLHttpRequest::didFinishLoading):
        * xml/XMLHttpRequest.h:

2021-08-09  Simon Fraser  <simon.fraser@apple.com>

        Vertical scroll with mouse wheel in horizontal scroller fails to propagate to the document
        https://bugs.webkit.org/show_bug.cgi?id=228891
        <rdar://81640239>

        Reviewed by Antti Koivisto.

        If a page has a horizontal scrolling carousel with a non-passive wheel event handler, and a
        user with a clicky scroll wheel mouse tries to vertically scroll over that carousel, then
        we'd fail to propagate the scroll to the page. This affects apple.com/store.

        This happened because we don't do latching for legacy mouse wheel events, so we hit the code
        in EventHandler::handleWheelEventInAppropriateEnclosingBox(); this finds the carousel and
        calls handleWheelEventInScrollableArea(), but that dispatches to the scrolling thread in way
        that does not propagate the event to the nearest ancestor that can handle it.

        The fix is to check that the ScrollableArea can handle the event, sharing some code that
        already exists and was used by findEnclosingScrollableContainer(). This is a conservative
        fix; it's possible that scrollableAreaCanHandleEvent() could be called down in
        handleWheelEventInScrollableArea() but that will affect other call sites.

        Test: fast/scrolling/mac/vertical-scroll-in-horizontal-scroller.html

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleWheelEventInAppropriateEnclosingBox):
        (WebCore::EventHandler::scrollableAreaCanHandleEvent):
        * page/EventHandler.h:
        * page/mac/EventHandlerMac.mm:
        (WebCore::findEnclosingScrollableContainer):

2021-08-09  Kate Cheney  <katherine_cheney@apple.com>

        Add console logging to encourage the use of authenticated encryption in WebCrypto
        https://bugs.webkit.org/show_bug.cgi?id=228879
        <rdar://problem/80655397>

        Reviewed by Brent Fulgham.

        Warn about risks of using AES-CBC and AES-CTR modes in WebCrypto,
        based on recommendations in
        https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/encrypt.
        We should encourage authenticated encryption instead.

        * crypto/SubtleCrypto.cpp:
        (WebCore::SubtleCrypto::encrypt):
        (WebCore::SubtleCrypto::decrypt):

2021-08-09  Said Abou-Hallawa  <said@apple.com>

        Ease sandboxing restrictions for Mail to allow HEIF image decoding
        https://bugs.webkit.org/show_bug.cgi?id=228812
        <rdar://80967782>

        Reviewed by Per Arne Vollan.

        No need to pass kCGImageSourceEnableRestrictedDecoding to ImageIO anymore.

        * platform/graphics/cg/ImageDecoderCG.cpp:
        (WebCore::createImageSourceOptions):

2021-08-09  Dean Jackson  <dino@apple.com>

        WebGL 2.0 doesn't work on A8 devices (iPad mini 4, iPad Air 2)
        https://bugs.webkit.org/show_bug.cgi?id=228904
        rdar://79198313

        Reviewed by Anders Carlsson.

        We can't use the ANGLE Metal backend for WebGL 2 on A8 devices (e.g. iPad Mini 4
        and iPad Air 2). In this case revert back to the OpenGL backend.

        It would be better if this check was exposed as API from ANGLE, but
        its only a small number of devices, and this code can be removed once
        they are no longer supported.

        * platform/graphics/cocoa/GraphicsContextGLOpenGLCocoa.mm:
        (WebCore::platformSupportsMetal): Add a parameter to indicate WebGL 2, and
        check the Metal device family support.
        (WebCore::GraphicsContextGLOpenGL::GraphicsContextGLOpenGL):

2021-08-09  Michael Catanzaro  <mcatanzaro@gnome.org>

        -Warray-bounds, -Wstringop-truncation warnings in Packed.h
        https://bugs.webkit.org/show_bug.cgi?id=226557
        <rdar://problem/79103658>

        Reviewed by Adrian Perez de Castro.

        Suppressing the -Warray-bounds warning introduces the -Wstringop-truncation warning, which
        cannot be suppressed with pragmas. The only solution I found is -Wno-stringop-truncation. I
        could apply it globally, but this warning does not have many false positives, so I think
        it's better to suppress the warning only for WebSocket.cpp. Unfortunately we have to remove
        it from the unified build in order to add custom flags, but it seems worth it to avoid
        suppressing the warning globally.

        * CMakeLists.txt:

2021-08-09  Jer Noble  <jer.noble@apple.com>

        [Cocoa|GPU] platformLayer() not always added to remotedly hosted context; black video while playing
        https://bugs.webkit.org/show_bug.cgi?id=228873
        <rdar://81271107>

        Reviewed by Eric Carlson.

        Coalesce calls to renderingModeChanged() by setting a flag to call renderingModeChanged() in
        the next run loop, and call into this coalescing method, setNeedsRenderingModeChanged(),
        whenever the MediaPlayerPrivateAVFoundation subclasses create or destroy a video layer
        or software painting context. This ensures that the MediaPlayerClient is always notified
        when the rendering mode changes, regardless of why that change occurred.

        Drive-by fix: replace the call in createVideoLayer() to "callOnMainThread()"
        with "ensureOnMainThread()". The call to "callOnMainThread()" was added to avoid a
        deadlock in WebKitLegacy, and "ensureOnMainThread()" has the correct behavior there, but
        will be synchronous in WebKit.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::setUpVideoRendering):
        (WebCore::MediaPlayerPrivateAVFoundation::setNeedsRenderingModeChanged):
        (WebCore::MediaPlayerPrivateAVFoundation::renderingModeChanged):
        (WebCore::MediaPlayerPrivateAVFoundation::prepareForRendering):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::MediaPlayerPrivateAVFoundationCF::destroyVideoLayer):
        (WebCore::AVFWrapper::createAVCFVideoLayer):
        (WebCore::AVFWrapper::createImageGenerator):
        (WebCore::AVFWrapper::destroyImageGenerator):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createVideoLayer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerLayer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::destroyVideoLayer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createVideoOutput):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::destroyVideoOutput):

2021-08-09  Alicia Boya García  <aboya@igalia.com>

        [MSE][GStreamer] Update tracks synchronously
        https://bugs.webkit.org/show_bug.cgi?id=228825

        Reviewed by Xabier Rodriguez-Calvar.

        A mistake introduced with the WebKitMediaSrc v2 patch made the call to
        updateTracks() in MediaPlayerPrivateGStreamer asynchronous.

        This introduced a subtle race condition in which the "resize" event
        may be handled before updateTracks() is called, therefore m_hasVideo
        has not yet been set to true, and querying the video size from the
        "resize" event handler returns 0x0.

        This fixes a timeout flake in media/media-source/media-source-resize.html.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::handleStreamCollectionMessage):

2021-08-09  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, remove WTFLogAlways
        https://bugs.webkit.org/show_bug.cgi?id=228858

        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::WhitespaceCache::lookup):

2021-08-09  Cameron McCormack  <heycam@apple.com>

        Cache recently atomized all-whitespace strings for use by the HTML parser
        https://bugs.webkit.org/show_bug.cgi?id=228858

        Reviewed by Yusuke Suzuki.

        We have a memory optimization where the HTML parser will atomize any
        text node string that is all whitespace.  This can be expensive,
        as we need to loop over the string's characters three times: to detect
        that it is indeed all whitespace, to hash the string, and to compare
        to any existing entry in the atom hash table.

        Many whitespace strings encountered during parsing have a limited
        form -- they have a few runs of consecutive equal whitespace
        characters, e.g. it's common to see a newline followed by a number
        of space characters.  We can take advantage of this by compressing
        the whitespace string into a simple run-length encoded form while
        we loop over the characters to check that the string is all
        whitespace.  Unlike a hash, this encoded form perfectly identifies the
        string content.

        We add a WhitespaceCache that is owned by the Document, which stores
        the most recently atomized all-whitespace string encountered by the
        parser for a given length, and keys it with the encoded form.  The
        parser can then look up the WhitespaceCache and find an AtomString
        without the need to perform a lookup in the atom hash table.

        The WhitespaceCache continues to hold on to the cached whitespace
        atoms for the life of the document.  The WhitespaceCache itself
        takes a bit over 1 KiB when empty, and if completely populated would
        take a bit over 2 KiB plus 8 KiB of atom string data (a 1 byte string,
        plus a 2 byte string, plus a 3 byte string, etc.).  This doesn't seem
        high enough to be worth clearing this out just to avoid memory usage
        from text nodes that have been removed from the document.

        We have the Document own the WhitespaceCache so that it's not just the
        initial document load, but any uses of innerHTML or other fragment
        parsing APIs, that can re-use previously atomized whitespace strings.

        The choice of WhitespaceCache::maximumCachedStringLength = 128 is
        somewhat arbitrary.  The value must be <= 255 to avoid overflowing
        the specific 64 bit code format used to encode the whitespace string.
        Testing on Speedometer shows whitespace strings only up to length 26,
        but it may be worth testing other content to see if it's worth
        reducing maximumCachedStringLength.

        When running Speedometer 2, no entries in the cache ever get replaced
        by a different whitespace string of the same length, and 16 unique
        whitespace string lengths are encountered.

        We don't compute codes for 16 bit strings, since 16 bit strings passed
        in to WhitespaceCache::lookup() are almost always the entirety of an
        HTMLToken's data, and HTMLToken tracks whether any 16 bit characters are
        present.  If there are any, then we know the string cannot be all
        whitespace, and we use a WhitespaceMode value of NotAllWhitespace to
        skip the atomization altogether.

        This patch is an almost 1% improvement on Speedometer 2.

        * dom/Document.cpp:
        (WebCore::m_whitespaceCache):
        * dom/Document.h:
        (WebCore::Document::whitespaceCache):
        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::HTMLConstructionSite):
        (WebCore::HTMLConstructionSite::insertTextNode):
        (WebCore::WhitespaceCache::codeForString):
        (WebCore::WhitespaceCache::lookup):
        * html/parser/HTMLConstructionSite.h:
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::insertPhoneNumberLink):
        (WebCore::HTMLTreeBuilder::linkifyPhoneNumbers):
        (WebCore::HTMLTreeBuilder::processCharacterBufferForInBody):
        * html/parser/HTMLTreeBuilder.h:

2021-08-09  Cameron McCormack  <heycam@apple.com>

        Increase inline size of HTMLToken::Attribute::value
        https://bugs.webkit.org/show_bug.cgi?id=228910
        <rdar://problem/81686150>

        Reviewed by Yusuke Suzuki.

        Some attributes we encounter during HTML parsing are longer than 32
        characters, and this shows up on profiles.

        This patch improves Speedometer 2 by a modest amount (~0.3%).

        * html/parser/HTMLToken.h:

2021-08-08  Jer Noble  <jer.noble@apple.com>

        REGRESSION: http/tests/preload/onload_event.html is a flaky timeout on Big Sur wk1 Release
        https://bugs.webkit.org/show_bug.cgi?id=227366
        <rdar://problem/79733280>

        Reviewed by Eric Carlson.

        Querying for any state on an AVAsset before its fully loaded will cause AVFoundation to block
        on networking to fulfill the request, and in the case where WebKit handles loading, will eventually
        dispatch to the main thread (which is blocked) in WebCore loader code, causing a deadlock.

        Always guard queries to AVAsset with checks for the loaded status of the property being queried.
        To make this easier, add a new safeAVAssetTracksForVisualMedia() method, similar to the existing
        safeAVAssetTracksForAudibleMedia(), which checks the "tracks" property status and returns an empty
        array if the tracks are not yet loaded.

        Guard a few more methods by bailing early if the AVAsset is not fully loaded.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::tracksChanged):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::updateRotationSession):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::paintWithVideoOutput):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::safeAVAssetTracksForVisualMedia):

2021-08-07  David Kilzer  <ddkilzer@apple.com>

        UBSan: KeyboardScrollingAnimator.cpp:303:10: runtime error: load of value nnn, which is not a valid value for type 'bool'
        <https://webkit.org/b/228901>

        Reviewed by Tim Horton.

        Covered by running 78 layout tests with UBSan enabled.

        * platform/KeyboardScrollingAnimator.h:
        - Initialize m_scrollTriggeringKeyIsPressed to false.

2021-08-07  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] Web process crashes when detaching Document with uncommitted marked text
        https://bugs.webkit.org/show_bug.cgi?id=228841
        rdar://79960890

        Reviewed by Ryosuke Niwa.

        In the case where the document is in the process of being detached (underneath `willBeRemovedFromFrame()`), if
        there is currently uncommitted marked text in the document, we will attempt to cancel the IME composition in the
        process of clearing out the selection. On macOS, this calls into `Editor::cancelComposition()` which
        subsequently triggers layout under various call stacks (DOM mutations, text event dispatch, and when scrolling
        to reveal the selection); this triggers a security release assertion inside `Document::updateLayout()`.

        To mitigate this, we avoid calling into this codepath if the Document no longer has a living render tree (i.e.,
        the render tree has either been destroyed, is being destroyed, or has not been created yet).

        Test: editing/inserting/remove-frame-with-marked-text.html

        * editing/mac/EditorMac.mm:
        (WebCore::Editor::selectionWillChange):

2021-08-07  Myles C. Maxfield  <mmaxfield@apple.com>

        Deduplicate logging channel algorithms
        https://bugs.webkit.org/show_bug.cgi?id=228809

        Reviewed by Fujii Hironori.

        No new tests because there is no behavior change.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * accessibility/AXLogger.cpp:
        * inspector/agents/page/PageConsoleAgent.cpp:
        * page/Page.cpp:
        * platform/LogInitialization.cpp: Copied from Source/WebCore/platform/LogInitialization.h.
        (WebCore::logChannels):
        (WebCore::getLogChannel):
        * platform/LogInitialization.h:
        * platform/Logging.cpp:
        (WebCore::isLogChannelEnabled): Deleted.
        (WebCore::setLogChannelToAccumulate): Deleted.
        (WebCore::clearAllLogChannelsToAccumulate): Deleted.
        (WebCore::initializeLogChannelsIfNecessary): Deleted.
        (WebCore::getLogChannel): Deleted.
        * platform/Logging.h:
        * testing/js/WebCoreTestSupport.cpp:
        (WebCoreTestSupport::setLogChannelToAccumulate):
        (WebCoreTestSupport::clearAllLogChannelsToAccumulate):
        (WebCoreTestSupport::initializeLogChannelsIfNecessary):

2021-08-07  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r280756.
        https://bugs.webkit.org/show_bug.cgi?id=228897

        Broke gtk build

        Reverted changeset:

        "Deduplicate logging channel algorithms"
        https://bugs.webkit.org/show_bug.cgi?id=228809
        https://commits.webkit.org/r280756

2021-08-07  Myles C. Maxfield  <mmaxfield@apple.com>

        Deduplicate logging channel algorithms
        https://bugs.webkit.org/show_bug.cgi?id=228809

        Reviewed by Fujii Hironori.

        No new tests because there is no behavior change.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * accessibility/AXLogger.cpp:
        * inspector/agents/page/PageConsoleAgent.cpp:
        * page/Page.cpp:
        * platform/LogInitialization.cpp: Copied from Source/WebCore/platform/LogInitialization.h.
        (WebCore::logChannels):
        (WebCore::getLogChannel):
        * platform/LogInitialization.h:
        * platform/Logging.cpp:
        (WebCore::isLogChannelEnabled): Deleted.
        (WebCore::setLogChannelToAccumulate): Deleted.
        (WebCore::clearAllLogChannelsToAccumulate): Deleted.
        (WebCore::initializeLogChannelsIfNecessary): Deleted.
        (WebCore::getLogChannel): Deleted.
        * platform/Logging.h:
        * testing/js/WebCoreTestSupport.cpp:
        (WebCoreTestSupport::setLogChannelToAccumulate):
        (WebCoreTestSupport::clearAllLogChannelsToAccumulate):
        (WebCoreTestSupport::initializeLogChannelsIfNecessary):

2021-08-06  Kate Cheney  <katherine_cheney@apple.com>

        CrashTracer: com.apple.WebKit.WebContent at com.apple.WebCore: WebCore::CryptoKeyRSA::exportJwk const
        https://bugs.webkit.org/show_bug.cgi?id=228878
        <rdar://problem/60147231>

        Reviewed by Brent Fulgham.

        exportData() could return nullptr. We should check the value of
        rsaComponents before trying to use it.

        * crypto/keys/CryptoKeyRSA.cpp:
        (WebCore::CryptoKeyRSA::exportJwk const):

2021-08-06  Alexander Mikhaylenko  <alexm@gnome.org>

        REGRESSION(r279987): [GTK][WPE] It caused 2 new test failures
        https://bugs.webkit.org/show_bug.cgi?id=228160

        Reviewed by Michael Catanzaro.

        Normally adjustText*() are only called for unstyled elements to adjust their platform
        appearance, However, for entries we always call it since
        https://bugs.webkit.org/show_bug.cgi?id=173572 and it causes problems.

        That change was done for RenderThemeGtk and is not relevant anymore, so we can revert
        it.

        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::adjustStyle):

2021-08-06  Youenn Fablet  <youenn@apple.com>

        [GPUP] Test WebKit2.CrashGPUProcessAfterApplyingConstraints fails when Media in GPU Process is enabled
        https://bugs.webkit.org/show_bug.cgi?id=228759
        <rdar://problem/81529641>

        Reviewed by Geoffrey Garen.

        Revert part of https://trac.webkit.org/changeset/279940/webkit.

        * platform/mediastream/RealtimeVideoSource.cpp:
        (WebCore::RealtimeVideoSource::sourceSettingsChanged):
        Covered by API test.

2021-08-06  Youenn Fablet  <youenn@apple.com>

        WebKit::SampleBufferDisplayLayer needs to handle GPUProcess crash
        https://bugs.webkit.org/show_bug.cgi?id=228824
        <rdar://problem/81564477>

        Reviewed by Eric Carlson.

        Manually tested.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::sampleBufferDisplayLayerStatusDidChange):
        Recreate a new layer if the previous one failed.

2021-08-06  Andres Gonzalez  <andresg_22@apple.com>

        Crash at WebKit::WebPage::requestTextRecognition caused by accessibility invocation.
        https://bugs.webkit.org/show_bug.cgi?id=228864
        rdar://80679512

        Reviewed by Chris Fleizach.

        * accessibility/AXImage.cpp:
        (WebCore::AXImage::imageOverlayElements):
        It was calling requestTextRecognition with *element(), but element() can
        return nullptr, which would lead to the crash.

2021-08-06  Jer Noble  <jer.noble@apple.com>

        [Cocoa] Remove support for AVAssetImageGenerator
        https://bugs.webkit.org/show_bug.cgi?id=228560
        <rdar://problem/81336280>

        Reviewed by Eric Carlson.

        A much more minimal approach to removing support for AVAssetImageGenerator.

        The only time we use an AVAssetImageGenerator (as opposed to an AVPlayerItemVideoOutput)
        is when the latter does not currently have an available image enqueued. Because painting
        is a synchronous operation, we use a synchronous API (the generator) to create an image
        for that operation. However, this can create deadlocks if (for example) the resource needs
        to load data on the main thread in order to complete the painting operation.

        Instead, allow the main runloop to spin while waiting (up to 1_s) for the video output
        to receive a decoded frame.

        Drive-by fixes:
        - Don't create an AVPlayerLayer at AVPlayer-creation; this causes the AVPlayerItemVideoOutput
          to never receive a decoded frambe (as the layer is not in a CALayer-heirarchy).
        - preferredRenderingMode() shouldn't be "none" when the page isn't visible. We already
          just mark the layer as "hidden" in that case.
        - Don't tear down the AVPlayerItemVideoOutput when creating an AVPlayerLayer; it'll just
          get re-created anyway.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::preferredRenderingMode const):
        (WebCore::MediaPlayerPrivateAVFoundation::setUpVideoRendering):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::paintCurrentFrameInContext):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createVideoOutput):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::paintWithVideoOutput):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::waitForVideoOutputMediaDataWillChange):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::outputMediaDataWillChange):
        (-[WebCoreAVFPullDelegate outputMediaDataWillChange:]):
        (-[WebCoreAVFPullDelegate setParent:]):

2021-08-06  Antti Koivisto  <antti@apple.com>

        REGRESSION (r274038): Keyframe animation with top/left with percentages fails to animate
        https://bugs.webkit.org/show_bug.cgi?id=228811
        <rdar://problem/81568266>

        Reviewed by Alan Bujtas.

        r274038 ended up disabling interpolation of percent values for top/left/bottom/right.

        Test: animations/top-left-percent-interpolation.html

        * animation/CSSPropertyAnimation.cpp:
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):

        Enable them.

2021-08-06  Youenn Fablet  <youenn@apple.com>

        MediaPlayerPrivateMediaStreamAVFObjC should skip enqueuing frames when not visible
        https://bugs.webkit.org/show_bug.cgi?id=228816
        <rdar://81077972>

        Reviewed by Eric Carlson.

        Do not create layers when not needed.
        This prevents enqueuing frames in a AVSampleBufferDisplayLayer that will only buffer them, thus breaking camera capture/video decoding.
        We do this by not calling ensureLayers when getting a new track. Instead we react upon player renderingCanBeAccelerated value.

        It is also unnecessary and takes CPU cycles to enqueue frames when the video element is not visible.
        HTMLMediaElement and RenderVideo thus pass to MediaPlayer a new flag telling whether the video element is visible in the view port.
        MediaPlayerPrivateMediaStreamAVFObjC will then skip enqueueing frames if not needed.

        Add getter and internals API to cover these changes.

        Test: fast/mediastream/mediaPlayer-visibility.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::isVisibleInViewportChanged):
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::loadWithNextMediaEngine):
        (WebCore::MediaPlayer::setVisibleInViewport):
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::setVisibleInViewport):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::enqueueVideoSample):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::setVisible):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::setVisibleInViewport):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::checkSelectedVideoTrack):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::paintCurrentFrameInContext):
        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::updatePlayer):
        * testing/Internals.cpp:
        (WebCore::Internals::isPlayerVisibleInViewport const):
        * testing/Internals.h:
        * testing/Internals.idl:

2021-08-05  Cameron McCormack  <heycam@apple.com>

        Stop tracking form elements with FormController
        https://bugs.webkit.org/show_bug.cgi?id=228724
        <rdar://problem/81435095>

        Reviewed by Darin Adler.

        FormController currently tracks the insertion order of
        HTMLFormElementWithState objects in the document.  But we don't need
        to know this list of form controls until the time we need to save
        form state for the document (e.g. on pagehide).  So we instead
        traverse the document to find those elements at the point we need
        them, rather than maintain FormController::m_formElementsWithState.

        This is a small speedup (1-2%) on a few of the Speedometer subtests
        that insert and remove many input elements.

        A future optimization could record on the Document whether there are
        any input elements that have had their value changed, since it's
        probably common for pages with form controls to never be changed.

        * dom/Document.cpp:
        (WebCore::Document::formElementsState const): Traverse the document to
        find all the HTMLFormElementWithState objects.
        * dom/Element.h:
        (WebCore::Element::isFormControlElementWithState const):
        * html/FormController.cpp:
        (WebCore::FormController::createSavedFormStateMap):
        (WebCore::FormController::formElementsState const):
        * html/FormController.h:
        * html/HTMLFormControlElementWithState.cpp:
        (WebCore::HTMLFormControlElementWithState::insertedIntoAncestor):
        Track the order that HTMLFormControlElementWithState objects are
        inserted into the document.
        (WebCore::HTMLFormControlElementWithState::removedFromAncestor):
        * html/HTMLFormControlElementWithState.h:
        (WebCore::HTMLFormControlElementWithState::insertionIndex const):
        (isType):
        * page/Frame.h: Remove unused formElementsCharacterCount.
        * page/ios/FrameIOS.mm:

2021-08-05  Tim Horton  <timothy_horton@apple.com>

        fast/canvas/canvas-crash.html doesn't test what it intends to on iOS
        https://bugs.webkit.org/show_bug.cgi?id=228747

        Reviewed by Simon Fraser.

        The test fast/canvas/canvas-crash.html intends to test changes made
        to actual canvas code (see r215632); however, on the iOS simulator
        the test doesn't even manage to make a canvas context because of
        "maximum area" and "maximum backing store size" limits, which differ
        per-platform. This results in unique test results for iOS, as well
        as the test not actually exercising the code it was intended to.

        Fix this by adding an override for the maximum area limit (we already
        had one for maximum backing store size), and overriding them in
        this test (and another similarly afflicted test).

        * html/HTMLCanvasElement.cpp:
        (WebCore::maxCanvasArea):
        (WebCore::HTMLCanvasElement::setMaxCanvasAreaForTesting):
        (WebCore::HTMLCanvasElement::createImageBuffer const):
        * html/HTMLCanvasElement.h:
        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState):
        (WebCore::Internals::setMaxCanvasArea):
        * testing/Internals.h:
        * testing/Internals.idl:

2021-08-05  Andres Gonzalez  <andresg_22@apple.com>

        VoiceOver is not announcing the state as selected/unselected when an item is selected in a grid.
        https://bugs.webkit.org/show_bug.cgi?id=228840
        <rdar://78225826>

        Reviewed by Chris Fleizach.

        Test: accessibility/selected-state-changed-notifications.html.

        On iOS, a table/grid cell element is not exposed to AX clients. Instead
        the content of the cell is. This patch ensures that if the cell element
        is selected, the AX objects that represent the content inside the cell
        will inherit the selected state from the cell.

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper _accessibilityTraitsFromAncestors]):

2021-08-05  Tim Nguyen  <ntim@apple.com>

        Implement support for <dialog> element cancel event
        https://bugs.webkit.org/show_bug.cgi?id=227534

        Reviewed by Chris Dumez.

        This makes <dialog> emit a cancel event then close when the escape key is pressed.

        Updated relevant WPT:
        - <dialog> cancel event WPTs: used send_keys instead of test_driver.Actions() (which are unsupported by WebKit test runner)
        - oncancel now is recognized

        Failing WPT:
        - dialog-cancel-with-input.html: needs <dialog> focusing steps (webkit.org/b/227537) to be implemented for <input> to get focus
        - dialog-cancel-with-select.html: needs <dialog> focusing steps (webkit.org/b/227537) to be implemented for <select> to get focus
        - dialog-keydown-preventDefault.html: current implementation does not prevent canceling from happening when keydown event has preventDefault()

        * dom/GlobalEventHandlers.idl:
        * html/HTMLAttributeNames.in:
        * html/HTMLDialogElement.cpp:
        (WebCore::HTMLDialogElement::cancel):
        * html/HTMLDialogElement.h:
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::createEventHandlerNameMap):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::internalKeyEvent):

2021-08-05  Eric Carlson  <eric.carlson@apple.com>

        [iOS] getUserMedia sometimes doesn't capture from specified microphone
        https://bugs.webkit.org/show_bug.cgi?id=228753
        rdar://79704226

        Reviewed by Youenn Fablet.

        The system will always choose the "default" audio input source unless
        +[AVAudioSession setPreferredInput:error:] is called first, and that only works
        if the audio session category has been set to PlayAndRecord *before* it is called,
        so configure the audio session for recording before we choose and configure the
        audio capture device.
        
        Tested manually, this only reproduces on hardware.

        * platform/audio/PlatformMediaSessionManager.cpp:
        (WebCore::PlatformMediaSessionManager::activeAudioSessionRequired const): Audio
        capture requires an active audio session.
        (WebCore::PlatformMediaSessionManager::removeSession): Move `#if USE(AUDIO_SESSION)`
        guard inside of maybeDeactivateAudioSession so it isn't spread throughout the file.
        (WebCore::PlatformMediaSessionManager::sessionWillBeginPlayback): Ditto.
        (WebCore::PlatformMediaSessionManager::processWillSuspend): Ditto.
        (WebCore::PlatformMediaSessionManager::processDidResume): Ditto.
        (WebCore::PlatformMediaSessionManager::sessionCanProduceAudioChanged): Add logging,
        call `maybeActivateAudioSession()` so we activate the audio session if necessary.
        (WebCore::PlatformMediaSessionManager::addAudioCaptureSource): Call updateSessionState
        instead of scheduleUpdateSessionState so the audio session category is updated
        immediately.
        (WebCore::PlatformMediaSessionManager::maybeDeactivateAudioSession): Move 
        `#if USE(AUDIO_SESSION)` into the function so it doesn't need to be spread 
        throughout the file.
        (WebCore::PlatformMediaSessionManager::maybeActivateAudioSession): Ditto.
        * platform/audio/PlatformMediaSessionManager.h:
        (WebCore::PlatformMediaSessionManager::isApplicationInBackground const):

        * platform/audio/ios/AudioSessionIOS.mm:
        (WebCore::AudioSessionIOS::setPreferredBufferSize): Log an error if we are unable
        to set the preferred buffer size.

        * platform/mediastream/ios/AVAudioSessionCaptureDeviceManager.h:
        * platform/mediastream/ios/AVAudioSessionCaptureDeviceManager.mm:
        (WebCore::AVAudioSessionCaptureDeviceManager::setPreferredAudioSessionDeviceUID):
        New, set the preferred input so capture will use select the device we want.
        (WebCore::AVAudioSessionCaptureDeviceManager::scheduleUpdateCaptureDevices): Remove
        m_recomputeDevices, `setAudioCaptureDevices` has been restructured so we don't need it.
        (WebCore::AVAudioSessionCaptureDeviceManager::computeCaptureDevices): Ditto.
        (WebCore::AVAudioSessionCaptureDeviceManager::setAudioCaptureDevices): Don't update
        the list of capture devices when the default device changes, only when a device is
        added, removed, enabled, or disabled.

        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
        (WebCore::CoreAudioSharedUnit::setCaptureDevice): Call `setPreferredAudioSessionDeviceUID`
        so the correct device is selected.
        (WebCore::CoreAudioSharedUnit::cleanupAudioUnit): Clear m_persistentID.
        (WebCore::CoreAudioCaptureSource::create): Return an error with a string, or the
        web process can detect a failure.
        (WebCore::CoreAudioCaptureSource::stopProducingData): Add logging.

2021-08-05  Alan Bujtas  <zalan@apple.com>

        Document::isLayoutTimerActive should read isLayoutPending
        https://bugs.webkit.org/show_bug.cgi?id=228835

        Reviewed by Antti Koivisto.

        Callers of this function curious about whether there's a layout scheduled.

        * dom/Document.cpp:
        (WebCore::Document::isLayoutPending const):
        (WebCore::Document::isLayoutTimerActive const): Deleted.
        * dom/Document.h:
        * html/parser/HTMLParserScheduler.cpp:
        (WebCore::HTMLParserScheduler::continueNextChunkTimerFired):

2021-08-05  Michael Catanzaro  <mcatanzaro@gnome.org>

        Suppress more -Wreturn-type warnings
        https://bugs.webkit.org/show_bug.cgi?id=228831

        Unreviewed.

        * platform/KeyboardScrollingAnimator.cpp:
        (WebCore::KeyboardScrollingAnimator::keyboardScrollForKeyboardEvent const):

2021-08-05  Michael Catanzaro  <mcatanzaro@gnome.org>

        GCC 11 builds should use -Wno-array-bounds, -Wno-nonnull
        https://bugs.webkit.org/show_bug.cgi?id=228601

        Reviewed by Carlos Garcia Campos.

        * css/CSSValue.h:
        (WebCore::CSSValue::deref):
        * css/StyleRule.h:
        (WebCore::StyleRuleBase::deref const):
        * dom/Node.h:
        (WebCore::Node::deref const):

2021-08-05  Rob Buis  <rbuis@igalia.com>

        Fix warning in HTTPParsers.parseStructuredFieldValue
        https://bugs.webkit.org/show_bug.cgi?id=228815

        Reviewed by Sam Weinig.

        UChar is unsigned, so it is not needed to check that it is
        zewro or greater.

        * platform/network/HTTPParsers.cpp:
        (WebCore::parseStructuredFieldValue):

2021-08-05  Imanol Fernandez  <ifernandez@igalia.com>

        Fix XR related clang warnings in WPE
        https://bugs.webkit.org/show_bug.cgi?id=228779

        Reviewed by Sam Weinig.

        Fix a few compiler warnings.

        * platform/xr/openxr/OpenXRInputSource.cpp:
        (PlatformXR::OpenXRInputSource::getButton const):
        * platform/xr/openxr/OpenXRSwapchain.cpp:
        (PlatformXR::OpenXRSwapchain::create):
        (PlatformXR::OpenXRSwapchain::OpenXRSwapchain):
        (PlatformXR::OpenXRSwapchain::acquireImage):
        * platform/xr/openxr/OpenXRSwapchain.h:

2021-08-04  Darin Adler  <darin@apple.com>

        Change WebSocket.cpp to @no-unify, since it’s hard to do that for someone without a Mac
        https://bugs.webkit.org/show_bug.cgi?id=228808

        Reviewed by Anders Carlsson.

        * Sources.txt: Add @no-unify.
        * WebCore.xcodeproj/project.pbxproj: Add WebSocket.cpp to the WebCore target.

2021-08-04  Devin Rousso  <drousso@apple.com>

        REGRESSION (r280374): ASSERTION FAILED: Completion handler should not be called more than once under WebCore::MediaControlsContextMenuProvider::contextMenuItemSelected
        https://bugs.webkit.org/show_bug.cgi?id=228725
        <rdar://problem/81437221>

        Reviewed by Eric Carlson.

        The contextmenu system used by (modern) media controls are a bit wonky in that it has to
        support both macOS and iOS, which use wildly different mechanisms. The former has distinct
        methods for handling when a contextmenu item is selected vs when the menu is dismissed (at
        least as of r280374). The latter has a single method that handles both. Additionally, the
        (modern) media controls JS expects the following from `showMediaControlsContextMenu`:
         1. `showMediaControlsContextMenu` will only `return true` if the contextmenu will be shown
         2. the callback provided to `showMediaControlsContextMenu` will always/only be invoked when
            the contextmenu is dismissed (regardless of whether an item is selected)
         3. if an item is selected, the logic for that will be handled by the `MediaControlsHost`
        This patch primarily addresses #2, but also slightly adjusts the code to fix #1. It does #1
        by moving the call that saves the callback further down. On iOS, #2 already works. On macOS,
        it does #2 by changing from `CompletionHandler` to `Function`, allowing it to be called more
        than once, with the understanding that the JS callback will not be invoked more than once.
        This way, macOS can match the behavior of iOS by eagerly invoking the JS callback when a
        contextmenu item is selected without waiting for the menu to actually dismiss, while still
        handling the contextmenu being dismissed without an item being selected (and also not having
        to worry about whether the `CompletionHandler` has already been invoked).

        * Modules/mediacontrols/MediaControlsHost.h:
        * Modules/mediacontrols/MediaControlsHost.cpp:
        (WebCore::MediaControlsContextMenuProvider::create):
        (WebCore::MediaControlsContextMenuProvider::MediaControlsContextMenuProvider):
        (WebCore::MediaControlsContextMenuProvider::didDismissContextMenu):
        (WebCore::MediaControlsContextMenuProvider::contextMenuCleared):
        (WebCore::MediaControlsHost::showMediaControlsContextMenu):

2021-08-04  Dana Estra  <destra@apple.com>

        REGRESSION (r280492): Clicking backspace on sign in fields results in deleting two characters instead of one.
        https://bugs.webkit.org/show_bug.cgi?id=228802

        Reviewed by Tim Horton.

        No tests yet.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::defaultKeyboardEventHandler):

2021-08-04  Peng Liu  <peng.liu6@apple.com>

        [Catalina][GPUP] Some API tests fail after GPU Process features are enabled
        https://bugs.webkit.org/show_bug.cgi?id=228589

        Reviewed by Jer Noble.

        When "Media in GPU Process" is enabled, `AudioSession[IOS|Mac]` runs in
        the GPU process. `HTMLMediaElement`, which is an observer of audio session,
        runs in a WebContent process. It cannot get its AudioSession's configuration
        directly. We need a mechanism to "push" the latest audio session configuration
        from the GPU process to the WebContent process.

        This patch replaces the `MutedStateObserver` with an audio session configuration
        change observer interface, so that an audio session will notify its observers
        after changing its configurations, including buffer size, muted state, sample rate.
        Currently, this observer interface is used on macOS only.

        No new tests. Fix an API test failure.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::initializeMediaSession):
        (WebCore::HTMLMediaElement::~HTMLMediaElement):
        (WebCore::HTMLMediaElement::hardwareMutedStateDidChange):
        * html/HTMLMediaElement.h:

        * platform/audio/AudioSession.cpp:
        (WebCore::AudioSession::addConfigurationChangeObserver):
        (WebCore::AudioSession::removeConfigurationChangeObserver):
        * platform/audio/AudioSession.h:
        * platform/audio/ios/AudioSessionIOS.h:
        Move `m_interruptionObservers` to this class because only `AudioSessionIOS`
        supports interruption observers.
        * platform/audio/mac/AudioSessionMac.h:
        * platform/audio/mac/AudioSessionMac.mm:
        (WebCore::AudioSessionMac::handleSampleRateChange):
        (WebCore::AudioSessionMac::handleSampleRateChange const):
        (WebCore::AudioSessionMac::handleBufferSizeChange):
        (WebCore::AudioSessionMac::handleBufferSizeChange const):
        (WebCore::AudioSessionMac::sampleRate const):
        (WebCore::AudioSessionMac::setPreferredBufferSize):
        (WebCore::AudioSessionMac::handleMutedStateChange):
        (WebCore::AudioSessionMac::addConfigurationChangeObserver):
        (WebCore::AudioSessionMac::removeConfigurationChangeObserver):
        (WebCore::AudioSessionMac::addMutedStateObserver): Deleted.
        (WebCore::AudioSessionMac::removeMutedStateObserver): Deleted.

2021-08-04  Miguel Gomez  <magomez@igalia.com>

        [GTK][WPE] Elliptic radial gradients are not working
        https://bugs.webkit.org/show_bug.cgi?id=228771

        Reviewed by Žan Doberšek.

        Transform the radial circular gradients using the aspect ratio to convert
        them into the appropriate elliptic gradients.

        * platform/graphics/cairo/GradientCairo.cpp:
        (WebCore::Gradient::createPattern):

2021-08-04  Devin Rousso  <drousso@apple.com>

        REGRESSION(?): subtitle text sizing is sometimes inconsistent
        https://bugs.webkit.org/show_bug.cgi?id=228786
        <rdar://problem/80525509>

        Reviewed by Eric Carlson.

        Tested manually. I'm still not 100% sure of the root cause of this, but after talking with
        some folks more familiar with WebKit's media "stack" it seems like this only happens with
        in-band non-VTT subtitle tracks that have their own styling. The fix is also pretty obvious.

        * html/track/TextTrackCueGeneric.cpp:
        (WebCore::TextTrackCueGeneric::setFontSize):
        We should still pass along the new font size (and `bool important`) even if we don't have a
        display tree yet, as the font size (and `bool important`) are used when the display tree is
        created, meaning that we shouldn't have to wait for another `setFontSize` call after the
        display tree is created in order to update the font size.

2021-08-04  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r280630.
        https://bugs.webkit.org/show_bug.cgi?id=228788

        broke some downstream tests

        Reverted changeset:

        "fast/canvas/canvas-crash.html doesn't test what it intends to
        on iOS"
        https://bugs.webkit.org/show_bug.cgi?id=228747
        https://commits.webkit.org/r280630

2021-08-04  Antti Koivisto  <antti@apple.com>

        Use fast malloc for RuleData vectors
        https://bugs.webkit.org/show_bug.cgi?id=228770

        Reviewed by Chris Dumez.

        Revert the change that enabled probabilistic guard malloc as it is not needed anymore.

        * style/RuleFeature.h:
        * style/RuleSet.h:

2021-08-04  Antti Koivisto  <antti@apple.com>

        Reduce Vector<> wasted capacity in some RuleSet code
        https://bugs.webkit.org/show_bug.cgi?id=224160
        <rdar://problem/76369555>

        Unreviewed, reverting revert r279242.

        Reland as this was not related to the crashes seen.

        * style/RuleSet.cpp:
        (WebCore::Style::RuleSet::addRulesFromSheet):
        (WebCore::Style::RuleSet::evaluateDynamicMediaQueryRules):
        (WebCore::Style::shrinkDynamicRules):
        (WebCore::Style::RuleSet::shrinkToFit):
        * style/RuleSet.h:

2021-08-04  Andres Gonzalez  <andresg_22@apple.com>

        Add support for aria-selected value changes in table cells.
        https://bugs.webkit.org/show_bug.cgi?id=228756
        <rdar://problem/81483071>

        Reviewed by Chris Fleizach.

        Test: accessibility/selected-state-changed-notifications.html

        - Added the AXSelectedStateChangedNotification to notify AX clients that
        the selected state of an object has changed.
        - This notification is used in this patch for aria-selected value
        changes in table cells.

        * accessibility/AXLogger.cpp:
        (WebCore::operator<<):
        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::selectedStateChanged):
        (WebCore::AXObjectCache::handleAttributeChange):
        * accessibility/AXObjectCache.h:
        * accessibility/ios/AXObjectCacheIOS.mm:
        (WebCore::AXObjectCache::notificationPlatformName):
        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::postPlatformNotification):

2021-08-04  Martin Robinson  <mrobinson@webkit.org>

        Add a HashTraits implementation for LayoutUnit
        https://bugs.webkit.org/show_bug.cgi?id=228630

        Reviewed by Fujii Hironori.

        No new tests. This should not change behavior in an easily-observable way, but
        could prevent rare hashing problems in the future.

        * page/scrolling/ScrollSnapOffsetsInfo.cpp:
        (WebCore::updateSnapOffsetsForScrollableArea): Use LayoutUnit as the hash, which avoids
        and extra conversion to float.
        * platform/LayoutUnit.h: Add a HashTraits implementation for LayoutUnit.

2021-08-04  Cathie Chen  <cathiechen@igalia.com>

        REGRESSION (r277997) Images get stretched with aspect-ratio and max-width: x%
        https://bugs.webkit.org/show_bug.cgi?id=228076

        Reviewed by Antti Koivisto.

        The image get stretched because constrainLogicalWidthInFragmentByMinMax returns the intrinsic width while computing MinSize.
        According to [1], the box's minimum width is its min-content size not the MinIntrinsic width which is used because of
        the recursion. To break the recursion, computeIntrinsicLogicalWidthUsing calls computeLogicalWidthFromAspectRatioInternal instead,
        then checks children's width.

        [1] https://www.w3.org/TR/css-sizing-4/#aspect-ratio-minimum

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::constrainLogicalWidthInFragmentByMinMax const): If shouldComputeLogicalWidthFromAspectRatio,
        the length should be treated as MinContent not MinIntrinsic.
        (WebCore::RenderBox::computeIntrinsicLogicalWidthUsing const): To break the loop, call computeLogicalWidthFromAspectRatioInternal instead
        to get the width from aspect-ratio and if there is child, make sure the min/max logical width not less than content's width.
        (WebCore::RenderBox::computeLogicalWidthFromAspectRatioInternal const):
        (WebCore::RenderBox::computeLogicalWidthFromAspectRatio const):
        * rendering/RenderBox.h:

2021-08-04  Tim Horton  <timothy_horton@apple.com>

        fast/canvas/canvas-crash.html doesn't test what it intends to on iOS
        https://bugs.webkit.org/show_bug.cgi?id=228747

        Reviewed by Simon Fraser.

        The test fast/canvas/canvas-crash.html intends to test changes made
        to actual canvas code (see r215632); however, on the iOS simulator
        the test doesn't even manage to make a canvas context because of
        "maximum area" and "maximum backing store size" limits, which differ
        per-platform. This results in unique test results for iOS, as well
        as the test not actually exercising the code it was intended to.

        Fix this by adding an override for the maximum area limit (we already
        had one for maximum backing store size), and overriding them in
        this test (and another similarly afflicted test).

        * html/HTMLCanvasElement.cpp:
        (WebCore::maxCanvasArea):
        (WebCore::HTMLCanvasElement::setMaxCanvasAreaForTesting):
        (WebCore::HTMLCanvasElement::createImageBuffer const):
        * html/HTMLCanvasElement.h:
        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState):
        (WebCore::Internals::setMaxCanvasArea):
        * testing/Internals.h:
        * testing/Internals.idl:

2021-08-04  Carlos Garcia Campos  <cgarcia@igalia.com>

        Add missing null-check in Touch constructor
        https://bugs.webkit.org/show_bug.cgi?id=228231

        Reviewed by Darin Adler.

        * dom/Touch.cpp:
        (WebCore::scaledLocation): Helper to initialize absolutePosition.
        (WebCore::Touch::Touch): Use scaledLocation().

2021-08-03  Alexey Shvayka  <shvaikalesh@gmail.com>

        ReadableStream's pipeTo() and pipeThrough() don't properly check for AbortSignal
        https://bugs.webkit.org/show_bug.cgi?id=227693

        Reviewed by Sam Weinig.

        This patch introduces @isAbortSignal global private function to replace `instanceof`
        checks that a) were false positive for `Object.create(AbortSignal.prototype)` and
        b) observably performed [[GetPrototypeOf]] and Symbol.hasInstance lookup / call.

        Aligns WebKit with Blink and the spec (https://heycam.github.io/webidl/#implements).

        Test: imported/w3c/web-platform-tests/streams/piping/abort.any.js

        * Modules/streams/ReadableStream.js:
        (pipeThrough):
        (pipeTo):
        * Modules/streams/ReadableStreamInternals.js:
        (readableStreamPipeToWritableStream):
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSC_DEFINE_HOST_FUNCTION):
        (WebCore::JSDOMGlobalObject::addBuiltinGlobals):
        * bindings/js/WebCoreBuiltinNames.h:

2021-08-03  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, reverting r280531 and r280589.

        caused

        Reverted changesets:

        "[Cocoa] Remove support for AVAssetImageGenerator"
        https://bugs.webkit.org/show_bug.cgi?id=228560
        https://commits.webkit.org/r280531

        "REGRESSION (r280531): multiple modern-media-controls tests
        have become flaky timeouts"
        https://bugs.webkit.org/show_bug.cgi?id=228714
        https://commits.webkit.org/r280589

2021-08-03  Alex Christensen  <achristensen@webkit.org>

        Null check self.session after calling _cancel instead of before
        https://bugs.webkit.org/show_bug.cgi?id=228757
        <rdar://79224868>

        Reviewed by Geoffrey Garen.

        _cancel already null checks self.session before using it.
        It seems to be setting self.session to null after the null check, so move the null check to before we use it.
        This should fix an occasional crash during teardown.

        * platform/network/cocoa/WebCoreNSURLSession.mm:
        (-[WebCoreNSURLSessionDataTask _restart]):

2021-08-03  Kimmo Kinnunen  <kkinnunen@apple.com>

        Crash while reading WebGL drawing buffer if canvas image buffer allocation fails
        https://bugs.webkit.org/show_bug.cgi?id=228737
        <rdar://81150042>

        Reviewed by Brent Fulgham.

        The crash would happen for example when running out of memory during snapshot
        or printing. Snapshots and printing forces the WebGL canvas to be "painted
        to document", which would then trigger the crash.

        Other code-paths that invoke CanvasBase::makeRenderingResultsAvailable,
        e.g. toDataURL and drawImage will check for the buffer before, and
        as such are not testable in the sense that adding the test would trigger
        the bug.

        Test: webgl/webgl-oom-paint-document-no-crash.html

        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::paintRenderingResultsToCanvas):
        Check for the nullptr from CanvasBase::buffer(). This might happen
        when the ImageBuffer was not allocated due to memory constraints.

2021-08-03  Antti Koivisto  <antti@apple.com>

        REGRESSION(r279050): Crash under CSSImageValue::createDeprecatedCSSOMWrapper with cursor images
        https://bugs.webkit.org/show_bug.cgi?id=228735

        Reviewed by Alex Christensen.

        CSSCursorImageValue is not a CSSImageValue. This used to work before r279050 because they had
        the URL field in the same offset.

        Test: fast/css/cursor-image-cssvalue.html

        * css/CSSValue.cpp:
        (WebCore::CSSValue::createDeprecatedCSSOMWrapper const):

        Don't do any special handling for CSSCursorImageValue. They are exposed as generic (deprecated)
        CSS values with cssText only.

2021-08-03  Alex Christensen  <achristensen@webkit.org>

        Use WeakPtr instead of manual raw pointer management in URLSearchParams
        https://bugs.webkit.org/show_bug.cgi?id=228723

        Reviewed by Chris Dumez.

        This is less error prone.

        * html/DOMURL.cpp:
        (WebCore::DOMURL::~DOMURL): Deleted.
        * html/DOMURL.h:
        * html/URLSearchParams.cpp:
        (WebCore::URLSearchParams::URLSearchParams):
        * html/URLSearchParams.h:
        (WebCore::URLSearchParams::associatedURLDestroyed): Deleted.

2021-08-03  Youenn Fablet  <youenn@apple.com>

        ReadableStream's pipeTo() and pipeThrough() don't handle options in spec-perfect way
        https://bugs.webkit.org/show_bug.cgi?id=227690
        <rdar://problem/80482144>

        Reviewed by Alexey Shvayka.

        Order getters as per spec for pipeTo and pipeThrough.
        Handle the case of null dictionaries as if they are undefined
        Use getter instead of using 'in' as per WebIDL spec.
        If options is undefined, skip calling any getter.

        Covered by updated test.

        * Modules/streams/ReadableStream.js:
        (pipeThrough):
        (pipeTo):

2021-08-03  Youenn Fablet  <youenn@apple.com>

        Update FirstWithDOMWindowReuseRestriction linked-on-or-after check to latest MacOS/iOS betas
        https://bugs.webkit.org/show_bug.cgi?id=228736
        <rdar://81419036>

        Reviewed by Chris Dumez.

        * platform/cocoa/VersionChecks.h:
        Delay enabling new behavior to MacOS 12 and iOS 15 SDK since new behavior is enabled for those OS versions.

2021-08-03  Jer Noble  <jer.noble@apple.com>

        REGRESSION (r280531): multiple modern-media-controls tests have become flaky timeouts
        https://bugs.webkit.org/show_bug.cgi?id=228714
        <rdar://problem/81426715>

        Reviewed by Eric Carlson.

        Update preferredRenderingMode() to reflect what setUpVideoRendering() actually does: use
        MediaRenderingToContext whenever possible. This will cause setUpVideoRendering() to be
        called from updateStates() to create the context, even if the element has been marked as
        !isVisible() by RenderVideo upon removal from the DOM.

        Also, in renderingModeChanged(), don't attempt to deduce whether scheduleUpdateStates()
        should be called; just call it universally.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::preferredRenderingMode const):
        (WebCore::MediaPlayerPrivateAVFoundation::renderingModeChanged):

2021-08-03  Kimmo Kinnunen  <kkinnunen@apple.com>

        Crash in webgl/1.0.x/conformance/textures/misc/texture-with-flip-y-and-premultiply-alpha.html
        https://bugs.webkit.org/show_bug.cgi?id=223920
        <rdar://problem/76261913>

        Reviewed by Kenneth Russell.

        After enabling WEBGL_depth_texture, the getDataFormat would assert for case of
        format == RGBA, type == UNSIGNED_SHORT. UNSIGNED_SHORT is intended for
        format == DEPTH_COMPONENT.

        Instead, return error if the data conversion cannot be done. This is better in all
        cases than doing non-expected data conversion in release build and assertion in
        debug builds.

        Tested by webgl/1.0.x/conformance/textures/misc/texture-with-flip-y-and-premultiply-alpha.html
        (disabled for now).

        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::texImageArrayBufferViewHelper):
        * platform/graphics/GraphicsContextGL.cpp:
        (WebCore::getDataFormat):
        (WebCore::packPixels):
        (WebCore::GraphicsContextGL::extractTextureData):
        * platform/graphics/GraphicsContextGL.h:

2021-08-03  Rob Buis  <rbuis@igalia.com>

        Check that shadow root is connected in invalidateStyleAfterStyleSheetChange
        https://bugs.webkit.org/show_bug.cgi?id=227383

        Reviewed by Antti Koivisto.

        Check that shadow root is connected in invalidateStyleAfterStyleSheetChange.

        Test: fast/shadow-dom/shadow-tree-removal-crash.html

        * style/StyleScope.cpp:
        (WebCore::Style::Scope::updateActiveStyleSheets):

2021-08-02  Frédéric Wang  <fwang@igalia.com>

        Align implementation of PositionIterator::isCandidate() on Position::isCandidate()
        https://bugs.webkit.org/show_bug.cgi?id=228635

        Reviewed by Darin Adler.

        The bug fixed in r280381 was due to the fact that PositionIterator::isCandidate() and
        Position::isCandidate() had gone out of sync. To prevent future bugs of this kind, this patch
        modifies PositionIterator::isCandidate() so that it is aligned with
        PositionIterator::isCandidate() (except when an m_anchorType check is needed) and add code
        comments in both functions to ensure the same changes are always applied to them.

        * dom/Position.cpp:
        (WebCore::Position::isCandidate const): Add a comment to make sure we update PositionIterator
        when changing that function. Also use auto for a local variable like in PositionIterator.
        * dom/PositionIterator.cpp:
        (WebCore::PositionIterator::isCandidate const): Add a comment to make sure we update Position
        when changing that function. Rearrange the code to use positionBeforeOrAfterNodeIsCandidate
        and early return when the node is a <html> element (these are not behavior changes). For
        block flow / grid / flexbox renderers, add a special handling when the anchor node is a root
        editable element ; also change the fallback value returned at the end of the function (these
        are two behavior changes).

2021-08-02  Jean-Yves Avenard  <jya@apple.com>

        [WebAudio] webm; properly trim frames according to the codec delay information
        https://bugs.webkit.org/show_bug.cgi?id=228140
        rdar://problem/80883882

        Reviewed by Eric Carlson.

        Add frame-perfect decoding for Opus and Vorbis in WebM container.
        Unfortunately, due to a vorbis decoder bug, it is not possible to test that
        vorbis decoding returns the right number of frames.
        Amend Opus test to ensure the right amount of frames are returned.

        * platform/audio/cocoa/AudioFileReaderCocoa.cpp:
        (WebCore::AudioFileReader::demuxWebMData const):
        (WebCore::passthroughInputDataCallback): AudioToolbox internal logging could overflow
        if we used packet descriptions with offsets, so we take the most commonly used scenario
        where we have a single packet to decode at a time.
        (WebCore::AudioFileReader::decodeWebMData const):
        * platform/graphics/cocoa/AudioTrackPrivateWebM.cpp:
        (WebCore::AudioTrackPrivateWebM::codecDelay const):
        (WebCore::AudioTrackPrivateWebM::setDiscardPadding):
        (WebCore::AudioTrackPrivateWebM::discardPadding const):
        * platform/graphics/cocoa/AudioTrackPrivateWebM.h:
        * platform/graphics/cocoa/SourceBufferParserWebM.cpp:
        (WebCore::SourceBufferParserWebM::OnElementEnd): Fly-by, ensure m_didParseInitializationDataCallback
        only ever accessed on client thread.
        (WebCore::SourceBufferParserWebM::OnBlockGroupEnd):
        * platform/graphics/cocoa/SourceBufferParserWebM.h: Add trimming data callback.
        Only mark WEBCORE_EXPORT the methods that need it.
        (WebCore::SourceBufferParserWebM::appendData):
        (WebCore::SourceBufferParserWebM::setDidParseTrimmingDataCallback):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::canPlayType const): Make canPlayType(webm/audio; codecs=vorbis)
        returns maybe if feature flag set.


2021-08-02  Chris Dumez  <cdumez@apple.com>

        [COOP] Cross-Origin-Opener-Policy header parsing fails when report-to parameter is present
        https://bugs.webkit.org/show_bug.cgi?id=228719

        Reviewed by Geoff Garen.

        Cross-Origin-Opener-Policy header parsing fails when report-to parameter is present, because
        parseStructuredFieldValue() doesn't handle parameters whose value is double-quoted:
        - https://datatracker.ietf.org/doc/html/rfc8941#section-4.2.3.2
        - https://datatracker.ietf.org/doc/html/rfc8941#section-4.2.3.1
        - https://datatracker.ietf.org/doc/html/rfc8941#section-4.2.5

        Test: http/wpt/cross-origin-opener-policy/header-parsing-with-report-to.https.html

        * platform/network/HTTPParsers.cpp:
        (WebCore::parseStructuredFieldValue):

2021-08-02  Sonia Singla  <soniasingla.1812@gmail.com>

        [css-cleanup] Replace webkit- prefix properties with Standard CSS Properties in Source/**
        https://bugs.webkit.org/show_bug.cgi?id=228697

        Reviewed by Frédéric Wang.

        * Modules/mediacontrols/mediaControlsApple.css:
        (video::-webkit-media-controls-closed-captions-container h3,):
        * Modules/mediacontrols/mediaControlsBase.css:
        (video::-webkit-media-controls-closed-captions-container h3,):
        (video::-webkit-media-controls-closed-captions-container li.selected::before,):
        * css/html.css:
        (p):
        (blockquote):
        (figure):
        (hr):
        (h1):
        (:is(article, aside, nav, section) h1):
        (:is(article, aside, nav, section) :is(article, aside, nav, section) h1):
        (:is(article, aside, nav, section) :is(article, aside, nav, section) :is(article, aside, nav, section) h1):
        (:is(article, aside, nav, section) :is(article, aside, nav, section) :is(article, aside, nav, section) :is(article, aside, nav, section) h1):
        (:is(article, aside, nav, section) :is(article, aside, nav, section) :is(article, aside, nav, section) :is(article, aside, nav, section) :is(article, aside, nav, section) h1):
        (h2):
        (h3):
        (h4):
        (h5):
        (h6):
        (ul, menu, dir):
        (ol):
        (dd):
        (dl):
        (ol ul, ul ol, ul ul, ol ol):
        (legend):
        (fieldset):
        * css/mathml.css:
        (mi):
        (msub > mi:first-child, msubsup > mi:first-child):
        (msubsup > mi:first-child + * + *):

2021-08-02  Sihui Liu  <sihui_liu@apple.com>

        Assertion is not acquired in network process when opening a SQLite database
        https://bugs.webkit.org/show_bug.cgi?id=228705

        Reviewed by Chris Dumez.

        Opening database may require database file lock.

        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::open):

2021-08-01  Ryosuke Niwa  <rniwa@webkit.org>

        Calling unobserve on ResizeObserver should not clear existing observations in active targets
        https://bugs.webkit.org/show_bug.cgi?id=228693

        Reviewed by Chris Dumez.

        The bug was caused by ResizeObserver::removeObservation removing it from the active targets.

        Note that there is nothing in the specification which alludes to this behavior,
        and the new behavior is consistent with Firefox and the way IntersectionObserver works:
        https://drafts.csswg.org/resize-observer/#dom-resizeobserver-unobserve

        To keep elements alive while they're in the active targets but not in the observation targets,
        this patch also makes each element of the active observation as opaque roots of ResizeObserver
        in ResizeObserver::isReachableFromOpaqueRoots.

        Test: resize-observer/resize-observer-keeps-element-of-queued-entry-alive.html

        * page/ResizeObserver.cpp:
        (WebCore::ResizeObserver::deliverObservations):
        (WebCore::ResizeObserver::isReachableFromOpaqueRoots const):
        (WebCore::ResizeObserver::removeObservation):

2021-08-02  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r279800): IntersectionObserver may never get a delivery of an observation if the element
        has been unobserved and is disconnected
        https://bugs.webkit.org/show_bug.cgi?id=228679

        Reviewed by Chris Dumez.

        The bug was caused by the elements of the pending entries not being considered as opaque roots
        of the intersection observer. If the intersection observer is no longer observing those elements,
        the JS wrapper of the intersection observer may be collected erroneously.

        This patch addresses this issue by explicitly treating the elements of pending entries as
        opaque roots of the intersection observer in IntersectionObserver::isReachableFromOpaqueRoots.

        Test: intersection-observer/intersection-observer-keeps-element-of-queued-entry-alive.html

        * page/IntersectionObserver.cpp:
        (WebCore::IntersectionObserver::isReachableFromOpaqueRoots const):

2021-08-02  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Live Text] Use iBeam cursor when hovering over selectable text inside image links
        https://bugs.webkit.org/show_bug.cgi?id=228700
        rdar://81210248

        Reviewed by Tim Horton.

        Make a couple of small adjustments to allow the cursor to change to an I-beam when hovering over selectable Live
        Text inside images in links, but only in the case where the computed cursor type is Auto. Currently, this always
        results in a Hand cursor type because of the link ancestor, despite the injected Live Text being selectable.

        Test: fast/images/text-recognition/mac/cursor-types-for-recognized-text.html

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::updateWithTextRecognitionResult):

        Drive-by fix an adjacent bug, wherein we try to check whether the image element has `user-select: none;` before
        the style has been resolved, which results in injecting selectable Live Text even when the page has explicitly
        disabled text selection on the image element. Instead, move this code to right after we update layout after
        ensuring the UA shadow DOM structure for Live Text, so that the bool flag is meaningful.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::selectCursor):

2021-08-02  Chris Dumez  <cdumez@apple.com>

        imported/w3c/web-platform-tests/webmessaging/broadcastchannel/blobs.html is a flaky failure since implementing BlobChannel
        https://bugs.webkit.org/show_bug.cgi?id=228168
        <rdar://problem/80922502>

        Reviewed by Alex Christensen.

        The test was flaky because it is trying to send a Blob via BroadcastChannel.postMessage()
        without keeping the blob alive. When GC triggers, the Blob would go away and trying to
        decode the Blob upon receiving would fail.

        To address the issue, I introduced a Blob::Handle class that wraps the Blob's internal URL
        and keeps the Blob data alive as long as as someone is holding such handle. Previously,
        the Blob destructor would unregister the internal URL and the Blob data would go away.

        I then updated SerializedScriptValue to hold on to Blob::Handle objects instead of Blob
        URLs. This guarantees that when using postMessage() to send a message to a worker, the
        Blob data will stay alive until we dispatch the message event on the worker side and try
        and deserialized the SerializedScriptValue.

        For BroadcastChannel.postMessage() though, we end up going via the network process and
        the SerializedScriptValue ends up getting serialized/deserialized over IPC. I added a
        CompletionHandler to BroadcastChannelRegistry::postMessage() which only gets called
        once the message event has successfully been dispatched. I use this completion handler
        to make sure the SerializedScriptValue's Blob URLs stay valid until the the message has
        been dispatched by holding on to the Blob::Handles.

        No new tests, unskipped existing test.

        * Modules/indexeddb/IDBValue.cpp:
        (WebCore::IDBValue::IDBValue):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::serialize):
        (WebCore::CloneSerializer::CloneSerializer):
        (WebCore::CloneSerializer::dumpIfTerminal):
        (WebCore::CloneSerializer::write):
        (WebCore::SerializedScriptValue::SerializedScriptValue):
        (WebCore::SerializedScriptValue::computeMemoryCost const):
        (WebCore::SerializedScriptValue::create):
        (WebCore::SerializedScriptValue::blobURLs const):
        (WebCore::SerializedScriptValue::writeBlobsToDiskForIndexedDB):
        * bindings/js/SerializedScriptValue.h:
        (WebCore::SerializedScriptValue::hasBlobURLs const):
        (WebCore::SerializedScriptValue::blobHandles const):
        (WebCore::SerializedScriptValue::SerializedScriptValue):
        * dom/BroadcastChannel.cpp:
        (WebCore::BroadcastChannel::postMessage):
        (WebCore::BroadcastChannel::dispatchMessageTo):
        * dom/BroadcastChannel.h:
        * dom/BroadcastChannelRegistry.h:
        * fileapi/Blob.cpp:
        (WebCore::BlobInternalURL::create):
        (WebCore::BlobInternalURL::~BlobInternalURL):
        (WebCore::BlobInternalURL::url const):
        (WebCore::BlobInternalURL::BlobInternalURL):
        (WebCore::Blob::Blob):
        (WebCore::Blob::~Blob):
        (WebCore::Blob::url const):
        (WebCore::Blob::slice const):
        (WebCore::Blob::size const):
        (WebCore::Blob::handle const):
        (WebCore::Blob::Handle::Handle):
        (WebCore::Blob::Handle::url const):
        * fileapi/Blob.h:
        * loader/EmptyClients.cpp:

2021-08-02  Wenson Hsieh  <wenson_hsieh@apple.com>

        REGRESSION (Safari 15): Unable to repaint canvases with software filters when GPU Process is enabled
        https://bugs.webkit.org/show_bug.cgi?id=228682
        rdar://79699997

        Reviewed by Simon Fraser.

        In the case where GPU process is enabled for canvas rendering but is not enabled for DOM rendering, canvas
        elements with software CSS filters fail to repaint as the canvas' backing image buffer changes. In this
        particular scenario, we first paint the canvas' remotely-backed image buffer into the filter's input buffer,
        which is backed by an unaccelerated graphics context. The filter is then applied, producing an output image
        buffer which we then paint into the page. The bug occurs during the initial step of painting the contents of the
        canvas' remote image buffer into the filter's input context, which involves creating a CGImageRef from the
        `ImageBufferCGBackend::draw`.

        When asking for a CGImageRef from the canvas' image buffer (which is backed by an IOSurface that's drawn into in
        the GPU process), QuartzCore caches the resulting CGImageRef corresponding to the IOSurface handle in the web
        process. Subsequently, when we try to repaint the canvas, we'll end up using this same initial cached CGImageRef
        because the graphics context of the IOSurface handle in the web process hasn't been drawn into (because all the
        actual draw calls are made in the GPU process). As such, regardless of the current state of the canvas' image
        buffer, the input to the filter will always be the initial native image created from the canvas' image buffer.

        We avoid this problem when GPU process is disabled because the calls to update the canvas' 2D context in the
        web process will clear out the cached CGImageRef in QuartzCore. Additionally, we avoid this problem when drawing
        into accelerated contexts because QuartzCore will draw the cached CGImageRef using a codepath that reads back
        the up-to-date contents from the IOSurface. However, in the QuartzCore's unaccelerated (ripc) image drawing
        codepath, we copy the contents of the cached image right away, causing us to end up with stale image data that
        does not reflect the current state of the IOSurface.

        To work around this in Safari 15 (in both Monterey as well as downlevel versions of macOS), we deploy a similar
        technique as we'd previously used in r201334 to invalidate QuartzCore's cached image, but only:

        1. If the seed value of the backing IOSurface has changed since the last time we've drawn the image buffer, and
        2. The destination context we're painting the image buffer into is unaccelerated.

        Test: css3/filters/canvas-with-filter-after-repaint.html

        * platform/graphics/cg/ImageBufferCGBackend.cpp:
        (WebCore::ImageBufferCGBackend::draw):
        (WebCore::ImageBufferCGBackend::drawPattern):

        Call into `prepareToDrawIntoContext` (see below).

        * platform/graphics/cg/ImageBufferCGBackend.cpp:
        (WebCore::ImageBufferCGBackend::prepareToDrawIntoContext):
        * platform/graphics/cg/ImageBufferCGBackend.h:
        * platform/graphics/cg/ImageBufferIOSurfaceBackend.cpp:
        (WebCore::ImageBufferIOSurfaceBackend::prepareToDrawIntoContext):

        Add a new subclassable method on ImageBufferCGBackend that's invoked before drawing the contents of the image
        buffer into a given destination GraphicsContext. We use this opportunity in ImageBufferIOSurfaceBackend to
        notice if the IOSurface seed count has updated since we've last drawn the image buffer, and intentionally emit a
        no-op drawing command (i.e. filling an empty rect) in the graphics context to invalidate QuartzCore's cached
        CGImageRef. Note that we only deploy this workaround when drawing into unaccelerated contexts (see above for
        more details).

        (WebCore::ImageBufferIOSurfaceBackend::invalidateCachedNativeImage const):

        Pull the no-op drawing command out into a separate helper method, with a comment describing why this exists.

        (WebCore::ImageBufferIOSurfaceBackend::drawConsuming):
        (WebCore::ImageBufferIOSurfaceBackend::copyCGImageForEncoding const):
        * platform/graphics/cg/ImageBufferIOSurfaceBackend.h:
        * platform/graphics/cocoa/IOSurface.h:
        * platform/graphics/cocoa/IOSurface.mm:
        (WebCore::IOSurface::seed const):

        Add a helper method to grab the seed value of an IOSurface.

2021-08-02  Chris Dumez  <cdumez@apple.com>

        HTMLElement.innerText setter should convert new lines to <br>
        https://bugs.webkit.org/show_bug.cgi?id=228605
        <rdar://problem/81333038>

        Reviewed by Darin Adler.

        HTMLElement.innerText setter should convert new lines to <br>:
        - https://html.spec.whatwg.org/multipage/dom.html#the-innertext-idl-attribute:dom-innertext-3
        - https://html.spec.whatwg.org/multipage/dom.html#rendered-text-fragment

        Our innerText setter had some logic that was specific to render styles that isn't part of
        the specification. It was causing us to not replace the new lines with <br> in some
        web-observable cases. I dropped this logic to align with Blink and Gecko.

        No new tests, rebaselined existing tests.

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::setInnerText):

2021-08-02  Sam Weinig  <weinig@apple.com>

        [Modern Media Controls] Address additional feedback on LayoutTraits refactor
        https://bugs.webkit.org/show_bug.cgi?id=227489
        <rdar://problem/80215569>

        Reviewed by Devin Rousso.

        Splitting up larger change to land pieces incrementally.

        Part 1:
        - Replaces eval() based lexical lookup with an explicit `window.layoutTraitsClasses`
          registry map.

        * Modules/modern-media-controls/controls/ios-layout-traits.js:
        * Modules/modern-media-controls/controls/layout-traits.js:
        * Modules/modern-media-controls/controls/macos-layout-traits.js:
        * Modules/modern-media-controls/controls/watchos-layout-traits.js:
        * Modules/modern-media-controls/media/media-controller.js:
        (MediaController.prototype.get layoutTraits):

2021-08-02  Jer Noble  <jer.noble@apple.com>

        [Cocoa] Remove support for AVAssetImageGenerator
        https://bugs.webkit.org/show_bug.cgi?id=228560

        Reviewed by Eric Carlson.

        AVAssetImageGenerator is used when there is not yet an available image from
        AVPlayerItemVideoOutput. However, AVAssetImageGenerator is a synchronous API call; if data
        for the current time is not available, the generator will cause a request for that data to
        be issued, and if the main thread is blocked in a synchronous call to the generator, that
        request can never be completed, causing a deadlock.

        Instead, always block moving to a readyState >= HAVE_CURRENT_DATA until either the
        AVPlayerLayer or the AVPlayerItemVideoOutput report having an available frame. This
        prevents clients from attempting to paint until a frame is available, and ensures that we
        will always have an available frame for painting, removing the need for the synchronous
        generator call.

        To ensure the readyState is updated when AVPlayerItemVideoOutput has an available image,
        register with the output at creation time for a notification as soon as an image is
        available. And in the existing delegate object, send a message back to the
        MediaPlayerPrivateAVFoundationObjC when that occurs.

        No tests needed; this should reduce flakiness of existing tests and cause no regression in
        behavior.

        Note, changes from last attempt:

        AVPlayerLayer will fail to move to the -readyForDisplay state if it's not attached to a
        layer tree, so when we remove the HTMLMediaElement from the DOM, we must send MediaPlayer a
        acceleratedRenderingStateChanged() notification. This will cause the
        MediaPlayerPrivateAVFoundationObjC to throw away its AVPlayerLayer, and will not block
        moving to HAVE_CURRENT_DATA waiting for the layer to become readyForDisplay.

        When we throw away (or create) the AVPlayerLayer, we must conditionally call updateStates
        () to recalculate the readyState; but because updateStates() may try to create or destroy
        an AVPlayerLayer, we must do this on a task to avoid re-entrancy. Adopt these changes
        inside MediaPlayerPrivateAVFoundationCF as well.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::pauseAfterDetachedTask):
        (WebCore::HTMLMediaElement::mediaPlayerRenderingCanBeAccelerated):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::setUpVideoRendering):
        (WebCore::MediaPlayerPrivateAVFoundation::prepareForRendering):
        (WebCore::MediaPlayerPrivateAVFoundation::renderingModeChanged):
        (WebCore::MediaPlayerPrivateAVFoundation::scheduleUpdateStates):
        (WebCore::MediaPlayerPrivateAVFoundation::updateStates):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::hasContextRenderer const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::destroyContextVideoRenderer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createVideoLayer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::destroyVideoLayer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::paintCurrentFrameInContext):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createVideoOutput):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::outputMediaDataWillChange):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::paintWithVideoOutput):
        (-[WebCoreAVFPullDelegate setParent:]):
        (-[WebCoreAVFPullDelegate outputMediaDataWillChange:]):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createImageGenerator): Deleted.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::destroyImageGenerator): Deleted.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::paintWithImageGenerator): Deleted.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createImageForTimeInRect): Deleted.
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::MediaPlayerPrivateAVFoundationCF::createVideoLayer):
        (WebCore::MediaPlayerPrivateAVFoundationCF::destroyVideoLayer):

2021-08-02  Alan Bujtas  <zalan@apple.com>

        REGRESSION (r273072): Images do not layout correctly on walmart.com/grocery
        https://bugs.webkit.org/show_bug.cgi?id=228656
        <rdar://80418083>

        Reviewed by Sergio Villar Senin.

        Take the min/max values into account when computing the definite size (https://drafts.csswg.org/css-sizing-3/#definite)
        for the flex child.

        Test: fast/flexbox/flex-with-min-max-height.html

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::computeCrossSizeForChildUsingContainerCrossSize const):

2021-08-02  Andres Gonzalez  <andresg_22@apple.com>

        Fix for [WebAccessibilityObjectWrapper lineRectsAndText] to properly handle replacement nodes and SVG text.
        https://bugs.webkit.org/show_bug.cgi?id=228336
        <rdar://problem/81172124>

        Reviewed by Chris Fleizach and Darin Adler.

        Test: LayoutTests/accessibility/ios-simulator/element-line-rects-and-text.html

        - Renamed stringsForSimpleRange to better reflect the fact that this
        method can return strings and AXObjects.
        - Handles the case where contentForSimpleRange returns AXObjects
        corresponding to replacement objects. This fixes the cases of images and
        SVG text.
        - Fixed the problem with soft linebreaks where the start of the next
        line was skipping the first character in the line.

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper contentForSimpleRange:attributed:]):
        (-[WebAccessibilityObjectWrapper arrayOfTextForTextMarkers:attributed:]):
        (-[WebAccessibilityObjectWrapper lineRectsAndText]):
        (-[WebAccessibilityObjectWrapper stringsForSimpleRange:attributed:]):
        Renamed to contentForSimpleRange since it is returns an array of strings
        and AXObjects.

2021-08-02  Martin Robinson  <mrobinson@webkit.org>

        [css-scroll-snap] Consider all snap areas at a given snap offset when snapping
        https://bugs.webkit.org/show_bug.cgi?id=228141

        Reviewed by Frédéric Wang.

        When deciding whether to snap to snap areas that overflow the snap port, don't
        just consider the first snap area at a given snap offset. Instead, keep information
        about all snap areas in the ScrolSnapOffsetInfo. In order to avoid iterating over
        arrays of hundreds of rectangles, also record whether any of them are larger than
        the viewport. This will avoid extra work on the most common usecase of large sets
        of snap areas (gridded table layouts).

        This change is tested by extending an existing WPT test.

        * page/scrolling/ScrollSnapOffsetsInfo.cpp:
        (WebCore::rangeForAxis): Added this helper.
        (WebCore::searchForPotentialSnapPoints): When deciding if a particular snap area
        overflows the snap port, look at all available snap areas instead of just the
        first one.
        (WebCore::updateSnapOffsetsForScrollableArea): Instead of only recording the first
        snap area, record all of them in the list of snap area rectangles.
        (WebCore::convertOffsetInfo): Convert the list of snap ares.
        * page/scrolling/ScrollSnapOffsetsInfo.h:
        (WebCore::operator==): Added this operator which is necessary now that snapAreaIndices
        is a vector.

2021-08-01  Rob Buis  <rbuis@igalia.com>

        Migrate GlyphOverflow to LayoutUnits instead of ints
        https://bugs.webkit.org/show_bug.cgi?id=133040

        Reviewed by Darin Adler.

        Migrate GlyphOverflow to LayoutUnits instead of ints. This
        is another step in the direction of subpixel layout/rendering.

        * platform/graphics/FontCascade.h:
        * rendering/LegacyInlineFlowBox.cpp:
        (WebCore::LegacyInlineFlowBox::addTextBoxVisualOverflow):
        * rendering/LegacyRootInlineBox.cpp:
        (WebCore::LegacyRootInlineBox::ascentAndDescentForBox const):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::computePreferredLogicalWidths):
        * style/InlineTextBoxStyle.cpp:
        (WebCore::extendIntToFloat):

2021-07-31  Maciej Stachowiak  <mjs@apple.com>

        ListAttributeTargetObserver is needlessly created even when there is no list attribute
        https://bugs.webkit.org/show_bug.cgi?id=228541

        Reviewed by Yusuke Suzuki.

        No new tests because no behavior change.

        This is possibly a small improvement (~0.5%) on Speedometer subtests that do innerHTML, but not statistically significant.

        Ported from a Chromium change by Adithya Srinivasan

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::resetListAttributeTargetObserver): check if there's a list attribute before making an observer.

2021-07-31  Youenn Fablet  <youenn@apple.com>

        Improve LocalSampleBufferDisplayLayer logging
        https://bugs.webkit.org/show_bug.cgi?id=228582

        Reviewed by Eric Carlson.

        Add logging to correlate a LocalSampleBufferDisplayLayer to its HTMLMediaElement and its MediaStreamTrack.
        Introduce setLogIdentifer for that purpose.
        No observable change of behavior.

        * platform/graphics/avfoundation/SampleBufferDisplayLayer.h:
        * platform/graphics/avfoundation/objc/LocalSampleBufferDisplayLayer.h:
        * platform/graphics/avfoundation/objc/LocalSampleBufferDisplayLayer.mm:
        (WebCore::LocalSampleBufferDisplayLayer::enqueueSample):
        (WebCore::LocalSampleBufferDisplayLayer::onIrregularFrameRateNotification):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::ensureLayers):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::checkSelectedVideoTrack):

2021-07-31  Youenn Fablet  <youenn@apple.com>

        AVVideoCaptureSource should not start/stop the camera if trying to apply the same size/frame rate configuration
        https://bugs.webkit.org/show_bug.cgi?id=228634
        <rdar://81174160>

        Reviewed by Eric Carlson.

        In some configurations, pages want to set a frame rate of 30, but the actual frame rate set will be 29.9999.
        In that case, our heuristic to not recalibrate the camera fails.
        To prevent this, we add checks in AVVideoCaptureSource to validate whether the new presets are the same as the already applied ones.

        Manually tested.

        * platform/mediastream/mac/AVVideoCaptureSource.h:
        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::setSessionSizeAndFrameRate):

2021-07-31  Martin Robinson  <mrobinson@webkit.org>

        REGRESSION(r279564): [GTK] Mouse wheel scrolling scrolls too little (take two)
        https://bugs.webkit.org/show_bug.cgi?id=228572

        Reviewed by Adrian Perez de Castro.

        Test: platform/gtk/fast/scrolling/scroll-wheel-repeated-events.html

        When scrolling by a delta with ScrollAnimationSmooth, base the target point
        on the current scroll target instead of on the current position. We also
        pass the point to updatePerAxisData instead of the delta in order to make
        it more explicit what the desired behavior is for this method.

        * platform/ScrollAnimationSmooth.h: Update argument name.
        * platform/ScrollAnimationSmooth.cpp:
        (WebCore::ScrollAnimationSmooth::scroll): Base the delta on the target position and
        pass that as the argument to updatePerAxisData. When scrolling to a point, simply
        pass that to updatePerAxisData.
        (WebCore::ScrollAnimationSmooth::updatePerAxisData): Accept a point instead of a
        delta, which makes it more obvious how to use this function and allows it to
        be used the same way by both version of ScrollAnimationSmooth::scroll.

2021-07-31  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r280488.
        https://bugs.webkit.org/show_bug.cgi?id=228677

        media/modern-media-controls/ tests are failing or timed-out

        Reverted changeset:

        "[Cocoa] Remove support for AVAssetImageGenerator"
        https://bugs.webkit.org/show_bug.cgi?id=228560
        https://commits.webkit.org/r280488

2021-07-30  Rob Buis  <rbuis@igalia.com>

        [css-overflow] Implement clip value for overflow
        https://bugs.webkit.org/show_bug.cgi?id=198230

        Reviewed by Simon Fraser.

        Implement overflow: clip. Parsing is like the other
        overflow values but special logic is added to handle
        the case where only one of overflow-x/overflow-y uses
        'clip' [1]. Also adjusts code that computes layout and
        visual overflow to take overflow: clip into account.

        This matches Chrome and Firefox.

        [1] https://drafts.csswg.org/css-overflow/#propdef-overflow-x

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator Overflow const):
        * css/CSSProperties.json:
        * css/parser/CSSParserContext.cpp:
        (WebCore::operator==):
        (WebCore::add):
        * css/parser/CSSParserContext.h:
        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):
        * page/FrameView.cpp: handle scrollbars
        on viewport element same as overflow: hidden.
        (WebCore::FrameView::applyOverflowToViewport):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::updateFromStyle):
        (WebCore::RenderBox::scrollWidth const): overflow clip
        forbids all scrolling.
        (WebCore::RenderBox::scrollHeight const): Ditto.
        (WebCore::RenderBox::setScrollLeft): Ditto.
        (WebCore::RenderBox::setScrollTop): Ditto.
        (WebCore::RenderBox::setScrollPosition): Ditto.
        (WebCore::RenderBox::requiresLayerWithScrollableArea const): do
        not create layer with scrollable area for overflow: clip.
        (WebCore::RenderBox::canBeProgramaticallyScrolled const): overflow clip
        forbids all scrolling.
        (WebCore::RenderBox::scrollPosition const): overflow clip
        forbids all scrolling.
        (WebCore::RenderBox::overflowClipRect const): only clip the rect horizontally
        for overflow-x: clip and only vertically for overflow-y: clip.
        (WebCore::RenderBox::createsNewFormattingContext const): do
        not create formatting context for overflow: clip.
        (WebCore::RenderBox::addOverflowFromChild):
        (WebCore::RenderBox::addLayoutOverflow):
        (WebCore::RenderBox::layoutOverflowRectForPropagation const):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::enclosingScrollableContainerForSnapping const):
        * rendering/RenderObject.h: Add helper method that excludes overflow-x/y: clip.
        (WebCore::RenderObject::hasPotentiallyScrollableOverflow const):
        * rendering/style/RenderStyleConstants.cpp:
        (WebCore::operator<<):
        * rendering/style/RenderStyleConstants.h:
        * style/StyleAdjuster.cpp: Add special logic is to handle the case where only
        one of overflow-x/overflow-y uses 'clip'.
        (WebCore::Style::Adjuster::adjust const):

2021-07-30  Chris Dumez  <cdumez@apple.com>

        Add initial support for 'Cross-Origin-Opener-Policy' HTTP header
        https://bugs.webkit.org/show_bug.cgi?id=192193
        <rdar://problem/42013525>

        Reviewed by Geoff Garen.

        Add initial support for 'Cross-Origin-Opener-Policy' HTTP header:
        - https://html.spec.whatwg.org/multipage/origin.html#cross-origin-opener-policy-value

        Support is complete enough to pass most WPT tests with the exception of:
        - The ones involving blob. Support for Blob does not seem trivial so I will address
          separately (https://github.com/whatwg/html/issues/5198).
        - The ones that requires reporting COOP enforcement as this is not supported yet.
          This is a fairly large task so I'll handle separately.
        - The ones that involve Cross-Origin-Embedder-Policy (COEP) and this is not yet
          supported.

        I tried to stay as close as possible to the HTML specification as possible in terms
        of structuring and naming. I also have code comments to link to the relevant HTML
        spec sections.

        Note that as it stands, we do not currently swap process based on COOP header. We
        merely do isolation of the new browsing context at JS level for now. At some point,
        we'll want to actually process-swap, once we support COEP and we want to re-enable
        some Web APIs such as SharedArrayBuffer.

        No new tests, covered by web-plaform-tests/html/cross-origin-opener-policy.

        * Headers.cmake:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:
        * dom/Document.cpp:
        (WebCore::Document::initSecurityContext):
        (WebCore::Document::shouldForceNoOpenerBasedOnCOOP const):
        (WebCore::Document::crossOriginOpenerPolicy const):
        (WebCore::Document::setCrossOriginOpenerPolicy):
        * dom/Document.h:
        (WebCore::Document::isSameOriginAsTopDocument const):
        * dom/SecurityContext.cpp:
        (WebCore::SecurityContext::enforceSandboxFlags):
        * dom/SecurityContext.h:
        (WebCore::SecurityContext::creationSandboxFlags const):
        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::openURLExternally):
        * loader/CrossOriginEmbedderPolicy.cpp: Copied from Source/WebCore/page/AbstractFrame.cpp.
        (WebCore::obtainCrossOriginEmbedderPolicy):
        * loader/CrossOriginEmbedderPolicy.h: Copied from Source/WebCore/page/AbstractFrame.cpp.
        * loader/CrossOriginOpenerPolicy.cpp: Added.
        (WebCore::obtainCrossOriginOpenerPolicy):
        * loader/CrossOriginOpenerPolicy.h: Copied from Source/WebCore/page/AbstractFrame.h.
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::willSendRequest):
        (WebCore::checkIfCOOPValuesRequireBrowsingContextGroupSwitch):
        (WebCore::computeResponseOriginAndCOOP):
        (WebCore::DocumentLoader::doCrossOriginOpenerHandlingOfResponse):
        (WebCore::DocumentLoader::enforceResponseCrossOriginOpenerPolicy):
        (WebCore::DocumentLoader::responseReceived):
        (WebCore::DocumentLoader::maybeLoadEmpty):
        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::crossOriginOpenerPolicy const):
        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::begin):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::didBeginDocument):
        (WebCore::FrameLoader::setOpener):
        (WebCore::FrameLoader::loadURL):
        (WebCore::FrameLoader::loadPostRequest):
        (WebCore::createWindow):
        (WebCore::FrameLoader::switchBrowsingContextsGroup):
        * loader/FrameLoader.h:
        * loader/NavigationAction.cpp:
        * loader/NavigationAction.h:
        (WebCore::NavigationAction::Requester::securityOrigin const):
        (WebCore::NavigationAction::Requester::topOrigin const):
        (WebCore::NavigationAction::Requester::crossOriginOpenerPolicy const):
        * page/AbstractFrame.cpp:
        (WebCore::AbstractFrame::resetWindowProxy):
        * page/AbstractFrame.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::crossOriginIsolated const):
        (WebCore::DOMWindow::createWindow):
        * page/DOMWindow.h:
        * page/Frame.cpp:
        (WebCore::Frame::resetScript):
        * page/Frame.h:
        * page/Page.h:
        (WebCore::Page::setOpenedByDOMWithOpener):
        * page/WindowOrWorkerGlobalScope.idl:
        * page/csp/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::applyPolicyToScriptExecutionContext):
        * platform/network/HTTPHeaderNames.in:
        * platform/network/HTTPParsers.cpp:
        (WebCore::parseStructuredFieldValue):
        * platform/network/HTTPParsers.h:
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::isSafeRedirectionResponseHeader):
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::crossOriginIsolated const):
        * workers/WorkerGlobalScope.h:

2021-07-30  Chris Dumez  <cdumez@apple.com>

        Unreviewed, reverting r280482.

        Will take a more conservative approach

        Reverted changeset:

        "HTMLElement.innerText setter should convert new lines to
        <br>"
        https://bugs.webkit.org/show_bug.cgi?id=228605
        https://commits.webkit.org/r280482

2021-07-30  Dana Estra  <destra@apple.com>

        Add spacebar functionality for macOS smooth scrolling
        https://bugs.webkit.org/show_bug.cgi?id=228155

        Reviewed by Tim Horton.
        
        Fixed bug that was causing spacebar events to return false from beginKeyboardScrollGesture.

        Manually tested on webpage.

        * platform/KeyboardScrollingAnimator.cpp:
        (WebCore::KeyboardScrollingAnimator::beginKeyboardScrollGesture):

2021-07-30  Chris Dumez  <cdumez@apple.com>

        Unreviewed follow-up to r280491 to address review feedback from Darin Adler.

        Use URL::isBlankURL() instead of a case-sensitive match for aboutBlankURL().

        * dom/Document.cpp:
        (WebCore::Document::updateBaseURL):

2021-07-30  Dana Estra  <destra@apple.com>

        Add key-driven smooth scrolling to macOS
        https://bugs.webkit.org/show_bug.cgi?id=228009

        Reviewed by Tim Horton.

        Cause keyboard scroll event to trigger start of smooth scroll animation, using same physics implementation as iOS smooth scrolling.

        No tests yet.

        * WebCore.xcodeproj/project.pbxproj:
        * dom/Node.cpp:
        (WebCore::Node::defaultEventHandler):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::defaultKeyboardEventHandler):
        (WebCore::EventHandler::scrollDistance):
        (WebCore::EventHandler::stopKeyboardScrolling):
        (WebCore::EventHandler::startKeyboardScrolling):
        * platform/KeyboardScrollingAnimator.cpp: Added.
        * platform/KeyboardScrollingAnimator.h: Added.
        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::startAnimationCallback):
        * platform/ScrollAnimator.h:
        * platform/ScrollController.cpp:
        (WebCore::ScrollController::animationCallback):
        (WebCore::ScrollController::startOrStopAnimationCallbacks):
        (WebCore::ScrollController::beginKeyboardScrolling):
        (WebCore::ScrollController::stopKeyboardScrolling):
        (WebCore::ScrollController::setIsAnimatingKeyboardScrolling):
        (WebCore::ScrollController::updateKeyboardScrollingAnimatingState):
        * platform/ScrollController.h:
        (WebCore::ScrollControllerClient::updateKeyboardScrollPosition):
        
2021-07-30  Chris Dumez  <cdumez@apple.com>

        Document's fallback base URL should be deduced from its creator when URL is about:blank
        https://bugs.webkit.org/show_bug.cgi?id=228624

        Reviewed by Geoffrey Garen.

        Document's fallback base URL should be deduced from its creator when URL is about:blank:
        - https://html.spec.whatwg.org/multipage/urls-and-fetching.html#fallback-base-url

        Chrome and Firefox match the specification here.

        Tests: http/tests/dom/iframe-no-src-local-origin-allow.html
               http/tests/dom/iframe-no-src-set-location.html

        * dom/Document.cpp:
        (WebCore::Document::updateBaseURL):

2021-07-30  Jer Noble  <jer.noble@apple.com>

        [Cocoa] Remove support for AVAssetImageGenerator
        https://bugs.webkit.org/show_bug.cgi?id=228560

        Reviewed by Eric Carlson.

        AVAssetImageGenerator is used when there is not yet an available image from AVPlayerItemVideoOutput.
        However, AVAssetImageGenerator is a synchronous API call; if data for the current time is not available,
        the generator will cause a request for that data to be issued, and if the main thread is blocked in a
        synchronous call to the generator, that request can never be completed, causing a deadlock.

        Instead, always block moving to a readyState >= HAVE_CURRENT_DATA until either the AVPlayerLayer or
        the AVPlayerItemVideoOutput report having an available frame. This prevents clients from attempting
        to paint until a frame is available, and ensures that we will always have an available frame for
        painting, removing the need for the synchronous generator call.

        To ensure the readyState is updated when AVPlayerItemVideoOutput has an available image, register
        with the output at creation time for a notification as soon as an image is available. And in the existing
        delegate object, send a message back to the MediaPlayerPrivateAVFoundationObjC when that occurs.

        No tests needed; this should reduce flakiness of existing tests and cause no regression in behavior.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::updateStates):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::hasContextRenderer const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::destroyContextVideoRenderer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::paintCurrentFrameInContext):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createVideoOutput):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::outputMediaDataWillChange):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::paintWithVideoOutput):
        (-[WebCoreAVFPullDelegate setParent:]):
        (-[WebCoreAVFPullDelegate outputMediaDataWillChange:]):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createImageGenerator): Deleted.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::destroyImageGenerator): Deleted.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::paintWithImageGenerator): Deleted.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createImageForTimeInRect): Deleted.

2021-07-30  Chris Dumez  <cdumez@apple.com>

        HTMLElement.innerText setter should convert new lines to <br>
        https://bugs.webkit.org/show_bug.cgi?id=228605

        Reviewed by Sam Weinig.

        HTMLElement.innerText setter should convert new lines to <br>:
        - https://html.spec.whatwg.org/multipage/dom.html#the-innertext-idl-attribute:dom-innertext-3
        - https://html.spec.whatwg.org/multipage/dom.html#rendered-text-fragment

        Our innerText setter had some logic that was specific to form elements and specific render
        styles that wasn't part of the specification. It was causing us to not replace the new lines
        with <br> in some cases. I dropped this logic to align with Blink and Gecko, as those are
        passing the same WPT tests.

        No new tests, rebaselined existing tests.

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::setInnerText):

2021-07-30  Chris Dumez  <cdumez@apple.com>

        Clicking an HTMLLinkElement should not trigger a navigation
        https://bugs.webkit.org/show_bug.cgi?id=228618

        Reviewed by Sam Weinig.

        Clicking an HTMLLinkElement should not trigger a navigation because HTMLLinkElement has no activation
        behavior as per the HTML specification:
        - https://html.spec.whatwg.org/multipage/semantics.html#htmllinkelement

        Firefox and Chrome follow the specification here.

        No new tests, updated/rebaselined existing tests.

        * html/HTMLLinkElement.cpp:
        * html/HTMLLinkElement.h:

2021-07-30  Dean Jackson  <dino@apple.com>

        [Media Controls] Add an option for having no scrubber on the time control and parameterize margin
        https://bugs.webkit.org/show_bug.cgi?id=228633
        rdar://81314458

        Reviewed by Tim Horton.

        Add support for a scrubber bar that does not have a knob (or, to be clear, an
        invisible knob). While here, move the constant for the margin into a custom
        CSS property so it can be easily overridden.

        * Modules/modern-media-controls/controls/media-controls.css:
        (*): Add --scrubber-margin custom property.
        * Modules/modern-media-controls/controls/slider.css:
        (.slider > .custom-slider > .knob.none): Add style for a "none" knob.
        * Modules/modern-media-controls/controls/slider.js:
        (Slider.prototype.commit): Support "none".
        * Modules/modern-media-controls/controls/time-control.js: Get the margin from
        the new custom property.
        (TimeControl.prototype.get minimumWidth):
        (TimeControl.prototype.get idealMinimumWidth):
        (TimeControl.prototype.layout):
        (TimeControl.prototype._performIdealLayout):

2021-07-30  Chris Dumez  <cdumez@apple.com>

        postMessage() should throw if any duplicate transferable is found in transferList
        https://bugs.webkit.org/show_bug.cgi?id=228608

        Reviewed by Youenn Fablet.

        postMessage() should throw if any duplicate transferable is found in transferList:
        - https://html.spec.whatwg.org/multipage/structured-data.html#structuredserializewithtransfer (Step 2.3)

        No new tests, rebaselined existing test.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::SerializedScriptValue::create):

2021-07-30  Rob Buis  <rbuis@igalia.com>

        [AspectRatio] Fix replaced-element-034.html
        https://bugs.webkit.org/show_bug.cgi?id=228223

        Reviewed by Manuel Rego Casasnovas.

        Fix replaced-element-034.html by making hasReplacedLogicalHeight
        return false for *-content when aspect-ratio is provided and relying
        on computeReplacedLogicalHeight to take aspect-ratio into account.

        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::hasReplacedLogicalHeight const):

2021-07-29  Tomoki Imai  <Tomoki.Imai@sony.com>

        Missing playing events when the ready state becomes HAVE_FUTURE_DATA/HAVE_ENOUGH_DATA from HAVE_METADATA state
        https://bugs.webkit.org/show_bug.cgi?id=228531

        Reviewed by Eric Carlson.

        The main issue is that missing playing event when the ready state becomes HAVE_FUTURE_DATA or HAVE_ENOUGH_DATA from HAVE_METADATA.
        According to the specification, we need to "notify about playing" in the following cases:
        - If the previous ready state was HAVE_CURRENT_DATA or less, and the new ready state is HAVE_FUTURE_DATA, and it's not paused.
        - If the new ready state is HAVE_ENOUGH_DATA, and it's eligible for autoplay
        The implementation didn't cover these cases and had web compatibility issues.

        We also should move scheduleNotifyAboutPlaying from setPlaying to playInternal and checks the ready state.
        - Without this change, playing event is fired twice. The first one is fired by setReadyState, and the second is called from setPlaying.
        - According to the specification, scheduleNotifyAboutPlaying should be in  "internal play steps" and check the ready state.
          Checking ready state fixes the issue where playing event is fired twice.

        Test: media/media-source/media-source-monitor-playing-event.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setReadyState): Added missing scheduleNotifyAboutPlaying calls. Added do-while to make the implementation similar to the specification text
        (WebCore::HTMLMediaElement::playInternal): Added scheduleNotifyAboutPlaying call.
                                                   According to the specification, "internal play steps" should "notify about playing" when
                                                   the ready state is HAVE_FUTURE_DATA or HAVE_ENOUGH_DATA.
        (WebCore::HTMLMediaElement::setPlaying): Removed scheduleNotifyAboutPlaying call because playInternal now calls scheduleNotifyAboutPlaying instead.

        Reference:
        - https://html.spec.whatwg.org/multipage/media.html#internal-play-steps
        - https://html.spec.whatwg.org/multipage/media.html#ready-states

2021-07-29  Myles C. Maxfield  <mmaxfield@apple.com>

        Stop building WebGPU and the WHLSL compiler to decrease binary size
        https://bugs.webkit.org/show_bug.cgi?id=228179

        Reviewed by Dean Jackson, Robin Morisset, and Devin Rousso.

        No new tests because there is no behavior change.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/webgpu/GPUBindGroupLayoutBinding.h: Removed.
        * Modules/webgpu/GPUBindGroupLayoutBinding.idl: Removed.
        * Modules/webgpu/GPUBindGroupLayoutDescriptor.h: Removed.
        * Modules/webgpu/GPUBindGroupLayoutDescriptor.idl: Removed.
        * Modules/webgpu/GPUBlendDescriptor.idl: Removed.
        * Modules/webgpu/GPUBufferDescriptor.idl: Removed.
        * Modules/webgpu/GPUBufferUsage.idl: Removed.
        * Modules/webgpu/GPUCanvasContext.cpp: Removed.
        * Modules/webgpu/GPUCanvasContext.h: Removed.
        * Modules/webgpu/GPUCanvasContext.idl: Removed.
        * Modules/webgpu/GPUColor.idl: Removed.
        * Modules/webgpu/GPUColorStateDescriptor.idl: Removed.
        * Modules/webgpu/GPUColorWrite.idl: Removed.
        * Modules/webgpu/GPUCompareFunction.idl: Removed.
        * Modules/webgpu/GPUDepthStencilStateDescriptor.idl: Removed.
        * Modules/webgpu/GPUErrorFilter.idl: Removed.
        * Modules/webgpu/GPUExtent3D.idl: Removed.
        * Modules/webgpu/GPULoadOp.idl: Removed.
        * Modules/webgpu/GPUOrigin3D.h: Removed.
        * Modules/webgpu/GPUOrigin3D.idl: Removed.
        * Modules/webgpu/GPUOutOfMemoryError.idl: Removed.
        * Modules/webgpu/GPURequestAdapterOptions.idl: Removed.
        * Modules/webgpu/GPUSamplerDescriptor.idl: Removed.
        * Modules/webgpu/GPUShaderStage.h: Removed.
        * Modules/webgpu/GPUShaderStage.idl: Removed.
        * Modules/webgpu/GPUStoreOp.idl: Removed.
        * Modules/webgpu/GPUTextureDescriptor.idl: Removed.
        * Modules/webgpu/GPUTextureFormat.idl: Removed.
        * Modules/webgpu/GPUTextureUsage.idl: Removed.
        * Modules/webgpu/GPUUncapturedErrorEvent.cpp: Removed.
        * Modules/webgpu/GPUUncapturedErrorEvent.h: Removed.
        * Modules/webgpu/GPUUncapturedErrorEvent.idl: Removed.
        * Modules/webgpu/GPUValidationError.idl: Removed.
        * Modules/webgpu/GPUVertexAttributeDescriptor.idl: Removed.
        * Modules/webgpu/GPUVertexBufferDescriptor.idl: Removed.
        * Modules/webgpu/GPUVertexInputDescriptor.idl: Removed.
        * Modules/webgpu/Navigator+GPU.idl: Removed.
        * Modules/webgpu/NavigatorGPU.cpp: Removed.
        * Modules/webgpu/NavigatorGPU.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLAST.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLAddressEscapeMode.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLAddressSpace.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLArrayReferenceType.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLArrayType.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLAssignmentExpression.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLBaseFunctionAttribute.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLBaseSemantic.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLBlock.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLBooleanLiteral.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLBreak.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLBuiltInSemantic.cpp: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLBuiltInSemantic.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLCallExpression.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLCommaExpression.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLConstantExpression.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLContinue.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLDefaultDelete.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLDereferenceExpression.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLDoWhileLoop.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLDotExpression.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLEffectfulExpressionStatement.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLEntryPointType.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLEnumerationDefinition.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLEnumerationMember.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLEnumerationMemberLiteral.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLExpression.cpp: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLExpression.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLFallthrough.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLFloatLiteral.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLFloatLiteralType.cpp: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLFloatLiteralType.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLForLoop.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLFunctionAttribute.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLFunctionDeclaration.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLFunctionDefinition.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLGlobalVariableReference.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLIfStatement.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLIndexExpression.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLIntegerLiteral.cpp: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLIntegerLiteral.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLIntegerLiteralType.cpp: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLIntegerLiteralType.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLLogicalExpression.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLLogicalNotExpression.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLMakeArrayReferenceExpression.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLMakePointerExpression.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLNameSpace.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLNamedType.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLNativeFunctionDeclaration.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLNativeTypeDeclaration.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLNumThreadsFunctionAttribute.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLPointerType.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLPropertyAccessExpression.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLQualifier.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLReadModifyWriteExpression.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLReferenceType.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLReplaceWith.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLResolvableType.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLResourceSemantic.cpp: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLResourceSemantic.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLReturn.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLSemantic.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLSpecializationConstantSemantic.cpp: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLSpecializationConstantSemantic.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLStageInOutSemantic.cpp: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLStageInOutSemantic.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLStatement.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLStructureDefinition.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLStructureElement.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLSwitchCase.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLSwitchStatement.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLTernaryExpression.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLType.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLTypeArgument.cpp: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLTypeArgument.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLTypeDefinition.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLTypeReference.cpp: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLTypeReference.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLUnnamedType.cpp: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLUnnamedType.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLUnnamedTypeHash.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLUnsignedIntegerLiteral.cpp: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLUnsignedIntegerLiteral.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLUnsignedIntegerLiteralType.cpp: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLUnsignedIntegerLiteralType.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLVariableDeclaration.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLVariableDeclarationsStatement.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLVariableReference.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLWhileLoop.h: Removed.
        * Modules/webgpu/WHLSL/Metal/WHLSLEntryPointScaffolding.cpp: Removed.
        * Modules/webgpu/WHLSL/Metal/WHLSLEntryPointScaffolding.h: Removed.
        * Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp: Removed.
        * Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.h: Removed.
        * Modules/webgpu/WHLSL/Metal/WHLSLMangledNames.h: Removed.
        * Modules/webgpu/WHLSL/Metal/WHLSLMetalCodeGenerator.cpp: Removed.
        * Modules/webgpu/WHLSL/Metal/WHLSLMetalCodeGenerator.h: Removed.
        * Modules/webgpu/WHLSL/Metal/WHLSLNativeFunctionWriter.cpp: Removed.
        * Modules/webgpu/WHLSL/Metal/WHLSLNativeFunctionWriter.h: Removed.
        * Modules/webgpu/WHLSL/Metal/WHLSLNativeTypeWriter.cpp: Removed.
        * Modules/webgpu/WHLSL/Metal/WHLSLNativeTypeWriter.h: Removed.
        * Modules/webgpu/WHLSL/Metal/WHLSLTypeNamer.cpp: Removed.
        * Modules/webgpu/WHLSL/Metal/WHLSLTypeNamer.h: Removed.
        * Modules/webgpu/WHLSL/Metal/WHLSLVertexBufferIndexCalculator.cpp: Removed.
        * Modules/webgpu/WHLSL/Metal/WHLSLVertexBufferIndexCalculator.h: Removed.
        * Modules/webgpu/WHLSL/WHLSLASTDumper.cpp: Removed.
        * Modules/webgpu/WHLSL/WHLSLASTDumper.h: Removed.
        * Modules/webgpu/WHLSL/WHLSLBuildStandardLibraryFunctionMap.py: Removed.
        * Modules/webgpu/WHLSL/WHLSLCheckDuplicateFunctions.cpp: Removed.
        * Modules/webgpu/WHLSL/WHLSLCheckDuplicateFunctions.h: Removed.
        * Modules/webgpu/WHLSL/WHLSLCheckReferenceTypes.cpp: Removed.
        * Modules/webgpu/WHLSL/WHLSLCheckReferenceTypes.h: Removed.
        * Modules/webgpu/WHLSL/WHLSLCheckTextureReferences.cpp: Removed.
        * Modules/webgpu/WHLSL/WHLSLCheckTextureReferences.h: Removed.
        * Modules/webgpu/WHLSL/WHLSLChecker.cpp: Removed.
        * Modules/webgpu/WHLSL/WHLSLChecker.h: Removed.
        * Modules/webgpu/WHLSL/WHLSLCodeLocation.h: Removed.
        * Modules/webgpu/WHLSL/WHLSLComputeDimensions.cpp: Removed.
        * Modules/webgpu/WHLSL/WHLSLComputeDimensions.h: Removed.
        * Modules/webgpu/WHLSL/WHLSLError.h: Removed.
        * Modules/webgpu/WHLSL/WHLSLFunctionStageChecker.cpp: Removed.
        * Modules/webgpu/WHLSL/WHLSLFunctionStageChecker.h: Removed.
        * Modules/webgpu/WHLSL/WHLSLGatherEntryPointItems.cpp: Removed.
        * Modules/webgpu/WHLSL/WHLSLGatherEntryPointItems.h: Removed.
        * Modules/webgpu/WHLSL/WHLSLHighZombieFinder.cpp: Removed.
        * Modules/webgpu/WHLSL/WHLSLHighZombieFinder.h: Removed.
        * Modules/webgpu/WHLSL/WHLSLInferTypes.cpp: Removed.
        * Modules/webgpu/WHLSL/WHLSLInferTypes.h: Removed.
        * Modules/webgpu/WHLSL/WHLSLIntrinsics.cpp: Removed.
        * Modules/webgpu/WHLSL/WHLSLIntrinsics.h: Removed.
        * Modules/webgpu/WHLSL/WHLSLLexer.cpp: Removed.
        * Modules/webgpu/WHLSL/WHLSLLexer.h: Removed.
        * Modules/webgpu/WHLSL/WHLSLLiteralTypeChecker.cpp: Removed.
        * Modules/webgpu/WHLSL/WHLSLLiteralTypeChecker.h: Removed.
        * Modules/webgpu/WHLSL/WHLSLNameContext.cpp: Removed.
        * Modules/webgpu/WHLSL/WHLSLNameContext.h: Removed.
        * Modules/webgpu/WHLSL/WHLSLNameResolver.cpp: Removed.
        * Modules/webgpu/WHLSL/WHLSLNameResolver.h: Removed.
        * Modules/webgpu/WHLSL/WHLSLParser.cpp: Removed.
        * Modules/webgpu/WHLSL/WHLSLParser.h: Removed.
        * Modules/webgpu/WHLSL/WHLSLParsingMode.h: Removed.
        * Modules/webgpu/WHLSL/WHLSLPipelineDescriptor.h: Removed.
        * Modules/webgpu/WHLSL/WHLSLPrepare.cpp: Removed.
        * Modules/webgpu/WHLSL/WHLSLPrepare.h: Removed.
        * Modules/webgpu/WHLSL/WHLSLPreserveVariableLifetimes.cpp: Removed.
        * Modules/webgpu/WHLSL/WHLSLPreserveVariableLifetimes.h: Removed.
        * Modules/webgpu/WHLSL/WHLSLProgram.h: Removed.
        * Modules/webgpu/WHLSL/WHLSLPropertyResolver.cpp: Removed.
        * Modules/webgpu/WHLSL/WHLSLPropertyResolver.h: Removed.
        * Modules/webgpu/WHLSL/WHLSLPruneUnreachableStandardLibraryFunctions.cpp: Removed.
        * Modules/webgpu/WHLSL/WHLSLPruneUnreachableStandardLibraryFunctions.h: Removed.
        * Modules/webgpu/WHLSL/WHLSLRecursionChecker.cpp: Removed.
        * Modules/webgpu/WHLSL/WHLSLRecursionChecker.h: Removed.
        * Modules/webgpu/WHLSL/WHLSLRecursiveTypeChecker.cpp: Removed.
        * Modules/webgpu/WHLSL/WHLSLRecursiveTypeChecker.h: Removed.
        * Modules/webgpu/WHLSL/WHLSLResolveOverloadImpl.cpp: Removed.
        * Modules/webgpu/WHLSL/WHLSLResolveOverloadImpl.h: Removed.
        * Modules/webgpu/WHLSL/WHLSLResolvingType.h: Removed.
        * Modules/webgpu/WHLSL/WHLSLScopedSetAdder.h: Removed.
        * Modules/webgpu/WHLSL/WHLSLSemanticMatcher.cpp: Removed.
        * Modules/webgpu/WHLSL/WHLSLSemanticMatcher.h: Removed.
        * Modules/webgpu/WHLSL/WHLSLStandardLibrary.txt: Removed.
        * Modules/webgpu/WHLSL/WHLSLStandardLibraryFunctionMap.h: Removed.
        * Modules/webgpu/WHLSL/WHLSLStandardLibraryUtilities.cpp: Removed.
        * Modules/webgpu/WHLSL/WHLSLStandardLibraryUtilities.h: Removed.
        * Modules/webgpu/WHLSL/WHLSLStatementBehaviorChecker.cpp: Removed.
        * Modules/webgpu/WHLSL/WHLSLStatementBehaviorChecker.h: Removed.
        * Modules/webgpu/WHLSL/WHLSLSynthesizeConstructors.cpp: Removed.
        * Modules/webgpu/WHLSL/WHLSLSynthesizeConstructors.h: Removed.
        * Modules/webgpu/WHLSL/WHLSLSynthesizeEnumerationFunctions.cpp: Removed.
        * Modules/webgpu/WHLSL/WHLSLSynthesizeEnumerationFunctions.h: Removed.
        * Modules/webgpu/WHLSL/WHLSLVisitor.cpp: Removed.
        * Modules/webgpu/WHLSL/WHLSLVisitor.h: Removed.
        * Modules/webgpu/WebGPU.cpp: Removed.
        * Modules/webgpu/WebGPU.h: Removed.
        * Modules/webgpu/WebGPU.idl: Removed.
        * Modules/webgpu/WebGPUAdapter.cpp: Removed.
        * Modules/webgpu/WebGPUAdapter.h: Removed.
        * Modules/webgpu/WebGPUAdapter.idl: Removed.
        * Modules/webgpu/WebGPUBindGroup.cpp: Removed.
        * Modules/webgpu/WebGPUBindGroup.h: Removed.
        * Modules/webgpu/WebGPUBindGroup.idl: Removed.
        * Modules/webgpu/WebGPUBindGroupBinding.h: Removed.
        * Modules/webgpu/WebGPUBindGroupBinding.idl: Removed.
        * Modules/webgpu/WebGPUBindGroupDescriptor.cpp: Removed.
        * Modules/webgpu/WebGPUBindGroupDescriptor.h: Removed.
        * Modules/webgpu/WebGPUBindGroupDescriptor.idl: Removed.
        * Modules/webgpu/WebGPUBindGroupLayout.cpp: Removed.
        * Modules/webgpu/WebGPUBindGroupLayout.h: Removed.
        * Modules/webgpu/WebGPUBindGroupLayout.idl: Removed.
        * Modules/webgpu/WebGPUBuffer.cpp: Removed.
        * Modules/webgpu/WebGPUBuffer.h: Removed.
        * Modules/webgpu/WebGPUBuffer.idl: Removed.
        * Modules/webgpu/WebGPUBufferBinding.h: Removed.
        * Modules/webgpu/WebGPUBufferBinding.idl: Removed.
        * Modules/webgpu/WebGPUCommandBuffer.cpp: Removed.
        * Modules/webgpu/WebGPUCommandBuffer.h: Removed.
        * Modules/webgpu/WebGPUCommandBuffer.idl: Removed.
        * Modules/webgpu/WebGPUCommandEncoder.cpp: Removed.
        * Modules/webgpu/WebGPUCommandEncoder.h: Removed.
        * Modules/webgpu/WebGPUCommandEncoder.idl: Removed.
        * Modules/webgpu/WebGPUComputePassEncoder.cpp: Removed.
        * Modules/webgpu/WebGPUComputePassEncoder.h: Removed.
        * Modules/webgpu/WebGPUComputePassEncoder.idl: Removed.
        * Modules/webgpu/WebGPUComputePipeline.cpp: Removed.
        * Modules/webgpu/WebGPUComputePipeline.h: Removed.
        * Modules/webgpu/WebGPUComputePipeline.idl: Removed.
        * Modules/webgpu/WebGPUComputePipelineDescriptor.cpp: Removed.
        * Modules/webgpu/WebGPUComputePipelineDescriptor.h: Removed.
        * Modules/webgpu/WebGPUComputePipelineDescriptor.idl: Removed.
        * Modules/webgpu/WebGPUDevice.cpp: Removed.
        * Modules/webgpu/WebGPUDevice.h: Removed.
        * Modules/webgpu/WebGPUDevice.idl: Removed.
        * Modules/webgpu/WebGPUDeviceErrorScopes.cpp: Removed.
        * Modules/webgpu/WebGPUDeviceErrorScopes.h: Removed.
        * Modules/webgpu/WebGPUDeviceErrorScopes.idl: Removed.
        * Modules/webgpu/WebGPUDeviceEventHandler.idl: Removed.
        * Modules/webgpu/WebGPUPipeline.cpp: Removed.
        * Modules/webgpu/WebGPUPipeline.h: Removed.
        * Modules/webgpu/WebGPUPipelineDescriptorBase.h: Removed.
        * Modules/webgpu/WebGPUPipelineDescriptorBase.idl: Removed.
        * Modules/webgpu/WebGPUPipelineLayout.cpp: Removed.
        * Modules/webgpu/WebGPUPipelineLayout.h: Removed.
        * Modules/webgpu/WebGPUPipelineLayout.idl: Removed.
        * Modules/webgpu/WebGPUPipelineLayoutDescriptor.cpp: Removed.
        * Modules/webgpu/WebGPUPipelineLayoutDescriptor.h: Removed.
        * Modules/webgpu/WebGPUPipelineLayoutDescriptor.idl: Removed.
        * Modules/webgpu/WebGPUProgrammablePassEncoder.cpp: Removed.
        * Modules/webgpu/WebGPUProgrammablePassEncoder.h: Removed.
        * Modules/webgpu/WebGPUProgrammablePassEncoder.idl: Removed.
        * Modules/webgpu/WebGPUProgrammableStageDescriptor.cpp: Removed.
        * Modules/webgpu/WebGPUProgrammableStageDescriptor.h: Removed.
        * Modules/webgpu/WebGPUProgrammableStageDescriptor.idl: Removed.
        * Modules/webgpu/WebGPUQueue.cpp: Removed.
        * Modules/webgpu/WebGPUQueue.h: Removed.
        * Modules/webgpu/WebGPUQueue.idl: Removed.
        * Modules/webgpu/WebGPURenderPassDescriptor.cpp: Removed.
        * Modules/webgpu/WebGPURenderPassDescriptor.h: Removed.
        * Modules/webgpu/WebGPURenderPassDescriptor.idl: Removed.
        * Modules/webgpu/WebGPURenderPassEncoder.cpp: Removed.
        * Modules/webgpu/WebGPURenderPassEncoder.h: Removed.
        * Modules/webgpu/WebGPURenderPassEncoder.idl: Removed.
        * Modules/webgpu/WebGPURenderPipeline.cpp: Removed.
        * Modules/webgpu/WebGPURenderPipeline.h: Removed.
        * Modules/webgpu/WebGPURenderPipeline.idl: Removed.
        * Modules/webgpu/WebGPURenderPipelineDescriptor.cpp: Removed.
        * Modules/webgpu/WebGPURenderPipelineDescriptor.h: Removed.
        * Modules/webgpu/WebGPURenderPipelineDescriptor.idl: Removed.
        * Modules/webgpu/WebGPUSampler.cpp: Removed.
        * Modules/webgpu/WebGPUSampler.h: Removed.
        * Modules/webgpu/WebGPUSampler.idl: Removed.
        * Modules/webgpu/WebGPUShaderModule.cpp: Removed.
        * Modules/webgpu/WebGPUShaderModule.h: Removed.
        * Modules/webgpu/WebGPUShaderModule.idl: Removed.
        * Modules/webgpu/WebGPUShaderModuleDescriptor.h: Removed.
        * Modules/webgpu/WebGPUShaderModuleDescriptor.idl: Removed.
        * Modules/webgpu/WebGPUSwapChain.cpp: Removed.
        * Modules/webgpu/WebGPUSwapChain.h: Removed.
        * Modules/webgpu/WebGPUSwapChain.idl: Removed.
        * Modules/webgpu/WebGPUSwapChainDescriptor.cpp: Removed.
        * Modules/webgpu/WebGPUSwapChainDescriptor.h: Removed.
        * Modules/webgpu/WebGPUTexture.cpp: Removed.
        * Modules/webgpu/WebGPUTexture.h: Removed.
        * Modules/webgpu/WebGPUTexture.idl: Removed.
        * Modules/webgpu/WebGPUTextureView.cpp: Removed.
        * Modules/webgpu/WebGPUTextureView.h: Removed.
        * Modules/webgpu/WebGPUTextureView.idl: Removed.
        * Modules/webgpu/WorkerNavigator+GPU.idl: Removed.
        * Modules/webgpu/WorkerNavigatorGPU.cpp: Removed.
        * Modules/webgpu/WorkerNavigatorGPU.h: Removed.
        * Sources.txt:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:
        * dom/Document.cpp:
        (WebCore::Document::getCSSCanvasContext):
        * dom/Document.h:
        * dom/Document.idl:
        * dom/EventNames.in:
        * dom/EventTargetFactory.in:
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext):
        (WebCore::HTMLCanvasElement::isWebGPUType): Deleted.
        (WebCore::HTMLCanvasElement::createContextWebGPU): Deleted.
        (WebCore::HTMLCanvasElement::getContextWebGPU): Deleted.
        * html/HTMLCanvasElement.h:
        * html/HTMLCanvasElement.idl:
        * html/canvas/CanvasRenderingContext.h:
        (WebCore::CanvasRenderingContext::isWebGL const):
        (WebCore::CanvasRenderingContext::isWebGPU const): Deleted.
        * inspector/InspectorCanvas.cpp:
        (WebCore::InspectorCanvas::InspectorCanvas):
        (WebCore::InspectorCanvas::canvasElement const):
        (WebCore::InspectorCanvas::scriptExecutionContext const):
        (WebCore::InspectorCanvas::resolveContext const):
        (WebCore:: const):
        (WebCore::InspectorCanvas::resetRecordingData):
        (WebCore::InspectorCanvas::recordAction):
        (WebCore::InspectorCanvas::buildObjectForCanvas):
        (WebCore::InspectorCanvas::releaseObjectForRecording):
        (WebCore::InspectorCanvas::buildInitialState):
        (WebCore::canvasIfContextMatchesDevice): Deleted.
        (WebCore::InspectorCanvas::deviceContext const): Deleted.
        (WebCore::InspectorCanvas::isDeviceForCanvasContext const): Deleted.
        * inspector/InspectorCanvas.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didCreateWebGPUDeviceImpl): Deleted.
        (WebCore::InspectorInstrumentation::willDestroyWebGPUDeviceImpl): Deleted.
        (WebCore::InspectorInstrumentation::willConfigureSwapChainImpl): Deleted.
        (WebCore::InspectorInstrumentation::didCreateWebGPUPipelineImpl): Deleted.
        (WebCore::InspectorInstrumentation::willDestroyWebGPUPipelineImpl): Deleted.
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didCreateWebGPUDevice): Deleted.
        (WebCore::InspectorInstrumentation::willDestroyWebGPUDevice): Deleted.
        (WebCore::InspectorInstrumentation::willConfigureSwapChain): Deleted.
        (WebCore::InspectorInstrumentation::didCreateWebGPUPipeline): Deleted.
        (WebCore::InspectorInstrumentation::willDestroyWebGPUPipeline): Deleted.
        * inspector/InspectorShaderProgram.cpp:
        (WebCore::InspectorShaderProgram::requestShaderSource):
        (WebCore::InspectorShaderProgram::updateShader):
        (WebCore::InspectorShaderProgram::buildObjectForShaderProgram):
        (WebCore::InspectorShaderProgram::pipeline const): Deleted.
        * inspector/InspectorShaderProgram.h:
        * inspector/agents/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::InspectorCanvasAgent):
        (WebCore::InspectorCanvasAgent::enable):
        (WebCore::InspectorCanvasAgent::startRecording):
        (WebCore::InspectorCanvasAgent::stopRecording):
        (WebCore::InspectorCanvasAgent::didChangeCanvasMemory):
        (WebCore::InspectorCanvasAgent::recordAction):
        (WebCore::InspectorCanvasAgent::reset):
        (WebCore::InspectorCanvasAgent::didCreateWebGPUDevice): Deleted.
        (WebCore::InspectorCanvasAgent::willDestroyWebGPUDevice): Deleted.
        (WebCore::InspectorCanvasAgent::willConfigureSwapChain): Deleted.
        (WebCore::InspectorCanvasAgent::didCreateWebGPUPipeline): Deleted.
        (WebCore::InspectorCanvasAgent::willDestroyWebGPUPipeline): Deleted.
        * inspector/agents/InspectorCanvasAgent.h:
        * page/ProcessWarming.cpp:
        (WebCore::ProcessWarming::prewarmGlobally):
        * platform/Logging.h:
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:
        (WebCore::PlatformCALayerCocoa::layerTypeForPlatformLayer):
        (WebCore::PlatformCALayerCocoa::PlatformCALayerCocoa):
        * platform/graphics/cocoa/WebGPULayer.h: Removed.
        * platform/graphics/cocoa/WebGPULayer.mm: Removed.
        * platform/graphics/gpu/GPUBindGroup.h: Removed.
        * platform/graphics/gpu/GPUBindGroupAllocator.h: Removed.
        * platform/graphics/gpu/GPUBindGroupBinding.h: Removed.
        * platform/graphics/gpu/GPUBindGroupDescriptor.h: Removed.
        * platform/graphics/gpu/GPUBindGroupLayout.h: Removed.
        * platform/graphics/gpu/GPUBlendDescriptor.h: Removed.
        * platform/graphics/gpu/GPUBuffer.cpp: Removed.
        * platform/graphics/gpu/GPUBuffer.h: Removed.
        * platform/graphics/gpu/GPUBufferBinding.h: Removed.
        * platform/graphics/gpu/GPUBufferDescriptor.h: Removed.
        * platform/graphics/gpu/GPUBufferUsage.h: Removed.
        * platform/graphics/gpu/GPUColor.h: Removed.
        * platform/graphics/gpu/GPUColorStateDescriptor.h: Removed.
        * platform/graphics/gpu/GPUColorWrite.h: Removed.
        * platform/graphics/gpu/GPUCommandBuffer.h: Removed.
        * platform/graphics/gpu/GPUCompareFunction.h: Removed.
        * platform/graphics/gpu/GPUComputePassEncoder.h: Removed.
        * platform/graphics/gpu/GPUComputePipeline.h: Removed.
        * platform/graphics/gpu/GPUComputePipelineDescriptor.h: Removed.
        * platform/graphics/gpu/GPUDepthStencilStateDescriptor.h: Removed.
        * platform/graphics/gpu/GPUDevice.cpp: Removed.
        * platform/graphics/gpu/GPUDevice.h:
        (WebCore::GPUDevice::platformDevice const): Deleted.
        (WebCore::GPUDevice::swapChain const): Deleted.
        (WebCore::GPUDevice::setErrorScopes): Deleted.
        * platform/graphics/gpu/GPUError.cpp: Removed.
        * platform/graphics/gpu/GPUError.h: Removed.
        * platform/graphics/gpu/GPUErrorFilter.h: Removed.
        * platform/graphics/gpu/GPUErrorScopes.cpp: Removed.
        * platform/graphics/gpu/GPUErrorScopes.h: Removed.
        * platform/graphics/gpu/GPUExtent3D.h: Removed.
        * platform/graphics/gpu/GPULimits.h: Removed.
        * platform/graphics/gpu/GPULoadOp.h: Removed.
        * platform/graphics/gpu/GPUObjectBase.h: Removed.
        * platform/graphics/gpu/GPUOutOfMemoryError.h: Removed.
        * platform/graphics/gpu/GPUPipeline.cpp: Removed.
        * platform/graphics/gpu/GPUPipeline.h: Removed.
        * platform/graphics/gpu/GPUPipelineDescriptorBase.h: Removed.
        * platform/graphics/gpu/GPUPipelineLayout.cpp: Removed.
        * platform/graphics/gpu/GPUPipelineLayout.h: Removed.
        * platform/graphics/gpu/GPUPipelineLayoutDescriptor.h: Removed.
        * platform/graphics/gpu/GPUPlatformTypes.h: Removed.
        * platform/graphics/gpu/GPUProgrammablePassEncoder.cpp: Removed.
        * platform/graphics/gpu/GPUProgrammablePassEncoder.h: Removed.
        * platform/graphics/gpu/GPUProgrammableStageDescriptor.h: Removed.
        * platform/graphics/gpu/GPUQueue.h: Removed.
        * platform/graphics/gpu/GPURenderPassDescriptor.h: Removed.
        * platform/graphics/gpu/GPURenderPassEncoder.h: Removed.
        * platform/graphics/gpu/GPURenderPipeline.h: Removed.
        * platform/graphics/gpu/GPURenderPipelineDescriptor.h: Removed.
        * platform/graphics/gpu/GPURequestAdapterOptions.h: Removed.
        * platform/graphics/gpu/GPUSampler.h: Removed.
        * platform/graphics/gpu/GPUSamplerDescriptor.h: Removed.
        * platform/graphics/gpu/GPUShaderModule.h: Removed.
        * platform/graphics/gpu/GPUShaderModuleDescriptor.h: Removed.
        * platform/graphics/gpu/GPUStoreOp.h: Removed.
        * platform/graphics/gpu/GPUSwapChain.h: Removed.
        * platform/graphics/gpu/GPUSwapChainDescriptor.h: Removed.
        * platform/graphics/gpu/GPUTexture.h: Removed.
        * platform/graphics/gpu/GPUTextureDescriptor.h: Removed.
        * platform/graphics/gpu/GPUTextureFormat.h: Removed.
        * platform/graphics/gpu/GPUTextureUsage.h: Removed.
        * platform/graphics/gpu/GPUUtils.h: Removed.
        * platform/graphics/gpu/GPUValidationError.cpp: Removed.
        * platform/graphics/gpu/GPUValidationError.h: Removed.
        * platform/graphics/gpu/GPUVertexAttributeDescriptor.h: Removed.
        * platform/graphics/gpu/GPUVertexBufferDescriptor.h: Removed.
        * platform/graphics/gpu/GPUVertexInputDescriptor.h: Removed.
        * platform/graphics/gpu/cocoa/GPUBindGroupAllocatorMetal.mm: Removed.
        * platform/graphics/gpu/cocoa/GPUBindGroupLayoutMetal.mm: Removed.
        * platform/graphics/gpu/cocoa/GPUBindGroupMetal.mm: Removed.
        * platform/graphics/gpu/cocoa/GPUBufferMetal.mm: Removed.
        * platform/graphics/gpu/cocoa/GPUCommandBufferMetal.mm: Removed.
        * platform/graphics/gpu/cocoa/GPUComputePassEncoderMetal.mm: Removed.
        * platform/graphics/gpu/cocoa/GPUComputePipelineMetal.mm: Removed.
        * platform/graphics/gpu/cocoa/GPUDeviceMetal.mm:
        (WebCore::prewarmGPU):
        (WebCore::isAcceptableDevice): Deleted.
        (WebCore::GPUDevice::prewarm): Deleted.
        (WebCore::GPUDevice::tryCreate): Deleted.
        (WebCore::GPUDevice::GPUDevice): Deleted.
        * platform/graphics/gpu/cocoa/GPUPipelineMetalConvertLayout.cpp: Removed.
        * platform/graphics/gpu/cocoa/GPUPipelineMetalConvertLayout.h: Removed.
        * platform/graphics/gpu/cocoa/GPUPlatformTypesMetal.h: Removed.
        * platform/graphics/gpu/cocoa/GPUProgrammablePassEncoderMetal.mm: Removed.
        * platform/graphics/gpu/cocoa/GPUQueueMetal.mm: Removed.
        * platform/graphics/gpu/cocoa/GPURenderPassEncoderMetal.mm: Removed.
        * platform/graphics/gpu/cocoa/GPURenderPipelineMetal.mm: Removed.
        * platform/graphics/gpu/cocoa/GPUSamplerMetal.mm: Removed.
        * platform/graphics/gpu/cocoa/GPUShaderModuleMetal.mm: Removed.
        * platform/graphics/gpu/cocoa/GPUSwapChainMetal.mm: Removed.
        * platform/graphics/gpu/cocoa/GPUTextureMetal.mm: Removed.
        * platform/graphics/gpu/cocoa/GPUUtilsMetal.mm: Removed.
        * platform/graphics/gpu/dawn/GPUBindGroupAllocatorDawn.cpp: Removed.
        * platform/graphics/gpu/dawn/GPUBindGroupDawn.cpp: Removed.
        * platform/graphics/gpu/dawn/GPUBindGroupLayoutDawn.cpp: Removed.
        * platform/graphics/gpu/dawn/GPUBufferDawn.cpp: Removed.
        * platform/graphics/gpu/dawn/GPUCommandBufferDawn.cpp: Removed.
        * platform/graphics/gpu/dawn/GPUComputePassEncoderDawn.cpp: Removed.
        * platform/graphics/gpu/dawn/GPUComputePipelineDawn.cpp: Removed.
        * platform/graphics/gpu/dawn/GPUDeviceDawn.cpp: Removed.
        * platform/graphics/gpu/dawn/GPUPlatformTypesDawn.h: Removed.
        * platform/graphics/gpu/dawn/GPUProgrammablePassEncoderDawn.cpp: Removed.
        * platform/graphics/gpu/dawn/GPUQueueDawn.cpp: Removed.
        * platform/graphics/gpu/dawn/GPURenderPassEncoderDawn.cpp: Removed.
        * platform/graphics/gpu/dawn/GPURenderPipelineDawn.cpp: Removed.
        * platform/graphics/gpu/dawn/GPUSamplerDawn.cpp: Removed.
        * platform/graphics/gpu/dawn/GPUShaderModuleDawn.cpp: Removed.
        * platform/graphics/gpu/dawn/GPUSwapChainDawn.cpp: Removed.
        * platform/graphics/gpu/dawn/GPUTextureDawn.cpp: Removed.
        * platform/ios/DragImageIOS.mm:
        * platform/mediastream/mac/WindowDisplayCapturerMac.mm:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateConfiguration):
        (WebCore::RenderLayerBacking::contentChanged):

2021-07-29  Andres Gonzalez  <andresg_22@apple.com>

        Crash at WebCore: -[WebAccessibilityObjectWrapper _accessibilityTableAncestor].
        https://bugs.webkit.org/show_bug.cgi?id=228600
        rdar://79910135

        Reviewed by Chris Fleizach.

        The cause of the crash was that [WebAccessibilityObjectWrapper
        _accessibilityTableAncestor] was dereferencing self.axBackingObject
        which can be null.
        The same problem was present in a number of methods that are retrieving
        an ancestor of a given role. This patch solves this problem by calling
        _prepareAccessibilityCall before trying to dereference the backing core
        object.
        Avoided code repetition by adding the helper function ancestorWithRole.

        * accessibility/AccessibilityObjectInterface.h:
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (ancestorWithRole):
        (-[WebAccessibilityObjectWrapper _accessibilityTreeAncestor]):
        (-[WebAccessibilityObjectWrapper _accessibilityDescriptionListAncestor]):
        (-[WebAccessibilityObjectWrapper _accessibilityListAncestor]):
        (-[WebAccessibilityObjectWrapper _accessibilityArticleAncestor]):
        (-[WebAccessibilityObjectWrapper _accessibilityLandmarkAncestor]):
        (-[WebAccessibilityObjectWrapper _accessibilityTableAncestor]):
        (-[WebAccessibilityObjectWrapper _accessibilityIsInTableCell]):
        (-[WebAccessibilityObjectWrapper _accessibilityFieldsetAncestor]):
        (-[WebAccessibilityObjectWrapper _accessibilityFrameAncestor]):

2021-07-29  Jer Noble  <jer.noble@apple.com>

        [Cocoa|WK1] -[NSAttributeString loadFromHTML...] methods will disable bluetooth route switching
        https://bugs.webkit.org/show_bug.cgi?id=228593
        <rdar://81160969>

        Reviewed by Eric Carlson.

        NSAttributedString will use WebKitLegacy APIs to load provided HTML; in so doing, an AudioSessionIOS
        singleton object is created, and -[AVAudioSession setEligibleForBTSmartRoutingConsideration:error:]
        is called with a NO parameter, disabling smart routing for the calling process.

        Disable this behavior if DeprecatedGlobalSettings::shouldManageAudioSessionCategory() returns false;
        this setting is disabled for all WK1 clients, and enabled for WK2.

        * page/DeprecatedGlobalSettings.cpp:
        (WebCore::DeprecatedGlobalSettings::setShouldManageAudioSessionCategory):
        (WebCore::DeprecatedGlobalSettings::shouldManageAudioSessionCategory):
        * page/DeprecatedGlobalSettings.h:
        (WebCore::DeprecatedGlobalSettings::setShouldManageAudioSessionCategory): Deleted.
        (WebCore::DeprecatedGlobalSettings::shouldManageAudioSessionCategory): Deleted.
        * platform/audio/AudioSession.h:
        * platform/audio/ios/AudioSessionIOS.mm:
        (WebCore::setEligibleForSmartRouting):

2021-07-29  Devin Rousso  <drousso@apple.com>

        [Payment Request] `additionalShippingMethods` are not used if a `paymentMethodType` is provided
        https://bugs.webkit.org/show_bug.cgi?id=228599
        <rdar://problem/81190366>

        Reviewed by Andy Estes.

        r275169 made it so that `paymentMethodType` is no longer `required` so that `additionalShippingMethods`
        can be specified without having to limit it to a specific payment method type. While this
        works in theory, WebKit doesn't know about the user's selected payment method type until the
        user actually selects a payment method, meaning that until then the `additionalShippingMethods`
        are not used. Unfortunately (until now) `PKPaymentRequestPaymentMethodUpdate` did not
        support providing a `NSArray<PKShippingMethod *> *`, so there was no way to update the list
        of shipping methods when the user changed their selected payment method, meaning that WebKit
        would have to wait/rely on the user to change their shipping address _after_ selecting a
        payment method in order for `additionalShippingMethods` to take effect.

        This also fixes an issue with WebKit's implementation of the W3C Payment Request API by
        allowing any generic (i.e. things not specific to Apple Pay) `shippingOptions` provided in
        `PaymentDetailsUpdate` to actually be used and update the Apple Pay sheet accordingly.

        Test: http/tests/paymentrequest/ApplePayModifier-paymentMethodType.https.html

        * Modules/applepay/ApplePayModifier.idl:
        * Modules/applepay/ApplePayModifier.h:
        * Modules/applepay/ApplePayPaymentMethodUpdate.idl:
        * Modules/applepay/ApplePayPaymentMethodUpdate.h:
        (WebCore::ApplePayPaymentMethodUpdate::encode const):
        (WebCore::ApplePayPaymentMethodUpdate::decode):
        * Modules/applepay/ApplePayShippingMethodUpdate.idl:
        * Modules/applepay/ApplePayShippingMethodUpdate.h:
        (WebCore::ApplePayShippingMethodUpdate::encode const):
        (WebCore::ApplePayShippingMethodUpdate::decode):
        Add (or wrap existing) `additionalShippingMethods`/`newShippingMethods` properties.

        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp:
        (WebCore::ApplePayPaymentHandler::computeShippingMethods):
        (WebCore::ApplePayPaymentHandler::detailsUpdated):
        (WebCore::ApplePayPaymentHandler::shippingOptionUpdated):
        (WebCore::ApplePayPaymentHandler::paymentMethodUpdated):
        Also call `computeShippingMethods()` and add the result to the update.

        * testing/MockPaymentCoordinator.cpp:
        (WebCore::MockPaymentCoordinator::completeShippingMethodSelection):
        (WebCore::MockPaymentCoordinator::completeShippingContactSelection):
        (WebCore::MockPaymentCoordinator::completePaymentMethodSelection):
        (WebCore::MockPaymentCoordinator::completeCouponCodeChange):
        Support for testing.

2021-07-29  Alex Christensen  <achristensen@webkit.org>

        [ Mac ] fast/dom/webtiming-document-open.html is a flaky failure
        https://bugs.webkit.org/show_bug.cgi?id=228571

        Reviewed by Chris Dumez.

        In r278391 I made PerformanceTiming::monotonicTimeToIntegerMilliseconds call MonotonicTime::approximateWallTime,
        which, if called multiple times, can give slightly different values, usually differing by 1 (millisecond, in this case).
        To fix this, cache the value from the first call.  This uses an additional 168 bytes per frame in pages that use PerformanceTiming.
        Once bug 227336 is turned on and the web is given a year or so to move to that replacement API, this whole API will be removed.

        * page/PerformanceTiming.cpp:
        (WebCore::PerformanceTiming::navigationStart const):
        (WebCore::PerformanceTiming::unloadEventStart const):
        (WebCore::PerformanceTiming::unloadEventEnd const):
        (WebCore::PerformanceTiming::redirectStart const):
        (WebCore::PerformanceTiming::redirectEnd const):
        (WebCore::PerformanceTiming::fetchStart const):
        (WebCore::PerformanceTiming::domainLookupStart const):
        (WebCore::PerformanceTiming::domainLookupEnd const):
        (WebCore::PerformanceTiming::connectStart const):
        (WebCore::PerformanceTiming::connectEnd const):
        (WebCore::PerformanceTiming::secureConnectionStart const):
        (WebCore::PerformanceTiming::requestStart const):
        (WebCore::PerformanceTiming::responseStart const):
        (WebCore::PerformanceTiming::responseEnd const):
        (WebCore::PerformanceTiming::domLoading const):
        (WebCore::PerformanceTiming::domInteractive const):
        (WebCore::PerformanceTiming::domContentLoadedEventStart const):
        (WebCore::PerformanceTiming::domContentLoadedEventEnd const):
        (WebCore::PerformanceTiming::domComplete const):
        (WebCore::PerformanceTiming::loadEventStart const):
        (WebCore::PerformanceTiming::loadEventEnd const):
        * page/PerformanceTiming.h:

2021-07-29  Michael Catanzaro  <mcatanzaro@gnome.org>

        -Wreturn-type warning in SQLiteDatabase.cpp
        https://bugs.webkit.org/show_bug.cgi?id=228602

        Unreviewed, add missing RELEASE_ASSERT_NOT_REACHED().

        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::checkpointModeValue):

2021-07-29  Alan Bujtas  <zalan@apple.com>

        [LFC][Integration] Disable hanging punctuation content
        https://bugs.webkit.org/show_bug.cgi?id=228598

        Reviewed by Antti Koivisto.

        Currently we only check the root for hanging punctuation, but it is applicable to all elements including inline boxes.

        * layout/integration/LayoutIntegrationCoverage.cpp:
        (WebCore::LayoutIntegration::canUseForChild):

2021-07-29  Kate Cheney  <katherine_cheney@apple.com>

        GetIdentifierStringForPreferredVoiceInListWithLocale() is deprecated in Monterey
        <https://webkit.org/b/228066>
        <rdar://problem/80577312>

        Patch by David Kilzer.

        Reviewed by David Kilzer.

        * platform/mac/PlatformSpeechSynthesizerMac.mm:
        (WebCore::speechSynthesisGetDefaultVoiceIdentifierForLocale):
        - Switch to use
          CopyIdentifierStringForPreferredVoiceInListWithLocale()
          in Monterey.
        - Change to return RetainPtr<> to handle lifetime of
          object returned from new function.
        (WebCore::PlatformSpeechSynthesizer::initializeVoiceList):
        - Change varible type to 'auto' since return type of
          speechSynthesisGetDefaultVoiceIdentifierForLocale()
          changed.

2021-07-29  Adrian Perez de Castro  <aperez@igalia.com>

        [CMake] Use an imported target for the libgcrypt library
        https://bugs.webkit.org/show_bug.cgi?id=228581

        Reviewed by Michael Catanzaro.

        No new tests needed.

        * platform/GCrypt.cmake: Use the LibGcrypt::LibGcrypt imported target.
        * platform/GStreamer.cmake: Remove unneeded usage of ${LIBGCRYPT_INCLUDE_DIRS} and
        ${LIBGCRYPT_LIBRARIES}, as those are handled now by making WebCore depend on the
        LibGcrypt::LibGcrypt imported target.

2021-07-29  Michael Catanzaro  <mcatanzaro@gnome.org>

        [WPE][GTK] .asc file extension is appended to filename of text/plain downloads
        https://bugs.webkit.org/show_bug.cgi?id=228566

        Reviewed by Adrian Perez de Castro.

        Our MIMETypeRegistry::preferredExtensionForMIMEType returns "asc" for text/plain, possibly
        because "asc" sorts alphabetically ahead of all other possible file extensions for
        text/plain, and we just pick the first one. So if the text file does not contain any file
        extension, we give it a file extension for a GPG signature. Ouch.

        I don't know how to fix it, but we don't need to, because we don't really want to append any
        file extension for text/plain anyway. That's just annoying. If I download a file named
        "backtrace" then I don't want it renamed to "backtrace.txt". That would be expected on
        Windows, but certainly not from WebKitGTK. So I think it's reasonable to have a special case
        for text/plain.

        * platform/xdg/MIMETypeRegistryXdg.cpp:
        (WebCore::MIMETypeRegistry::preferredExtensionForMIMEType):

2021-07-29  Youenn Fablet  <youenn@apple.com>

        RealtimeOutgoingVideoSourceCocoa::rotatePixelBuffer should update m_currentRotationSessionAngle
        https://bugs.webkit.org/show_bug.cgi?id=228549
        <rdar://80608977>

        Reviewed by Eric Carlson.

        Do not forget to update m_currentRotationSessionAngle when creating a new rotation session.
        Also, make sure to recreate rotation session in case the pixel buffer size changes.

        * platform/mediastream/mac/RealtimeOutgoingVideoSourceCocoa.mm:
        (WebCore::RealtimeOutgoingVideoSourceCocoa::rotatePixelBuffer):

2021-07-29  Adrian Perez de Castro  <aperez@igalia.com>

        Non-unified build fixes, late July 2021 edition
        https://bugs.webkit.org/show_bug.cgi?id=228579

        Unreviewed non-unified build fixes.

        * Modules/webaudio/AudioContextOptions.h: Add missing <optional> header.
        * html/BaseDateAndTimeInputType.cpp: Add missing "FrameView.h" header.
        * page/PageConfiguration.cpp: Add missing "BroadcastChannelRegistry.h" header.

2021-07-28  Ada Chan  <ada.chan@apple.com>

        [WebXR] Require GL_OES_EGL_image extension for xrCompatible GL context
        https://bugs.webkit.org/show_bug.cgi?id=228575

        Reviewed by Dean Jackson.

        Without this extension, EGLImageTargetTexture2DOES() will fail
        in GraphicsContextGLOpenGL::attachIOSurfaceToSharedTexture().

        * platform/graphics/cocoa/GraphicsContextGLOpenGLCocoa.mm:
        (WebCore::GraphicsContextGLOpenGL::GraphicsContextGLOpenGL):

2021-07-28  Jean-Yves Avenard  <jya@apple.com>

        [WebAudio] Add webm/opus container support
        https://bugs.webkit.org/show_bug.cgi?id=227110
        <rdar://problem/79437067>

        Reviewed by Jer Noble.

        Add support for webm in Web Audio.
        As decoding needs to be performed in the web content process we
        need to ensure that the decoders are available there. For security
        reasons, com.apple.audio.AudioComponentRegistrar mach calls are blocked
        which prevents registering a new audio component.
        We instead register it in the UI process so that AudioComponentFetchServerRegistrations
        SPI can forward the registration in the web process.
        Unfortunately, for unknown reasons, this fails for Vorbis audio codec (bug 228139).

        To demux the webm content, we use the existing SourceBufferParserWebM to extract all
        audio packets. We then iterate over all CM Samples and decode them into PCM, performing
        resampling as needed on the fly.
        There are things left to fix.
        - Opus and Vorbis encoder delay isn't handled (bug 228140) which leaves audible
        silence at the beginning of the destination buffer.
        - We can only decode mono and stereo content. Opus and Vorbis let you define a
        custom channel ordering, this is particularly used with ambisonic audio (with opus 255 mode).
        CoreMedia doesn't easily deal with such re-ordering as it appears to be essentially
        designed for audible content. With more than 2 channels, decoding will either fail
        or produce channels in the wrong order.

        Test: webaudio/decode-audio-data-webm-opus.html

        * Headers.cmake: Export header so that we can register the decoder in the UI process.
        * WebCore.xcodeproj/project.pbxproj: same as above.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::canPlayType const): Make canPlayType(webm/audio; codecs=opus)
        work if features is set.
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setWebMWebAudioEnabled):
        (WebCore::RuntimeEnabledFeatures::webMWebAudioEnabled const):
        * platform/MediaSample.h: Fly-by fix: remove unnecessary WEBCORE_EXPORT
        * platform/audio/AudioBus.cpp:
        (WebCore::AudioBus::setLength):
        * platform/audio/AudioBus.h: Add setLength method. Will change the reported length
        without touching the underlying storage.
        * platform/audio/AudioChannel.h: Add setLength method. Will change the reported
        length without touching the underlying storage.
        * platform/audio/cocoa/AudioFileReaderCocoa.cpp:
        (WebCore::tryCreateAudioBufferList): Fix checkedInt use to catch potential overflow
        (WebCore::AudioBufferListHolder::AudioBufferListHolder): Add convenience class that
        free wrapped AudioBufferList object on exit.
        (WebCore::AudioBufferListHolder::~AudioBufferListHolder):
        (WebCore::AudioBufferListHolder::operator bool const):
        (WebCore::AudioBufferListHolder::operator-> const):
        (WebCore::AudioBufferListHolder::operator* const):
        (WebCore::AudioBufferListHolder::isValid const):
        (WebCore::AudioFileReader::AudioFileReader):
        (WebCore::AudioFileReader::isMaybeWebM const): Method to check if the buffer
        contains WebM data.
        (WebCore::passthroughInputDataCallback): Required for AudioConverterFillComplexBuffer.
        Will feed the decoder the data to decode, splitting the multiple packets found
        in the CMSampleBuffer.
        (WebCore::AudioFileReader::numberOfFrames const): Return the total number of
        decoded frames in the packets.
        (WebCore::AudioFileReader::fileDataFormat const): Create AudioStreamBasicDescription
        related to the demuxed audio track. nullopt if unsupported content.
        (WebCore::AudioFileReader::clientDataFormat const):
        (WebCore::AudioFileReader::createBus):
        (WebCore::AudioFileReader::logChannel const):
        * platform/audio/cocoa/AudioFileReaderCocoa.h:
        * platform/audio/cocoa/AudioSampleDataSource.h: Remove unused typedef.
        * platform/audio/cocoa/AudioSampleDataSource.mm:
        (WebCore::AudioSampleDataSource::~AudioSampleDataSource): Fly-by fix, make it use
        PAL softlinks
        (WebCore::AudioSampleDataSource::setupConverter): Fly-by fix, make it use PAL
        softlinks
        * platform/gamepad/mac/HIDGamepadProvider.mm: Fly-by fix, add missing header.
        * platform/graphics/TrackPrivateBase.cpp: Fly-by fix, add missing header.
        * platform/graphics/avfoundation/objc/MediaSampleAVFObjC.h:
        Fly-by fix required by webkit-prepare : don't tag the whole class as WEBCORE_EXPORT.
        Move constructor and destructor function definitions out-of-line to prevent
        linkage errors.
        * platform/graphics/avfoundation/objc/MediaSampleAVFObjC.mm:
        (WebCore::MediaSampleAVFObjC::MediaSampleAVFObjC): Move code
        * platform/graphics/cocoa/WebCoreDecompressionSession.mm: Fly-by fix, add missing header.
        * platform/graphics/cocoa/WebMAudioUtilitiesCocoa.h: Export some symbols, add new
        method definitions.
        * platform/graphics/cocoa/WebMAudioUtilitiesCocoa.mm:
        (WebCore::registerDecoderFactory): Instead of attempting to register the decoder
        by dl-opening the required library, first attempting to see if the decoder is
        already available. Calling AudioComponentRegister in the web content process
        when the GPU process is enabled will fail due to sandbox settings. Which would
        incorrectly report the codec to not be available when it was.
        (WebCore::createAudioFormatDescriptionForFormat):
        (WebCore::isOpusDecoderAvailable): Fly-by fix, should the method be called
        on non-mac platform it would have return the unitialized value of the available
        static variable.
        (WebCore::registerOpusDecoderIfNeeded): Added
        (WebCore::isVorbisDecoderAvailable): Same as isOpusDecoderAvailable
        (WebCore::registerVorbisDecoderIfNeeded): Added

2021-07-28  Sihui Liu  <sihui_liu@apple.com>

        Implement IDBTransaction.durability
        https://bugs.webkit.org/show_bug.cgi?id=228289

        Reviewed by Darin Adler.

        Spec: https://www.w3.org/TR/IndexedDB/#dom-idbtransaction-durability
              https://www.w3.org/TR/IndexedDB/#dictdef-idbtransactionoptions

        IDBTransaction.durability gives a hint about durability of a transaction. If it's strict, backend would try
        syncing data to database file after transaction commit, which enforces durability. If it's relaxed, it means 
        data may stay in the OS buffer some time after transaction commit, which gives better performance. Firefox and 
        Chrome already implemented durability. They have different ways of setting durability, and we choose to use
        TransactionOptions as spec.

        Rebaselined existing tests.
        New tests: storage/indexeddb/idbtransaction-durability-private.html
                   storage/indexeddb/idbtransaction-durability.html

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Headers.cmake:
        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::transaction):
        * Modules/indexeddb/IDBDatabase.h:
        * Modules/indexeddb/IDBDatabase.idl:
        * Modules/indexeddb/IDBTransaction.h:
        * Modules/indexeddb/IDBTransaction.idl:
        * Modules/indexeddb/IDBTransactionDurability.h: Added.
        * Modules/indexeddb/IDBTransactionDurability.idl: Added.
        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
        (WebCore::IDBServer::SQLiteIDBBackingStore::commitTransaction):
        * Modules/indexeddb/server/SQLiteIDBTransaction.h:
        (WebCore::IDBServer::SQLiteIDBTransaction::durability const):
        * Modules/indexeddb/shared/IDBTransactionInfo.cpp:
        (WebCore::IDBTransactionInfo::clientTransaction):
        (WebCore::IDBTransactionInfo::IDBTransactionInfo):
        (WebCore::IDBTransactionInfo::isolatedCopy):
        * Modules/indexeddb/shared/IDBTransactionInfo.h:
        (WebCore::IDBTransactionInfo::durability const):
        (WebCore::IDBTransactionInfo::encode const):
        (WebCore::IDBTransactionInfo::decode):
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::checkpointModeValue):
        (WebCore::SQLiteDatabase::checkpoint):
        (WebCore::SQLiteDatabase::useWALJournalMode):
        * platform/sql/SQLiteDatabase.h:

2021-07-28  Sihui Liu  <sihui_liu@apple.com>

        IDBFactory.databases should not return databases with invalid version
        https://bugs.webkit.org/show_bug.cgi?id=228554

        Reviewed by Chris Dumez.

        To get database information, we used to open all database files and read from them. To avoid opening new 
        connection to databases that are already opened, and to ensure we get the latest information, for database that 
        is already opened, we should get its information from UniqueIDBDatabase directly. If database is not opened, we 
        open its file and read. By doing this, we also fix the issue that no databases are returned in private browsing
        (since there is no file created).

        Also, version 0 means the database is just created and has not finished version change transaction (version 1 
        is the first valid version according to spec), so we should not return databases with version 0.

        Tests: storage/indexeddb/getdatabases-private.html
               storage/indexeddb/getdatabases.html

        * Modules/indexeddb/server/IDBBackingStore.h:
        * Modules/indexeddb/server/IDBServer.cpp:
        (WebCore::IDBServer::getDatabaseNameAndVersionFromOriginDirectory):
        (WebCore::IDBServer::IDBServer::getAllDatabaseNamesAndVersions):
        * Modules/indexeddb/server/MemoryIDBBackingStore.h:
        * Modules/indexeddb/server/SQLiteIDBBackingStore.h:
        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::didDeleteBackingStore):
        (WebCore::IDBServer::UniqueIDBDatabase::filePath const):
        (WebCore::IDBServer::UniqueIDBDatabase::nameAndVersion const):
        * Modules/indexeddb/server/UniqueIDBDatabase.h:

2021-07-28  Myles C. Maxfield  <mmaxfield@apple.com>

        [GPU Process] Start tracking resource uses for ImageBuffers
        https://bugs.webkit.org/show_bug.cgi?id=228225

        Reviewed by Said Abou-Hallawa.

        This is part 4 of https://bugs.webkit.org/show_bug.cgi?id=228216.

        This works the same way as NativeImages/Fonts (https://bugs.webkit.org/show_bug.cgi?id=228224).
        The only real difference to how ImageBuffers work today is that RemoteImageBufferProxy's destructor
        doesn't directly tell the RemoteRenderingBackendProxy to release its RenderingResourceIdentifier,
        but instead this codepath goes through the RemoteResourceCacheProxy which is tracking the number of
        uses of the resource. This is so the RemoteResourceCacheProxy can inject the use count into the
        ReleaseRemoteResource command.

        Covered by existing tests.

        * platform/graphics/displaylists/DisplayListRecorder.cpp:
        (WebCore::DisplayList::Recorder::drawImageBuffer):
        (WebCore::DisplayList::Recorder::clipToImageBuffer):
        * platform/graphics/displaylists/DisplayListRecorder.h:
        (WebCore::DisplayList::Recorder::Delegate::recordImageBufferUse):
        * platform/graphics/displaylists/DisplayListReplayer.cpp:
        (WebCore::DisplayList::applyImageBufferItem):
        (WebCore::DisplayList::Replayer::applyItem):

2021-07-28  Eric Carlson  <eric.carlson@apple.com>

        [iOS] Ignore extra route change notifications
        https://bugs.webkit.org/show_bug.cgi?id=228565

        Reviewed by Jer Noble.

        Tested manually, this only reproduces on iOS hardware.

        * platform/mediastream/ios/AVAudioSessionCaptureDeviceManager.h:
        * platform/mediastream/ios/AVAudioSessionCaptureDeviceManager.mm:
        (WebCore::AVAudioSessionCaptureDeviceManager::scheduleUpdateCaptureDevices): Do
        nothing if m_recomputeDevices is true.
        (WebCore::AVAudioSessionCaptureDeviceManager::computeCaptureDevices): Don't rebuilding
        device list unless m_recomputeDevices is set. Clear m_recomputeDevices after after
        rebuilding list.

2021-07-28  Ryosuke Niwa  <rniwa@webkit.org>

        AppHighlightStorage should not inherit privately from RefCounted
        https://bugs.webkit.org/show_bug.cgi?id=228562

        Reviewed by Wenson Hsieh.

        AppHighlightStorage is only stored with unique_ptr. There is no reason for this class
        to *privately* inherit from RefCounted.

        * Modules/highlight/AppHighlightStorage.h:

2021-07-28  Ryosuke Niwa  <rniwa@webkit.org>

        Deploy more use of smart pointers in Document.cpp
        ​https://bugs.webkit.org/show_bug.cgi?id=228544

        A partial revert of r280390 to fix builds. AppHighlightStorage isn't really ref-counted.

        * dom/Document.cpp:
        (WebCore::Document::finishedParsing):

2021-07-28  Ryosuke Niwa  <rniwa@webkit.org>

        Deploy more use of smart pointers in Document.cpp
        https://bugs.webkit.org/show_bug.cgi?id=228544

        Reviewed by Darin Adler.

        Deployed RefPtr in more places in Document.cpp

        * dom/Document.cpp:
        (WebCore::acceptsEditingFocus):
        (WebCore::canAccessAncestor):
        (WebCore::createHTMLElementWithNameValidation):
        (WebCore::Document::adoptNode):
        (WebCore::createFallbackHTMLElement):
        (WebCore::Document::setVisualUpdatesAllowed):
        (WebCore::Document::setTitle):
        (WebCore::Document::resolveStyle):
        (WebCore::Document::updateLayout):
        (WebCore::Document::updateLayoutIfDimensionsOutOfDate):
        (WebCore::Document::frameDestroyed):
        (WebCore::Document::removeAllEventListeners):
        (WebCore::Document::setBodyOrFrameset):
        (WebCore::Document::implicitClose):
        (WebCore::Document::isNavigationBlockedByThirdPartyIFrameRedirectBlocking):
        (WebCore::Document::didRemoveAllPendingStylesheet):
        (WebCore::Document::processHttpEquiv):
        (WebCore::Document::processColorScheme):
        (WebCore::Document::prepareMouseEvent):
        (WebCore::Document::updateViewportUnitsOnResize):
        (WebCore::Document::runResizeSteps):
        (WebCore::Document::runScrollSteps):
        (WebCore::Document::invalidateScrollbars):
        (WebCore::Document::adjustFocusedNodeOnNodeRemoval):
        (WebCore::Document::invalidateEventRegionsForFrame):
        (WebCore::Document::invalidateRenderingDependentRegions):
        (WebCore::Document::setFocusedElement):
        (WebCore::Document::setBackForwardCacheState):
        (WebCore::Document::documentWillBecomeInactive):
        (WebCore::Document::setDesignMode):
        (WebCore::Document::finishedParsing):
        (WebCore::Document::initSecurityContext):
        (WebCore::Document::initContentSecurityPolicy):
        (WebCore::Document::updateURLForPushOrReplaceState):
        (WebCore::Document::getCSSCanvasContext):
        (WebCore::Document::loadEventDelayTimerFired):
        (WebCore::Document::checkCompleted):
        (WebCore::Document::wheelEventHandlersChanged):
        (WebCore::Document::didAddWheelEventHandler):
        (WebCore::Document::didRemoveWheelEventHandler):
        (WebCore::Document::didAddTouchEventHandler):
        (WebCore::Document::didRemoveTouchEventHandler):
        (WebCore::Document::absoluteEventRegionForNode):
        (WebCore::Document::absoluteRegionForEventTargets):
        (WebCore::Document::updateLastHandledUserGestureTimestamp):
        (WebCore::DocumentParserYieldToken::DocumentParserYieldToken):
        (WebCore::DocumentParserYieldToken::~DocumentParserYieldToken):
        (WebCore::Document::updateHoverActiveState):
        (WebCore::Document::updateIntersectionObservations):
        (WebCore::Document::bgColor const):
        (WebCore::Document::setBgColor):
        (WebCore::Document::fgColor const):
        (WebCore::Document::setFgColor):
        (WebCore::Document::alinkColor const):
        (WebCore::Document::setAlinkColor):
        (WebCore::Document::linkColorForBindings const):
        (WebCore::Document::setLinkColorForBindings):
        (WebCore::Document::vlinkColor const):
        (WebCore::Document::setVlinkColor):
        (WebCore::Document::dispatchSystemPreviewActionEvent):

2021-07-28  Frédéric Wang  <fwang@igalia.com>

        Crash in ApplyStyleCommand::applyRelativeFontStyleChange
        https://bugs.webkit.org/show_bug.cgi?id=226926

        Reviewed by Ryosuke Niwa.

        In r179944 and r180050, special handling was added for display: grid/flex nodes in
        Position::isCandidate in order to make them editable but the same logic was not added in
        PositionIterator::isCandidate. This patch fixes that inconsistency as well as the
        corresponding debug ASSERT and release nullptr dereference.

        Tests: fast/editing/apply-relative-font-style-change-crash-001.html
               fast/editing/apply-relative-font-style-change-crash-002.html

        * dom/PositionIterator.cpp:
        (WebCore::PositionIterator::isCandidate const): Handle flexbox and grid.

2021-07-27  Joonghun Park  <jh718.park@samsung.com>

        Unreviewed. Remove the build warning below since r280332.
        warning: redundant move in return statement [-Wredundant-move]

        No new tests, no new behaviors.

        * html/DOMFormData.cpp:
        (WebCore::DOMFormData::create):

2021-07-27  Devin Rousso  <drousso@apple.com>

        [Modern Media Controls] [macOS] Overflow button still shows as `on` even after contextmenu is dismissed
        https://bugs.webkit.org/show_bug.cgi?id=228310
        <rdar://problem/81124786>

        Reviewed by Wenson Hsieh.

        Test: media/modern-media-controls/overflow-support/button-state.html

        * page/ContextMenuController.h:
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::didDismissContextMenu): Added.
        * page/ContextMenuProvider.h:
        (WebCore::ContextMenuProvider::didDismissContextMenu): Added.
        Add plumbing from WebKit to the `ContextMenuProvider` for when the contextmenu is dismissed.

        * Modules/mediacontrols/MediaControlsHost.cpp:
        (WebCore::MediaControlsContextMenuProvider::didDismissContextMenu): Added.
        When the contextmenu is dismissed, invoke the callback provided to `MediaControlsHost::showMediaControlsContextMenu`
        as that's the signal to the `MediaController` that the contextmenu interaction is over,
        which adjusts the `on` state of the `Button`.

2021-07-27  Ryosuke Niwa  <rniwa@webkit.org>

        [macOS] Stop away unpaired surrogate pair in findNextWordFromIndex:forward:
        https://bugs.webkit.org/show_bug.cgi?id=228496

        Reviewed by Darin Adler.

        Replace unpaired surrogate pairs with the replacement character before calling findNextWordFromIndex:forward:

        * platform/text/mac/TextBoundaries.mm:
        (WebCore::findNextWordFromIndex):

2021-07-27  Myles C. Maxfield  <mmaxfield@apple.com>

        [GPU Process] Code cleanup after r280356
        https://bugs.webkit.org/show_bug.cgi?id=228495

        Reviewed by Wenson Hsieh.

        3 things:
        1. Rename cacheNativeImage()/cacheFont() to recordNativeImageUse()/recordFontUse() since it does more
               than caching now
        2. Mark overridden functions as final in RemoteImageBufferProxy because no class inherits from it
        3. Remove unnecessary WebCore:: where it isn't necessary

        No new tests because there is no behavior change.

        * platform/graphics/displaylists/DisplayListRecorder.cpp:
        (WebCore::DisplayList::Recorder::putPixelBuffer):
        (WebCore::DisplayList::Recorder::recordNativeImageUse):
        (WebCore::DisplayList::Recorder::appendStateChangeItem):
        (WebCore::DisplayList::Recorder::appendDrawGlyphsItemWithCachedFont):
        (WebCore::DisplayList::Recorder::drawImageBuffer):
        (WebCore::DisplayList::Recorder::drawNativeImage):
        (WebCore::DisplayList::Recorder::drawPattern):
        (WebCore::DisplayList::Recorder::cacheNativeImage): Deleted.
        * platform/graphics/displaylists/DisplayListRecorder.h:
        (WebCore::DisplayList::Recorder::Delegate::recordNativeImageUse):
        (WebCore::DisplayList::Recorder::Delegate::recordFontUse):
        (WebCore::DisplayList::Recorder::Delegate::cacheNativeImage): Deleted.
        (WebCore::DisplayList::Recorder::Delegate::cacheFont): Deleted.

2021-07-27  Myles C. Maxfield  <mmaxfield@apple.com>

        [GPU Process] Start tracking resource uses for NativeImages and Fonts
        https://bugs.webkit.org/show_bug.cgi?id=228224

        Reviewed by Said Abou-Hallawa.

        This is part 3 of https://bugs.webkit.org/show_bug.cgi?id=228216.

        This patch triggers the infrastructure added in https://bugs.webkit.org/show_bug.cgi?id=228222 by tracking
        resource use counts in the web process. RemoteResourceCacheProxy already is notified whenever a resource
        is used, so it records how many of these notifications it receives, and sends that count to the GPU process
        with the release message. When the GPU process replays the display lists, it also keeps track of how many
        uses it encountered for the resource, via calling through the Replayer::Delegate.

        Covered by existing tests.

        * platform/graphics/displaylists/DisplayListReplayer.cpp:
        (WebCore::DisplayList::applyNativeImageItem):
        (WebCore::DisplayList::applySetStateItem):
        (WebCore::DisplayList::applyFontItem):
        (WebCore::DisplayList::Replayer::applyItem):

2021-07-27  Alex Christensen  <achristensen@webkit.org>

        document.referrer value is missing trailing slash
        https://bugs.webkit.org/show_bug.cgi?id=215080

        Reviewed by John Wilander.

        This matches the behavior of Chrome and Firefox.
        The solution is similar to that of bug 227795.
        Covered by a few layout tests.

        * dom/Document.cpp:
        (WebCore::Document::referrer):

2021-07-26  Said Abou-Hallawa  <said@apple.com>

        Regulate the WebPage RenderingUpdates from the WebProcess to the GPUProcess
        https://bugs.webkit.org/show_bug.cgi?id=227791
        <rdar://78430639>

        Reviewed by Simon Fraser.

        Make ChromeClient decide whether a RenderingUpdate can be triggered or
        should be rescheduled. Keep track of how many times RenderingUpdate was
        rescheduled to ensure RenderingUpdate will be triggered anyway after a
        certain number of reschedules.

        * page/ChromeClient.h:
        (WebCore::ChromeClient::canTriggerRenderingUpdate const):
        * page/RenderingUpdateScheduler.cpp:
        (WebCore::RenderingUpdateScheduler::displayRefreshFired):
        * page/RenderingUpdateScheduler.h:

2021-07-26  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, speculative revert of r280193
        https://bugs.webkit.org/show_bug.cgi?id=228142

        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::insertTextNode):
        * html/parser/HTMLConstructionSite.h:
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::pumpTokenizerLoop):
        * html/parser/HTMLMetaCharsetParser.cpp:
        (WebCore::HTMLMetaCharsetParser::checkForMetaCharset):
        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::HTMLPreloadScanner::scan):
        * html/parser/HTMLToken.h:
        (WebCore::HTMLToken::clear):
        (WebCore::HTMLToken::beginStartTag):
        (WebCore::HTMLToken::beginEndTag):
        (WebCore::HTMLToken::shrinkToBestFit): Deleted.
        * html/parser/HTMLTokenizer.h:
        (WebCore::HTMLTokenizer::shrinkToBestFit): Deleted.
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::ExternalCharacterTokenBuffer::characterPredicate):
        (WebCore::HTMLTreeBuilder::processFakeCharacters):
        (WebCore::HTMLTreeBuilder::insertPhoneNumberLink):
        (WebCore::HTMLTreeBuilder::linkifyPhoneNumbers):
        (WebCore::HTMLTreeBuilder::processCharacterBuffer):
        (WebCore::HTMLTreeBuilder::processCharacterBufferForInBody):
        (WebCore::HTMLTreeBuilder::defaultForInTableText):
        (WebCore::HTMLTreeBuilder::processTokenInForeignContent):
        * html/parser/HTMLTreeBuilder.h:

2021-07-26  Myles C. Maxfield  <mmaxfield@apple.com>

        [GPU Process] Add resource use counter infrastructure to RemoteResourceCache
        https://bugs.webkit.org/show_bug.cgi?id=228222

        Reviewed by Said Abou-Hallawa.

        This is part 2 of https://bugs.webkit.org/show_bug.cgi?id=228216.

        No new tests because there is no behavior change yet. This patch is just adding infrastructure. For now, all these
        use counts sent by the web process are 0 - I'll implement that part in 3 follow-up patches.

        * platform/graphics/displaylists/DisplayListReplayer.h:
        (WebCore::DisplayList::Replayer::Delegate::recordResourceUse):

2021-07-26  Chris Dumez  <cdumez@apple.com>

        Location.href setter uses wrong window to resolve relative URLs
        https://bugs.webkit.org/show_bug.cgi?id=228287

        Reviewed by Darin Adler.

        Location::setLocation() is using "firstWindow" to resolve any input relative URL.
        We rely on JSC::VM::deprecatedVMEntryGlobalObject() to get the first/entry window.
        However, the test I wrote shows that we were using the wrong window as "first window"
        in some cases (since this test would pass in other browsers but not in WebKit).

        It turns out that JSEventListener::handleEvent() had a VMEntryScope internally that
        would impact the global object being returned by JSC::VM::deprecatedVMEntryGlobalObject().
        We were incorrectly using the scriptExecutionContext passed as parameter when constructing
        the VMEntryScope instead of using the global object of the function we're about to call.
        This bug addresses this.

        Credits to Geoff Garen for identifying the issue in JSEventListener::handleEvent().

        Test: http/tests/dom/window-location-set-href-relative-url.html

        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent):
        * page/Location.cpp:
        (WebCore::Location::setLocation):

2021-07-26  Johnson Zhou  <qiaosong_zhou@apple.com>

        This is responding to feedback on r280310.
        https://bugs.webkit.org/show_bug.cgi?id=227718

        Reviewed by Alex Christensen.

        * dom/FormDataEvent.h:
        (WebCore::FormDataEvent::formData const):
        * html/DOMFormData.cpp:
        (WebCore::DOMFormData::create):
        (WebCore::DOMFormData::clone const):
        (WebCore::DOMFormData::clone): Deleted.
        * html/DOMFormData.h:

2021-07-26  Jean-Yves Avenard  <jya@apple.com>

        Video pauses after scrubbing with Touch Bar
        https://bugs.webkit.org/show_bug.cgi?id=228277
        rdar://80606886

        Reviewed by Jer Noble.

        In https://trac.webkit.org/r206487 ; in order to ensure that the playback state
        was properly reflected following a seek using the touch bar, the element was paused.
        It's unclear if that workaround is still required, but for now we will record if the
        element was playing before the seek and if so, resume playback once the seek completes.
        Now that the touch bar and Now Playing are hooked to the Media Session action handlers
        the behaviour change will occur for all those components.

        Test: media/media-session/play-after-seek.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): Initialize new member in constructor.
        (WebCore::HTMLMediaElement::clearSeeking):
        (WebCore::HTMLMediaElement::finishSeek): Call play() once seek completes if the element
        was playing before.
        (WebCore::HTMLMediaElement::pause): Ensure that if pause() is called before the seek
        completes, the element stays paused.
        (WebCore::HTMLMediaElement::handleSeekToPlaybackPosition): Record playing state before
        pausing the element.
        * html/HTMLMediaElement.h: Add new boolean member.

2021-07-26  Ryosuke Niwa  <rniwa@webkit.org>

        Deploy smart pointers in ApplyBlockElementCommand, IndentOutdentCommand and InsertListCommand
        https://bugs.webkit.org/show_bug.cgi?id=228304

        Reviewed by Chris Dumez.

        Use RefPtr in more places instead of raw pointers.

        * editing/ApplyBlockElementCommand.cpp:
        (WebCore::ApplyBlockElementCommand::formatSelection):
        (WebCore::isNewLineAtPosition):
        (WebCore::ApplyBlockElementCommand::rangeForParagraphSplittingTextNodesIfNeeded):
        (WebCore::ApplyBlockElementCommand::endOfNextParagraphSplittingTextNodesIfNeeded):
        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::tryIndentingAsListItem):
        (WebCore::IndentOutdentCommand::indentIntoBlockquote):
        (WebCore::IndentOutdentCommand::outdentParagraph):
        * editing/InsertListCommand.cpp:
        (WebCore::InsertListCommand::mergeWithNeighboringLists):
        (WebCore::InsertListCommand::unlistifyParagraph):
        (WebCore::adjacentEnclosingList):
        (WebCore::InsertListCommand::listifyParagraph):

2021-07-26  Kate Cheney  <katherine_cheney@apple.com>

        ServiceWorkerRegistration.unregister method fails in WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=227524
        <rdar://problem/80264108>

        Reviewed by Youenn Fablet.

        We should only check the app-bound domain list when registering a new
        worker. Unregistering or updating an existing registration is fine because
        we know that every registration has already gone through this check.

        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::addRegistrationFromStore):
        (WebCore::SWServer::validateRegistrationDomain):
        (WebCore::SWServer::scheduleJob):
        * workers/service/server/SWServer.h:

2021-07-26  Cameron McCormack  <heycam@apple.com>

        Don't allow descriptors to be set to CSS-wide keywords
        https://bugs.webkit.org/show_bug.cgi?id=228218
        <rdar://80675715>

        Reviewed by Simon Fraser.

        And store the parent rule type directly on
        StyleRuleCSSStyleDeclaration so that we can still check it after
        m_parentRule has been cleared.

        * css/PropertySetCSSStyleDeclaration.cpp:
        (WebCore::StyleRuleCSSStyleDeclaration::StyleRuleCSSStyleDeclaration):
        (WebCore::StyleRuleCSSStyleDeclaration::cssParserContext const):
        * css/PropertySetCSSStyleDeclaration.h:
        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::parseKeywordValue):

2021-07-26  Chris Dumez  <cdumez@apple.com>

        Rename activeWindow to incumbentWindow in the Location class
        https://bugs.webkit.org/show_bug.cgi?id=228295

        Reviewed by Darin Adler.

        Rename activeWindow to incumbentWindow in the Location class, since this is the naming used
        both in the HTML specification and Location.idl.

        * page/Location.cpp:
        (WebCore::Location::setHref):
        (WebCore::Location::setProtocol):
        (WebCore::Location::setHost):
        (WebCore::Location::setHostname):
        (WebCore::Location::setPort):
        (WebCore::Location::setPathname):
        (WebCore::Location::setSearch):
        (WebCore::Location::setHash):
        (WebCore::Location::assign):
        (WebCore::Location::replace):
        (WebCore::Location::reload):
        (WebCore::Location::setLocation):
        * page/Location.h:

2021-07-26  Frédéric Wang  <fwang@igalia.com>

        Crash in InsertParagraphSeparatorCommand::doApply
        https://bugs.webkit.org/show_bug.cgi?id=224977

        Reviewed by Ryosuke Niwa.

        Because <html> elements are handled specially in Position::isCandidate() (a) and
        PositionIterator::isCandidate() (b), the function InsertParagraphSeparatorCommand::doApply()
        may end up in a edge case where the startBlock is a sibling of the visible position per (a)
        but isFirstInBlock,isLastInBlock is true,false per (b). This leads to hitting the debug
        assertion ASSERT(startBlock->firstChild()) and dereferencing a nullptr pointer in release.
        This patch fixes that by exiting early if the visible position is not a descendant of the
        start block.

        Test: editing/inserting/insert-paragraph-separator-with-html-elements-crash.html

        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply):

2021-07-26  Johnson Zhou  <qiaosong_zhou@apple.com>

        FormDataEvent added, and dispatched upon creation of DOMFormData or submission of HTMLFormElement.
        https://bugs.webkit.org/show_bug.cgi?id=227718

        Reviewed by Chris Dumez.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/EventNames.h:
        * dom/EventNames.in:
        * dom/FormDataEvent.cpp: Added.
        (WebCore::FormDataEvent::create):
        (WebCore::FormDataEvent::FormDataEvent):
        (WebCore::FormDataEvent::eventInterface const):
        * dom/FormDataEvent.h: Added.
        (WebCore::FormDataEvent::formData const):
        * dom/FormDataEvent.idl: Added.
        * dom/GlobalEventHandlers.idl:
        * html/DOMFormData.cpp:
        (WebCore::DOMFormData::DOMFormData):
        (WebCore::DOMFormData::create):
        (WebCore::DOMFormData::clone):
        * html/DOMFormData.h:
        (WebCore::DOMFormData::create): Deleted.
        * html/HTMLAttributeNames.in:
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::createEventHandlerNameMap):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::submitIfPossible):
        (WebCore::HTMLFormElement::submit):
        (WebCore::HTMLFormElement::constructEntryList):
        * html/HTMLFormElement.h:
        * loader/FormSubmission.cpp:
        (WebCore::FormSubmission::create):
        * loader/FormSubmission.h:
        * platform/network/FormData.cpp:
        (WebCore::FormData::appendNonMultiPartKeyValuePairItems):

2021-07-26  Jer Noble  <jer.noble@apple.com>

        [Cocoa] Playback stalls on bilibili.com
        https://bugs.webkit.org/show_bug.cgi?id=228239
        <rdar://80419477>

        Reviewed by Eric Carlson.

        Test: media/media-source/media-source-effectiveplaybackrate.html

        bilibili.com will attempt to detect playback stalls by detecting when video.currentTime
        returns the same value while video.paused is false. When the GPU process is enabled, we use
        a heuristic to provide the answer to currentTime to avoid making synchronous calls to the
        GPU process. This heuristic uses the reported playback rate of the MediaPlayerPrivate to
        derive the currentTime. However, MediaPlayerPrivateAVFoundationObjC does not override the
        default implementation of rate(), and so always returns a reported rate of zero.

        To make the call less ambiguous, add a MediaPlayer and MediaPlayerPrivate effectiveRate()
        method, which by default will just return rate(), as some ports only report the
        requested rate and not the effective rate. Then add overrides for both rate() and
        effectiveRate() on both MediaPlayerPrivateAVFoundationObjC and
        MediaPlayerPrivateMediaSourceAVFObjC.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::updatePlaybackRate):
        (WebCore::HTMLMediaElement::mediaPlayerRateChanged):
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::effectiveRate const):
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::effectiveRate const):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::rate const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::effectiveRate const):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::rate const):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::effectiveRate const):
        * testing/Internals.cpp:
        (WebCore::Internals::isMediaElementHidden):
        (WebCore::Internals::elementEffectivePlaybackRate):
        * testing/Internals.h:
        * testing/Internals.idl:

2021-07-26  Ada Chan  <ada.chan@apple.com>

        [WebXR] WebXRSession::m_visibilityState is uninitialized
        https://bugs.webkit.org/show_bug.cgi?id=228286

        Reviewed by Tim Horton.

        WebXRSession::m_visibilityState should be initialized to XRVisibilityState::Visible.

        * Modules/webxr/WebXRSession.h:

2021-07-26  Aditya Keerthi  <akeerthi@apple.com>

        [iOS] Page background color does not update after UIUserInterfaceLevel change
        https://bugs.webkit.org/show_bug.cgi?id=228282
        rdar://80490391

        Reviewed by Wenson Hsieh.

        The default background color of the root element is a semantic color
        that adapts to changes in user interface style (light/dark mode) and
        user interface level (base/elevated).

        Currently, the default background color is correctly recalculated
        after a change to the user interface style. However, the existing
        logic does not update the color unless there is a change to the user
        interface style. This behavior is incorrect, since a change to the
        user interface level, without a change to the user interface style,
        is ignored.

        A common scenario in which a user interface level change is not
        accompanied by a user interface style change, is when a WKWebView is
        created and then presented as a page sheet, form sheet, or popover.
        In this scenario, the default background color is currently incorrect.

        To fix, ensure that the background color is recalculated if any of the
        traits that affect semantic colors is changed.

        Test: fast/css/ios/update-user-interface-level.html

        * page/FrameView.cpp:
        (WebCore::FrameView::recalculateBaseBackgroundColor):

        Recalculate the background color if any of the traits that affect
        semantic colors is changed, not just a change in user interface
        style (light/dark mode).

        * page/FrameView.h:
        * testing/InternalSettings.cpp:

        Added a testing hook to change the current user interface level.

        (WebCore::InternalSettings::resetToConsistentState):
        (WebCore::InternalSettings::setUseDarkAppearance):
        (WebCore::InternalSettings::setUseElevatedUserInterfaceLevel):
        * testing/InternalSettings.h:
        * testing/InternalSettings.idl:

2021-07-26  Chris Dumez  <cdumez@apple.com>

        XML documents end up with a unique origin in WebKit only
        https://bugs.webkit.org/show_bug.cgi?id=228254

        Reviewed by Darin Adler.

        XML documents end up with a unique origin in WebKit only. They have a regular origin in Blink and Firefox.
        This patch is aligning our behavior with other browsers.

        Test: http/tests/misc/xml-document-origin.html

        * xml/XMLTreeViewer.cpp:
        (WebCore::XMLTreeViewer::transformDocumentToTreeView):

2021-07-26  Jer Noble  <jer.noble@apple.com>

        [iOS] All home screen web apps resume when any home screen web app is foregrounded
        https://bugs.webkit.org/show_bug.cgi?id=228246
        <rdar://72949281>

        Reviewed by Eric Carlson.

        Test: media/video-page-visibility-restriction.html

        On iOS, home screen web apps all run from the same UIProcess, SafariViewService. So when
        one Web App is foregrounded, the SafariViewService itself is foregrounded, and all WKWebViews
        (one for each Web App) are foregrounded as well, allowing all Web Apps to resume audio
        playback. This is not ideal; ideally, all Web Apps will be allowed to continue to play
        audio in the background. But until we can fix that bug, the current behavior of pausing
        audio from Web App A when A is backgrounded, and resuming audio from A when Web App B is
        foregrounded feels super broken.

        Add a new WKPreference/WebPreference/Setting and matching MediaElementSession restriction
        that will block playback of audible media elements when the media element's page is not
        visible. When adopted by SafariViewService, this would keep multiple Web Apps (and indeed
        SafariViewController pages) from starting playback when any other is foregrounded.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::initializeMediaSession):
        (WebCore::HTMLMediaElement::visibilityStateChanged):
        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::visibilityChanged):
        (WebCore::MediaElementSession::playbackStateChangePermitted const):
        * html/MediaElementSession.h:
        * platform/audio/PlatformMediaSession.h:
        * testing/Internals.cpp:
        (WebCore::Internals::setMediaElementRestrictions):

2021-07-26  Philippe Normand  <pnormand@igalia.com>

        [Pipewire] Muting the display capture closes the Portal session
        https://bugs.webkit.org/show_bug.cgi?id=228265

        Reviewed by Xabier Rodriguez-Calvar.

        The session should not be closed in that case, because setting the capture state to active
        again would have no effect. This patch also removes useless CRLFs from WTFLogAlways() calls
        and increases the session Close call timeout to 100ms, 10ms was too low, at least for my
        setup.

        * platform/mediastream/gstreamer/GStreamerDisplayCaptureDeviceManager.cpp:
        (WebCore::GStreamerDisplayCaptureDeviceManager::createDisplayCaptureSource):
        (WebCore::GStreamerDisplayCaptureDeviceManager::stopSource):
        * platform/mediastream/gstreamer/GStreamerVideoCaptureSource.cpp:
        (WebCore::GStreamerVideoCaptureSource::~GStreamerVideoCaptureSource):
        (WebCore::GStreamerVideoCaptureSource::stopProducingData):

2021-07-26  Ziran Sun  <zsun@igalia.com>

        [css-grid] svg image as grid items should use the overriding logical width/height when defined to compute the logical height/width
        https://bugs.webkit.org/show_bug.cgi?id=228105

        As discussed at https://github.com/w3c/csswg-drafts/issues/6286#issuecomment-866986544, degenerate
        aspect ratios derived from SVG width/height attributes fall back to viewbox aspect ratio 
        (whether due to negative values or zero values).

        When computing the logical height/width using an intrinsic aspect ratio, RenderReplaced uses the
        overridingLogicalWidth/overridingLogicalHeight whenever defined as long as the flex or
        grid item has an intrinsic size. For an SVG graphic though, it's common to have an intrinsic aspect
        ratio but not to have an intrinsic width or height. For this special case, we still should use
        overridingLogicalWidth/overridingLogicalHeight for logical height/width calculations.        

        Reviewed by Javier Fernandez.

        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::computeReplacedLogicalWidth const):
        (WebCore::RenderReplaced::computeReplacedLogicalHeight const):

2021-07-24  Devin Rousso  <drousso@apple.com>

        [Apple Pay] Do not add coupon code `ApplePayErrorCode` values for systems that do not support it
        https://bugs.webkit.org/show_bug.cgi?id=228243

        Reviewed by Wenson Hsieh.

        Test: http/tests/ssl/applepay/ApplePayError.html

        * Modules/applepay/ApplePayErrorCode.idl:
        * Modules/applepay/ApplePayErrorCode.h:

2021-07-23  Andres Gonzalez  <andresg_22@apple.com>

        Add a method to WebAccessibilityObjectWrapper so that clients can retrieve the text of each line and their corresponding bounding rectangles.
        https://bugs.webkit.org/show_bug.cgi?id=228251
        rdar://77184036

        Reviewed by Chris Fleizach.

        Test: accessibility/ios-simulator/element-line-rects-and-text.html

        Accessibility clients often need to retrieve a line of text and its
        corresponding bounding rectangle screen coordinates. There was not a
        clear way of doing this. This patch provides lineRectsAndText as the
        mechanism to retrieve the lines of text and their corresponding
        rectangles for a given accessibility object. This is the iOS
        implementation. MacOS implementation will be done in a separate patch.

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper stringsForSimpleRange:attributed:]):
        (-[WebAccessibilityObjectWrapper arrayOfTextForTextMarkers:attributed:]):
        (-[WebAccessibilityObjectWrapper lineRectsAndText]):
        (-[WebAccessibilityObjectWrapper lineRectsForTextMarkerRange:]):

2021-07-23  Alexey Shvayka  <shvaikalesh@gmail.com>

        [WebIDL] Properly validate and merge descriptors in [Replaceable] setter
        https://bugs.webkit.org/show_bug.cgi?id=227662

        Reviewed by Sam Weinig.

        The previous implementation relied on an invariant that structure property is absent
        when [Replaceable] setter is called, which is no longer guaranteed after the introduction
        of Object.defineProperty.

        This patch replaces putDirect() with defineOwnProperty(), fixing the compliance with
        invariants of internal methods [1]: an accessor property once observed as non-configurable
        can't be reconfigured to have [[Value]]. Both Chrome and Firefox properly validate descriptors.

        Although [[DefineOwnProperty]] failure is silently ignored by Chrome and the spec [2], WebKit now
        throws a TypeError, which is a desired behavior for built-ins and was proven to be web-compatible
        by Firefox. With WebKit being the second implementation that throws, the spec can be tightened.

        After r264574, attributeChangeTransition() is called during defineOwnProperty(), ensuring inline
        caching is correct. Also, this change adjusts `window.opener` setter [3].

        [1] https://tc39.es/ecma262/#sec-invariants-of-the-essential-internal-methods
        [2] https://heycam.github.io/webidl/#dfn-attribute-setter (step 4.5.5)
        [3] https://html.spec.whatwg.org/multipage/browsers.html#dom-opener

        Tests: fast/dom/replaceable-setter-throws-if-defineownproperty-fails.html
               fast/dom/window-opener-setter-throws-if-defineownproperty-fails-1.html
               fast/dom/window-opener-setter-throws-if-defineownproperty-fails-2.html

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::setOpener):
        (WebCore::JSDOMWindow::setOpenDatabase):
        * bindings/scripts/CodeGeneratorJS.pm:
        (AttributeSetterNeedsPropertyName):
        (GenerateAttributeSetterBodyDefinition):
        (GenerateAttributeSetterTrampolineDefinition):
        * bindings/scripts/test/JS/JSTestObj.cpp:

2021-07-23  Wenson Hsieh  <wenson_hsieh@apple.com>

        REGRESSION (r279751): WebContent process often crashes when hovering over content on apple.com
        https://bugs.webkit.org/show_bug.cgi?id=228247
        rdar://81010093

        Reviewed by Tim Horton.

        Add an internal testing hook that can be used to trigger text recognition for the given element. While we should
        eventually combine this with another testing hook to simulate VisionKit text recognition results, the new test
        using this internal hook shouldn't make its way into VisionKit anyways, so this isn't necessary for now.

        See WebKit ChangeLog for more details.

        Test: fast/images/text-recognition/text-recognition-in-transparent-video.html

        * testing/Internals.cpp:
        (WebCore::Internals::requestTextRecognition):
        * testing/Internals.h:
        * testing/Internals.idl:

2021-07-23  Chris Dumez  <cdumez@apple.com>

        SharedBuffer::takeData() is a bit dangerous
        https://bugs.webkit.org/show_bug.cgi?id=228161

        Reviewed by Darin Adler.

        SharedBuffer::takeData() is a bit dangerous since SharedBuffer is RefCounted and several object may be sharing ownership
        of the buffer. Having one owner call takeData() in case ownership is shared leads to bugs such as Bug 228096.

        To address the issue, I made SharedBuffer::takeData() private and introduced a new SharedBuffer::extractData() member
        function which calls takeData() only if the SharedBuffer is not shared (RefCount is 1) and falls back to calling copyData()
        otherwise. I also optimized copyData() a bit by iterating over the segments to build the vector, instead of calling the
        potentially very slow SharedBuffer::data().

        * Modules/fetch/FetchBodyConsumer.cpp:
        (WebCore::FetchBodyConsumer::takeAsBlob):
        * Modules/mediarecorder/MediaRecorder.cpp:
        (WebCore::createDataAvailableEvent):
        * editing/WebCorePasteboardFileReader.cpp:
        (WebCore::WebCorePasteboardFileReader::readBuffer):
        * editing/cocoa/WebContentReaderCocoa.mm:
        (WebCore::createFragmentForImageAttachment):
        (WebCore::WebContentReader::readImage):
        * editing/gtk/WebContentReaderGtk.cpp:
        (WebCore::WebContentReader::readImage):
        * html/HTMLAttachmentElement.cpp:
        (WebCore::HTMLAttachmentElement::updateEnclosingImageWithData):
        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::copyData):
        * platform/SharedBuffer.h:
        (WebCore::SharedBuffer::extractData):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::createResponseBlob):

2021-07-23  Alexey Shvayka  <shvaikalesh@gmail.com>

        [JSC] Call custom accessors / values with their holder's global object
        https://bugs.webkit.org/show_bug.cgi?id=225997

        Reviewed by Yusuke Suzuki.

        This patch fixes cross-realm yet same-origin WebIDL attributes to throw errors in realm of
        their accessor, while ensuring that `window.location` and `location.href` setters don't leak
        cross-origin Object.prototype via thrown error.

        Since Location setters relied on lexical global object to pass outgoing `document.referrer`,
        they were updated to use IncumbentWindow as per spec [1]. callerGlobalObject() was reworked
        to skip native / built-in callers and rely on VMEntryScope to accomodate top-level <script>
        code navigating via Location setter, making the helper more versatile.

        globalObjectOfClosestCodeBlock() fixed JSCustomSetterFunction instances and Location's
        assign() / replace() methods to pass correct referrer.

        Also, this change fixes static attributes like `PerformanceObserver.supportedEntryTypes`
        to return wrappers of their realm instead of lexical.

        [1] https://html.spec.whatwg.org/multipage/history.html#location-object-navigate (step 2)

        Tests: imported/w3c/web-platform-tests/WebIDL/ecmascript-binding/global-object-implicit-this-value-cross-realm.html
               imported/w3c/web-platform-tests/WebIDL/ecmascript-binding/invalid-this-value-cross-realm.html
               imported/w3c/web-platform-tests/html/browsers/origin/cross-origin-objects/window-location-and-location-href-cross-realm-set.html
               imported/w3c/web-platform-tests/performance-timeline/supportedEntryTypes-cross-realm-access.html

        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::callerGlobalObject): Deleted.
        * bindings/js/JSDOMGlobalObject.h:
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::incumbentDOMWindow):
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::put):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::JSLocation::put):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateNamedGetterLambda):
        (GenerateCallWithUsingReferences):
        (GenerateCallWith):
        Ensure IncumbentWindow comes before FirstWindow.

        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/TestObj.idl:
        Remove attributes that relied on CallFrame since custom getters don't have it.

        * page/Location.idl:
        Remove [LegacyUnforgeable] from ancestorOrigins because it's set on the interface.

2021-07-23  Richard Houle  <rhoule@apple.com>

        WebSocket traffic should be correctly assigned to either Developer or User.
        https://bugs.webkit.org/show_bug.cgi?id=227564
        <rdar://problem/79307301>

        Reviewed by Kate Cheney.

        Tests: http/tests/app-privacy-report/websocket-isappinitiated.html
               http/tests/app-privacy-report/websocket-isnotappinitiated.html

        * Modules/websockets/ThreadableWebSocketChannel.cpp:
        (WebCore::ThreadableWebSocketChannel::webSocketConnectRequest):

2021-07-23  Aditya Keerthi  <akeerthi@apple.com>

        [macOS] Repainting artifacts when moving input type=range slider thumb
        https://bugs.webkit.org/show_bug.cgi?id=228135
        rdar://76247487

        Reviewed by Tim Horton.

        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::adjustSliderThumbSize const):

        The size of NSSliderCell's knob increased in Big Sur. Consequently, the
        knob was being painted outside of its box. Unfortunately, there is
        currently no way to obtain the size programmatically, so we are forced
        to update the hardcoded size.

2021-07-23  Philippe Normand  <pnormand@igalia.com>

        [GStreamer][1.19] Warnings due to AppSinkCallbacks struct growth
        https://bugs.webkit.org/show_bug.cgi?id=228229

        Reviewed by Xabier Rodriguez-Calvar.

        A new callback was added, for event notifications.
        
        * platform/audio/gstreamer/AudioFileReaderGStreamer.cpp:
        (WebCore::AudioFileReader::handleNewDeinterleavePad):
        * platform/audio/gstreamer/AudioSourceProviderGStreamer.cpp:
        (WebCore::AudioSourceProviderGStreamer::handleNewDeinterleavePad):
        * platform/graphics/gstreamer/ImageDecoderGStreamer.cpp:
        (WebCore::ImageDecoderGStreamer::InnerDecoder::connectDecoderPad):

2021-07-23  Devin Rousso  <drousso@apple.com>

        [Modern Media Controls] [macOS] Only show total duration when the elapsed time is visible
        https://bugs.webkit.org/show_bug.cgi?id=228191
        <rdar://problem/80529918>

        Reviewed by Eric Carlson.

        When a `<video>` is narrow (~250px) WebKit will drop the elapsed time, meaning that only the
        scrubber and duration are visible. It's not very helpful to show just the duration because
        it never changes, requiring the user to do the mental math of dividing the scrubber width
        by the total duration to figure out how much time is left (and has elapsed). Showing the
        remaining time is better because it at least helps the user not have to figure out how much
        longer the `<video>` will play (which is more useful/actionable than knowing the duration).

        Test: media/modern-media-controls/time-control/time-control.html

        * Modules/modern-media-controls/controls/time-control.js:
        (TimeControl):
        (TimeControl.prototype.handleEvent):
        (TimeControl.prototype.get _canShowDurationTimeLabel): Added.
        (TimeControl.prototype._durationOrRemainingTimeLabel):
        (TimeControl.prototype._performIdealLayout):
        Rename `_showDurationTimeLabel` to `_shouldShowDurationTimeLabel` and add another private
        getter `_canShowDurationTimeLabel` that only is true when `this.elapsedTimeLabel.visible`.
        Use both to decide whether duration or remaining is shown/updated/etc..

2021-07-23  Philippe Normand  <pnormand@igalia.com>

        [GLib] Remove libportal dependency
        https://bugs.webkit.org/show_bug.cgi?id=228056

        Reviewed by Carlos Garcia Campos.

        The pure-GDBus approach allows us to request the input device (Monitor or Window) depending
        on the CaptureDevice type and make the mouse cursor visible in the generated video stream.
        Also requesting capture support within computeCaptureDevices() was a bad idea because this
        being used by the enumerateMediaDevices API could potentially spam the user with permission
        popups.

        * platform/GStreamer.cmake:
        * platform/mediastream/gstreamer/GStreamerCaptureDeviceManager.cpp:
        * platform/mediastream/gstreamer/GStreamerCaptureDeviceManager.h:
        * platform/mediastream/gstreamer/GStreamerDisplayCaptureDeviceManager.cpp: Added.
        (WebCore::GStreamerDisplayCaptureDeviceManager::singleton):
        (WebCore::GStreamerDisplayCaptureDeviceManager::GStreamerDisplayCaptureDeviceManager):
        (WebCore::GStreamerDisplayCaptureDeviceManager::~GStreamerDisplayCaptureDeviceManager):
        (WebCore::GStreamerDisplayCaptureDeviceManager::computeCaptureDevices):
        (WebCore::GStreamerDisplayCaptureDeviceManager::createDisplayCaptureSource):
        (WebCore::GStreamerDisplayCaptureDeviceManager::stopSource):
        (WebCore::GStreamerDisplayCaptureDeviceManager::waitResponseSignal):
        * platform/mediastream/gstreamer/GStreamerVideoCaptureSource.cpp:
        (WebCore::GStreamerVideoCaptureSource::createPipewireSource):
        (WebCore::GStreamerVideoCaptureSource::factory):
        (WebCore::GStreamerVideoCaptureSource::displayFactory):
        (WebCore::GStreamerVideoCaptureSource::GStreamerVideoCaptureSource):
        (WebCore::GStreamerVideoCaptureSource::stopProducingData):
        * platform/mediastream/gstreamer/GStreamerVideoCaptureSource.h:
        * platform/mediastream/gstreamer/GStreamerVideoCapturer.cpp:
        * platform/mediastream/gstreamer/GStreamerVideoCapturer.h:

2021-07-22  Said Abou-Hallawa  <said@apple.com>

        Unreviewed, reverting 280130.
        https://bugs.webkit.org/show_bug.cgi?id=228212

        Introduced MotionMark regression

        Reverted changeset:

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::simplifiedLayout):

2021-07-22  Chris Dumez  <cdumez@apple.com>

        The network process fails to take a locked file assertion when executing a SQLiteStatement outside a transaction
        https://bugs.webkit.org/show_bug.cgi?id=228194

        Reviewed by Geoffrey Garen.

        The network process fails to take a locked file assertion when executing a SQLiteStatement outside a transaction.
        This means we may suspend in the middle of that statement and crash due to holding locked files.

        To address this, we now make sure to bump the transaction count during the sqlite3_step() call if we're not
        in the middle of a transaction and the current statement is not read-only (e.g. SELECT). Note that SQLite will
        implicitly create a transaction for us in such cases.

        * platform/sql/SQLiteStatement.cpp:
        (WebCore::SQLiteStatement::step):

2021-07-22  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] ".SF Arabic" should not be able to be looked up by name (because it is dot-prefixed)
        https://bugs.webkit.org/show_bug.cgi?id=228018
        <rdar://problem/80691654>

        Reviewed by Simon Fraser.

        Dot-prefixed font names are not supported. The supported way of using SF Arabic is to use
        system-ui with Arabic text. It will fall back to SF Arabic.

        Test: fast/text/sf-arabic-lookup-by-name.html

        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::platformFontLookupWithFamily): Special case this font name, similar to how
        we have other special cases for other dot-prefixed fonts. Ideally we would change this
        check to just if the leading character is a dot, but that change would be too scary at
        this point in the release cycle.

2021-07-22  Yusuke Suzuki  <ysuzuki@apple.com>

        Rename AtomicHTMLToken to AtomHTMLToken
        https://bugs.webkit.org/show_bug.cgi?id=228196

        Reviewed by Geoffrey Garen.

        We should rename AtomicHTMLToken to AtomHTMLToken as we did for AtomString (AtomicString => AtomString).

        * WebCore.xcodeproj/project.pbxproj:
        * html/parser/AtomHTMLToken.h: Renamed from Source/WebCore/html/parser/AtomicHTMLToken.h.
        (WebCore::AtomHTMLToken::AtomHTMLToken):
        (WebCore::AtomHTMLToken::type const):
        (WebCore::AtomHTMLToken::name const):
        (WebCore::AtomHTMLToken::setName):
        (WebCore::AtomHTMLToken::selfClosing const):
        (WebCore::AtomHTMLToken::attributes):
        (WebCore::AtomHTMLToken::attributes const):
        (WebCore::AtomHTMLToken::characters const):
        (WebCore::AtomHTMLToken::charactersLength const):
        (WebCore::AtomHTMLToken::charactersIsAll8BitData const):
        (WebCore::AtomHTMLToken::comment const):
        (WebCore::AtomHTMLToken::forceQuirks const):
        (WebCore::AtomHTMLToken::publicIdentifier const):
        (WebCore::AtomHTMLToken::systemIdentifier const):
        (WebCore::AtomHTMLToken::initializeAttributes):
        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::setAttributes):
        (WebCore::HTMLConstructionSite::insertHTMLHtmlStartTagBeforeHTML):
        (WebCore::HTMLConstructionSite::mergeAttributesFromTokenIntoElement):
        (WebCore::HTMLConstructionSite::insertHTMLHtmlStartTagInBody):
        (WebCore::HTMLConstructionSite::insertHTMLBodyStartTagInBody):
        (WebCore::HTMLConstructionSite::insertDoctype):
        (WebCore::HTMLConstructionSite::insertComment):
        (WebCore::HTMLConstructionSite::insertCommentOnDocument):
        (WebCore::HTMLConstructionSite::insertCommentOnHTMLHtmlElement):
        (WebCore::HTMLConstructionSite::insertHTMLHeadElement):
        (WebCore::HTMLConstructionSite::insertHTMLBodyElement):
        (WebCore::HTMLConstructionSite::insertHTMLFormElement):
        (WebCore::HTMLConstructionSite::insertHTMLElement):
        (WebCore::HTMLConstructionSite::insertHTMLElementOrFindCustomElementInterface):
        (WebCore::HTMLConstructionSite::insertSelfClosingHTMLElement):
        (WebCore::HTMLConstructionSite::insertFormattingElement):
        (WebCore::HTMLConstructionSite::insertScriptElement):
        (WebCore::HTMLConstructionSite::insertForeignElement):
        (WebCore::HTMLConstructionSite::createElement):
        (WebCore::HTMLConstructionSite::createHTMLElementOrFindCustomElementInterface):
        (WebCore::HTMLConstructionSite::createHTMLElement):
        (WebCore::HTMLConstructionSite::createElementFromSavedToken):
        * html/parser/HTMLConstructionSite.h:
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::constructTreeFromHTMLToken):
        * html/parser/HTMLStackItem.h:
        (WebCore::HTMLStackItem::HTMLStackItem):
        (WebCore::HTMLStackItem::create):
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::ExternalCharacterTokenBuffer::ExternalCharacterTokenBuffer):
        (WebCore::HTMLTreeBuilder::constructTree):
        (WebCore::HTMLTreeBuilder::processToken):
        (WebCore::HTMLTreeBuilder::processDoctypeToken):
        (WebCore::HTMLTreeBuilder::processFakeStartTag):
        (WebCore::HTMLTreeBuilder::processFakeEndTag):
        (WebCore::HTMLTreeBuilder::processFakePEndTagIfPInButtonScope):
        (WebCore::shouldClose):
        (WebCore::adjustSVGTagNameCase):
        (WebCore::adjustAttributes):
        (WebCore::adjustSVGAttributes):
        (WebCore::adjustMathMLAttributes):
        (WebCore::adjustForeignAttributes):
        (WebCore::HTMLTreeBuilder::processStartTagForInBody):
        (WebCore::HTMLTreeBuilder::insertGenericHTMLElement):
        (WebCore::HTMLTreeBuilder::processTemplateStartTag):
        (WebCore::HTMLTreeBuilder::processTemplateEndTag):
        (WebCore::HTMLTreeBuilder::processEndOfFileForInTemplateContents):
        (WebCore::HTMLTreeBuilder::processStartTagForInTable):
        (WebCore::HTMLTreeBuilder::processStartTag):
        (WebCore::HTMLTreeBuilder::processHtmlStartTagForInBody):
        (WebCore::HTMLTreeBuilder::processBodyEndTagForInBody):
        (WebCore::HTMLTreeBuilder::processAnyOtherEndTagForInBody):
        (WebCore::HTMLTreeBuilder::callTheAdoptionAgency):
        (WebCore::HTMLTreeBuilder::processEndTagForInTableBody):
        (WebCore::HTMLTreeBuilder::processEndTagForInRow):
        (WebCore::HTMLTreeBuilder::processEndTagForInCell):
        (WebCore::HTMLTreeBuilder::processEndTagForInBody):
        (WebCore::HTMLTreeBuilder::processEndTagForInTable):
        (WebCore::HTMLTreeBuilder::processEndTag):
        (WebCore::HTMLTreeBuilder::processComment):
        (WebCore::HTMLTreeBuilder::processCharacter):
        (WebCore::HTMLTreeBuilder::insertPhoneNumberLink):
        (WebCore::HTMLTreeBuilder::processEndOfFile):
        (WebCore::HTMLTreeBuilder::defaultForBeforeHTML):
        (WebCore::HTMLTreeBuilder::defaultForBeforeHead):
        (WebCore::HTMLTreeBuilder::defaultForInHead):
        (WebCore::HTMLTreeBuilder::defaultForInHeadNoscript):
        (WebCore::HTMLTreeBuilder::defaultForAfterHead):
        (WebCore::HTMLTreeBuilder::processStartTagForInHead):
        (WebCore::HTMLTreeBuilder::processGenericRCDATAStartTag):
        (WebCore::HTMLTreeBuilder::processGenericRawTextStartTag):
        (WebCore::HTMLTreeBuilder::processScriptStartTag):
        (WebCore::HTMLTreeBuilder::shouldProcessTokenInForeignContent):
        (WebCore::hasAttribute):
        (WebCore::HTMLTreeBuilder::processTokenInForeignContent):
        (WebCore::HTMLTreeBuilder::parseError):
        * html/parser/HTMLTreeBuilder.h:
        * html/parser/TextDocumentParser.cpp:
        (WebCore::TextDocumentParser::insertFakePreElement):

2021-07-22  Yusuke Suzuki  <ysuzuki@apple.com>

        Micro-optimize innerHTML
        https://bugs.webkit.org/show_bug.cgi?id=228142

        Reviewed by Simon Fraser.

        No behavior change.

        This patch does some micro optimizations revealed by the profiler when running some of Speedometer2 tests which intensively use innerHTML.
        This offers improvement in jQuery-TodoMVC and Vanilla-ES2015-Babel-Webpack-TodoMVC since both are super innerHTML heavy benchmarks.

        ----------------------------------------------------------------------------------------------------------------------------------
        |               subtest                |     ms      |     ms      |  b / a   | pValue (significance using False Discovery Rate) |
        ----------------------------------------------------------------------------------------------------------------------------------
        | Elm-TodoMVC                          |126.862500   |126.687500   |0.998621  | 0.673462                                         |
        | VueJS-TodoMVC                        |27.775000    |27.645833    |0.995350  | 0.741588                                         |
        | EmberJS-TodoMVC                      |129.350000   |129.129167   |0.998293  | 0.624196                                         |
        | BackboneJS-TodoMVC                   |51.129167    |51.204167    |1.001467  | 0.716622                                         |
        | Preact-TodoMVC                       |21.870833    |21.337500    |0.975614  | 0.217771                                         |
        | AngularJS-TodoMVC                    |139.854167   |140.266667   |1.002950  | 0.489838                                         |
        | Vanilla-ES2015-TodoMVC               |69.229167    |68.895833    |0.995185  | 0.238772                                         |
        | Inferno-TodoMVC                      |68.391667    |68.266667    |0.998172  | 0.762281                                         |
        | Flight-TodoMVC                       |77.979167    |78.166667    |1.002404  | 0.710324                                         |
        | Angular2-TypeScript-TodoMVC          |39.741667    |39.966667    |1.005662  | 0.524123                                         |
        | VanillaJS-TodoMVC                    |55.416667    |55.512500    |1.001729  | 0.781447                                         |
        | jQuery-TodoMVC                       |268.812500   |266.966667   |0.993133  | 0.003384 (significant)                           |
        | EmberJS-Debug-TodoMVC                |345.383333   |345.662500   |1.000808  | 0.695259                                         |
        | React-TodoMVC                        |90.679167    |90.179167    |0.994486  | 0.067477                                         |
        | React-Redux-TodoMVC                  |152.691667   |152.687500   |0.999973  | 0.991207                                         |
        | Vanilla-ES2015-Babel-Webpack-TodoMVC |66.487500    |65.729167    |0.988594  | 0.000118 (significant)                           |
        ----------------------------------------------------------------------------------------------------------------------------------


        a mean = 242.12319
        b mean = 242.80485
        pValue = 0.1992654128
        (Bigger means are better.)
        1.003 times better
        Results ARE NOT significant

        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::insertTextNode):
        * html/parser/HTMLConstructionSite.h:
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::pumpTokenizerLoop): We do not need to call `shrinkToBestFit` in fragment parsing case since
        we will discard HTMLToken soon.
        * html/parser/HTMLMetaCharsetParser.cpp:
        (WebCore::HTMLMetaCharsetParser::checkForMetaCharset):
        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::HTMLPreloadScanner::scan):
        * html/parser/HTMLToken.h:
        (WebCore::HTMLToken::clear): We found that these `clear` calls cause performance problem according to the Instruments: we
        repeatedly use this Vector, and we repeatedly allocate and deallocate this Vector unnecessarily. We use `resize(0)` instead
        to avoid this allocation and deallocation.
        (WebCore::HTMLToken::shrinkToBestFit): But HTMLToken is kept so long, so at some point, we would like to make backing storage
        small. So, we add shrinkToBestFit and we call it only after finishing batching of HTMLToken processing.
        (WebCore::HTMLToken::beginStartTag):
        (WebCore::HTMLToken::beginEndTag):
        * html/parser/HTMLTokenizer.h:
        (WebCore::HTMLTokenizer::shrinkToBestFit):
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::ExternalCharacterTokenBuffer::characterPredicate):
        (WebCore::HTMLTreeBuilder::insertPhoneNumberLink):
        (WebCore::HTMLTreeBuilder::linkifyPhoneNumbers):
        (WebCore::HTMLTreeBuilder::processCharacterBuffer):
        (WebCore::HTMLTreeBuilder::processCharacterBufferForInBody):
        (WebCore::HTMLTreeBuilder::defaultForInTableText):
        (WebCore::HTMLTreeBuilder::processTokenInForeignContent):
        (WebCore::HTMLTreeBuilder::processFakeCharacters): Deleted. It is dead code before this patch.
        * html/parser/HTMLTreeBuilder.h:

2021-07-22  Wenson Hsieh  <wenson_hsieh@apple.com>

        Rename EventHandler::m_textRecognitionHoverTimerFired()
        https://bugs.webkit.org/show_bug.cgi?id=228183
        rdar://78933684

        Reviewed by Tim Horton.

        When upstreaming support for Live Text in WebKit, I accidentally renamed the method
        `imageExtractionTimerFired()` to `m_textRecognitionHoverTimerFired()`.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::EventHandler):
        (WebCore::EventHandler::textRecognitionHoverTimerFired):
        (WebCore::EventHandler::m_textRecognitionHoverTimerFired): Deleted.
        * page/EventHandler.h:

2021-07-22  Alex Christensen  <achristensen@webkit.org>

        XHR.send(Document) should replace mismatched surrogates with replacement character before sending
        https://bugs.webkit.org/show_bug.cgi?id=228170

        Reviewed by Chris Dumez.

        This matches the behavior of Chrome and Firefox.
        Covered by a newly passing WPT test.

        * bindings/js/JSDOMConvertStrings.cpp:
        (WebCore::identifierToUSVString):
        (WebCore::valueToUSVString):
        (WebCore::stringToUSVString): Deleted.
        * bindings/js/JSDOMConvertStrings.h:
        * css/parser/CSSTokenizer.cpp:
        (WebCore::preprocessString):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::send):

2021-07-22  Víctor Manuel Jáquez Leal  <vjaquez@igalia.com>

        Compilation error with gcc version 9.3.0 (Buildroot 2020.08-14-ge5a2a90)
        https://bugs.webkit.org/show_bug.cgi?id=228184

        Reviewed by Chris Dumez.

        Turn destructors into virtual ones for RTCRtpReceiver and RTCRtpSender.

        It seems that gcc doesn't create a virtual table for these classes, while clang does. That
        would the cause, when compiling clang, ImplementationLacksVTable is not needed in the IDL
        file. The approach for this fix to force the virtual table creation by turning destructors
        into virtual.

        No new tests needed.

        * Modules/mediastream/RTCRtpReceiver.h:
        * Modules/mediastream/RTCRtpSender.h:

2021-07-22  Megan Gardner  <megan_gardner@apple.com>

        Avoid Quick Note overlay when scrolling to show a highlight
        https://bugs.webkit.org/show_bug.cgi?id=228172

        Reviewed by Wenson Hsieh and Tim Horton.

        When scrolling to show the selected highlight after clicking on one in the QuickNote overlay,
        make sure to avoid the Quick Note overlay, so that the user can actually see the highlight. 
        This required calculating more information about the selection rect for iOS, and also piping through
        information to have the selection rect be the entire rect, rather that just the caret and the end of selection.

        * Modules/highlight/AppHighlightStorage.cpp:
        (WebCore::AppHighlightStorage::attemptToRestoreHighlightAndScroll):
        * editing/Editor.cpp:
        (WebCore::TemporarySelectionChange::setSelection):
        * editing/Editor.h:
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::setSelection):
        (WebCore::FrameSelection::updateAndRevealSelection):
        (WebCore::FrameSelection::selectionBounds const):
        * editing/FrameSelection.h:

2021-07-22  Sihui Liu  <sihui_liu@apple.com>

        [macOS Debug] Layout Test imported/w3c/web-platform-tests/IndexedDB/open-request-queue.html is a flaky timeout.
        https://bugs.webkit.org/show_bug.cgi?id=172044

        Reviewed by Chris Dumez.

        We used to start handling delete request when there is still open request in flight. We should start a request
        after previous requests are done, to match spec (https://www.w3.org/TR/IndexedDB/#delete-a-database) and other 
        browsers' behavior.

        Updated and rebaselined existing tests.

        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::handleDatabaseOperations):
        (WebCore::IDBServer::UniqueIDBDatabase::startVersionChangeTransaction):

2021-07-22  Alan Bujtas  <zalan@apple.com>

        REGRESSION(r269745) Google Developers maps does not fully load
        https://bugs.webkit.org/show_bug.cgi?id=228182
        <rdar://79787819>

        Reviewed by Antti Koivisto.

        IFC integration does not support cases when the inline level element stretches as the containing block size changes.
        This should include both percent and calc width/height values.

        Test: fast/inline/incorrect-sizing-with-calc.html

        * layout/integration/LayoutIntegrationCoverage.cpp:
        (WebCore::LayoutIntegration::canUseForChild):

2021-07-22  Frédéric Wang  <fwang@igalia.com>

        nullptr crash in ApplyStyleCommand::applyRelativeFontStyleChange
        https://bugs.webkit.org/show_bug.cgi?id=223974

        Reviewed by Darin Adler.

        WebCore::documentOrder does not handle well elements like <summary> that contains a
        shadow substree. This is causing assertion failures in debug build when setting start/end
        selection and nullptr crashes in release build when trying to browse selection between these
        start and end nodes. This patch fixes that issue by switching to shadow including tree order
        for these particular cases. It introduces a generic treeOrder<TreeType>(a, b) function that
        can be used for TreeType = ShadowIncludingTree as well as by WebCore::documentOrder.

        * dom/Node.cpp: Explicitly instantiate commonInclusiveAncestor<ShadowIncludingTree> so that it can be used
        by WebCore::treeOrder.
        * dom/Position.cpp: Explicitly instantiate templates.
        (WebCore::treeOrder): Convert documentOrder to a template parametrized by TreeType.
        (WebCore::documentOrder): Implement it with treeOrder<ComposedTree>.
        * dom/Position.h: Delcare new template.
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::updateStartEnd): Use treeOrder<ShadowIncludingTree>.
        (WebCore::ApplyStyleCommand::removeInlineStyle): Ditto.
        * editing/VisiblePosition.cpp:
        (WebCore::documentOrder): Use treeOrder<ShadowIncludingTree>.
        * editing/VisibleSelection.cpp:
        (WebCore::VisibleSelection::setBaseAndExtentToDeepEquivalents): Use treeOrder<ShadowIncludingTree>.
        (WebCore::VisibleSelection::setWithoutValidation): Ditto.

2021-07-22  Martin Robinson  <mrobinson@webkit.org>

        [css-scroll-snap] Pass the full target point when selecting a snap offset
        https://bugs.webkit.org/show_bug.cgi?id=228023

        Reviewed by Frédéric Wang.

        Pass the full proposed destination scroll offset when calling closestSnapOffset. For
        now, only the component in the scroll direction is used, but eventually the other
        component will be used to avoid snapping to snap areas that are entirely off the screen.

        No new tests. This change is simply a refactor in preparation for a behavior
        change and shouldn't change behavior itself.

        * page/scrolling/ScrollSnapOffsetsInfo.cpp:
        (WebCore::closestSnapOffsetWithInfoAndAxis):
        (WebCore::LayoutScrollSnapOffsetsInfo::closestSnapOffset const):
        (WebCore::FloatScrollSnapOffsetsInfo::closestSnapOffset const):
        * page/scrolling/ScrollSnapOffsetsInfo.h:
        * page/scrolling/nicosia/ScrollingTreeScrollingNodeDelegateNicosia.cpp:
        (WebCore::ScrollingTreeScrollingNodeDelegateNicosia::handleWheelEvent):
        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::scroll):
        (WebCore::ScrollAnimator::adjustScrollOffsetForSnappingIfNeeded):
        * platform/ScrollAnimator.h:
        * platform/ScrollController.cpp:
        (WebCore::ScrollController::setNearestScrollSnapIndexForAxisAndOffset):
        (WebCore::ScrollController::adjustScrollDestination):
        (WebCore::ScrollController::updateActiveScrollSnapIndexForClientOffset):
        (WebCore::ScrollController::resnapAfterLayout):
        * platform/ScrollController.h:
        * platform/ScrollSnapAnimatorState.cpp:
        (WebCore::ScrollSnapAnimatorState::setupAnimationForState):
        (WebCore::ScrollSnapAnimatorState::targetOffsetForStartOffset const):
        * platform/ScrollSnapAnimatorState.h:
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::doPostThumbMoveSnapping):

2021-07-21  Alex Christensen  <achristensen@webkit.org>

        Add linkedOnOrAfter check for r269162
        https://bugs.webkit.org/show_bug.cgi?id=228154
        <rdar://78575888>

        Reviewed by Geoffrey Garen.

        That revision broke some programs, but only on macOS.
        On iOS, we needed SecKeyProxy and WKNavigationDelegate to get client certificates to send.
        Add a linkedOnOrAfter check until they update to use WKNavigationDelegate instead of default keychain behavior.

        * platform/cocoa/VersionChecks.h:

2021-07-21  Miguel Gomez  <magomez@igalia.com>

        [GTK][WPE] Allow the user to configure the MemoryPressureHandler inside the web process
        https://bugs.webkit.org/show_bug.cgi?id=222738

        Reviewed by Carlos Garcia Campos.

        MemoryPressureHandler::currentMemoryUsagePolicy() is now an instance method and not a class one,
        so update the call in RenderLayerCompositor to use the singleton instance.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateCompositingPolicy):

2021-07-21  Chris Dumez  <cdumez@apple.com>

        Unreviewed, reverting r280129.

        Broke the internal Monterey build bots

        Reverted changeset:

        "GetIdentifierStringForPreferredVoiceInListWithLocale() is
        deprecated in Monterey"
        https://bugs.webkit.org/show_bug.cgi?id=228066
        https://commits.webkit.org/r280129

2021-07-01  Sergio Villar Senin  <svillar@igalia.com>

        Missing layouts when using simplified layout with OOF positioned elements
        https://bugs.webkit.org/show_bug.cgi?id=226008

        Reviewed by Alan Bujtas.

        There are some situations that allow us to do simplified layouts like when there is a positioned child
        that needs to be laid out and neither the parent nor any other normal children needs it. In those cases
        we just pick the list of positioned objects and invoke layoutPositionedObjects(). However that list
        might not be properly updated since it's only done during the layout in RenderBlock::layoutBlockChildren().

        This is causing that we miss layouts in cases where a renderer has the posChildNeedsLayout() bit set
        (due to some style change for example) but no descendants in the positionedDescendantsMap() because
        it has not been laid out yet. In those cases we simply bail out the simplified layout and proceed as in
        the normal layout process.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::simplifiedLayout):

2021-07-21  David Kilzer  <ddkilzer@apple.com>

        GetIdentifierStringForPreferredVoiceInListWithLocale() is deprecated in Monterey
        <https://webkit.org/b/228066>
        <rdar://problem/80577312>

        Reviewed by Alexey Proskuryakov.

        * platform/mac/PlatformSpeechSynthesizerMac.mm:
        (WebCore::speechSynthesisGetDefaultVoiceIdentifierForLocale):
        - Switch to use
          CopyIdentifierStringForPreferredVoiceInListWithLocale()
          in Monterey.
        - Change to return RetainPtr<> to handle lifetime of
          object returned from new function.
        (WebCore::PlatformSpeechSynthesizer::initializeVoiceList):
        - Change varible type to 'auto' since return type of
          speechSynthesisGetDefaultVoiceIdentifierForLocale()
          changed.

2021-07-20  Myles C. Maxfield  <mmaxfield@apple.com>

        r280103 is not necessary on all operating systems
        https://bugs.webkit.org/show_bug.cgi?id=228136

        Reviewed by Alan Bujtas.

        r280103 is not necessary on all operating systems.

        No new tests because there is no behavior change.

        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::applyFontTransforms):

2021-07-20  Said Abou-Hallawa  <said@apple.com>

        Make the 'targetElement' argument of the SVG animators to be a reference
        https://bugs.webkit.org/show_bug.cgi?id=228132

        Reviewed by Simon Fraser.

        It is clear that many SVG animators functions assume the argument
        'targetElement' is not nullptr. Also the caller SVGAnimateElementBase
        makes sure its targetElement() is not nullptr before calling any of its
        animator's functions.

        * svg/SVGAnimateElementBase.cpp:
        (WebCore::SVGAnimateElementBase::setTargetElement):
        (WebCore::SVGAnimateElementBase::calculateFromAndToValues):
        (WebCore::SVGAnimateElementBase::calculateFromAndByValues):
        (WebCore::SVGAnimateElementBase::startAnimation):
        (WebCore::SVGAnimateElementBase::calculateAnimatedValue):
        (WebCore::SVGAnimateElementBase::applyResultsToTarget):
        (WebCore::SVGAnimateElementBase::stopAnimation):
        (WebCore::SVGAnimateElementBase::calculateDistance):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::commitPropertyChange):
        * svg/properties/SVGAnimatedPropertyAnimator.h:
        * svg/properties/SVGAnimatedPropertyAnimatorImpl.h:
        * svg/properties/SVGAnimatedPropertyPairAnimator.h:
        * svg/properties/SVGAnimatedPropertyPairAnimatorImpl.h:
        * svg/properties/SVGAnimationAdditiveFunction.h:
        * svg/properties/SVGAnimationAdditiveListFunctionImpl.h:
        (WebCore::SVGAnimationLengthListFunction::animate):
        (WebCore::SVGAnimationNumberListFunction::animate):
        (WebCore::SVGAnimationPointListFunction::animate):
        (WebCore::SVGAnimationTransformListFunction::animate):
        * svg/properties/SVGAnimationAdditiveValueFunctionImpl.cpp:
        (WebCore::SVGAnimationColorFunction::colorFromString):
        (WebCore::SVGAnimationIntegerFunction::calculateDistance const):
        * svg/properties/SVGAnimationAdditiveValueFunctionImpl.h:
        (WebCore::SVGAnimationAngleFunction::animate):
        (WebCore::SVGAnimationColorFunction::animate):
        (WebCore::SVGAnimationLengthFunction::animate):
        (WebCore::SVGAnimationNumberFunction::animate):
        (WebCore::SVGAnimationPathSegListFunction::animate):
        (WebCore::SVGAnimationRectFunction::animate):
        * svg/properties/SVGAnimationDiscreteFunction.h:
        (WebCore::SVGAnimationDiscreteFunction::animate):
        * svg/properties/SVGAnimationDiscreteFunctionImpl.h:
        * svg/properties/SVGAnimationFunction.h:
        (WebCore::SVGAnimationFunction::calculateDistance const):
        (WebCore::SVGAnimationFunction::addFromAndToValues):
        * svg/properties/SVGAttributeAnimator.cpp:
        (WebCore::SVGAttributeAnimator::isAnimatedStylePropertyAniamtor const):
        (WebCore::SVGAttributeAnimator::invalidateStyle):
        (WebCore::SVGAttributeAnimator::applyAnimatedStylePropertyChange):
        (WebCore::SVGAttributeAnimator::removeAnimatedStyleProperty):
        (WebCore::SVGAttributeAnimator::applyAnimatedPropertyChange):
        * svg/properties/SVGAttributeAnimator.h:
        (WebCore::SVGAttributeAnimator::setFromAndToValues):
        (WebCore::SVGAttributeAnimator::setFromAndByValues):
        (WebCore::SVGAttributeAnimator::calculateDistance const):
        * svg/properties/SVGPrimitivePropertyAnimator.h:
        * svg/properties/SVGPropertyAnimator.h:
        (WebCore::SVGPropertyAnimator::adjustForInheritance const):
        (WebCore::SVGPropertyAnimator::computeInheritedCSSPropertyValue const):

        * svg/properties/SVGPropertyOwnerRegistry.h:
        * svg/properties/SVGPropertyRegistry.h:
        Fix a typo in the name of setAnimatedPropertyDirty().

        * svg/properties/SVGValuePropertyAnimator.h:
        * svg/properties/SVGValuePropertyAnimatorImpl.h:
        * svg/properties/SVGValuePropertyListAnimator.h:
        * svg/properties/SVGValuePropertyListAnimatorImpl.h:

2021-07-20  Alan Bujtas  <zalan@apple.com>

        Revert r272370: It delays first paint
        https://bugs.webkit.org/show_bug.cgi?id=228121
        <rdar://75362363>

        Reviewed by Antti Koivisto.

        r272370 breaks the cases when the rendering update is initiated when the layer tree is still frozen (circular dependency: visually empty check vs. rendering update)

        * dom/Document.cpp:
        (WebCore::Document::didInsertInDocumentShadowRoot):
        * dom/Element.cpp:
        (WebCore::Element::isVisibleWithoutResolvingFullStyle const):
        * style/StyleScope.cpp:
        (WebCore::Style::Scope::Scope):
        (WebCore::Style::Scope::flushPendingSelfUpdate):
        (WebCore::Style::Scope::clearPendingUpdate):
        (WebCore::Style::Scope::scheduleUpdate):
        (WebCore::Style::Scope::pendingUpdateTimerFired):
        (WebCore::Style::Scope::insertedInDocument): Deleted.
        * style/StyleScope.h:

2021-07-20  Myles C. Maxfield  <mmaxfield@apple.com>

        REGRESSION(r272379): Characters with no fonts that support them are drawn as two .notdef glyphs in the fast text codepath
        https://bugs.webkit.org/show_bug.cgi?id=228097
        <rdar://problem/80798113>

        Reviewed by Alan Bujtas.

        If a character is not in BMP, and we don't have a glyph for it,
        we'll end up with two 0 glyphs in a row for the two surrogates of the character.
        We need to make sure that, after shaping, these double-0-glyphs aren't preserved.

        Test: fast/text/double-notdef-simple-text-codepath.html

        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::applyFontTransforms):

2021-07-20  Myles C. Maxfield  <mmaxfield@apple.com>

        Use references instead of pointers in WidthIterator::advanceInternal()
        https://bugs.webkit.org/show_bug.cgi?id=228099

        Reviewed by Fujii Hironori.

        We assert that font is non-null, so we should be able to use a reference for it instead of a pointer.

        No new tests because there is no behavior change.

        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::advanceInternal):

2021-07-20  Fujii Hironori  <Hironori.Fujii@sony.com>

        Use WeakHashSet for Page::m_activityStateChangeObservers
        https://bugs.webkit.org/show_bug.cgi?id=228065

        Reviewed by Chris Dumez.

        * page/ActivityStateChangeObserver.h: Inherit CanMakeWeakPtr.
        * page/Page.cpp:
        (WebCore::Page::addActivityStateChangeObserver):
        (WebCore::Page::removeActivityStateChangeObserver):
        (WebCore::Page::setActivityState):
        * page/Page.h:

2021-07-20  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r278062): Misplaced text in Wikipedia search field
        https://bugs.webkit.org/show_bug.cgi?id=228098
        <rdar://problem/80495165>

        Reviewed by Simon Fraser.

        New test: GraphicsContextTests.DrawNativeImageDoesNotLeakCompositeOperator

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::setCGCompositeOperator):
        (WebCore::GraphicsContextCG::drawNativeImage):
        drawNativeImage uses CGContextStateSaver (not GraphicsContextStateSaver),
        so any state changes it made must only be made to the CGContext, not
        the WebCore::GraphicsContext.

        However, r278062 mistakenly swapped setPlatformCompositeOperation out for
        GraphicsContext::setCompositeOperation(), which mutates the state of
        *both* contexts, and then (only sometimes!) depends on the state saver
        to reset the state (but, of course, as mentioned, it only resets
        the CGContext's state).

        (WebCore::GraphicsContextCG::updateState):

2021-07-20  Said Abou-Hallawa  <said@apple.com>

        Make SVGPropertyAnimator::computeCSSPropertyValue() take a reference to SVGElement
        https://bugs.webkit.org/show_bug.cgi?id=228093
        <rdar://80789262>

        Reviewed by Simon Fraser.

        The assumption is the pointer 'targetElement' can't be nullptr. So make
        it a reference instead.

        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::computeCSSPropertyValue): Deleted.
        (WebCore::inheritsFromProperty): Deleted.
        (WebCore::SVGAnimationElement::determinePropertyValueTypes): Deleted.
        * svg/SVGAnimationElement.h:
        Delete unused methods from SVGAnimationElement.

        * svg/properties/SVGPrimitivePropertyAnimator.h:
        * svg/properties/SVGPropertyAnimator.h:
        (WebCore::SVGPropertyAnimator::computeCSSPropertyValue const):
        (WebCore::SVGPropertyAnimator::computeInheritedCSSPropertyValue const):
        * svg/properties/SVGValuePropertyAnimatorImpl.h:
        * svg/properties/SVGValuePropertyListAnimatorImpl.h:

2021-07-20  Chris Dumez  <cdumez@apple.com>

        REGRESSION (r278702): Cannot login to appaloosa-store.com/users/sign_in
        https://bugs.webkit.org/show_bug.cgi?id=228096
        <rdar://80596391>

        Reviewed by Alex Christensen.

        r278702 added an optimization to FetchBodyConsumer::takeAsBlob() to avoid a copy of the data.
        What I didn't realized when I wrote this optimization is that FetchBodyConsumer is copy-constructible
        and its copy constructor gets called when calling FetchResponse.clone(). The copy constructor only
        does a shallow-copy of its internal buffer so several FetchResponse objects can end up with their
        FetchBodyConsumer using the same underlying SharedBuffer object. When that SharedBuffer is shared,
        calling takeData() on it is unacceptable as it will disturb the body of other Fetch responses.

        To address the issue, we now only call SharedBuffer::takeData() and avoid the copy when the
        SharedBuffer has a RefCount of 1, meaning that is it not actually shared. In the cases where it
        is shared, we copy the data, like we used to do before r278702.

        Test: http/tests/fetch/response-clone-blob.html

        * Modules/fetch/FetchBodyConsumer.cpp:
        (WebCore::FetchBodyConsumer::takeAsBlob):

2021-07-20  Chris Lord  <clord@igalia.com>

        Canvas and OffscreenCanvas getContext should check if argument is an object before trying to convert it to a dictionary
        https://bugs.webkit.org/show_bug.cgi?id=227792

        Reviewed by Sam Weinig.

        Check if options argument is an object before converting to a dictionary.

        Tests: imported/w3c/web-platform-tests/html/canvas/offscreen/the-offscreen-canvas/2d-getcontext-options.any.html
               imported/w3c/web-platform-tests/html/canvas/offscreen/the-offscreen-canvas/2d-getcontext-options.any.worker.html
               imported/w3c/web-platform-tests/html/canvas/offscreen/the-offscreen-canvas/2d.getcontext.extraargs.cache.html
               imported/w3c/web-platform-tests/html/canvas/offscreen/the-offscreen-canvas/2d.getcontext.extraargs.cache.worker.html
               imported/w3c/web-platform-tests/html/canvas/offscreen/the-offscreen-canvas/2d.getcontext.extraargs.create.html
               imported/w3c/web-platform-tests/html/canvas/offscreen/the-offscreen-canvas/2d.getcontext.extraargs.create.worker.html
               imported/w3c/web-platform-tests/html/semantics/embedded-content/the-canvas-element/2d-getcontext-options.html
               imported/w3c/web-platform-tests/html/semantics/embedded-content/the-canvas-element/2d.getcontext.extraargs.cache.html
               imported/w3c/web-platform-tests/html/semantics/embedded-content/the-canvas-element/2d.getcontext.extraargs.create.html

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext):
        * html/OffscreenCanvas.cpp:
        (WebCore::OffscreenCanvas::getContext):

2021-07-20  Alex Christensen  <achristensen@webkit.org>

        Protect m_data when iterating in CachedRawResource::didAddClient
        https://bugs.webkit.org/show_bug.cgi?id=228108
        <rdar://80716674>

        Reviewed by Chris Dumez.

        I think something is destroying m_data when its segments are being iterated.
        Protect it so it doesn't get destroyed.
        Also, to be on the safe side, check that the client is still a client before using it.

        * loader/cache/CachedRawResource.cpp:
        (WebCore::CachedRawResource::didAddClient):

2021-07-20  Sam Sneddon  <gsnedders@apple.com>

        Change referrer-policy default to strict-origin-when-cross-origin
        https://bugs.webkit.org/show_bug.cgi?id=218909

        Reviewed by Chris Dumez.

        This matches the behavior of other browsers.
        Covered by existing tests and web platform tests we haven't imported yet.

        * dom/Document.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::effectiveReferrerPolicy const):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestResource):
        * platform/ReferrerPolicy.cpp:
        (WebCore::parseReferrerPolicyToken):
        * platform/ReferrerPolicy.h:

2021-07-20  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Switch raw GstStructure pointers to GUniquePtr
        https://bugs.webkit.org/show_bug.cgi?id=228106

        Reviewed by Xabier Rodriguez-Calvar.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::~MediaPlayerPrivateGStreamer):
        (WebCore::MediaPlayerPrivateGStreamer::setAudioStreamProperties):
        (WebCore::MediaPlayerPrivateGStreamer::mediaLocationChanged):
        (WebCore::MediaPlayerPrivateGStreamer::loadNextLocation):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:

2021-07-20  Ziran Sun  <zsun@igalia.com>

        Images as grid items should use the overridingLogicalWidth when defined to compute the logical Height
        https://bugs.webkit.org/show_bug.cgi?id=228022

        Reviewed by Javier Fernandez.

        When computing the logical height using an intrinsic aspect ratio, RenderReplaced should use the
        overridingLogicalWidth whenever defined just as how it does for flex items. This change is to
        replace the use of intrinsic (non-stretched) logical width in current code with the overridingLogicalWidth.

        The current code doesn't set overringLogicalWidth while the width changes while stretches along Row Axis.
        This change adds the logic in.
                
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::applyStretchAlignmentToChildIfNeeded):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::computeReplacedLogicalHeight const):

2021-07-20  Rob Buis  <rbuis@igalia.com>

        Fix grid aspect-ratio tests
        https://bugs.webkit.org/show_bug.cgi?id=225860

        Reviewed by Javier Fernandez.

        Fix various combinations of implicit/explicit stretching in inline and
        block directions as tested by grid-aspect-ratio-028.html until
        grid-aspect-ratio-038.html and as specified [1, 2].
        Also treat explicit stretching through justify-items/align-items: stretch
        like justify-self/align-self: stretch.

        [1] https://drafts.csswg.org/css-grid/#grid-item-sizing
        [2] //drafts.csswg.org/css-sizing-4/#aspect-ratio

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::hasStretchedLogicalWidth const):
        (WebCore::RenderBox::shouldComputeLogicalWidthFromAspectRatio const):
        * rendering/RenderBox.h:
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::selfAlignmentForChild const):
        (WebCore::RenderGrid::alignSelfForChild const):
        (WebCore::RenderGrid::justifySelfForChild const):
        (WebCore::RenderGrid::aspectRatioPrefersInline):
        (WebCore::RenderGrid::applyStretchAlignmentToChildIfNeeded):
        (WebCore::RenderGrid::hasAutoSizeInColumnAxis const):
        (WebCore::RenderGrid::hasAutoSizeInRowAxis const):
        * rendering/RenderGrid.h:

2021-07-19  Sihui Liu  <sihui_liu@apple.com>

        Implement IDBTransaction.commit()
        https://bugs.webkit.org/show_bug.cgi?id=227815
        <rdar://problem/80651270>

        Reviewed by Brady Eidson.

        Spec: https://www.w3.org/TR/IndexedDB/#dom-idbtransaction-commit

        Commit request for IDBTransaction is created automatically after all its requests are completed and success 
        events of those requests are fired. IDBTransaction.commit() lets client create commit request, without waiting
        for the result of requests, so the commit can happen sooner. 

        In our implementation, if pending requests before the commit request are completed successfully, commit request 
        will be executed directly in the backend and dose not affect by things happening in request event handler. If 
        some pending request before the commit request has error, the commit request will be treated as abort request, 
        as commit() means no client operation, including error handling, should happen after it.

        Rebaselined existing tests.

        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::didStartTransaction):
        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::dispatchEvent):
        (WebCore::IDBRequest::willAbortTransactionAfterDispatchingEvent const): 
        * Modules/indexeddb/IDBRequest.h:
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::abortDueToFailedRequest):
        (WebCore::IDBTransaction::abort):
        (WebCore::IDBTransaction::abortInternal):
        (WebCore::IDBTransaction::stop):
        (WebCore::IDBTransaction::handleOperationsCompletedOnServer):
        (WebCore::IDBTransaction::commit): If commit() is called in event handler for error event, and the error is 
        handled before the call, we will create a commit requet. Otherwise, it is ignored as transaction will abort
        due to the error.
        (WebCore::IDBTransaction::commitInternal):
        (WebCore::IDBTransaction::commitOnServer):
        (WebCore::IDBTransaction::didCommit): didCommit used to be called after all requests are done and events are 
        fired. As commit request can now be handled and replied before other requests, we need to make sure complete 
        event of transaction is fired after success event of requests, by tracking completion of the last request before 
        commit request.
        (WebCore::IDBTransaction::operationCompletedOnClient):
        (WebCore::IDBTransaction::autoCommit):
        (WebCore::IDBTransaction::internalAbort): Deleted.
        * Modules/indexeddb/IDBTransaction.h:
        * Modules/indexeddb/IDBTransaction.idl:
        * Modules/indexeddb/client/IDBConnectionProxy.cpp:
        (WebCore::IDBClient::IDBConnectionProxy::commitTransaction):
        * Modules/indexeddb/client/IDBConnectionProxy.h:
        * Modules/indexeddb/client/IDBConnectionToServer.cpp:
        (WebCore::IDBClient::IDBConnectionToServer::commitTransaction):
        * Modules/indexeddb/client/IDBConnectionToServer.h:
        * Modules/indexeddb/client/IDBConnectionToServerDelegate.h:
        * Modules/indexeddb/server/IDBServer.cpp:
        (WebCore::IDBServer::IDBServer::commitTransaction):
        * Modules/indexeddb/server/IDBServer.h:
        * Modules/indexeddb/server/UniqueIDBDatabaseTransaction.cpp:
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::commit):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::createObjectStore):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::deleteObjectStore):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::renameObjectStore):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::clearObjectStore):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::createIndex):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::deleteIndex):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::renameIndex):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::putOrAdd):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::getRecord):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::getAllRecords):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::getCount):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::deleteRecord):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::openCursor):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::iterateCursor):
        * Modules/indexeddb/server/UniqueIDBDatabaseTransaction.h:
        * loader/EmptyClients.cpp:

2021-07-19  Tim Nguyen  <ntim@apple.com>

        Port <dialog> close event to modern event handling code
        https://bugs.webkit.org/show_bug.cgi?id=227915

        Reviewed by Chris Dumez.

        * html/HTMLDialogElement.cpp:
        (WebCore::HTMLDialogElement::close):
        (WebCore::dialogCloseEventSender): Deleted.
        (WebCore::HTMLDialogElement::~HTMLDialogElement): Deleted.
        (WebCore::HTMLDialogElement::dispatchPendingEvent): Deleted.
        * html/HTMLDialogElement.h:

2021-07-19  Chris Dumez  <cdumez@apple.com>

        HTMLImageElement.decoding should reflect the decoding content attribute, limited to only known values
        https://bugs.webkit.org/show_bug.cgi?id=228081

        Reviewed by Alex Christensen.

        HTMLImageElement.decoding should reflect the decoding content attribute, limited to only known values.
        We were missing the *limited to only known values* logic:
        - https://html.spec.whatwg.org/multipage/embedded-content.html#dom-img-decoding

        This aligns our behavior with Firefox and Chrome.

        No new tests, rebaselined existing test.

        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::setDecoding):
        (WebCore::HTMLImageElement::decoding const):
        * html/HTMLImageElement.h:
        * html/HTMLImageElement.idl:

2021-07-19  Chris Dumez  <cdumez@apple.com>

        FetchResponse.formData() should not reject promise if the body is null and the MIME Type is "application/x-www-form-urlencoded"
        https://bugs.webkit.org/show_bug.cgi?id=228085

        Reviewed by Alex Christensen.

        FetchResponse.formData() should not reject promise if the body is null and the MIME Type is "application/x-www-form-urlencoded":
        - https://fetch.spec.whatwg.org/#concept-body-consume-body
        - https://fetch.spec.whatwg.org/#concept-body-package-data

        As per the specification, we should package an empty byte sequence in this case and resolve the promise with that.

        No new tests, rebaselined existing tests.

        * Modules/fetch/FetchBodyConsumer.cpp:
        (WebCore::FetchBodyConsumer::packageFormData):
        (WebCore::resolveWithTypeAndData):
        (WebCore::packageFormData): Deleted.
        * Modules/fetch/FetchBodyConsumer.h:
        * Modules/fetch/FetchBodyOwner.cpp:
        (WebCore::FetchBodyOwner::formData):

2021-07-19  Ziran Sun  <zsun@igalia.com>

        [css-grid] Images as grid items should use the overridingLogicalHeight when defined to compute the logical width
        https://bugs.webkit.org/show_bug.cgi?id=227984

        Reviewed by Javier Fernandez.

        As discussed in https://github.com/w3c/csswg-drafts/issues/5713, for images as grid items, when
        stretch alignment is only applied in one axis we should respect aspect-ratio on the other.
         
        When computing the logical width using an intrinsic aspect ratio, RenderReplaced should use the
        overridingLogicalHeight whenever defined just as how it does for flex items. This change is to
        replace the use of intrinsic (non-stretched) logical height in current code with the overridingLogicalHeight. 

        This allows us to pass an additional of 9 grid WPT tests.

        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::computeReplacedLogicalWidth const):

2021-07-19  Ziran Sun  <zsun@igalia.com>

        [css-grid] Use correct block-size to resolve min-content
        https://bugs.webkit.org/show_bug.cgi?id=227167

        Reviewed by Javier Fernandez.

        When the min/max depends on block-size, We need to make sure that min/max widths are set dirty for
        replaced element when block-size changes so that the correct block-size is used to get min/max widths.

        Test: imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-item-inline-contribution-001.html

        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::layout):

2021-07-19  Ziran Sun  <zsun@igalia.com>

        [CSS-grid] Ignore the aspect-ratio of a replaced element if stretch alignments are applied to both axes
        https://bugs.webkit.org/show_bug.cgi?id=227573

        Reviewed by Javier Fernandez.

        As discussed in https://github.com/w3c/csswg-drafts/issues/5713, for the replaced element as a grid item,
        when both axes have stretch alignments applied and there is no auto margin(s) presented, the aspect ratio
        should be ignored if there is any. 

        Part of this patch is an import of Chromium CL at
        https://chromium-review.googlesource.com/c/chromium/src/+/2651651

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::hasStretchedLogicalHeight const):
        (WebCore::RenderBox::shouldComputeLogicalWidthFromAspectRatio const):
        * rendering/RenderBox.h:

2021-07-18  Sam Weinig  <weinig@apple.com>

        Fix canvas overflow checking to use CheckedArithmatic rather than adhoc floating point mechanism
        https://bugs.webkit.org/show_bug.cgi?id=228058

        Reviewed by Dean Jackson.

        We have CheckedArithmatic just for this case. Use it.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::shouldAccelerate const):
        (WebCore::HTMLCanvasElement::createImageBuffer const):
        * html/HTMLCanvasElement.h:

2021-07-18  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] [AX] Keyboard text candidates don't update when changing selection using Switch Control
        https://bugs.webkit.org/show_bug.cgi?id=228051
        rdar://79944295

        Reviewed by Tim Horton.

        See WebKit ChangeLog for more details.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::setSelectedTextRange):
        (WebCore::AccessibilityRenderObject::setSelectedVisiblePositionRange const):

        Call the new EditorClient methods added below. Additionally, drive-by fix `setSelectedVisiblePositionRange` so
        that it also performs a user-triggered selection change in the case where the range is not collapsed; this
        matches the behavior of `setSelectedTextRange` as well.

        * page/EditorClient.h:
        (WebCore::EditorClient::willChangeSelectionForAccessibility):
        (WebCore::EditorClient::didChangeSelectionForAccessibility):

        Add new EditorClient hooks, `(will|did)ChangeSelectionForAccessibility`, that accessibility code can call before
        and after it triggers a selection change; we use these two codepaths above when using the "Previous/Next
        Character", "Previous/Next Word", and "Previous/Next Line" Switch Control menu actions.

2021-07-17  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Move InlineLevelBox class to its own file
        https://bugs.webkit.org/show_bug.cgi?id=228045

        Reviewed by Sam Weinig.

        LineBox class has grown a lot since the subclass of InlineLevelBox has been introduced.
        It is also in preparation for merging LineBox and LineBoxGeometry classes.

        * WebCore.xcodeproj/project.pbxproj:
        * layout/formattingContexts/inline/InlineFormattingGeometry.cpp:
        (WebCore::Layout::LineBoxBuilder::setVerticalGeometryForInlineBox const):
        (WebCore::Layout::LineBoxBuilder::constructAndAlignInlineLevelBoxes):
        (WebCore::Layout::LineBoxBuilder::computeLineBoxHeightAndAlignInlineLevelBoxesVertically):
        (WebCore::Layout::LineBoxBuilder::SimplifiedVerticalAlignment::SimplifiedVerticalAlignment):
        (WebCore::Layout::LineBoxBuilder::SimplifiedVerticalAlignment::canUseSimplifiedAlignment):
        (WebCore::Layout::LineBoxBuilder::SimplifiedVerticalAlignment::align):
        (WebCore::Layout::LineBoxBuilder::SimplifiedVerticalAlignment::adjust):
        (WebCore::Layout::InlineFormattingGeometry::inlineLevelBoxAffectsLineBox const):
        * layout/formattingContexts/inline/InlineFormattingGeometry.h:
        * layout/formattingContexts/inline/InlineFormattingQuirks.cpp:
        (WebCore::Layout::InlineFormattingQuirks::inlineLevelBoxAffectsLineBox const):
        * layout/formattingContexts/inline/InlineFormattingQuirks.h:
        * layout/formattingContexts/inline/InlineLevelBox.h: Added.
        (WebCore::Layout::InlineLevelBox::baseline const):
        (WebCore::Layout::InlineLevelBox::descent const):
        (WebCore::Layout::InlineLevelBox::LayoutBounds::height const):
        (WebCore::Layout::InlineLevelBox::LayoutBounds::operator== const):
        (WebCore::Layout::InlineLevelBox::layoutBounds const):
        (WebCore::Layout::InlineLevelBox::hasContent const):
        (WebCore::Layout::InlineLevelBox::verticalAlign const):
        (WebCore::Layout::InlineLevelBox::layoutBox const):
        (WebCore::Layout::InlineLevelBox::style const):
        (WebCore::Layout::InlineLevelBox::isInlineBox const):
        (WebCore::Layout::InlineLevelBox::isRootInlineBox const):
        (WebCore::Layout::InlineLevelBox::isAtomicInlineLevelBox const):
        (WebCore::Layout::InlineLevelBox::isLineBreakBox const):
        (WebCore::Layout::InlineLevelBox::type const):
        (WebCore::Layout::InlineLevelBox::logicalRect const):
        (WebCore::Layout::InlineLevelBox::logicalTop const):
        (WebCore::Layout::InlineLevelBox::logicalBottom const):
        (WebCore::Layout::InlineLevelBox::logicalLeft const):
        (WebCore::Layout::InlineLevelBox::logicalWidth const):
        (WebCore::Layout::InlineLevelBox::logicalHeight const):
        (WebCore::Layout::InlineLevelBox::setLogicalWidth):
        (WebCore::Layout::InlineLevelBox::setLogicalHeight):
        (WebCore::Layout::InlineLevelBox::setLogicalTop):
        (WebCore::Layout::InlineLevelBox::setBaseline):
        (WebCore::Layout::InlineLevelBox::setDescent):
        (WebCore::Layout::InlineLevelBox::setLayoutBounds):
        (WebCore::Layout::InlineLevelBox::InlineLevelBox):
        (WebCore::Layout::m_type):
        (WebCore::Layout::InlineLevelBox::setHasContent):
        (WebCore::Layout::InlineLevelBox::hasLineBoxRelativeAlignment const):
        (WebCore::Layout::InlineLevelBox::createAtomicInlineLevelBox):
        (WebCore::Layout::InlineLevelBox::createInlineBox):
        (WebCore::Layout::InlineLevelBox::createLineBreakBox):
        (WebCore::Layout::InlineLevelBox::createGenericInlineLevelBox):
        * layout/formattingContexts/inline/InlineLineBox.cpp:
        (WebCore::Layout::LineBox::InlineLevelBox::InlineLevelBox): Deleted.
        (WebCore::Layout::m_type): Deleted.
        (WebCore::Layout::LineBox::InlineLevelBox::setBaseline): Deleted.
        (WebCore::Layout::LineBox::InlineLevelBox::setDescent): Deleted.
        (WebCore::Layout::LineBox::InlineLevelBox::setLayoutBounds): Deleted.
        (WebCore::Layout::LineBox::InlineLevelBox::setLogicalTop): Deleted.
        (WebCore::Layout::LineBox::InlineLevelBox::setLogicalHeight): Deleted.
        (WebCore::Layout::LineBox::InlineLevelBox::setHasContent): Deleted.
        (WebCore::Layout::LineBox::InlineLevelBox::hasLineBoxRelativeAlignment const): Deleted.
        * layout/formattingContexts/inline/InlineLineBox.h:
        (WebCore::Layout::LineBox::InlineLevelBox::baseline const): Deleted.
        (WebCore::Layout::LineBox::InlineLevelBox::descent const): Deleted.
        (WebCore::Layout::LineBox::InlineLevelBox::LayoutBounds::height const): Deleted.
        (WebCore::Layout::LineBox::InlineLevelBox::LayoutBounds::operator== const): Deleted.
        (WebCore::Layout::LineBox::InlineLevelBox::layoutBounds const): Deleted.
        (WebCore::Layout::LineBox::InlineLevelBox::hasContent const): Deleted.
        (WebCore::Layout::LineBox::InlineLevelBox::verticalAlign const): Deleted.
        (WebCore::Layout::LineBox::InlineLevelBox::layoutBox const): Deleted.
        (WebCore::Layout::LineBox::InlineLevelBox::style const): Deleted.
        (WebCore::Layout::LineBox::InlineLevelBox::isInlineBox const): Deleted.
        (WebCore::Layout::LineBox::InlineLevelBox::isRootInlineBox const): Deleted.
        (WebCore::Layout::LineBox::InlineLevelBox::isAtomicInlineLevelBox const): Deleted.
        (WebCore::Layout::LineBox::InlineLevelBox::isLineBreakBox const): Deleted.
        (WebCore::Layout::LineBox::InlineLevelBox::type const): Deleted.
        (WebCore::Layout::LineBox::InlineLevelBox::logicalRect const): Deleted.
        (WebCore::Layout::LineBox::InlineLevelBox::logicalTop const): Deleted.
        (WebCore::Layout::LineBox::InlineLevelBox::logicalBottom const): Deleted.
        (WebCore::Layout::LineBox::InlineLevelBox::logicalLeft const): Deleted.
        (WebCore::Layout::LineBox::InlineLevelBox::logicalWidth const): Deleted.
        (WebCore::Layout::LineBox::InlineLevelBox::logicalHeight const): Deleted.
        (WebCore::Layout::LineBox::InlineLevelBox::setLogicalWidth): Deleted.
        (WebCore::Layout::LineBox::InlineLevelBox::createAtomicInlineLevelBox): Deleted.
        (WebCore::Layout::LineBox::InlineLevelBox::createInlineBox): Deleted.
        (WebCore::Layout::LineBox::InlineLevelBox::createLineBreakBox): Deleted.
        (WebCore::Layout::LineBox::InlineLevelBox::createGenericInlineLevelBox): Deleted.

2021-07-16  Simon Fraser  <simon.fraser@apple.com>

        getBoundingClientRect() returns the incorrect rectangle on elements whose parent element is set -webkit-column-count
        https://bugs.webkit.org/show_bug.cgi?id=99959
        rdar://80106111

        Reviewed by Alan Bujtas.
        
        getBoundingClientRect() and getClientRects() for elements inside multicol had a quick
        and dirty implementation that just mapped the element center point into a column. This
        resulted in odd, negative top/left in some cases.

        Fix by correctly generating multiple rects for elements that span columns, following
        the repaint code path that already knew how to do this correctly.
        
        The entry point is RenderFragmentContainer::absoluteQuadsForBox() which now has a
        real implementation. For each fragment that the box covers, it calls fragmentRectsForFlowContentRect()
        which generates one or more rects; RenderMultiColumnSet overrides this to
        compute rects for multicol.

        We have to take care not to eliminate empty rects, since the API does return these.

        Tested by existing tests.

        * dom/Element.cpp:
        (WebCore::Element::absoluteEventBounds):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::absoluteQuadsIgnoringContinuation const):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::absoluteQuads const):
        * rendering/RenderFragmentContainer.cpp:
        (WebCore::RenderFragmentContainer::fragmentedFlowContentRectangle):
        (WebCore::RenderFragmentContainer::fragmentRectsForFlowContentRect):
        * rendering/RenderFragmentContainer.h:
        (WebCore::RenderFragmentContainer::absoluteQuadsForBoxInFragment): Deleted.
        * rendering/RenderFragmentedFlow.cpp:
        (WebCore::RenderFragmentedFlow::absoluteQuadsForBox const):
        * rendering/RenderFragmentedFlow.h:
        * rendering/RenderMultiColumnFlow.h:
        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::firstAndLastColumnsFromOffsets const):
        (WebCore::RenderMultiColumnSet::repaintFragmentedFlowContent):
        (WebCore::RenderMultiColumnSet::fragmentRectsForFlowContentRect):
        (WebCore::RenderMultiColumnSet::collectLayerFragments):
        * rendering/RenderMultiColumnSet.h:

2021-07-16  Kate Cheney  <katherine_cheney@apple.com>

        WKWebView javascript injection doesn't work if app includes WKAppBoundDomains
        https://bugs.webkit.org/show_bug.cgi?id=227589
        <rdar://problem/80327452>

        Reviewed by Brent Fulgham.

        Update service worker code to always allow workers on localhost to be
        registered. Also add logic so localhost registrations aren't added
        to the total count of 3 registrations.

        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::addRegistration):
        We only want to increment the count if this registration is not
        already in the mapping, otherwise it gets double counted.

        (WebCore::SWServer::removeRegistration):
        Ditto for removing a registration, we should only decrement the count
        if we find a matching key.

        (WebCore::SWServer::validateRegistrationDomain):
        (WebCore::SWServer::removeFromScopeToRegistrationMap):
        Ditto.

        * workers/service/server/SWServer.h:

2021-07-16  Alex Christensen  <achristensen@webkit.org>

        Network access prevention SPI should prevent preconnecting, and it should first allow injected bundle to change request
        https://bugs.webkit.org/show_bug.cgi?id=228044
        <rdar://72995136>

        Reviewed by Tim Horton.

        WKWebViewConfiguration._loadsFromNetwork and its successor _allowedNetworkHosts have two issues:
        1. They allow link rel=preconnect to still preconnect to a host.  While this doesn't reveal much information, it does reveal some.
        2. It blocks loads before giving the injected bundle a chance to change the scheme of the request.  This SPI is relatively new and
           intended to replace the injected bundle, but the user from this radar needs to have an injected bundle make changes first.

        Both problems are fixed and covered by API tests.

        * loader/ResourceLoadNotifier.cpp:
        (WebCore::ResourceLoadNotifier::dispatchWillSendRequest):
        * page/Page.h:

2021-07-16  Myles C. Maxfield  <mmaxfield@apple.com>

        Fix Apple internal build

        Unreviewed.

        No new tests because there is no behavior change.

        * platform/mac/PlatformSpeechSynthesizerMac.mm:
        (WebCore::speechSynthesisGetDefaultVoiceIdentifierForLocale):

2021-07-16  Brady Eidson  <beidson@apple.com>

        FetchBodySource/FetchBodyOwner cleanup
        <rdar://80318044> and https://bugs.webkit.org/show_bug.cgi?id=228035

        Reviewed by Geoffrey Garen.

        FetchBodyOwner should have a WeakPtr factory, and FetchBodySource should use it.
        
        * Modules/fetch/FetchBodyOwner.h:
        * Modules/fetch/FetchBodySource.cpp:
        (WebCore::FetchBodySource::FetchBodySource):
        (WebCore::FetchBodySource::doCancel):
        (WebCore::FetchBodySource::close):
        * Modules/fetch/FetchBodySource.h:
        * Modules/fetch/FetchResponse.h:

2021-07-16  Alan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] Update the fragmented status of the renderer when it becomes in-flow
        https://bugs.webkit.org/show_bug.cgi?id=228025
        <rdar://80458138>

        Reviewed by Antti Koivisto.

        This patch ensures that we update fragmented status of the renderer when it becomes in-flow and not just when the containing block's childrenInline status needs updating.
        (e.g. the block renderer goes from out-of-flow to in-flow, and the containing block already has block level children, we don't call childFlowStateChangesAndAffectsParentBlock)

        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::normalizeTreeAfterStyleChange): Move the update logic out from childFlowStateChangesAndAffectsParentBlock to here and run it unconditionally.
        (WebCore::RenderTreeBuilder::childFlowStateChangesAndAffectsParentBlock):

2021-07-16  Fujii Hironori  <Hironori.Fujii@sony.com>

        [curl] Use curl_multi_poll and curl_multi_wakeup instead of select
        https://bugs.webkit.org/show_bug.cgi?id=227966

        Reviewed by Don Olmstead.

        libcurl 7.68.0 added curl_multi_poll and curl_multi_wakeup.

        * platform/network/curl/CurlContext.cpp:
        (WebCore::CurlMultiHandle::poll): Added.
        (WebCore::CurlMultiHandle::wakeUp): Added.
        * platform/network/curl/CurlContext.h:
        * platform/network/curl/CurlRequestScheduler.cpp:
        (WebCore::CurlRequestScheduler::add):
        (WebCore::CurlRequestScheduler::callOnWorkerThread):
        (WebCore::CurlRequestScheduler::startOrWakeUpThread):
        (WebCore::CurlRequestScheduler::wakeUpThreadIfPossible): Added.
        (WebCore::CurlRequestScheduler::stopThread):
        (WebCore::CurlRequestScheduler::workerThread):
        (WebCore::CurlRequestScheduler::startThreadIfNeeded): Deleted.
        * platform/network/curl/CurlRequestScheduler.h:

2021-07-16  Myles C. Maxfield  <mmaxfield@apple.com>

        Make the lack of an ANGLE dylib unconditionally log
        https://bugs.webkit.org/show_bug.cgi?id=228010

        Reviewed by Dean Jackson.

        WebCore should complain louder when all of WebGL is disabled because of a packaging misconfiguration.

        No new tests because there is no behavior change.

        * platform/graphics/cocoa/GraphicsContextGLOpenGLCocoa.mm:
        (WebCore::GraphicsContextGLOpenGL::create):

2021-07-16  Megan Gardner  <megan_gardner@apple.com>

        Pipe App Highlight scrolling through UI Process in preparation for Note Overlay avoidance.
        https://bugs.webkit.org/show_bug.cgi?id=227914

        Reviewed by Tim Horton.

        In order to correctly avoid the note overlay that can potentially obscure the web view,
        we need to pipe the scrolling through the UI process. This patch does that work
        and will be followed up shortly by one that does the actual work of overlay avoidance.
        For iOS, this just uses the main frame UI Scrolling that we already use, but for 
        mac, we need to do the last scroll in the web process after adjusting it with the overlay 
        information.

        * Modules/highlight/AppHighlightStorage.cpp:
        (WebCore::AppHighlightStorage::attemptToRestoreHighlightAndScroll):
        * dom/Element.cpp:
        (WebCore::Element::scrollIntoView):
        * editing/Editor.cpp:
        (WebCore::TemporarySelectionChange::setSelection):
        * editing/Editor.h:
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::moveWithoutValidationTo):
        (WebCore::FrameSelection::setSelection):
        (WebCore::FrameSelection::updateAndRevealSelection):
        (WebCore::FrameSelection::revealSelection):
        * editing/FrameSelection.h:
        * loader/EmptyClients.h:
        * page/Chrome.cpp:
        (WebCore::Chrome::scrollMainFrameToRevealRect const):
        (WebCore::Chrome::scrollRectIntoView const): Deleted.
        * page/Chrome.h:
        * page/ChromeClient.h:
        (WebCore::ChromeClient::scrollMainFrameToRevealRect const):
        (WebCore::ChromeClient::scrollRectIntoView const): Deleted.
        * page/ScrollBehavior.cpp:
        (WebCore::useSmoothScrolling):
        * page/ScrollBehavior.h:
        * platform/ScrollTypes.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollRectToVisible):
        * rendering/RenderLayer.h:

2021-07-16  Alexander Mikhaylenko  <alexm@gnome.org>

        [GTK][WPE] Support color-schemes CSS property
        https://bugs.webkit.org/show_bug.cgi?id=208204

        Reviewed by Adrian Perez de Castro.

        Last time we tried enabling dark mode, we broke many webpages since we couldn't have diferent
        controls, and more importantly, different system colors and defaults for pages that do and
        don't support dark mode.

        Now that we don't use GTK for this, we can try again. This time, use hardcoded system colors
        and return different colors depending on StyleColor::Options::UseDarkAppearance.

        To avoid dark-on-dark text on entries, we also need to enable HAVE_OS_DARK_MODE_SUPPORT for GTK
        and make sure it's passed to use agent CSS. And since Adwaita controls are also used in WPE, we
        need to enable it for WPE as well, and since WPE didn't have ENABLE_DARK_MODE_CSS, flip  that as
        well, all in lockstep.

        No new tests, reenabled the existing css-dark-mode tests.

        * PlatformGTK.cmake:
        * PlatformWPE.cmake:
        Pass HAVE_OS_DARK_MODE_SUPPORT to user agent CSS.
        * css/CSSValueKeywords.in:
        Expose -webkit-control-background for anything with HAVE_OS_DARK_MODE_SUPPORT.
        * css/themeAdwaita.css:
        (input[type="search"]::-webkit-search-results-button,):
        (input[type="search"]::-webkit-search-cancel-button):
        (body[dir="rtl"] input[type="search"]::-webkit-search-cancel-button):
        (input[type="search"]::-webkit-search-results-button:hover,):
        (input[type="search"]::-webkit-search-cancel-button:hover): Deleted.
        Use mask images instead of content so we can recolor them. Change
        color on hover as opacity and inherit entry's color otherwise to
        make sure it's legible with dark appearance.
        * page/FrameView.cpp:
        (WebCore::FrameView::updateBackgroundRecursively):
        Use CSSValueWindow for background instead of CSSValueAppleSystemControlBackground
        when the latter is not available.
        * platform/adwaita/ThemeAdwaita.cpp:
        (WebCore::ThemeAdwaita::focusColor):
        (WebCore::ThemeAdwaita::paintFocus):
        (WebCore::ThemeAdwaita::paintArrow):
        (WebCore::ThemeAdwaita::paint):
        (WebCore::ThemeAdwaita::paintCheckbox):
        (WebCore::ThemeAdwaita::paintRadio):
        (WebCore::ThemeAdwaita::paintButton):
        (WebCore::ThemeAdwaita::paintSpinButton):
        * platform/adwaita/ThemeAdwaita.h:
        * rendering/RenderThemeAdwaita.cpp:
        (WebCore::RenderThemeAdwaita::platformFocusRingColor const):
        (WebCore::RenderThemeAdwaita::systemColor const):
        (WebCore::RenderThemeAdwaita::paintTextField):
        (WebCore::RenderThemeAdwaita::adjustTextFieldStyle const):
        (WebCore::RenderThemeAdwaita::adjustTextAreaStyle const):
        (WebCore::RenderThemeAdwaita::adjustSearchFieldStyle const):
        Add a border radius to the default style, so the background doesn't bleed through
        the corners.
        (WebCore::RenderThemeAdwaita::paintMenuList):
        (WebCore::RenderThemeAdwaita::paintProgressBar):
        (WebCore::RenderThemeAdwaita::paintSliderTrack):
        (WebCore::RenderThemeAdwaita::paintSliderThumb):
        * rendering/RenderThemeAdwaita.h:

2021-07-16  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] RealtimeMediaSourceCenter and VideoEncoder are not libwebrtc-specific
        https://bugs.webkit.org/show_bug.cgi?id=228020

        Reviewed by Xabier Rodriguez-Calvar.

        Those two are actually not using libwebrtc-related code, so a better place for them is
        platform/mediastream/gstreamer.

        * platform/GStreamer.cmake:
        * platform/mediastream/gstreamer/GStreamerVideoEncoder.cpp: Renamed from Source/WebCore/platform/mediastream/libwebrtc/gstreamer/GStreamerVideoEncoder.cpp.
        (Encoders::singleton):
        (Encoders::registerEncoder):
        (Encoders::definition):
        (webrtcVideoEncoderGetProperty):
        (webrtcVideoEncoderSetBitrate):
        (webrtcVideoEncoderSetEncoder):
        (webrtcVideoEncoderSetFormat):
        (webrtcVideoEncoderSetProperty):
        (setBitrateKbitPerSec):
        (setBitrateBitPerSec):
        (webrtcVideoEncoderConstructed):
        (webkit_webrtc_video_encoder_class_init):
        * platform/mediastream/gstreamer/GStreamerVideoEncoder.h: Renamed from Source/WebCore/platform/mediastream/libwebrtc/gstreamer/GStreamerVideoEncoder.h.
        * platform/mediastream/gstreamer/RealtimeMediaSourceCenterGStreamer.cpp: Renamed from Source/WebCore/platform/mediastream/libwebrtc/gstreamer/RealtimeMediaSourceCenterLibWebRTC.cpp.
        (WebCore::RealtimeMediaSourceCenter::defaultAudioCaptureFactory):
        (WebCore::RealtimeMediaSourceCenter::defaultVideoCaptureFactory):
        (WebCore::RealtimeMediaSourceCenter::defaultDisplayCaptureFactory):

2021-07-16  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] LibWebRTC files should be in libwebrtc/gstreamer
        https://bugs.webkit.org/show_bug.cgi?id=227991

        Reviewed by Xabier Rodriguez-Calvar.

        For consistency purposes, the GStreamer backend modules used by LibWebRTC are now in
        platform/mediastream/libwebrtc/gstreamer. platform/mediastream/ contains the pure GStreamer
        modules related with media capture.

        * platform/GStreamer.cmake:
        * platform/mediastream/libwebrtc/gstreamer/GStreamerVideoCommon.cpp: Renamed from Source/WebCore/platform/mediastream/libwebrtc/GStreamerVideoCommon.cpp.
        (WebCore::createH264Format):
        (WebCore::supportedH264Formats):
        * platform/mediastream/libwebrtc/gstreamer/GStreamerVideoCommon.h: Renamed from Source/WebCore/platform/mediastream/libwebrtc/GStreamerVideoCommon.h.
        * platform/mediastream/libwebrtc/gstreamer/GStreamerVideoDecoderFactory.cpp: Renamed from Source/WebCore/platform/mediastream/libwebrtc/GStreamerVideoDecoderFactory.cpp.
        (WebCore::GStreamerVideoDecoder::GStreamerVideoDecoder):
        (WebCore::GStreamerVideoDecoder::decodebinPadAddedCb):
        (WebCore::GStreamerVideoDecoder::pipeline):
        (WebCore::GStreamerVideoDecoder::makeElement):
        (WebCore::GStreamerVideoDecoder::handleError):
        (WebCore::GStreamerVideoDecoder::CreateFilter):
        (WebCore::GStreamerVideoDecoder::pullSample):
        (WebCore::GStreamerVideoDecoder::GetCapsForFrame):
        (WebCore::GStreamerVideoDecoder::AddDecoderIfSupported):
        (WebCore::GStreamerVideoDecoder::ConfigureSupportedDecoder):
        (WebCore::GStreamerVideoDecoder::GstDecoderFactory):
        (WebCore::GStreamerVideoDecoder::HasGstDecoder):
        (WebCore::H264Decoder::H264Decoder):
        (WebCore::VP8Decoder::VP8Decoder):
        (WebCore::VP8Decoder::Create):
        (WebCore::VP9Decoder::VP9Decoder):
        (WebCore::VP9Decoder::Create):
        (WebCore::GStreamerVideoDecoderFactory::CreateVideoDecoder):
        (WebCore::GStreamerVideoDecoderFactory::GStreamerVideoDecoderFactory):
        (WebCore::GStreamerVideoDecoderFactory::GetSupportedFormats const):
        * platform/mediastream/libwebrtc/gstreamer/GStreamerVideoDecoderFactory.h: Renamed from Source/WebCore/platform/mediastream/libwebrtc/GStreamerVideoDecoderFactory.h.
        * platform/mediastream/libwebrtc/gstreamer/GStreamerVideoEncoder.cpp: Renamed from Source/WebCore/platform/mediastream/libwebrtc/GStreamerVideoEncoder.cpp.
        (Encoders::singleton):
        (Encoders::registerEncoder):
        (Encoders::definition):
        (webrtcVideoEncoderGetProperty):
        (webrtcVideoEncoderSetBitrate):
        (webrtcVideoEncoderSetEncoder):
        (webrtcVideoEncoderSetFormat):
        (webrtcVideoEncoderSetProperty):
        (setBitrateKbitPerSec):
        (setBitrateBitPerSec):
        (webrtcVideoEncoderConstructed):
        (webkit_webrtc_video_encoder_class_init):
        * platform/mediastream/libwebrtc/gstreamer/GStreamerVideoEncoder.h: Renamed from Source/WebCore/platform/mediastream/libwebrtc/GStreamerVideoEncoder.h.
        * platform/mediastream/libwebrtc/gstreamer/GStreamerVideoEncoderFactory.cpp: Renamed from Source/WebCore/platform/mediastream/libwebrtc/GStreamerVideoEncoderFactory.cpp.
        (WebCore::GStreamerEncodedImageBuffer::create):
        (WebCore::GStreamerEncodedImageBuffer::getBuffer const):
        (WebCore::GStreamerEncodedImageBuffer::getVideoResolution const):
        (WebCore::GStreamerEncodedImageBuffer::GStreamerEncodedImageBuffer):
        (WebCore::GStreamerVideoEncoder::GStreamerVideoEncoder):
        (WebCore::GStreamerVideoEncoder::pipeline):
        (WebCore::GStreamerVideoEncoder::makeElement):
        (WebCore::GStreamerVideoEncoder::returnFromFlowReturn):
        (WebCore::GStreamerVideoEncoder::createEncoder):
        (WebCore::GStreamerVideoEncoder::AddCodecIfSupported):
        (WebCore::GStreamerVideoEncoder::Caps):
        (WebCore::GStreamerVideoEncoder::ConfigureSupportedCodec):
        (WebCore::GStreamerVideoEncoder::SetRestrictionCaps):
        (WebCore::GStreamerH264Encoder::GStreamerH264Encoder):
        (WebCore::GStreamerVideoEncoderFactory::CreateVideoEncoder):
        (WebCore::GStreamerVideoEncoderFactory::GStreamerVideoEncoderFactory):
        (WebCore::GStreamerVideoEncoderFactory::GetSupportedFormats const):
        * platform/mediastream/libwebrtc/gstreamer/GStreamerVideoEncoderFactory.h: Renamed from Source/WebCore/platform/mediastream/libwebrtc/GStreamerVideoEncoderFactory.h.
        * platform/mediastream/libwebrtc/gstreamer/GStreamerVideoFrameLibWebRTC.cpp: Renamed from Source/WebCore/platform/mediastream/gstreamer/GStreamerVideoFrameLibWebRTC.cpp.
        (WebCore::GStreamerSampleFromLibWebRTCVideoFrame):
        (WebCore::GStreamerVideoFrameLibWebRTC::create):
        (WebCore::LibWebRTCVideoFrameFromGStreamerSample):
        (WebCore::GStreamerVideoFrameLibWebRTC::ToI420):
        * platform/mediastream/libwebrtc/gstreamer/GStreamerVideoFrameLibWebRTC.h: Renamed from Source/WebCore/platform/mediastream/gstreamer/GStreamerVideoFrameLibWebRTC.h.
        (WebCore::GStreamerVideoFrameLibWebRTC::GStreamerVideoFrameLibWebRTC):
        (WebCore::GStreamerVideoFrameLibWebRTC::takeSample):
        * platform/mediastream/libwebrtc/gstreamer/LibWebRTCProviderGStreamer.cpp: Renamed from Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCProviderGStreamer.cpp.
        (WebCore::LibWebRTCProvider::create):
        (WebCore::LibWebRTCProvider::webRTCAvailable):
        (WebCore::LibWebRTCProviderGStreamer::createDecoderFactory):
        (WebCore::LibWebRTCProviderGStreamer::createEncoderFactory):
        * platform/mediastream/libwebrtc/gstreamer/LibWebRTCProviderGStreamer.h: Renamed from Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCProviderGStreamer.h.
        * platform/mediastream/libwebrtc/gstreamer/RealtimeIncomingAudioSourceLibWebRTC.cpp: Renamed from Source/WebCore/platform/mediastream/gstreamer/RealtimeIncomingAudioSourceLibWebRTC.cpp.
        (WebCore::RealtimeIncomingAudioSource::create):
        (WebCore::RealtimeIncomingAudioSourceLibWebRTC::create):
        (WebCore::RealtimeIncomingAudioSourceLibWebRTC::RealtimeIncomingAudioSourceLibWebRTC):
        (WebCore::RealtimeIncomingAudioSourceLibWebRTC::OnData):
        * platform/mediastream/libwebrtc/gstreamer/RealtimeIncomingAudioSourceLibWebRTC.h: Renamed from Source/WebCore/platform/mediastream/gstreamer/RealtimeIncomingAudioSourceLibWebRTC.h.
        * platform/mediastream/libwebrtc/gstreamer/RealtimeIncomingVideoSourceLibWebRTC.cpp: Renamed from Source/WebCore/platform/mediastream/gstreamer/RealtimeIncomingVideoSourceLibWebRTC.cpp.
        (WebCore::RealtimeIncomingVideoSource::create):
        (WebCore::RealtimeIncomingVideoSourceLibWebRTC::create):
        (WebCore::RealtimeIncomingVideoSourceLibWebRTC::RealtimeIncomingVideoSourceLibWebRTC):
        (WebCore::RealtimeIncomingVideoSourceLibWebRTC::OnFrame):
        * platform/mediastream/libwebrtc/gstreamer/RealtimeIncomingVideoSourceLibWebRTC.h: Renamed from Source/WebCore/platform/mediastream/gstreamer/RealtimeIncomingVideoSourceLibWebRTC.h.
        * platform/mediastream/libwebrtc/gstreamer/RealtimeMediaSourceCenterLibWebRTC.cpp: Renamed from Source/WebCore/platform/mediastream/gstreamer/RealtimeMediaSourceCenterLibWebRTC.cpp.
        (WebCore::RealtimeMediaSourceCenter::defaultAudioCaptureFactory):
        (WebCore::RealtimeMediaSourceCenter::defaultVideoCaptureFactory):
        (WebCore::RealtimeMediaSourceCenter::defaultDisplayCaptureFactory):
        * platform/mediastream/libwebrtc/gstreamer/RealtimeOutgoingAudioSourceLibWebRTC.cpp: Renamed from Source/WebCore/platform/mediastream/gstreamer/RealtimeOutgoingAudioSourceLibWebRTC.cpp.
        (WebCore::RealtimeOutgoingAudioSourceLibWebRTC::RealtimeOutgoingAudioSourceLibWebRTC):
        (WebCore::RealtimeOutgoingAudioSourceLibWebRTC::~RealtimeOutgoingAudioSourceLibWebRTC):
        (WebCore::RealtimeOutgoingAudioSource::create):
        (WebCore::libwebrtcAudioFormat):
        (WebCore::RealtimeOutgoingAudioSourceLibWebRTC::audioSamplesAvailable):
        (WebCore::RealtimeOutgoingAudioSourceLibWebRTC::pullAudioData):
        (WebCore::RealtimeOutgoingAudioSourceLibWebRTC::isReachingBufferedAudioDataHighLimit):
        (WebCore::RealtimeOutgoingAudioSourceLibWebRTC::isReachingBufferedAudioDataLowLimit):
        (WebCore::RealtimeOutgoingAudioSourceLibWebRTC::hasBufferedEnoughData):
        * platform/mediastream/libwebrtc/gstreamer/RealtimeOutgoingAudioSourceLibWebRTC.h: Renamed from Source/WebCore/platform/mediastream/gstreamer/RealtimeOutgoingAudioSourceLibWebRTC.h.
        * platform/mediastream/libwebrtc/gstreamer/RealtimeOutgoingVideoSourceLibWebRTC.cpp: Renamed from Source/WebCore/platform/mediastream/gstreamer/RealtimeOutgoingVideoSourceLibWebRTC.cpp.
        (WebCore::RealtimeOutgoingVideoSource::create):
        (WebCore::RealtimeOutgoingVideoSourceLibWebRTC::create):
        (WebCore::RealtimeOutgoingVideoSourceLibWebRTC::RealtimeOutgoingVideoSourceLibWebRTC):
        (WebCore::RealtimeOutgoingVideoSourceLibWebRTC::videoSampleAvailable):
        (WebCore::RealtimeOutgoingVideoSourceLibWebRTC::createBlackFrame):
        * platform/mediastream/libwebrtc/gstreamer/RealtimeOutgoingVideoSourceLibWebRTC.h: Renamed from Source/WebCore/platform/mediastream/gstreamer/RealtimeOutgoingVideoSourceLibWebRTC.h.

2021-07-15  Chris Dumez  <cdumez@apple.com>

        Implement 'SubmitEvent' interface
        https://bugs.webkit.org/show_bug.cgi?id=202978

        Reviewed by Alex Christensen.

        Implement 'SubmitEvent' interface as per:
        - https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#submitevent

        Both Chrome and Firefox already ship this.

        No new tests, rebaselined existing tests.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/EventNames.in:
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::submitIfPossible):
        * html/SubmitEvent.cpp: Added.
        (WebCore::SubmitEvent::create):
        (WebCore::SubmitEvent::SubmitEvent):
        (WebCore::SubmitEvent::eventInterface const):
        * html/SubmitEvent.h: Added.
        (WebCore::SubmitEvent::submitter const):
        * html/SubmitEvent.idl: Added.

        * html/SubmitInputType.cpp:
        (WebCore::SubmitInputType::handleDOMActivateEvent):
        Make sure SubmitInputType::handleDOMActivateEvent() passes its element as submitter
        when submitting the form. One of the subtests in html/semantics/forms/form-submission-0/implicit-submission.optional.html
        covers this.

2021-07-15  Chris Dumez  <cdumez@apple.com>

        Add support for MediaError.message
        https://bugs.webkit.org/show_bug.cgi?id=228008

        Reviewed by Alex Christensen.

        Add support for MediaError.message:
        - https://html.spec.whatwg.org/multipage/media.html#mediaerror

        Both Chrome and Firefox already support this.

        No new tests, rebaselined existing test.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::noneSupported):
        (WebCore::HTMLMediaElement::mediaLoadingFailedFatally):
        (WebCore::HTMLMediaElement::mediaPlayerKeyNeeded):
        (WebCore::HTMLMediaElement::userCancelledLoad):
        * html/MediaError.h:
        (WebCore::MediaError::create):
        (WebCore::MediaError::message const):
        (WebCore::MediaError::MediaError):
        * html/MediaError.idl:

2021-07-15  Jean-Yves Avenard  <jya@apple.com>

        [Wk1] media/media-source/media-webm-opus-partial.html is a consistent failure (Enable VP8/VP9/Vorbis/Opus in WebKitLegacy)
        https://bugs.webkit.org/show_bug.cgi?id=228005
        rdar://80346720

        Reviewed by Jer Noble.

        There are already tests running under Wk1 that will exercise this code (and will no longer fail)

        * page/RuntimeEnabledFeatures.cpp:
        (WebCore::RuntimeEnabledFeatures::setVorbisDecoderEnabled):
        Carry settings to PlatformMediaSessionManager
        (WebCore::RuntimeEnabledFeatures::setOpusDecoderEnabled):
        Carry settings to PlatformMediaSessionManager
        * page/RuntimeEnabledFeatures.h:

2021-07-15  Jean-Yves Avenard  <jya@apple.com>

        [MSE] sequence mode is broken if GPU Process is enabled
        https://bugs.webkit.org/show_bug.cgi?id=227864
        <rdar://problem/80445041>

        Reviewed by Jer Noble.

        When the source buffer's mode is set to sequence, the timestampOffset attribute
        should be updated after each appendBuffer operation. However, when the GPU process
        is enabled, the timestampOffset calculations are all done in the GPU process and
        its result wasn't communicated back to the WebContent process leading its value
        to always be 0 on read.
        Fly-by fix: the timestamp offset calculation was incorrect, per spec
        https://w3c.github.io/media-source/#sourcebuffer-coded-frame-processing
        step 3.5.8.3.1 we read:
        // Set timestampOffset equal to group start timestamp - presentation timestamp.
        but the code did otherwise.

        Test: media/media-source/media-mp4-h264-sequence-mode.html

        * platform/graphics/SourceBufferPrivate.cpp:
        (WebCore::SourceBufferPrivate::didReceiveSample): Offset m_timestampOffset by
        the sample's presentation timestamp

2021-07-15  Chris Dumez  <cdumez@apple.com>

        Add initial support for BroadcastChannel behind a runtime flag
        https://bugs.webkit.org/show_bug.cgi?id=227924

        Reviewed by Sam Weinig.

        Add initial support for BroadcastChannel behind a runtime flag, off by default:
        - https://html.spec.whatwg.org/multipage/web-messaging.html#broadcasting-to-other-browsing-contexts

        Both Firefox and Blink have been supporting BroadcastChannel for a long time.

        The implementation is complete and spec-compliant. It works both in Window and Worker environments,
        in WebKit1 and WebKit2. However, the feature is off-by-default because of privacy concerns that have
        not been addresssed yet:
        - https://github.com/whatwg/html/issues/5803

        We should be able to add partioning to address the privacy concerns and ship this later on. In the mean
        time though, having a working BroadcastChannel implementation in the context of layout tests is already
        very useful because a lot of Web-Platform-Tests are relying on it to test other Web features. This means
        better test coverage for WebKit.

        Tests:
        - fast/html/broadcast-channel-between-different-sessions.html
        - Rebaselined WPT tests

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Headers.cmake:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:
        * dom/BroadcastChannel.cpp: Added.
        (WebCore::channelToContextIdentifier):
        (WebCore::BroadcastChannel::BroadcastChannel):
        (WebCore::BroadcastChannel::~BroadcastChannel):
        (WebCore::BroadcastChannel::postMessage):
        (WebCore::BroadcastChannel::close):
        (WebCore::BroadcastChannel::dispatchMessageTo):
        (WebCore::BroadcastChannel::dispatchMessage):
        (WebCore::BroadcastChannel::ensureOnMainThread):
        (WebCore::BroadcastChannel::activeDOMObjectName const):
        (WebCore::BroadcastChannel::eventListenersDidChange):
        (WebCore::BroadcastChannel::virtualHasPendingActivity const):
        * dom/BroadcastChannel.h: Added.
        (WebCore::BroadcastChannel::create):
        (WebCore::BroadcastChannel::identifier const):
        (WebCore::BroadcastChannel::name const):
        * dom/BroadcastChannel.idl: Added.
        * dom/BroadcastChannelIdentifier.h: Added.
        * dom/BroadcastChannelRegistry.h: Added.
        (WebCore::BroadcastChannelRegistry::~BroadcastChannelRegistry):
        * dom/DeviceOrientationAndMotionAccessController.h:
        * dom/DeviceOrientationEvent.cpp:
        * dom/DeviceOrientationEvent.h:
        * dom/EventTargetFactory.in:
        * loader/EmptyClients.cpp:
        (WebCore::pageConfigurationWithEmptyClients):
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::setBroadcastChannelRegistry):
        * page/Page.h:
        (WebCore::Page::broadcastChannelRegistry):
        * page/PageConfiguration.cpp:
        (WebCore::PageConfiguration::PageConfiguration):
        * page/PageConfiguration.h:

2021-07-15  Chris Dumez  <cdumez@apple.com>

        FetchResponse.formData() should reject promise with a TypeError if the body is null
        https://bugs.webkit.org/show_bug.cgi?id=228007

        Reviewed by Alex Christensen.

        FetchResponse.formData() should reject promise with a TypeError if the body is null, to match
        the behavior of Chrome and Firefox.

        No new tests, rebaselined existing tests.

        * Modules/fetch/FetchBodyOwner.cpp:
        (WebCore::FetchBodyOwner::formData):

2021-07-15  Chris Dumez  <cdumez@apple.com>

        Sync XHR 'load' event is always has total/loaded=0
        https://bugs.webkit.org/show_bug.cgi?id=228004

        Reviewed by Alex Christensen.

        XMLHttpRequest::didReceiveData() was not calling XMLHttpRequestProgressEventThrottle::dispatchThrottledProgressEvent()
        for sync XHRs because we don't want to fire 'progress' events for sync XHR. However, dispatchThrottledProgressEvent()
        also updates XMLHttpRequestProgressEventThrottle's m_loaded / m_total members and we do want those to get updated for
        sync XHRs, since they get used later on for the 'load' event.

        No new tests, rebaselined existing test.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::didReceiveData):
        * xml/XMLHttpRequestProgressEventThrottle.cpp:
        (WebCore::XMLHttpRequestProgressEventThrottle::updateProgress):
        (WebCore::XMLHttpRequestProgressEventThrottle::dispatchThrottledProgressEvent): Deleted.
        * xml/XMLHttpRequestProgressEventThrottle.h:

2021-07-15  Sihui Liu  <sihui_liu@apple.com>

        Do not abort ongoing IDB transaction synchronously on non-imminent PrepareToSuspend message
        https://bugs.webkit.org/show_bug.cgi?id=227778
        <rdar://problem/80602557>

        Reviewed by Chris Dumez.

        * Modules/indexeddb/server/IDBServer.cpp:
        (WebCore::IDBServer::IDBServer::hasDatabaseActivitiesOnMainThread const):
        * Modules/indexeddb/server/IDBServer.h:
        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::hasActiveTransactions const):
        * Modules/indexeddb/server/UniqueIDBDatabase.h:

2021-07-15  Peng Liu  <peng.liu6@apple.com>

        Reddit PiP video pauses when scrolling
        https://bugs.webkit.org/show_bug.cgi?id=227999

        Reviewed by Jer Noble.

        Enable the `requiresUserGestureToPauseInPictureInPicture` quirk for reddit.com.

        * page/Quirks.cpp:
        (WebCore::Quirks::requiresUserGestureToPauseInPictureInPicture const):

2021-07-15  Megan Gardner  <megan_gardner@apple.com>

        Rename scrollRectIntoView to scrollContainingScrollViewsToRevealRect for clarity.
        https://bugs.webkit.org/show_bug.cgi?id=227995

        Reviewed by Tim Horton.

        No behavior change.

        * loader/EmptyClients.h:
        * page/Chrome.cpp:
        (WebCore::Chrome::scrollContainingScrollViewsToRevealRect const):
        (WebCore::Chrome::scrollRectIntoView const): Deleted.
        * page/Chrome.h:
        * page/ChromeClient.h:
        (WebCore::ChromeClient::scrollContainingScrollViewsToRevealRect const):
        (WebCore::ChromeClient::scrollRectIntoView const): Deleted.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollRectToVisible):

2021-07-15  Brady Eidson  <beidson@apple.com>

        Use WeakPtr with UniqueIDBDatabaseConnection
        <rdar://79447808> and https://bugs.webkit.org/show_bug.cgi?id=227969

        Reviewed by Geoff Garen.

        No new tests possible.
        
        Noticed this raw ptr which was raw to break a ref cycle.
        WeakPtr works better.

        * Modules/indexeddb/server/UniqueIDBDatabaseConnection.h:
        * Modules/indexeddb/server/UniqueIDBDatabaseTransaction.cpp:
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::UniqueIDBDatabaseTransaction):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::~UniqueIDBDatabaseTransaction):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::databaseConnection):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::abort):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::abortWithoutCallback):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::commit):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::createObjectStore):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::deleteObjectStore):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::renameObjectStore):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::clearObjectStore):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::createIndex):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::deleteIndex):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::renameIndex):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::putOrAdd):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::getRecord):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::getAllRecords):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::getCount):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::deleteRecord):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::openCursor):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::iterateCursor):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::objectStoreIdentifiers):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::didActivateInBackingStore):
        * Modules/indexeddb/server/UniqueIDBDatabaseTransaction.h:
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::databaseConnection): Deleted.

2021-07-15  Simon Fraser  <simon.fraser@apple.com>

        Improve multicol logging in render tree dumps, and cleanup
        https://bugs.webkit.org/show_bug.cgi?id=227994

        Reviewed by Alan Bujtas.

        For a RenderFragmentedFlow dump the list of fragment containers, and clean up the existing
        dumping of containers for a renderer inside a fragmented flow. Also dump column information
        for RenderMultiColumnSet.

        Use initializers for member variables in various fragmentation-related renderers.

        * rendering/RenderFragmentContainer.cpp:
        (WebCore::RenderFragmentContainer::RenderFragmentContainer):
        * rendering/RenderFragmentContainer.h:
        * rendering/RenderMultiColumnFlow.cpp:
        (WebCore::RenderMultiColumnFlow::RenderMultiColumnFlow):
        * rendering/RenderMultiColumnFlow.h:
        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::RenderMultiColumnSet):
        * rendering/RenderMultiColumnSet.h:
        * rendering/RenderObject.cpp:
        (WebCore::enclosingFragmentedFlowFromRenderer):
        (WebCore::RenderObject::outputRegionsInformation const):
        (WebCore::RenderObject::outputRenderObject const):

2021-07-15  Brady Eidson  <beidson@apple.com>

        MemoryIDBBackingStore cleanup.
        <rdar://79497380> and https://bugs.webkit.org/show_bug.cgi?id=227993

        Reviewed by Geoffrey Garen.

        * Modules/indexeddb/server/MemoryIDBBackingStore.cpp:
        (WebCore::IDBServer::MemoryIDBBackingStore::registerObjectStore):
        * Modules/indexeddb/server/MemoryIDBBackingStore.h:

2021-07-15  Tim Nguyen  <ntim@apple.com>

        <dialog> element: do not perform close() method steps when removing open attribute.
        https://bugs.webkit.org/show_bug.cgi?id=227872

        Reviewed by Chris Dumez.

        Test: web-platform-tests/html/semantics/interactive-elements/the-dialog-element/dialog-open.html

        The close function now follows the steps at: https://html.spec.whatwg.org/multipage/interactive-elements.html#close-the-dialog

        * html/HTMLDialogElement.cpp:
        (WebCore::HTMLDialogElement::show):
        (WebCore::HTMLDialogElement::showModal):
        (WebCore::HTMLDialogElement::close):
        (WebCore::HTMLDialogElement::dispatchPendingEvent):
        (WebCore::HTMLDialogElement::isOpen const): Deleted.
        (WebCore::HTMLDialogElement::returnValue): Deleted.
        (WebCore::HTMLDialogElement::setReturnValue): Deleted.
        (WebCore::HTMLDialogElement::parseAttribute): Deleted.
        (WebCore::HTMLDialogElement::isModal const): Deleted.
        * html/HTMLDialogElement.h:

2021-07-15  Jer Noble  <jer.noble@apple.com>

        REGRESSION (r279119?): [iOS] ASSERTION FAILED: !m_impl || !m_shouldEnableAssertions || m_impl->wasConstructedOnMainThread() == isMainThread() seen with 3 WebKitLegacy media API tests
        https://bugs.webkit.org/show_bug.cgi?id=227930
        <rdar://problem/80545962>

        Reviewed by Eric Carlson.

        Dispatch to the WebThread if necessary.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayer):

2021-07-15  Adrian Perez de Castro  <aperez@igalia.com>

        Non-unified build fixes, mid-July 2021 edition
        https://bugs.webkit.org/show_bug.cgi?id=227981

        Unreviewed non-unified build fixes.

        * accessibility/AXObjectCache.cpp: Add missing AXImage.h and RenderImage.h headers.
        * bindings/js/JSIntersectionObserverCustom.cpp:
        (WebCore::JSIntersectionObserverOwner::isReachableFromOpaqueRoots): Add missing namespace to
        usage of JSC::jsCast<T>() template.
        * bindings/js/JSResizeObserverCustom.cpp: Add missing Element.h and JSNodeCustom.h headers.
        (WebCore::JSResizeObserverOwner::isReachableFromOpaqueRoots): Add missing namespace to usage
        of JSC::jsCast<T>() template.
        * css/CSSCrossfadeValue.h: Add missing forward declaration of Style::BuilderState.
        * css/parser/CSSPropertyParserWorkerSafe.cpp: Add missing ParsingUtilities.h header.
        * platform/graphics/cairo/GradientCairo.cpp: Replace GraphicsContext.h header with
        GraphicsContextCairo.h to avoid errors about undefined types.
        * rendering/style/RenderStyleConstants.cpp: Add missing CSSPrimitiveValueMappings.h header.

2021-07-15  Philippe Normand  <pnormand@igalia.com>

        [GStreamer][Pipewire] Implement getDisplayMedia() backend
        https://bugs.webkit.org/show_bug.cgi?id=210926

        Reviewed by Xabier Rodriguez-Calvar.

        Display capture is now supported by GStreamer ports. When requested, the capture device
        manager queries the host through the libportal API. The user is presented with a prompt
        allowing to select either a monitor or an application window. Once selected, the manager
        creates the associated CaptureDevice, passing the pipewire file descriptor along. The
        existing GStreamer video capture source infrastructure is reused, leveraging the GStreamer
        pipewiresrc element to generate a live video stream of the display device.

        As display capture devices need to respect the aspect-ratio of the video frame, taking into
        account max-{widther,height}, some code was reused from the Cocoa display capture code and
        placed in RealtimeVideoCaptureSource as ensureIntrinsicSizeMaintainsAspectRatio().

        Unfortunately this aspect-ratio enforcing feature is currently used only for mock capture
        sources. The GStreamer pipewiresrc doesn't support caps renegotiation well yet, so we can't
        comply with the aspect-ratio enforcing, for the time being.

        This patch is covered by newly unskipped layout tests and API tests.

        * platform/GStreamer.cmake:
        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::setIntrinsicSize):
        (WebCore::RealtimeMediaSource::hashedId const):
        * platform/mediastream/RealtimeMediaSource.h:
        * platform/mediastream/RealtimeVideoCaptureSource.cpp:
        (WebCore::RealtimeVideoCaptureSource::ensureIntrinsicSizeMaintainsAspectRatio):
        * platform/mediastream/RealtimeVideoCaptureSource.h:
        * platform/mediastream/RealtimeVideoSource.cpp:
        (WebCore::RealtimeVideoSource::sourceSettingsChanged):
        * platform/mediastream/gstreamer/GStreamerAudioCapturer.cpp:
        (WebCore::GStreamerAudioCapturer::GStreamerAudioCapturer):
        * platform/mediastream/gstreamer/GStreamerCaptureDeviceManager.cpp:
        (WebCore::GStreamerDisplayCaptureDeviceManager::GStreamerDisplayCaptureDeviceManager):
        (WebCore::GStreamerDisplayCaptureDeviceManager::~GStreamerDisplayCaptureDeviceManager):
        (WebCore::GStreamerDisplayCaptureDeviceManager::computeCaptureDevices):
        (WebCore::GStreamerDisplayCaptureDeviceManager::setSession):
        (WebCore::GStreamerDisplayCaptureDeviceManager::sessionStarted):
        (WebCore::GStreamerDisplayCaptureDeviceManager::notifyClient):
        (WebCore::GStreamerDisplayCaptureDeviceManager::sessionWasClosed):
        * platform/mediastream/gstreamer/GStreamerCaptureDeviceManager.h:
        * platform/mediastream/gstreamer/GStreamerCapturer.cpp:
        (WebCore::GStreamerCapturer::GStreamerCapturer):
        (WebCore::GStreamerCapturer::Observer::~Observer):
        (WebCore::GStreamerCapturer::addObserver):
        (WebCore::GStreamerCapturer::removeObserver):
        (WebCore::GStreamerCapturer::forEachObserver):
        (WebCore::GStreamerCapturer::createSource):
        * platform/mediastream/gstreamer/GStreamerCapturer.h:
        (WebCore::GStreamerCapturer::Observer::sourceCapsChanged):
        (WebCore::GStreamerCapturer::deviceType const):
        * platform/mediastream/gstreamer/GStreamerVideoCaptureSource.cpp:
        (WebCore::GStreamerVideoCaptureSource::create):
        (WebCore::GStreamerVideoCaptureSource::createPipewireSource):
        (WebCore::GStreamerVideoCaptureSource::GStreamerVideoCaptureSource):
        (WebCore::m_deviceType):
        (WebCore::GStreamerVideoCaptureSource::~GStreamerVideoCaptureSource):
        (WebCore::GStreamerVideoCaptureSource::sourceCapsChanged):
        (WebCore::GStreamerVideoCaptureSource::startProducingData):
        (WebCore::GStreamerVideoCaptureSource::stopProducingData):
        (WebCore::m_capturer): Deleted.
        * platform/mediastream/gstreamer/GStreamerVideoCaptureSource.h:
        * platform/mediastream/gstreamer/GStreamerVideoCapturer.cpp:
        (WebCore::initializeDebugCategory):
        (WebCore::GStreamerVideoCapturer::GStreamerVideoCapturer):
        (WebCore::GStreamerVideoCapturer::createSource):
        (WebCore::GStreamerVideoCapturer::setPipewireFD):
        (WebCore::GStreamerVideoCapturer::setSize):
        (WebCore::GStreamerVideoCapturer::setFrameRate):
        * platform/mediastream/gstreamer/GStreamerVideoCapturer.h:
        * platform/mediastream/gstreamer/MockRealtimeVideoSourceGStreamer.cpp:
        (WebCore::MockRealtimeVideoSource::create):
        (WebCore::MockRealtimeVideoSourceGStreamer::createMockDisplayCaptureSource):
        * platform/mediastream/gstreamer/MockRealtimeVideoSourceGStreamer.h:
        * platform/mock/MockRealtimeMediaSourceCenter.cpp:
        * platform/mock/MockRealtimeVideoSource.cpp:
        (WebCore::MockRealtimeVideoSource::capabilities):
        (WebCore::MockRealtimeVideoSource::generateFrame):
        * platform/mock/MockRealtimeVideoSource.h:

2021-07-15  Philippe Normand  <pnormand@igalia.com> and Miguel Gomez  <magomez@igalia.com>

        [GStreamer][GL] A420 compositing support
        https://bugs.webkit.org/show_bug.cgi?id=227953

        Reviewed by Xabier Rodriguez-Calvar.

        A420 is YUV+alpha in a separate component. vp9dec outputs this format for assets encoded
        with alpha support. Our GL sink now supports this format and lets the TextureMapper handle the
        final conversion to RGBA.

        * platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp:
        * platform/graphics/gstreamer/GStreamerVideoFrameHolder.cpp:
        (WebCore::GstVideoFrameHolder::platformLayerBuffer):
        * platform/graphics/gstreamer/VideoTextureCopierGStreamer.cpp:
        (WebCore::VideoTextureCopierGStreamer::copyVideoTextureToPlatformTexture):
        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGL::drawTexturePlanarYUV):
        * platform/graphics/texmap/TextureMapperGL.h:
        * platform/graphics/texmap/TextureMapperPlatformLayerBuffer.cpp:
        (WebCore::TextureMapperPlatformLayerBuffer::paintToTextureMapper):
        * platform/graphics/texmap/TextureMapperPlatformLayerBuffer.h:
        * platform/graphics/texmap/TextureMapperShaderProgram.cpp:
        (WebCore::TextureMapperShaderProgram::create):
        * platform/graphics/texmap/TextureMapperShaderProgram.h:

2021-07-14  Alex Christensen  <achristensen@webkit.org>

        Link against Catalyst ANGLE-shared.dylib when linking Catalyst WebCore.framework
        https://bugs.webkit.org/show_bug.cgi?id=227965
        <rdar://76284889>

        Reviewed by Tim Horton.

        r274742 put the dylib into the correct location, but when linking WebCore we are still looking in the
        location of the non-Catalyst dylib, which happens to have all the symbols we are looking for so linking succeeds.
        At runtime, though, we realize we are opening the wrong dylib and bad things happen.

        The solution is to look in the Catalyst WebCore framework directory when WK_USE_ALTERNATE_FRAMEWORKS_DIR is YES,
        which is only in the Catalyst build.

        * Configurations/WebCore.xcconfig:

2021-07-14  Mark Lam  <mark.lam@apple.com>

        Speculative fix for failed scope.releaseAssertNoException() after calls to JSMap::create().
        https://bugs.webkit.org/show_bug.cgi?id=227964
        rdar://78013960

        Reviewed by Yusuke Suzuki.

        * bindings/js/JSDOMMapLike.cpp:
        (WebCore::getBackingMap):

2021-07-14  Jer Noble  <jer.noble@apple.com>

        [Cocoa] Null-pointer deref in MediaKeySystemAccess::createMediaKeys()
        https://bugs.webkit.org/show_bug.cgi?id=227911
        <rdar://80325855>

        Reviewed by Chris Dumez.

        In r278481, we moved from a (timer-based) GenericTaskQueue to the document's event loop, but in so
        doing, allowed the passed-in lambda to be called after the underlying object had been destroyed.
        Make MediaKeySystemAccess a CanMakeWeakPtr and pass in a WeakPtr to the lambda. To ensure that the
        lambda itself keeps MediaKeySystemAccess during the execution of the lambda, also add a Ref to
        the object after null-checking weakThis.

        * Modules/encryptedmedia/MediaKeySystemAccess.cpp:
        (WebCore::MediaKeySystemAccess::createMediaKeys):
        * Modules/encryptedmedia/MediaKeySystemAccess.h:

2021-07-14  Rob Buis  <rbuis@igalia.com>

        Rename hasOverflowClip() to prepare for the real overflow:clip
        https://bugs.webkit.org/show_bug.cgi?id=227899

        Reviewed by Simon Fraser.

        Rename hasOverflowClip() to prepare for the real overflow:clip.

        No new tests since no change in behavior.

        * dom/Document.cpp:
        (WebCore::Document::isBodyPotentiallyScrollable):
        (WebCore::computeIntersectionState):
        * dom/Element.cpp:
        (WebCore::Element::scrollTo):
        (WebCore::Element::scrollByUnits):
        * editing/TextIterator.cpp:
        (WebCore::fullyClipsContents):
        * layout/integration/LayoutIntegrationInlineContentBuilder.cpp:
        (WebCore::LayoutIntegration::lineOverflowWidth):
        * layout/integration/LayoutIntegrationLineLayout.cpp:
        (WebCore::LayoutIntegration::LineLayout::collectOverflow):
        * page/ios/FrameIOS.mm:
        (WebCore::Frame::nodeRespondingToScrollWheelEvents):
        * rendering/LegacyLineLayout.cpp:
        (WebCore::LegacyLineLayout::layoutLineBoxes):
        (WebCore::LegacyLineLayout::addOverflowFromInlineChildren):
        * rendering/RenderBlock.cpp:
        (WebCore::OverflowEventDispatcher::OverflowEventDispatcher):
        (WebCore::RenderBlock::endAndCommitUpdateScrollInfoAfterLayoutTransaction):
        (WebCore::RenderBlock::updateScrollInfoAfterLayout):
        (WebCore::RenderBlock::computeOverflow):
        (WebCore::RenderBlock::paint):
        (WebCore::RenderBlock::isSelectionRoot const):
        (WebCore::RenderBlock::nodeAtPoint):
        (WebCore::RenderBlock::addFocusRingRects):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::layoutBlock):
        (WebCore::RenderBlockFlow::adjustForBorderFit const):
        * rendering/RenderBlockFlow.h:
        (WebCore::RenderBlockFlow::endPaddingWidthForCaret const):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::styleWillChange):
        (WebCore::RenderBox::styleDidChange):
        (WebCore::RenderBox::updateFromStyle):
        (WebCore::RenderBox::scrollWidth const):
        (WebCore::RenderBox::scrollHeight const):
        (WebCore::RenderBox::scrollLeft const):
        (WebCore::RenderBox::scrollTop const):
        (WebCore::RenderBox::setScrollLeft):
        (WebCore::RenderBox::setScrollTop):
        (WebCore::RenderBox::setScrollPosition):
        (WebCore::RenderBox::includeVerticalScrollbarSize const):
        (WebCore::RenderBox::includeHorizontalScrollbarSize const):
        (WebCore::RenderBox::intrinsicScrollbarLogicalWidth const):
        (WebCore::RenderBox::requiresLayerWithScrollableArea const):
        (WebCore::RenderBox::canBeProgramaticallyScrolled const):
        (WebCore::RenderBox::usesCompositedScrolling const):
        (WebCore::RenderBox::hasAutoScrollbar const):
        (WebCore::RenderBox::hasAlwaysPresentScrollbar const):
        (WebCore::RenderBox::scrollPosition const):
        (WebCore::RenderBox::cachedSizeForOverflowClip const):
        (WebCore::RenderBox::backgroundHasOpaqueTopLayer const):
        (WebCore::RenderBox::pushContentsClip):
        (WebCore::RenderBox::popContentsClip):
        (WebCore::RenderBox::computeVisibleRectInContainer const):
        (WebCore::RenderBox::createsNewFormattingContext const):
        (WebCore::RenderBox::addOverflowFromChild):
        (WebCore::RenderBox::addLayoutOverflow):
        (WebCore::RenderBox::layoutOverflowRectForPropagation const):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::scrollsOverflowX const):
        (WebCore::RenderBox::scrollsOverflowY const):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        (WebCore::RenderBoxModelObject::boxShadowShouldBeAppliedToBackground const):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::styleWillChange):
        (WebCore::RenderElement::mayCauseRepaintInsideViewport const):
        * rendering/RenderElement.h:
        (WebCore::RenderElement::hasClipOrNonVisibleOverflow const):
        (WebCore::RenderElement::hasClipOrOverflowClip const): Deleted.
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::hitTestChildren):
        * rendering/RenderFragmentContainer.cpp:
        (WebCore::RenderFragmentContainer::shouldClipFragmentedFlowContent const):
        (WebCore::RenderFragmentContainer::layoutOverflowRectForBoxForPropagation):
        * rendering/RenderFragmentedFlow.cpp:
        (WebCore::RenderFragmentedFlow::addFragmentsOverflowFromChild):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::clippedOverflowRect const):
        (WebCore::RenderInline::computeVisibleRectInContainer const):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::shouldBeNormalFlowOnly const):
        (WebCore::RenderLayer::updateLayerPositionsAfterScroll):
        (WebCore::RenderLayer::enclosingOverflowClipLayer const):
        (WebCore::RenderLayer::updateLayerPosition):
        (WebCore::RenderLayer::allowsCurrentScroll const):
        (WebCore::RenderLayer::canResize const):
        (WebCore::RenderLayer::clipToRect):
        (WebCore::RenderLayer::setupFontSubpixelQuantization):
        (WebCore::RenderLayer::paintLayerContents):
        (WebCore::RenderLayer::calculateClipRects const):
        (WebCore::outputPaintOrderTreeRecursive):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::clippingLayerBox):
        (WebCore::RenderLayerBacking::updateCompositedBounds):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::enclosingNonStackingClippingLayer const):
        (WebCore::RenderLayerCompositor::computeAncestorClippingStack const):
        (WebCore::RenderLayerCompositor::clipsCompositingDescendants):
        * rendering/RenderLayerScrollableArea.cpp:
        (WebCore::RenderLayerScrollableArea::paintOverflowControls):
        (WebCore::RenderLayerScrollableArea::updateScrollCornerStyle):
        (WebCore::RenderLayerScrollableArea::updateResizerStyle):
        (WebCore::RenderLayerScrollableArea::scrollByRecursively):
        * rendering/RenderLayoutState.cpp:
        (WebCore::RenderLayoutState::RenderLayoutState):
        (WebCore::RenderLayoutState::computeOffsets):
        (WebCore::RenderLayoutState::computeClipRect):
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::paint):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::addOverflowFromListMarker):
        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::addOverflowFromChildren):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::enclosingScrollableContainerForSnapping const):
        (WebCore::objectIsRelayoutBoundary):
        (WebCore::RenderObject::computeVisibleRectInContainer const):
        (WebCore::RenderObject::outputRenderObject const):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::hasNonVisibleOverflow const):
        (WebCore::RenderObject::setHasNonVisibleOverflow):
        (WebCore::RenderObject::RenderObjectBitfields::RenderObjectBitfields):
        (WebCore::RenderObject::hasOverflowClip const): Deleted.
        (WebCore::RenderObject::setHasOverflowClip): Deleted.
        * rendering/RenderScrollbarPart.cpp:
        (WebCore::RenderScrollbarPart::styleDidChange):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::nodeAtPoint):
        * rendering/RenderTableRow.h:
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::nodeAtPoint):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::canScroll const):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::styleDidChange):
        * rendering/RenderTreeAsText.cpp:
        * rendering/svg/RenderSVGBlock.cpp:
        (WebCore::RenderSVGBlock::updateFromStyle):

2021-07-14  Chris Dumez  <cdumez@apple.com>

        Fix type of exceptions thrown in the WebAudio API
        https://bugs.webkit.org/show_bug.cgi?id=227959

        Reviewed by Yusuke Suzuki.

        The upstream webaudio web-platform-tests were updated to validate the types of
        exceptions thrown by various WebAudio APIs. It became obvious that our implementation
        was not always throwing the right exception type and didn't match other browsers.

        This patch updates our WebAudio implementation to keep the WebAudio WPT tests passing
        now that they properly validate exception types.
        
        No new tests, re-sync'd and rebaselined existing WPT webaudio tests.

        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::create):
        * Modules/webaudio/AudioNode.cpp:
        (WebCore::AudioNode::connect):
        (WebCore::AudioNode::setChannelCount):
        * Modules/webaudio/BaseAudioContext.cpp:
        (WebCore::BaseAudioContext::createScriptProcessor):
        * Modules/webaudio/BiquadFilterNode.cpp:
        (WebCore::BiquadFilterNode::getFrequencyResponse):
        * Modules/webaudio/ChannelSplitterNode.cpp:
        (WebCore::ChannelSplitterNode::setChannelCount):
        * Modules/webaudio/OfflineAudioContext.cpp:
        (WebCore::OfflineAudioContext::create):
        * Modules/webaudio/ScriptProcessorNode.cpp:
        (WebCore::ScriptProcessorNode::setChannelCount):

2021-07-14  Devin Rousso  <drousso@apple.com>

        [iOS] REGRESSION(r279720): changing Subtitles to Off doesn't hide them or do anything
        https://bugs.webkit.org/show_bug.cgi?id=227937
        <rdar://problem/79069662>

        Reviewed by Eric Carlson.

        r279720 made it so that `CaptionUserPreferencesMediaAF::setCaptionDisplayMode` no longer
        directly modifies `kMACaptionAppearanceDomainUser` in the WebProcess, using a cached value
        as a way of preventing the WebProcess from trying to read back that value after it's set,
        instead having the UIProcess send `Messages::WebProcess::SetMediaAccessibilityPreferences`
        whenever this changes to update that cached value. Unfortunately, because the WebProcess
        needs to read this value immediately after changing it, this IPC round trip causes the
        WebProcess to read the old value, which results in no observable changes. In order to fix
        this, notify `CaptionUserPreferences` that `captionPreferencesChanged` when the above IPC
        message is received (which will also handle cases when the value changes outside WebKit).

        * Modules/mediacontrols/MediaControlsHost.cpp:
        (WebCore::MediaControlsHost::sortedTrackListForMenu):
        (WebCore::MediaControlsHost::displayNameForTrack):
        (WebCore::MediaControlsHost::captionDisplayMode const):
        (WebCore::MediaControlsHost::showMediaControlsContextMenu):
        * dom/Document.cpp:
        (WebCore::Document::registerForCaptionPreferencesChangedCallbacks):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::addTextTrack):
        (WebCore::HTMLMediaElement::configureTextTrackGroup):
        (WebCore::HTMLMediaElement::setSelectedTextTrack):
        (WebCore::HTMLMediaElement::captionPreferencesChanged):
        (WebCore::HTMLMediaElement::captionDisplayMode):
        (WebCore::HTMLMediaElement::mediaPlayerPreferredAudioCharacteristics const):
        * html/shadow/MediaControlTextTrackContainerElement.cpp:
        (WebCore::MediaControlTextTrackContainerElement::updateActiveCuesFontSize):
        (WebCore::MediaControlTextTrackContainerElement::updateTextStrokeStyle):
        * page/PageGroup.h:
        (WebCore::PageGroup::captionPreferences const): Added.
        * page/PageGroup.cpp:
        (WebCore::PageGroup::ensureCaptionPreferences): Added.
        (WebCore::PageGroup::captionPreferences): Deleted.
        * platform/cocoa/PlaybackSessionModelMediaElement.mm:
        (WebCore::PlaybackSessionModelMediaElement::updateMediaSelectionOptions):
        (WebCore::PlaybackSessionModelMediaElement::audioMediaSelectionOptions const):
        (WebCore::PlaybackSessionModelMediaElement::legibleMediaSelectionOptions const):
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::setShouldDisplayTrackKind):
        (WebCore::InternalSettings::shouldDisplayTrackKind):
        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState):
        (WebCore::Internals::Internals):
        (WebCore::Internals::userPreferredAudioCharacteristics const):
        (WebCore::Internals::setUserPreferredAudioCharacteristic):
        (WebCore::Internals::captionsStyleSheetOverride):
        (WebCore::Internals::setCaptionsStyleSheetOverride):
        (WebCore::Internals::setPrimaryAudioTrackLanguageOverride):
        (WebCore::Internals::setCaptionDisplayMode):
        Rename `PageGroup::captionPreferences` to `PageGroup::ensureCaptionPreferences` so that it's
        possible to get the `CaptionUserPreferences` without always creating it.

2021-07-14  Eric Carlson  <eric.carlson@apple.com>

        [iOS] Dynamically set capture attribution
        https://bugs.webkit.org/show_bug.cgi?id=227871
        rdar://70241665

        Reviewed by Jer Noble.

        No new tests, tested manually.

        * en.lproj/Localizable.strings:

2021-07-14  Said Abou-Hallawa  <said@apple.com>

        RenderElement::updateFillImages must fix the clients of the CSS image whose URL is invalid
        https://bugs.webkit.org/show_bug.cgi?id=227926
        <rdar://80457956>

        Reviewed by Simon Fraser.

        Per CSS2 specs, if the value of the url() is the empty string, then it
        must be resolved to the URL of the style sheet which is an invalid URI
        for an image. The issue https://github.com/w3c/csswg-drafts/issues/2211
        was filed to change this behavior.

        In RenderElement::updateFillImages() we fix the old and new fill images
        only if they are different. But we consider them equal if their URIs are
        equal and they are not data URIs. If the two URIs are empty strings, the
        fill images will be considered equal although their CachedImages might
        be different.

        We need to fix the clients of the fill images always if their CachedImages 
        have errorOccured() true or have hasImage() false.

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::updateFillImages):
        * rendering/style/StyleCachedImage.cpp:
        (WebCore::StyleCachedImage::hasImage const):
        * rendering/style/StyleCachedImage.h:
        * rendering/style/StyleImage.h:
        (WebCore::StyleImage::hasImage const):

2021-07-13  Jean-Yves Avenard  <jya@apple.com>

        MediaSessionManagerCocoa::ensureCodecsRegistered() isn't thread-safe
        https://bugs.webkit.org/show_bug.cgi?id=227940

        Reviewed by Maciej Stachowiak.

        C++11 static initializers aren't thread-safe due to architectural and compilation
        option choices. So we use Grand Central Dispatch's dispatch_once instead.

        * platform/audio/cocoa/MediaSessionManagerCocoa.mm:
        (WebCore::MediaSessionManagerCocoa::ensureCodecsRegistered):

2021-07-13  Jean-Yves Avenard  <jya@apple.com>

        SourceBuffer.abort() doesn't go back to state WAITING_FOR_SEGMENT properly
        https://bugs.webkit.org/show_bug.cgi?id=227559
        <rdar://problem/79996056>

        Reviewed by Jer Noble.

        Per spec, calling sourcebuffer.abort method should allow you to add a new segment
        immediately after, as abort moves the append state back to WAITING_FOR_SEGMENT.
        A segment can be either an init segment or a media segment.
        We used to discard all further content until an init segment was encountered.
        This could be problematic due to the typical use case of abort:
        1- Seek to a location
        2- Append a partial media segment long enough to finish seeking and display the
         new content at the new position.
        If multiple seeks were done in rapid succession, abort() is called right after
        before starting the new seek so that we can add the new segment, regardless of what
        was appended before.
        YouTube applies a workaround for Safari where it will always append an init segment
        after calling abort, this is different to what they do with Firefox (and likely Chrome).
        To be able to resume after appending a partial media segment we must ensure that the
        SourceBufferParser is always left in a sane context, and not be interrupted at some
        random points. The abort() call used to interrupt the buffer parsing on the fly and
        then reset things which would require a new init segment to restart.
        Instead we always fully parse the pending buffer received befofe the call to abort
        and drop all demuxed samples.
        The SourceBufferParserAVFObjC could already properly deal with discontinuity unlike
        SourceBufferParserWebM.
        To ensure that buffers sent after the call to abort() are only ever processed once
        the pending ones have been parsed, and in order to avoid having blocking calls
        we play with the order in which tasks are scheduled.

        Fly-by fixes:
        - The SourceBufferParser handle two type of parser: SourceBufferParser and the
        platform specific AVStreamDataParser. Rename the accessor method to more clearly
        differentate which parser we are dealing with.
        - The SourceBufferParserWebM and SourceBufferPrivateAVFObjC used different task dispatching
        mechanisms. We make them both share the same one now found in the base class.
        - If SourceBufferPrivateAVFObjC::m_hasPendingAppendCompletedCallback had been set prior an
        abort() it wouldn't have been reset, causing the need for a new init segment.
        - If abort() had been called while samples were pending, the source buffer content was
        undefined if timestamp offset or append windows start/end were changed immediately after.
        - When an error occurs during the Segment Parser Loop, we should abort and run the append
        error algorithm. We instead fired an error event for each sample found in the media segment.
        In a debug built it was have asserted. We can't actually abort, so instead we ignore all
        further samples once an error is encountered.

        Tests: media/media-source/media-mp4-h264-partial-abort.html
               media/media-source/media-webm-opus-partial-abort.html

        * platform/graphics/avfoundation/objc/CDMSessionAVContentKeySession.mm:
        (WebCore::CDMSessionAVContentKeySession::~CDMSessionAVContentKeySession): rename method.
        * platform/graphics/avfoundation/objc/CDMSessionAVStreamSession.mm:
        (WebCore::CDMSessionAVStreamSession::~CDMSessionAVStreamSession): rename method.
        (WebCore::CDMSessionAVStreamSession::update): rename method.
        * platform/graphics/avfoundation/objc/CDMSessionMediaSourceAVFObjC.mm: rename method.
        (WebCore::CDMSessionMediaSourceAVFObjC::addSourceBuffer): rename method.
        (WebCore::CDMSessionMediaSourceAVFObjC::removeSourceBuffer): rename method.
        * platform/graphics/avfoundation/objc/SourceBufferParserAVFObjC.h: rename method, remove
        now unused member.
        * platform/graphics/avfoundation/objc/SourceBufferParserAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::removeCodedFrames): Postpone call to ensure
        we are running the remove frame algorithm once all pending frames have been processed.
        (WebCore::SourceBufferParserAVFObjC::resetParserState): Remove use of m_discardSamplesUntilNextInitializationSegment.
        (WebCore::SourceBufferParserAVFObjC::didParseStreamDataAsAsset): Change to base dispatch method.
        (WebCore::SourceBufferParserAVFObjC::didFailToParseStreamDataWithError): Change to base dispatch method.
        (WebCore::SourceBufferParserAVFObjC::didProvideMediaDataForTrackID): Change to base dispatch method.
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h: Rename methods. Remove no longer used
        members.
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::~SourceBufferPrivateAVFObjC):
        (WebCore::SourceBufferPrivateAVFObjC::didParseInitializationData): No longer use a Cancellable task
        as we never cancel it anymore.
        (WebCore::SourceBufferPrivateAVFObjC::append): re-schedule the append task immediately to ensure
        that processed packets flushed on the parser queue during abort are handled in the right order on
        the main thread.
        (WebCore::SourceBufferPrivateAVFObjC::appendCompleted): Check that abort wasn't called since append started
        to ensure that no updateend event is incorrectly fired twice.
        (WebCore::SourceBufferPrivateAVFObjC::abort): Abort is now a no-op that only set the m_abortCalled member.
        (WebCore::SourceBufferPrivateAVFObjC::resetParserState): Change the order of operations so that the
        SourceBufferParser is only reset after it has finished processing its data.
        (WebCore::SourceBufferPrivateAVFObjC::destroyStreamDataParser): Use rename method.
        (WebCore::SourceBufferPrivateAVFObjC::removedFromMediaSource): Use rename method.
        (WebCore::SourceBufferPrivateAVFObjC::streamDataParser const): Renamed method from "parser"
        (WebCore::SourceBufferPrivateAVFObjC::attemptToDecrypt): Use renamed method.
        * platform/graphics/cocoa/SourceBufferParser.cpp:
        (WebCore::callOnMainThreadCallback): Move dispatch method from SourceBufferParserWebM
        (WebCore::SourceBufferParser::setCallOnClientThreadCallback):
        (WebCore::SourceBufferParser::SourceBufferParser):
        * platform/graphics/cocoa/SourceBufferParser.h:
        * platform/graphics/cocoa/SourceBufferParserWebM.cpp:
        (WebCore::SourceBufferParserWebM::SourceBufferParserWebM):
        (WebCore::SourceBufferParserWebM::resetParserState): Don't clear the data set by parsing
        the previous init segment. Set the parsing state to waiting for a new segment if an
        init segment has been fully parsed.
        (WebCore::SourceBufferParserWebM::OnElementEnd):
        (WebCore::SourceBufferParserWebM::OnEbml):
        (WebCore::SourceBufferParserWebM::VideoTrackData::reset):
        (WebCore::SourceBufferParserWebM::VideoTrackData::consumeFrameData):
        (WebCore::SourceBufferParserWebM::AudioTrackData::reset):
        * platform/graphics/cocoa/SourceBufferParserWebM.h:

2021-07-13  Alex Christensen  <achristensen@webkit.org>

        >4K Referer should have tailing /
        https://bugs.webkit.org/show_bug.cgi?id=227795

        Reviewed by Chris Dumez.

        This matches the behavior of other browsers.
        Covered by existing tests and web platform tests we haven't imported yet.

        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::setHTTPReferrer):

2021-07-13  Said Abou-Hallawa  <said@apple.com>

        [CG] REGRESSION(r278863): The destination rectangle is truncated when the sub-image is used
        https://bugs.webkit.org/show_bug.cgi?id=227614
        <rdar://79840643>

        Reviewed by Simon Fraser.

        This patch gets the calculation of the destRect in the case of the sub-
        image as it was before r278863.

        The size of the destRect has to be equal to the backend size of the
        ImageBuffer in logical coordinates.

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContextCG::drawNativeImage):

2021-07-13  Kyle Piddington  <kpiddington@apple.com>

        rAF driven WebGL submits excessive amount of GPU work when frames are slow
        https://bugs.webkit.org/show_bug.cgi?id=227059

        Reviewed by Dean Jackson.

        Advertise GL_ARB_sync for the Metal backend.
    Since GL_ARB_sync is core in OpenGL ES 3.0 and the Metal backend advertises OpenGL ES 3.0,
    the API must be working already.

        Limit in-flight WebGL frames to three frames. Do not continue preparation for display
    until the commands for the oldest frame have been executed by the GPU.

        This limits the impact slow frames have, especially in the
    case where the compositor skip frames and WebKit would issue a new slow frame
    on top of the skipped frame.

        An additional change ensures that Nvidia configs, which do not support MTLEvents
        to a level of conformance required (See http://crbug.com/1136673), continue to run. The more powerful eGPUs will not experience throttling to the same level as integrated GPUS.


        * Headers.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/GraphicsContextGLAttributes.h:
        * platform/graphics/angle/GraphicsContextGLANGLE.cpp:
        (WebCore::GraphicsContextGLOpenGL::waitAndUpdateOldestFrame):
        * platform/graphics/angle/GraphicsContextGLANGLEUtilities.h:
        (WebCore::ScopedGLFence::ScopedGLFence):
        (WebCore::ScopedGLFence::~ScopedGLFence):
        (WebCore::ScopedGLFence::operator=):
        (WebCore::ScopedGLFence::reset):
        (WebCore::ScopedGLFence::abandon):
        (WebCore::ScopedGLFence::fenceSync):
        (WebCore::ScopedGLFence::operator GLsync const):
        (WebCore::ScopedGLFence::operator bool const):
        * platform/graphics/cocoa/GraphicsContextGLOpenGLCocoa.mm:
        (WebCore::InitializeEGLDisplay):
        (WebCore::GraphicsContextGLOpenGL::GraphicsContextGLOpenGL):
        (WebCore::GraphicsContextGLOpenGL::~GraphicsContextGLOpenGL):
        (WebCore::GraphicsContextGLOpenGL::prepareForDisplay):
        * platform/graphics/opengl/GraphicsContextGLOpenGL.h:

2021-07-13  Chris Dumez  <cdumez@apple.com>

        Revoking Blob URL after calling XMLHttpRequest::open() causes the XHR to fail
        https://bugs.webkit.org/show_bug.cgi?id=227821

        Reviewed by Alex Christensen.

        Revoking Blob URL after calling XMLHttpRequest::open() causes the XHR to fail. This doesn't match the behavior of
        other browsers and is causing WebKit to fail one of the subtests on:
        - http://wpt.live/FileAPI/url/url-with-xhr.any.html

        XMLHttpRequest::open() now extends the lifetime of the Blob URL as necessary in order to complete the load.

        No new tests, rebaselined existing tests.

        * fileapi/BlobURL.cpp:
        (WebCore::URLWithBlobURLLifetimeExtension::URLWithBlobURLLifetimeExtension):
        (WebCore::URLWithBlobURLLifetimeExtension::~URLWithBlobURLLifetimeExtension):
        * fileapi/BlobURL.h:
        (WebCore::BlobURLLifeTimeExtender::url const):
        * loader/PolicyChecker.cpp:
        (WebCore::FrameLoader::PolicyChecker::extendBlobURLLifetimeIfNecessary const):
        (WebCore::FrameLoader::PolicyChecker::checkNavigationPolicy):
        * loader/PolicyChecker.h:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::XMLHttpRequest):
        (WebCore::XMLHttpRequest::setResponseType):
        (WebCore::XMLHttpRequest::open):
        (WebCore::XMLHttpRequest::prepareToSend):
        (WebCore::XMLHttpRequest::send):
        (WebCore::XMLHttpRequest::createRequest):
        * xml/XMLHttpRequest.h:

2021-07-13  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Allow runtime opt-out of GL rendering
        https://bugs.webkit.org/show_bug.cgi?id=227873

        Reviewed by Xabier Rodriguez-Calvar.

        In some cases GL rendering is not really useful, such as on machines without GPU. In those
        cases currently Mesa's llvmpipe is used, introducing CPU and RAM usage increase compared to
        the non-gl rendering path. For these cases the user can set a new env var,
        WEBKIT_GST_DISABLE_GL_SINK=1, allowing the player to use the Cairo sink.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::createVideoSinkGL):

2021-07-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Expose support for client certificate auth
        https://bugs.webkit.org/show_bug.cgi?id=200805

        Reviewed by Michael Catanzaro.

        * platform/Soup.cmake:
        * platform/SourcesSoup.txt:
        * platform/network/Credential.h:
        * platform/network/ProtectionSpaceBase.cpp:
        (WebCore::ProtectionSpaceBase::isPasswordBased const):
        * platform/network/ProtectionSpaceBase.h:
        * platform/network/soup/AuthenticationChallenge.h:
        * platform/network/soup/AuthenticationChallengeSoup.cpp:
        (WebCore::protectionSpaceForClientCertificate):
        (WebCore::AuthenticationChallenge::AuthenticationChallenge):
        (WebCore::protectionSpaceForClientCertificatePassword):
        (WebCore::AuthenticationChallenge::platformCompare):
        * platform/network/soup/CertificateInfoSoup.cpp:
        (WebCore::CertificateInfo::isolatedCopy const):
        * platform/network/soup/CredentialSoup.cpp: Added.
        (WebCore::Credential::Credential):
        (WebCore::m_certificate):
        (WebCore::Credential::isEmpty const):
        (WebCore::Credential::platformCompare):
        * platform/network/soup/CredentialSoup.h: Added.
        (WebCore::Credential::Credential):
        (WebCore::Credential::encodingRequiresPlatformData const):
        (WebCore::Credential::certificate const):
        * platform/network/soup/NetworkStorageSessionSoup.cpp:
        (WebCore::authTypeFromProtectionSpaceAuthenticationScheme):

2021-07-13  Martin Robinson  <mrobinson@igalia.com>

        RenderLayerScrollableArea::updateScrollPosition assumes that it can scroll to the targeted scroll position
        https://bugs.webkit.org/show_bug.cgi?id=227803

        Reviewed by Simon Fraser.

        No new tests. This is covered by an existing WPT test:
          - web-platform-tests/css/css-scroll-snap/nested-scrollIntoView-snaps.html

        * rendering/RenderLayerScrollableArea.cpp:
        (WebCore::RenderLayerScrollableArea::scrollToOffset): Modified this method to return the snapped
        scroll offset.
        (WebCore::RenderLayerScrollableArea::updateScrollPosition): Instead of using the original target offset,
        use the return value from scrollToOffset to adjust the output rectangle.
        * rendering/RenderLayerScrollableArea.h: Update the method definition.

2021-07-13  Myles C. Maxfield  <mmaxfield@apple.com>

        PUA characters have the wrong advance in the fast text codepath
        https://bugs.webkit.org/show_bug.cgi?id=227896
        <rdar://problem/80037103>

        Reviewed by Tim Horton.

        There were 2 problems:
        1. We were passing a UChar32 to this function:
               static bool treatAsSpace(UChar c) { return c == ' ' ... }
               This means that passing in U+10020 erroneously returns true
        2. Because of https://bugs.webkit.org/show_bug.cgi?id=221356,
               if the prevous character is in SMP, our logic to determine
               the previous advance would erroneously return 0.

        Test: fast/text/pua-charactersTreatedAsSpace.html

        * platform/graphics/FontCascade.h:
        (WebCore::FontCascade::treatAsSpace):
        (WebCore::FontCascade::treatAsZeroWidthSpace):
        (WebCore::FontCascade::treatAsZeroWidthSpaceInComplexScript):
        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::advanceInternal):

2021-07-13  Myles C. Maxfield  <mmaxfield@apple.com>

        Fix the Apple internal iOS Simulator build

        Unreviewed.

        * dom/Node.h:

2021-07-12  Fujii Hironori  <Hironori.Fujii@sony.com>

        [curl] Can't finish loading some websites after r271946 started throttling low priority resources
        https://bugs.webkit.org/show_bug.cgi?id=227863

        Reviewed by Don Olmstead.

        NetworkLoadScheduler started throttling low priority resource
        loading since r271946. It uses curl_easy_pause to pause the
        resource loads. CURLMOPT_MAX_HOST_CONNECTIONS is set to 6 to limit
        the number of connections per host. In the certain condition,
        curl_multi_fdset can constantly return -1 if 6 handles of the same
        host are paused.

        This patch changes CurlRequest::start not to actually start the
        job if it is suspended.

        * platform/network/curl/CurlRequest.cpp:
        (WebCore::CurlRequest::start):
        (WebCore::CurlRequest::suspend):
        (WebCore::CurlRequest::resume):
        (WebCore::CurlRequest::setupTransfer):
        (WebCore::CurlRequest::setRequestPaused):
        * platform/network/curl/CurlRequest.h:

2021-07-12  Tim Horton  <timothy_horton@apple.com>

        BifurcatedGraphicsContext can't draw text
        https://bugs.webkit.org/show_bug.cgi?id=227883

        Reviewed by Wenson Hsieh.

        API test: BifurcatedGraphicsContextTests.TextInBifurcatedContext

        * platform/graphics/BifurcatedGraphicsContext.cpp:
        (WebCore::BifurcatedGraphicsContext::save):
        (WebCore::BifurcatedGraphicsContext::restore):
        (WebCore::BifurcatedGraphicsContext::paintFrameForMedia):
        (WebCore::BifurcatedGraphicsContext::drawText):
        (WebCore::BifurcatedGraphicsContext::drawGlyphs):
        (WebCore::BifurcatedGraphicsContext::drawEmphasisMarks):
        (WebCore::BifurcatedGraphicsContext::drawBidiText):
        * platform/graphics/BifurcatedGraphicsContext.h:
        Bifurcate a few methods I somehow missed in the original patch.

        Also, call GraphicsContext's implementation of save and restore
        from the overridden version, because we confusingly currently use
        the top-level context's state stack.

2021-07-12  Simon Fraser  <simon.fraser@apple.com>

        Add a StyleSheets log channel and some logging
        https://bugs.webkit.org/show_bug.cgi?id=227880

        Reviewed by Alan Bujtas.

        Add some logging to help debug issues when pages dynamically build style sheets.

        Also make Document loggable.

        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::insertRule):
        (WebCore::CSSStyleSheet::deleteRule):
        (WebCore::CSSStyleSheet::addRule):
        (WebCore::CSSStyleSheet::debugDescription const):
        * css/CSSStyleSheet.h:
        * css/StyleSheet.cpp:
        (WebCore::operator<<):
        * css/StyleSheet.h:
        * dom/Document.cpp:
        (WebCore::Document::debugDescription const):
        (WebCore::operator<<):
        * dom/Document.h:
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::process):
        (WebCore::HTMLLinkElement::debugDescription const):
        * html/HTMLLinkElement.h:
        * platform/Logging.h:
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::dumpProperties const):
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::imageBufferResult):
        * style/StyleScope.cpp:
        (WebCore::Style::Scope::addPendingSheet):
        (WebCore::Style::Scope::addStyleSheetCandidateNode):
        (WebCore::Style::Scope::collectActiveStyleSheets):
        (WebCore::Style::Scope::updateActiveStyleSheets):
        * xml/XSLStyleSheet.h:
        * xml/XSLStyleSheetLibxslt.cpp:
        (WebCore::XSLStyleSheet::debugDescription const):

2021-07-12  Chris Dumez  <cdumez@apple.com>

        Unreviewed, partial revert of r279661 to address crashes on iOS Debug.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::removeAllEventListeners):

2021-07-12  Wenson Hsieh  <wenson_hsieh@apple.com>

        [watchOS] Make a few additional adjustments to support system minimum layout margins
        https://bugs.webkit.org/show_bug.cgi?id=227859
        rdar://80113612

        Reviewed by Tim Horton.

        Reduce the default minimum viewport scale on watchOS to avoid horizontal scrolling when loading wide fixed-
        viewport-width web content. See WebKit ChangeLog for more details.

        * page/ViewportConfiguration.cpp:
        (WebCore::platformDeviceWidthOverride):
        (WebCore::platformMinimumScaleForWebpage):
        (WebCore::shouldOverrideShrinkToFitArgument):
        (WebCore::ViewportConfiguration::nativeWebpageParametersWithShrinkToFit):
        (WebCore::ViewportConfiguration::webpageParameters):

2021-07-12  Tyler Wilcock  <twilco.o@protonmail.com>

        AX: Add ARIA role "image" as a new role, and leave "img" as a synonym
        https://bugs.webkit.org/show_bug.cgi?id=224615

        Reviewed by Chris Fleizach.

        Test: accessibility/image-role-is-synonomous-with-img-role.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::initializeRoleMap):
        Add "image" ARIA role as a synonym for the "img" ARIA role, both of
        which map to the AccessibilityRole::Image WebCore representation.

        Also hardcode the ARIA reverse role map to return "image" for
        the AccessibilityRole::Image key.

2021-07-12  Alexander Mikhaylenko  <alexm@gnome.org>

        [GTK][WPE] Support drawing scrollbar corner
        https://bugs.webkit.org/show_bug.cgi?id=227868

        Reviewed by Michael Catanzaro.

        With dark scrollbars supported, the lack of scroll corner for non-overlay
        scrollbars becomes very noticeable. Implement it.

        To properly draw them, we need to know whether scrollbars are dark, and whether
        the vertical scrollbar is on the left. Hence, pass ScrollableArea to
        paintScrollCorner() so we can query it.

        Only cover non-system scrollbars, it would take considerable amount of work to
        make it work for system as well.

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::paintScrollCorner):
        * platform/ScrollbarTheme.h:
        (WebCore::ScrollbarTheme::paintScrollCorner):
        (WebCore::ScrollbarTheme::defaultPaintScrollCorner):
        * platform/adwaita/ScrollbarThemeAdwaita.cpp:
        (WebCore::ScrollbarThemeAdwaita::paintScrollCorner):
        * platform/adwaita/ScrollbarThemeAdwaita.h:
        * platform/mac/ScrollbarThemeMac.h:
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::paintScrollCorner):
        * rendering/RenderLayerScrollableArea.cpp:
        (WebCore::RenderLayerScrollableArea::paintScrollCorner):
        * rendering/RenderScrollbarTheme.cpp:
        (WebCore::RenderScrollbarTheme::paintScrollCorner):
        * rendering/RenderScrollbarTheme.h:

2021-07-12  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        Unreviewed, reverting r279778.

        It caused unexpected text diffs on http/tests/storageAccess
        tests

        Reverted changeset:

        "[GTK][WPE][libsoup] Test imported/w3c/web-platform-
        tests/cookies/samesite/about-blank-toplevel.https.html crashes
        since it was imported"
        https://bugs.webkit.org/show_bug.cgi?id=227819
        https://commits.webkit.org/r279778

2021-07-12  Alexander Mikhaylenko  <alexm@gnome.org>

        [GTK][WPE] Match Adwaita scrollbars more closely
        https://bugs.webkit.org/show_bug.cgi?id=227870

        Reviewed by Michael Catanzaro.

        Adjust the dimensions to match GTK as closely as possible.

        * platform/adwaita/ScrollbarThemeAdwaita.cpp:
        (WebCore::ScrollbarThemeAdwaita::paint):

2021-07-12  Alexander Mikhaylenko  <alexm@gnome.org>

        [GTK] Adwaita entries should follow the system cursor blink settings
        https://bugs.webkit.org/show_bug.cgi?id=227856

        Reviewed by Adrian Perez de Castro.

        Get the caret blink interval from GtkSettings if available, same as it was done
        for the GTK theme before.

        * rendering/RenderThemeAdwaita.cpp:
        (WebCore::RenderThemeAdwaita::caretBlinkInterval const):
        * rendering/RenderThemeAdwaita.h:

2021-07-12  Alexander Mikhaylenko  <alexm@gnome.org>

        [GTK4] Scrollbar click doesn't work as expected when native scrollbars are off
        https://bugs.webkit.org/show_bug.cgi?id=226331

        Reviewed by Carlos Garcia Campos.

        Make Adwaita scrollbar theme follow the GTK setting if possible.

        * platform/adwaita/ScrollbarThemeAdwaita.cpp:
        (WebCore::ScrollbarThemeAdwaita::handleMousePressEvent):

2021-07-11  Chris Dumez  <cdumez@apple.com>

        :link and :visited pseudo-class selectors should not match <link> elements
        https://bugs.webkit.org/show_bug.cgi?id=227847

        Reviewed by Sam Weinig.

        :link, :visited and :any-link should only match <a> and <area> elements as per:
        - https://drafts.csswg.org/selectors/#the-any-link-pseudo

        Blink and Gecko match the specification. However, WebKit was incorrectly matching
        <link> elements too.

        No new tests, rebaselined existing tests.

        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::parseAttribute):

2021-07-11  Chris Dumez  <cdumez@apple.com>

        XMLSerializer.serializeToString() doesn't properly escape \n, \n and \t
        https://bugs.webkit.org/show_bug.cgi?id=227844

        Reviewed by Darin Adler.

        XMLSerializer.serializeToString() doesn't properly escape \n, \n and \t.

        This is causing the "check XMLSerializer.serializeToString escapes attribute values for roundtripping" subtest to fail in WebKit on:
        http://wpt.live/domparsing/XMLSerializer-serializeToString.html

        Chrome and Firefox both escape these and pass this WPT subtest.

        The specification does not indicate we should escape those:
        - https://w3c.github.io/DOM-Parsing/#dfn-serializing-an-attribute-value
        But there is an open bug about this:
        - https://github.com/w3c/DOM-Parsing/issues/59

        No new tests, rebaselined existing test.

        * editing/MarkupAccumulator.cpp:
        (WebCore::elementCannotHaveEndTag):
        * editing/MarkupAccumulator.h:

2021-07-10  Chris Dumez  <cdumez@apple.com>

        document.readyState should be "complete" after calling DOMParser.parseFromString()
        https://bugs.webkit.org/show_bug.cgi?id=227846

        Reviewed by Ryosuke Niwa.

        document.readyState should be "complete" after calling DOMParser.parseFromString().

        This is causing the following WPT test to fail in WebKit:
        http://wpt.live/domparsing/xmldomparser.html

        Both Gecko and Blink report the correct readyState here.

        No new tests, rebaselined existing test.

        * dom/Document.cpp:
        (WebCore::Document::explicitClose):
        explicitClose() normally calls checkCompleted() which calls FrameLoader::checkCompleted(),
        which ends up setting the document's ready state to "complete" and then calling
        Document::implicitClose(). However, when the document has no frame (which is the case
        for a document just created via DOMParser.parseFromString()), we would call
        Document::implicitClose() directly, since we don't have a FrameLoader. As a result,
        the document's ready state would stay "interactive". To address the issue, we now set
        the document's ready state to "complete" before calling implicitClose(), similarly to
        what FrameLoader::checkCompleted() would have done.

2021-07-10  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r279803.
        https://bugs.webkit.org/show_bug.cgi?id=227850

        Introduce many crashes on AS-mac Debug bot

        Reverted changeset:

        "document.readyState should be "complete" after calling
        DOMParser.parseFromString()"
        https://bugs.webkit.org/show_bug.cgi?id=227846
        https://commits.webkit.org/r279803

2021-07-09  Chris Dumez  <cdumez@apple.com>

        document.readyState should be "complete" after calling DOMParser.parseFromString()
        https://bugs.webkit.org/show_bug.cgi?id=227846

        Reviewed by Ryosuke Niwa.

        document.readyState should be "complete" after calling DOMParser.parseFromString().

        This is causing the following WPT test to fail in WebKit:
        http://wpt.live/domparsing/xmldomparser.html

        Both Gecko and Blink report the correct readyState here.

        No new tests, rebaselined existing test.

        * dom/Document.cpp:
        (WebCore::Document::explicitClose):
        explicitClose() normally calls checkCompleted() which calls FrameLoader::checkCompleted(),
        which ends up setting the document's ready state to "complete" and then calling
        Document::implicitClose(). However, when the document has no frame (which is the case
        for a document just created via DOMParser.parseFromString()), we would call
        Document::implicitClose() directly, since we don't have a FrameLoader. As a result,
        the document's ready state would stay "interactive". To address the issue, we now set
        the document's ready state to "complete" before calling implicitClose(), similarly to
        what FrameLoader::checkCompleted() would have done.

2021-07-09  Chris Dumez  <cdumez@apple.com>

        [ITP] Improve ResourceLoadStatisticsDatabaseStore's buildList() and use it in more places
        https://bugs.webkit.org/show_bug.cgi?id=227843

        Reviewed by Sam Weinig.

        Support passing a RegistrableDomain directly to StringBuilder::append().

        * platform/RegistrableDomain.h:

2021-07-09  Ryosuke Niwa  <rniwa@webkit.org>

        ResizeObserver / IntersectionObserver memory leak on detached & out of reference elements
        https://bugs.webkit.org/show_bug.cgi?id=227194
        <rdar://problem/79839851>

        Reviewed by Chris Dumez.

        The memory leak was caused by ResizeObserver and IntersectionObserver keeping their respective
        JS wrapper objects alive so long as there are some observed elements by having pending
        activity as ActiveDOMObjects. This is not the right GC model for these JS wrapper objects
        since there is no obvious end to these activities. So long as the observed nodes are alive,
        ResizeObserver and IntersectionObserver may get new observation entries queued later.

        To address this issue, this patch reworks the way ResizeObserver and IntersectionObserver keep
        their JS wrappers alive. Namely, they're no longer ActiveDOMObjects. Instead, their JS wrappers
        would use their respective observed nodes as opaque roots. i.e. so long as any of the observed
        nodes are kept alive by GC, then its observer's JS wrapper is kept alive.

        ResizeObserver had an additional bug that every observed node was kept using GCReachableRef,
        which obviously leaked every observed node until the observations were explicitly cleared.
        This patch makes only the target elements of the active observations (i.e. there are entries
        to be delivered to the observer callback) are kept alive with GCReachableRef as done with
        IntersectionObserver and MutationObserver.

        Finally, this patch fixes the bug that IntersectionObserver wasn't keeping its root node alive.
        We even had a test which was testing this erroneously behavior. The test has been rewritten to
        expect the new behavior.

        Tests: intersection-observer/intersection-observer-should-not-leak-observed-nodes.html
               intersection-observer/root-element-deleted.html
               resize-observer/resize-observer-should-not-leak-observed-nodes.html

        * bindings/js/JSIntersectionObserverCustom.cpp:
        (WebCore::JSIntersectionObserver::visitAdditionalChildren): Add the root node as an opaque root.
        This has an effect of keeping the root node alive so long as IntersectionObserver is alive.
        (WebCore::JSIntersectionObserverOwner::isReachableFromOpaqueRoots): Added.
        * bindings/js/JSResizeObserverCustom.cpp:
        (WebCore::JSResizeObserverOwner::isReachableFromOpaqueRoots): Added.
        * dom/Document.cpp:
        (WebCore::Document::updateIntersectionObservations):
        * html/LazyLoadFrameObserver.cpp:
        (WebCore::LazyLoadFrameObserver::isObserved const):
        * html/LazyLoadImageObserver.cpp:
        (WebCore::LazyLoadImageObserver::isObserved const):
        * page/IntersectionObserver.cpp:
        (WebCore::IntersectionObserver::create):
        (WebCore::IntersectionObserver::IntersectionObserver):
        (WebCore::IntersectionObserver::~IntersectionObserver):
        (WebCore::IntersectionObserver::isObserving const): Added.
        (WebCore::IntersectionObserver::observe):
        (WebCore::IntersectionObserver::virtualHasPendingActivity const): Deleted.
        (WebCore::IntersectionObserver::activeDOMObjectName const): Deleted.
        (WebCore::IntersectionObserver::stop): Deleted.
        (WebCore::IntersectionObserver::isReachableFromOpaqueRoots const): Added.
        * page/IntersectionObserver.h:
        (WebCore::IntersectionObserver::root const):
        (WebCore::IntersectionObserver::observationTargets const):
        (WebCore::IntersectionObserver::hasObservationTargets const):
        * page/IntersectionObserver.idl:
        * page/ResizeObservation.cpp:
        (WebCore::ResizeObservation::create):
        (WebCore::ResizeObservation::ResizeObservation):
        (WebCore::ResizeObservation::targetElementDepth const):
        * page/ResizeObservation.h:
        (WebCore::ResizeObservation::target const):
        (WebCore::ResizeObservation): Renamed m_pendingTargets to m_activeObservationTargets to reflect
        the new semantics.
        * page/ResizeObserver.cpp:
        (WebCore::ResizeObserver::ResizeObserver):
        (WebCore::ResizeObserver::observe): Don't store the new observation target with GCReachableRef as
        that would result in an immediate leak of this element.
        (WebCore::ResizeObserver::gatherObservations): Now that we have an active observation (i.e. there
        is an entry to be delivered to the JS callback), store the target element using GCReachableRef.
        This keeps the JS wrapper of this target element alive between now and when the JS callback is
        notified of this element's resize. Without this GCReachableRef, JS wrapper of the element can be
        erroneously collected when there is no JS reference to the element and the element is no longer in
        any live document. Note that this GC behavior is already tested by existing tests. This patch
        simply delays the use of GCReachableRef from when ResizeObserver started observing this element
        to when we created an active observation for the element; this is because GCReachableRef like
        a pending activity of ActiveDOMObject is only appropriate when there is a definite end to it.
        (WebCore::ResizeObserver::isReachableFromOpaqueRoots const): Added.
        (WebCore::ResizeObserver::removeAllTargets):
        (WebCore::ResizeObserver::removeObservation):
        (WebCore::ResizeObserver::virtualHasPendingActivity const): Deleted.
        (WebCore::ResizeObserver::activeDOMObjectName const): Deleted.
        (WebCore::ResizeObserver::stop): Deleted.
        * page/ResizeObserver.h:
        * page/ResizeObserver.idl:

2021-07-09  Aditya Keerthi  <akeerthi@apple.com>

        [iOS] Increase contrast for textfields, checkboxes, and radio buttons
        https://bugs.webkit.org/show_bug.cgi?id=227145
        <rdar://problem/79470926>

        Reviewed by Wenson Hsieh.

        Updated textfields, checkboxes, and radio buttons to have a
        secondaryLabelColor border, ensuring a higher contrast than the
        existing appearance.

        Additionally, checkboxes and radio buttons have been updated
        to use the system fill color when empty.

        * css/html.css:
        * rendering/RenderThemeIOS.h:
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::checkboxRadioBorderColor):
        (WebCore::RenderThemeIOS::checkboxRadioBackgroundColor):
        (WebCore::RenderThemeIOS::paintCheckbox):
        (WebCore::RenderThemeIOS::paintRadio):

2021-07-09  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Cairo][Win] Remove unneeded GraphicsContextPlatformPrivate
        https://bugs.webkit.org/show_bug.cgi?id=227828

        Reviewed by Don Olmstead.

        GraphicsContextPlatformPrivate keeps HDC's transform syncing with
        GraphicsContext's transform. However, WinCairo doesn't use it.

        * platform/graphics/BifurcatedGraphicsContext.cpp:
        * platform/graphics/BifurcatedGraphicsContext.h:
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/NullGraphicsContext.h:
        * platform/graphics/cairo/CairoOperations.cpp:
        (WebCore::Cairo::State::setCTM):
        (WebCore::Cairo::translate):
        (WebCore::Cairo::rotate):
        (WebCore::Cairo::scale):
        (WebCore::Cairo::concatCTM):
        (WebCore::Cairo::clip):
        (WebCore::Cairo::clipPath):
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContextCairo::GraphicsContextCairo):
        (WebCore::GraphicsContextCairo::save):
        (WebCore::GraphicsContextCairo::restore):
        (WebCore::GraphicsContextCairo::graphicsContextPrivate): Deleted.
        * platform/graphics/cairo/GraphicsContextCairo.h:
        * platform/graphics/cairo/GraphicsContextPlatformPrivateCairo.h: Removed.
        * platform/graphics/win/GraphicsContextCairoWin.cpp:
        (WebCore::GraphicsContext::releaseWindowsContext):
        (WebCore::GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate): Deleted.
        (WebCore::GraphicsContextPlatformPrivate::flush): Deleted.
        (WebCore::GraphicsContextCairo::deprecatedPrivateContext const): Deleted.
        * platform/graphics/win/GraphicsContextWin.cpp:
        (WebCore::GraphicsContext::getWindowsContext):
        * platform/win/DragImageCairoWin.cpp:

2021-07-09  Myles C. Maxfield  <mmaxfield@apple.com>

        SVGImageForContainer reports true for is<SVGImage>() but it doesn't inherit from SVGImage
        https://bugs.webkit.org/show_bug.cgi?id=227807

        Reviewed by Said Abou-Hallawa.

        It's too easy to write code like:
        if (is<SVGImage>(image))
            downcast<SVGImage>(image).doSomething();

        Test: SVGImageCasts.SVGImageForContainerIsNotSVGImage

        * WebCore.xcodeproj/project.pbxproj:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::remoteSVGRootElement const):
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::effectiveImageDevicePixelRatio const):
        * html/canvas/CanvasRenderingContext2DBase.cpp:
        (WebCore::CanvasRenderingContext2DBase::drawImage):
        (WebCore::CanvasRenderingContext2DBase::createPattern):
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::texImageSourceHelper):
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::imageForRenderer):
        (WebCore::CachedImage::hasSVGImage const):
        (WebCore::CachedImage::setContainerContextForClient):
        (WebCore::CachedImage::imageSizeForRenderer const):
        * platform/graphics/CrossfadeGeneratedImage.cpp:
        (WebCore::drawCrossfadeSubimage):
        * platform/graphics/Image.cpp:
        (WebCore::operator<<):
        * platform/graphics/Image.h:
        (WebCore::Image::isSVGImageForContainer const):
        (WebCore::Image::actsLikeSVGImage const):
        * platform/graphics/ImageObserver.h:
        * svg/graphics/SVGImage.h:
        * svg/graphics/SVGImageForContainer.cpp:
        (WebCore::SVGImageForContainer::SVGImageForContainer):
        * svg/graphics/SVGImageForContainer.h:

2021-07-09  Said Abou-Hallawa  <said@apple.com>

        SVGInlineTextBox::acquirePaintingResource() should return false if the resource can't be applied
        https://bugs.webkit.org/show_bug.cgi?id=227826
        <rdar://79662757>

        Reviewed by Simon Fraser.

        Ensure RenderSVGResource::postApplyResource() is called only if the 
        corresponding RenderSVGResource::applyResource() succeeds. Otherwise
        the GraphicsContext stack state will be unbalanced.

        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::acquirePaintingResource):

2021-07-09  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Negative padding values are invalid (inline box)
        https://bugs.webkit.org/show_bug.cgi?id=227838

        Reviewed by Antti Koivisto.

        Negative values for padding properties are invalid.
        https://drafts.csswg.org/css-box/#padding-physical

        * layout/integration/LayoutIntegrationCoverage.cpp:
        (WebCore::LayoutIntegration::canUseForChild):

2021-07-09  Chris Dumez  <cdumez@apple.com>

        [WebCrypto] deriveBits() incorrectly throws for PBKDF2 algorithm when the password is empty
        https://bugs.webkit.org/show_bug.cgi?id=227810

        Reviewed by Yusuke Suzuki.

        deriveBits() was incorrectly throwing for PBKDF2 algorithm when the provided password was empty.
        The reason for that was that we would pass a null key pointer to CCKeyDerivationPBKDF() in this
        case and it was causing CCKeyDerivationPBKDF() to return an error, even though the key length is
        0. To avoid this issue, we now pass an empty string as key to CCKeyDerivationPBKDF() instead of
        a null pointer, when the length is 0.

        This is causing Safari to fail subtests in the following WPT test:
        - https://wpt.live/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any.html?5001-6000

       Empty passwords are supported by both Chrome and Firefox.

        No new tests, rebaselined existing tests.

        * crypto/mac/CryptoAlgorithmPBKDF2Mac.cpp:
        (WebCore::CryptoAlgorithmPBKDF2::platformDeriveBits):

2021-07-09  Jer Noble  <jer.noble@apple.com>

        [Cocoa] Make Coordinator playback commands more precise
        https://bugs.webkit.org/show_bug.cgi?id=227756

        Reviewed by Eric Carlson.

        Add support for precise playback commands from MediaSessionCoordinator to the underlying MediaPlayer.

        In the case where a play() command is issued to a HTMLMediaElement and:
        - There is an active MediaSession
        - The MediaSession's active HTMLMediaElement is the current one
        - There is a pending playSession command
        - That command has a hostTime parameter
        - The MediaPlayer backing the element supports playing at a specific host time

        Then use the MediaPlayer's playAtHostTime() facility to begin playback, synchronized with the specified
        hostTime.

        Add support for playAtHostTime() to both MediaPlayerPrivateAVFoundationObjC and MediaPlayerPrivateMediaSourceAVFObjC.

        * Modules/mediasession/MediaSession.h:
        * Modules/mediasession/MediaSessionCoordinator.cpp:
        (WebCore::MediaSessionCoordinator::playSession):
        * Modules/mediasession/MediaSessionCoordinator.h:
        (WebCore::MediaSessionCoordinator::currentPlaySessionCommand const):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::updatePlayState):
        (WebCore::HTMLMediaElement::playPlayer):
        (WebCore::HTMLMediaElement::pausePlayer):
        * html/HTMLMediaElement.h:
        * html/MediaElementSession.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::supportsPlayAtHostTime const):
        (WebCore::MediaPlayer::supportsPauseAtHostTime const):
        (WebCore::MediaPlayer::playAtHostTime):
        (WebCore::MediaPlayer::pauseAtHostTime):
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::supportsPlayAtHostTime const):
        (WebCore::MediaPlayerPrivateInterface::supportsPauseAtHostTime const):
        (WebCore::MediaPlayerPrivateInterface::playAtHostTime):
        (WebCore::MediaPlayerPrivateInterface::pauseAtHostTime):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::playAtHostTime):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::pauseAtHostTime):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setPlayerRate):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::playInternal):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::pauseInternal):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::playAtHostTime):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::pauseAtHostTime):

2021-07-09  Yusuke Suzuki  <ysuzuki@apple.com>

        Add BigInt64Array and BigUint64Array support to crypto.getRandomValues
        https://bugs.webkit.org/show_bug.cgi?id=227611

        Reviewed by Chris Dumez.

        Tests: imported/w3c/web-platform-tests/WebCryptoAPI/getRandomValues-bigint.tentative.any.html
               imported/w3c/web-platform-tests/WebCryptoAPI/getRandomValues-bigint.tentative.any.worker.html

        This patch updates crypto.getRandomValues so that this function can take BigInt64Array / BigUint64Array.
        We also add BigInt64Array / BigUint64Array IDL support.

        * bindings/js/JSDOMConvertBufferSource.h:
        (WebCore::toPossiblySharedBigInt64Array):
        (WebCore::toPossiblySharedBigUint64Array):
        (WebCore::toUnsharedBigInt64Array):
        (WebCore::toUnsharedBigUint64Array):
        (WebCore::JSConverter<IDLFloat64Array>::convert):
        (WebCore::Converter<IDLBigInt64Array>::convert):
        (WebCore::JSConverter<IDLBigInt64Array>::convert):
        (WebCore::Converter<IDLBigUint64Array>::convert):
        * bindings/scripts/CodeGenerator.pm:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GetBaseIDLType):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::JSTestObjDOMConstructor::construct):
        (WebCore::jsTestObjPrototypeFunction_bigInt64Body):
        (WebCore::JSC_DEFINE_HOST_FUNCTION):
        (WebCore::jsTestObjPrototypeFunction_bigUint64Body):
        (WebCore::jsTestObjPrototypeFunction_bigInt64AllowSharedBody):
        (WebCore::jsTestObjPrototypeFunction_bigUint64AllowSharedBody):
        * bindings/scripts/test/TestObj.idl:
        * page/Crypto.cpp:
        (WebCore::Crypto::getRandomValues):

2021-07-09  Tim Nguyen  <ntim@apple.com>

        Make topLayerElements() use Ref instead of RefPtr
        https://bugs.webkit.org/show_bug.cgi?id=227839

        Reviewed by Youenn Fablet.

        * dom/Document.cpp:
        (WebCore::Document::addToTopLayer):
        (WebCore::Document::removeFromTopLayer):
        (WebCore::Document::activeModalDialog const):
        * dom/Document.h:
        (WebCore::Document::topLayerElements const):

2021-07-09  Alexander Mikhaylenko  <alexm@gnome.org>

        [GTK] Support dark scrollbars
        https://bugs.webkit.org/show_bug.cgi?id=227834

        Reviewed by Michael Catanzaro.

        Also adjust the colors in light variant to be closer to the GTK scrollbars, and
        remove an unused variable.

        Unfortunately this leaves the scrollbar corner when non-overlay scrollbars are used,
        but it was already broken for light scrollbars as well.

        * platform/adwaita/ScrollbarThemeAdwaita.cpp:
        (WebCore::ScrollbarThemeAdwaita::updateScrollbarOverlayStyle):
        (WebCore::ScrollbarThemeAdwaita::paint):
        * platform/adwaita/ScrollbarThemeAdwaita.h:

2021-07-09  Tim Nguyen  <ntim@apple.com>

        Add topLayerElements() and activeModalDialog() to Document
        https://bugs.webkit.org/show_bug.cgi?id=227800

        Reviewed by Antti Koivisto.

        These DOM methods are a pre-requisite for a lot of dialog element accessibility work, aside from
        the top layer rendering work.

        * dom/Document.cpp:
        (WebCore::Document::addToTopLayer):
        (WebCore::Document::removeFromTopLayer):
        (WebCore::Document::activeModalDialog const):
        * dom/Document.h:
        (WebCore::Document::topLayerElements const):
        * dom/Element.cpp:
        (WebCore::Element::removedFromAncestor):
        * html/HTMLDialogElement.cpp:
        (WebCore::HTMLDialogElement::showModal):
        (WebCore::HTMLDialogElement::close):
        (WebCore::HTMLDialogElement::parseAttribute):

2021-07-09  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK][WPE][libsoup] Test imported/w3c/web-platform-tests/cookies/samesite/about-blank-toplevel.https.html crashes since it was imported
        https://bugs.webkit.org/show_bug.cgi?id=227819

        Reviewed by Carlos Garcia Campos.

        Add missings null-checks to avoid calling soup_cookie_jar_get_cookie_list_with_same_site_info()
        with a null pointer in site_for_cookies argument.

        Covered by existing tests.

        * platform/network/soup/NetworkStorageSessionSoup.cpp:
        (WebCore::NetworkStorageSession::getRawCookies const):
        (WebCore::cookiesForSession):

2021-07-08  Kate Cheney  <katherine_cheney@apple.com>

        Unreviewed iOS build fix after
        https://trac.webkit.org/changeset/279749/webkit.

        * page/PointerCaptureController.cpp:
        (WebCore::PointerCaptureController::dispatchEventForTouchAtIndex):

2021-07-08  Yusuke Suzuki  <ysuzuki@apple.com>

        Fix StructuredClone for streams to handle BigInt64Array / BigUint64Array
        https://bugs.webkit.org/show_bug.cgi?id=227571

        Reviewed by Chris Dumez.

        While we already support BigInt64Array / BigUint64Array handling even in DOM code,
        we lack support of them only in fetch's structuredClone code (which is specialized one
        to make it fast by bypassing serialization / deserialization).

        This patch fixes the issue to complete BigInt64Array / BigUint64Array in all DOM code.

        * Modules/streams/ReadableStreamInternals.js:
        (readableStreamTeePullFunction):
        (doStructuredClone): Deleted.
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::addBuiltinGlobals):
        * bindings/js/StructuredClone.cpp:
        (WebCore::JSC_DEFINE_HOST_FUNCTION):
        * bindings/js/StructuredClone.h:
        * bindings/js/WebCoreBuiltinNames.h:

2021-07-08  Chris Dumez  <cdumez@apple.com>

        Make sure SVG SMIL animations do not run in processes without any pages
        https://bugs.webkit.org/show_bug.cgi?id=227720
        <rdar://79625708>

        Reviewed by Simon Fraser.

        Make sure SVG SMIL animations do not run in processes without any pages.

        We have seen traces / logging indicating that SVG SMIL animations may run in cached WebProcesses, thus
        using CPU unnecessarily. Cached WebProcesses have no WebPage so this patch adds assertions to catch cases
        where those animations run when there is no Page (and early returns in release to avoid doing unnecessary
        work).

        * page/Page.cpp:
        (WebCore::Page::nonUtilityPageCount):
        (WebCore::m_httpsUpgradeEnabled):
        (WebCore::Page::~Page):
        (WebCore::Page::isOnlyNonUtilityPage const):
        * page/Page.h:
        * svg/animation/SMILTimeContainer.cpp:
        (WebCore::SMILTimeContainer::begin):
        (WebCore::SMILTimeContainer::resume):
        (WebCore::SMILTimeContainer::setElapsed):
        (WebCore::SMILTimeContainer::startTimer):
        (WebCore::SMILTimeContainer::updateAnimations):

2021-07-08  Chris Dumez  <cdumez@apple.com>

        [IndexedDB] KeyPath validity checks should happen on the cloned value, not the original one
        https://bugs.webkit.org/show_bug.cgi?id=227813

        Reviewed by Geoffrey Garen.

        KeyPath validity checks should happen on the cloned value, not the original one:
        - https://www.w3.org/TR/IndexedDB/#add-or-put (Step 11.1)
        - https://www.w3.org/TR/IndexedDB/#dom-idbcursor-update (Step 9.1)

        This was causing the following WPT test to fail in WebKit:
        https://wpt.live/IndexedDB/clone-before-keypath-eval.html

        This test is passing in Chrome and Gecko.

        No new tests, rebaselined existing test.

        * Modules/indexeddb/IDBCursor.cpp:
        (WebCore::IDBCursor::update):
        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::putForCursorUpdate):
        (WebCore::IDBObjectStore::putOrAdd):
        * Modules/indexeddb/IDBObjectStore.h:

2021-07-08  Simon Fraser  <simon.fraser@apple.com>

        Make backingProviderLayerCanIncludeLayer() a member function of BackingSharingState
        https://bugs.webkit.org/show_bug.cgi?id=227818

        Reviewed by Alan Bujtas.

        Minor code refactor, no behavior change.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::BackingSharingState::canIncludeLayer const):
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        (WebCore::RenderLayerCompositor::traverseUnchangedSubtree):
        (WebCore::backingProviderLayerCanIncludeLayer): Deleted.

2021-07-08  Ryosuke Niwa  <rniwa@webkit.org>

        Remove more custom binding code with GenerateAddOpaqueRoot
        https://bugs.webkit.org/show_bug.cgi?id=227789

        Reviewed by Chris Dumez.

        Use GenerateAddOpaqueRoot extended IDL option to remove more custom bindings code.

        Also made GenerateAddOpaqueRoot default to use wrapped object's opaqueRoot function.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSAbortControllerCustom.cpp: Removed.
        * bindings/js/JSAudioTrackCustom.cpp: Removed.
        * bindings/js/JSAudioTrackListCustom.cpp: Removed.
        * bindings/js/JSTextTrackCustom.cpp: Removed.
        * bindings/js/JSTextTrackListCustom.cpp: Removed.
        * bindings/js/JSVideoTrackCustom.cpp: Removed.
        * bindings/js/JSVideoTrackListCustom.cpp: Removed.
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * dom/AbortController.h:
        * dom/AbortController.idl:
        * html/track/AudioTrack.idl:
        * html/track/AudioTrackList.idl:
        * html/track/TextTrack.idl:
        * html/track/TextTrackList.idl:
        * html/track/TrackBase.cpp:
        (WebCore::TrackBase::opaqueRoot): Added.
        * html/track/TrackBase.h:
        * html/track/TrackListBase.cpp:
        (WebCore::TrackListBase::opaqueRoot const): Added.
        * html/track/TrackListBase.h:
        * html/track/VideoTrack.idl:
        * html/track/VideoTrackList.idl:

2021-07-08  Alex Christensen  <achristensen@webkit.org>

        Fix some whitespace handling issues in URL setters
        https://bugs.webkit.org/show_bug.cgi?id=227806

        Reviewed by Chris Dumez.

        Covered by newly passing wpt tests.

        * dom/Element.cpp:
        (WebCore::Element::getURLAttribute const):
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::href const):
        Don't remove whitespace before giving to completeURL, which will do that for us if it's a valid URL.
        If it's not a valid URL, we want the original string, not the trimmed string.
        * html/URLDecomposition.cpp:
        (WebCore::parsePort):
        Parse ports more like the URLParser, which ignores tabs and newlines.

2021-07-08  Cameron McCormack  <heycam@apple.com>

        Stop GraphicsLayerCA::recursiveCommitChanges recursion once cMaxLayerTreeDepth is reached
        https://bugs.webkit.org/show_bug.cgi?id=227738
        <rdar://42584284>

        Reviewed by Simon Fraser.

        To avoid stack overflow in some configurations, stop
        recursiveCommitChange recursion when we reach the same level that we
        stop hooking up PlatformCALayers. This will leave GraphicsLayerCAs in
        the tree with m_uncommittedChanges, but if we ever do another call to
        recursiveCommitChange where the GraphicsLayerCA is now at an
        appropriate depth (because some ancestors lost their structural
        layers, for example), then we'll process the uncommitted changes at
        that point.

        Pull up the increment of commitState.treeDepth from
        commitLayerChangesBeforeSublayers to recursiveCommitChanges so that
        the commitLayerChangesBeforeSublayers call for a mask layer doesn't
        contribute to the depth count.

        Use structuralLayerPurpose() rather than null-checking
        m_structuralLayer to determine whether we count an additional depth
        level, since m_structuralLayer reflects whether we already have a
        structural layer (which may or may not go away), and
        structuralLayerPurpose() can tell us whether we will have a structural
        layer.

        Test: fast/layers/deep-layer-update.html

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::recursiveCommitChanges):
        (WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers):

2021-07-08  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Live Text] Selection is misaligned on some images on twitter.com
        https://bugs.webkit.org/show_bug.cgi?id=227775
        rdar://77142364

        Reviewed by Tim Horton.

        On Twitter, image thumbnails consist of fully transparent image elements (`opacity: 0;`) that are overlaid over
        `div` elements with a background image. The images for some of these transparent image elements sometimes don't
        match the background image behind it (namely, the image is stretched to exactly fit the bounds of the
        transparent image element in a way that does not preserve aspect ratio, whereas the background image is cropped
        to cover the `div`). As such, Live Text in these image elements ends up misaligned against the background image
        (which is actually visible to the user).

        To address this, special case fully transparent images such that we take a snapshot of the page using the
        absolute bounds of the transparent image and run OCR over this snapshot, instead of using the image data as-is.

        Test: fast/images/text-recognition/image-overlay-in-transparent-image.html

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::containerRectForTextRecognition):
        (WebCore::HTMLElement::updateWithTextRecognitionResult):
        * html/HTMLElement.h:
        * page/Page.cpp:
        (WebCore::Page::updateElementsWithTextRecognitionResults):

2021-07-08  Kate Cheney  <katherine_cheney@apple.com>

        Clean up App Privacy Report code
        https://bugs.webkit.org/show_bug.cgi?id=227326
        <rdar://problem/79696849>

        Reviewed by Brent Fulgham.

        Tests: http/tests/app-privacy-report/attribution-load-url.html
               http/tests/app-privacy-report/attribution-ping-load.html
               http/tests/app-privacy-report/attribution-post-request.html
               http/tests/app-privacy-report/attribution-preflight-async.html
               http/tests/app-privacy-report/attribution-preflight-sync.html
               http/tests/app-privacy-report/attribution-speculative-revalidation.html

        Rename App Privacy Report code to better align with the code's purpose
        of attributing loads to the app or not. The default value should
        be app initiated based on the documentation, so this patch also adjusts
        the default value as needed.

        * loader/CrossOriginAccessControl.cpp:
        (WebCore::createAccessControlPreflightRequest):
        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::lastNavigationWasAppInitiated const):
        (WebCore::DocumentLoader::setLastNavigationWasAppInitiated):
        (WebCore::DocumentLoader::lastNavigationWasAppBound const): Deleted.
        (WebCore::DocumentLoader::setLastNavigationWasAppBound): Deleted.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::updateRequestAndAddExtraFields):
        * loader/FrameLoader.h:
        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::setAsIsolatedCopy):
        * platform/network/ResourceRequestBase.h:
        (WebCore::ResourceRequestBase::isAppInitiated const):
        (WebCore::ResourceRequestBase::setIsAppInitiated):
        (WebCore::ResourceRequestBase::ResourceRequestBase):
        (WebCore::ResourceRequestBase::encodeBase const):
        (WebCore::ResourceRequestBase::decodeBase):
        (WebCore::ResourceRequestBase::isAppBound const): Deleted.
        (WebCore::ResourceRequestBase::setIsAppBound): Deleted.
        * testing/ServiceWorkerInternals.cpp:
        (WebCore::ServiceWorkerInternals::lastNavigationWasAppInitiated):
        (WebCore::ServiceWorkerInternals::lastNavigationWasAppBound): Deleted.
        * testing/ServiceWorkerInternals.h:
        * testing/ServiceWorkerInternals.idl:
        * workers/service/ServiceWorkerClientData.cpp:
        (WebCore::ServiceWorkerClientData::isolatedCopy const):
        (WebCore::ServiceWorkerClientData::from):
        * workers/service/ServiceWorkerClientData.h:
        (WebCore::ServiceWorkerClientData::encode const):
        (WebCore::ServiceWorkerClientData::decode):
        * workers/service/ServiceWorkerContextData.cpp:
        (WebCore::ServiceWorkerContextData::isolatedCopy const):
        * workers/service/ServiceWorkerContextData.h:
        (WebCore::ServiceWorkerContextData::encode const):
        (WebCore::ServiceWorkerContextData::decode):
        * workers/service/context/ServiceWorkerThreadProxy.cpp:
        (WebCore::ServiceWorkerThreadProxy::ServiceWorkerThreadProxy):
        (WebCore::ServiceWorkerThreadProxy::setLastNavigationWasAppInitiated):
        (WebCore::ServiceWorkerThreadProxy::lastNavigationWasAppInitiated):
        (WebCore::ServiceWorkerThreadProxy::setLastNavigationWasAppBound): Deleted.
        (WebCore::ServiceWorkerThreadProxy::lastNavigationWasAppBound): Deleted.
        * workers/service/context/ServiceWorkerThreadProxy.h:
        * workers/service/server/RegistrationDatabase.cpp:
        (WebCore::RegistrationDatabase::importRecords):
        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::startScriptFetch):
        (WebCore::SWServer::updateWorker):
        (WebCore::SWServer::clientIsAppInitiatedForRegistrableDomain):
        (WebCore::SWServer::updateAppInitiatedValueForWorkers):
        (WebCore::SWServer::registerServiceWorkerClient):
        (WebCore::SWServer::unregisterServiceWorkerClient):
        (WebCore::SWServer::clientIsAppBoundForRegistrableDomain): Deleted.
        (WebCore::SWServer::updateAppBoundValueForWorkers): Deleted.
        * workers/service/server/SWServer.h:
        * workers/service/server/SWServerRegistration.cpp:
        (WebCore::SWServerRegistration::scheduleSoftUpdate):
        * workers/service/server/SWServerRegistration.h:
        (WebCore::SWServerRegistration::isAppInitiated):
        (WebCore::SWServerRegistration::isAppBound): Deleted.
        * workers/service/server/SWServerToContextConnection.h:
        * workers/service/server/SWServerWorker.cpp:
        (WebCore::m_lastNavigationWasAppInitiated):
        (WebCore::SWServerWorker::contextData const):
        (WebCore::SWServerWorker::updateAppInitiatedValue):
        (WebCore::m_lastNavigationWasAppBound): Deleted.
        (WebCore::SWServerWorker::updateAppBoundValue): Deleted.
        * workers/service/server/SWServerWorker.h:

2021-07-08  Ryosuke Niwa  <rniwa@webkit.org>

        Deploy smart pointers in PointerCaptureController
        https://bugs.webkit.org/show_bug.cgi?id=227352

        Reviewed by Wenson Hsieh.

        Deployed Ref/RefPtr in more places in PointerCaptureController.
        Also made PointerCaptureController::CapturingData ref counted.

        * page/PointerCaptureController.cpp:
        (WebCore::PointerCaptureController::pointerCaptureElement const):
        (WebCore::PointerCaptureController::setPointerCapture):
        (WebCore::PointerCaptureController::releasePointerCapture):
        (WebCore::PointerCaptureController::hasPointerCapture):
        (WebCore::PointerCaptureController::pointerLockWasApplied):
        (WebCore::PointerCaptureController::elementWasRemoved):
        (WebCore::PointerCaptureController::reset):
        (WebCore::PointerCaptureController::updateHaveAnyCapturingElement):
        (WebCore::PointerCaptureController::hasCancelledPointerEventForIdentifier const):
        (WebCore::PointerCaptureController::preventsCompatibilityMouseEventsForIdentifier const):
        (WebCore::hierarchyHasCapturingEventListeners):
        (WebCore::PointerCaptureController::dispatchEventForTouchAtIndex):
        (WebCore::PointerCaptureController::pointerEventForMouseEvent):
        (WebCore::PointerCaptureController::pointerEventWillBeDispatched):
        (WebCore::PointerCaptureController::ensureCapturingDataForPointerEvent):
        (WebCore::PointerCaptureController::pointerEventWasDispatched):
        (WebCore::PointerCaptureController::cancelPointer):
        (WebCore::PointerCaptureController::processPendingPointerCapture):
        * page/PointerCaptureController.h:
        (WebCore::PointerCaptureController::CapturingData::create):
        (WebCore::PointerCaptureController::CapturingData::CapturingData):

2021-07-08  Simon Fraser  <simon.fraser@apple.com>

        Scrollbar hidden when scroller has a negative z-index child
        https://bugs.webkit.org/show_bug.cgi?id=227545

        Reviewed by Alan Bujtas.
        
        The code to ensure that overflow:scroll scrollbars appeared on top of composited descendant
        layers had incorrect behavior if the only descendant had negative z-index; it would move the
        overflow controls container layer to be after that descendant, and thus behind foreground
        content.

        Fix by inserting the overflow controls container layer in front of the frontmost of the
        descendant and the scroller itself.

        Test: compositing/scrolling/async-overflow-scrolling/negative-z-in-scroller-hidden-scrollbar.html

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::adjustOverflowScrollbarContainerLayers):

2021-07-08  Yoshiaki Jitsukawa  <yoshiaki.jitsukawa@sony.com>

        [OpenSSL] Implement HKDF and PBKDF2 support
        https://bugs.webkit.org/show_bug.cgi?id=227656

        Reviewed by Fujii Hironori.

        * crypto/openssl/CryptoAlgorithmHKDFOpenSSL.cpp:
        (WebCore::CryptoAlgorithmHKDF::platformDeriveBits): Implemented with HKDF().
        * crypto/openssl/CryptoAlgorithmPBKDF2OpenSSL.cpp:
        (WebCore::CryptoAlgorithmPBKDF2::platformDeriveBits):
        * crypto/openssl/CryptoAlgorithmRegistryOpenSSL.cpp: Implemented with PKCS5_PBKDF2_HMAC().
        (WebCore::CryptoAlgorithmRegistry::platformRegisterAlgorithms): Register HKDF and PBKDF2.

2021-07-08  Myles C. Maxfield  <mmaxfield@apple.com>

        [GPU Process] Draw PDFs using an intermediate ImageBuffer when using the GPU process
        https://bugs.webkit.org/show_bug.cgi?id=227550

        Reviewed by Tim Horton.

        When drawing PDFs, we usually already have a cached ImageBuffer of the contents of the PDF.
        However, in the situation where we don't have this cached ImageBuffer, we can't just draw
        the PDF into the platformContext when we're using the GPU Process. So, instead, we need to
        draw the PDF into an intermediate ImageBuffer and then send that to the GPU Process.

        When we have a fully functional custom CGContext, we can use that to send all the PDF drawing
        commands to the GPU Process, and this patch should then be reverted.

        Test: fast/images/pdf-in-canvas.html

        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::PDFDocumentImage::draw):
        * platform/mac/LocalCurrentGraphicsContextMac.mm:
        (WebCore::LocalCurrentGraphicsContext::LocalCurrentGraphicsContext):

2021-07-08  Yusuke Suzuki  <ysuzuki@apple.com>

        Use JSC::Yarr::flagsString to get string representation of RegExp flags
        https://bugs.webkit.org/show_bug.cgi?id=227790

        Reviewed by Keith Miller.

        This patch uses JSC::Yarr::flagsString function to retrieve string representation of
        RegExp flags. This allows JSC to add flags without changing WebCore code.
        Covered by existing tests.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::dumpIfTerminal):

2021-07-08  Megan Gardner  <megan_gardner@apple.com>

        Add logging for legacy AppHighlight decoding to aid in future debugging.
        https://bugs.webkit.org/show_bug.cgi?id=227591

        Reviewed by Tim Horton.

        * Modules/highlight/AppHighlightRangeData.cpp:
        (WebCore::AppHighlightRangeData::decode):
        * platform/Logging.h:

2021-07-08  Chris Dumez  <cdumez@apple.com>

        [WebCrypto] deriveBits() fails if length is not a multiple of 8 for ECDH algorithm
        https://bugs.webkit.org/show_bug.cgi?id=227796

        Reviewed by Alex Christensen.

        deriveBits() fails if length is not a multiple of 8 for ECDH algorithm. This doesn't match
        the specification or the behavior of Chrome.

        No new tests, rebaselined existing tests.

        * crypto/algorithms/CryptoAlgorithmECDH.cpp:
        (WebCore::CryptoAlgorithmECDH::deriveBits):

2021-07-08  Myles C. Maxfield  <mmaxfield@apple.com>

        [GPU Process] Canvas image rendering can render arbitrary DOM content in the GPU process, which is against policy (for now)
        https://bugs.webkit.org/show_bug.cgi?id=227519
        <rdar://problem/76678163>

        Reviewed by Darin Adler.

        Rendering arbitrary DOM content in the GPU process isn't supported yet, but canvas rendering is. However,
        canvas has a drawImage() function which can accept an HTMLImageElement as its source, and an HTMLImageElement
        can have an SVG document as its source, which would end up triggering our DOM codepath in canvas and thus
        in the GPU process.

        This patch disables this for now, by rendering the SVG into an ImageBuffer and then drawing the ImageBuffer
        in the GPU process. When we eventually implement arbitrary DOM rendering in the GPU process, this patch will
        need to be reverted.

        Test: fast/images/svg-mask-in-canvas.html

        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::nativeImage):
        (WebCore::SVGImage::draw):
        (WebCore::SVGImage::drawAsNativeImage):
        * svg/graphics/SVGImage.h:

2021-07-08  Antti Koivisto  <antti@apple.com>

        Shadow host stops rendering after removing a slot, updating style, then its assigned node
        https://bugs.webkit.org/show_bug.cgi?id=227652

        Reviewed by Alan Bujtas.

        Test: fast/shadow-dom/remove-slot-and-host-child.html

        * dom/SlotAssignment.cpp:
        (WebCore::SlotAssignment::didChangeSlot):

        When we tear down the render tree we also need to request its rebuild unconditionally.

2021-07-08  Per Arne  <pvollan@apple.com>

        Set Caption preferences in the UI process
        https://bugs.webkit.org/show_bug.cgi?id=227742
        <rdar://79040526>

        Reviewed by Eric Carlson.

        Add a Caption user preferences delegate, which can be subclassed to perform the work in the UI process.

        No new tests, since this is not trivial to add a test for. This has been manually tested.

        * WebCore.xcodeproj/project.pbxproj:
        * page/CaptionUserPreferencesMediaAF.cpp:
        (WebCore::captionPreferencesDelegate):
        (WebCore::CaptionUserPreferencesMediaAF::captionDisplayMode const):
        (WebCore::CaptionUserPreferencesMediaAF::platformSetCaptionDisplayMode):
        (WebCore::CaptionUserPreferencesMediaAF::setCaptionDisplayMode):
        (WebCore::CaptionUserPreferencesMediaAF::setCaptionPreferencesDelegate):
        (WebCore::CaptionUserPreferencesMediaAF::platformSetPreferredLanguage):
        (WebCore::CaptionUserPreferencesMediaAF::setPreferredLanguage):
        * page/CaptionUserPreferencesMediaAF.h:
        * platform/CaptionPreferencesDelegate.h: Added.
        (WebCore::CaptionPreferencesDelegate::~CaptionPreferencesDelegate):
        (WebCore::CaptionPreferencesDelegate::setDisplayMode):

2021-07-08  Martin Robinson  <mrobinson@igalia.com>

        [css-scroll-snap] scroll-snap-align should use the box's writing-mode when the box is larger than the snapport
        https://bugs.webkit.org/show_bug.cgi?id=227743

        Reviewed by Simon Fraser.

        No new tests. This fixes an existing WPT test:
           - imported/w3c/web-platform-tests/css/css-scroll-snap/snap-after-initial-layout/scroll-snap-writing-mode-000.html

        * page/scrolling/ScrollSnapOffsetsInfo.cpp:
        (WebCore::axesFlippedForWritingModeAndDirection): Added this helper which abstracts the process of
        determining if the x-axis and y-axis are flipped given the style's writing mode and text direction.
        (WebCore::updateSnapOffsetsForScrollableArea): When the inline axis of the box defining the snap area
        is larger than the snapport, we use the box's writing mode and text-direction to determine if the
        x-axis and y-axis are flipped.

2021-07-08  Fujii Hironori  <Hironori.Fujii@sony.com>

        Merge Cairo::save and Cairo::restore into GraphicsContextCairo's methods
        https://bugs.webkit.org/show_bug.cgi?id=227784

        Reviewed by Žan Doberšek.

        Cairo::save and Cairo::restore should be GraphicsContextCairo's
        methods.

        * platform/graphics/cairo/CairoOperations.cpp:
        (WebCore::Cairo::fillShadowBuffer):
        (WebCore::Cairo::save): Deleted.
        (WebCore::Cairo::restore): Deleted.
        * platform/graphics/cairo/CairoOperations.h:
        * platform/graphics/cairo/GradientCairo.cpp:
        (WebCore::Gradient::fill):
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContextCairo::save):
        (WebCore::GraphicsContextCairo::restore):
        (WebCore::GraphicsContextCairo::fillRect):
        (WebCore::GraphicsContextCairo::saveInternal): Deleted.
        (WebCore::GraphicsContextCairo::restoreInternal): Deleted.
        * platform/graphics/cairo/GraphicsContextCairo.h:
        * platform/graphics/nicosia/cairo/NicosiaCairoOperationRecorder.cpp:
        (Nicosia::CairoOperationRecorder::fillRect):
        (Nicosia::CairoOperationRecorder::save):
        (Nicosia::CairoOperationRecorder::restore):

2021-07-07  Cameron McCormack  <heycam@apple.com>

        Add logging for GraphicsLayerCA::m_uncommittedChanges
        https://bugs.webkit.org/show_bug.cgi?id=227783

        Reviewed by Simon Fraser.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::layerChangeAsString):
        (WebCore::GraphicsLayerCA::dumpLayerChangeFlags):
        (WebCore::GraphicsLayerCA::dumpAdditionalProperties const):
        * platform/graphics/ca/GraphicsLayerCA.h:

2021-07-07  John Wilander  <wilander@apple.com>

        PCM: Add error logging for CryptoKit operations
        https://bugs.webkit.org/show_bug.cgi?id=227731
        <rdar://80221057>

        Reviewed by Brent Fulgham.

        Resolves three FIXMEs for error logging in PCM's CryptoKit operations.

        No new tests. Only added logging.

        * loader/PrivateClickMeasurement.h:
        * loader/cocoa/PrivateClickMeasurementCocoa.mm:
        (WebCore::PrivateClickMeasurement::calculateAndUpdateSourceUnlinkableToken):
        (WebCore::PrivateClickMeasurement::calculateAndUpdateSourceSecretToken):

2021-07-07  Chris Dumez  <cdumez@apple.com>

        Our structured cloning implementation does not encode all of RegExp's flags
        https://bugs.webkit.org/show_bug.cgi?id=227779

        Reviewed by Yusuke Suzuki.

        Our structured cloning implementation does not encode all of RegExp's flags.
        In particular, we are failing to encode the 'y', 'u', 's' and 'd' flags.

        This is causing one of the checks to fail in WebKit on:
        - http://wpt.live/IndexedDB/structured-clone.any.html?61-80

        That subtest is passing in Firefox and Chrome.

        Test: fast/dom/Window/post-message-regexp.html

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::dumpIfTerminal):

2021-07-07  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add support for partially trimmed trailing whitespace
        https://bugs.webkit.org/show_bug.cgi?id=227688

        Reviewed by Antti Koivisto.

        This patch fixes the case when as a result of the partially trimmed overflow content,
        we don't need to conditionally hang the trailing end anymore.

        https://drafts.csswg.org/css-text-3/#valdef-white-space-pre
        "If white-space is set to pre-wrap, the UA must (unconditionally)
        ...
        It may also visually collapse the character advance widths of any that would otherwise overflow."

        * layout/formattingContexts/inline/InlineLine.cpp:
        (WebCore::Layout::Line::visuallyCollapsePreWrapOverflowContent):
        (WebCore::Layout::Line::Run::removeTrailingWhitespace):
        (WebCore::Layout::Line::Run::visuallyCollapseTrailingWhitespace):
        * layout/formattingContexts/inline/InlineLine.h:

2021-07-07  Chris Dumez  <cdumez@apple.com>

        [WebCrypto] Support Elliptic Curve P-521 on Mac
        https://bugs.webkit.org/show_bug.cgi?id=216755
        <rdar://problem/69667220>

        Reviewed by Alex Christensen.

        Add support for Elliptic Curve P-521 in WebCrypto for ECDSA and ECDH, on macOS.
        Both Gecko and Blink already support this.

        No new tests, rebaselined existing tests.

        * crypto/mac/CryptoAlgorithmECDHMac.cpp:
        (WebCore::CryptoAlgorithmECDH::platformDeriveBits):
        * crypto/mac/CryptoAlgorithmECDSAMac.cpp:
        Use std::ceil() when converting bits to bytes since 521 is not a multiple of 8.
        This is as per Section 2.3.4 of http://www.secg.org/sec1-v2.pdf, which indicates
        we should use ceil().

        (WebCore::signECDSA):
        Stop assuming the length can be encoded in a single byte as this is not true with
        P-521 (values >= 128 require 2 bytes).

        (WebCore::verifyECDSA):
        Do not reject the promise when CCECCryptorVerifyHash() fails and instead return
        false to indicate that the signature fails. This was needed to pass a few more
        WPT checks. We do not do much validation on r and s before passing them to
        CommonCrypto and CCECCryptorVerifyHash() may return a kCCNotVerified error when
        the input signature is invalid (invalid signatures are tested by WPT tests).

        (WebCore::CryptoAlgorithmECDSA::platformSign):
        (WebCore::CryptoAlgorithmECDSA::platformVerify):
        * crypto/mac/CryptoKeyECMac.cpp:
        (WebCore::doesUncompressedPointMatchNamedCurve):
        (WebCore::doesFieldElementMatchNamedCurve):
        (WebCore::getKeySizeFromNamedCurve):
        (WebCore::CryptoKeyEC::platformSupportedCurve):
        (WebCore::CryptoKeyEC::platformExportRaw const):
        (WebCore::CryptoKeyEC::platformAddFieldElements const):
        (WebCore::getOID):
        (WebCore::CryptoKeyEC::platformExportSpki const):
        (WebCore::CryptoKeyEC::platformImportPkcs8):
        (WebCore::CryptoKeyEC::platformExportPkcs8 const):
        Add support for P-521 and use std::ceil() when converting bits to bytes since
        521 is not a multiple of 8.

2021-07-07  Chris Dumez  <cdumez@apple.com>

        [IndexedDB] Transaction should be inactive during structured clone
        https://bugs.webkit.org/show_bug.cgi?id=227773

        Reviewed by Geoffrey Garen.

        Transaction should be inactive during structured clone, as per:
        - https://w3c.github.io/IndexedDB/#clone

        Gecko and Blink match the specification.

        No new tests, rebaselined existing tests.

        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::putOrAdd):

2021-07-07  Cameron McCormack  <heycam@apple.com>

        Remove unused LayerChange::TilesAdded enum value
        https://bugs.webkit.org/show_bug.cgi?id=227736

        Reviewed by Simon Fraser.

        * platform/graphics/ca/GraphicsLayerCA.h:

2021-07-07  Chris Dumez  <cdumez@apple.com>

        IDBObjectStore.keyPath should keep returning the same object
        https://bugs.webkit.org/show_bug.cgi?id=227770

        Reviewed by Darin Adler.

        IDBObjectStore.keyPath should keep returning the same object to match other
        browser engines (Gecko and Blink).

        No new tests, rebaselined existing tests.

        * Modules/indexeddb/IDBObjectStore.idl:

2021-07-07  Yoshiaki Jitsukawa  <yoshiaki.jitsukawa@sony.com>

        [OpenSSL] Implement CryptoAlgorithmEC*
        https://bugs.webkit.org/show_bug.cgi?id=227655

        Reviewed by Don Olmstead.

        Implement elliptic curve support in WebCrypto. This patch enables ECDH
        and ECDSA algorithms as well as EC key import, export, and generation.

        Note that low level ASN1 API is used in CryptoKeyEC.cpp to import
        public EC keys in the SPKI format because currently OpenSSL doesn't
        have the Object ID of the ecDH algorithm and it fails to load ecDH
        keys with d2iPUBKEY().

        * crypto/keys/CryptoKeyEC.h:
        * crypto/openssl/CryptoAlgorithmECDHOpenSSL.cpp:
        (WebCore::CryptoAlgorithmECDH::platformDeriveBits):
        * crypto/openssl/CryptoAlgorithmECDSAOpenSSL.cpp:
        (WebCore::CryptoAlgorithmECDSA::platformSign):
        (WebCore::CryptoAlgorithmECDSA::platformVerify):
        * crypto/openssl/CryptoAlgorithmRegistryOpenSSL.cpp:
        (WebCore::CryptoAlgorithmRegistry::platformRegisterAlgorithms):
        * crypto/openssl/CryptoKeyECOpenSSL.cpp:
        (WebCore::curveIdentifier):
        (WebCore::curveSize):
        (WebCore::createECKey):
        (WebCore::verifyCurve):
        (WebCore::CryptoKeyEC::keySizeInBits const):
        (WebCore::CryptoKeyEC::platformSupportedCurve):
        (WebCore::CryptoKeyEC::platformGeneratePair):
        (WebCore::CryptoKeyEC::platformImportRaw):
        (WebCore::CryptoKeyEC::platformImportJWKPublic):
        (WebCore::CryptoKeyEC::platformImportJWKPrivate):
        (WebCore::ecPublicKeyIdentifier):
        (WebCore::ecDHIdentifier):
        (WebCore::supportedAlgorithmIdentifier):
        (WebCore::CryptoKeyEC::platformImportSpki):
        (WebCore::CryptoKeyEC::platformImportPkcs8):
        (WebCore::CryptoKeyEC::platformExportRaw const):
        (WebCore::CryptoKeyEC::platformAddFieldElements const):
        (WebCore::CryptoKeyEC::platformExportSpki const):
        (WebCore::CryptoKeyEC::platformExportPkcs8 const):
        * crypto/openssl/CryptoKeyRSAOpenSSL.cpp:
        (WebCore::CryptoKeyRSA::importSpki):
        (WebCore::CryptoKeyRSA::importPkcs8):
        (WebCore::CryptoKeyRSA::exportSpki const):
        (WebCore::CryptoKeyRSA::exportPkcs8 const):
        (WebCore::CryptoKeyRSA::algorithm const):
        (WebCore::CryptoKeyRSA::exportData const):
        * crypto/openssl/OpenSSLCryptoUniquePtr.h:
        (WebCore::OpenSSLCryptoPtrDeleter<EC_KEY>::operator() const):
        (WebCore::OpenSSLCryptoPtrDeleter<EC_POINT>::operator() const):
        (WebCore::OpenSSLCryptoPtrDeleter<ECDSA_SIG>::operator() const):
        (WebCore::OpenSSLCryptoPtrDeleter<ASN1_SEQUENCE_ANY>::operator() const):
        * crypto/openssl/OpenSSLUtilities.cpp:
        (WebCore::convertToBytes):
        (WebCore::convertToBytesExpand):
        (WebCore::convertToBigNumber):
        * crypto/openssl/OpenSSLUtilities.h:

2021-07-07  Alex Christensen  <achristensen@webkit.org>

        DOMURL's href setter should use empty URL as base URL
        https://bugs.webkit.org/show_bug.cgi?id=227772

        Reviewed by Yusuke Suzuki.

        This matches Chrome and Firefox.

        * html/DOMURL.cpp:
        (WebCore::DOMURL::setHref):

2021-07-07  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Unexpected content wrap when the containing block width is fixed
        https://bugs.webkit.org/show_bug.cgi?id=227746

        Reviewed by Antti Koivisto.

        Test: fast/inline/inline-content-should-fit-the-line.html

        While we resolved the relative Length value, the float -> LayoutUnit conversion implicitly floors the return value.
        This flooring causes unexpected content wrap when the type we use for the measured width does not match the precision of the LayoutUnit.

        * layout/formattingContexts/inline/InlineContentBreaker.cpp:
        (WebCore::Layout::InlineContentBreaker::processInlineContent):

2021-07-07  Alan Bujtas  <zalan@apple.com>

        [Legacy line layout] Inline content on subpixel position makes the table cell scroll
        https://bugs.webkit.org/show_bug.cgi?id=227594
        <rdar://74884402>

        Reviewed by Simon Fraser.

        The root inlinebox is supposed to fit the [top, top + maxHeight] space as it is computed based
        on the inline level boxes. However due to the integral rounding on the root inlinebox's logical top,
        it may accidentally leak out of the containing block and trigger unintended layout overflow.
        This patch ensures that we don't stretch the line (top/bottom) with the integral positioned root inlinebox.

        Test: fast/inline/hidpi-root-inlinebox-integral-rounding-table-simple.html

        * rendering/LegacyInlineFlowBox.cpp:
        (WebCore::LegacyInlineFlowBox::placeBoxesInBlockDirection):

2021-07-07  Chris Dumez  <cdumez@apple.com>

        IDBIndex.keyPath should keep returning the same object
        https://bugs.webkit.org/show_bug.cgi?id=227758

        Reviewed by Geoffrey Garen.

        IDBIndex.keyPath should keep returning the same object to match other browser
        engines (Gecko and Blink).

        No new tests, rebaselined existing tests.

        * Modules/indexeddb/IDBIndex.idl:

2021-07-07  Alex Christensen  <achristensen@webkit.org>

        Allow setting empty hosts of URLs with non-special schemes
        https://bugs.webkit.org/show_bug.cgi?id=227752

        Reviewed by Chris Dumez.

        asdf:/// is fine.
        http:/// is not fine.

        * html/URLDecomposition.cpp:
        (WebCore::URLDecomposition::setHost):
        (WebCore::URLDecomposition::setHostname):
        (WebCore::URLDecomposition::hash const):

2021-07-07  Ryosuke Niwa  <rniwa@webkit.org>

        Deploy smart pointers in DOMWindow
        https://bugs.webkit.org/show_bug.cgi?id=227584

        Reviewed by David Kilzer.

        Deployed Ref/RefPtr in more places in DOMWindow.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::performance const):
        (WebCore::DOMWindow::shouldHaveWebKitNamespaceForWorld):
        (WebCore::DOMWindow::postMessage):
        (WebCore::DOMWindow::frameElement const):
        (WebCore::DOMWindow::focus):
        (WebCore::DOMWindow::blur):
        (WebCore::DOMWindow::close):
        (WebCore::DOMWindow::print):
        (WebCore::DOMWindow::stop):
        (WebCore::DOMWindow::alert):
        (WebCore::DOMWindow::confirmForBindings):
        (WebCore::DOMWindow::prompt):
        (WebCore::DOMWindow::outerHeight const):
        (WebCore::DOMWindow::outerWidth const):
        (WebCore::DOMWindow::innerHeight const):
        (WebCore::DOMWindow::innerWidth const):
        (WebCore::DOMWindow::screenX const):
        (WebCore::DOMWindow::screenY const):
        (WebCore::DOMWindow::scrollX const):
        (WebCore::DOMWindow::scrollY const):
        (WebCore::DOMWindow::closed const):
        (WebCore::DOMWindow::name const):
        (WebCore::DOMWindow::setName):
        (WebCore::DOMWindow::setStatus):
        (WebCore::DOMWindow::setDefaultStatus):
        (WebCore::DOMWindow::opener const):
        (WebCore::DOMWindow::disownOpener):
        (WebCore::DOMWindow::parent const):
        (WebCore::DOMWindow::top const):
        (WebCore::DOMWindow::consumeTransientActivation):
        (WebCore::DOMWindow::notifyActivated):
        (WebCore::DOMWindow::getMatchedCSSRules const):
        (WebCore::DOMWindow::scrollBy const):
        (WebCore::DOMWindow::allowedToChangeWindowGeometry const):
        (WebCore::DOMWindow::setTimeout):
        (WebCore::DOMWindow::clearTimeout):
        (WebCore::DOMWindow::setInterval):
        (WebCore::DOMWindow::requestAnimationFrame):
        (WebCore::DOMWindow::cancelAnimationFrame):
        (WebCore::DOMWindow::createImageBitmap):
        (WebCore::DOMWindow::isSecureContext const):
        (WebCore::DOMWindow::addEventListener):
        (WebCore::DOMWindow::startListeningForDeviceOrientationIfNecessary):
        (WebCore::DOMWindow::startListeningForDeviceMotionIfNecessary):
        (WebCore::DOMWindow::incrementScrollEventListenersCount):
        (WebCore::DOMWindow::removeEventListener):
        (WebCore::DOMWindow::dispatchLoadEvent):
        (WebCore::DOMWindow::removeAllEventListeners):
        (WebCore::DOMWindow::setLocation):
        (WebCore::DOMWindow::createWindow):
        (WebCore::DOMWindow::open):
        (WebCore::DOMWindow::showModalDialog):

2021-07-07  Aditya Keerthi  <akeerthi@apple.com>

        [iOS] Inconsistent styling for input[type="submit"] and button[type="submit"]
        https://bugs.webkit.org/show_bug.cgi?id=227043
        <rdar://problem/79629354>

        Reviewed by Wenson Hsieh.

        In iOS 15, submit buttons have a different appearance from standard
        buttons, matching UIKit's "preferred" button style.

        Previously, all buttons had the same styling, which meant that
        input[type="submit"] and button[type="submit"] had the same
        appearance by default. The changes made for iOS 15 were applied to
        input[type="submit"], but not button[type="submit"], leading to
        inconsistent styling.

        Test: fast/forms/ios/form-control-refresh/button/button-type-submit.html

        * css/html.css:

        Ensure the different style applied to input[type="submit"] also applies
        to button[type="submit"].

        Additionally, apply the new style to button[type="menu"]. This type is
        unsupported, but should have the same appearance as a submit button,
        according to the button-type-menu-historical.html web platform test.

2021-07-07  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Cairo] Merge PlatformContextCairo into GraphicsContextCairo
        https://bugs.webkit.org/show_bug.cgi?id=227721

        Reviewed by Don Olmstead.

        PlatformContextCairo was introduced to separate Cairo specific
        code from the platform-independent GraphicsContext class. However,
        GraphicsContext is a abstract class since r278062. And,
        GraphicsContextCairo is a Cairo specific concrete class.

        Some modifications are needed to merge PlatformContextCairo into
        GraphicsContextCairo. Renamed m_state to m_cairoState. Renamed
        save() and restore() to saveInternal() and restoreInternal().

        * platform/Cairo.cmake:
        * platform/SourcesCairo.txt:
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cairo/CairoOperations.cpp:
        (WebCore::Cairo::drawShadowLayerBuffer):
        (WebCore::Cairo::drawShadowImage):
        (WebCore::Cairo::fillShadowBuffer):
        (WebCore::Cairo::drawPathShadow):
        (WebCore::Cairo::fillCurrentCairoPath):
        (WebCore::Cairo::drawGlyphsShadow):
        (WebCore::Cairo::computeLineBoundsAndAntialiasingModeForText):
        (WebCore::Cairo::State::setStrokeThickness):
        (WebCore::Cairo::State::setStrokeStyle):
        (WebCore::Cairo::State::setCompositeOperation):
        (WebCore::Cairo::State::setShouldAntialias):
        (WebCore::Cairo::State::setCTM):
        (WebCore::Cairo::State::getCTM):
        (WebCore::Cairo::State::getClipBounds):
        (WebCore::Cairo::State::roundToDevicePixels):
        (WebCore::Cairo::State::isAcceleratedContext):
        (WebCore::Cairo::ShadowState::isRequired const):
        (WebCore::Cairo::setLineCap):
        (WebCore::Cairo::setLineDash):
        (WebCore::Cairo::setLineJoin):
        (WebCore::Cairo::setMiterLimit):
        (WebCore::Cairo::fillRect):
        (WebCore::Cairo::fillRoundedRect):
        (WebCore::Cairo::fillRectWithRoundedHole):
        (WebCore::Cairo::fillPath):
        (WebCore::Cairo::strokeRect):
        (WebCore::Cairo::strokePath):
        (WebCore::Cairo::clearRect):
        (WebCore::Cairo::drawGlyphs):
        (WebCore::Cairo::drawPlatformImage):
        (WebCore::Cairo::drawPattern):
        (WebCore::Cairo::drawSurface):
        (WebCore::Cairo::drawRect):
        (WebCore::Cairo::drawLine):
        (WebCore::Cairo::drawLinesForText):
        (WebCore::Cairo::drawDotsForDocumentMarker):
        (WebCore::Cairo::drawEllipse):
        (WebCore::Cairo::drawFocusRing):
        (WebCore::Cairo::save):
        (WebCore::Cairo::restore):
        (WebCore::Cairo::translate):
        (WebCore::Cairo::rotate):
        (WebCore::Cairo::scale):
        (WebCore::Cairo::concatCTM):
        (WebCore::Cairo::beginTransparencyLayer):
        (WebCore::Cairo::endTransparencyLayer):
        (WebCore::Cairo::clip):
        (WebCore::Cairo::clipOut):
        (WebCore::Cairo::clipPath):
        (WebCore::Cairo::clipToImageBuffer):
        * platform/graphics/cairo/CairoOperations.h:
        * platform/graphics/cairo/FontCairo.cpp:
        * platform/graphics/cairo/GradientCairo.cpp:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContextCairo::GraphicsContextCairo):
        (WebCore::GraphicsContextCairo::platformContext const):
        (WebCore::GraphicsContextCairo::save):
        (WebCore::GraphicsContextCairo::restore):
        (WebCore::GraphicsContextCairo::drawRect):
        (WebCore::GraphicsContextCairo::drawNativeImage):
        (WebCore::GraphicsContextCairo::drawLine):
        (WebCore::GraphicsContextCairo::drawEllipse):
        (WebCore::GraphicsContextCairo::fillPath):
        (WebCore::GraphicsContextCairo::strokePath):
        (WebCore::GraphicsContextCairo::fillRect):
        (WebCore::GraphicsContextCairo::clip):
        (WebCore::GraphicsContextCairo::clipPath):
        (WebCore::GraphicsContextCairo::clipToImageBuffer):
        (WebCore::GraphicsContextCairo::drawFocusRing):
        (WebCore::GraphicsContextCairo::drawLinesForText):
        (WebCore::GraphicsContextCairo::drawDotsForDocumentMarker):
        (WebCore::GraphicsContextCairo::roundToDevicePixels):
        (WebCore::GraphicsContextCairo::translate):
        (WebCore::GraphicsContextCairo::updateState):
        (WebCore::GraphicsContextCairo::concatCTM):
        (WebCore::GraphicsContextCairo::setCTM):
        (WebCore::GraphicsContextCairo::beginTransparencyLayer):
        (WebCore::GraphicsContextCairo::endTransparencyLayer):
        (WebCore::GraphicsContextCairo::clearRect):
        (WebCore::GraphicsContextCairo::strokeRect):
        (WebCore::GraphicsContextCairo::setLineCap):
        (WebCore::GraphicsContextCairo::setLineDash):
        (WebCore::GraphicsContextCairo::setLineJoin):
        (WebCore::GraphicsContextCairo::setMiterLimit):
        (WebCore::GraphicsContextCairo::clipOut):
        (WebCore::GraphicsContextCairo::rotate):
        (WebCore::GraphicsContextCairo::scale):
        (WebCore::GraphicsContextCairo::fillRoundedRectImpl):
        (WebCore::GraphicsContextCairo::fillRectWithRoundedHole):
        (WebCore::GraphicsContextCairo::drawPattern):
        (WebCore::GraphicsContextCairo::drawGlyphs):
        (WebCore::GraphicsContextCairo::cr const):
        (WebCore::GraphicsContextCairo::layers):
        (WebCore::GraphicsContextCairo::saveInternal):
        (WebCore::GraphicsContextCairo::restoreInternal):
        (WebCore::GraphicsContextCairo::pushImageMask):
        (WebCore::GraphicsContextCairo::graphicsContextPrivate):
        (WebCore::GraphicsContextCairo::~GraphicsContextCairo): Deleted.
        * platform/graphics/cairo/GraphicsContextCairo.h:
        * platform/graphics/cairo/GraphicsContextGLCairo.cpp:
        * platform/graphics/cairo/GraphicsContextPlatformPrivateCairo.h:
        * platform/graphics/cairo/ImageBufferCairoBackend.cpp:
        * platform/graphics/cairo/PlatformContextCairo.cpp: Removed.
        * platform/graphics/cairo/PlatformContextCairo.h: Removed.
        * platform/graphics/nicosia/cairo/NicosiaCairoOperationRecorder.cpp:
        (Nicosia::contextForReplay):
        * platform/graphics/nicosia/cairo/NicosiaPaintingContextCairo.cpp:
        * platform/graphics/nicosia/cairo/NicosiaPaintingOperationReplayCairo.h:
        (Nicosia::PaintingOperationReplayCairo::PaintingOperationReplayCairo):
        * platform/graphics/win/Direct2DOperations.h:
        * platform/graphics/win/GraphicsContextCairoWin.cpp:
        (WebCore::GraphicsContextCairo::GraphicsContextCairo):
        (WebCore::drawBitmapToContext):
        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:
        * platform/gtk/ScrollbarThemeGtk.cpp:
        * platform/win/DragImageCairoWin.cpp:
        (WebCore::deallocContext):
        (WebCore::allocImage):
        (WebCore::scaleDragImage):
        (WebCore::createDragImageFromImage):

2021-07-07  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r279271.
        https://bugs.webkit.org/show_bug.cgi?id=227764

        Gmail labels (folders) aren't visible on left side anymore

        Reverted changeset:

        "[css-flexbox] Do not clamp flex base size with
        {min|max}-{height|width}"
        https://bugs.webkit.org/show_bug.cgi?id=225590
        https://commits.webkit.org/r279271

2021-07-07  Alex Christensen  <achristensen@webkit.org>

        Use more Span
        https://bugs.webkit.org/show_bug.cgi?id=227606

        Reviewed by Darin Adler.

        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::showCertificate):
        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::decoder const):
        * platform/network/cf/CertificateInfoCFNet.cpp:
        (WTF::Persistence::encodeCFData):
        * workers/service/server/RegistrationDatabase.cpp:
        (WebCore::RegistrationDatabase::importRecords):
        * workers/service/server/SWScriptStorage.cpp:
        (WebCore::SWScriptStorage::store):

2021-07-07  Tim Nguyen  <ntim@apple.com>

        Use setBooleanAttribute instead of setAttributeWithoutSynchronization(X, Y ? emptyAtom() : nullAtom());
        https://bugs.webkit.org/show_bug.cgi?id=227745

        Reviewed by Antti Koivisto.

        It's easier to read and attribute sync doesn't make a difference here (it only does for style & SVG attributes).
        Also clean up HTMLDialogElement to remove intermediary `setOpen` method.

        * html/HTMLDialogElement.cpp:
        (WebCore::HTMLDialogElement::show):
        (WebCore::HTMLDialogElement::showModal):
        (WebCore::HTMLDialogElement::close):
        (WebCore::HTMLDialogElement::parseAttribute):
        (WebCore::HTMLDialogElement::setOpen): Deleted.
        * html/HTMLDialogElement.h:
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::setMultiple):

2021-07-07  Chris Dumez  <cdumez@apple.com>

        SubtleCrypto should only be exposed to secure contexts
        https://bugs.webkit.org/show_bug.cgi?id=227725

        Reviewed by Darin Adler.

        SubtleCrypto should only be exposed to secure contexts:
        - https://www.w3.org/TR/WebCryptoAPI/#dfn-Crypto

        Gecko and Blink match the specification.

        This was causing WebKit to fail the WebCryptoAPI/historical.any.html WPT test.

        Test: http/wpt/crypto/historical.html

        * crypto/CryptoKey.idl:
        * crypto/SubtleCrypto.idl:
        * page/Crypto.idl:

2021-07-07  Chris Lord  <clord@igalia.com>

        [WPE] Fieldset elements can incorrectly get treated as opaque with async scrolling overflow areas enabled
        https://bugs.webkit.org/show_bug.cgi?id=227679

        Reviewed by Simon Fraser.

        Don't treat fieldset elements as opaque as their background shape is
        determined by its children and can be non-rectangular.

        No new tests, covered by existing tests.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::backgroundIsKnownToBeOpaqueInRect const):

2021-07-06  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r279628.
        https://bugs.webkit.org/show_bug.cgi?id=227737

        Test does not work since it relies on r279546, which is
        reverted due to Speedometer regression

        Reverted changeset:

        "SubtleCrypto should only be exposed to secure contexts"
        https://bugs.webkit.org/show_bug.cgi?id=227725
        https://commits.webkit.org/r279628

2021-07-06  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, need CryptoKey and SubtleCrypto names

        * bindings/js/WebCoreBuiltinNames.h:

2021-07-06  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r262237) Safari 14.x shows graphics artifacts when scrolling, using drop-down menus or just moving the mouse
        https://bugs.webkit.org/show_bug.cgi?id=220892
        <rdar://73538454>

        Reviewed by Alan Bujtas.

        Fix an issue with backing sharing where a composited layer needs to interrupted a backing
        sharing sequence. In some cases, a layer that became composited via an indirect reason
        (like overflow positioning) would not interrupt a backing sharing sequence, leaving a dangling
        layer that ended up painting into the wrong ancestor.

        The fix is to ensure that BackingSharingState::updateBeforeDescendantTraversal() and
        BackingSharingState::updateAfterDescendantTraversal() have the same behavior when a layer
        becomes composited (thus interrupting the sequence). However, we also have ensure that 
        updateAfterDescendantTraversal() doesn't erroeously interrupt the sequence when the sequence
        was initiated by some descendant, hence the check against the preDescendantProviderCandidate.

        Test: compositing/shared-backing/backing-sharing-compositing-change.html

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::BackingSharingState::endBackingSharingSequence):
        (WebCore::RenderLayerCompositor::BackingSharingState::updateBeforeDescendantTraversal):
        (WebCore::RenderLayerCompositor::BackingSharingState::updateAfterDescendantTraversal):
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        (WebCore::RenderLayerCompositor::traverseUnchangedSubtree):

2021-07-06  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r279546, r279554, r279558 and r279567.
        https://bugs.webkit.org/show_bug.cgi?id=227732

        Speedometer/jQuery-TodoMVC 2-3% regression

        Reverted changesets:

        "[WebIDL] Rework runtime enabled properties leveraging
        PropertyCallback"
        https://bugs.webkit.org/show_bug.cgi?id=227275
        https://commits.webkit.org/r279546

        "[WebIDL] Generate constructor's hash table in
        GenerateConstructorHelperMethods"
        https://bugs.webkit.org/show_bug.cgi?id=227668
        https://commits.webkit.org/r279554

        "[WebIDL] Simplify generation of runtime conditionally read-
        write attributes"
        https://bugs.webkit.org/show_bug.cgi?id=227672
        https://commits.webkit.org/r279558

        "Use AbortSignal's [PrivateIdentifier] whenSignalAborted()
        static method"
        https://bugs.webkit.org/show_bug.cgi?id=227673
        https://commits.webkit.org/r279567

2021-07-06  Alex Christensen  <achristensen@webkit.org>

        imported/w3c/web-platform-tests/fetch/api/credentials/authentication-basic.any*.html are crashing in debug
        https://bugs.webkit.org/show_bug.cgi?id=227310

        Reviewed by Chris Dumez.

        In r228486 we blocked cross-origin requests from asking for credentials, and we wanted to add a console log for web developers
        to see why they could no longer ask for credentials.  r228703 loosened that to allow main resources to request credentials,
        and it added an incorrect assertion before logging.  ResourceLoader::isAllowedToAskUserForCredentials has two other reasons
        why credentials could be blocked, and there is no reason to log in those cases because that is standard web behavior, as seen by
        running the tests in Chrome and Firefox and seeing no console log.  This removes the logs in cases where other browsers also
        have the same behavior and do not log, and removes the incorrect assertion.

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::didBlockAuthenticationChallenge):

2021-07-06  Chris Dumez  <cdumez@apple.com>

        SubtleCrypto should only be exposed to secure contexts
        https://bugs.webkit.org/show_bug.cgi?id=227725

        Reviewed by Darin Adler.

        SubtleCrypto should only be exposed to secure contexts:
        - https://www.w3.org/TR/WebCryptoAPI/#dfn-Crypto

        Gecko and Blink match the specification.

        This was causing WebKit to fail the WebCryptoAPI/historical.any.html WPT test.

        Test: http/wpt/crypto/historical.html

        * crypto/CryptoKey.idl:
        * crypto/SubtleCrypto.idl:
        * page/Crypto.idl:

2021-07-06  Ryosuke Niwa  <rniwa@webkit.org>

        Deploy smart pointers in EventHandler and UserInputBridge
        https://bugs.webkit.org/show_bug.cgi?id=227481
        <rdar://problem/79906757>

        Reviewed by Wenson Hsieh and Chris Dumez.

        Deployed Ref/RefPtr in various places in EventHandler and UserInputBridge.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::selectClosestWordFromHitTestResult):
        (WebCore::EventHandler::selectClosestContextualWordFromMouseEvent):
        (WebCore::EventHandler::selectClosestContextualWordOrLinkFromMouseEvent):
        (WebCore::EventHandler::handleMousePressEventTripleClick):
        (WebCore::EventHandler::handleMousePressEventSingleClick):
        (WebCore::EventHandler::selectionExtentRespectingEditingBoundary):
        (WebCore::EventHandler::handleMouseDraggedEvent):
        (WebCore::EventHandler::eventMayStartDrag const):
        (WebCore::EventHandler::updateSelectionForMouseDrag):
        (WebCore::EventHandler::handleMouseReleaseEvent):
        (WebCore::EventHandler::hitTestResultAtPoint const):
        (WebCore::EventHandler::scrollOverflow):
        (WebCore::EventHandler::logicalScrollOverflow):
        (WebCore::EventHandler::scrollRecursively):
        (WebCore::EventHandler::logicalScrollRecursively):
        (WebCore::EventHandler::updateCursor):
        (WebCore::EventHandler::selectCursor):
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::EventHandler::handleMouseMoveEvent):
        (WebCore::contentFrameForNode): Renamed from targetIsFrame and made it return the node.
        (WebCore::EventHandler::updateDragAndDrop):
        (WebCore::EventHandler::cancelDragAndDrop):
        (WebCore::EventHandler::performDragAndDrop):
        (WebCore::hierarchyHasCapturingEventListeners):
        (WebCore::EventHandler::updateMouseEventTargetNode):
        (WebCore::EventHandler::notifyScrollableAreasOfMouseEvents):
        (WebCore::EventHandler::dispatchMouseEvent):
        (WebCore::EventHandler::isInsideScrollbar const):
        (WebCore::EventHandler::handleWheelEvent):
        (WebCore::EventHandler::handleWheelEventInternal):
        (WebCore::EventHandler::sendContextMenuEvent):
        (WebCore::EventHandler::sendContextMenuEventForKey):
        (WebCore::EventHandler::fakeMouseMoveEventTimerFired):
        (WebCore::EventHandler::hoverTimerFired):
        (WebCore::EventHandler::handleAccessKey):
        (WebCore::EventHandler::isKeyEventAllowedInFullScreen const):
        (WebCore::EventHandler::keyEvent):
        (WebCore::EventHandler::internalKeyEvent):
        (WebCore::setInitialKeyboardSelection):
        (WebCore::removeDraggedContentDocumentMarkersFromAllFramesInPage):
        (WebCore::EventHandler::handleKeyboardScrolling):
        (WebCore::EventHandler::handleTouchEvent):
        (WebCore::EventHandler::passWheelEventToWidget):
        * replay/UserInputBridge.cpp:
        (WebCore::UserInputBridge::handleMousePressEvent):
        (WebCore::UserInputBridge::handleMouseReleaseEvent):
        (WebCore::UserInputBridge::handleMouseMoveEvent):
        (WebCore::UserInputBridge::handleMouseMoveOnScrollbarEvent):
        (WebCore::UserInputBridge::handleMouseForceEvent):
        (WebCore::UserInputBridge::handleKeyEvent):
        (WebCore::UserInputBridge::handleAccessKeyEvent):
        (WebCore::UserInputBridge::handleWheelEvent):
        (WebCore::UserInputBridge::scrollRecursively):
        (WebCore::UserInputBridge::logicalScrollRecursively):
        (WebCore::UserInputBridge::loadRequest):
        (WebCore::UserInputBridge::tryClosePage):

2021-07-06  Kimmo Kinnunen  <kkinnunen@apple.com>

        WebGL video to texture upload spends time clearing the uploaded-to texture
        https://bugs.webkit.org/show_bug.cgi?id=227582
        <rdar://problem/80020335>

        Reviewed by Kenneth Russell.

        Disable robust resource initiaization for the shared ANGLE context that is used
        to copy video frames to WebGL textures. Otherwise ANGLE would spend time
        initializing the texture in `gl::DrawArrays`.

        No new tests, we currently do not have WebGL perf tests.

        * platform/graphics/angle/GraphicsContextGLANGLE.cpp:
        (WebCore::GraphicsContextGLOpenGL::texImage2DDirect):
        Add the direct texImage2D call so that the texture seed can be
        somehow updated. This will be removed once the texture image version
        management is fixed to be a bit more robust.

        * platform/graphics/cocoa/GraphicsContextGLOpenGLCocoa.mm:
        (WebCore::GraphicsContextGLOpenGL::GraphicsContextGLOpenGL):
        * platform/graphics/cv/GraphicsContextGLCVANGLE.cpp:
        (WebCore::GraphicsContextGLCVANGLE::copyPixelBufferToTexture):
        * platform/graphics/opengl/GraphicsContextGLOpenGL.h:

2021-07-06  Simon Fraser  <simon.fraser@apple.com>

        RenderLayer does not need a virtual destructor
        https://bugs.webkit.org/show_bug.cgi?id=227706

        Reviewed by Tim Horton.

        The virtual destructor was a holdover from when RenderLayer inherited from
        ScrollableArea.

        * rendering/RenderLayer.h:

2021-07-06  Truitt Savell  <tsavell@apple.com>

        Unreviewed, reverting r279542.

        Casued 4 test crashes

        Reverted changeset:

        "SourceBuffer.abort() doesn't go back to state
        WAITING_FOR_SEGMENT properly"
        https://bugs.webkit.org/show_bug.cgi?id=227559
        https://commits.webkit.org/r279542

2021-07-06  Chris Dumez  <cdumez@apple.com>

        Make sure PlatformCALayer gets destroyed on the main thread
        https://bugs.webkit.org/show_bug.cgi?id=227714

        Reviewed by Geoffrey Garen.

        Make sure PlatformCALayer gets destroyed on the main thread as we have evidence this is
        not always the case and its destructor is definitely not safe to call on a non-main
        thread.

        * platform/graphics/ca/PlatformCALayer.h:

2021-07-06  Jer Noble  <jer.noble@apple.com>

        MediaPlayer may be left in a non-visible state
        https://bugs.webkit.org/show_bug.cgi?id=227711

        Reviewed by Eric Carlson.

        Prospective fix for possible edge-case behavior. MediaPlayer defaults to non-visible state
        at creation time, but that visibility state is set to true in two places: 
        - When the Page's visibility state changes
        - During layout

        If the MediaPlayer is created (or re-created) after the Page's visibility state, or (somehow)
        layout does not occur, the MediaPlayer can be left thinking it is not visible, which could
        cause downstream effects like a failure to render video content.

        Rather than wait for layout to occur, or for the Page's visibility state to change, always
        set the visibility state immediately after creating the MediaPlayer object.

        No test, as it's unclear what edge case may cause this problem to occur; could be a result of
        re-creating the remote MediaPlayer after a GPU process crash; could be a specific page behavior
        when switching media sources; could only occur in fullscreen mode.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::createMediaPlayer:

2021-07-06  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Live Text] Extraneous spaces when copying or translating Chinese and Japanese text in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=227674
        rdar://79669807

        Reviewed by Tim Horton.

        See WebKit/ChangeLog for more details.

        Test: fast/images/text-recognition/image-overlay-text-without-leading-whitespace.html

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::updateWithTextRecognitionResult):

        For each recognized word in text, only append a trailing newline in the text content of the text container
        element if `hasLeadingWhitespace` is set. Drive-by fix: additionally remove logic to append a line break when
        computing and applying CSS transforms to text container elements.

        * platform/TextRecognitionResult.h:
        (WebCore::TextRecognitionWordData::TextRecognitionWordData):
        (WebCore::TextRecognitionWordData::encode const):
        (WebCore::TextRecognitionWordData::decode):

        Add a per-word `hasLeadingWhitespace` flag.

        * testing/Internals.cpp:
        (WebCore::makeDataForLine):
        * testing/Internals.h:
        * testing/Internals.idl:

2021-07-06  Youenn Fablet  <youenn@apple.com>

        Unable to use 'data:application/javascript' url for Worker
        https://bugs.webkit.org/show_bug.cgi?id=225716
        <rdar://problem/78222538>

        Reviewed by Alex Christensen.

        As per https://fetch.spec.whatwg.org/#main-fetch step 11, same origin fetch for data URL should succeed.
        Update AbstractWorker to let such URLs trigger loads and update WorkerScriptLoader to enable those loads.

        Covered by rebased tests.

        * workers/AbstractWorker.cpp:
        (WebCore::AbstractWorker::resolveURL):
        * workers/WorkerScriptLoader.cpp:
        (WebCore::WorkerScriptLoader::loadAsynchronously):

2021-07-06  Alex Christensen  <achristensen@webkit.org>

        loadSimulatedRequest: should do same delegate callbacks as loadHTMLString and loadData
        https://bugs.webkit.org/show_bug.cgi?id=227599

        Reviewed by Chris Dumez.

        * loader/SubstituteData.h:

2021-07-06  Chris Dumez  <cdumez@apple.com>

        Add assertions in LayerPool to help debug <rdar://80184576>
        https://bugs.webkit.org/show_bug.cgi?id=227710

        Reviewed by Simon Fraser.

        * platform/graphics/ca/LayerPool.cpp:
        (WebCore::LayerPool::LayerPool):
        (WebCore::LayerPool::~LayerPool):
        (WebCore::LayerPool::addLayer):
        (WebCore::LayerPool::takeLayerWithSize):
        (WebCore::LayerPool::pruneTimerFired):
        (WebCore::LayerPool::drain):
        * platform/graphics/ca/LayerPool.h:

2021-07-06  Chris Dumez  <cdumez@apple.com>

        Unreviewed, reverting r279495.

        Seems to have caused a ~2% PLT5 regression

        Reverted changeset:

        "[macOS] Suspend WebProcesses that are in the process cache"
        https://bugs.webkit.org/show_bug.cgi?id=227269
        https://commits.webkit.org/r279495

2021-07-06  Youenn Fablet  <youenn@apple.com>

        Remove MediaStreamTrack.onconstrainederror
        https://bugs.webkit.org/show_bug.cgi?id=227696

        Reviewed by Eric Carlson.

        Covered by updated tests.

        * Modules/mediastream/MediaStreamTrack.idl:
        * dom/EventNames.h:
        Remove never used/deprecated event handler.

2021-07-06  Youenn Fablet  <youenn@apple.com>

        Set kVTCompressionPropertyKey_MaxKeyFrameInterval in VideoSampleBufferCompressor
        https://bugs.webkit.org/show_bug.cgi?id=227680
        <rdar://78027782>

        Reviewed by Eric Carlson.

        Set kVTCompressionPropertyKey_MaxKeyFrameInterval in addition to kVTCompressionPropertyKey_MaxKeyFrameIntervalDuration.
        Manually tested.

        * platform/mediarecorder/cocoa/VideoSampleBufferCompressor.mm:
        (WebCore::VideoSampleBufferCompressor::initCompressionSession):

2021-07-06  Fujii Hironori  <Hironori.Fujii@sony.com>

        [curl][Win] very high CPU load on page with WebSocket
        https://bugs.webkit.org/show_bug.cgi?id=227428
        <rdar://problem/80150503>

        Reviewed by Don Olmstead.

        curl_socket_t is UINT_PTR on Windows while it is int on other
        platforms. CurlStream::appendMonitoringFd was failing to update
        `maxfd` because the following condition can't be true on Windows.

        > if (maxfd < *socket)
        >     maxfd = *socket;

        As the result, ::select was not called, and CurlStreamScheduler's
        thread ran busy.

        * platform/network/curl/CurlStream.cpp:
        (WebCore::CurlStream::appendMonitoringFd): Added static_cast.

2021-07-06  Fujii Hironori  <Hironori.Fujii@sony.com>

        [curl][Win] wss: WebSocket doesn't work since r271170
        https://bugs.webkit.org/show_bug.cgi?id=227694

        Reviewed by Don Olmstead.

        r271170 started to use CURLSSLOPT_NATIVE_CA for https for Windows.
        However, I forgot to set the flag to WebSocket curl handles.

        * platform/network/curl/CurlContext.cpp:
        (WebCore::CurlHandle::enableSSLForHost):
        (WebCore::CurlHandle::enableHttp):

2021-07-05  Wenson Hsieh  <wenson_hsieh@apple.com>

        Live Text should not be visible in video thumbnail images behind "Skip Ad" button on YouTube
        https://bugs.webkit.org/show_bug.cgi?id=227692

        Reviewed by Darin Adler.

        Force `text-shadow: none;` for image overlay text, such that Live Text injected into image elements isn't
        visible to the user when the containing image element has a text shadow.

        Test: fast/images/text-recognition/image-overlay-with-text-shadow.html

        * html/shadow/imageOverlay.css:
        (div#image-overlay):

2021-07-05  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add support for conditionally hanging glyph
        https://bugs.webkit.org/show_bug.cgi?id=227676

        Reviewed by Antti Koivisto.

        When a glyph at the end edge of a line hangs, it is not considered when measuring the line’s contents alignment.
        If white-space is set to pre-wrap, the UA must (unconditionally) hang the trailing sequence,
        unless the sequence is followed by a forced line break, in which case it must conditionally hang the sequence instead
        (hang only if it does not otherwise fit in the line prior to justification).
        e.g.
        <div style="white-space: pre-wrap; width: 5ch; text-align: center"> 0 </p>
        We center the _0_ content as the trailing whitespace does not hang here. 

        * layout/formattingContexts/inline/InlineFormattingGeometry.cpp:
        (WebCore::Layout::hangingGlyphWidth): No need for the struct. We can handle it by returning the hanging content width.
        (WebCore::Layout::horizontalAlignmentOffset):
        (WebCore::Layout::HangingTrailingWhitespaceContent::width const): Deleted.
        (WebCore::Layout::HangingTrailingWhitespaceContent::isConditional const): Deleted.
        (WebCore::Layout::HangingTrailingWhitespaceContent::setIsConditional): Deleted.
        (WebCore::Layout::HangingTrailingWhitespaceContent::expand): Deleted.
        (WebCore::Layout::HangingTrailingWhitespaceContent::reset): Deleted.
        (WebCore::Layout::collectHangingTrailingWhitespaceContent): Deleted.

2021-07-05  Alexey Shvayka  <shvaikalesh@gmail.com>

        Use AbortSignal's [PrivateIdentifier] whenSignalAborted() static method
        https://bugs.webkit.org/show_bug.cgi?id=227673

        Reviewed by Youenn Fablet.

        Enabled by refactoring in r279546, this change removes handcrafted @whenSignalAborted()
        global function in favor of using equivalent generated [PrivateIdentifier] static method.

        The generated method checks its arguments more strictly (as per WebIDL spec):
        a TypeError is thrown for invalid AbortSignal argument, which progresses the WPT.

        Test: imported/w3c/web-platform-tests/streams/piping/pipe-through.any.js

        * Modules/streams/ReadableStreamInternals.js:
        (readableStreamPipeToWritableStream):
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::addBuiltinGlobals):

2021-07-05  Martin Robinson  <mrobinson@webkit.org>

        [css-scroll-snap] Triggering a layout during scroll causes jittery scrolling on Mac when dragging the scrollbar
        https://bugs.webkit.org/show_bug.cgi?id=227478

        Reviewed by Simon Fraser.

        When dragging the scrollbar thumb, wait to resnap after layout for a
        given axis until the mouse button is up on the scrollbar. This prevents
        the layout and the scrollbar from fighting to set the scroll position
        which causes some pretty terrible jitter in this case.

        Test: css3/scroll-snap/scroll-snap-drag-scrollbar-thumb-with-relayouts.html

        * platform/ScrollAnimationSmooth.cpp:
        (WebCore::ScrollAnimationSmooth::updatePerAxisData): Fix an issue where the new position
        was calculated incorrectly. This did not cause the animation to land on the wrong place,
        but did cause a very janky animation progression when retriggering animations to the
        same location.
        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::retargetRunningAnimation): Added this helper, which retargets a
        a running animation to allow for a smooth transition during relayouts.
        * platform/ScrollAnimator.h: Added new method definition.
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::resnapAfterLayout): Only snap after layout when the user is not
        currently interacting with the scrollbar. Once the scrollbar isn't being interacted with,
        snapping will occur already. When there is already some sort of animation in progress,
        smoothly transition that animation to land on the new position instead of snapping there
        immediately.

2021-07-04  Alexey Shvayka  <shvaikalesh@gmail.com>

        [WebIDL] Simplify generation of runtime conditionally read-write attributes
        https://bugs.webkit.org/show_bug.cgi?id=227672

        Reviewed by Sam Weinig.

        This patch introduces HashTableValue::makeReadOnlyCopy() to avoid manually
        generating & putting a JSValue for an attribute, which is non-trivial to
        do right while supporting all kinds of accelerated / built-in attributes.

        Also, removes incorrect `classForThis` argument from `entries` reification.

        No new tests, no behavior change.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * bindings/scripts/test/JS/*: Updated.

2021-07-04  Alexey Shvayka  <shvaikalesh@gmail.com>

        [WebIDL] Generate constructor's hash table in GenerateConstructorHelperMethods
        https://bugs.webkit.org/show_bug.cgi?id=227668

        Reviewed by Sam Weinig.

        This change moves generation of constructor's hash table to GenerateConstructorHelperMethods,
        right before it is used to define the constructor's s_info, which is nicer than inferring
        table's name and more precise than using ConstructorHasProperties.

        Also, makes $generatingLegacyFactoryFunction bool-ish and removes unused $protoClassName parameter.

        No new tests, no behavior change.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        (GenerateCallbackImplementationContent):
        (GenerateConstructorDefinitions):
        (GenerateConstructorDefinition):
        (GenerateConstructorHelperMethods):
        (ConstructorHasProperties): Deleted.
        * bindings/scripts/test/JS/*: Updated.

2021-07-04  Eric Carlson  <eric.carlson@apple.com>

        WebAudio auto-play policy should come from top document
        https://bugs.webkit.org/show_bug.cgi?id=227593
        rdar://76920375

        Reviewed by Chris Dumez.

        Tests: media/auto-play-video-in-about-blank-iframe.html
               media/auto-play-web-audio-in-about-blank-iframe.html

        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::constructCommon): Get auto-play policy from document()->topDocument().

        * testing/Internals.cpp:
        (WebCore::Internals::setDocumentAutoplayPolicy): New method to test auto-play policy.
        * testing/Internals.h:
        * testing/Internals.idl:

2021-07-04  Zalan Bujtas  <zalan@apple.com>

        [LFC][TFC] Cleanup computedPreferredWidthForColumns and distributeAvailableSpace functions
        https://bugs.webkit.org/show_bug.cgi?id=227669

        Reviewed by Antti Koivisto.

        Let's create some sub-scopes within these long functions to make them read better.

        * layout/formattingContexts/table/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::computedPreferredWidthForColumns):
        * layout/formattingContexts/table/TableLayout.cpp:
        (WebCore::Layout::distributeAvailableSpace):

2021-07-04  Alan Bujtas  <zalan@apple.com>

        [LFC][TFC] 100% percent width column(s) make the table stretch
        https://bugs.webkit.org/show_bug.cgi?id=227667

        Reviewed by Antti Koivisto.

        This patch addresses the odd transition of going from 99% to 100% in accumulated percent width.

        Test: fast/layoutformattingcontext/table-space-width-100-percent-quirk.html

        * layout/formattingContexts/table/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::computedPreferredWidthForColumns):

2021-07-01  Dean Jackson  <dino@apple.com>

        Move BottomControlsBarHeight and InsideMargin to be computed at runtime
        https://bugs.webkit.org/show_bug.cgi?id=227505
        <rdar://problem/79932256>

        Reviewed by Devin Rousso.

        Rather than having two JS constants that have to be kept in sync
        with CSS, simply retrieve the value from the computed style.

        No change in behaviour.

        * Modules/modern-media-controls/controls/inline-media-controls.js:
        (InlineMediaControls.prototype.layout):
        * Modules/modern-media-controls/controls/media-controls.css:
        (:host(audio), :host(video.media-document.audio), *):
        * Modules/modern-media-controls/controls/layout-node.js: Add two helpers to
        retrive computed style values.

2021-07-03  Alexey Shvayka  <shvaikalesh@gmail.com>

        [WebIDL] Rework runtime enabled properties leveraging PropertyCallback
        https://bugs.webkit.org/show_bug.cgi?id=227275

        Reviewed by Saam Barati.

        This performance-neutral change makes implementation of runtime enabled properties independent
        of eager property reification, slightly optimizing DOM global objects initialization.
        A follow-up patch (webkit.org/b/158557) will remove eager property reification of WebIDL
        constructors / prototypes, further reducing CPU usage and memory cost on page load.

        Provided we reify properties without creating transitions and avoid conversion to a cacheable
        dictionary, that should not regress performance & memory usage as well. Non-reified custom
        accessors / values are inline-cached, even through JSProxy. DOM methods are reified on first
        lookup; the same approach is used for multiple hot JSC built-ins (e.g. StringPrototype).

        A huge refactoring was required to keep generation of lazy property callbacks within a single
        function. Handling of private identifiers was decoupled from public ones, while hash table
        generation for constructors / prototypes / instances was merged into GenerateHashTable.

        This approach preserves HashTable's immutability while avoiding addition of extra checks to
        entry lookup and memory usage increase. Another important advantage: a feature that was
        enabled after its interface was created, immediately becomes usable (no page reload needed).

        Also, this change removes all usages of DeletePropertyModeScope from WebCore, which was used
        to disable non-configurable constants at runtime, allowing its complete removal in the future.

        No new tests, no behavior change.

        * bindings/js/JSDOMBuiltinConstructor.h:
        * bindings/js/JSDOMConstructor.h:
        * bindings/js/JSDOMConstructorNotCallable.h:
        * bindings/js/JSDOMConstructorNotConstructable.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        Extract IDLInterface::className() to avoid passing $className as an argument.

        (InstanceOperationCount): Deleted.
        (PrototypeOperationCount): Deleted.
        (InstancePropertyCount): Deleted.
        (PrototypePropertyCount): Deleted.
        (PrototypeHasStaticPropertyTable): Deleted.
        (ConstructorHasProperties):
        (PrototypeHasProperties):
        (InstanceHasProperties):
        Remove *Count helpers because they were incorrect with constants, overloads, private identifiers,
        and Symbol.iterator. Instead, do the count in GeneratePropertiesHashTable to avoid duplicate checks.

        (GeneratePropertiesHashTable):
        (GenerateHashTableValueArray):
        - Compute $hasSetterOrReadonlyProperties early because it's impossible to detect runtime enabled accessors,
          which are concealed behind PropertyAttribute::PropertyCallback, in GenerateHashTableValueArray.
        - Set HashTable.hasSetterOrReadonlyProperties to `true` if a read-only value (constant) was seen.

        (GenerateRuntimeEnableConditionalString):
        Always use provided $globalObjectPtr parameter.

        (GenerateHashTable):
        - Simplify name inference for HashTable's values / indices since hash table names never include ":".
        - Nicely simplify generation of hash table kind comment.
        - Set HashTable.classForThis to `nullptr` for constructors because they can't have DOMAttribute properties.

        (GenerateImplementation):
        - Set ReadOnly attribute for runtime read-only accessors that shadow setter from static hash table.
        - Reify "entries" property of an iterable interface to ensure its identity with Symbol.iterator method.

        (GeneratePrivateIdentifiers):
        - Add support for accelerated DOM attributes, which are rather common.
        - Add support for static operations, which we have a use case for (see @whenSignalAborted).

        (GeneratePrototypeDeclaration):
        Set HasStaticPropertyTable structure flag for global interfaces as well, progressing idlharness.js test.

        (GenerateConstructorHelperMethods):
        Ensure that HasStaticPropertyTable structure flag is set for constructors as well.

        (StringifyJSCAttributes):
        (GetJSCAttributesForAttribute):
        (ShouldBeOnInstance):
        (GenerateHeader):
        (GetAttributeGetter):
        (GetAttributeSetter):
        (GetAttributeJSValue):
        (GetOperationJSValue):
        (GenerateLazyPropertyCallbacks):
        (GenerateCallbackImplementationContent):
        (GetRuntimeEnabledStaticProperties): Deleted.

        * bindings/scripts/test/JS/*: Updated.
        * bindings/scripts/test/DOMWindowConstructors.idl:
        * bindings/scripts/test/TestEnabledBySetting.idl:
        * bindings/scripts/test/TestObj.idl:
        Cover [PrivateIdentifiers] with accelerated DOM attributes, static operations, and constructors.

2021-07-03  Alan Bujtas  <zalan@apple.com>

        REGRESSION (r278377): incorrect hit-testing with clip-path()
        https://bugs.webkit.org/show_bug.cgi?id=227624
        <rdar://problem/79845896>

        Reviewed by Simon Fraser.

        Use the correct coordinate space for clip-path based hittesting.

        1. The hittest location is in the coordinate space of the painting root (hittesting is similar to painting in this context).
        2. RenderBox::hitTestClipPath's accumulatedOffset (as the name implies) should include the offset from the (paint) hittest root.
        3. The clip-path intersecting takes coordinates relative to the containing block.

        Test: fast/clip/hit-test-with-clip-path.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::hitTestVisualOverflow const):
        (WebCore::RenderBox::hitTestClipPath const): Make the hittest root coordinates relative to the containing block.
        (WebCore::RenderBox::hitTestBorderRadius const):
        * rendering/RenderBox.h: Let's not use locationInContainer name as it is way too generic and misleading.
        * rendering/RenderLayer.cpp: Compute and pass in proper accumulated offset value.
        (WebCore::RenderLayer::hitTestLayer):

2021-07-03  Alan Bujtas  <zalan@apple.com>

        [LFC][TFC] Add support for priority list of width types when expanding columns
        https://bugs.webkit.org/show_bug.cgi?id=227627

        Reviewed by Antti Koivisto.

        When expanding the columns to use the extra space available, we need to prioritize certain columns
        with specific width types: fixed > percent > relative > auto
        This is _almost_ the reversed version of the shrinking priority list (but not quite).
        Now we can have mixed column types across multiple rows with expanding and shrinking columns.

        Test: fast/layoutformattingcontext/table-space-mixed-width-type-simple3.html

        * layout/formattingContexts/table/TableLayout.cpp:
        (WebCore::Layout::distributeAvailableSpace):

2021-07-03  Jean-Yves Avenard  <jya@apple.com>

        SourceBuffer.abort() doesn't go back to state WAITING_FOR_SEGMENT properly
        https://bugs.webkit.org/show_bug.cgi?id=227559
        <rdar://problem/79996056>

        Reviewed by Eric Carlson.

        Per spec, calling sourcebuffer.abort method should allow you to add a new segment
        immediately after, as abort moves the append state back to WAITING_FOR_SEGMENT.
        A segment can be either an init segment or a media segment.
        We used to discard all further content until an init segment was encountered.
        This could be problematic due to the typical use case of abort:
        1- Seek to a location
        2- Append a partial media segment long enough to finish seeking and display the
         new content at the new position.
        If multiple seeks were done in rapid succession, abort() is called right after
        before starting the new seek so that we can add the new segment, regardless of what
        was appended before.
        YouTube applies a workaround for Safari where it will always append an init segment
        after calling abort, this is different to what they do with Firefox (and likely Chrome).
        To be able to resume after appending a partial media segment we must ensure that the
        SourceBufferParser is always left in a sane context, and not be interrupted at some
        random points. The abort() call used to interrupt the buffer parsing on the fly and
        then reset things which would require a new init segment to restart.
        Instead we always fully parse the pending buffer received befofe the call to abort.
        The SourceBufferParserAVFObjC could already properly deal with discontinuity unlike
        SourceBufferParserWebM.
        To ensure that buffers sent after the call to abort() are only ever processed once
        the pending ones have been parsed, and in order to avoid having blocking calls
        we play with the order in which tasks are scheduled.

        Fly-by fixes:
        - The SourceBufferParser handle two types of parser: SourceBufferParser and the
        platform specific AVStreamDataParser. Rename the accessor method to more clearly
        differentate which parser we are dealing with.
        - The SourceBufferParserWebM and SourceBufferPrivateAVFObjC used different task dispatching
        mechanisms. We make them both share the same one now found in the base class.

        Tests: media/media-source/media-mp4-h264-partial-abort.html
               media/media-source/media-webm-opus-partial-abort.html

        * platform/graphics/avfoundation/objc/CDMSessionAVContentKeySession.mm:
        (WebCore::CDMSessionAVContentKeySession::~CDMSessionAVContentKeySession): rename method.
        * platform/graphics/avfoundation/objc/CDMSessionAVStreamSession.mm:
        (WebCore::CDMSessionAVStreamSession::~CDMSessionAVStreamSession): rename method.
        (WebCore::CDMSessionAVStreamSession::update): rename method.
        * platform/graphics/avfoundation/objc/CDMSessionMediaSourceAVFObjC.mm: rename method.
        (WebCore::CDMSessionMediaSourceAVFObjC::addSourceBuffer): rename method.
        (WebCore::CDMSessionMediaSourceAVFObjC::removeSourceBuffer): rename method.
        * platform/graphics/avfoundation/objc/SourceBufferParserAVFObjC.h: rename method, remove
        now unused member.
        * platform/graphics/avfoundation/objc/SourceBufferParserAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::removeCodedFrames): Postpone call to ensure
        we are running the remove frame algorithm once all pending frames have been processed.
        (WebCore::SourceBufferParserAVFObjC::resetParserState): Remove use of m_discardSamplesUntilNextInitializationSegment.
        (WebCore::SourceBufferParserAVFObjC::didParseStreamDataAsAsset): Change to base dispatch method.
        (WebCore::SourceBufferParserAVFObjC::didFailToParseStreamDataWithError): Change to base dispatch method.
        (WebCore::SourceBufferParserAVFObjC::didProvideMediaDataForTrackID): Change to base dispatch method.
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h: Rename methods. Remove no longer used
        members.
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::~SourceBufferPrivateAVFObjC):
        (WebCore::SourceBufferPrivateAVFObjC::didParseInitializationData): No longer use a Cancellable task
        as we never cancel it anymore.
        (WebCore::SourceBufferPrivateAVFObjC::append): re-schedule the append task immediately to ensure
        that processed packets flushed on the parser queue during abort are handled in the right order on
        the main thread.
        (WebCore::SourceBufferPrivateAVFObjC::appendCompleted): Check that abort wasn't called since append started
        to ensure that no updateend event is incorrectly fired twice.
        (WebCore::SourceBufferPrivateAVFObjC::abort): Abort is now a no-op that only set the m_abortCalled member.
        (WebCore::SourceBufferPrivateAVFObjC::resetParserState): Change the order of operations so that the
        SourceBufferParser is only reset after it has finished processing its data.
        (WebCore::SourceBufferPrivateAVFObjC::destroyStreamDataParser): Use rename method.
        (WebCore::SourceBufferPrivateAVFObjC::removedFromMediaSource): Use rename method.
        (WebCore::SourceBufferPrivateAVFObjC::streamDataParser const): Renamed method from "parser"
        (WebCore::SourceBufferPrivateAVFObjC::attemptToDecrypt): Use renamed method.
        * platform/graphics/cocoa/SourceBufferParser.cpp:
        (WebCore::callOnMainThreadCallback): Move dispatch method from SourceBufferParserWebM
        (WebCore::SourceBufferParser::setCallOnClientThreadCallback):
        (WebCore::SourceBufferParser::SourceBufferParser):
        * platform/graphics/cocoa/SourceBufferParser.h:
        * platform/graphics/cocoa/SourceBufferParserWebM.cpp:
        (WebCore::SourceBufferParserWebM::SourceBufferParserWebM):
        (WebCore::SourceBufferParserWebM::resetParserState): Don't clear the data set by parsing
        the previous init segment. Set the parsing state to waiting for a new segment if an
        init segment has been fully parsed.
        (WebCore::SourceBufferParserWebM::OnElementEnd):
        (WebCore::SourceBufferParserWebM::OnEbml):
        (WebCore::SourceBufferParserWebM::VideoTrackData::reset):
        (WebCore::SourceBufferParserWebM::VideoTrackData::consumeFrameData):
        (WebCore::SourceBufferParserWebM::AudioTrackData::reset):
        * platform/graphics/cocoa/SourceBufferParserWebM.h:

2021-07-02  Joonghun Park  <jh718.park@samsung.com>

        Unreviewed. Remove the build warning below since r279498.
        warning: redundant move in return statement [-Wredundant-move]

        No new tests, no new behavioral changes.

        * css/parser/CSSPropertyParserWorkerSafe.cpp:
        (WebCore::CSSPropertyParserHelpersWorkerSafe::consumeFontFaceUnicodeRange):

2021-07-02  Chris Dumez  <cdumez@apple.com>

        [MacOS wk1] crypto/workers/subtle/hrsa-postMessage-worker.html is a flaky failure
        https://bugs.webkit.org/show_bug.cgi?id=227540
        <rdar://problem/79977662>

        Reviewed by Geoffrey Garen.

        The test was sending 2 messages to the worker, the first one with the public key
        and the second one for the private key. As the worker would receive those messages,
        it would do some checks synchronously and post a message back to the main thread
        script with the result. As we could see from the test's expected results, the
        main thread script would usually (although flakily) receive the result for the
        private key *before* the result for the public key, which was wrong.

        The reason for this was that serializing / deserializing the crypto key would
        spin the worker's run loop and the worker would thus process incoming messages
        while serializing / deserializing a crypto key from a previous message.

        To address the issue, we now use a BinarySemaphore to wait for the main thread
        to finish the wrapping / unwrapping, instead of spinning the run loop.

        No new tests, unskipped existing test.

        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::wrapCryptoKey):
        (WebCore::WorkerGlobalScope::unwrapCryptoKey):

2021-07-02  Alan Bujtas  <zalan@apple.com>

        [LFC][TFC] Keep track of both the fixed and percent maximum values for each column
        https://bugs.webkit.org/show_bug.cgi?id=227491

        Reviewed by Antti Koivisto.

        This patch is in preparation for supporting mixed column width types when each row
        has diffrent type of widths (e.g <tr><td style="width: 100px;"></td></tr><tr><td style="width: 10%;"></td></tr>)

        * layout/formattingContexts/table/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::computedPreferredWidthForColumns):

2021-07-02  Alan Bujtas  <zalan@apple.com>

        [LFC][TFC] TableGrid::Column holds both the computed and the used width values
        https://bugs.webkit.org/show_bug.cgi?id=227488

        Reviewed by Antti Koivisto.

        This patch cleans up TableGrid::Column interface to ensure we don't confused
        the computed and the used widths for columns.
        This is also in prepartion for adding mixed width type support.

        * layout/formattingContexts/table/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::setUsedGeometryForCells):
        (WebCore::Layout::TableFormattingContext::computedPreferredWidthForColumns):
        (WebCore::Layout::TableFormattingContext::computeAndDistributeExtraSpace):
        * layout/formattingContexts/table/TableFormattingGeometry.cpp:
        (WebCore::Layout::TableFormattingGeometry::horizontalSpaceForCellContent const):
        * layout/formattingContexts/table/TableGrid.cpp:
        (WebCore::Layout::TableGrid::Column::setLogicalWidth): Deleted.
        (WebCore::Layout::TableGrid::Column::logicalWidth const): Deleted.
        (WebCore::Layout::TableGrid::Column::setLogicalLeft): Deleted.
        (WebCore::Layout::TableGrid::Column::logicalLeft const): Deleted.
        * layout/formattingContexts/table/TableGrid.h:
        (WebCore::Layout::TableGrid::Column::usedLogicalRight const):
        (WebCore::Layout::TableGrid::Column::computedLogicalWidth const):
        (WebCore::Layout::TableGrid::Columns::logicalWidth const):
        (WebCore::Layout::TableGrid::Column::setComputedLogicalWidth):
        (WebCore::Layout::TableGrid::Column::setUsedLogicalWidth):
        (WebCore::Layout::TableGrid::Column::usedLogicalWidth const):
        (WebCore::Layout::TableGrid::Column::setUsedLogicalLeft):
        (WebCore::Layout::TableGrid::Column::usedLogicalLeft const):
        (WebCore::Layout::TableGrid::Column::logicalRight const): Deleted.
        (WebCore::Layout::TableGrid::Column::fixedWidth const): Deleted.
        (WebCore::Layout::TableGrid::Column::percent const): Deleted.
        (WebCore::Layout::TableGrid::Column::setFixedWidth): Deleted.
        (WebCore::Layout::TableGrid::Column::setPercent): Deleted.
        * layout/formattingContexts/table/TableLayout.cpp:
        (WebCore::Layout::TableFormattingContext::TableLayout::distributedHorizontalSpace):

2021-07-02  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r279487.
        https://bugs.webkit.org/show_bug.cgi?id=227626

        Added broken ios-wk2 test

        Reverted changeset:

        "WebAudio auto-play policy should come from top document"
        https://bugs.webkit.org/show_bug.cgi?id=227593
        https://commits.webkit.org/r279487

2021-07-02  Youenn Fablet  <youenn@apple.com>

        Make LocalSampleBufferDisplayLayer::requestNotificationWhenReadyForVideoData hop to main thread before hopping to processing thread
        https://bugs.webkit.org/show_bug.cgi?id=227444
        <rdar://79413368>

        Reviewed by Chris Dumez.

        It is safer to hop to main thread in requestNotificationWhenReadyForVideoData callback so that we can check weakThis safely.
        When in main thread, hop to processing thread if LocalSampleBufferDisplayLayer is alive.

        * platform/graphics/avfoundation/objc/LocalSampleBufferDisplayLayer.mm:
        (WebCore::LocalSampleBufferDisplayLayer::~LocalSampleBufferDisplayLayer):
        (WebCore::LocalSampleBufferDisplayLayer::requestNotificationWhenReadyForVideoData):

2021-06-30  Darin Adler  <darin@apple.com>

        CSS parser using a token for Unicode ranges, but recent CSS specification says it should not
        https://bugs.webkit.org/show_bug.cgi?id=227569

        Reviewed by Sam Weinig.

        Tests: imported/w3c/web-platform-tests/css/css-syntax/unicode-range-selector.html
               imported/w3c/web-platform-tests/css/css-syntax/urange-parsing.html

        * css/parser/CSSParserToken.cpp:
        (WebCore::CSSParserToken::CSSParserToken): Change the NumberToken constructor to
        take a StringView so we can recover the original text if we need to parse it as
        part of a Unicode range.
        (WebCore::mergeIfAdjacent): Added. Helper used by convertToDimensionWithUnit.
        (WebCore::CSSParserToken::convertToDimensionWithUnit): If the number token string
        is adjacent to the dimension, then store the string containing both, so it can
        be used if we need to parse it as part of a Unicode range. If the string is long,
        then don't bother because a long string can't be part of such a range anyway. We
        use 4 bits for the length, so can handle lengths in the range [1,15].
        (WebCore::CSSParserToken::originalText const): Added. Used to recover the original
        text for Unicode range parsing.
        (WebCore::CSSParserToken::unitString const): Added. Used to get just the unit part
        of the string for DimensionToken, since the full string now can include the number
        as well in some cases (see above).
        (WebCore::CSSParserToken::copyWithUpdatedString const): Changed the argument type
        to StringView instead of using const& and added an assertion since this is only
        safe if we are moving the backing characters, not changing the string contents.
        (WebCore::CSSParserToken::valueDataCharRawEqual const): Deleted.
        (WebCore::CSSParserToken::operator== const): Use StringView == operator instead of
        our own valueDataCharRawEqual function. Also use unitString for DimensionToken.
        (WebCore::CSSParserToken::serialize const): Use unitString for DimensionToken.
        * css/parser/CSSParserToken.h: Updated for the above. Also deleted
        UnicodeRangeToken, unicodeRangeStart, unicodeRangeEnd, and m_unicodeRange.

        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::consumeResolutionCSSPrimitiveValueWithKnownTokenTypeDimension):
        Use unitString for DimensionToken.
        (WebCore::CSSPropertyParserHelpers::parseHexColor): Ditto.

        * css/parser/CSSPropertyParserWorkerSafe.cpp:
        (WebCore::CSSPropertyParserHelpersWorkerSafe::consumeOptionalDelimiter): Added.
        (WebCore::CSSPropertyParserHelpersWorkerSafe::consumeIdentifier): Added.
        (WebCore::CSSPropertyParserHelpersWorkerSafe::consumeAndAppendOptionalNumber): Added.
        (WebCore::CSSPropertyParserHelpersWorkerSafe::consumeAndAppendOptionalDelimiter): Added.
        (WebCore::CSSPropertyParserHelpersWorkerSafe::consumeAndAppendOptionalQuestionMarks): Added.
        (WebCore::CSSPropertyParserHelpersWorkerSafe::consumeUnicodeRangeString): Added.
        (WebCore::CSSPropertyParserHelpersWorkerSafe::consumeUnicodeRange): Added. Along with the
        functions above, this implements the CSS specification's algorithm for consuming a Unicode
        range, based on existing tokens without requiring a <urange> token.
        (WebCore::CSSPropertyParserHelpersWorkerSafe::consumeFontFaceUnicodeRange): Call
        the new consumeUnicodeRange function from this file instead of the old one that
        depended on a <urange> token. Also refactored to use auto and to do the validity
        check for the range as specified.

        * css/parser/CSSSelectorParser.cpp:
        (WebCore::consumeANPlusB): Use unitString for DimensionToken.

        * css/parser/CSSTokenizer.cpp:
        (WebCore::CSSTokenizer::letterU): Deleted.
        (WebCore::CSSTokenizer::consumeNumber): Added code to pass in the original text
        when constructing a NumberToken.
        (WebCore::CSSTokenizer::consumeUnicodeRange): Deleted.

        * css/parser/CSSTokenizer.h: Deleted consumeUnicodeRange.

        * css/parser/SizesCalcParser.cpp:
        (WebCore::SizesCalcParser::calcToReversePolishNotation): Removed case for
        UnicodeRangeToken.

        * dom/ConstantPropertyMap.cpp:
        (WebCore::variableDataForPositivePixelLength): Pass a null StringView for the
        original text when constructing a NumberToken. This is OK for now since this token
        won't ever be parsed as part of a Unicode range, and we can change it if we ever
        need to support originalText for any other cases.
        (WebCore::variableDataForPositiveDuration): Ditto.

2021-07-01  Ben Nham  <nham@apple.com>

        Unreviewed, reverting r279172.

        Broke WebGL context construction on some devices.

        Reverted changeset:

        "rAF driven WebGL submits excessive amount of GPU work when frames are slow"
        https://bugs.webkit.org/show_bug.cgi?id=227059
        https://commits.webkit.org/r279172

2021-07-01  Jean-Yves Avenard  <jya@apple.com>

        [Cocoa] Last few seconds of 'audio/webm; codecs=vorbis' appended to a SampleBuffer are not played
        https://bugs.webkit.org/show_bug.cgi?id=226069
        rdar://79951528

        Reviewed by Jer Noble.

        Source/WebCore:

        When parsing samples from a WebM file, the samples emitted by the parser can be very short in
        duration, which is ineffecient both in storage costs in our SampleMap, as well as in decoding
        CPU costs, as each sample must be fed into the decoder separately. So the parser will group
        together these small samples into a larger "meta sample" with a duration no shorter than 2s.

        However, at the end of a file, no more sample data will be appended, up to 2s of audio data
        will not be emitted from the parser.

        At the end of an append, always flush audio track data to ensure that all parsed samples are
        emitted, regardless of their collective duration.

        Drive-by Fixes:

        - The logic to handle a partial frame was incorrect. libwebm will always progress and call
        Callback's OnFrame even with partial content as soon as the frame size has been determined.
        bytesRemaining actually contains how many bytes there are available to read and that the
        Callback should attempt to fetch.
        The Callback should then return Status::kOkPartial if the full frame hasn't been seen yet
        or Status::kOkCompleted if it has. kWouldBlock indicates that we do not have information to
        read. kOkPartial and kWouldBlock indicates that libwebm should
        retry later to complete the current frame. All other codes indicate an error.
        - createSampleBuffer() would use the entire m_packetsData to create a CMSampleBuffer, even if partial
        data was read but not yet complete. Only use the fully parsed data to create the CMSampleBuffer.
        When the fully parsed packets are removed from packetsData; adjust the offset of the start of the
        current partial data (this was the primary cause for bug 227499 that caused the first backout)
        - consumeFrameData() would only increase the size of m_packetsData when m_currentPacketSize was
        unset, which would leave the buffer zeroed when partial sample data was present. Always grow
        m_packetsData to be large enough to receive the read data.
        - The Read() method would not return the correct number of bytes read (0) when a null destination
        buffer was passed in.
        - Bug 227382 - SourceBufferParserWebM::StreamingVectorReader Read() returns an incorrect value
        for numActuallyRead when moving to the next segment.

        Test: media/media-source/media-vorbis-partial.html
              media/media-source/media-opus-partial.html

        * platform/graphics/cocoa/SourceBufferParserWebM.cpp:
        (WebCore::SourceBufferParserWebM::appendData):
        (WebCore::SourceBufferParserWebM::VideoTrackData::consumeFrameData):
        (WebCore::SourceBufferParserWebM::VideoTrackData::createSampleBuffer):
        (WebCore::SourceBufferParserWebM::AudioTrackData::consumeFrameData):
        (WebCore::SourceBufferParserWebM::AudioTrackData::createSampleBuffer):
        * platform/graphics/cocoa/SourceBufferParserWebM.h: Rename some members to better indicate what
        they contain. Move some members to the base class as they are always used by Video and Audio.

        LayoutTests:

        * platform/mac/TestExpectations:
        * media/media-source/content/test-vorbis-manifest.json: Added.
        * media/media-source/content/test-vorbis.webm: Added.
        * media/media-source/content/test-opus-manifest.json: Added.
        * media/media-source/content/test-opus.webm: Added.
        * media/media-source/media-vorbis-partial-expected.txt: Added.
        * media/media-source/media-vorbis-partial.html: Added.
        * media/media-source/media-opus-partial-expected.txt: Added.
        * media/media-source/media-opus-partial.html: Added.

2021-07-01  John Wilander  <wilander@apple.com>

        PCM: Change import from CryptoKitCBridging to CryptoKitPrivate
        https://bugs.webkit.org/show_bug.cgi?id=227556
        <rdar://79992592>

        Reviewed by Alex Christensen.

        Patch by Frederic Jacobs.

        No new tests since no functionality is changed.

        * loader/cocoa/PrivateClickMeasurementCocoa.mm:
            Changed import from CryptoKitCBridgingSoftLink.h to CryptoKitPrivateSoftLink.h.

2021-07-01  Alex Christensen  <achristensen@webkit.org>

        Align beacon CORS mode with Chrome and Firefox
        https://bugs.webkit.org/show_bug.cgi?id=227590

        Reviewed by Chris Dumez.

        This follows https://w3c.github.io/beacon/#sec-processing-model step 6.3.
        Now we pass a WPT test that Chrome and Firefox already passed.

        * Modules/beacon/NavigatorBeacon.cpp:
        (WebCore::NavigatorBeacon::sendBeacon):

2021-07-01  Amir Mark Jr  <amir_mark@apple.com>

        Unreviewed, reverting r279481.

        Broke a pre-existing test

        Reverted changeset:

        "Move BottomControlsBarHeight and InsideMargin to be computed
        at runtime"
        https://bugs.webkit.org/show_bug.cgi?id=227505
        https://commits.webkit.org/r279481

2021-07-01  Eric Carlson  <eric.carlson@apple.com>

        WebAudio auto-play policy should come from top document
        https://bugs.webkit.org/show_bug.cgi?id=227593
        rdar://76920375

        Reviewed by Chris Dumez.

        Tests: media/auto-play-video-in-about-blank-iframe.html
               media/auto-play-web-audio-in-about-blank-iframe.html

        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::constructCommon): Get auto-play policy from document()->topDocument().

        * testing/Internals.cpp:
        (WebCore::Internals::setDocumentAutoplayPolicy): New method to test auto-play policy.
        * testing/Internals.h:
        * testing/Internals.idl:

2021-07-01  Youenn Fablet  <youenn@apple.com>

        Disable relay for UDP sockets when not needed
        https://bugs.webkit.org/show_bug.cgi?id=227253

        Reviewed by Eric Carlson.

        * Modules/mediastream/PeerConnectionBackend.h:
        (WebCore::PeerConnectionBackend::shouldFilterICECandidates const):
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::setConfiguration):
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h:
        (WebCore::LibWebRTCMediaEndpoint::rtcSocketFactory):
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::LibWebRTCPeerConnectionBackend::disableICECandidateFiltering):
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.h:
        * platform/mediastream/libwebrtc/LibWebRTCProvider.h:

2021-07-01  Dean Jackson  <dino@apple.com>

        Move BottomControlsBarHeight and InsideMargin to be computed at runtime
        https://bugs.webkit.org/show_bug.cgi?id=227505
        <rdar://problem/79932256>

        Reviewed by Devin Rousso.

        Rather than having two JS constants that have to be kept in sync
        with CSS, simply retrieve the value from the computed style.

        No change in behaviour.

        * Modules/modern-media-controls/controls/inline-media-controls.js:
        (InlineMediaControls.prototype.layout):
        * Modules/modern-media-controls/controls/media-controls.css:
        (:host(audio), :host(video.media-document.audio), *):
        * Modules/modern-media-controls/controls/layout-node.js: Add two helpers to
        retrive computed style values.

2021-07-01  Brady Eidson  <beidson@apple.com>

        HIDGamepadProvider adds an extra 50ms to all inputs
        <rdar://70315838> and https://bugs.webkit.org/show_bug.cgi?id=217742

        Reviewed by Alex Christensen.

        No new tests.
        Tried to write an API test to drive inputs in the delay range, but that was way too fragile
        on a local developer machine, much less a bot that's under load.

        These input delays were an early best-effort to get input to line up with RaF, which the spec
        mentions as a goal.
        
        Not sure how 50 slipped in for HID, vs the 16 on GCF.
        
        Whether or not lining up perfectly with RaF is actually a useful goal, in the meantime driving
        input as quickly as possible seems much more desirable.
        
        We still want to coalesce multiple close together inputs into 1 logical event to smooth out jitter
        with certain devices, and reduce IPC and DOM object churn during rapid input (or with buggy devices).
        
        In testing with what I have on my desk, using a true 0-delay timer for that was not desirable.

        But 1ms seems peachy keen.
        
        * platform/gamepad/cocoa/GameControllerGamepadProvider.mm:
        * platform/gamepad/mac/HIDGamepadProvider.mm:

2021-07-01  Dean Jackson  <dino@apple.com>

        Add a layoutTrait for an additional controls scale factor
        https://bugs.webkit.org/show_bug.cgi?id=227561
        <rdar://problem/79997951>

        Reviewed by Anders Carlsson.

        Allow controls with different layout traits to apply
        a scale factor to their buttons.

        No change in behaviour.

        * Modules/modern-media-controls/controls/button.js:
        (Button.prototype._updateImageMetrics):
        (Button):
        * Modules/modern-media-controls/controls/layout-traits.js:
        (LayoutTraits.prototype.additionalControlScaleFactor):
        (LayoutTraits):

2021-07-01  Antoine Quint  <graouts@webkit.org>

        [Model] Restrict IPC calls to ARKit SPI availability and runtime flag
        https://bugs.webkit.org/show_bug.cgi?id=227581

        Reviewed by Tim Horton.

        Guard all IPC calls related to <model> by the most appropriate platform-specific flag
        and also ensure that those calls don't do anything unless the runtime flag is also
        enabled.

        * Modules/model-element/HTMLModelElement.cpp:
        * Modules/model-element/HTMLModelElement.h:
        * Modules/model-element/HTMLModelElementCocoa.mm:
        (WebCore::HTMLModelElement::inlinePreviewDidObtainContextId):
        * loader/EmptyClients.cpp:
        (WebCore::EmptyChromeClient::modelElementDidCreatePreview const):
        * loader/EmptyClients.h:
        * page/ChromeClient.h:

2021-07-01  Youenn Fablet  <youenn@apple.com>

        ReadableStream.getReader do not throw a proper exception when parameter is of wrong type
        https://bugs.webkit.org/show_bug.cgi?id=226220
        <rdar://problem/78711382>

        Reviewed by Chris Dumez.

        Covered by rebased tests.

        * Modules/streams/ReadableStream.js:
        (getReader):
        Tighten option parameter check.
        In case mode is bad, fire a type error instead of range error.

2021-07-01  Amir Mark Jr  <amir_mark@apple.com>

        Unreviewed, reverting r279452.

        Broke MacOS build

        Reverted changeset:

        "PCM: Change import from CryptoKitCBridging to
        CryptoKitPrivate"
        https://bugs.webkit.org/show_bug.cgi?id=227556
        https://commits.webkit.org/r279452

2021-07-01  Alan Bujtas  <zalan@apple.com>

        VisiblePosition::absoluteSelectionBoundsForLine fails on multiline vertical-rl content
        https://bugs.webkit.org/show_bug.cgi?id=227543
        <rdar://79887141>

        Reviewed by Simon Fraser.

        absoluteSelectionBoundsForLine flips the line's logical rect for the writing mode (horizontal vs. vertical)
        but not for the block flow direction (ltr vs. rtl).
        This adjustment is very similar to what we do in absoluteCaretBounds (see absoluteBoundsForLocalCaretRect).

        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::absoluteSelectionBoundsForLine const):
        * testing/Internals.cpp:
        (WebCore::Internals::absoluteLineRectFromPoint):
        * testing/Internals.h:
        * testing/Internals.idl:

2021-07-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r278062): [Nicosia] Threaded rendering is broken since r278062
        https://bugs.webkit.org/show_bug.cgi?id=227578

        Reviewed by Žan Doberšek.

        Since r278062 NicosiaCairoOperationRecorder is a GraphicsContext class, so we need to bring back things
        previously done by the base class and chain up to base class save/restore and being/end transparency.

        * platform/graphics/nicosia/cairo/NicosiaCairoOperationRecorder.cpp:
        (Nicosia::CairoOperationRecorder::fillPath):
        (Nicosia::CairoOperationRecorder::strokePath):
        (Nicosia::CairoOperationRecorder::drawLine):
        (Nicosia::CairoOperationRecorder::drawLinesForText):
        (Nicosia::CairoOperationRecorder::drawFocusRing):
        (Nicosia::CairoOperationRecorder::save):
        (Nicosia::CairoOperationRecorder::restore):
        (Nicosia::CairoOperationRecorder::beginTransparencyLayer):
        (Nicosia::CairoOperationRecorder::endTransparencyLayer):

2021-07-01  Youenn Fablet  <youenn@apple.com>

        [Cocoa] Migrate WebRTC UDP socket handling to NW API
        https://bugs.webkit.org/show_bug.cgi?id=227210

        Reviewed by Eric Carlson.

        Add infrastructure to new experimental feature flag for NW backed UDP sockets.

        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::webRTCPlatformTCPSocketsEnabled const):
        (WebCore::RuntimeEnabledFeatures::setWebRTCPlatformTCPSocketsEnabled):
        (WebCore::RuntimeEnabledFeatures::webRTCPlatformUDPSocketsEnabled const):
        (WebCore::RuntimeEnabledFeatures::setWebRTCPlatformUDPSocketsEnabled):

2021-07-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        [Cairo] Simplify GraphicsContextCairo creation
        https://bugs.webkit.org/show_bug.cgi?id=227575

        Reviewed by Žan Doberšek.

        Remove the constructors taking a PlatformContextCairo and add two that receive a RefPtr<cairo_t>&& and
        cairo_surface_t*. In both cases the PlatformContextCairo is created, so it's now always owned and callers don't
        need to create it.

        No change in behavior, covered by existing tests.

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContextCairo::GraphicsContextCairo):
        (WebCore::GraphicsContextCairo::drawLine):
        * platform/graphics/cairo/GraphicsContextCairo.h:
        * platform/graphics/cairo/ImageBufferCairoSurfaceBackend.cpp:
        (WebCore::ImageBufferCairoSurfaceBackend::ImageBufferCairoSurfaceBackend):
        (WebCore::ImageBufferCairoSurfaceBackend::context const):
        * platform/graphics/cairo/ImageBufferCairoSurfaceBackend.h:
        * platform/graphics/cairo/NativeImageCairo.cpp:
        * platform/graphics/cairo/PlatformContextCairo.cpp:
        (WebCore::PlatformContextCairo::PlatformContextCairo):
        * platform/graphics/cairo/PlatformContextCairo.h:
        (WebCore::PlatformContextCairo::cr const):
        (WebCore::PlatformContextCairo::cr): Deleted.
        (WebCore::PlatformContextCairo::setCr): Deleted.
        * platform/graphics/nicosia/cairo/NicosiaPaintingContextCairo.cpp:
        (Nicosia::PaintingContextCairo::ForPainting::ForPainting):
        (Nicosia::PaintingContextCairo::ForPainting::~ForPainting):
        (Nicosia::PaintingContextCairo::ForPainting::replay):
        * platform/graphics/nicosia/cairo/NicosiaPaintingContextCairo.h:
        * platform/graphics/win/GraphicsContextCairoWin.cpp:
        (WebCore::GraphicsContextCairo::GraphicsContextCairo):
        * platform/graphics/win/ImageCairoWin.cpp:
        (WebCore::BitmapImage::getHBITMAPOfSize):

2021-07-01  Youenn Fablet  <youenn@apple.com>

        RealtimeIncomingAudioSourceCocoa should support other sample rate than 48000
        https://bugs.webkit.org/show_bug.cgi?id=227439

        Reviewed by Eric Carlson.

        We reduced memory allocations by early allocating buffers for the most often used sample rate (48000), but this broke other sample rates, like for G722.
        Make sure to update sample rate and buffers if it is not 48000.
        Since the initial OnData call is often with a sample rate of 16000 and switches to 48000 after a few calls, early return for a few initial calls (20) or if sample rate is not 16000.
        Covered by updated test.

        * platform/mediastream/mac/RealtimeIncomingAudioSourceCocoa.cpp:
        (WebCore::RealtimeIncomingAudioSourceCocoa::OnData):
        * platform/mediastream/mac/RealtimeIncomingAudioSourceCocoa.h:

2021-07-01  Emilio Cobos Álvarez  <emilio@crisal.io>

        Support unprefixed :autofill pseudo-class.
        https://bugs.webkit.org/show_bug.cgi?id=220459

        Reviewed by Antti Koivisto.

        Tests: web-platform-tests/html/semantics/selectors/pseudo-classes/autofill.html

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::selectorText const):
        * css/SelectorPseudoClassAndCompatibilityElementMap.in:

2021-07-01  Tim Nguyen  <ntim@apple.com>

        Change `typedef EventSender<X> Y` to `using Y = EventSender<X>`
        https://bugs.webkit.org/show_bug.cgi?id=227570

        Reviewed by Antti Koivisto.

        This is for consistency with HTMLDialogElement.h, HTMLStyleElement.h and SVGSMILElement.h.

        * html/HTMLDetailsElement.h:
        * html/HTMLLinkElement.h:
        * loader/ImageLoader.h:

2021-06-30  John Wilander  <wilander@apple.com>

        PCM: Change import from CryptoKitCBridging to CryptoKitPrivate
        https://bugs.webkit.org/show_bug.cgi?id=227556
        <rdar://79992592>

        Reviewed by Alex Christensen.

        Patch by Frederic Jacobs.

        No new tests since no functionality is changed.

        * loader/cocoa/PrivateClickMeasurementCocoa.mm:
            Changed import from CryptoKitCBridgingSoftLink.h to CryptoKitPrivateSoftLink.h.

2021-06-30  Antoine Quint  <graouts@webkit.org>

        [Model] [macOS] Add support for rendering model resources
        https://bugs.webkit.org/show_bug.cgi?id=227530
        <rdar://problem/79968206>

        Reviewed by Dean Jackson.

        On macOS, ASVInlinePreview requires an instance in both the WebProcess and the UIProcess to exist with a matching UUID.

        On the WebCore side, in the WebProcess, after writing the model resource as a file to disk, we create an instance when a
        <model> element is created and message the UIProcess through the ChromeClient providing the UUID generated for it. When
        the UIProcess is done processing this message, it will reply with another message which calls into
        HTMLModelElement::inlinePreviewDidObtainContextId() with the matching UUID and a context ID for the remote context.
        We can then set that remote context ID on our ASVInlinePreview instance.

        We also introduce a HTMLModelElement::platformLayer() method such that RenderLayerBacking::updateConfiguration() can call
        it to host the ASVInlinePreview layer.

        * Modules/model-element/HTMLModelElement.cpp:
        (WebCore::HTMLModelElement::~HTMLModelElement):
        (WebCore::HTMLModelElement::setSourceURL):
        (WebCore::HTMLModelElement::notifyFinished):
        * Modules/model-element/HTMLModelElement.h:
        * Modules/model-element/HTMLModelElementCocoa.mm: Added.
        (WebCore::HTMLModelElement::createFile):
        (WebCore::HTMLModelElement::clearFile):
        (WebCore::HTMLModelElement::modelDidChange):
        (WebCore::HTMLModelElement::inlinePreviewDidObtainContextId):
        (WebCore::HTMLModelElement::platformLayer const):
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/EmptyClients.cpp:
        (WebCore::EmptyChromeClient::modelElementDidCreatePreview const):
        * loader/EmptyClients.h:
        * page/ChromeClient.h:
        (WebCore::ChromeClient::modelElementDidCreatePreview const):
        * platform/Logging.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateConfiguration):

2021-06-30  Megan Gardner  <megan_gardner@apple.com>

        Add ID and versioning support for AppHighlights
        https://bugs.webkit.org/show_bug.cgi?id=227279

        Reviewed by Tim Horton.

        AppHighlights.AppHighlightRestoreFromStorage
        AppHighlights.AppHighlightCreateAndRestoreAndDropBytes
        AppHighlights.AppHighlightCreateAndRestoreWithLaterVersion
        AppHighlights.AppHighlightCreateAndRestoreWithExtraBytes
        AppHighlights.AppHighlightRestoreFromStorageV0
        AppHighlights.AppHighlightRestoreFromStorageV1

        Reformat the storage of Highlight Data to allow for accurate deletion of active
        highlights, as well as making them more robust and future-proof. Support decoding v0 
        highlights as well.

        * Modules/highlight/AppHighlightRangeData.cpp:
        (WebCore::AppHighlightRangeData::NodePathComponent::decode):
        (WebCore::AppHighlightRangeData::encode const):
        (WebCore::AppHighlightRangeData::decode):
        * Modules/highlight/AppHighlightRangeData.h:
        (WebCore::AppHighlightRangeData::NodePathComponent::NodePathComponent):
        (WebCore::AppHighlightRangeData::AppHighlightRangeData):
        (WebCore::AppHighlightRangeData::identifier const):
        (WebCore::AppHighlightRangeData::startOffset const):
        (WebCore::AppHighlightRangeData::endOffset const):
        * Modules/highlight/AppHighlightStorage.cpp:
        (WebCore::createAppHighlightRangeData):

2021-06-30  Ryosuke Niwa  <rniwa@webkit.org>

        RemotePlayback must keep its media element alive when there is a pending activity
        https://bugs.webkit.org/show_bug.cgi?id=227471
        <rdar://79694015>

        Reviewed by Geoffrey Garen.

        Fixed the bug that the media element's JS wrapper can be collected while there is still
        a pending activity for RemotePlayback. In fact, the newly added test demonstrates that
        the media element can be deleted without this patch.

        This patch also introduces new extended IDL interface attribute GenerateAddOpaqueRoot
        to make adding an opaque root as a part of visitChildren easy in the DOM code.

        Test: media/remoteplayback-watch-availability-gc.html

        * Modules/remoteplayback/RemotePlayback.cpp:
        (WebCore::RemotePlayback::ownerNode const):
        * Modules/remoteplayback/RemotePlayback.h:
        * Modules/remoteplayback/RemotePlayback.idl:
        * bindings/scripts/CodeGeneratorJS.pm:
        (InstanceNeedsVisitChildren):
        (GenerateImplementation):
        * bindings/scripts/IDLAttributes.json:
        * bindings/scripts/test/BindingTestGlobalConstructors.idl:
        * bindings/scripts/test/JS/JSTestGenerateAddOpaqueRoot.cpp: Added.
        (WebCore::JSTestGenerateAddOpaqueRootDOMConstructor::prototypeForStructure):
        (WebCore::JSTestGenerateAddOpaqueRootDOMConstructor::initializeProperties):
        (WebCore::JSTestGenerateAddOpaqueRootPrototype::finishCreation):
        (WebCore::JSTestGenerateAddOpaqueRoot::JSTestGenerateAddOpaqueRoot):
        (WebCore::JSTestGenerateAddOpaqueRoot::finishCreation):
        (WebCore::JSTestGenerateAddOpaqueRoot::createPrototype):
        (WebCore::JSTestGenerateAddOpaqueRoot::prototype):
        (WebCore::JSTestGenerateAddOpaqueRoot::getConstructor):
        (WebCore::JSTestGenerateAddOpaqueRoot::destroy):
        (WebCore::JSC_DEFINE_CUSTOM_GETTER):
        (WebCore::jsTestGenerateAddOpaqueRoot_someAttributeGetter):
        (WebCore::JSTestGenerateAddOpaqueRoot::subspaceForImpl):
        (WebCore::JSTestGenerateAddOpaqueRoot::visitChildrenImpl):
        (WebCore::JSTestGenerateAddOpaqueRoot::analyzeHeap):
        (WebCore::JSTestGenerateAddOpaqueRootOwner::isReachableFromOpaqueRoots):
        (WebCore::JSTestGenerateAddOpaqueRootOwner::finalize):
        (WebCore::toJSNewlyCreated):
        (WebCore::toJS):
        (WebCore::JSTestGenerateAddOpaqueRoot::toWrapped):
        * bindings/scripts/test/JS/JSTestGenerateAddOpaqueRoot.h: Added.
        (WebCore::JSTestGenerateAddOpaqueRoot::create):
        (WebCore::JSTestGenerateAddOpaqueRoot::createStructure):
        (WebCore::JSTestGenerateAddOpaqueRoot::subspaceFor):
        (WebCore::wrapperOwner):
        (WebCore::wrapperKey):
        (WebCore::toJS):
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestGlobalObject.cpp:
        (WebCore::jsTestGlobalObject_TestGenerateAddOpaqueRootConstructorGetter):
        (WebCore::JSC_DEFINE_CUSTOM_GETTER):
        * bindings/scripts/test/SupplementalDependencies.dep:
        * bindings/scripts/test/TestGenerateAddOpaqueRoot.idl: Added.
        * testing/Internals.cpp:
        (WebCore::Internals::isElementAlive const):
        (WebCore::Internals::mediaElementCount):
        * testing/Internals.h:
        * testing/Internals.idl:

2021-06-30  Alex Christensen  <achristensen@webkit.org>

        REGRESSION(r278391) Sometimes load durations show up as large negative numbers in WebInspector
        https://bugs.webkit.org/show_bug.cgi?id=227413
        <rdar://79801896>

        Reviewed by Chris Dumez.

        In r278391 I changed the meaning of members of NetworkLoadMetrics from Seconds deltas from fetchStart
        to the MonotonicTime at which each event occurred.  I also changed InspectorNetworkAgent::didFinishLoading
        accordingly, but I overlooked the fact that sometimes we get empty NetworkLoadMetrics that have been marked as complete,
        such as from NetworkResourceLoader::didFinishWithRedirectResponse which indicates that it is complete but
        members such as responseEnd are still 0.  Rather than check if it is complete, check if the member is nonzero.

        The layout test http/tests/inspector/network/resource-timing.html would fail on AS Macs when run after other tests before this change.

        * inspector/agents/InspectorNetworkAgent.cpp:
        (WebCore::InspectorNetworkAgent::didFinishLoading):

2021-06-30  Ryosuke Niwa  <rniwa@webkit.org>

        Use WeakHashMap and WeakPtr with Node in more places
        https://bugs.webkit.org/show_bug.cgi?id=227192
        <rdar://problem/79828322>

        Reviewed by Geoffrey Garen.

        Deploy WeakHashMap and WeakPtr with Node/Element in more places.

        * dom/Document.cpp:
        (WebCore::Document::elementForAccessKey):
        (WebCore::Document::buildAccessKeyCache):
        (WebCore::Document::registerForVisibilityStateChangedCallbacks):
        (WebCore::Document::unregisterForVisibilityStateChangedCallbacks):
        (WebCore::Document::visibilityStateChanged):
        * dom/Document.h:
        * dom/VisibilityChangeClient.h:
        * html/FormController.cpp:
        (WebCore::FormKeyGenerator::formKey):
        (WebCore::FormKeyGenerator::willDeleteForm):
        * html/HTMLAnchorElement.cpp:
        (WebCore::rootEditableElementMap):
        (WebCore::HTMLAnchorElement::rootEditableElementForSelectionOnMouseDown const):
        (WebCore::HTMLAnchorElement::clearRootEditableElementForSelectionOnMouseDown):
        (WebCore::HTMLAnchorElement::setRootEditableElementForSelectionOnMouseDown):
        * inspector/agents/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::bind):
        (WebCore::InspectorDOMAgent::unbind):
        (WebCore::InspectorDOMAgent::nodeForId):
        (WebCore::InspectorDOMAgent::pushNodePathToFrontend):
        (WebCore::InspectorDOMAgent::boundNodeId):
        (WebCore::InspectorDOMAgent::willDestroyDOMNode):
        (WebCore::InspectorDOMAgent::mediaMetricsTimerFired):
        * inspector/agents/InspectorDOMAgent.h:
        * inspector/agents/InspectorLayerTreeAgent.cpp:
        (WebCore::InspectorLayerTreeAgent::bindPseudoElement):
        (WebCore::InspectorLayerTreeAgent::unbindPseudoElement):
        * inspector/agents/InspectorLayerTreeAgent.h:
        * style/StyleSharingResolver.h:

2021-06-30  venky dass  <yaranamavenkataramana@apple.com>

        Updated to use smart pointers in MutationObserver.
        https://bugs.webkit.org/show_bug.cgi?id=227518

        Reviewed by Ryosuke Niwa.

        * dom/MutationObserver.cpp:
        (WebCore::MutationObserver::~MutationObserver):
        (WebCore::MutationObserver::disconnect):
        (WebCore::MutationObserver::observationStarted):
        (WebCore::MutationObserver::observationEnded):
        (WebCore::MutationObserver::isReachableFromOpaqueRoots const):
        (WebCore::MutationObserver::deliver):
        * dom/MutationObserver.h:
        * dom/MutationObserverRegistration.h:

2021-06-30  Truitt Savell  <tsavell@apple.com>

        Unreviewed, reverting r279405.

        Casued 50+ webrtc crashes on Big Sur Debug

        Reverted changeset:

        "[Cocoa] Migrate WebRTC UDP socket handling to NW API"
        https://bugs.webkit.org/show_bug.cgi?id=227210
        https://commits.webkit.org/r279405

2021-06-30  Darin Adler  <darin@apple.com>

        CSS specification prohibits numbers with trailing decimal point (e.g. "1.px"), but we allow them
        https://bugs.webkit.org/show_bug.cgi?id=227517

        Reviewed by Sam Weinig.

        Test: imported/w3c/web-platform-tests/css/css-syntax/decimal-points-in-numbers.html

        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::parseCSSNumber): Added. Checks for the trailing decimal point. Also uses
        std::optional instead of a bool plus an out argument; should refactor the other functions
        to work that way at some point.
        (WebCore::parseSimpleLength): Use parseCSSNumber and isASCIIAlphaCaselessEqual.
        (WebCore::parseSimpleAngle): Ditto.
        (WebCore::parseTransformNumberArguments): Ditto.

2021-06-30  Kimmo Kinnunen  <kkinnunen@apple.com>

        toDataURL image upside down if premultipliedAlpha=false
        https://bugs.webkit.org/show_bug.cgi?id=156129
        <rdar://problem/53942867>

        Reviewed by Kenneth Russell.

        Flip the result `PixelBuffer` of `GraphicsContextGL::paintRenderingResultsToPixelBuffer()`
        along the y-axis manually with memcpy.
        ReadPixels returns the pixels upside down.
        The `PixelBuffer` code-path is only used for reading unpremultiplied
        image contents so that `toDataURL()` can encode the premultipliedAlpha=false
        WebGL content as was rendered.

        Other code-paths, such as Context2D.drawImage and drawing to the document,
        use `GraphicsContextGL::paintRenderingResultsToCanvas()`.
        In those cases y-flip is done by constructing a `ImageBuffer` for the PixelBuffer
        and then using y-flip transform to draw the `ImageBuffer` to the target `ImageBuffer`
        using `GraphicsContext`.

        Fixes webgl/1.0.x/conformance/canvas/to-data-url-test.html

        * platform/graphics/opengl/GraphicsContextGLOpenGL.cpp:
        (WebCore::GraphicsContextGLOpenGL::paintRenderingResultsToPixelBuffer):

2021-06-30  Antoine Quint  <graouts@webkit.org>

        [Model] [iOS] Add support for displaying <model> in fullscreen
        https://bugs.webkit.org/show_bug.cgi?id=227443
        <rdar://problem/79859937>

        Reviewed by Sam Weinig.

        Expose a new enterFullscreen() method on HTMLModelElement allowing to enter a fullscreen AR experience
        where the resource may be displayed in the user's environment. This differs from the existing
        Element.requestFullscreen() method since the experience is provided by the platform and we're not
        presenting the inline <model> element in a fullscreen window.

        From the WebProcess side, this requires obtaining a reference to the content layer for the <model> element
        and sending it in an IPC message to the UIProcess.

        * Modules/model-element/HTMLModelElement.cpp:
        (WebCore::HTMLModelElement::enterFullscreen):
        * Modules/model-element/HTMLModelElement.h:
        * Modules/model-element/HTMLModelElement.idl:
        * loader/EmptyClients.cpp:
        (WebCore::EmptyChromeClient::takeModelElementFullscreen const):
        * loader/EmptyClients.h:
        * page/ChromeClient.h:
        (WebCore::ChromeClient::takeModelElementFullscreen const):
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::contentsLayerIDForModel const):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::contentsLayerIDForModel const):
        * platform/graphics/ca/GraphicsLayerCA.h:

2021-06-30  Tim Nguyen  <ntim@apple.com>

        Add modal dialog UA styles
        https://bugs.webkit.org/show_bug.cgi?id=226175

        Reviewed by Antti Koivisto.

        This adds an :-internal-modal-dialog pseudo class and a test to make sure it does not leak.

        This improves WPT results a lot and expectations have been updated. Some tests start failing,
        but those are mainly top-layer related (which isn't implemented yet).

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::selectorText const):
        * css/CSSSelector.h:
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne const):
        * css/SelectorCheckerTestFunctions.h:
        (WebCore::matchesModalDialogPseudoClass):
        * css/SelectorPseudoClassAndCompatibilityElementMap.in:
        * css/dialog.css:
        (dialog:-internal-modal-dialog):
        * css/parser/CSSSelectorParser.cpp:
        (WebCore::CSSSelectorParser::consumePseudo):
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::JSC_DEFINE_JIT_OPERATION):
        (WebCore::SelectorCompiler::addPseudoClassType):
        * html/HTMLDialogElement.cpp:
        (WebCore::HTMLDialogElement::showModal):
        (WebCore::HTMLDialogElement::parseAttribute):
        (WebCore::HTMLDialogElement::isModal const):
        * html/HTMLDialogElement.h:

2021-06-30  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r278884): [Nicosia] Fix empty stack check in CairoOperationRecorder::restore()
        https://bugs.webkit.org/show_bug.cgi?id=227525

        Reviewed by Myles C. Maxfield.

        We keep our own state stack, with a state added at construction, so we should check our stack instead.

        * platform/graphics/nicosia/cairo/NicosiaCairoOperationRecorder.cpp:
        (Nicosia::CairoOperationRecorder::restore):

2021-06-30  Tim Nguyen  <ntim@apple.com>

        Support -internal- prefix for pseudo classes and rename :-webkit-direct-focus to :-internal-direct-focus
        https://bugs.webkit.org/show_bug.cgi?id=227522

        Reviewed by Antti Koivisto.

        :-webkit-direct-focus was already UA-sheet only, so I took an opportunity to rename it here, also just to
        test that the script is working. Test updated accordingly.

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::selectorText const):
        * css/SelectorPseudoClassAndCompatibilityElementMap.in:
        * css/html.css:
        (:-internal-direct-focus):
        (:-webkit-direct-focus): Deleted.
        * css/makeSelectorPseudoClassAndCompatibilityElementMap.py:
        (enumerablePseudoType):

2021-06-30  Tim Nguyen  <ntim@apple.com>

        Implement support for <dialog> element close event
        https://bugs.webkit.org/show_bug.cgi?id=227493

        Reviewed by Antti Koivisto.

        With this change, the m_isOpen flag of HTMLDialogElement is only changed on attribute change, so attribute changes can
        be detected more easily to fire this new "close" event.

        Test: web-platform-tests/html/semantics/interactive-elements/the-dialog-element/dialog-close.html
        Adjusted existing test expectations for new `close` event.

        * dom/GlobalEventHandlers.idl:
        * html/HTMLAttributeNames.in:
        * html/HTMLDialogElement.cpp:
        (WebCore::dialogCloseEventSender):
        (WebCore::HTMLDialogElement::~HTMLDialogElement):
        (WebCore::HTMLDialogElement::show):
        (WebCore::HTMLDialogElement::showModal):
        (WebCore::HTMLDialogElement::close):
        (WebCore::HTMLDialogElement::dispatchPendingEvent):
        (WebCore::HTMLDialogElement::parseAttribute):
        (WebCore::HTMLDialogElement::setOpen):
        (WebCore::HTMLDialogElement::toggleOpen): Deleted.
        * html/HTMLDialogElement.h:
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::createEventHandlerNameMap):

2021-06-30  Youenn Fablet  <youenn@apple.com>

        [Cocoa] Migrate WebRTC UDP socket handling to NW API
        https://bugs.webkit.org/show_bug.cgi?id=227210

        Reviewed by Eric Carlson.

        Add infrastructure to new experimental feature flag for NW backed UDP sockets.

        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::webRTCPlatformTCPSocketsEnabled const):
        (WebCore::RuntimeEnabledFeatures::setWebRTCPlatformTCPSocketsEnabled):
        (WebCore::RuntimeEnabledFeatures::webRTCPlatformUDPSocketsEnabled const):
        (WebCore::RuntimeEnabledFeatures::setWebRTCPlatformUDPSocketsEnabled):

2021-06-30  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Implement CertificateInfo::summary
        https://bugs.webkit.org/show_bug.cgi?id=227484

        Reviewed by Michael Catanzaro.

        GLib now provides API to get the information required to fill the CertificateSummary.

        * platform/network/soup/CertificateInfo.h:
        (WebCore::CertificateInfo::summary const): Deleted.
        * platform/network/soup/CertificateInfoSoup.cpp:
        (WebCore::CertificateInfo::summary const):

2021-06-29  Tim Nguyen  <ntim@apple.com>

        Implement form[method=dialog]
        https://bugs.webkit.org/show_bug.cgi?id=226172

        Reviewed by Chris Dumez.

        Marked relevant WPT as pass & unskipped relevant test.

        * html/HTMLFormControlElement.h:
        (WebCore::HTMLFormControlElement::resultForDialogSubmit const):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::submit):
        (WebCore::HTMLFormElement::submitDialog):
        * html/HTMLFormElement.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::resultForDialogSubmit const):
        * html/HTMLInputElement.h:
        * html/ImageInputType.cpp:
        (WebCore::ImageInputType::resultForDialogSubmit const):
        * html/ImageInputType.h:
        * html/InputType.cpp:
        (WebCore::InputType::resultForDialogSubmit const):
        * html/InputType.h:
        * loader/FormSubmission.cpp:
        (WebCore::FormSubmission::Attributes::parseMethodType):
        (WebCore::FormSubmission::FormSubmission):
        (WebCore::FormSubmission::create):
        (WebCore::FormSubmission::populateFrameLoadRequest):
        (WebCore::FormSubmission::requestURL const):
        * loader/FormSubmission.h:
        (WebCore::FormSubmission::Attributes::methodString):
        (WebCore::FormSubmission::data const):
        (WebCore::FormSubmission::returnValue const):

2021-06-29  Johnson Zhou  <qiaosong_zhou@apple.com>

        Encoding specified in the 'charset' attribute should have precedence over 'content' attribute
        https://bugs.webkit.org/show_bug.cgi?id=227464

        Reviewed by Geoffrey Garen.

        Puts precedence on 'charset' attribute by breaking out of the parsing process.

        This test passes Firefox and Chrome. Tested using
        http://wpt.live/html/syntax/parsing/meta-inhead-insertion-mode.html

        * html/parser/HTMLMetaCharsetParser.cpp:
        (WebCore::HTMLMetaCharsetParser::encodingFromMetaAttributes):


2021-06-29  Darin Adler  <darin@apple.com>

        CSS style sheets loaded by HTMLLinkElement do not fall back correctly when charset is an invalid encoding name
        https://bugs.webkit.org/show_bug.cgi?id=227498

        Reviewed by Sam Weinig.

        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::process): Check for invalid text encoding names rather than
        just empty string.

2021-06-29  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r279250.
        https://bugs.webkit.org/show_bug.cgi?id=227499

        Sometimes causes YouTube audio to cut out

        Reverted changeset:

        "[Cocoa] Last few seconds of 'audio/webm; codecs=vorbis'
        appended to a SampleBuffer are not played"
        https://bugs.webkit.org/show_bug.cgi?id=226069
        https://commits.webkit.org/r279250

2021-06-29  Alex Christensen  <achristensen@webkit.org>

        xhr.send(URLSearchParams) should align default Content-Type header field with Chrome and Firefox
        https://bugs.webkit.org/show_bug.cgi?id=227477

        Reviewed by Chris Dumez.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::send):
        * xml/XMLHttpRequest.h:
        * xml/XMLHttpRequest.idl:

2021-06-29  Michael Catanzaro  <mcatanzaro@gnome.org>

        Fix more -Wreturn-type warnings
        https://bugs.webkit.org/show_bug.cgi?id=227497

        Unreviewed. This is getting stupid.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::scrollDistance):
        (WebCore::EventHandler::handleKeyboardScrolling):
        * page/KeyboardScroll.cpp:
        (WebCore::unitVectorForScrollDirection):

2021-06-29  Rob Buis  <rbuis@igalia.com>

        Nullptr crash in HTMLStackItem::create via DocumentFragment::parseHTML
        https://bugs.webkit.org/show_bug.cgi?id=227390

        Reviewed by Ryosuke Niwa.

        DOM manipulation can mean document.body() can return null, causing the
        crash/ASSERT in DocumentFragment::parseHTML in the test case. Since the
        only use of it was to force InBody insertion mode, instead use a fake body element.

        Test: editing/pasteboard/paste-create-fragment-crash.html

        * editing/cocoa/WebContentReaderCocoa.mm:
        (WebCore::createFragment):

2021-06-29  Rob Buis  <rbuis@igalia.com>

        Crash in SharedBuffer::data
        https://bugs.webkit.org/show_bug.cgi?id=227173

        Reviewed by Ryosuke Niwa.

        Null check data in openFunc.

        Test: fast/xsl/xslt-transformToDocument-crash.html

        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::openFunc):

2021-06-29  Kimmo Kinnunen  <kkinnunen@apple.com>

        OES_texture_float should implicitly enable EXT_float_blend
        https://bugs.webkit.org/show_bug.cgi?id=227456
        <rdar://79804439>

        Reviewed by Kenneth Russell.

        Tested by webgl/1.0.x/conformance/extensions/oes-texture-float.html

        * html/canvas/OESTextureFloat.cpp:
        (WebCore::OESTextureFloat::OESTextureFloat):
        Request EXT_float_blend when user requests OES_texture_float.
        WEBGL_color_buffer_float and EXT_color_buffer_float already have
        the code.

2021-06-29  Youenn Fablet  <youenn@apple.com>

        Remove RemoteAudioMediaStreamTrackRenderer and RemoteAudioMediaStreamTrackRendererManager
        https://bugs.webkit.org/show_bug.cgi?id=227438

        Reviewed by Eric Carlson.

        * platform/mediastream/cocoa/AudioMediaStreamTrackRendererInternalUnit.cpp:
        (WebCore::LocalAudioMediaStreamTrackRendererInternalUnit::start):
        (WebCore::LocalAudioMediaStreamTrackRendererInternalUnit::stop):
        Add some logging.

2021-06-29  Antti Koivisto  <antti@apple.com>

        Enable Probabilistic Guard Malloc for RuleData and RuleFeature vectors
        https://bugs.webkit.org/show_bug.cgi?id=227446

        Reviewed by Geoffrey Garen.

        Help for catching a crash.

        * style/RuleFeature.cpp:
        (WebCore::Style::RuleFeatureSet::collectFeatures):
        (WebCore::Style::RuleFeatureSet::add):
        * style/RuleFeature.h:
        * style/RuleSet.h:
        * style/StyleScopeRuleSets.cpp:
        (WebCore::Style::makeRuleSet):
        (WebCore::Style::ensureInvalidationRuleSets):

2021-06-29  Martin Robinson  <mrobinson@igalia.com>

        CSS scroll snap should allow scrolling to the middle of snap areas that overflow the snapport
        https://bugs.webkit.org/show_bug.cgi?id=223021
        <rdar://problem/75518606>

        Reviewed by Simon Fraser.

        No new tests. This is covered by existing tests and, in particular, a WPT test:
            - web-platform-tests/css/css-scroll-snap/overflowing-snap-areas.html

        * page/scrolling/ScrollSnapOffsetsInfo.cpp:
        (WebCore::searchForPotentialSnapPoints): Record when the target snap offset happens to
        fall in the interior of a snap area that overflows the snap port.
        (WebCore::closestSnapOffsetWithInfoAndAxis): When this happens and we are in a spec-compliant
        sitaution, just snap to the original target offset.

2021-06-28  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GStreamer][EME] Fix resources release when a MediaKeySession is closed
        https://bugs.webkit.org/show_bug.cgi?id=227403

        Reviewed by Philippe Normand.

        Thunder sessions should be a BoxPtr, already when stored at the
        CDMInstanceSessionThunder, it does not make sense to store then in
        a unique_ptr. This way the same session lives in the
        MediaKeySession wrapper (CDMInstanceSessionThunder) and inside the
        KeyStores.

        Removed the CDMInstanceProxy key store. It is not needed.

        When a session is closed in Thunder, there should be a cascade to
        remove it from the other synced stores, that's why we introduce
        the removeAllKeysFrom logic.

        Regular key stores do not manage key session references
        anymore. They are only needed in the CDMProxy class, which is
        where the keys are shared among different sessions. We were
        managing key session references in other stores and they were
        messing up with the key references in the CDMProxy class. In
        those cases, a key kept in a local store could have a reference
        that would prevent the CDMProxy key store from removing it when
        asked from it. There were also cases of removing keys from local
        stores that were creating negative reference numbers, which
        created the opposite effect, this is, leaving in place keys in the
        CDMProxy store that should be released.

        * platform/encryptedmedia/CDMProxy.cpp:
        (WebCore::KeyStore::merge): Simplified to just add keys.
        (WebCore::KeyStore::add): Adds references (if needed) and merges
        if needed.
        (WebCore::KeyStore::unrefAllKeys): Renamed. Unrefs all keys from a
        store by copying itself and calling unrefAllKeysFrom that copy.
        (WebCore::KeyStore::unref): Renamed. Uses proper refefencing.
        (WebCore::CDMProxy::unrefAllKeysFrom): Method to unref all keys
        that are contained in some other store.
        (WebCore::CDMInstanceProxy::mergeKeysFrom): There is no more key
        store in this class.
        (WebCore::CDMInstanceProxy::unrefAllKeysFrom): Renamed. Calls the
        CDMproxy to unref the keys from there.
        * platform/encryptedmedia/CDMProxy.h:
        (WebCore::KeyHandle::mergeKeyInto): Merges one key into self by
        copying status, data and summing reference count.
        (WebCore::KeyHandle::numSessionReferences const): Turn int.
        (WebCore::KeyHandle::hasReferences const): Added.
        (WebCore::KeyStore::addSessionReferenceTo const):
        (WebCore::KeyStore::removeSessionReferenceFrom const): Helpers to
        check if the store is reference counted or not. Default is do
        nothing and but the ReferenceAwareKeyStore redefines them to do
        reference counting.
        (WebCore::KeyStore::unrefAllKeys): Deleted.
        * platform/encryptedmedia/clearkey/CDMClearKey.cpp:
        (WebCore::CDMInstanceSessionClearKey::updateLicense):
        (WebCore::CDMInstanceSessionClearKey::removeSessionData): Use
        renamed methods.
        * platform/graphics/gstreamer/eme/CDMThunder.h:
        * platform/graphics/gstreamer/eme/CDMThunder.cpp:
        (WebCore::CDMInstanceSessionThunder::status const):
        (WebCore::CDMInstanceSessionThunder::keyUpdatedCallback):
        (WebCore::CDMInstanceSessionThunder::requestLicense):
        (WebCore::CDMInstanceSessionThunder::updateLicense):
        (WebCore::CDMInstanceSessionThunder::removeSessionData):
        (WebCore::CDMInstanceSessionThunder::loadSession): Use BoxPtr in
        the session.
        (WebCore::CDMInstanceSessionThunder::closeSession): Close the
        current session, release the BoxPtr, notify the instance and
        therefore the proxy to unref all they key IDs in this session and
        empty the local key store.

2021-06-28  Darin Adler  <darin@apple.com>

        CSS parser "consume declaration" algorithm does not handle whitespace correctly
        https://bugs.webkit.org/show_bug.cgi?id=227368

        Reviewed by Sam Weinig.

        Test: imported/w3c/web-platform-tests/css/css-syntax/declarations-trim-whitespace.html

        To avoid creating regressions in CSS variable behavior, had to make
        changes there to handle whitespace correctly at the same time as the
        change to the "consume declaration" algorithm.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::customPropertyValue): Restructured
        to not have a case for each variant custom value type. This lets us
        support the new Empty value type without extra code here.

        * css/CSSCustomPropertyValue.cpp:
        (WebCore::CSSCustomPropertyValue::createEmpty): Added. Used for a new
        Empty value type for properties that have empty string as their value,
        which is a new capability added to the CSS specification.
        (WebCore::CSSCustomPropertyValue::equals const): Removed unneeded pointer
        comparison optimization. Added support for Empty value.
        (WebCore::CSSCustomPropertyValue::customCSSText const): Updated to use
        null string for m_stringValue instead of a separate m_serialized flag.
        Added support for Empty value.
        (WebCore::CSSCustomPropertyValue::tokens const): Added support for
        Empty value. Also call directly to customCSSText instead of calling
        through cssText.

        * css/CSSCustomPropertyValue.h: Updated for the above, adding Empty value.
        Removed m_serialized. Greatly simplified the copy constructor since Ref
        now has a copy constructor.

        * css/CSSVariableReferenceValue.cpp:
        (WebCore::resolveVariableFallback): Consume whitespace after the comma,
        matching what is now called for in the CSS specification.

        * css/calc/CSSCalcExpressionNodeParser.cpp:
        (WebCore::CSSCalcExpressionNodeParser::parseCalcFunction): Use
        consumeCommaIncludingWhitespace to simplify the code. No behavior change,
        just refactoring.

        * css/parser/CSSParserImpl.cpp:
        (WebCore::CSSParserImpl::consumeDeclaration): Updated algorithm to match
        the CSS specification, trimming whitespace correctly.
        (WebCore::CSSParserImpl::consumeCustomPropertyValue): Added support for
        a custom property value with no declaration value, as now called for in
        the CSS specification, using CSSCustomPropertyValue::createEmpty.

        * css/parser/CSSVariableParser.cpp:
        (WebCore::isValidVariableReference): Allow empty fallback, as now called
        for in the CSS specification.
        (WebCore::isValidConstantReference): Ditto.

2021-06-28  Dana Estra  <destra@apple.com>

        Refactor MacOS keyboard scrolling and use KeyboardScroll struct
        https://bugs.webkit.org/show_bug.cgi?id=226986

        Reviewed by Tim Horton.

        No tests yet.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::defaultSpaceEventHandler):
        
        Added usage of switch EventDrivenSmoothKeyboardScrolling
        that when enabled sends KeyboardEvent to
        HandleKeyboardScrolling.
        
        (WebCore::EventHandler::scrollDistance):
        (WebCore::EventHandler::handleKeyboardScrolling):
        
        Makes KeyboardScroll and calls scrollRecursively.
        
        (WebCore::EventHandler::defaultArrowEventHandler):
        
        Added usage of switch EventDrivenSmoothKeyboardScrolling
        that when enabled sends KeyboardEvent to
        HandleKeyboardScrolling.
        
        * page/EventHandler.h:
        * page/KeyboardScroll.cpp: Added.
        * page/KeyboardScroll.h: Added.

2021-06-28  Wenson Hsieh  <wenson_hsieh@apple.com>

        Live Text selections inside images is misaligned when "object-fit" is not "fill"
        https://bugs.webkit.org/show_bug.cgi?id=227453

        Reviewed by Tim Horton.

        We currently use the bounds of the image overlay host element when injecting transformed Live Text into image
        element UA shadow roots. However, this causes text to lay out in the wrong place relative to the image when
        using any "object-fit" values that are not "fill". To address this, use the `replacedContentRect()` of the image
        renderer when injecting OCR text quads instead.

        Tests: fast/images/text-recognition/image-overlay-object-fit-change.html
               fast/images/text-recognition/image-overlay-object-fit.html

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::updateWithTextRecognitionResult): See description above for more details.
        * page/Page.cpp:
        (WebCore::Page::updateElementsWithTextRecognitionResults):

        We also refactor this code so that we don't immediately try to update text recognition results, and instead
        queue an internal async task to do so. Immediately performing the update here can potentially cause a debug
        assertion due to leaving us in a state where we require layout immediately after a rendering update.

        (WebCore::Page::cacheTextRecognitionResult):

        Additionally adjust the text recognition result caching mechanism to update image overlay content when changing
        the replaced content rect, rather than the element's offset width or height. This ensures that changing CSS
        "object-fit" values dynamically for images with Live Text causes Live Text bounds to stay up to date.

        * page/Page.h:

2021-06-28  Sam Weinig  <weinig@apple.com>

        [Modern Media Controls] Support customizing the media controls via WebKitAdditions
        https://bugs.webkit.org/show_bug.cgi?id=227433

        Reviewed by Eric Carlson.

        - Support adding additional style sheets and scripts to the media controls
          via ADDITIONAL_MODERN_MEDIA_CONTROLS_STYLE_SHEETS and ADDITIONAL_MODERN_MEDIA_CONTROLS_SCRIPTS
          variables in DerivedSources.make
        - Support overriding default layout traits object class name in MediaControlsHost.

        * DerivedSources.make:
        * Modules/mediacontrols/MediaControlsHost.cpp:
        (WebCore::MediaControlsHost::layoutTraitsClassName const):

2021-06-28  Jean-Yves Avenard  <jya@apple.com>

        Not all uses of AudioToolbox framework use soft linking
        https://bugs.webkit.org/show_bug.cgi?id=227250
        <rdar://problem/79606090>

        Reviewed by Eric Carlson.

        Unify AudioToolbox, CoreMedia, VideoToolbox and MediaToolbox's method
        definitions and their use, ensuring that they are always soft-linked.
        Unified builds and the inconsistent use of explicitly using the PAL namespace
        caused some calls to be ambiguous leading to compilation errors; some
        code would also use the softlinked methods while others called into the frameworks
        directly.
        To get around those we ensure that any calls to AudioToolbox or CoreMedia is always using
        the fully resolved PAL name.
        Remove unnecessary `using namespace PAL;` statements wherever applicable.
        No change in observable behavior.

        * Modules/mediastream/PeerConnectionBackend.cpp:
        * Modules/plugins/QuickTimePluginReplacement.mm:
        * Modules/webaudio/MediaStreamAudioSourceCocoa.cpp:
        (WebCore::MediaStreamAudioSource::consumeAudio):
        * dom/Document.cpp:
        * html/HTMLCanvasElement.cpp:
        * html/HTMLMediaElement.cpp:
        * platform/audio/AudioFileReader.h:
        * platform/audio/cocoa/AudioFileReaderCocoa.cpp:
        (WebCore::AudioFileReader::AudioFileReader):
        (WebCore::AudioFileReader::~AudioFileReader):
        (WebCore::AudioFileReader::createBus):
        (WebCore::createBusFromAudioFile): Deleted.
        * platform/audio/cocoa/AudioFileReaderCocoa.h:
        * platform/audio/cocoa/AudioOutputUnitAdaptor.cpp:
        (WebCore::AudioOutputUnitAdaptor::~AudioOutputUnitAdaptor):
        (WebCore::AudioOutputUnitAdaptor::start):
        (WebCore::AudioOutputUnitAdaptor::stop):
        * platform/audio/cocoa/AudioSampleBufferList.cpp:
        (WebCore::AudioSampleBufferList::copyFrom):
        * platform/audio/cocoa/AudioSampleDataSource.mm:
        * platform/audio/cocoa/WebAudioBufferList.cpp:
        (WebCore::WebAudioBufferList::WebAudioBufferList):
        * platform/audio/gstreamer/AudioFileReaderGStreamer.cpp:
        (WebCore::AudioFileReader::decodeAudioForBusCreation):
        (WebCore::createBusFromAudioFile): Deleted.
        * platform/audio/ios/AudioOutputUnitAdaptorIOS.cpp:
        (WebCore::AudioOutputUnitAdaptor::configure):
        * platform/audio/mac/AudioOutputUnitAdaptorMac.cpp:
        (WebCore::AudioOutputUnitAdaptor::configure):
        * platform/cocoa/MediaUtilities.cpp:
        (WebCore::createAudioFormatDescription):
        (WebCore::createAudioSampleBuffer):
        * platform/graphics/RemoteVideoSample.cpp:
        (WebCore::RemoteVideoSample::create):
        * platform/graphics/avfoundation/AudioSourceProviderAVFObjC.mm:
        (WebCore::AudioSourceProviderAVFObjC::create):
        (WebCore::AudioSourceProviderAVFObjC::provideInput):
        (WebCore::AudioSourceProviderAVFObjC::createMixIfNeeded):
        (WebCore::AudioSourceProviderAVFObjC::finalizeCallback):
        (WebCore::AudioSourceProviderAVFObjC::prepareCallback):
        (WebCore::AudioSourceProviderAVFObjC::unprepareCallback):
        (WebCore::AudioSourceProviderAVFObjC::processCallback):
        (WebCore::AudioSourceProviderAVFObjC::prepare):
        (WebCore::AudioSourceProviderAVFObjC::process):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createImageGenerator):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::getStartDate const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::currentMediaTime const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::seekToTime):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformBufferedTimeRanges const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformMinTimeSeekable const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformMaxTimeSeekable const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformMaxTimeLoaded const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createImageForTimeInRect):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::isAvailable):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::metadataGroupDidArrive):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::metadataDidArrive):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::performTaskAtMediaTime):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::EffectiveRateChangedListener::stop):
        (WebCore::EffectiveRateChangedListener::EffectiveRateChangedListener):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::MediaPlayerPrivateMediaSourceAVFObjC):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::isAvailable):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::currentMediaTime const):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setCurrentTimeDidChangeCallback):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::seekInternal):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::updateLastPixelBuffer):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::destroyLayer):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::streamSession):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::performTaskAtMediaTime):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::isAvailable):
        (WebCore::videoTransformationMatrix):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateCurrentFrameImage):
        * platform/graphics/avfoundation/objc/MediaSampleAVFObjC.mm:
        (WTF::CFTypeTrait<CMSampleBufferRef>::typeID):
        (WebCore::MediaSampleAVFObjC::createImageSample):
        (WebCore::MediaSampleAVFObjC::presentationTime const):
        (WebCore::MediaSampleAVFObjC::decodeTime const):
        (WebCore::MediaSampleAVFObjC::duration const):
        (WebCore::MediaSampleAVFObjC::sizeInBytes const):
        (WebCore::MediaSampleAVFObjC::videoPixelFormat const):
        (WebCore::isCMSampleBufferAttachmentRandomAccess):
        (WebCore::doesCMSampleBufferHaveSyncInfo):
        (WebCore::isCMSampleBufferRandomAccess):
        (WebCore::isCMSampleBufferAttachmentNonDisplaying):
        (WebCore::isCMSampleBufferNonDisplaying):
        (WebCore::MediaSampleAVFObjC::presentationSize const):
        (WebCore::MediaSampleAVFObjC::offsetTimestampsBy):
        (WebCore::MediaSampleAVFObjC::setTimestamps):
        (WebCore::MediaSampleAVFObjC::isDivisable const):
        (WebCore::MediaSampleAVFObjC::divide):
        (WebCore::MediaSampleAVFObjC::createNonDisplayingCopy const):
        (WebCore::MediaSampleAVFObjC::getRGBAImageData const):
        (WebCore::setSampleBufferAsDisplayImmediately):
        (WebCore::MediaSampleAVFObjC::isHomogeneous const):
        (WebCore::MediaSampleAVFObjC::divideIntoHomogeneousSamples):
        (WebCore::MediaSampleAVFObjC::cloneSampleBufferAndSetAsDisplayImmediately):
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::bufferWasConsumedCallback):
        (WebCore::SourceBufferPrivateAVFObjC::SourceBufferPrivateAVFObjC):
        (WebCore::SourceBufferPrivateAVFObjC::~SourceBufferPrivateAVFObjC):
        (WebCore::SourceBufferPrivateAVFObjC::rendererWasAutomaticallyFlushed):
        (WebCore::SourceBufferPrivateAVFObjC::enqueueSample):
        (WebCore::SourceBufferPrivateAVFObjC::canSetMinimumUpcomingPresentationTime const):
        (WebCore::SourceBufferPrivateAVFObjC::setMinimumUpcomingPresentationTime):
        * platform/graphics/cocoa/SourceBufferParserWebM.cpp:
        (WebCore::SourceBufferParserWebM::OnFrame):
        (WebCore::SourceBufferParserWebM::VideoTrackData::consumeFrameData):
        (WebCore::SourceBufferParserWebM::VideoTrackData::createSampleBuffer):
        (WebCore::SourceBufferParserWebM::AudioTrackData::consumeFrameData):
        (WebCore::SourceBufferParserWebM::AudioTrackData::createSampleBuffer):
        * platform/graphics/cocoa/VP9UtilitiesCocoa.mm:
        (WebCore::convertToCMColorPrimaries):
        (WebCore::convertToCMTransferFunction):
        (WebCore::convertToCMYCbCRMatrix):
        (WebCore::createFormatDescriptionFromVPCodecConfigurationRecord):
        * platform/graphics/cocoa/WebCoreDecompressionSession.mm:
        (WTF::CFTypeTrait<CMSampleBufferRef>::typeID):
        (WebCore::WebCoreDecompressionSession::setTimebase):
        (WebCore::WebCoreDecompressionSession::enqueueSample):
        (WebCore::WebCoreDecompressionSession::shouldDecodeSample):
        (WebCore::WebCoreDecompressionSession::ensureDecompressionSessionForSample):
        (WebCore::WebCoreDecompressionSession::decodeSample):
        (WebCore::WebCoreDecompressionSession::handleDecompressionOutput):
        (WebCore::WebCoreDecompressionSession::getFirstVideoFrame):
        (WebCore::WebCoreDecompressionSession::automaticDequeue):
        (WebCore::WebCoreDecompressionSession::enqueueDecodedSample):
        (WebCore::WebCoreDecompressionSession::isReadyForMoreMediaData const):
        (WebCore::WebCoreDecompressionSession::notifyWhenHasAvailableVideoFrame):
        (WebCore::WebCoreDecompressionSession::imageForTime):
        (WebCore::WebCoreDecompressionSession::flush):
        (WebCore::WebCoreDecompressionSession::getDecodeTime):
        (WebCore::WebCoreDecompressionSession::getPresentationTime):
        (WebCore::WebCoreDecompressionSession::getDuration):
        (WebCore::WebCoreDecompressionSession::compareBuffers):
        (WebCore::WebCoreDecompressionSession::updateQosWithDecodeTimeStatistics):
        * platform/graphics/cv/ImageTransferSessionVT.mm:
        (WebCore::ImageTransferSessionVT::createPixelBuffer):
        (WebCore::ImageTransferSessionVT::convertCMSampleBuffer):
        (WebCore::ImageTransferSessionVT::createCMSampleBuffer):
        * platform/ios/PlaybackSessionInterfaceAVKit.mm:
        (WebCore::PlaybackSessionInterfaceAVKit::seekableRangesChanged):
        * platform/mac/VideoFullscreenInterfaceMac.mm:
        * platform/mediarecorder/MediaRecorderPrivateAVFImpl.cpp:
        (WebCore::MediaRecorderPrivateAVFImpl::videoSampleAvailable):
        * platform/mediarecorder/cocoa/AudioSampleBufferCompressor.mm:
        (WebCore::AudioSampleBufferCompressor::~AudioSampleBufferCompressor):
        (WebCore::AudioSampleBufferCompressor::initialize):
        (WebCore::AudioSampleBufferCompressor::finish):
        (WebCore::AudioSampleBufferCompressor::initAudioConverterForSourceFormatDescription):
        (WebCore::AudioSampleBufferCompressor::attachPrimingTrimsIfNeeded):
        (WebCore::AudioSampleBufferCompressor::gradualDecoderRefreshCount):
        (WebCore::AudioSampleBufferCompressor::sampleBufferWithNumPackets):
        (WebCore::AudioSampleBufferCompressor::provideSourceDataNumOutputPackets):
        (WebCore::AudioSampleBufferCompressor::processSampleBuffersUntilLowWaterTime):
        (WebCore::AudioSampleBufferCompressor::processSampleBuffer):
        (WebCore::AudioSampleBufferCompressor::getOutputSampleBuffer):
        (WebCore::AudioSampleBufferCompressor::takeOutputSampleBuffer):
        * platform/mediarecorder/cocoa/MediaRecorderPrivateWriterCocoa.h:
        * platform/mediarecorder/cocoa/MediaRecorderPrivateWriterCocoa.mm:
        (WebCore::MediaRecorderPrivateWriter::MediaRecorderPrivateWriter):
        (WebCore::MediaRecorderPrivateWriter::processNewCompressedVideoSampleBuffers):
        (WebCore::MediaRecorderPrivateWriter::processNewCompressedAudioSampleBuffers):
        (WebCore::MediaRecorderPrivateWriter::startAssetWriter):
        (WebCore::MediaRecorderPrivateWriter::appendCompressedVideoSampleBuffer):
        (WebCore::appendEndsPreviousSampleDurationMarker):
        (WebCore::copySampleBufferWithCurrentTimeStamp):
        (WebCore::MediaRecorderPrivateWriter::appendVideoSampleBuffer):
        (WebCore::MediaRecorderPrivateWriter::appendAudioSampleBuffer):
        (WebCore::MediaRecorderPrivateWriter::completeFetchData):
        (WebCore::MediaRecorderPrivateWriter::pause):
        (WebCore::MediaRecorderPrivateWriter::resume):
        * platform/mediarecorder/cocoa/VideoSampleBufferCompressor.mm:
        (WebCore::VideoSampleBufferCompressor::~VideoSampleBufferCompressor):
        (WebCore::VideoSampleBufferCompressor::initialize):
        (WebCore::VideoSampleBufferCompressor::finish):
        (WebCore::VideoSampleBufferCompressor::videoCompressionCallback):
        (WebCore::VideoSampleBufferCompressor::vtProfileLevel const):
        (WebCore::VideoSampleBufferCompressor::initCompressionSession):
        (WebCore::VideoSampleBufferCompressor::processSampleBuffer):
        (WebCore::VideoSampleBufferCompressor::getOutputSampleBuffer):
        (WebCore::VideoSampleBufferCompressor::takeOutputSampleBuffer):
        * platform/mediastream/cocoa/AudioMediaStreamTrackRendererInternalUnit.cpp:
        (WebCore::LocalAudioMediaStreamTrackRendererInternalUnit::start):
        (WebCore::LocalAudioMediaStreamTrackRendererInternalUnit::stop):
        (WebCore::LocalAudioMediaStreamTrackRendererInternalUnit::createAudioUnitIfNeeded):
        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::setSessionSizeAndFrameRate):
        (WebCore::AVVideoCaptureSource::frameDurationForFrameRate):
        (WebCore::AVVideoCaptureSource::generatePresets):
        * platform/mediastream/mac/CoreAudioCaptureDevice.cpp:
        (WebCore::CoreAudioCaptureDevice::deviceClock):
        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
        (WebCore::CoreAudioSharedUnit::setupAudioUnit):
        (WebCore::CoreAudioSharedUnit::configureMicrophoneProc):
        (WebCore::CoreAudioSharedUnit::configureSpeakerProc):
        (WebCore::CoreAudioSharedUnit::cleanupAudioUnit):
        (WebCore::CoreAudioSharedUnit::reconfigureAudioUnit):
        (WebCore::CoreAudioSharedUnit::startInternal):
        (WebCore::CoreAudioSharedUnit::stopInternal):
        (WebCore::CoreAudioSharedUnit::defaultInputDevice):
        * platform/mediastream/mac/DisplayCaptureSourceCocoa.cpp:
        * platform/mediastream/mac/MockAudioSharedUnit.mm:
        (WebCore::MockAudioSharedUnit::reconfigure):
        (WebCore::MockAudioSharedUnit::emitSampleBuffers):
        * platform/mediastream/mac/MockRealtimeVideoSourceMac.mm:
        * platform/mediastream/mac/RealtimeIncomingAudioSourceCocoa.cpp:
        (WebCore::RealtimeIncomingAudioSourceCocoa::OnData):
        * platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.mm:
        (WebCore::RealtimeIncomingVideoSourceCocoa::OnFrame):
        * platform/mediastream/mac/RealtimeOutgoingVideoSourceCocoa.cpp:
        (WebCore::RealtimeOutgoingVideoSourceCocoa::videoSampleAvailable):
        * platform/mediastream/mac/WindowDisplayCapturerMac.mm:

2021-06-27  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r279322.
        https://bugs.webkit.org/show_bug.cgi?id=227434


        Reverted changeset:

        "Not all uses of AudioToolbox framework use soft linking"
        https://bugs.webkit.org/show_bug.cgi?id=227250
        https://commits.webkit.org/r279322

2021-06-27  Jean-Yves Avenard  <jya@apple.com>

        Not all uses of AudioToolbox framework use soft linking
        https://bugs.webkit.org/show_bug.cgi?id=227250
        <rdar://problem/79606090>

        Reviewed by Eric Carlson.

        Unify AudioToolbox, CoreMedia, VideoToolbox and MediaToolbox's method
        definitions and their use, ensuring that they are always soft-linked.
        Unified builds and the inconsistent use of explicitly using the PAL namespace
        caused some calls to be ambiguous leading to compilation errors; some
        code would also use the softlinked methods while others called into the frameworks
        directly.
        To get around those we ensure that any calls to AudioToolbox or CoreMedia is always using
        the fully resolved PAL name.
        Remove unnecessary `using namespace PAL;` statements wherever applicable.
        No change in observable behavior.

        * Modules/mediastream/PeerConnectionBackend.cpp:
        * Modules/plugins/QuickTimePluginReplacement.mm:
        * Modules/webaudio/MediaStreamAudioSourceCocoa.cpp:
        (WebCore::MediaStreamAudioSource::consumeAudio):
        * dom/Document.cpp:
        * html/HTMLCanvasElement.cpp:
        * html/HTMLMediaElement.cpp:
        * platform/audio/AudioFileReader.h:
        * platform/audio/cocoa/AudioFileReaderCocoa.cpp:
        (WebCore::AudioFileReader::AudioFileReader):
        (WebCore::AudioFileReader::~AudioFileReader):
        (WebCore::AudioFileReader::createBus):
        (WebCore::createBusFromAudioFile): Deleted.
        * platform/audio/cocoa/AudioFileReaderCocoa.h:
        * platform/audio/cocoa/AudioOutputUnitAdaptor.cpp:
        (WebCore::AudioOutputUnitAdaptor::~AudioOutputUnitAdaptor):
        (WebCore::AudioOutputUnitAdaptor::start):
        (WebCore::AudioOutputUnitAdaptor::stop):
        * platform/audio/cocoa/AudioSampleBufferList.cpp:
        (WebCore::AudioSampleBufferList::copyFrom):
        * platform/audio/cocoa/AudioSampleDataSource.mm:
        * platform/audio/cocoa/WebAudioBufferList.cpp:
        (WebCore::WebAudioBufferList::WebAudioBufferList):
        * platform/audio/gstreamer/AudioFileReaderGStreamer.cpp:
        (WebCore::AudioFileReader::decodeAudioForBusCreation):
        (WebCore::createBusFromAudioFile): Deleted.
        * platform/audio/ios/AudioOutputUnitAdaptorIOS.cpp:
        (WebCore::AudioOutputUnitAdaptor::configure):
        * platform/audio/mac/AudioOutputUnitAdaptorMac.cpp:
        (WebCore::AudioOutputUnitAdaptor::configure):
        * platform/cocoa/MediaUtilities.cpp:
        (WebCore::createAudioFormatDescription):
        (WebCore::createAudioSampleBuffer):
        * platform/graphics/RemoteVideoSample.cpp:
        (WebCore::RemoteVideoSample::create):
        * platform/graphics/avfoundation/AudioSourceProviderAVFObjC.mm:
        (WebCore::AudioSourceProviderAVFObjC::create):
        (WebCore::AudioSourceProviderAVFObjC::provideInput):
        (WebCore::AudioSourceProviderAVFObjC::createMixIfNeeded):
        (WebCore::AudioSourceProviderAVFObjC::finalizeCallback):
        (WebCore::AudioSourceProviderAVFObjC::prepareCallback):
        (WebCore::AudioSourceProviderAVFObjC::unprepareCallback):
        (WebCore::AudioSourceProviderAVFObjC::processCallback):
        (WebCore::AudioSourceProviderAVFObjC::prepare):
        (WebCore::AudioSourceProviderAVFObjC::process):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createImageGenerator):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::getStartDate const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::currentMediaTime const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::seekToTime):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformBufferedTimeRanges const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformMinTimeSeekable const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformMaxTimeSeekable const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformMaxTimeLoaded const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createImageForTimeInRect):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::isAvailable):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::metadataGroupDidArrive):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::metadataDidArrive):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::performTaskAtMediaTime):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::EffectiveRateChangedListener::stop):
        (WebCore::EffectiveRateChangedListener::EffectiveRateChangedListener):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::MediaPlayerPrivateMediaSourceAVFObjC):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::isAvailable):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::currentMediaTime const):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setCurrentTimeDidChangeCallback):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::seekInternal):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::updateLastPixelBuffer):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::destroyLayer):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::streamSession):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::performTaskAtMediaTime):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::isAvailable):
        (WebCore::videoTransformationMatrix):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateCurrentFrameImage):
        * platform/graphics/avfoundation/objc/MediaSampleAVFObjC.mm:
        (WTF::CFTypeTrait<CMSampleBufferRef>::typeID):
        (WebCore::MediaSampleAVFObjC::createImageSample):
        (WebCore::MediaSampleAVFObjC::presentationTime const):
        (WebCore::MediaSampleAVFObjC::decodeTime const):
        (WebCore::MediaSampleAVFObjC::duration const):
        (WebCore::MediaSampleAVFObjC::sizeInBytes const):
        (WebCore::MediaSampleAVFObjC::videoPixelFormat const):
        (WebCore::isCMSampleBufferAttachmentRandomAccess):
        (WebCore::doesCMSampleBufferHaveSyncInfo):
        (WebCore::isCMSampleBufferRandomAccess):
        (WebCore::isCMSampleBufferAttachmentNonDisplaying):
        (WebCore::isCMSampleBufferNonDisplaying):
        (WebCore::MediaSampleAVFObjC::presentationSize const):
        (WebCore::MediaSampleAVFObjC::offsetTimestampsBy):
        (WebCore::MediaSampleAVFObjC::setTimestamps):
        (WebCore::MediaSampleAVFObjC::isDivisable const):
        (WebCore::MediaSampleAVFObjC::divide):
        (WebCore::MediaSampleAVFObjC::createNonDisplayingCopy const):
        (WebCore::MediaSampleAVFObjC::getRGBAImageData const):
        (WebCore::setSampleBufferAsDisplayImmediately):
        (WebCore::MediaSampleAVFObjC::isHomogeneous const):
        (WebCore::MediaSampleAVFObjC::divideIntoHomogeneousSamples):
        (WebCore::MediaSampleAVFObjC::cloneSampleBufferAndSetAsDisplayImmediately):
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::bufferWasConsumedCallback):
        (WebCore::SourceBufferPrivateAVFObjC::SourceBufferPrivateAVFObjC):
        (WebCore::SourceBufferPrivateAVFObjC::~SourceBufferPrivateAVFObjC):
        (WebCore::SourceBufferPrivateAVFObjC::rendererWasAutomaticallyFlushed):
        (WebCore::SourceBufferPrivateAVFObjC::enqueueSample):
        (WebCore::SourceBufferPrivateAVFObjC::canSetMinimumUpcomingPresentationTime const):
        (WebCore::SourceBufferPrivateAVFObjC::setMinimumUpcomingPresentationTime):
        * platform/graphics/cocoa/SourceBufferParserWebM.cpp:
        (WebCore::SourceBufferParserWebM::OnFrame):
        (WebCore::SourceBufferParserWebM::VideoTrackData::consumeFrameData):
        (WebCore::SourceBufferParserWebM::VideoTrackData::createSampleBuffer):
        (WebCore::SourceBufferParserWebM::AudioTrackData::consumeFrameData):
        (WebCore::SourceBufferParserWebM::AudioTrackData::createSampleBuffer):
        * platform/graphics/cocoa/VP9UtilitiesCocoa.mm:
        (WebCore::convertToCMColorPrimaries):
        (WebCore::convertToCMTransferFunction):
        (WebCore::convertToCMYCbCRMatrix):
        (WebCore::createFormatDescriptionFromVPCodecConfigurationRecord):
        * platform/graphics/cocoa/WebCoreDecompressionSession.mm:
        (WTF::CFTypeTrait<CMSampleBufferRef>::typeID):
        (WebCore::WebCoreDecompressionSession::setTimebase):
        (WebCore::WebCoreDecompressionSession::enqueueSample):
        (WebCore::WebCoreDecompressionSession::shouldDecodeSample):
        (WebCore::WebCoreDecompressionSession::ensureDecompressionSessionForSample):
        (WebCore::WebCoreDecompressionSession::decodeSample):
        (WebCore::WebCoreDecompressionSession::handleDecompressionOutput):
        (WebCore::WebCoreDecompressionSession::getFirstVideoFrame):
        (WebCore::WebCoreDecompressionSession::automaticDequeue):
        (WebCore::WebCoreDecompressionSession::enqueueDecodedSample):
        (WebCore::WebCoreDecompressionSession::isReadyForMoreMediaData const):
        (WebCore::WebCoreDecompressionSession::notifyWhenHasAvailableVideoFrame):
        (WebCore::WebCoreDecompressionSession::imageForTime):
        (WebCore::WebCoreDecompressionSession::flush):
        (WebCore::WebCoreDecompressionSession::getDecodeTime):
        (WebCore::WebCoreDecompressionSession::getPresentationTime):
        (WebCore::WebCoreDecompressionSession::getDuration):
        (WebCore::WebCoreDecompressionSession::compareBuffers):
        (WebCore::WebCoreDecompressionSession::updateQosWithDecodeTimeStatistics):
        * platform/graphics/cv/ImageTransferSessionVT.mm:
        (WebCore::ImageTransferSessionVT::createPixelBuffer):
        (WebCore::ImageTransferSessionVT::convertCMSampleBuffer):
        (WebCore::ImageTransferSessionVT::createCMSampleBuffer):
        * platform/ios/PlaybackSessionInterfaceAVKit.mm:
        (WebCore::PlaybackSessionInterfaceAVKit::seekableRangesChanged):
        * platform/mac/VideoFullscreenInterfaceMac.mm:
        * platform/mediarecorder/MediaRecorderPrivateAVFImpl.cpp:
        (WebCore::MediaRecorderPrivateAVFImpl::videoSampleAvailable):
        * platform/mediarecorder/cocoa/AudioSampleBufferCompressor.mm:
        (WebCore::AudioSampleBufferCompressor::~AudioSampleBufferCompressor):
        (WebCore::AudioSampleBufferCompressor::initialize):
        (WebCore::AudioSampleBufferCompressor::finish):
        (WebCore::AudioSampleBufferCompressor::initAudioConverterForSourceFormatDescription):
        (WebCore::AudioSampleBufferCompressor::attachPrimingTrimsIfNeeded):
        (WebCore::AudioSampleBufferCompressor::gradualDecoderRefreshCount):
        (WebCore::AudioSampleBufferCompressor::sampleBufferWithNumPackets):
        (WebCore::AudioSampleBufferCompressor::provideSourceDataNumOutputPackets):
        (WebCore::AudioSampleBufferCompressor::processSampleBuffersUntilLowWaterTime):
        (WebCore::AudioSampleBufferCompressor::processSampleBuffer):
        (WebCore::AudioSampleBufferCompressor::getOutputSampleBuffer):
        (WebCore::AudioSampleBufferCompressor::takeOutputSampleBuffer):
        * platform/mediarecorder/cocoa/MediaRecorderPrivateWriterCocoa.h:
        * platform/mediarecorder/cocoa/MediaRecorderPrivateWriterCocoa.mm:
        (WebCore::MediaRecorderPrivateWriter::MediaRecorderPrivateWriter):
        (WebCore::MediaRecorderPrivateWriter::processNewCompressedVideoSampleBuffers):
        (WebCore::MediaRecorderPrivateWriter::processNewCompressedAudioSampleBuffers):
        (WebCore::MediaRecorderPrivateWriter::startAssetWriter):
        (WebCore::MediaRecorderPrivateWriter::appendCompressedVideoSampleBuffer):
        (WebCore::appendEndsPreviousSampleDurationMarker):
        (WebCore::copySampleBufferWithCurrentTimeStamp):
        (WebCore::MediaRecorderPrivateWriter::appendVideoSampleBuffer):
        (WebCore::MediaRecorderPrivateWriter::appendAudioSampleBuffer):
        (WebCore::MediaRecorderPrivateWriter::completeFetchData):
        (WebCore::MediaRecorderPrivateWriter::pause):
        (WebCore::MediaRecorderPrivateWriter::resume):
        * platform/mediarecorder/cocoa/VideoSampleBufferCompressor.mm:
        (WebCore::VideoSampleBufferCompressor::~VideoSampleBufferCompressor):
        (WebCore::VideoSampleBufferCompressor::initialize):
        (WebCore::VideoSampleBufferCompressor::finish):
        (WebCore::VideoSampleBufferCompressor::videoCompressionCallback):
        (WebCore::VideoSampleBufferCompressor::vtProfileLevel const):
        (WebCore::VideoSampleBufferCompressor::initCompressionSession):
        (WebCore::VideoSampleBufferCompressor::processSampleBuffer):
        (WebCore::VideoSampleBufferCompressor::getOutputSampleBuffer):
        (WebCore::VideoSampleBufferCompressor::takeOutputSampleBuffer):
        * platform/mediastream/cocoa/AudioMediaStreamTrackRendererInternalUnit.cpp:
        (WebCore::LocalAudioMediaStreamTrackRendererInternalUnit::start):
        (WebCore::LocalAudioMediaStreamTrackRendererInternalUnit::stop):
        (WebCore::LocalAudioMediaStreamTrackRendererInternalUnit::createAudioUnitIfNeeded):
        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::setSessionSizeAndFrameRate):
        (WebCore::AVVideoCaptureSource::frameDurationForFrameRate):
        (WebCore::AVVideoCaptureSource::generatePresets):
        * platform/mediastream/mac/CoreAudioCaptureDevice.cpp:
        (WebCore::CoreAudioCaptureDevice::deviceClock):
        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
        (WebCore::CoreAudioSharedUnit::setupAudioUnit):
        (WebCore::CoreAudioSharedUnit::configureMicrophoneProc):
        (WebCore::CoreAudioSharedUnit::configureSpeakerProc):
        (WebCore::CoreAudioSharedUnit::cleanupAudioUnit):
        (WebCore::CoreAudioSharedUnit::reconfigureAudioUnit):
        (WebCore::CoreAudioSharedUnit::startInternal):
        (WebCore::CoreAudioSharedUnit::stopInternal):
        (WebCore::CoreAudioSharedUnit::defaultInputDevice):
        * platform/mediastream/mac/DisplayCaptureSourceCocoa.cpp:
        * platform/mediastream/mac/MockAudioSharedUnit.mm:
        (WebCore::MockAudioSharedUnit::reconfigure):
        (WebCore::MockAudioSharedUnit::emitSampleBuffers):
        * platform/mediastream/mac/MockRealtimeVideoSourceMac.mm:
        * platform/mediastream/mac/RealtimeIncomingAudioSourceCocoa.cpp:
        (WebCore::RealtimeIncomingAudioSourceCocoa::OnData):
        * platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.mm:
        (WebCore::RealtimeIncomingVideoSourceCocoa::OnFrame):
        * platform/mediastream/mac/RealtimeOutgoingVideoSourceCocoa.cpp:
        (WebCore::RealtimeOutgoingVideoSourceCocoa::videoSampleAvailable):
        * platform/mediastream/mac/WindowDisplayCapturerMac.mm:

2021-06-27  Rob Buis  <rbuis@igalia.com>

        Treat image data url's as not identical
        https://bugs.webkit.org/show_bug.cgi?id=226924

        Reviewed by Said Abou-Hallawa.

        Treat image data url's as not identical
        in fillImagesAreIdentical.

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::updateFillImages):
        * rendering/style/StyleCachedImage.cpp:
        (WebCore::StyleCachedImage::usesDataProtocol const):
        * rendering/style/StyleCachedImage.h:
        * rendering/style/StyleCursorImage.cpp:
        (WebCore::StyleCursorImage::usesDataProtocol const):
        * rendering/style/StyleCursorImage.h:
        * rendering/style/StyleImage.h:
        (WebCore::StyleImage::usesDataProtocol const):

2021-06-27  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS 15] Fix the internal build after rdar://76549109
        https://bugs.webkit.org/show_bug.cgi?id=227430
        rdar://79832425

        Reviewed by Sam Weinig.

        Fix the build by replacing the use of the `UIFloatIsZero` macro with its actual definition. The immediate cause
        of this build failure is a UIKit change that changed the definition of `UIFloatIsZero`, such that we end up
        redefining `UIFloatIsZero` in HTMLConverter.mm. However, since `UIFloatIsZero` is specific to iOS family and
        HTMLConverter is used only in this one place on both macOS and iOS, it makes more sense to simply use the macro
        definition itself.

        * editing/cocoa/HTMLConverter.mm:
        (HTMLConverter::computedAttributesForElement):

2021-06-27  Peng Liu  <peng.liu6@apple.com>

        Backgrounding and returning to a FaceTime call in MobileSafari leads to a blank black sreen
        https://bugs.webkit.org/show_bug.cgi?id=227406

        Reviewed by Eric Carlson.

        The `RequireUserGestureForFullscreen` restriction will be kept in a `MediaElementSession`
        if the corresponding media element is `autoplay`. Therefore, the request to enter
        picture-in-picture from the UI process will be ignored by the media element, and the
        state machine managing video presentation mode in the UI process will be an inconsistent state.

        This patch creates a `UserGestureIndicator` before requesting the media element
        to change its presentation mode to make sure the request will be handled.

        * platform/cocoa/VideoFullscreenModelVideoElement.mm:
        (WebCore::VideoFullscreenModelVideoElement::fullscreenModeChanged):

2021-06-27  Alan Bujtas  <zalan@apple.com>

        [LFC][TFC] Add support for shrinking over-constrained columns based on the width type priority list
        https://bugs.webkit.org/show_bug.cgi?id=227426

        Reviewed by Antti Koivisto.

        Let's take the priority list into use when shrinking the columns in an over-constrained context.
        e.g.
        <div style="width: 100px">
          <table><tr><td style="width: 90%""></td><td style="width: 400px;"></td><td style="width: 100px;"></td></tr></table>
        </div>

        While the second and the third columns have the preferred width of 400px and 100px respectively, we can't accommodate 
        them as the containing block (<div>) sets a 100px horizontal constraint on the table content and the first column already takes up 90px space.

        Now we start shrinking the columns using the following priority list: auto < relative < fixed < percent (ignoring the actual column order).

        The preferred width of the table (assume 0px border spacing and padding) is 90px + 400px + 100px. It produces a -490px 
        available space. This negative space needs to be distributed among the columns staring with the fixed sized ones.
        The fixed sized columns have a flex space of 500px which covers the -490px gap. Based on their 4:1 distribution ratio, they'll end
        up with 8px and 2px and the percent column stays at 90px.

        Tests: fast/layoutformattingcontext/table-space-shinking-mixed-width-type-simple.html
               fast/layoutformattingcontext/table-space-shinking-mixed-width-type-simple2.html

        * layout/formattingContexts/table/TableLayout.cpp:
        (WebCore::Layout::distributeAvailableSpace):
        (WebCore::Layout::TableFormattingContext::TableLayout::distributedHorizontalSpace):
        (WebCore::Layout::TableFormattingContext::TableLayout::distributedVerticalSpace):

2021-06-27  Alan Bujtas  <zalan@apple.com>

        [LFC][TFC] Rename GridSpace::preferredSpace to preferredSize
        https://bugs.webkit.org/show_bug.cgi?id=227425

        Reviewed by Antti Koivisto.

        It is a more descriptive name.

        * layout/formattingContexts/table/TableLayout.cpp:
        (WebCore::Layout::GridSpace::isEmpty const):
        (WebCore::Layout::operator-):
        (WebCore::Layout::operator+=):
        (WebCore::Layout::operator/):
        (WebCore::Layout::distributeAvailableSpace):
        (WebCore::Layout::TableFormattingContext::TableLayout::distributedHorizontalSpace): preferredWidth is the same in both cases.

2021-06-27  Alan Bujtas  <zalan@apple.com>

        [LFC][TFC] Introduce a priority order for the grid types
        https://bugs.webkit.org/show_bug.cgi?id=227417

        Reviewed by Antti Koivisto.

        Extra space distribution is based on a priority list with percent columns having the highest priority
        and auto columns having the lowest (percent > fixed > relative > auto).

        * layout/formattingContexts/table/TableLayout.cpp:
        (WebCore::Layout::distributeAvailableSpace):

2021-06-27  Alan Bujtas  <zalan@apple.com>

        [LFC][TFC] Introduce GridSpace::type
        https://bugs.webkit.org/show_bug.cgi?id=227409

        Reviewed by Antti Koivisto.

        This is in preparation for supporting mixed width/height types (percent/fixed/relative/auto).
        Available space distribution is based on type priority (e.g. percent value takes precedence over fixed width).

        * layout/formattingContexts/table/TableLayout.cpp:
        (WebCore::Layout::distributeAvailableSpace):
        (WebCore::Layout::TableFormattingContext::TableLayout::distributedHorizontalSpace):
        (WebCore::Layout::TableFormattingContext::TableLayout::distributedVerticalSpace):
        (WebCore::Layout::max): Deleted.

2021-06-27  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] SleepDisabler not destroyed when video playback stops
        https://bugs.webkit.org/show_bug.cgi?id=219353

        Reviewed by Eric Carlson.

        In GStreamer ports the SleepDisabler remained active after EOS because
        HTMLMediaElement::updateSleepDisabling() was not being triggered. An explicit clean-up upon
        the ended event in the media element is better than any other implicit action.

        Test: media/video-ended-does-not-hold-sleep-assertion.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::dispatchEvent):

2021-06-27  Antoine Quint  <graouts@webkit.org>

        [Model] [iOS] Add support for rendering model resources
        https://bugs.webkit.org/show_bug.cgi?id=227392
        <rdar://problem/79770136>

        Reviewed by Tim Horton.

        Ensure the anchor point is set correctly for model content layers, otherwise the preview layer shows
        its center at the corner of the parent layer's origin.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::setContentsToModel):

2021-06-26  Joonghun Park  <jh718.park@samsung.com>

        Unreviewed. Remove the build warnings below since r279050.
        warning: redundant move in return statement [-Wredundant-move]

        No new tests, no new behavioral changes.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeCounterStyleAdditiveSymbols):
        * css/parser/CSSPropertyParserWorkerSafe.cpp:
        (WebCore::CSSPropertyParserHelpersWorkerSafe::consumeFontFaceSrcURI):

2021-06-26  Sam Weinig  <weinig@apple.com>

        [Modern Media Controls] Modern media controls should not need to know about specific platforms in shared code
        https://bugs.webkit.org/show_bug.cgi?id=227423

        Reviewed by Eric Carlson.

        Rather than requiring the shared media control classes to know specifics about
        the various platforms via the LayoutTraits flags, we now abstract those decisions
        via a new polymorphic LayoutTraits class, which each platform subclasses and
        implements.

        This will gives better separation and will allow easier experimentation with new
        control patterns.

        * DerivedSources-input.xcfilelist:
        * DerivedSources.make:
        * PlatformMac.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * Modules/modern-media-controls/js-files:
        Adds new files for layout traits and its subclasses.

        * Modules/mediacontrols/MediaControlsHost.cpp:
        (WebCore::MediaControlsHost::layoutTraitsClassName const):
        (WebCore::MediaControlsHost::platform const): Deleted.
        * Modules/mediacontrols/MediaControlsHost.h:
        * Modules/mediacontrols/MediaControlsHost.idl:
        Replace platform accessor with a new layoutTraitsClassName, which allows
        the platform to spcecify which of the trait subclasses to use.

        * Modules/modern-media-controls/controls/layout-traits.js: Added.
        * Modules/modern-media-controls/controls/ios-layout-traits.js: Added.
        * Modules/modern-media-controls/controls/macos-layout-traits.js: Added.
        * Modules/modern-media-controls/controls/watchos-layout-traits.js: Added.
        Add new layout trait files.

        * Modules/modern-media-controls/controls/fullscreen-button.js:
        * Modules/modern-media-controls/controls/icon-service.js:
        * Modules/modern-media-controls/controls/ios-inline-media-controls.js:
        * Modules/modern-media-controls/controls/layout-item.js:
        * Modules/modern-media-controls/controls/macos-fullscreen-media-controls.js:
        * Modules/modern-media-controls/controls/macos-inline-media-controls.js:
        * Modules/modern-media-controls/controls/media-controls.js:
        * Modules/modern-media-controls/controls/play-pause-button.js:
        * Modules/modern-media-controls/controls/time-control.js:
        * Modules/modern-media-controls/controls/watchos-media-controls.js:
        * Modules/modern-media-controls/media/media-controller.js:
        * Modules/modern-media-controls/media/tracks-support.js:
        Replace explicit checks for platform with queries to the layout traits interface.

2021-06-26  Dean Jackson  <dino@apple.com>

        Build fix for iOS Simulator. MTLSharedTexture is not available
        on that configuration.

        * Modules/webxr/WebXROpaqueFramebuffer.cpp:
        (WebCore::WebXROpaqueFramebuffer::startFrame):
        (WebCore::WebXROpaqueFramebuffer::endFrame):
        * platform/graphics/cocoa/GraphicsContextGLOpenGLCocoa.mm:
        * platform/graphics/opengl/GraphicsContextGLOpenGL.h:

2021-06-25  Alan Bujtas  <zalan@apple.com>

        [LFC][TFC] Remove redundant struct ResolvedItem
        https://bugs.webkit.org/show_bug.cgi?id=227405

        Reviewed by Sam Weinig.

        * layout/formattingContexts/table/TableLayout.cpp:
        (WebCore::Layout::distributeAvailableSpace):

2021-06-25  Myles C. Maxfield  <mmaxfield@apple.com>

        [macOS] WebGL content is unable to use the discrete GPU
        https://bugs.webkit.org/show_bug.cgi?id=227408
        <rdar://problem/79216506>

        Reviewed by Dean Jackson.

        Simply pass along the power preference into ANGLE. This is read in
        DisplayMtl::getMetalDeviceMatchingAttribute().

        No new tests. I _think_ this is untestable, because the web exposed power preference is being set correctly.
        We’re correctly reporting to the web content that they have successfully asked for a high power context.
        We’re just not honoring that internally. If the test is a performance test, or checks the renderer string,
        that test would be hardware-dependent, and couldn’t be a regular layout test.

        * platform/graphics/cocoa/GraphicsContextGLOpenGLCocoa.mm:
        (WebCore::InitializeEGLDisplay):

2021-06-25  Myles C. Maxfield  <mmaxfield@apple.com>

        [macOS] -[NSString _web_widthWithFont:] returns 0
        https://bugs.webkit.org/show_bug.cgi?id=227385
        <rdar://problem/79430938>

        Reviewed by Simon Fraser.

        Simply take the iOS codepath on macOS.

        Test: WebKitLegacyStringWidth.ThaiWidthForWeb

        * platform/graphics/FontCascade.cpp:
        * platform/graphics/coretext/FontCascadeCoreText.cpp:
        (WebCore::FontCascade::FontCascade):

2021-06-22  Dean Jackson  <dino@apple.com>

        Add support for MTLSharedTextures in WebXR
        https://bugs.webkit.org/show_bug.cgi?id=227245
        <rdar://problem/79591620>

        Reviewed by Tim Horton.

        Sometimes, the IOSurface passed to WebXR come from a shared MTLTexture. In
        this case we can't treat the IOSurface data as a regular single-plane
        image. Instead we should use it to recreate the MTLTexture and then
        bind that to WebGL's framebuffer.

        * Modules/webxr/WebXROpaqueFramebuffer.cpp: Use some new binding methods on GraphicsContextGLOpenGL
        if given a shared texture.
        (WebCore::WebXROpaqueFramebuffer::startFrame):
        (WebCore::WebXROpaqueFramebuffer::endFrame):
        * Modules/webxr/WebXROpaqueFramebuffer.h:
        * platform/graphics/cocoa/GraphicsContextGLOpenGLCocoa.mm: New methods to link an
        IOSurface to a GL texture, going through a MTLSharedTexture.
        (WebCore::GraphicsContextGLOpenGL::attachIOSurfaceToSharedTexture):
        (WebCore::GraphicsContextGLOpenGL::detachIOSurfaceFromSharedTexture):
        * platform/graphics/opengl/GraphicsContextGLOpenGL.h:
        * platform/xr/PlatformXR.h: Add a new "isShared" member to LayerData
        to differentiate between normal IOSurfaces and those that came
        from a shared texture.
        (PlatformXR::Device::FrameData::LayerData::encode const):
        (PlatformXR::Device::FrameData::LayerData::decode):

2021-06-25  Alex Christensen  <achristensen@webkit.org>

        Fix null crash in AudioMediaStreamTrackRendererCocoa::start
        https://bugs.webkit.org/show_bug.cgi?id=227386
        <rdar://79045120>

        Reviewed by Youenn Fablet.

        AudioMediaStreamTrackRendererInternalUnitManager::Proxy::~Proxy calls those callbacks with nullptr.
        So can LocalAudioMediaStreamTrackRendererInternalUnit::retrieveFormatDescription when createAudioUnitIfNeeded
        has an early return or hasn't been called yet.

        When this happens, let's not crash.

        * platform/mediastream/cocoa/AudioMediaStreamTrackRendererCocoa.cpp:
        (WebCore::AudioMediaStreamTrackRendererCocoa::start):

2021-06-25  Philippe Normand  <pnormand@igalia.com>

        WIRELESS_PLAYBACK_TARGET guards protect unrelated code
        https://bugs.webkit.org/show_bug.cgi?id=227404

        Reviewed by Eric Carlson.

        The dispatchEvent(), addEventListener() and removeEventListener() are now unconditionally
        implemented. The WIRELESS_PLAYBACK_TARGET guards were refactored to enclose only the code
        specific to this feature.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::enqueuePlaybackTargetAvailabilityChangedEvent):
        (WebCore::HTMLMediaElement::setWirelessPlaybackTarget):
        (WebCore::HTMLMediaElement::setShouldPlayToPlaybackTarget):
        (WebCore::HTMLMediaElement::playbackTargetPickerWasDismissed):
        (WebCore::HTMLMediaElement::remoteHasAvailabilityCallbacksChanged):
        (WebCore::HTMLMediaElement::addEventListener):
        (WebCore::HTMLMediaElement::removeEventListener):
        * html/HTMLMediaElement.h:

2021-06-25  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, reverting r279208.
        https://bugs.webkit.org/show_bug.cgi?id=227381

        Broke the Apple Windows build.

        Reverted changeset:

        "Not all uses of AudioToolbox framework use soft linking"
        https://bugs.webkit.org/show_bug.cgi?id=227250
        https://trac.webkit.org/changeset/279208

2021-06-25  Sergio Villar Senin  <svillar@igalia.com>

        [css-flexbox] Improve computation of intrinsic sizes of flex items with aspect ratio
        https://bugs.webkit.org/show_bug.cgi?id=227395

        Reviewed by Rob Buis.

        Before computing the intrinsic sizes of flex items we first clear the overriding sizes of the item
        that might have been set before in order to get the proper intrinsic size. However there is one
        situation in which having an overriding size is desirable and it's when the cross size should
        be set to the flex container's definite cross size. That's one of the exceptions for definite/indefinite
        sizes mentioned in the specs (see https://drafts.csswg.org/css-flexbox/#definite-sizes).

        In the aforementioned case we should temporarily set that overriding size in the cross axis so that
        the intrinsic size could be computed with that constrain.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::computeChildIntrinsicLogicalWidths const): Set the overriding size
        in the cross axis to compute the intrinsic size.
        (WebCore::RenderFlexibleBox::computeMainSizeFromAspectRatioUsing const):
        (WebCore::RenderFlexibleBox::childCrossSizeShouldUseContainerCrossSize const): Added a missing check,
        the cross size of the child must be auto, otherwise the rule does not apply.
        (WebCore::RenderFlexibleBox::computeCrossSizeForChildUsingContainerCrossSize const): Refactored from
        computeMainSizeFromAspectRatioUsing() as it's now used in two different places.
        * rendering/RenderFlexibleBox.h:

2021-06-25  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] TextCombiner has unlinked internal encoders
        https://bugs.webkit.org/show_bug.cgi?id=227362

        Reviewed by Xabier Rodriguez-Calvar.

        Each combiner pad can receive multiple caps events for the same stream, so we can't really
        rely on those to modify the internal topology of the combiner. Instead we can check the
        sticky events from the pad chain function, this is done at most once per pad. In case a caps
        event was sticked to the pad, the combiner now reacts properly.

        This issue was detected while running
        media/track/in-band/track-in-band-kate-ogg-cues-added-once.html with playbin3 enabled. 6
        different encoders where added to the combiner while only 2 are needed actually.

        * platform/graphics/gstreamer/TextCombinerGStreamer.cpp:
        (webKitTextCombinerHandleCaps):
        * platform/graphics/gstreamer/TextCombinerGStreamer.h:
        * platform/graphics/gstreamer/TextCombinerPadGStreamer.cpp:
        (webkitTextCombinerPadChain):
        (webkitTextCombinerPadConstructed):

2021-06-17  Sergio Villar Senin  <svillar@igalia.com>

        Nullptr crash in StyledMarkupAccumulator::traverseNodesForSerialization
        https://bugs.webkit.org/show_bug.cgi?id=226821

        Reviewed by Ryosuke Niwa.

        r276394 fixed an issue in serialization when transversing the nodes. It added a new condition
        to the ASSERT that was checking that its OK not to have a next pointer when there is a valid
        pastEnd in the case of pastEnd being a descendant of the pointer traversing the node tree.

        However that descendant check was not including the shadow DOM. This is precisely the case
        detected by the test case this patch is adding.

        Test: editing/selection/setSelection-shadow-dom-crash.html

        * editing/markup.cpp:
        (WebCore::StyledMarkupAccumulator::traverseNodesForSerialization):

2021-06-25  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Build warnings in AudioFileReader since r279123
        https://bugs.webkit.org/show_bug.cgi?id=227348

        Reviewed by Xabier Rodriguez-Calvar.

        Simplify the code handling the giostreamsrc creation, now that it is the only option possible.

        * platform/audio/gstreamer/AudioFileReaderGStreamer.cpp:
        (WebCore::AudioFileReader::decodeAudioForBusCreation):

2021-06-25  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r279266.
        https://bugs.webkit.org/show_bug.cgi?id=227402

        Causes crash loop

        Reverted changeset:

        "Remove references to order files"
        https://bugs.webkit.org/show_bug.cgi?id=227377
        https://trac.webkit.org/changeset/279266

2021-06-25  Ziran Sun  <zsun@igalia.com>

        [css-grid] Consider container's writing mode to get grid item's margin
        https://bugs.webkit.org/show_bug.cgi?id=226877

        Reviewed by Sergio Villar Senin.

        When computing the logical offset of a non-static absolute positioned grid item, we need
        to pass its container's style in order to resolve the child margin correctly, especially
        for the case when the item has flipped block writing mode (vertical-rl).

        This change is an import of the Chromium change at
        https://chromium-review.googlesource.com/c/chromium/src/+/2577365

        * rendering/RenderBox.h:
        (WebCore::RenderBox::marginLogicalLeft const):
        (WebCore::RenderBox::marginLogicalRight const):
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::logicalOffsetForOutOfFlowChild const):

2021-06-25  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Minor debugging improvements in mediastream source element
        https://bugs.webkit.org/show_bug.cgi?id=227396

        Reviewed by Xabier Rodriguez-Calvar.

        * platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp: Give representative name to
        the appsrc elements embedded in the MediaStreamSource element. Also add logging calls
        related with tracks observation.

2021-06-25  Sergio Villar Senin  <svillar@igalia.com>

        [css-flexbox] Cleanup OverridingSizesScope RAII class
        https://bugs.webkit.org/show_bug.cgi?id=227394

        Reviewed by Rob Buis.

        In r279268 we added a new RAII class which adds an overriding sizes free scope to perform
        layout computations. That class heavily uses the different set/get/clear methods for overriding
        sizes. We can use a macro with subsitutions there to reduce the amount of required code.

        Also moving the computeChildIntrinsicLogicalWidths() method to the private section as it does
        not require protected visibility.

        No new tests as it's just a code refactoring that does not modify the functionality.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::OverridingSizesScope::OverridingSizesScope):
        (WebCore::OverridingSizesScope::~OverridingSizesScope):
        (WebCore::OverridingSizesScope::setOrClearOverridingSize): Deleted.
        * rendering/RenderFlexibleBox.h:

2021-06-25  Martin Robinson  <mrobinson@webkit.org>

        [css-scroll-snap] Simplify snap point selection helpers
        https://bugs.webkit.org/show_bug.cgi?id=227062

        Reviewed by Frédéric Wang.

        Combine indicesOfNearestSnapOffsets and findFirstSnapStopOffsetBetweenOriginAndDestination
        and have the helper return the geometric previous and next snap points. This makes the
        code a bit easier to read, slightly more efficient, and prepares for looking at
        the geometric previous and next snap points for certain upcoming CSS Scroll Snap features.

        Previously, indicesOfNearestSnapOffsets used a binary search and findFirstSnapStopOffsetBetweenOriginAndDestination
        used a linear search. This change replaces these two functions with a single linear search.
        While findFirstSnapStopOffsetBetweenOriginAndDestination is only called for directional scrolling,
        directional scrolling is more common than non-directional scrolling (which is typically only called
        by scrollIntoView() and other JS scrolling APIs). I have tested this change with a large table of
        snap points and performance does not seem to be changed. In addition, a future change should mean
        that this searchForPotentialSnapPoints should be called much less.

        No new tests. This should not change behavior in any way.

        * page/scrolling/ScrollSnapOffsetsInfo.cpp:
        (WebCore::searchForPotentialSnapPoints): Added this new helper which is the combination
        of indicesOfNearestSnapOffsets and findFirstSnapStopOffsetBetweenOriginAndDestination.
        (WebCore::closestSnapOffsetWithInfoAndAxis): Use the new helper.

2021-06-14  Sergio Villar Senin  <svillar@igalia.com>

        [css-flexbox] Do not clamp flex base size with {min|max}-{height|width}
        https://bugs.webkit.org/show_bug.cgi?id=225590

        Reviewed by Alan Bujtas.

        When computing flex base size we should not clamp it with neither min-{height|width}
        nor max-{height|width}. That would be done later and will be called the hypothetical
        main size.

        For most of the cases we were already doing it, however there are some particular cases
        in which we have to call the generic layout code which does clamp the sizes using min
        and max sizes. In order to make those code paths work, we reset the min|max values to
        their initial ones (so they effectively become inactive) and then we set the original
        values back after computing the base size.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::ScopedUnboundedBox::ScopedUnboundedBox): New scoped class that sets min|max sizes
        to their initial values on instantiation and restores the original values on destruction.
        (WebCore::ScopedUnboundedBox::~ScopedUnboundedBox):
        (WebCore::RenderFlexibleBox::constructFlexItems): Wrap the base size computation with a
        ScopedUnboundedBox.

2021-06-09  Sergio Villar Senin  <svillar@igalia.com>

        [css-flexbox] Move flex item preferred width computation specifics to RenderFlexibleBox class
        https://bugs.webkit.org/show_bug.cgi?id=226822

        Reviewed by Alan Bujtas.

        RenderBlock had some specific code for flex items that cleared the overriding sizes before
        computing the {min|max}PreferredWidths and then restored them afterwards. That is done to
        properly compute flex items intrinsic sizes. That code is flexbox specific so we better move
        it to RenderFlexibleBox. In order to do that a new virtual method was added to RenderBlock which
        just calls minPreferredLogicalWidth() and maxPreferredLogicalWidth() for every block except
        flexbox containers.

        In the case of flexbox containers, it wraps those calls with a RAII class that properly
        clears the overriding sizes on instantiation and clears them on destruction. Now that the RAII
        class is available we use it also for another existing code path that requires to
        temporarily set an overriding size in a given scope.

        No need for new tests as there is no change in behaviour.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::computeChildIntrinsicLogicalWidths const): New virtual method.
        (WebCore::RenderBlock::computeChildPreferredLogicalWidths const): Call computeChildIntrinsicLogicalWidths().
        * rendering/RenderBlock.h:
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::OverridingSizesScope::OverridingSizesScope): New RAII class to set/clear overriding sizes in a scope.
        (WebCore::OverridingSizesScope::~OverridingSizesScope):
        (WebCore::OverridingSizesScope::setOrClearOverridingSize):
        (WebCore::RenderFlexibleBox::computeChildIntrinsicLogicalWidths const): Redefinition for flexbox containers.
        (WebCore::RenderFlexibleBox::childIntrinsicLogicalHeight const): Removed constness from attribute.
        (WebCore::RenderFlexibleBox::childIntrinsicLogicalWidth): Ditto.
        (WebCore::RenderFlexibleBox::crossAxisIntrinsicExtentForChild): Ditto.
        * rendering/RenderFlexibleBox.h:

2021-06-24  Antoine Quint  <graouts@webkit.org>

        [Model] Create a sandbox extension for a temporary directory to store model resources
        https://bugs.webkit.org/show_bug.cgi?id=227359

        Reviewed by Tim Horton.

        The SPIs we will use to render <model> resources expect a file URL to load and render the model.
        Before we adopt these SPIs, we extend the sandbox to allow writing to a temporary directory where
        we will store these resources.

        * Modules/model-element/HTMLModelElement.cpp:
        (WebCore::sharedModelElementCacheDirectory):
        (WebCore::HTMLModelElement::setModelElementCacheDirectory):
        (WebCore::HTMLModelElement::modelElementCacheDirectory):
        * Modules/model-element/HTMLModelElement.h:

2021-06-24  Sihui Liu  <sihui_liu@apple.com>

        Remove references to order files
        https://bugs.webkit.org/show_bug.cgi?id=227377
        rdar://76070556

        Reviewed by Mark Lam.

        We don't need to refer to order files on iOS now.

        * Configurations/WebCore.xcconfig:

2021-06-24  Venky Dass  <yaranamavenkataramana@apple.com>

        Crash in IDBTransaction::dispatchEvent when m_openDBRequest is null. 
        https://bugs.webkit.org/show_bug.cgi?id=226885

        Reviewed by Sihui Liu.

        Added a test to create null openDBRequest so that it can crash.  

        Test: storage/indexeddb/request-with-null-open-db-request.html

        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::dispatchEvent):

2021-06-24  Jer Noble  <jer.noble@apple.com>

        [Cocoa] Last few seconds of 'audio/webm; codecs=vorbis' appended to a SampleBuffer are not played
        https://bugs.webkit.org/show_bug.cgi?id=226069
        <rdar://78004793>

        Reviewed by Eric Carlson.

        Test: platform/mac-bigsur/media/media-source/media-vorbis-partial.html

        When parsing samples from a WebM file, the samples emitted by the parser can be very short in
        duration, which is ineffecient both in storage costs in our SampleMap, as well as in decoding
        CPU costs, as each sample must be fed into the decoder separately. So the parser will group
        together these small samples into a larger "meta sample" with a duration no shorter than 2s.

        However, at the end of a file, no more sample data will be appended, up to 2s of audio data
        will not be emitted from the parser.

        At the end of an append, always flush audio track data to ensure that all parsed samples are
        emitted, regardless of their collective duration.

        Drive-by Fixes:

        - createSampleBuffer() would completely empty m_packetData, which would corrupt the parser state
          in the case where there was partial frame data read (because that partial data would be cleared)
          Instead, remove only the data from the m_packetData that actually went into the CMSampleBuffer
        - createSampleBuffer() would use the entire m_packetData to create a CMSampleBuffer, even if partial
          data was read but not yet complete. Only use the fully parsed data to create the CMSampleBuffer.
        - consumeFrameData() would only increase the size of m_packetData when m_currentPacketSize was
          unset, which would leave the buffer zeroed when partial sample data was present. Always grow
          m_packetData to be large enough to receive the read data.
        - The Read() method would not return the correct number of bytes read (0) when a null destination
          buffer was passed in.

        * platform/graphics/cocoa/SourceBufferParserWebM.cpp:
        (WebCore::SourceBufferParserWebM::appendData):
        (WebCore::SourceBufferParserWebM::AudioTrackData::consumeFrameData):
        (WebCore::SourceBufferParserWebM::AudioTrackData::createSampleBuffer):

2021-06-24  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r275633.
        https://bugs.webkit.org/show_bug.cgi?id=227373

        Revert to see if this was the cause for some crashes seen
        lately

        Reverted changeset:

        "Reduce Vector<> wasted capacity in some RuleSet code"
        https://bugs.webkit.org/show_bug.cgi?id=224160
        https://trac.webkit.org/changeset/275633

2021-06-24  Dmitry Kalinkin  <dmitry.kalinkin+webkit@gmail.com>

        Use <cmath> instead of <math.h>
        https://bugs.webkit.org/show_bug.cgi?id=225856

        This is needed to avoid ambiguity between abs and std::abs observed on
        vanilla clang 7.1.0.

        Reviewed by Fujii Hironori.

        * platform/graphics/ColorComponents.h:

2021-06-24  Darin Adler  <darin@apple.com>

        CSS parser does not handle unpaired surrogates correctly
        https://bugs.webkit.org/show_bug.cgi?id=227357

        Reviewed by Sam Weinig.

        Tests: imported/w3c/web-platform-tests/css/css-syntax/input-preprocessing.html

        * bindings/js/JSDOMConvertStrings.cpp:
        (WebCore::stringToUSVString): Made non-inline to be used outside this file.
        * bindings/js/JSDOMConvertStrings.h: Added stringToUSVString.

        * css/parser/CSSTokenizer.cpp:
        (WebCore::preprocessString): Call stringToUSVString to convert unpaired
        surrogates to replacement characters.

2021-06-24  Sihui Liu  <sihui_liu@apple.com>

        IndexedDB prints error log about blob files when there is no error
        https://bugs.webkit.org/show_bug.cgi?id=227092

        Reviewed by Chris Dumez.

        We should try opening database if file exists, and try getting blob files only if database is opened.

        API test: IndexedDB.StoreBlobThenDeleteDatabase

        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
        (WebCore::IDBServer::SQLiteIDBBackingStore::deleteBackingStore):

2021-06-24  Kimmo Kinnunen  <kkinnunen@apple.com>

        Using a video as a source for a WebGL texture is slow and hangs on iOS 15
        https://bugs.webkit.org/show_bug.cgi?id=227081

        Reviewed by Eric Carlson.

        Video frame transfer from GPU process to Web process would fail when
        WebGL tried to copy the video frame to a texture. The failure was
        artificial, due to use of WebCore::IOSurface as a unneeeded helper
        to convert CVPixelBufferRef to cross-process object.

        This would cause performance regression when WebGL would
        fall back to software conversion fallback. This callback did work
        as it obtains the image through "get last frame as native image"
        API.

        * platform/cocoa/CoreVideoSoftLink.cpp:
        * platform/graphics/cocoa/IOSurface.h:
        * platform/graphics/cocoa/IOSurface.mm:
        Remove CVPixelBufferRef -> WebCore::IOSurface conversion function.
        Remove WebCore::IOSurface -> CVPixelBufferRef conversion function.
        These were used in WebKit IPC serialization for CVPixelBufferRef.
        However, this is incorrect behavior as CVPixelBufferRef
        is not always compatible with WebCore::IOSurface. IOSurfaceRef
        has always a destination color space. This would be missing from
        CVPixelBufferRef. The code is moved to the IPC serialization
        functions.

2021-06-24  Alan Bujtas  <zalan@apple.com>

        [IFC][Integration] Text selection flashing to end of paragraph
        https://bugs.webkit.org/show_bug.cgi?id=227158
        <rdar://79138828>

        Reviewed by Antti Koivisto.

        The "find the line for this position" code in RenderText::positionForPoint() expects adjoining lines boxes (i.e. no gaps between the lines). This function is called by hittesting as part of the text selection process.
        This patch implements the legacy behavior by
        1. expanding the "selection top" all the way to the (selection)bottom of the previous line.
        2. ensures that the first line's computed offset is ignored when the containing block has no border/padding.

        Test: fast/events/touch/ios/hidpi-selection-when-content-is-on-subpixel.html

        * layout/integration/LayoutIntegrationLineIteratorModernPath.h:
        (WebCore::LayoutIntegration::LineIteratorModernPath::selectionTop const):
        (WebCore::LayoutIntegration::LineIteratorModernPath::selectionTopForHitTesting const):

2021-06-24  Martin Robinson  <mrobinson@webkit.org>

        [css-scroll-snap] Remove ENABLE_SCROLL_SNAP compile-time option
        https://bugs.webkit.org/show_bug.cgi?id=227067

        Reviewed by Simon Fraser.

        Remove compile-time ENABLE_SCROLL_SNAP configuration option.

        No new tests. This should not change behavior in any way.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::valueForPropertyInStyle):
        * css/CSSPrimitiveValueMappings.h:
        * css/CSSProperties.json:
        * css/CSSValueKeywords.in:
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::parseSingleValue):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleWheelEventInAppropriateEnclosingBox):
        * page/FrameView.cpp:
        (WebCore::FrameView::updateScrollingCoordinatorScrollSnapProperties const):
        (WebCore::FrameView::performPostLayoutTasks):
        * page/FrameView.h:
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::processWheelEventForScrollSnap):
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::setStateScrollingNodeSnapOffsetsAsFloat):
        (WebCore::AsyncScrollingCoordinator::setScrollingNodeScrollableAreaGeometry):
        (WebCore::AsyncScrollingCoordinator::updateScrollSnapPropertiesWithFrameView):
        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ScrollSnapOffsetsInfo.cpp:
        * page/scrolling/ScrollSnapOffsetsInfo.h:
        * page/scrolling/ScrollingMomentumCalculator.cpp:
        * page/scrolling/ScrollingMomentumCalculator.h:
        * page/scrolling/ScrollingStateScrollingNode.cpp:
        (WebCore::ScrollingStateScrollingNode::ScrollingStateScrollingNode):
        (WebCore::ScrollingStateScrollingNode::applicableProperties const):
        (WebCore::ScrollingStateScrollingNode::setCurrentVerticalSnapPointIndex):
        (WebCore::ScrollingStateScrollingNode::dumpProperties const):
        * page/scrolling/ScrollingStateScrollingNode.h:
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::commitStateBeforeChildren):
        (WebCore::ScrollingTreeScrollingNode::dumpProperties const):
        (WebCore::ScrollingTreeScrollingNode::setCurrentVerticalSnapPointIndex):
        * page/scrolling/ScrollingTreeScrollingNode.h:
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeMac::handleWheelEvent):
        * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.h:
        * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.mm:
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::updateFromStateNode):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::handleWheelEvent):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::viewportSize const):
        * page/scrolling/nicosia/ScrollingTreeScrollingNodeDelegateNicosia.cpp:
        (WebCore::ScrollingTreeScrollingNodeDelegateNicosia::handleWheelEvent):
        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::ScrollAnimator):
        (WebCore::ScrollAnimator::~ScrollAnimator):
        (WebCore::ScrollAnimator::scroll):
        (WebCore::ScrollAnimator::resnapAfterLayout):
        (WebCore::ScrollAnimator::handleWheelEvent):
        (WebCore::ScrollAnimator::updateActiveScrollSnapIndexForOffset):
        (WebCore::ScrollAnimator::notifyPositionChanged):
        (WebCore::ScrollAnimator::pageScaleFactor const):
        (WebCore::ScrollAnimator::scrollControllerAnimationTimerFired):
        (WebCore::ScrollAnimator::adjustScrollOffsetForSnappingIfNeeded):
        * platform/ScrollAnimator.h:
        * platform/ScrollController.cpp:
        (WebCore::ScrollController::usesScrollSnap const):
        (WebCore::ScrollController::resnapAfterLayout):
        * platform/ScrollController.h:
        * platform/ScrollSnapAnimatorState.cpp:
        * platform/ScrollSnapAnimatorState.h:
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::doPostThumbMoveSnapping):
        * platform/ScrollableArea.h:
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::isScrollSnapInProgress const):
        (WebCore::ScrollAnimatorMac::didBeginScrollGesture const):
        (WebCore::ScrollAnimatorMac::didEndScrollGesture const):
        (WebCore::gestureShouldBeginSnap):
        (WebCore::ScrollAnimatorMac::allowsVerticalStretching const):
        (WebCore::ScrollAnimatorMac::allowsHorizontalStretching const):
        * platform/mac/ScrollController.mm:
        (WebCore::ScrollController::stopAllTimers):
        (WebCore::ScrollController::handleWheelEvent):
        (WebCore::ScrollController::isScrollSnapInProgress const):
        (WebCore::ScrollController::updateScrollSnapAnimatingState):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::willBeDestroyed):
        (WebCore::RenderBox::styleWillChange):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateScrollSnapPropertiesWithFrameView const):
        * rendering/RenderLayerCompositor.h:
        * rendering/RenderLayerModelObject.cpp:
        (WebCore::RenderLayerModelObject::styleDidChange):
        * rendering/RenderLayerScrollableArea.cpp:
        (WebCore::RenderLayerScrollableArea::updateScrollInfoAfterLayout):
        (WebCore::RenderLayerScrollableArea::isScrollSnapInProgress const):
        * rendering/RenderLayerScrollableArea.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::unregisterBoxWithScrollSnapPositions):
        * rendering/RenderView.h:
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::changeRequiresLayout const):
        (WebCore::RenderStyle::setScrollPaddingRight):
        (WebCore::RenderStyle::hasSnapPosition const):
        * rendering/style/RenderStyle.h:
        * rendering/style/RenderStyleConstants.cpp:
        (WebCore::operator<<):
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator== const):
        * rendering/style/StyleRareNonInheritedData.h:
        * rendering/style/StyleScrollSnapPoints.h:
        * style/StyleBuilderConverter.h:
        * testing/Internals.cpp:
        (WebCore::Internals::isScrollSnapInProgress):
        * testing/Internals.h:
        * testing/Internals.idl:

2021-06-24  Enrique Ocaña González  <eocanha@igalia.com>

        [GTK] media/muted-video-is-playing-audio.html is timing out
        https://bugs.webkit.org/show_bug.cgi?id=208321

        Reviewed by Xabier Rodriguez-Calvar.

        Added setPageMediaVolume() API to set the Page mediaVolume. This was 0
        by default and a way to set it to a non-zero value was needed in order
        to prevent a zero effectiveVolume in HTMLMediaElement.

        * testing/Internals.cpp:
        (WebCore::Internals::setPageMediaVolume): Set the Page mediaVolume.
        * testing/Internals.h: Added setPageMediaVolume().
        * testing/Internals.idl: Ditto.

2021-06-23  Jean-Yves Avenard  <jya@apple.com>

        Not all uses of AudioToolbox framework use soft linking
        https://bugs.webkit.org/show_bug.cgi?id=227250
        <rdar://problem/79606090>

        Reviewed by Eric Carlson.

        Unify AudioToolbox, CoreMedia, VideoToolbox and MediaToolbox's method
        definitions and their use, ensuring that they are always soft-linked.
        Unified builds and the inconsistent use of explicitly using the PAL namespace
        caused some calls to be ambiguous leading to compilation errors; some
        code would also use the softlinked methods while others called into the frameworks
        directly.
        To get around those we ensure that any calls to AudioToolbox or CoreMedia is always using
        the fully resolved PAL name.
        Remove unnecessary `using namespace PAL;` statements wherever applicable.
        No change in observable behavior.

        * Modules/mediastream/PeerConnectionBackend.cpp:
        * Modules/plugins/QuickTimePluginReplacement.mm:
        * Modules/webaudio/MediaStreamAudioSourceCocoa.cpp:
        (WebCore::MediaStreamAudioSource::consumeAudio):
        * dom/Document.cpp:
        * html/HTMLCanvasElement.cpp:
        * html/HTMLMediaElement.cpp:
        * platform/audio/AudioFileReader.h:
        * platform/audio/cocoa/AudioFileReaderCocoa.cpp:
        (WebCore::AudioFileReader::AudioFileReader):
        (WebCore::AudioFileReader::~AudioFileReader):
        (WebCore::AudioFileReader::createBus):
        (WebCore::createBusFromAudioFile): Deleted.
        * platform/audio/cocoa/AudioFileReaderCocoa.h:
        * platform/audio/cocoa/AudioOutputUnitAdaptor.cpp:
        (WebCore::AudioOutputUnitAdaptor::~AudioOutputUnitAdaptor):
        (WebCore::AudioOutputUnitAdaptor::start):
        (WebCore::AudioOutputUnitAdaptor::stop):
        * platform/audio/cocoa/AudioSampleBufferList.cpp:
        (WebCore::AudioSampleBufferList::copyFrom):
        * platform/audio/cocoa/AudioSampleDataSource.mm:
        * platform/audio/cocoa/WebAudioBufferList.cpp:
        (WebCore::WebAudioBufferList::WebAudioBufferList):
        * platform/audio/gstreamer/AudioFileReaderGStreamer.cpp:
        (WebCore::AudioFileReader::decodeAudioForBusCreation):
        (WebCore::createBusFromAudioFile): Deleted.
        * platform/audio/ios/AudioOutputUnitAdaptorIOS.cpp:
        (WebCore::AudioOutputUnitAdaptor::configure):
        * platform/audio/mac/AudioOutputUnitAdaptorMac.cpp:
        (WebCore::AudioOutputUnitAdaptor::configure):
        * platform/cocoa/MediaUtilities.cpp:
        (WebCore::createAudioFormatDescription):
        (WebCore::createAudioSampleBuffer):
        * platform/graphics/RemoteVideoSample.cpp:
        (WebCore::RemoteVideoSample::create):
        * platform/graphics/avfoundation/AudioSourceProviderAVFObjC.mm:
        (WebCore::AudioSourceProviderAVFObjC::create):
        (WebCore::AudioSourceProviderAVFObjC::provideInput):
        (WebCore::AudioSourceProviderAVFObjC::createMixIfNeeded):
        (WebCore::AudioSourceProviderAVFObjC::finalizeCallback):
        (WebCore::AudioSourceProviderAVFObjC::prepareCallback):
        (WebCore::AudioSourceProviderAVFObjC::unprepareCallback):
        (WebCore::AudioSourceProviderAVFObjC::processCallback):
        (WebCore::AudioSourceProviderAVFObjC::prepare):
        (WebCore::AudioSourceProviderAVFObjC::process):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createImageGenerator):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::getStartDate const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::currentMediaTime const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::seekToTime):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformBufferedTimeRanges const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformMinTimeSeekable const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformMaxTimeSeekable const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformMaxTimeLoaded const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createImageForTimeInRect):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::isAvailable):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::metadataGroupDidArrive):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::metadataDidArrive):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::performTaskAtMediaTime):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::EffectiveRateChangedListener::stop):
        (WebCore::EffectiveRateChangedListener::EffectiveRateChangedListener):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::MediaPlayerPrivateMediaSourceAVFObjC):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::isAvailable):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::currentMediaTime const):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setCurrentTimeDidChangeCallback):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::seekInternal):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::updateLastPixelBuffer):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::destroyLayer):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::streamSession):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::performTaskAtMediaTime):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::isAvailable):
        (WebCore::videoTransformationMatrix):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateCurrentFrameImage):
        * platform/graphics/avfoundation/objc/MediaSampleAVFObjC.mm:
        (WTF::CFTypeTrait<CMSampleBufferRef>::typeID):
        (WebCore::MediaSampleAVFObjC::createImageSample):
        (WebCore::MediaSampleAVFObjC::presentationTime const):
        (WebCore::MediaSampleAVFObjC::decodeTime const):
        (WebCore::MediaSampleAVFObjC::duration const):
        (WebCore::MediaSampleAVFObjC::sizeInBytes const):
        (WebCore::MediaSampleAVFObjC::videoPixelFormat const):
        (WebCore::isCMSampleBufferAttachmentRandomAccess):
        (WebCore::doesCMSampleBufferHaveSyncInfo):
        (WebCore::isCMSampleBufferRandomAccess):
        (WebCore::isCMSampleBufferAttachmentNonDisplaying):
        (WebCore::isCMSampleBufferNonDisplaying):
        (WebCore::MediaSampleAVFObjC::presentationSize const):
        (WebCore::MediaSampleAVFObjC::offsetTimestampsBy):
        (WebCore::MediaSampleAVFObjC::setTimestamps):
        (WebCore::MediaSampleAVFObjC::isDivisable const):
        (WebCore::MediaSampleAVFObjC::divide):
        (WebCore::MediaSampleAVFObjC::createNonDisplayingCopy const):
        (WebCore::MediaSampleAVFObjC::getRGBAImageData const):
        (WebCore::setSampleBufferAsDisplayImmediately):
        (WebCore::MediaSampleAVFObjC::isHomogeneous const):
        (WebCore::MediaSampleAVFObjC::divideIntoHomogeneousSamples):
        (WebCore::MediaSampleAVFObjC::cloneSampleBufferAndSetAsDisplayImmediately):
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::bufferWasConsumedCallback):
        (WebCore::SourceBufferPrivateAVFObjC::SourceBufferPrivateAVFObjC):
        (WebCore::SourceBufferPrivateAVFObjC::~SourceBufferPrivateAVFObjC):
        (WebCore::SourceBufferPrivateAVFObjC::rendererWasAutomaticallyFlushed):
        (WebCore::SourceBufferPrivateAVFObjC::enqueueSample):
        (WebCore::SourceBufferPrivateAVFObjC::canSetMinimumUpcomingPresentationTime const):
        (WebCore::SourceBufferPrivateAVFObjC::setMinimumUpcomingPresentationTime):
        * platform/graphics/cocoa/SourceBufferParserWebM.cpp:
        (WebCore::SourceBufferParserWebM::OnFrame):
        (WebCore::SourceBufferParserWebM::VideoTrackData::consumeFrameData):
        (WebCore::SourceBufferParserWebM::VideoTrackData::createSampleBuffer):
        (WebCore::SourceBufferParserWebM::AudioTrackData::consumeFrameData):
        (WebCore::SourceBufferParserWebM::AudioTrackData::createSampleBuffer):
        * platform/graphics/cocoa/VP9UtilitiesCocoa.mm:
        (WebCore::convertToCMColorPrimaries):
        (WebCore::convertToCMTransferFunction):
        (WebCore::convertToCMYCbCRMatrix):
        (WebCore::createFormatDescriptionFromVPCodecConfigurationRecord):
        * platform/graphics/cocoa/WebCoreDecompressionSession.mm:
        (WTF::CFTypeTrait<CMSampleBufferRef>::typeID):
        (WebCore::WebCoreDecompressionSession::setTimebase):
        (WebCore::WebCoreDecompressionSession::enqueueSample):
        (WebCore::WebCoreDecompressionSession::shouldDecodeSample):
        (WebCore::WebCoreDecompressionSession::ensureDecompressionSessionForSample):
        (WebCore::WebCoreDecompressionSession::decodeSample):
        (WebCore::WebCoreDecompressionSession::handleDecompressionOutput):
        (WebCore::WebCoreDecompressionSession::getFirstVideoFrame):
        (WebCore::WebCoreDecompressionSession::automaticDequeue):
        (WebCore::WebCoreDecompressionSession::enqueueDecodedSample):
        (WebCore::WebCoreDecompressionSession::isReadyForMoreMediaData const):
        (WebCore::WebCoreDecompressionSession::notifyWhenHasAvailableVideoFrame):
        (WebCore::WebCoreDecompressionSession::imageForTime):
        (WebCore::WebCoreDecompressionSession::flush):
        (WebCore::WebCoreDecompressionSession::getDecodeTime):
        (WebCore::WebCoreDecompressionSession::getPresentationTime):
        (WebCore::WebCoreDecompressionSession::getDuration):
        (WebCore::WebCoreDecompressionSession::compareBuffers):
        (WebCore::WebCoreDecompressionSession::updateQosWithDecodeTimeStatistics):
        * platform/graphics/cv/ImageTransferSessionVT.mm:
        (WebCore::ImageTransferSessionVT::createPixelBuffer):
        (WebCore::ImageTransferSessionVT::convertCMSampleBuffer):
        (WebCore::ImageTransferSessionVT::createCMSampleBuffer):
        * platform/ios/PlaybackSessionInterfaceAVKit.mm:
        (WebCore::PlaybackSessionInterfaceAVKit::seekableRangesChanged):
        * platform/mac/VideoFullscreenInterfaceMac.mm:
        * platform/mediarecorder/MediaRecorderPrivateAVFImpl.cpp:
        (WebCore::MediaRecorderPrivateAVFImpl::videoSampleAvailable):
        * platform/mediarecorder/cocoa/AudioSampleBufferCompressor.mm:
        (WebCore::AudioSampleBufferCompressor::~AudioSampleBufferCompressor):
        (WebCore::AudioSampleBufferCompressor::initialize):
        (WebCore::AudioSampleBufferCompressor::finish):
        (WebCore::AudioSampleBufferCompressor::initAudioConverterForSourceFormatDescription):
        (WebCore::AudioSampleBufferCompressor::attachPrimingTrimsIfNeeded):
        (WebCore::AudioSampleBufferCompressor::gradualDecoderRefreshCount):
        (WebCore::AudioSampleBufferCompressor::sampleBufferWithNumPackets):
        (WebCore::AudioSampleBufferCompressor::provideSourceDataNumOutputPackets):
        (WebCore::AudioSampleBufferCompressor::processSampleBuffersUntilLowWaterTime):
        (WebCore::AudioSampleBufferCompressor::processSampleBuffer):
        (WebCore::AudioSampleBufferCompressor::getOutputSampleBuffer):
        (WebCore::AudioSampleBufferCompressor::takeOutputSampleBuffer):
        * platform/mediarecorder/cocoa/MediaRecorderPrivateWriterCocoa.h:
        * platform/mediarecorder/cocoa/MediaRecorderPrivateWriterCocoa.mm:
        (WebCore::MediaRecorderPrivateWriter::MediaRecorderPrivateWriter):
        (WebCore::MediaRecorderPrivateWriter::processNewCompressedVideoSampleBuffers):
        (WebCore::MediaRecorderPrivateWriter::processNewCompressedAudioSampleBuffers):
        (WebCore::MediaRecorderPrivateWriter::startAssetWriter):
        (WebCore::MediaRecorderPrivateWriter::appendCompressedVideoSampleBuffer):
        (WebCore::appendEndsPreviousSampleDurationMarker):
        (WebCore::copySampleBufferWithCurrentTimeStamp):
        (WebCore::MediaRecorderPrivateWriter::appendVideoSampleBuffer):
        (WebCore::MediaRecorderPrivateWriter::appendAudioSampleBuffer):
        (WebCore::MediaRecorderPrivateWriter::completeFetchData):
        (WebCore::MediaRecorderPrivateWriter::pause):
        (WebCore::MediaRecorderPrivateWriter::resume):
        * platform/mediarecorder/cocoa/VideoSampleBufferCompressor.mm:
        (WebCore::VideoSampleBufferCompressor::~VideoSampleBufferCompressor):
        (WebCore::VideoSampleBufferCompressor::initialize):
        (WebCore::VideoSampleBufferCompressor::finish):
        (WebCore::VideoSampleBufferCompressor::videoCompressionCallback):
        (WebCore::VideoSampleBufferCompressor::vtProfileLevel const):
        (WebCore::VideoSampleBufferCompressor::initCompressionSession):
        (WebCore::VideoSampleBufferCompressor::processSampleBuffer):
        (WebCore::VideoSampleBufferCompressor::getOutputSampleBuffer):
        (WebCore::VideoSampleBufferCompressor::takeOutputSampleBuffer):
        * platform/mediastream/cocoa/AudioMediaStreamTrackRendererInternalUnit.cpp:
        (WebCore::LocalAudioMediaStreamTrackRendererInternalUnit::start):
        (WebCore::LocalAudioMediaStreamTrackRendererInternalUnit::stop):
        (WebCore::LocalAudioMediaStreamTrackRendererInternalUnit::createAudioUnitIfNeeded):
        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::setSessionSizeAndFrameRate):
        (WebCore::AVVideoCaptureSource::frameDurationForFrameRate):
        (WebCore::AVVideoCaptureSource::generatePresets):
        * platform/mediastream/mac/CoreAudioCaptureDevice.cpp:
        (WebCore::CoreAudioCaptureDevice::deviceClock):
        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
        (WebCore::CoreAudioSharedUnit::setupAudioUnit):
        (WebCore::CoreAudioSharedUnit::configureMicrophoneProc):
        (WebCore::CoreAudioSharedUnit::configureSpeakerProc):
        (WebCore::CoreAudioSharedUnit::cleanupAudioUnit):
        (WebCore::CoreAudioSharedUnit::reconfigureAudioUnit):
        (WebCore::CoreAudioSharedUnit::startInternal):
        (WebCore::CoreAudioSharedUnit::stopInternal):
        (WebCore::CoreAudioSharedUnit::defaultInputDevice):
        * platform/mediastream/mac/DisplayCaptureSourceCocoa.cpp:
        * platform/mediastream/mac/MockAudioSharedUnit.mm:
        (WebCore::MockAudioSharedUnit::reconfigure):
        (WebCore::MockAudioSharedUnit::emitSampleBuffers):
        * platform/mediastream/mac/MockRealtimeVideoSourceMac.mm:
        * platform/mediastream/mac/RealtimeIncomingAudioSourceCocoa.cpp:
        (WebCore::RealtimeIncomingAudioSourceCocoa::OnData):
        * platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.mm:
        (WebCore::RealtimeIncomingVideoSourceCocoa::OnFrame):
        * platform/mediastream/mac/RealtimeOutgoingVideoSourceCocoa.cpp:
        (WebCore::RealtimeOutgoingVideoSourceCocoa::videoSampleAvailable):
        * platform/mediastream/mac/WindowDisplayCapturerMac.mm:

2021-06-23  Jean-Yves Avenard  <jya@apple.com>

        Remove #include <wtf/Optional.h>
        https://bugs.webkit.org/show_bug.cgi?id=227335

        Reviewed by Darin Adler.

        * Modules/mediasession/MediaSessionCoordinatorPrivate.h:

2021-06-23  Peng Liu  <peng.liu6@apple.com>

        [iPadOS] A video cannot enter picture-in-picture when Safari is suspended
        https://bugs.webkit.org/show_bug.cgi?id=227325

        Reviewed by Eric Carlson.

        When an element goes into the element fullscreen mode, a descendant video element
        gains the ability to automatically enter picture-in-picture on application suspend.
        However, the video element may lose the ability after some stress tests.

        The root cause is related to `m_restoringFullscreenForPictureInPictureStop`.
        Under stress tests, `-[AVPlayerViewController enterFullScreenAnimated:completionHandler]`
        may call the completion handler with `success == NO`. The current implementation
        will keep `m_restoringFullscreenForPictureInPictureStop` with a wrong value,
        so that the video cannot enter picture-in-picture automatically when the browser
        is suspended.

        This patch removes `m_restoringFullscreenForPictureInPictureStop` since it is not needed
        after r269557.

        Manually tested.

        * platform/ios/VideoFullscreenInterfaceAVKit.h:
        * platform/ios/VideoFullscreenInterfaceAVKit.mm:
        (VideoFullscreenInterfaceAVKit::willStopPictureInPicture):
        (VideoFullscreenInterfaceAVKit::didStopPictureInPicture):
        (VideoFullscreenInterfaceAVKit::prepareForPictureInPictureStopWithCompletionHandler):
        (VideoFullscreenInterfaceAVKit::doEnterFullscreen):
        (VideoFullscreenInterfaceAVKit::enterFullscreenHandler):

2021-06-23  Alex Christensen  <achristensen@webkit.org>

        Fix some PerformanceNavigationTiming bugs
        https://bugs.webkit.org/show_bug.cgi?id=227329

        Reviewed by Chris Dumez.

        Test: imported/w3c/web-platform-tests/navigation-timing/buffered-flag.window.html

        This fixes two bugs:
        1. We need to delay the PerformanceObserver event until didFinishNavigation time, which is after iframes have also finished loading.
        2. We need to remember whether we've added the PerformanceNavigationTiming to a PerformanceObserver's list to avoid duplicate entries.

        This fixes two WPT tests that were passed by Chrome and Firefox.
        PerformanceNavigationTiming is still an off-by-default experimental feature, so this won't affect anything yet.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame):
        * page/Performance.cpp:
        (WebCore::Performance::appendBufferedEntriesByType const):
        (WebCore::Performance::registerPerformanceObserver):
        (WebCore::Performance::scheduleNavigationObservationTaskIfNeeded):
        * page/Performance.h:
        * page/PerformanceObserver.cpp:
        (WebCore::PerformanceObserver::observe):
        * page/PerformanceObserver.h:
        (WebCore::PerformanceObserver::hasNavigationTiming const):
        (WebCore::PerformanceObserver::addedNavigationTiming):

2021-06-23  Truitt Savell  <tsavell@apple.com>

        Fix iOS Debug testing be removing the assert added in r279119
        https://bugs.webkit.org/show_bug.cgi?id=227227

        Reviewed by Eric Carlson.

        * platform/audio/ios/AudioSessionIOS.mm:
        (WebCore::setEligibleForSmartRouting):

2021-06-23  Jer Noble  <jer.noble@apple.com>

        [Cocoa] Make the hostTime parameter to playSession a Monotonic time
        https://bugs.webkit.org/show_bug.cgi?id=226515

        Reviewed by Youenn Fablet.

        Fire the playSession action handler at approximately the hostTime indicated by the MediaSessionCoordinatorPrivate.

        * Modules/mediasession/MediaSessionCoordinator.cpp:
        (WebCore::MediaSessionCoordinator::playSession):
        * Modules/mediasession/MediaSessionCoordinator.h:
        * Modules/mediasession/MediaSessionCoordinatorPrivate.h:
        (WebCore::MediaSessionCoordinatorClient::playSession):

2021-06-23  Mark Lam  <mark.lam@apple.com>

        Remove unneeded explicit exception checks in ScriptModuleLoader::evaluate().
        https://bugs.webkit.org/show_bug.cgi?id=227302

        Reviewed by Yusuke Suzuki.

        A RELEASE_AND_RETURN will do because we're just propagating the exception to the
        client in both cases.

        * bindings/js/ScriptModuleLoader.cpp:
        (WebCore::ScriptModuleLoader::evaluate):

2021-06-23  Kimmo Kinnunen  <kkinnunen@apple.com>

        rAF driven WebGL submits excessive amount of GPU work when frames are slow
        https://bugs.webkit.org/show_bug.cgi?id=227059
        <rdar://problem/79385858>

        Reviewed by Kenneth Russell.

        Limit in-flight WebGL frames to three frames. Do not continue preparation for display
        until the commands for the oldest frame have been executed by the GPU.

        This limits the impact slow frames have, especially in the
        case where the compositor skip frames and WebKit would issue a new slow frame
        on top of the skipped frame.

        No new tests, tested manually with the pages referenced from the bugs.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/angle/GraphicsContextGLANGLE.cpp:
        (WebCore::GraphicsContextGLOpenGL::waitAndUpdateOldestFrame):
        * platform/graphics/angle/GraphicsContextGLANGLEUtilities.h:
        (WebCore::ScopedGLFence::ScopedGLFence):
        (WebCore::ScopedGLFence::operator=):
        (WebCore::ScopedGLFence::~ScopedGLFence):
        (WebCore::ScopedGLFence::reset):
        (WebCore::ScopedGLFence::abandon):
        (WebCore::ScopedGLFence::fenceSync):
        (WebCore::ScopedGLFence::operator GLsync const):
        * platform/graphics/cocoa/GraphicsContextGLOpenGLCocoa.mm:
        (WebCore::GraphicsContextGLOpenGL::GraphicsContextGLOpenGL):
        (WebCore::GraphicsContextGLOpenGL::~GraphicsContextGLOpenGL):
        (WebCore::GraphicsContextGLOpenGL::prepareForDisplay):
        * platform/graphics/opengl/GraphicsContextGLOpenGL.h:

2021-06-23  Andres Gonzalez  <andresg_22@apple.com>

        Accessibility support for image text recognition.
        https://bugs.webkit.org/show_bug.cgi?id=224280
        rdar://76348740

        Reviewed by Chris Fleizach.

        Test: accessibility/ios-simulator/image-overlay-elements.html

        Exposes to accessibility clients the elements created by
        WebPage::requestTextRecognition for static images. This allows clients
        to present the recognized text in images to assistive technology users.
        - Added a new AXObject subclass, AXImage, to encapsulate this functionality.
        This class can be expanded to offload some of the image specific code
        contained in AccessibilityRenderObject, AccessibilityNodeObject,
        AccessibilityObject and others.
        - Since requestTextRecognition is an async call, added an AXNotification
        to notify clients when the image overlay elements are available for
        consumption.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * accessibility/AXImage.cpp: Added.
        (WebCore::AXImage::AXImage):
        (WebCore::AXImage::create):
        (WebCore::AXImage::roleValue const):
        (WebCore::AXImage::imageOverlayElements):
        * accessibility/AXImage.h: Added.
        * accessibility/AXLogger.cpp:
        (WebCore::operator<<):
        * accessibility/AXObjectCache.cpp:
        (WebCore::isSimpleImage): Determines whether a given element is a static
        image.
        (WebCore::createFromRenderer): Instantiate an AXImage object when
        appropriate.
        * accessibility/AXObjectCache.h:
        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::canHaveChildren const): Images can
        have children.
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityObjectInterface.h:
        * accessibility/ios/AXObjectCacheIOS.mm:
        (WebCore::AXObjectCache::notificationPlatformName):
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilityElements]):
        (-[WebAccessibilityObjectWrapper accessibilityImageOverlayElements]):
        * accessibility/isolatedtree/AXIsolatedObject.cpp:
        (WebCore::AXIsolatedObject::isAXImageInstance const):
        * accessibility/isolatedtree/AXIsolatedObject.h:
        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::postPlatformNotification):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper ALLOW_DEPRECATED_IMPLEMENTATIONS_END]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):

2021-06-18  Mark Lam  <mark.lam@apple.com>

        Add missing exception checks in ScriptModuleLoader and JSDOMPromiseDeferred.
        https://bugs.webkit.org/show_bug.cgi?id=221374
        rdar://problem/68911404

        Reviewed by Yusuke Suzuki.

        Based on patch by Frédéric Wang <fwang@igalia.com>.

        When an import call fails, ScriptModuleLoader::notifyFinished() rejects the
        deferred promise with either a call to
        DeferredPromise::reject(ExceptionCode, const String&, RejectAsHandled) or a call to
        rejectToPropagateNetworkError() / DeferredPromise::rejectWithCallback().  When it
        succeeds, it calls DeferredPromise::resolveWithPromise(). These correspond to three
        places where we enter the VM. Catch scopes are thus added to handle uncaught
        exceptions for DeferredPromise.

        Currently, this logic for uncaught exceptions is already duplicated at several
        places in the code, and is likely needed for other places too in follow-up work.
        This patch however covers all the rejection and resolution calls from
        ScriptModuleLoader.  Additionally, it handles missing exception checks in
        ScriptModuleLoader::evaluate.

        Test: js/dom/modules/missing-exception-check-for-import.html

        * bindings/js/JSDOMPromiseDeferred.cpp:
        (WebCore::DeferredPromise::reject):
        (WebCore::DeferredPromise::handleTerminationExceptionIfNeeded):
        (WebCore::DeferredPromise::handleUncaughtException):
        * bindings/js/JSDOMPromiseDeferred.h:
        (WebCore::DeferredPromise::resolveWithCallback):
        (WebCore::DeferredPromise::rejectWithCallback):
        * bindings/js/ScriptModuleLoader.cpp:
        (WebCore::ScriptModuleLoader::evaluate):

2021-06-21  Darin Adler  <darin@apple.com>

        Improve more of the CSS list style implementations
        https://bugs.webkit.org/show_bug.cgi?id=227206

        Reviewed by Antti Koivisto.

        Added support for 12 new values for list-style-type: disclosure-closed,
        disclosure-open, ethiopic-numeric, japanese-formal, japanese-informal,
        korean-hangul-formal, korean-hanja-formal, korean-hanja-informal,
        simp-chinese-formal, simp-chinese-informal, trad-chinese-informal,
        and trad-chinese-formal.

        Improved implementation to match specification more closely for a few
        existing values for list-style-type: armenian, cjk-ideographic, hebrew,
        lower-armenian, lower-roman, upper-armenian, and upper-roman.

        Fixed a rendering issue where we would position list items incorrectly
        in list-style-position:inside cases because of measuring the list marker
        widths and the list marker suffix widths separately and adding them
        instead of measuring them together. This was causing some of the
        Web Platform Tests, done using ref tests, to fail.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::listMarkerTextForNode): Updated since
        RenderListItem::markerTextWithSuffix now returns a StringView.
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::stringValue const): Updated
        to call RenderListMarker::textWithoutSuffix.
        * accessibility/atk/WebKitAccessibleHyperlink.cpp:
        (rangeLengthForObject): Ditto.
        * accessibility/atk/WebKitAccessibleInterfaceText.cpp:
        (accessibilityObjectLength): Ditto.
        (webkitAccessibleTextGetText): Updated since
        RenderListItem::markerTextWithSuffix now returns a StringView.

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::toCSSValueID): Factored this out into a separate helper.
        Also made it take advantage of the relationship between the enumeration
        and the CSS value keywords that the code in the other direction already
        was relying on so we don't have to list all the keywords.
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue): Refactored to call the
        toCSSValueID function.

        * css/CSSValueKeywords.in: Added 12 new list-type-style constants:
        disclosure-open, disclosure-closed, japanese-informal, japanese-formal,
        korean-hangul-formal, korean-hanja-informal, korean-hanja-formal,
        simp-chinese-informal, simp-chinese-formal, trad-chinese-informal,
        trad-chinese-formal, and ethiopic-numeric.

        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::isPredefinedCounterStyle): Updated
        since the last predefined counter style is EthiopicNumeric.

        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::markerTextWithoutSuffix const): Renamed from
        markerText, and changed to return a StringView.
        (WebCore::RenderListItem::markerTextWithSuffix const): Return a StringView.
        * rendering/RenderListItem.h: Updated for the above.

        * rendering/RenderListMarker.cpp:
        (WebCore::toRoman): Deleted.
        (WebCore::toAlphabeticOrNumeric): Tweaked to use compile time instead of
        runtime checks for alphabetic vs. numeric.
        (WebCore::toSymbolic): Updated for above.
        (WebCore::toAlphabetic): Ditto.
        (WebCore::toNumeric): Ditto.
        (WebCore::toHebrewUnder1000): Deleted.
        (WebCore::toHebrew): Deleted.
        (WebCore::toArmenianUnder10000): Deleted.
        (WebCore::toArmenian): Deleted.
        (WebCore::toGeorgian): Deleted.
        (WebCore::toCJKIdeographic): Added handling for negative numbers and also
        tweaked coding style a bit.
        (WebCore::toPredefinedAdditiveSystem): Added. Implements the additive
        system concept, which we use below to re-implement Hebrew, Armenian,
        Georgian, Japanese, and Korean styles.
        (WebCore::toEthiopicNumeric): Added.
        (WebCore::effectiveListMarkerType): Added the new styles. Also updated the
        allowable values for CJKIdeographic to allow negative numbers, and for Hebrew
        to no longer allow 0 or numbers over 10999. Also sorted the sections by the
        name of the first list style type in each section.
        (WebCore::listMarkerSuffix): Changed to return a StringView instead of a
        UChar, and include the trailing space. Choose the suffix based on the
        specified type and not the effective type, so fallback does not cause the
        suffix to fall back. Added the new types.
        (WebCore::suffixRequiresSpace): Deleted.
        (WebCore::listMarkerText): Added implementations for all the new types.
        Also updated the implementation of CJKIdeographic, LowerRoman, UpperRoman,
        Armenian, UpperArmenian, LowerArmenian, Georgian, and Hebrew to match a
        newer CSS specification draft, and in most cases was able to use
        toPredefinedAdditiveSystem instead of language-specific functions.
        (WebCore::RenderListMarker::createInlineBox): Stop using the isText function,
        which was only used here.
        (WebCore::RenderListMarker::paint): Updated for the name change of
        relativeMarkerRect. Removed unneeded special case for ListStyleType::None.
        Use the new RenderListMarker::textRun function, moving all the code that
        deals with direction and suffix in there.
        (WebCore::reversed): Added. Helper used by textRun.
        (WebCore::RenderListMarker::textRun const): Added. Composes a TextRun for
        drawing or measuring text. By using the same function in all those places,
        we guarantee we measure the text together instead of in pieces, which fixes
        some layout errors leading to test failures that measuring separately and
        adding the results together was causing.
        (WebCore::RenderListMarker::addOverflowFromListMarker): Use the data
        member m_lineOffsetForListItem instead of the lineOffsetForListItem
        function, which was only used here.
        (WebCore::RenderListMarker::updateMarginsAndContent): Moved the check of
        preferredLogicalWidthsDirty and the comment about it here.
        (WebCore::RenderListMarker::updateContent): Moved check of
        preferredLogicalWidthsDirty out of this function since one caller asserts
        it, and so the other caller can do the check itself. Added code to set
        m_textWithSuffix, m_textWithoutSuffixLength, and m_textIsLeftToRightDirection.
        Removed unneeded special cases for ListStyleType::None, Circle, Disc, and
        Square, which are all handled correctly by the main algorithm. Added a FIXME
        about the inadequacy of our bidi algorithm implementation for the general case.
        (WebCore::RenderListMarker::computePreferredLogicalWidths): Use the new
        textRun function, allowing us to remove some special case code, including
        the special cases for ListStyleType::None, Asterisks, Footnotes, and String.
        (WebCore::RenderListMarker::updateMargins): Removed unneeded special case for
        ListStyleType::None, and updated string empty checks for the new name of the
        m_textWithSuffix data member.
        (WebCore::RenderListMarker::suffix const): Deleted.
        (WebCore::RenderListMarker::relativeMarkerRect): Renamed from
        getRelativeMarkerRect. Use the new textRun function, allowing us to remove
        some special case code, including the special cases for ListTyleType::None,
        Asterisks, Footnotes, and String.
        (WebCore::RenderListMarker::textWithoutSuffix const): Added.

        * rendering/RenderListMarker.h: Marked functions as final instead of just
        override. Got rid of unneeded suffix and lineOffsetForListItem functions.
        Renamed text ot textWithoutSuffix and added textWithSuffix. Added textRun
        private member function. Replaced m_text with m_textWithSuffix,
        m_textWithoutSuffixLength, and m_textIsLeftToRightDirection.

        * rendering/RenderTreeAsText.cpp:
        (WebCore::RenderTreeAsText::writeRenderObject): Use textWithoutSuffix.
        (WebCore::markerTextForListItem): Use markerTextWithoutSuffix.

        * rendering/style/RenderStyleConstants.cpp:
        (WebCore::operator<<): Use getValueName from CSSValueKeywords.h and
        toCSSValueID to avoid repeating the names of all the list style types here.

        * rendering/style/RenderStyleConstants.h: Added the 12 new list style types.

2021-06-22  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Live Text] [macOS] Add an internal option to disable inline text selection in images
        https://bugs.webkit.org/show_bug.cgi?id=227265
        rdar://79460142

        Reviewed by Tim Horton.

        Add support for the new feature flag. See WebKit/ChangeLog for more details.

        * en.lproj/Localizable.strings:

        Add additional localizable strings to represent each of the possible titles for the "Quick Look"/"Look Up"
        context menu item. When inline text selection is enabled, the item shows up as "Look Up", and is only added if
        we actually discover visual search results.

        However, when inline text selection is disabled, this item will always be added to the context menu under the
        title "Quick Look", and will be retitled to either "Look Up in Quick Look" or "Select Text in Quick Look" once
        either visual search results or text is recognized, respectively.

        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected):
        (WebCore::ContextMenuController::populate):

        In the case where inline text selection is disabled, add the Quick Look item to the end of the context menu,
        after a separator. Note that in the case where inline text selection is enabled, it doesn't actually matter
        where we add this item, since it is automatically removed and only reinserted if we find visual search results
        for the image.

        (WebCore::ContextMenuController::checkOrEnableIfNeeded const):

        Rename the existing ContextMenuItemTagLookUpImage to ContextMenuItemTagQuickLookImage, since it is no longer
        limited to the visual look up feature.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::updateMouseEventTargetNode):

        Consult the feature flag and avoid kicking off the text recognition timer if inline text selection is disabled.

        * platform/ContextMenuItem.cpp:
        (WebCore::isValidContextMenuAction):
        * platform/ContextMenuItem.h:
        * platform/LocalizedStrings.h:
        * platform/cocoa/LocalizedStringsCocoa.mm:
        (WebCore::contextMenuItemTagQuickLookImage):
        (WebCore::contextMenuItemTagQuickLookImageForTextSelection):
        (WebCore::contextMenuItemTagQuickLookImageForVisualSearch):

2021-06-22  Devin Rousso  <drousso@apple.com>

        REGRESSION: [iOS] ASSERTION FAILED: pixelBuffer->data().length() >= 4 under WebCore::sampleColor
        https://bugs.webkit.org/show_bug.cgi?id=227256
        <rdar://problem/79584286>

        Unreviewed, speculative internal test fix.

        * page/PageColorSampler.cpp:
        (WebCore::sampleColor):
        It seems like sometimes the `PixelBuffer` can have a `length()` of `0`. Instead of only
        having an `ASSERT` that there are enough items, actually early-return.

2021-06-22  Eric Carlson  <eric.carlson@apple.com>

        [Cocoa] AVPlayer periodic time observer callback should use weakPtr
        https://bugs.webkit.org/show_bug.cgi?id=227264
        rdar://79269047

        Reviewed by Jer Noble.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayer):

2021-06-22  Alan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] ASSERTION FAILED: m_renderer in FloatingObject::renderer()
        https://bugs.webkit.org/show_bug.cgi?id=227260
        <rdar://77329323>

        Reviewed by Antti Koivisto.

        This is a very similar to webkit.org/b/224996, where moving subtrees around fails to invalidate floating object sets in sibling blocks.
        (see the Changelog entry for more details on how sibling invalidation works).
        In this case the anonymous parent block is destroyed as it is no longer needed (and we move all its descendants out first). However this
        block has an intruding float and this float is also registered in the sibling blocks. 

        Test: fast/block/float-assert-when-anon-parent-is-destroyed.html

        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::moveChildren):
        (WebCore::RenderTreeBuilder::removeFloatingObjects):
        * rendering/updating/RenderTreeBuilder.h:
        * rendering/updating/RenderTreeBuilderBlock.cpp:
        (WebCore::RenderTreeBuilder::Block::removeLeftoverAnonymousBlock):

2021-06-22  Jer Noble  <jer.noble@apple.com>

        Unreviewed tvOS build fix after r279119: add PLATFORM(IOS) guards to exclude tvOS and Catalyst builds.

        * platform/audio/ios/AudioSessionIOS.mm:
        (WebCore::setEligibleForSmartRouting):

2021-06-22  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (Safari 14): Submenus on https://codelearn.cat don't show
        https://bugs.webkit.org/show_bug.cgi?id=225467
        <rdar://problem/77612276>

        Reviewed by Alan Bujtas.
        
        RenderBox::requiresLayerWithScrollableArea() is called via RenderLayer::styleChanged()
        which is before layout, yet requiresLayerWithScrollableArea() was consulting layout-dependent
        state under hasHorizontalOverflow() || hasVerticalOverflow(). This resulted in composited
        scrolling layers sticking around after overflow style changed from `scroll` to `visible`.

        Fix by just removing the "has overflow" checks; we make RenderLayerScrollableArea
        for any non-visible overflow anyway. scrollsOverflow() checks hasOverflowClip(),
        so all we need is a hasOverflowClip() check.

        Remove some redundant comments and add a FIXME about layers which get RenderLayerScrollableAreas
        but don't need them.

        Test: compositing/overflow/overflow-scroll-to-visible.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::requiresLayerWithScrollableArea const):

2021-06-22  Chris Dumez  <cdumez@apple.com>

        CSSStyleDeclaration.getPropertyPriority() should return the empty string for invalid CSS properties
        https://bugs.webkit.org/show_bug.cgi?id=227257

        Reviewed by Geoffrey Garen.

        CSSStyleDeclaration.getPropertyPriority() should return the empty string for invalid CSS properties,
        not null. Corresponding specification:
        - https://drafts.csswg.org/cssom/#dom-cssstyledeclaration-getpropertyvalue

        Gecko and Blink match the specification here so changing our behavior improves compatibility.

        Also use CSSOMString instead of DOMString in the CSSStyleDeclaration IDL to match the specification,
        since I was modifying the IDL.

        Test: fast/css/CSSStyleDeclaration-getPropertyPriority-invalid-property.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyPriority):
        * css/CSSStyleDeclaration.idl:
        * css/PropertySetCSSStyleDeclaration.cpp:
        (WebCore::PropertySetCSSStyleDeclaration::getPropertyPriority):

2021-06-22  Jean-Yves Avenard  <jya@apple.com>

        Remove unused method in AudioFileReader
        https://bugs.webkit.org/show_bug.cgi?id=227208

        Reviewed by Chris Dumez.

        Remove two unused methods in AudioFileReader and their related constructors.

        * platform/audio/AudioFileReader.h:
        * platform/audio/cocoa/AudioFileReaderCocoa.cpp:
        * platform/audio/cocoa/AudioFileReaderCocoa.h:
        * platform/audio/gstreamer/AudioFileReaderGStreamer.cpp:
        (WebCore::AudioFileReader::decodeAudioForBusCreation):

2021-06-22  Jer Noble  <jer.noble@apple.com>

        [Cocoa] iOS device steals BT headphones from other devices during silent playback
        https://bugs.webkit.org/show_bug.cgi?id=227227
        <rdar://78792479>

        Reviewed by Eric Carlson.

        Explicitly disable smart routing when WebKit itself does not explicitly activate its AVAudioSession.
        The audio session will be implicitly activated even for audio-less or silent media playback, and
        this will prevent headsets from being "stolen" when that session is implicitly activated.

        * platform/audio/ios/AudioSessionIOS.h:
        * platform/audio/ios/AudioSessionIOS.mm:
        (WebCore::setEligibleForSmartRouting):
        (WebCore::AudioSessionIOS::AudioSessionIOS):
        (WebCore::AudioSessionIOS::tryToSetActiveInternal):

2021-06-22  Rob Buis  <rbuis@igalia.com>

        Make rendererIsEverNeeded check less strict
        https://bugs.webkit.org/show_bug.cgi?id=226791

        Reviewed by Antti Koivisto.

        Make rendererIsEverNeeded check less strict
        in TreeResolver::resolveElement.

        * style/StyleTreeResolver.cpp:
        (WebCore::Style::TreeResolver::resolveElement):

2021-06-21  Yusuke Suzuki  <ysuzuki@apple.com>

        Shrink sizeof(RegisteredEventListener)
        https://bugs.webkit.org/show_bug.cgi?id=227230

        Reviewed by Geoffrey Garen.

        This patch changes the ordering of members of RegisteredEventListener to make it small from 24 to 16.

        * dom/RegisteredEventListener.h:
        (WebCore::RegisteredEventListener::RegisteredEventListener):
        (): Deleted.

2021-06-22  Frédéric Wang  <fwang@igalia.com>

        Nullptr crash in null ptr deref in ReplaceSelectionCommand::removeRedundantStylesAndKeepStyleSpanInline
        https://bugs.webkit.org/show_bug.cgi?id=226799

        Reviewed by Ryosuke Niwa.

        Various places in ReplaceSelectionCommand::doApply() may execute mutation events and lead
        to nodes being removed. This patch adds one more early return after the call to
        makeInsertedContentRoundTrippableWithHTMLTreeBuilder() to ensure that the function
        removeRedundantStylesAndKeepStyleSpanInline() is properly executed.

        Test: fast/editing/paste-and-indent-microtask-crash.html

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply):

2021-06-22  Cathie Chen  <cathiechen@igalia.com>

        Implement width and height attributes on source elements of <picture>
        https://bugs.webkit.org/show_bug.cgi?id=222368

        Reviewed by Darin Adler.

        According to [1], the source element supports dimension attributes. The img element can use the width
        and height attributes of the source element to determine its rendered dimensions and aspect-ratio.
        In order to implement this, add m_sourceElement to HTMLImageElement to indicate the source element that
        is selected. Also add invalidateAttributeMapping() to synchronize with the changes of source's attributes
        to the img element. Then add collectExtraStyleForPresentationalHints() to collect style from source attributes.

        [1] https://html.spec.whatwg.org/#the-source-element

        * dom/ElementData.h:
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::rebuildPresentationalHintStyle): collectExtraStyleForPresentationalHints() when rebuild.
        * dom/StyledElement.h:
        (WebCore::StyledElement::collectExtraStyleForPresentationalHints): Add an interface to collect extra style from other elements.
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::applyAspectRatioFromWidthAndHeightAttributesToStyle): Add width and height attributes as input variables.
        * html/HTMLElement.h:
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::collectPresentationalHintsForAttribute):
        (WebCore::HTMLImageElement::collectExtraStyleForPresentationalHints): If source element has width or height attributes, apply them
        to width, height and aspect-ratio of the style.
        (WebCore::HTMLImageElement::bestFitSourceFromPictureElement): Keep the source element.
        (WebCore::HTMLImageElement::selectImageSource): Reset the source element to null if no candidate is found.
        (WebCore::HTMLImageElement::sourceElement const):
        (WebCore::HTMLImageElement::setSourceElement):
        (WebCore::HTMLImageElement::invalidateAttributeMapping): Invalidate the presentationalHintStyle.
        * html/HTMLImageElement.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::collectPresentationalHintsForAttribute):
        * html/HTMLPictureElement.cpp:
        (WebCore::HTMLPictureElement::sourceDimensionAttributesChanged): Call invalidateAttributeMapping if source element's attributes are changed.
        * html/HTMLPictureElement.h:
        * html/HTMLSourceElement.cpp:
        (WebCore::HTMLSourceElement::attributeChanged): Call sourceDimensionAttributesChanged if width or height attributes are changed.
        * html/HTMLSourceElement.h:
        * html/HTMLSourceElement.idl:
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::collectPresentationalHintsForAttribute):

2021-06-21  Jean-Yves Avenard  <jya@apple.com>

        Safari 15 breaks all Web Audio content using WebM Opus
        https://bugs.webkit.org/show_bug.cgi?id=226922
        rdar://79218243

        Reviewed by Eric Carlson.

        Temporarily reports that neither Opus and Vorbis audio codec are supported to allow
        webaudio sites to fallback to other containers. The content will continue to play
        as before. Will be reverted once bug 227110 lands.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::canPlayType const):

2021-06-21  Jean-Yves Avenard  <jya@apple.com>

        Merge AudioFileReaderMac and AudioFileReaderIOS into AudioFileReaderCocoa
        https://bugs.webkit.org/show_bug.cgi?id=227205
        <rdar://problem/79549527>

        Reviewed by Chris Dumez.

        Merge AudioFileReaderIOS and AudioFileReaderMac into AudioFileReaderCocoa.
        No change in functionality.

        * PlatformMac.cmake:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/audio/cocoa/AudioFileReaderCocoa.cpp:
        (WebCore::tryCreateAudioBufferList): make method static as it's not used elsewhere.
        (WebCore::destroyAudioBufferList): make method static as it's not used elsewhere.
        (WebCore::validateAudioBufferList): make method static as it's not used elsewhere.
        (WebCore::AudioFileReader::AudioFileReader):
        (WebCore::AudioFileReader::~AudioFileReader):
        (WebCore::AudioFileReader::readProc):
        (WebCore::AudioFileReader::getSizeProc):
        (WebCore::AudioFileReader::createBus):
        (WebCore::createBusFromAudioFile):
        (WebCore::createBusFromInMemoryAudioFile):
        * platform/audio/cocoa/AudioFileReaderCocoa.h:
        (WebCore::AudioFileReader::data const):
        (WebCore::AudioFileReader::dataSize const):
        * platform/audio/ios/AudioFileReaderIOS.cpp: Removed.
        * platform/audio/ios/AudioFileReaderIOS.h: Removed.
        * platform/audio/mac/AudioFileReaderMac.cpp: Removed.
        * platform/audio/mac/AudioFileReaderMac.h: Removed.

2021-06-21  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] [WebKitLegacy] Non-actionable "Look Up" action appears when right clicking images
        https://bugs.webkit.org/show_bug.cgi?id=227240

        Reviewed by Devin Rousso.

        The "Look Up" action currently appears in legacy WebKit, despite visual search not being supported in WebKit1.
        Add and consult a context menu client hook to avoid inserting this item when its functionality is unsupported.

        Test: fast/events/contextmenu-lookup-action-for-image.html

        * loader/EmptyClients.cpp:
        * page/ContextMenuClient.h:
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::populate):

2021-06-21  Aditya Keerthi  <akeerthi@apple.com>

        [iOS] Update textfield border color to match specification
        https://bugs.webkit.org/show_bug.cgi?id=227135
        <rdar://problem/79456679>

        Reviewed by Maciej Stachowiak.

        * css/html.css:
        (input, textarea):

        Use the system opaque separator color for textfield borders, as it has
        better visibility compared to the system fill color.

        * rendering/RenderThemeIOS.mm:
        (WebCore::cssValueSystemColorInformationList):

        Define CSSValueAppleSystemOpaqueSeparator using separatorColor composited
        on top of a solid color, rather than using opaqueSeparatorColor, since
        the latter currently lacks an Increase Contrast variant. Note that the
        colors are equivalent with regular contrast.

2021-06-21  Don Olmstead  <don.olmstead@sony.com>

        Non-unified build fixes late June 2021 edition
        https://bugs.webkit.org/show_bug.cgi?id=227241

        Unreviewed non-unified build fixes.

        * css/CSSCrossfadeValue.h:
        * css/CSSCursorImageValue.cpp:
        * css/CSSImageValue.cpp:
        * css/parser/CSSParserFastPaths.h:
        * css/parser/CSSPropertyParserWorkerSafe.cpp:

2021-06-21  Chris Dumez  <cdumez@apple.com>

        Use double instead of float where appropriate in HTML Canvas IDL
        https://bugs.webkit.org/show_bug.cgi?id=227238

        Reviewed by Sam Weinig.

        There are a lot of places in our HTML Canvas IDL where we're using float type, even though
        the specification is using double. This patch fixes those.

        * html/canvas/CanvasCompositing.idl:
        * html/canvas/CanvasDrawImage.idl:
        * html/canvas/CanvasDrawPath.idl:
        * html/canvas/CanvasGradient.cpp:
        (WebCore::CanvasGradient::addColorStop):
        * html/canvas/CanvasGradient.h:
        * html/canvas/CanvasGradient.idl:
        * html/canvas/CanvasPathDrawingStyles.idl:
        * html/canvas/CanvasRect.idl:
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::fillText):
        (WebCore::CanvasRenderingContext2D::strokeText):
        (WebCore::CanvasRenderingContext2D::drawTextInternal):
        * html/canvas/CanvasRenderingContext2D.h:
        * html/canvas/CanvasRenderingContext2D.idl:
        * html/canvas/CanvasRenderingContext2DBase.cpp:
        (WebCore::CanvasRenderingContext2DBase::setLineWidth):
        (WebCore::CanvasRenderingContext2DBase::setMiterLimit):
        (WebCore::lineDashSequenceIsValid):
        (WebCore::CanvasRenderingContext2DBase::setLineDash):
        (WebCore::CanvasRenderingContext2DBase::setWebkitLineDash):
        (WebCore::CanvasRenderingContext2DBase::setLineDashOffset):
        (WebCore::CanvasRenderingContext2DBase::setGlobalAlpha):
        (WebCore::CanvasRenderingContext2DBase::scale):
        (WebCore::CanvasRenderingContext2DBase::rotate):
        (WebCore::CanvasRenderingContext2DBase::translate):
        (WebCore::CanvasRenderingContext2DBase::transform):
        (WebCore::CanvasRenderingContext2DBase::setTransform):
        (WebCore::validateRectForCanvas):
        (WebCore::CanvasRenderingContext2DBase::isPointInPath):
        (WebCore::CanvasRenderingContext2DBase::isPointInStroke):
        (WebCore::CanvasRenderingContext2DBase::isPointInPathInternal):
        (WebCore::CanvasRenderingContext2DBase::isPointInStrokeInternal):
        (WebCore::CanvasRenderingContext2DBase::clearRect):
        (WebCore::CanvasRenderingContext2DBase::fillRect):
        (WebCore::CanvasRenderingContext2DBase::strokeRect):
        (WebCore::CanvasRenderingContext2DBase::canDrawText):
        (WebCore::CanvasRenderingContext2DBase::drawText):
        (WebCore::CanvasRenderingContext2DBase::drawTextUnchecked):
        * html/canvas/CanvasRenderingContext2DBase.h:
        (WebCore::CanvasRenderingContext2DBase::lineWidth const):
        (WebCore::CanvasRenderingContext2DBase::miterLimit const):
        (WebCore::CanvasRenderingContext2DBase::getLineDash const):
        (WebCore::CanvasRenderingContext2DBase::webkitLineDash const):
        (WebCore::CanvasRenderingContext2DBase::lineDashOffset const):
        (WebCore::CanvasRenderingContext2DBase::globalAlpha const):
        * html/canvas/CanvasShadowStyles.idl:
        * html/canvas/CanvasText.idl:
        * html/canvas/CanvasTransform.idl:
        * html/canvas/OffscreenCanvasRenderingContext2D.cpp:
        (WebCore::OffscreenCanvasRenderingContext2D::fillText):
        (WebCore::OffscreenCanvasRenderingContext2D::strokeText):
        * html/canvas/OffscreenCanvasRenderingContext2D.h:
        * inspector/InspectorCanvas.cpp:
        (WebCore::InspectorCanvas::processArgument):
        * inspector/InspectorCanvasCallTracer.h:

2021-06-21  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo] Turn ENABLE_SHAREABLE_RESOURCE on
        https://bugs.webkit.org/show_bug.cgi?id=227011

        Reviewed by Don Olmstead.

        * loader/cache/CachedResource.cpp:
        * loader/cache/CachedResource.h:

2021-06-21  Chris Dumez  <cdumez@apple.com>

        Too much CPU time is spent under MemoryPressureHandler::currentMemoryUsagePolicy()
        https://bugs.webkit.org/show_bug.cgi?id=227001

        Reviewed by Simon Fraser.

        Make it so that RenderLayerCompositor::updateCompositingPolicy() queries MemoryPressureHandler::currentMemoryUsagePolicy()
        at most once every 2 seconds given that the call is expensive. It can currently get called several times a second and
        shows on CPU profiles.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateCompositingPolicy):

2021-06-21  Megan Gardner  <megan_gardner@apple.com>

        AppHighlights disappear on page reload
        https://bugs.webkit.org/show_bug.cgi?id=227141
        rdar://78190331

        Reviewed by Devin Rousso.

        Preserve the state of highlight visibility so that is correct on page-reload.

        * dom/Document.cpp:
        (WebCore::Document::appHighlightRegister):
        * page/ChromeClient.h:
        (WebCore::ChromeClient::appHighlightsVisiblility const):

2021-06-21  Rob Buis  <rbuis@igalia.com>

        CSSOM test for serializing font-variant fails
        https://bugs.webkit.org/show_bug.cgi?id=226770

        Reviewed by Darin Adler.

        Implement font-variant serializing according to:
        https://drafts.csswg.org/cssom/#serializing-css-values

        * css/StyleProperties.cpp:
        (WebCore::StyleProperties::getPropertyValue const):
        (WebCore::StyleProperties::appendFontLonghandValueIfExplicit const):
        (WebCore::StyleProperties::fontVariantValue const):
        * css/StyleProperties.h:
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeFontVariantEastAsian):
        (WebCore::CSSPropertyParser::consumeFontVariantShorthand):

2021-06-21  Alan Bujtas  <zalan@apple.com>

        Remove redundant HitTestLocation(const LayoutPoint& centerPoint, unsigned topPadding, unsigned rightPadding, unsigned bottomPadding, unsigned leftPadding)
        https://bugs.webkit.org/show_bug.cgi?id=227186

        Reviewed by Sam Weinig.

        Let's use the LayoutRect based c'tor at the only callsite (Internals).

        * page/EventHandler.cpp:
        (WebCore::EventHandler::hitTestResultAtPoint const):
        * page/EventHandler.h:
        * rendering/HitTestLocation.cpp:
        (WebCore::HitTestLocation::HitTestLocation):
        (WebCore::rectForPoint): Deleted.
        (WebCore::m_isRectBased): Deleted.
        * rendering/HitTestLocation.h:
        * rendering/HitTestResult.cpp:
        * rendering/HitTestResult.h:
        * testing/Internals.cpp:
        (WebCore::Internals::nodesFromRect const):

2021-06-20  Alan Bujtas  <zalan@apple.com>

        HitTestLocation::m_boundingBox should be able hold subpixel values
        https://bugs.webkit.org/show_bug.cgi?id=227185

        Reviewed by Sam Weinig.

        This is in preparation for supporting non-integral area hi-testing (e.g. on 2x displays).
        No functionality change yet.

        * rendering/HitTestLocation.cpp:
        (WebCore::rectForPoint):
        * rendering/HitTestLocation.h:
        (WebCore::HitTestLocation::boundingBox const):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::hitTestCulledInline):

2021-06-20  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Live Text] Mouse events should only trigger text recognition if the cursor is moving
        https://bugs.webkit.org/show_bug.cgi?id=227181
        rdar://79469827

        Reviewed by Tim Horton.

        Make a slight adjustment to how we trigger the text recognition timer when hovering over images; instead of
        allowing any non-synthetic mouse event to kick off the timer, limit it to only mouse events with horizontal or
        vertical movement deltas.

        To implement this, we remove some `ENABLE(POINTER_LOCK)` guards around PlatformMouseEvent's movement delta, and
        check whether the movement delta is nonzero in EventHandler when determining whether to start the text
        recognition timer.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::updateMouseEventTargetNode):

        Check for a nonzero movement delta in place of the synthetic click type; since all synthetic mouse events are
        created with no horizontal or vertical delta, since new movement delta check obviates the need for checking the
        synthetic click type.

        Additionally, we invert the conditional here so that if any mouse events are detected over content that is not
        an image, we'll immediately stop the timer; however, if the mouse event is over an image, we'll only kick off
        the timer if the movement delta is additionally nonzero.

        * platform/PlatformMouseEvent.h:
        (WebCore::PlatformMouseEvent::globalPosition const):
        (WebCore::PlatformMouseEvent::movementDelta const):
        * platform/mac/PlatformEventFactoryMac.mm:
        (WebCore::PlatformMouseEventBuilder::PlatformMouseEventBuilder):

2021-06-20  Alan Bujtas  <zalan@apple.com>

        Move rectForPoint() static function out from the HitTestLocation class
        https://bugs.webkit.org/show_bug.cgi?id=227182

        Reviewed by Sam Weinig.

        This function implicitly enlarges the hit test area which may trigger unexpected behavior.
        It's better to not have it on the class's public interface.

        * rendering/HitTestLocation.cpp:
        (WebCore::rectForPoint):
        (WebCore::HitTestLocation::rectForPoint): Deleted.
        * rendering/HitTestLocation.h:
        * rendering/LegacyEllipsisBox.cpp:
        (WebCore::LegacyEllipsisBox::nodeAtPoint): While this may be a functionality change where we
        replace the previously set area padding with 0 (actually 1px), I don't think that's what this is about.
        * testing/Internals.cpp:
        (WebCore::Internals::nodesFromRect const):

2021-06-20  Alan Bujtas  <zalan@apple.com>

        Remove HitTestLocation(FloatPoint) c'tor
        https://bugs.webkit.org/show_bug.cgi?id=227179

        Reviewed by Sam Weinig.

        FloatPoint are used to store pixed snapped coordinate values in the rendering code.
        This is in preparation for supporting non-integral HitTestLocation intersect.

        * rendering/HitTestLocation.cpp:
        * rendering/HitTestLocation.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::hitTestLayerByApplyingTransform):
        * rendering/svg/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::nodeAtFloatPoint):
        * rendering/svg/RenderSVGForeignObject.cpp:
        (WebCore::RenderSVGForeignObject::nodeAtFloatPoint):
        * rendering/svg/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::nodeAtFloatPoint):
        * rendering/svg/RenderSVGShape.cpp:
        (WebCore::RenderSVGShape::nodeAtFloatPoint):

2021-06-20  Darin Adler  <darin@apple.com>

        CSS counter style improvements for Armenian, Tamil, and some CJK styles
        https://bugs.webkit.org/show_bug.cgi?id=227190

        Reviewed by Sam Weinig.

        * css/CSSPrimitiveValueMappings.h: Added CJKDecimal and Tamil.
        Also updated for name changes of Cjk to CJK.

        * css/CSSValueKeywords.in: Added cjk-decimal and tamil.

        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::isPredefinedCounterStyle):
        Updated since the last predefined counter style is now Tamil.

        * rendering/RenderListMarker.cpp: Tweak coding style a bit, using
        constexpr and auto and removing some unneeded explicit type names.
        (WebCore::effectiveListMarkerType): Added Tamil. Corrected range
        for Armenian, LowerArmenian, and UpperArmenian to be 1-9999.
        Added CJKDecimal. Updated for name changes of Cjk to CJK.
        (WebCore::listMarkerSuffix): Addded Tamil. Corrected suffix for
        multiple types to be ideographic comma instead of period.
        (WebCore::suffixRequiresSpace): Added. Used so we don't add a space
        after all suffixes.
        (WebCore::listMarkerText): Added CJKDecimal and Tamil.
        (WebCore::RenderListMarker::paint): Removed all the cases for the
        many list style types that just paint as text, using default instead.
        Call suffixRequiresSpace and don't add a space if not needed.
        (WebCore::RenderListMarker::updateContent): Removed all the cases for
        the many list style types that are text based, using default instead.
        (WebCore::RenderListMarker::computePreferredLogicalWidths): Removed
        all the cases for the many list style types that are text based, using
        default instead. Call suffixRequiresSpace and don't include the space
        if not needed.
        (WebCore::RenderListMarker::suffix const): Call suffixRequiresSpace
        and don't include a space if not needed.
        (WebCore::RenderListMarker::getRelativeMarkerRect): Removed all the
        cases for the many list style types that are text based, using default
        instead. Call suffixRequiresSpace and don't include the space if not
        needed.

        * rendering/style/RenderStyleConstants.cpp:
        (WebCore::operator<<): Added CJKDecimal and Tamil. Also sorted the
        list styles alphabetically.

        * rendering/style/RenderStyleConstants.h: Added CJKDecimal and
        Tamil and use CJK instead of Cjk in names of the other styles.

2021-06-20  Yusuke Suzuki  <ysuzuki@apple.com>

        Skip shadow-root creation for input element if it is not necessary
        https://bugs.webkit.org/show_bug.cgi?id=227189

        Reviewed by Maciej Stachowiak.

        Test: fast/forms/checkbox-child-hidden.html

        Cherry-pick Chromium optimizations[1,2] for input element and extend the coverage for more types.

        Some of input element (e.g. checkbox) do not need to create a shadow-root since they do not have shadow-subtree.
        This patch optimizes input element creation by skipping creation of shadow-root for these input types.

        Since HTMLTextFormControlElement::childShouldCreateRenderer creates renderer only for children under shadow-root,
        we do not need to consider about the case appending an element to checkbox etc. They will not get renderers.

        We also replace HTMLInputElement related class' override with final if they are final to make class-hierarchy more explicit
        and not to miss the change that needs to be done in the derived classes.

        On M1 MBP, this patch improves Speedometer2 by 0.8%.

        [1]: https://chromium-review.googlesource.com/c/chromium/src/+/773180
        [2]: https://chromium-review.googlesource.com/c/chromium/src/+/826426 (but this is not necessary in WebKit since HTMLTextFormControlElement::childShouldCreateRenderer does the right thing elegantly)

        * dom/Element.cpp:
        (WebCore::Element::ensureUserAgentShadowRoot):
        (WebCore::Element::createUserAgentShadowRoot):
        * dom/Element.h:
        * html/BaseDateAndTimeInputType.cpp:
        (WebCore::BaseDateAndTimeInputType::createShadowSubtreeAndUpdateInnerTextElementEditability):
        * html/BaseDateAndTimeInputType.h:
        (WebCore::BaseDateAndTimeInputType::BaseDateAndTimeInputType):
        * html/ColorInputType.cpp:
        (WebCore::ColorInputType::createShadowSubtreeAndUpdateInnerTextElementEditability):
        * html/ColorInputType.h:
        * html/FileInputType.cpp:
        (WebCore::FileInputType::FileInputType):
        (WebCore::FileInputType::createShadowSubtreeAndUpdateInnerTextElementEditability):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::create):
        (WebCore::HTMLInputElement::createShadowSubtreeAndUpdateInnerTextElementEditability):
        (WebCore::HTMLInputElement::updateType): It is possible that shadow root is already created for the previous InputType.
        So we should use ensureUserAgentShadowRoot.
        (WebCore::HTMLInputElement::initializeInputType): Since this is called at initialization time, we can use createUserAgentShadowRoot
        instead of ensureUserAgentShadowRoot.
        (WebCore::HTMLInputElement::didAddUserAgentShadowRoot): Deleted. Clean up the logic instead of relying on this callback.
        Since HTMLInputElement can replace InputType, while we need to create shadow-subtree when InputType is replaced,
        this callback could not be called since shadow-root is already created for the previous InputType. Not relying on this
        callback makes the logic much simpler: explicitly create shadow-root and shadow-subtree.
        * html/HTMLInputElement.h:
        * html/InputType.h:
        (WebCore::InputType::needsShadowSubtree const): Since this is in the critical path, we need this super optimized implementation.
        Button, checkbox, hidden, image, radio, reset, and submit do not require shadow root.
        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::RangeInputType):
        (WebCore::RangeInputType::createShadowSubtreeAndUpdateInnerTextElementEditability):
        * html/SearchInputType.cpp:
        (WebCore::SearchInputType::SearchInputType):
        (WebCore::SearchInputType::createShadowSubtreeAndUpdateInnerTextElementEditability):
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::TextFieldInputType):
        (WebCore::TextFieldInputType::createShadowSubtreeAndUpdateInnerTextElementEditability):

2021-06-19  Darin Adler  <darin@apple.com>

        Fix CSS serialization issues affecting css-counter-styles tests
        https://bugs.webkit.org/show_bug.cgi?id=226708

        Reviewed by Antti Koivisto.

        Fix two serialization isssues affecting css-counter-styles tests:

        1) URLs were serializing the full resolved URL, rather than the
           partial URL string from the style sheet.
        2) Items in additive-symbols that had both an integer and a string
           would incorrectly serialize with a comma within the item.

        * css/CSSCrossfadeValue.cpp:
        (WebCore::CSSCrossfadeValue::valueWithStylesResolved): Added.
        Calls resolveImageStyles on the image values.
        * css/CSSCrossfadeValue.h: Updated for the above.

        * css/CSSCursorImageValue.cpp:
        (WebCore::CSSCursorImageValue::CSSCursorImageValue): Changed the hot spot
        to use std::optional instead of a separate boolean.
        (WebCore::CSSCursorImageValue::create): Moved this out of the header
        because it's not better for inlining to have it there.
        (WebCore::CSSCursorImageValue::customCSSText const): Updated for the
        m_hotSpot changes.
        (WebCore::CSSCursorImageValue::updateCursorElement): Removed unneeded
        check of hasFragmentIdentifier, which is already done by the
        SVGURIReference::targetElementFromIRIString function. Updated to use
        m_originalSpecifiedURLString, and added a FIXME about the strange way
        this just keeps accumulating more and more clients in a set, but did
        not change that behavior.
        (WebCore::CSSCursorImageValue::cursorElementRemoved): Added a FIXME.
        (WebCore::CSSCursorImageValue::cursorElementChanged): Updated for the
        change to m_hotSpot and addded some FIXME.
        (WebCore::CSSCursorImageValue::equals const): Updated for the m_hotSpot
        change; much simpler since std::optional does the right thing.
        (WebCore::CSSCursorImageValue::valueWithStylesResolved): Added.
        Calls resolveImageStyles on the image value.
        * css/CSSCursorImageValue.h: Updated for the above changes.

        * css/CSSFilterImageValue.cpp:
        (WebCore::CSSFilterImageValue::valueWithStylesResolved): Added.
        Calls resolveImageStyles on the image value and also calls
        createFilterOperations.
        * css/CSSFilterImageValue.h: Updated for the above.

        * css/CSSGradientValue.cpp:
        (WebCore::CSSGradientValue::valueWithStylesResolved): Renamed from
        gradientWithStylesResolved.
        * css/CSSGradientValue.h: Updated for the above.

        * css/CSSImageSetValue.cpp:
        (WebCore::CSSImageSetValue::valueWithStylesResolved): Renamed from
        imageSetWithStylesResolved. Optimized the case where the resolved
        version is not different to re-use the original CSSImageSetValue.
        * css/CSSImageSetValue.h: Updated for the above.

        * css/CSSImageValue.cpp:
        (WebCore::operator==): Added. Check if two ResolvedURL are equal.
        (WebCore::makeResolvedURL): Added. Make a ResolvedURL from an
        existing URL without the original specified string.
        (WebCore::CSSImageValue::CSSImageValue): Take ResolvedURL instead
        of a URL. Also updated to use std::optional instead of a separate
        m_accessedImage boolean.
        (WebCore::CSSImageValue::create): Added an overload that takes
        ResolvedURL argument and also moved here from the header since we
        don't get any benefit from inlining.
        (WebCore::CSSImageValue::isPending const): Updates since m_cachedImage
        is now a std::optional, and the std::nullopt case is used for this.
        (WebCore::CSSImageValue::reresolvedURL const): Added. Used so we can
        share code between the following functions.
        (WebCore::CSSImageValue::valueWithStylesResolved): Added. Computes
        the fully resolved URL and makes a new image value if needed that
        always uses it. Also points the new value at the old one so we can
        update m_cachedImage in both.
        (WebCore::CSSImageValue::loadImage): Use the new reresolvedURL function.
        Also update m_cachedImage in any underlying objects.
        (WebCore::CSSImageValue::traverseSubresources): Updated for change
        to m_cachedImage.
        (WebCore::CSSImageValue::equals const): Updated for change to use
        ResolvedURL.
        (WebCore::CSSImageValue::customCSSText const): Ditto. This is the
        only place where we use specifiedURLString.
        (WebCore::CSSImageValue::createDeprecatedCSSOMWrapper const): Updated
        for change from m_url.
        (WebCore::CSSImageValue::knownToBeOpaque const): Updated for change
        to m_cachedImage.
        * css/CSSImageValue.h: Added ResolvedURL, new create
        overloads. Replaced url() function with location() function, which
        returns a string. Note that this always returns the resolved string,
        only customCSSText returns the original string. Replaced m_url with
        m_location, eliminated m_accessedImage and made m_cachedImage use
        std::optional instead. Added m_unresolvedValue.

        * css/StyleSheetContents.cpp:
        (WebCore::StyleSheetContents::completeURL const): Deleted unused function.
        * css/StyleSheetContents.h: Ditto.

        * css/parser/CSSParserContext.cpp:
        (WebCore::CSSParserContext::completeURL const): Updated to return
        ResolvedURL instead of a URL.
        * css/parser/CSSParserContext.h: Ditto.

        * css/parser/CSSParserIdioms.cpp:
        (WebCore::completeURL): Deleted unused function.
        * css/parser/CSSParserIdioms.h: Ditto.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeCursor): Use std::optional for the hot spot.
        (WebCore::consumeCounterStyleAdditiveSymbols): Put the integer/symbol
        pair into a separate space-separated list instead of appending both
        to the top level command-separated list. Also removed support for
        non-standard "image without symbol" and "symbol without image".
        Neither the specification nor the web platform tests currently call
        for that.

        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::consumeImage): Call the new
        overload of CSSImageValue::create, passing a ResolvedURL.

        * css/parser/CSSPropertyParserWorkerSafe.cpp:
        (WebCore::CSSPropertyParserHelpersWorkerSafe::consumeFontFaceSrcURI):
        Update for the change to completeURL and refactor a bit. Later we could
        make the same kind of fix for CSSFontFaceSrcValue that we did in this
        patch for CSSImageValue, but did not try that for now.

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::addCursor): Updated to take a std::optional for
        the hot spot.
        * rendering/style/RenderStyle.h: Ditto.

        * rendering/style/StyleCachedImage.cpp:
        (WebCore::StyleCachedImage::imageURL): Updated for CSSImageValue::imageURL.

        * style/StyleBuilderCustom.h:
        (WebCore::Style::BuilderCustom::applyValueContent): Call
        resolveImageStyles consistently.

        * style/StyleBuilderState.cpp:
        (WebCore::Style::BuilderState::resolveImageStyles): Call the new
        valueWithStylesResolved function on all the different image value
        types. This unifies the approach across all 6 classes.
        (WebCore::Style::BuilderState::createStyleImage): Tweaked style.

2021-06-18  Chris Dumez  <cdumez@apple.com>

        [WebIDL] Assigning a value outside the float range to a 'float' attribute should throw a TypeError
        https://bugs.webkit.org/show_bug.cgi?id=227146

        Reviewed by Sam Weinig.

        Assigning a value outside the float range to a 'float' attribute should throw a TypeError, as per:
        - https://heycam.github.io/webidl/#es-float

        Blink follows the specification but WebKit was just casting the double to a float. This patch
        addresses this issue.

        This patch also makes sure that values outside the float range properly get resolved to -Infinity
        or Infinity if the attribute is of type 'unrestricted float', as per:
        - https://heycam.github.io/webidl/#es-unrestricted-float

        No new tests, updated existing tests.

        * bindings/js/JSDOMConvertNumbers.h:
        (WebCore::Converter<IDLFloat>::convert):
        (WebCore::Converter<IDLUnrestrictedFloat>::convert):
        * testing/TypeConversions.h:
        (WebCore::TypeConversions::testFloat const):
        (WebCore::TypeConversions::setTestFloat):
        (WebCore::TypeConversions::testUnrestrictedFloat const):
        (WebCore::TypeConversions::setTestUnrestrictedFloat):
        * testing/TypeConversions.idl:

2021-06-18  Soujyu TANAKA  <soujyu.tanaka@access-company.com>

        [Curl] Add curl option CURLOPT_NOSIGNAL to omit numerous sigaction calls
        https://bugs.webkit.org/show_bug.cgi?id=227118

        Reviewed by Fujii Hironori.

        As we increase file handles registered by curl_multi_add_handle(),
        number of times of sigaction executions in Curl grows rapidly. That can
        cause unignorable download speed drop.

        With a curl option CURLOPT_NOSIGNAL enabled, Curl doesn't use the
        syscall to ignore SIGPIPE signals. It's safe as long as we configure to
        prevent SIGPIPE from being triggered.

        No new tests.

        * platform/network/curl/CurlContext.cpp:
        (WebCore::CurlHandle::CurlHandle):

2021-06-18  Oriol Brufau  <obrufau@igalia.com>

        [css-logical] Fix cssom "set a CSS declaration" for logical properties
        https://bugs.webkit.org/show_bug.cgi?id=226461

        Reviewed by Antti Koivisto.

        Test: imported/w3c/web-platform-tests/css/cssom/cssstyledeclaration-setter-logical.html

        Before this patch, setting a value to a property already in the list of
        declarations, would just update its value, without reordering.

        The problem was that the order is important when there is a mix of
        logical and physical properties:

          el.style.paddingTop = "1px";
          el.style.paddingBlockStart = "2px";
          el.style.cssText; // "padding-top: 1px; padding-block-start: 2px"
          el.style.paddingTop = "3px";
          el.style.cssText; // "padding-top: 3px; padding-block-start: 2px"
          getComputedStyle(el).paddingTop; // "2px" -- no effect!

        Therefore, this patch implements this part of the spec:
        > If there are CSS declarations in declarations whose property name is
        > in the same logical property group as property, but has a different
        > mapping logic, target declaration must be at an index after all of
        > those CSS declarations.

        This change is based on this Chromium CL:
        https://chromium-review.googlesource.com/c/chromium/src/+/2575081/

        * css/CSSProperty.h:
        * css/StyleProperties.cpp:
        (WebCore::MutableStyleProperties::canUpdateInPlace const):
        (WebCore::MutableStyleProperties::setProperty):
        * css/StyleProperties.h:
        * css/makeprop.pl:

2021-06-18  Peng Liu  <peng.liu6@apple.com>

        [iOS] Fullscreen video playback gets stuck after interacting with the playback controls
        https://bugs.webkit.org/show_bug.cgi?id=227047

        Reviewed by Eric Carlson.

        When we scrub a playing video, the video element may enter a temporarily stalled
        state - the player is still playing, but it does not have enough data. In WebKit,
        the `rate` of the player will be 0. But we cannot set the rate of `WebAVPlayerController`
        to 0 in this case, because AVKit will believe the video playback is paused when
        its rate is 0. In r261587, we defined a magic rate (0.00000001f) for this case.

        Unfortunately, with the changes in r275956, `WebAVPlayerController` will
        align its `defaultPlaybackRate` with `rate` when `rate` is not 0. Under stress
        tests, e.g., keep scrubbing a video, a video element will eventually enter a state
        in which both `defaultPlaybackRate` and `rate` are the magic rate. And the video
        appears to be stuck for users.

        To fix the issue, this patch removes the magic rate and defines a new state: `stalled`.
        A video will be in the stalled state when it is playing but does not have enough data.
        WebKit will only change the rate of `WebAVPlayerController` when the video
        is not stalled.

        To avoid potential problems due to the conversions between "float" and "double"
        back and forth, this patch updates the types of `playbackRate` and `defaultPlaybackRate`.

        * platform/cocoa/PlaybackSessionModel.h:
        (WebCore::PlaybackSessionModelClient::rateChanged):
        * platform/cocoa/PlaybackSessionModelMediaElement.h:
        * platform/cocoa/PlaybackSessionModelMediaElement.mm:
        (WebCore::PlaybackSessionModelMediaElement::updateForEventName):
        (WebCore::PlaybackSessionModelMediaElement::setDefaultPlaybackRate):
        (WebCore::PlaybackSessionModelMediaElement::setPlaybackRate):
        (WebCore::PlaybackSessionModelMediaElement::defaultPlaybackRate const):
        (WebCore::PlaybackSessionModelMediaElement::playbackRate const):
        * platform/ios/PlaybackSessionInterfaceAVKit.h:
        * platform/ios/PlaybackSessionInterfaceAVKit.mm:
        (WebCore::PlaybackSessionInterfaceAVKit::PlaybackSessionInterfaceAVKit):
        (WebCore::PlaybackSessionInterfaceAVKit::rateChanged):
        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        (VideoFullscreenControllerContext::rateChanged):
        (VideoFullscreenControllerContext::setDefaultPlaybackRate):
        (VideoFullscreenControllerContext::setPlaybackRate):
        (VideoFullscreenControllerContext::isStalled const):
        (VideoFullscreenControllerContext::defaultPlaybackRate const):
        (VideoFullscreenControllerContext::playbackRate const):
        * platform/mac/PlaybackSessionInterfaceMac.h:
        * platform/mac/PlaybackSessionInterfaceMac.mm:
        (WebCore::PlaybackSessionInterfaceMac::rateChanged):
        * platform/mac/VideoFullscreenInterfaceMac.h:
        * platform/mac/VideoFullscreenInterfaceMac.mm:
        (WebCore::VideoFullscreenInterfaceMac::rateChanged):

2021-06-18  Philippe Normand  <pnormand@igalia.com>

        [MSE][GStreamer] Soundcloud serves MP4 audio with empty tfdt boxes
        https://bugs.webkit.org/show_bug.cgi?id=191419

        Reviewed by Michael Catanzaro.

        When MSE is used the player receives broken audio fragments, perhaps because the server
        expects the client to repair them. Not much we can do about this on GStreamer side though,
        so behave as a Chrome UserAgent and then MSE is not used, the player receives an MP3 stream.

        * platform/UserAgentQuirks.cpp:
        (WebCore::urlRequiresChromeBrowser):

2021-06-18  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [LFC][WPE] Build failure with GCC 8.x
        https://bugs.webkit.org/show_bug.cgi?id=227166

        Reviewed by Alan Bujtas.

        The build fails with the error: converting to 'std::in_place_t' from initializer list
        would use explicit constructor 'constexpr std::in_place_t::in_place_t()'

        No new tests, is a build fix.

        * layout/integration/LayoutIntegrationLineLayout.cpp:
        (WebCore::LayoutIntegration::LineLayout::prepareLayoutState):

2021-06-18  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] imported/w3c/web-platform-tests/mediacapture-streams/MediaStream-MediaElement-srcObject.https.html is failing since r273645
        https://bugs.webkit.org/show_bug.cgi?id=223508

        Reviewed by Xabier Rodriguez-Calvar.

        Per spec, prevent seeks, playback rate changes and preload state updates on media elements backed by
        the GStreamer MediaStream source element.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::seek):
        (WebCore::MediaPlayerPrivateGStreamer::updatePlaybackRate):
        (WebCore::MediaPlayerPrivateGStreamer::setPreload):
        (WebCore::MediaPlayerPrivateGStreamer::maxMediaTimeSeekable const):

2021-06-18  Philippe Normand  <pnormand@igalia.com>

        [WebRTC][GStreamer] fast/mediastream/MediaStream-video-element-remove-track.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=191886

        Reviewed by Xabier Rodriguez-Calvar.

        Trigger source pad removal in the mediastream source element when a track has been removed.

        * platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:
        (WebKitMediaStreamObserver::didRemoveTrack):

2021-06-17  Said Abou-Hallawa  <said@apple.com>

        [Cocoa] Disable hardware decoding in the WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=226869
        <rdar://77548905>

        Reviewed by Per Arne Vollan and Simon Fraser.

        Pass kCGImageSourceEnableRestrictedDecoding : kCFBooleanTrue when decoding
        an image frame.

        Test: fast/images/heic-as-background-image.html

        * platform/graphics/cg/ImageDecoderCG.cpp:
        (WebCore::createImageSourceOptions):

2021-06-17  Chris Dumez  <cdumez@apple.com>

        Add support for IDBCursor.request
        https://bugs.webkit.org/show_bug.cgi?id=227152

        Reviewed by Geoffrey Garen.

        Add support for IDBCursor.request:
        - https://w3c.github.io/IndexedDB/#dom-idbcursor-request

        Both Blink and Gecko already support this.

        No new tests, rebaselined existing tests.

        * Modules/indexeddb/IDBCursor.idl:

2021-06-17  Chris Dumez  <cdumez@apple.com>

        Enable some more release logging in for ephemeral sessions
        https://bugs.webkit.org/show_bug.cgi?id=227142

        Reviewed by Eric Carlson.

        Enable some more release logging in for ephemeral sessions, to faciliate debugging.

        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::SWServer):

2021-06-17  Ryosuke Niwa  <rniwa@webkit.org>

        Crash in WebCore::SlotAssignment::assignedNodesForSlot
        https://bugs.webkit.org/show_bug.cgi?id=224408
        <rdar://problem/76805764>

        Reviewed by Michael Catanzaro.

        Like webkit.org/b/225684, the release assertion failure was caused by RenderTreeUpdater::tearDownRenderers
        traversing the slot element for which we're currently calling Element::insertedIntoAncestor but had not yet
        called SlotAssignment::addSlotElementByName.

        Fixed the bug by returning early in SlotAssignment::assignedNodesForSlot when this condition holds,
        which is when the shadow root is connected to a document and HTMLSlotElement is in the middle of
        HTMLSlotElement::insertedIntoAncestor.

        It's not the most elegant solution but staying safe for now.

        Test: fast/shadow-dom/insert-slot-child-of-shadow-host-render-tree-invalidation-crash.html

        * dom/SlotAssignment.cpp:
        (WebCore::SlotAssignment::assignedNodesForSlot):
        * html/HTMLSlotElement.cpp:
        (WebCore::HTMLSlotElement::insertedIntoAncestor):
        * html/HTMLSlotElement.h:
        (WebCore::HTMLSlotElement::isInInsertedIntoAncestor): Added.

2021-06-17  Kate Cheney  <katherine_cheney@apple.com>

        Storage Access quirks should prompt up to twice if a user does not allow storage access
        https://bugs.webkit.org/show_bug.cgi?id=227099
        <rdar://problem/79409843>

        Reviewed by John Wilander.

        Remove hasDeniedCrossPageStorageAccess functions. They are not needed
        now that we are aligning storage access quirks with non-quirks by
        using maxNumberOfTimesExplicitlyDeniedStorageAccess. 

        * dom/DocumentStorageAccess.cpp:
        (WebCore::DocumentStorageAccess::requestStorageAccessQuickCheck):
        (WebCore::DocumentStorageAccess::requestStorageAccessForNonDocumentQuirk):
        * dom/DocumentStorageAccess.h:
        * dom/Element.cpp:
        (WebCore::Element::dispatchMouseEvent):
        * dom/Element.h:
        * loader/ResourceLoadObserver.h:
        (WebCore::ResourceLoadObserver::hasHadUserInteraction const):
        (WebCore::ResourceLoadObserver::setHasDeniedCrossPageStorageAccess): Deleted.
        (WebCore::ResourceLoadObserver::hasDeniedCrossPageStorageAccess const): Deleted.
        * page/Quirks.cpp:
        (WebCore::isStorageAccessQuirkDomainAndElement):
        (WebCore::Quirks::requestStorageAccessAndHandleClick const):
        (WebCore::Quirks::triggerOptionalStorageAccessQuirk const):
        (WebCore::hasDeniedCrossPageStorageAccess): Deleted.
        * page/Quirks.h:

2021-06-17  Aditya Keerthi  <akeerthi@apple.com>

        REGRESSION (r277067): Incorrect text color for default-button appearance
        https://bugs.webkit.org/show_bug.cgi?id=227129
        <rdar://problem/79032808>

        Reviewed by Tim Horton.

        Buttons styled with '-webkit-appearance: default-button' currently rely
        on the CSS value 'activebuttontext' for their text color. r277067
        updated the color to use system colors, for consistency with the rest
        of the platform.

        In macOS Monterey, the 'activebuttontext' color and the default button
        text color are not equivalent. 'Active' buttons no longer use
        NSBackgroundStyleEmphasized, while default buttons still do.
        Consequently, default buttons are rendered with an incorrect text color.

        To fix, use the correct system color for the text color of default
        buttons. To avoid changing the behavior of platforms other than
        macOS, the 'activebuttontext' color remains the default text color
        specified in RenderTheme.

        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::defaultButtonTextColor const):
        (WebCore::RenderTheme::platformDefaultButtonTextColor const):
        * rendering/RenderTheme.h:
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::platformDefaultButtonTextColor const):
        * rendering/TextPaintStyle.cpp:
        (WebCore::computeTextPaintStyle):

2021-06-17  Enrique Ocaña González  <eocanha@igalia.com>

        [GTK] Unexpected timeout in http/tests/media/video-play-stall-seek.html
        https://bugs.webkit.org/show_bug.cgi?id=196198

        Reviewed by Philippe Normand.

        Increased default GstDowloadBuffer size to prevent a race condition. To do that, we need
        to set the buffer-size of GstUriDecodebin (that will set the GstMultiQueue size, so we use
        the default value that would be used if no changes had been made, and also leaves
        GstDownloadBuffer size untouched, which wouldn't happen if no buffer-size had been set)
        and then set the desired max-size-bytes on GstDownloadBuffer.

        The race condition was that some times the player private readyState went up to
        HAVE_ENOUGH_DATA and then back to HAVE_CURRENT_DATA (triggering the expected waiting event),
        and some others times went directly to HAVE_CURRENT_DATA (no waiting event, test stalled).
        Increasing the buffer size gave more time for the double transition to happen.

        Still, these changes weren't enough to get the test passing, as with these changes the
        multiqueue sucked all the data, downloadbuffer fell to a low percentage and updateStates()
        paused the pipeline for rebuffering. The pipeline won't ever be unpaused because at that
        point WebKitWebSrc has reached EOS (no more file to download, a side effect of the current
        libsoup behaviour) and the buffering won't ever go up again (and trigger the unpause).

        This was solved by setting the downloadbuffer high-percent property to 0 when a seek
        is done after EOS has been received by WebKitWebSrc. This effectively forces the
        downloadbuffer to report 100% buffered, which unpauses the pipeline and lets the playback
        continue after seek.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::doSeek): Set high-percent when seeking after WebKitWebSrc EOS.
        (WebCore::MediaPlayerPrivateGStreamer::sourceSetup): Manually set buffer-size to its default value.
        (WebCore::MediaPlayerPrivateGStreamer::handleMessage): Receive the custom EOS message from WebKitWebSrc and remember it.
        (WebCore::MediaPlayerPrivateGStreamer::uriDecodeBinElementAddedCallback): Manully set max-size-bytes to a higher than default value.
        (WebCore::MediaPlayerPrivateGStreamer::downloadBufferFileCreatedCallback): Don't clean the reference to the downloadbuffer, as it'll be needed later.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h: Added m_hasWebKitWebSrcSentEOS to remember the EOS condition.
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webKitWebSrcCreate): Notify the EOS condition using the bus, so the player private can handle it.
        (CachedResourceStreamingClient::loadFailed): Extra useful logs.
        (CachedResourceStreamingClient::loadFinished): Ditto.

2021-06-17  Oriol Brufau  <obrufau@igalia.com>

        [css-logical] Implement logical property groups
        https://bugs.webkit.org/show_bug.cgi?id=226878

        Reviewed by Antti Koivisto.

        In order to have proper CSSOM support for logical properties, we will
        need to determine whether two properties belong to the same logical
        property group but with a different mapping logic.

        Before this patch, we only knew the physical properties belonging to the
        same logical property group as a given logical property. But given a
        physical property, we didn't know if there were logical properties that
        could map to it.

        Therefore this patch changes CSSProperties.json so that both logical and
        physical properties specify their logical property group.

        The code for resolving a logical property into its physical equivalent
        is now automatically generated.

        The CSSOM fix will be done in a follow-up (bug 226461).

        This patch introduces no behavior changes.

        * css/CSSProperties.json:
        * css/CSSProperty.cpp:
        * css/makeprop.pl:
        (nameToId):
        (addProperty):
        * platform/RectEdges.h:
        (WebCore::RectEdges::before):
        (WebCore::RectEdges::after):
        (WebCore::RectEdges::start):
        (WebCore::RectEdges::end):
        (WebCore::RectEdges::before const):
        (WebCore::RectEdges::after const):
        (WebCore::RectEdges::start const):
        (WebCore::RectEdges::end const):
        * platform/text/WritingMode.h:
        (WebCore::mapLogicalAxisToPhysicalAxis):

2021-06-17  Enrique Ocaña González  <eocanha@igalia.com>

        [GStreamer] Refactor MediaPlayerPrivateGStreamer::notifyPlayerOf*
        https://bugs.webkit.org/show_bug.cgi?id=204686

        Unreviewed WPE/GTK debug build fix.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfTrack): Removed assert left there from a previous version of the patch.

2021-06-17  Youenn Fablet  <youenn@apple.com>

        Fix RTCDataChannelInit::decode
        https://bugs.webkit.org/show_bug.cgi?id=226968

        Reviewed by Eric Carlson.

        Test: imported/w3c/web-platform-tests/webrtc-extensions/transfer-datachannel-service-worker.https.html

        * platform/mediastream/RTCDataChannelHandler.h:
        (WebCore::RTCDataChannelInit::decode):
        Make sure to use optionals of optionals.

2021-06-17  Enrique Ocaña González  <eocanha@igalia.com>

        [GStreamer] Refactor MediaPlayerPrivateGStreamer::notifyPlayerOf*
        https://bugs.webkit.org/show_bug.cgi?id=204686

        Reviewed by Philippe Normand.

        Refactored the notifyPlayerOf{Audio,Video,Text} family of methods into a single notifyPlayerOfTrack() one.
        Some Variant variables are needed in order to make several incompatible types work together and to auto-detect the type of track as an enum.

        Covered by existing tests.

        * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.h:
        (WebCore::InbandTextTrackPrivateGStreamer::create): Added method with a signature similar to the ones used by {Audio,Video}TrackPrivateGStreamer, so that it fits into the notifyPlayerOfTrack() template code.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfTrack): Template method that unifies the old notifyPlayerOf{Audio,Video,Text}() implementations.
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfAudio): Deleted. Refactored into notifyPlayerOfTrack().
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfVideo): Ditto.
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfText): Ditto.
        (WebCore::MediaPlayerPrivateGStreamer::audioChangedCallback): Call the new notifyPlayerOfTrack() refactored implementation.
        (WebCore::MediaPlayerPrivateGStreamer::textChangedCallback): Ditto.
        (WebCore::MediaPlayerPrivateGStreamer::videoChangedCallback): Ditto.
        (WebCore::MediaPlayerPrivateGStreamer::purgeInvalidAudioTracks): Deleted. Now implemented directly inside notifyPlayerOfTrack().
        (WebCore::MediaPlayerPrivateGStreamer::purgeInvalidVideoTracks): Ditto.
        (WebCore::MediaPlayerPrivateGStreamer::purgeInvalidTextTracks): Ditto.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h: Deleted notifyPlayerOf{Audio,Video,Text}(), added notifyPlayerOfTrack(), deleted purgeInvalid{Audio,Video,Text}Tracks().

2021-06-17  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r278978.
        https://bugs.webkit.org/show_bug.cgi?id=227115

        The patch seems to be breaking the Debian and Ubuntu builds.

        Reverted changeset:

        "[GStreamer] Refactor
        MediaPlayerPrivateGStreamer::notifyPlayerOf*"
        https://bugs.webkit.org/show_bug.cgi?id=204686
        https://trac.webkit.org/changeset/278978

2021-06-17  Enrique Ocaña González  <eocanha@igalia.com>

        [GStreamer] Refactor MediaPlayerPrivateGStreamer::notifyPlayerOf*
        https://bugs.webkit.org/show_bug.cgi?id=204686

        Reviewed by Philippe Normand.

        Refactored the notifyPlayerOf{Audio,Video,Text} family of methods into a single notifyPlayerOfTrack() one.
        Some Variant variables are needed in order to make several incompatible types work together and to auto-detect the type of track as an enum.

        Covered by existing tests.

        * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.h:
        (WebCore::InbandTextTrackPrivateGStreamer::create): Added method with a signature similar to the ones used by {Audio,Video}TrackPrivateGStreamer, so that it fits into the notifyPlayerOfTrack() template code.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfTrack): Template method that unifies the old notifyPlayerOf{Audio,Video,Text}() implementations.
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfAudio): Deleted. Refactored into notifyPlayerOfTrack().
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfVideo): Ditto.
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfText): Ditto.
        (WebCore::MediaPlayerPrivateGStreamer::audioChangedCallback): Call the new notifyPlayerOfTrack() refactored implementation.
        (WebCore::MediaPlayerPrivateGStreamer::textChangedCallback): Ditto.
        (WebCore::MediaPlayerPrivateGStreamer::videoChangedCallback): Ditto.
        (WebCore::MediaPlayerPrivateGStreamer::purgeInvalidAudioTracks): Deleted. Now implemented directly inside notifyPlayerOfTrack().
        (WebCore::MediaPlayerPrivateGStreamer::purgeInvalidVideoTracks): Ditto.
        (WebCore::MediaPlayerPrivateGStreamer::purgeInvalidTextTracks): Ditto.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h: Deleted notifyPlayerOf{Audio,Video,Text}(), added notifyPlayerOfTrack(), deleted purgeInvalid{Audio,Video,Text}Tracks().

2021-06-16  Myles C. Maxfield  <mmaxfield@apple.com>

        Make FontFaceSet::Iterator's bounds check more robust
        https://bugs.webkit.org/show_bug.cgi?id=227048
        <rdar://problem/78871890>

        Reviewed by Simon Fraser.

        We were checking for one specific bad value, when we should have been checking for all bad values.

        * css/FontFaceSet.cpp:
        (WebCore::FontFaceSet::Iterator::next):

2021-06-16  Chris Dumez  <cdumez@apple.com>

        Document's execCommand() / queryCommand*() should throw an exception on non-HTML/XHTML documents
        https://bugs.webkit.org/show_bug.cgi?id=227016

        Reviewed by Darin Adler.

        Update Document's execCommand() / queryCommand*() to throw an InvalidStateError when the document
        is not an HTML/XHTML document. This matches Blink's behavior. Firefox is even stricter and throws
        for all non HTML documents (including XHTML).

        Test: fast/dom/Document/document-execcommand.html

        * dom/Document.cpp:
        (WebCore::Document::execCommand):
        (WebCore::Document::queryCommandEnabled):
        (WebCore::Document::queryCommandIndeterm):
        (WebCore::Document::queryCommandState):
        (WebCore::Document::queryCommandSupported):
        (WebCore::Document::queryCommandValue):
        * dom/Document.h:

2021-06-16  Cameron McCormack  <heycam@apple.com>

        Make RenderLayer::hitTestLayer not assume its renderer is a RenderBox
        https://bugs.webkit.org/show_bug.cgi?id=227004
        <rdar://79265788>

        Reviewed by Simon Fraser.

        An inline box might have a clip-path on it, so we can't assume that
        the layer's renderer is a RenderBox. Avoid the assertion by hit testing
        incorrectly for now.

        Test: css3/masking/clip-path-hit-test-on-inline-iframe-parent.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::hitTestLayer):

2021-06-16  Chris Dumez  <cdumez@apple.com>

        Protect Element before calling dispatchMouseEvent() on it
        https://bugs.webkit.org/show_bug.cgi?id=226767
        <rdar://problem/79009112>

        Reviewed by Ryosuke Niwa.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::updateMouseEventTargetNode):
        (WebCore::EventHandler::dispatchMouseEvent):
        * page/PointerLockController.cpp:
        (WebCore::PointerLockController::dispatchLockedMouseEvent):
        * page/Quirks.cpp:
        (WebCore::Quirks::triggerOptionalStorageAccessQuirk const):

2021-06-16  Peng Liu  <peng.liu6@apple.com>

        Some http/tests/ are crashing with ASSERTION FAILED: isInRoutingArbitrationForToken(token) || m_setupArbitrationOngoing
        https://bugs.webkit.org/show_bug.cgi?id=226896

        Reviewed by Darin Adler.

        A follow-up patch to fix an issue in r278922. Remove the call to `contains()`
        before `remove()` on a `WeakHashSet`.

        * platform/audio/mac/SharedRoutingArbitrator.mm:
        (WebCore::SharedRoutingArbitrator::endRoutingArbitrationForToken):

2021-06-16  Chris Dumez  <cdumez@apple.com>

        FileReader.readAsArrayBuffer misses checking for the type of blob param
        https://bugs.webkit.org/show_bug.cgi?id=226640
        <rdar://problem/79193198>

        Reviewed by Youenn Fablet.

        The Blob parameter to FileReader.readAsArrayBuffer / readAsBinaryString / readAsText / readAsDataURL
        should not be nullable as per the specification:
        - https://w3c.github.io/FileAPI/#APIASynch

        This patch aligns us with the specification and with the behavior of both Blink and Gecko.

        Test: fast/files/filereader-invalid-blob.html

        * fileapi/FileReader.cpp:
        (WebCore::FileReader::readAsArrayBuffer):
        (WebCore::FileReader::readAsBinaryString):
        (WebCore::FileReader::readAsText):
        (WebCore::FileReader::readAsDataURL):
        * fileapi/FileReader.h:
        * fileapi/FileReader.idl:

2021-06-16  Sihui Liu  <sihui_liu@apple.com>

        Add lock for static cursorMap in MemoryCursor
        https://bugs.webkit.org/show_bug.cgi?id=226806

        Reviewed by Chris Dumez.

        As cursorMap can be accessed from multiple WorkQueues.

        * Modules/indexeddb/server/MemoryCursor.cpp:
        (WebCore::IDBServer::MemoryCursor::MemoryCursor):
        (WebCore::IDBServer::MemoryCursor::~MemoryCursor):
        (WebCore::IDBServer::MemoryCursor::cursorForIdentifier):

2021-06-16  Timothy Hatcher  <timothy@apple.com>

        REGRESSION (r273329): Logging of most errors like CSP and promise rejections fail logging to the system console
        https://bugs.webkit.org/show_bug.cgi?id=227080

        Unreviewed, reverting r273329.

        * dom/Document.cpp:
        (WebCore::Document::didLogMessage):
        * page/PageConsoleClient.cpp:
        (WebCore::PageConsoleClient::addMessage):

2021-06-16  Kimmo Kinnunen  <kkinnunen@apple.com>

        WebGL2 clientWaitSync does not flush when requested
        https://bugs.webkit.org/show_bug.cgi?id=227064

        Reviewed by Kenneth Russell.

        Flush when clientWaitSync is called with SYNC_FLUSH_COMMANDS_BIT.
        Theoretically the sync object might not be inserted to the command
        buffer unless the wait flushes or client ensures flush by other
        means.

        No new tests, hard to observe externally.

        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::clientWaitSync):

2021-06-16  Chris Dumez  <cdumez@apple.com>

        [Hardening] Better protect against overflows in the WebAudioBufferList constructor
        https://bugs.webkit.org/show_bug.cgi?id=227077
        <rdar://problem/78222665>

        Reviewed by Geoffrey Garen.

        Make sure `sizeof(AudioBuffer) * std::max(1U, bufferCount)` doesn't overflow.

        * platform/audio/cocoa/WebAudioBufferList.cpp:
        (WebCore::WebAudioBufferList::WebAudioBufferList):

2021-06-16  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] gst_element_get_request_pad deprecated in 1.20
        https://bugs.webkit.org/show_bug.cgi?id=226974

        Reviewed by Xabier Rodriguez-Calvar.

        In GStreamer 1.20 gst_element_get_request_pad() was renamed to gst_element_request_pad_simple(),
        so create an alias for older versions.

        * platform/graphics/gstreamer/GStreamerAudioMixer.cpp:
        (WebCore::GStreamerAudioMixer::registerProducer):
        * platform/graphics/gstreamer/GStreamerCommon.h:

2021-06-16  Tim Nguyen  <ntim@apple.com>

        Make CSS.supports() return false for internal CSS properties
        https://bugs.webkit.org/show_bug.cgi?id=224930

        Reviewed by Antti Koivisto.

        Test: LayoutTests/fast/backgrounds/background-repeat-x-y-parse.html

        Examples that are now rejected:

        CSS.supports("background-repeat-x: inherit")
        CSS.supports("background-repeat-x", "inherit")
        CSS.supports("background-repeat-y: inherit")
        CSS.supports("background-repeat-y", "inherit")

        * css/DOMCSSNamespace.cpp:
        (WebCore::DOMCSSNamespace::supports):
        * css/parser/CSSParserImpl.cpp:
        (WebCore::CSSParserImpl::consumeDeclaration):

2021-06-16  Toshio Ogasawara  <toshio.ogasawara@access-company.com>

        [MSE] Crash when getting audioTracks, videoTracks, textTracks of sourceBuffer after executing MediaSource::removeSourceBuffer()
        https://bugs.webkit.org/show_bug.cgi?id=227018

        Reviewed by Eric Carlson.

        Fixed not to refer to m_source when isRemoved() is true in SourceBuffer::videoTracks(),
        SourceBuffer::audioTracks(), SourceBuffer::textTracks().

        Test: media/media-source/media-source-get-tracks-crash.html

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::videoTracks):
        (WebCore::SourceBuffer::audioTracks):
        (WebCore::SourceBuffer::textTracks):

2021-06-16  Alan Bujtas  <zalan@apple.com>

        Content moves up when hovering over a link on Hacker News
        https://bugs.webkit.org/show_bug.cgi?id=226852
        <rdar://78537231>

        Reviewed by Antti Koivisto.

        Legacy line layout integral-rounds the root inline box's vertical position and this integral position
        gets propagated down to the descendant inline boxes when descendantsHaveSameLineHeightAndBaseline() is true.
        See LegacyInlineFlowBox::addToLine and LegacyInlineFlowBox::placeBoxesInBlockDirection for more details.
        This patch attempts to mirror this behavior in IFC.

        Test: fast/inline/hidpi-legacy-integral-rounding-on-inline-boxes.html

        * layout/integration/LayoutIntegrationInlineContentBuilder.cpp:
        (WebCore::LayoutIntegration::InlineContentBuilder::computeLineLevelVisualAdjustmentsForRuns const):

2021-06-16  Frederic Wang  <fwang@igalia.com>

        Nullptr crash in positionInParentBeforeNode via InsertTextCommand::doApply
        https://bugs.webkit.org/show_bug.cgi?id=226870

        Reviewed by Ryosuke Niwa.

        deleteSelection call In InsertTextCommand::doApply() can make the endingSelection() orphan.
        If that happens, exit early to avoid dereferencing a nullptr pointer later.
        Test: fast/editing/insert-text-orphaned-summary-crash.html

        * editing/InsertTextCommand.cpp:
        (WebCore::InsertTextCommand::doApply):

2021-06-16  Per Arne  <pvollan@apple.com>

        Update Media Accessibility preferences in the WebContent process from the UI process
        https://bugs.webkit.org/show_bug.cgi?id=227031
        <rdar://78614882>

        Reviewed by Eric Carlson.

        Due to stricter sandboxing in the WebContent process, Media Accessibility preferences should be updated from the UI process.
        The preferences for caption display mode and preferred caption languages are being cached, and the cached value will be used
        if it has been set.

        * WebCore.xcodeproj/project.pbxproj:
        * page/CaptionUserPreferences.h:
        * page/CaptionUserPreferencesMediaAF.cpp:
        (WebCore::cachedCaptionDisplayMode):
        (WebCore::cachedPreferredLanguages):
        (WebCore::CaptionUserPreferencesMediaAF::captionDisplayMode const):
        (WebCore::CaptionUserPreferencesMediaAF::platformCaptionDisplayMode):
        (WebCore::CaptionUserPreferencesMediaAF::setCachedCaptionDisplayMode):
        (WebCore::CaptionUserPreferencesMediaAF::preferredLanguages const):
        (WebCore::CaptionUserPreferencesMediaAF::platformPreferredLanguages):
        (WebCore::CaptionUserPreferencesMediaAF::setCachedPreferredLanguages):
        * page/CaptionUserPreferencesMediaAF.h:

2021-06-16  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] clang analysis: Unlocked access in ImageDecoderGStreamer.cpp
        https://bugs.webkit.org/show_bug.cgi?id=226495

        Reviewed by Adrian Perez de Castro.

        Remove unlocked access to the the m_messageDispatched instance variable. Also there is no
        need to wait on the condition if the dispatching happens synchronously in the current
        thread. No need to notify the condition either before dispatching, the only call to wait()
        is after the asynchronous dispatch has been scheduled.

        * platform/graphics/gstreamer/ImageDecoderGStreamer.cpp:
        (WebCore::ImageDecoderGStreamer::InnerDecoder::preparePipeline):

2021-06-16  Martin Robinson  <mrobinson@webkit.org>

        Replace invalidSnapOffsetIndex with std::optional<unsigned>
        https://bugs.webkit.org/show_bug.cgi?id=226654

        Reviewed by Simon Fraser.

        Use std::optional<unsigned> in order to represent the situation
        where we do not have a snap point selected rather than UINT_MAX.

        No new tests. This should not change behavior.

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::setActiveScrollSnapIndices):
        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ScrollSnapOffsetsInfo.cpp:
        (WebCore::indicesOfNearestSnapOffsets): Return a std::pair instead of splitting the
        return values into the argument list.
        (WebCore::closestSnapOffsetWithInfoAndAxis):
        (WebCore::LayoutScrollSnapOffsetsInfo::closestSnapOffset const):
        (WebCore::FloatScrollSnapOffsetsInfo::closestSnapOffset const):
        * page/scrolling/ScrollSnapOffsetsInfo.h:
        * page/scrolling/ScrollingStateScrollingNode.cpp:
        (WebCore::ScrollingStateScrollingNode::setCurrentHorizontalSnapPointIndex):
        (WebCore::ScrollingStateScrollingNode::setCurrentVerticalSnapPointIndex):
        (WebCore::ScrollingStateScrollingNode::dumpProperties const):
        * page/scrolling/ScrollingStateScrollingNode.h:
        (WebCore::ScrollingStateScrollingNode::currentHorizontalSnapPointIndex const):
        (WebCore::ScrollingStateScrollingNode::currentVerticalSnapPointIndex const):
        * page/scrolling/ScrollingTree.h:
        (WebCore::ScrollingTree::setActiveScrollSnapIndices):
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::dumpProperties const):
        * page/scrolling/ScrollingTreeScrollingNode.h: Move some methods into the
        source file to satisfy the style checker. WEBCORE_EXPORT is applied to the
        entire class declaration.
        * page/scrolling/ThreadedScrollingTree.cpp:
        (WebCore::ThreadedScrollingTree::currentSnapPointIndicesDidChange):
        (WebCore::ThreadedScrollingTree::setActiveScrollSnapIndices):
        * page/scrolling/ThreadedScrollingTree.h:
        * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.h:
        * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.mm:
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::activeScrollSnapIndexForAxis const):
        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::activeScrollSnapIndexForAxis const):
        (WebCore::ScrollAnimator::setActiveScrollSnapIndexForAxis):
        * platform/ScrollAnimator.h:
        * platform/ScrollController.cpp:
        (WebCore::ScrollController::activeScrollSnapIndexForAxis const):
        (WebCore::ScrollController::setActiveScrollSnapIndexForAxis): When there is no new
        snap index, we need to actively change the value to std::nullopt. This wasn't
        necessary because ScrollableArea was covering up this case in the past as a side-effect.
        (WebCore::ScrollController::setNearestScrollSnapIndexForAxisAndOffset):
        (WebCore::ScrollController::resnapAfterLayout): Also resnap if the snapped index is
        greater than the current one. This case was being covered up by a side-effect in
        ScrollableArea.
        * platform/ScrollController.h:
        * platform/ScrollSnapAnimatorState.cpp:
        (WebCore::ScrollSnapAnimatorState::setupAnimationForState):
        (WebCore::ScrollSnapAnimatorState::targetOffsetForStartOffset const): Return a std::pair
        instead of splitting the output values into the argument list.
        * platform/ScrollSnapAnimatorState.h:
        (WebCore::ScrollSnapAnimatorState::activeSnapIndexForAxis const):
        (WebCore::ScrollSnapAnimatorState::setActiveSnapIndexForAxis):
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::currentHorizontalSnapPointIndex const):
        (WebCore::ScrollableArea::currentVerticalSnapPointIndex const):
        (WebCore::ScrollableArea::setCurrentHorizontalSnapPointIndex):
        (WebCore::ScrollableArea::setCurrentVerticalSnapPointIndex):
        (WebCore::ScrollableArea::resnapAfterLayout):
        * platform/ScrollableArea.h:

2021-06-15  Peng Liu  <peng.liu6@apple.com>

        some http/tests/ are crashing with ASSERTION FAILED: isInRoutingArbitrationForToken(token) || m_setupArbitrationOngoing
        https://bugs.webkit.org/show_bug.cgi?id=226896

        Reviewed by Eric Carlson.

        When the `RoutingArbiter` fails to `-[beginArbitrationWithCategory:completionHandler:]`,
        a token won't be added to `m_tokens`. Therefore, we should remove the assertion
        in `SharedRoutingArbitrator::endRoutingArbitrationForToken()`.

        * platform/audio/mac/SharedRoutingArbitrator.mm:
        (WebCore::SharedRoutingArbitrator::endRoutingArbitrationForToken):

2021-06-15  Alan Bujtas  <zalan@apple.com>

        Cleanup RenderElement::RendererCreationType
        https://bugs.webkit.org/show_bug.cgi?id=227033

        Reviewed by Simon Fraser.

        Let the caller define the preferred type of renderer for certain display type values.

        * html/HTMLFieldSetElement.cpp:
        (WebCore::HTMLFieldSetElement::createElementRenderer):
        * html/HTMLSummaryElement.cpp:
        (WebCore::HTMLSummaryElement::createElementRenderer):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::createFor):
        * rendering/RenderElement.h:
        (WebCore::RenderElement::createFor):

2021-06-15  Said Abou-Hallawa  <said@apple.com>

        [GPU Process] ConcreteImageBuffer::baseTransform() returns incorrect transform for unaccelerated ImageBuffer
        https://bugs.webkit.org/show_bug.cgi?id=227044
        <rdar://78642742>

        Reviewed by Simon Fraser.

        The static constant ImageBufferBackend::isOriginAtUpperLeftCorner is used
        to tell where the origin of the physical graphics context. For CG platforms,
        it is at the bottom left corner. This requires the coordinates system to
        be moved to the top-left corner and flipped.

        The fix is:
        1) Rename isOriginAtUpperLeftCorner to isOriginAtBottomLeftCorner since
           it is a description for the physical graphics context. All the logical
           graphics contexts have to have their coordinates system at the top-left
           corner.
        2) Set isOriginAtBottomLeftCorner to true in ImageBufferCGBackend only
           so all the super classes inherit the 'true' value. This includes 
           ImageBufferShareableBitmapBackend for CG platforms.

        Test: fast/canvas/canvas-large-dimensions-drawing.html

        * platform/graphics/ConcreteImageBuffer.h:
        * platform/graphics/ImageBufferBackend.h:
        * platform/graphics/cg/ImageBufferCGBackend.h:
        * platform/graphics/cg/ImageBufferCGBitmapBackend.h:
        * platform/graphics/cg/ImageBufferIOSurfaceBackend.h:

2021-06-15  Andres Gonzalez  <andresg_22@apple.com>

        iOS - VoiceOver reads incorrectly in content editable element if role="document".
        https://bugs.webkit.org/show_bug.cgi?id=227035
        rdar://78776169

        Reviewed by Chris Fleizach.

        On iOS, VoiceOver was announcing <div contenteditable="true" role="document">
        as a landmark and not as editable text. Furthermore, VoiceOver wasn't
        echoing keyboard input once the element became interactive.
        The solution is to return AccessibilityRole::TextArea for an element
        with these attributes instead of Document.
        Used shouldIgnoreRoleAttribute to special case this scenario.

        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::shouldIgnoreAttributeRole const):
        * accessibility/AccessibilityObjectInterface.h:
        Removed shouldIgnoreRoleAttribute from the AXObject interface since it
        doesn't need to be exposed outside the AXObject class hierarchy.
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::shouldIgnoreAttributeRole const):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/AccessibilityTreeItem.h:
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper _accessibilityTextEntryTraits]): Code cleanup.
        * accessibility/isolatedtree/AXIsolatedObject.cpp:
        (WebCore::AXIsolatedObject::shouldIgnoreAttributeRole const): Deleted.
        * accessibility/isolatedtree/AXIsolatedObject.h:

2021-06-15  Alex Christensen  <achristensen@webkit.org>

        Allow legacy SecurityOrigin behavior for x-apple-ql-id2 scheme
        https://bugs.webkit.org/show_bug.cgi?id=226993
        <rdar://76474042>

        Reviewed by Tim Horton.

        Why have one x-apple-ql-id scheme when you can have 2?

        * page/SecurityOrigin.cpp:
        (WebCore::shouldTreatAsUniqueOrigin):
        Also move the linked-on-or-before check to after the hasSpecialScheme check which will be true for most URLs (http, https, file, etc.)

2021-06-15  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Another crash under gst_element_add_pad
        https://bugs.webkit.org/show_bug.cgi?id=225765

        Reviewed by Adrian Perez de Castro.

        Decodebin3 in GStreamer <= 1.16 does not respect user-supplied select-stream events. So we
        need to relax the release assert for these versions. This bug was fixed in:
        https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/commit/b41b87522f59355bb21c001e9e2df96dc6956928

        * platform/graphics/gstreamer/ImageDecoderGStreamer.cpp:
        (WebCore::ImageDecoderGStreamer::InnerDecoder::connectDecoderPad):

2021-06-06  Darin Adler  <darin@apple.com>

        Delete some recently-obsoleted files
        https://bugs.webkit.org/show_bug.cgi?id=226705

        Reviewed by Chris Dumez.

        * Sources.txt: Removed CSSCustomIdentValue.cpp.
        * WebCore.xcodeproj/project.pbxproj: Removed CSSCustomIdentValue.cpp/h.

        * css/CSSCustomIdentValue.cpp: Removed.
        * css/CSSCustomIdentValue.h: Removed.
        * css/calc/CSSCalcExpressionNodeParser.cpp: Added TextStream.h include.
        * dom/SuccessOr.h: Removed.

2021-06-15  Wenson Hsieh  <wenson_hsieh@apple.com>

        [GPU Process] Add a bounds check before reading data length for out-of-line display list items
        https://bugs.webkit.org/show_bug.cgi?id=227029
        rdar://79343645

        Reviewed by Chris Dumez.

        Add some additional hardening when decoding out-of-line display list items.

        * platform/graphics/displaylists/DisplayListIterator.cpp:
        (WebCore::DisplayList::DisplayList::Iterator::updateCurrentItem):

        Currently, it's possible to perform an out-of-bounds read in the shared display list item buffer, since we only
        perform a bounds check after grabbing the data length (8 bytes) from the buffer after reading and validating an
        out-of-line display list item type.

        Mitigate this by validating that there is enough buffer capacity for both the padded item type value and encoded
        data length, before we attempt to read the encoded data length.

2021-06-15  Myles C. Maxfield  <mmaxfield@apple.com>

        GraphicsContext::apply{Fill,Stroke}Pattern needs to do nothing if there is no fill/stroke pattern set
        https://bugs.webkit.org/show_bug.cgi?id=227015
        <rdar://problem/79301173>

        Reviewed by Simon Fraser.

        Now that we have a GPU Process, we can't trust incoming IPC. So, this patch protects
        against trying to apply the curretn fill/stroke pattern when there isn't one set.

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContextCG::applyStrokePattern):
        (WebCore::GraphicsContextCG::applyFillPattern):
        * platform/graphics/win/GraphicsContextDirect2D.cpp:
        (WebCore::GraphicsContextDirect2D::applyStrokePattern):
        (WebCore::GraphicsContextDirect2D::applyFillPattern):

2021-06-15  Myles C. Maxfield  <mmaxfield@apple.com>

        GraphicsContext restores need to do nothing if the state stack is empty
        https://bugs.webkit.org/show_bug.cgi?id=227009
        <rdar://problem/79301368>

        Reviewed by Simon Fraser.

        Now that we have a GPU Process, we can't trust incoming IPC. So, this patch protects
        against unbalanced save/restore commands in GraphicsContexts.

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContextCairo::restore):
        * platform/graphics/cairo/PlatformContextCairo.cpp:
        (WebCore::PlatformContextCairo::restore):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContextCG::restore):
        * platform/graphics/nicosia/cairo/NicosiaCairoOperationRecorder.cpp:
        (Nicosia::CairoOperationRecorder::restore):
        * platform/graphics/win/GraphicsContextDirect2D.cpp:
        (WebCore::GraphicsContextDirect2D::restore):

2021-06-15  Chris Lord  <clord@igalia.com>

        Scrollbars are not clipped to layer bounds in RenderLayerBacking
        https://bugs.webkit.org/show_bug.cgi?id=226823

        Reviewed by Simon Fraser.

        Mask contents to bounds of overflow controls containers in RenderLayerBacking.

        Test: compositing/scrolling/async-overflow-scrolling/overflow-controls-container-clips-scrollbars.html

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGeometry):
        (WebCore::RenderLayerBacking::adjustOverflowControlsPositionRelativeToAncestor):

2021-06-15  Eric Carlson  <eric.carlson@apple.com>

        [Mac] CoreMedia WrapperClass does not need alignment fixup
        https://bugs.webkit.org/show_bug.cgi?id=226978
        rdar://78864290

        Reviewed by Geoffrey Garen and Dan Bernstein.

        * platform/graphics/cocoa/WebCoreDecompressionSession.mm:
        (WebCore::WebCoreDecompressionSession::enqueueSample): static_assert CMBufferQueueRef
        callback struct alignment and version size.

2021-06-15  Alan Bujtas  <zalan@apple.com>

        [LFC][TFC] Add support for preferred width computation when mixed width types are present
        https://bugs.webkit.org/show_bug.cgi?id=227010

        Reviewed by Antti Koivisto.

        This is in preparation for supporting available space distribution with mixed width types (e.g. percent and fixed).
        While this patch only addresses the preferred width computation for the table, certain values already work with the existing distribution code. 

        Test: fast/layoutformattingcontext/table-space-distribution-mixed-width-type-simple.html

        * layout/formattingContexts/table/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::computedPreferredWidthForColumns):

2021-06-15  Martin Robinson  <mrobinson@igalia.com>

        [css-scroll-snap] Scroll snap offsets are interpreted as scroll positions in ScrollableArea
        https://bugs.webkit.org/show_bug.cgi?id=226572

        Reviewed by Simon Fraser.

        Test: css3/scroll-snap/scroll-snap-right-to-left-initial-snapping.html

        This is also covered by existing WPT tests, but these tests are composite reference
        tests where there are still some failing elements.

        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::nearestActiveSnapPoint): Use scroll offsets instead of positions.
        (WebCore::ScrollableArea::updateScrollSnapState): Ditto.

2021-05-31  Sergio Villar Senin  <svillar@igalia.com>

        [css-flexbox] Do not compute the min-max sizes of flex items twice
        https://bugs.webkit.org/show_bug.cgi?id=226463

        Reviewed by Simon Fraser.

        When determining the flex base size, the item’s min and max main sizes are ignored (no clamping occurs).
        Those limits are used to compute the item's hypothetical main size and also later when the flexible
        lengths are resolved. The thing is that we were running the code that clamps the flex item size twice instead
        of computing those limits once and apply them twice.

        From now one, we just compute them once and store the limits in a std::pair in the FlexItem class. This means
        that the FlexItem is able to compute the hypothetical main size on its own and does not need it to be passed
        as an argument.

        No new tests as this is already being tested by dozens of tests.

        * rendering/FlexibleBoxAlgorithm.cpp:
        (WebCore::FlexItem::FlexItem):
        (WebCore::FlexItem::constrainSizeByMinMax const): Clamp the passed in size by the stored min & max sizes.
        * rendering/FlexibleBoxAlgorithm.h:
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::computeFlexItemMinMaxSizes): Renamed from adjustChildSizeForMinAndMax and
        without the childSize argument which is no longer needed.
        (WebCore::RenderFlexibleBox::constructFlexItem): Use constrainSizeByMinMax.
        (WebCore::RenderFlexibleBox::resolveFlexibleLengths): Ditto.
        (WebCore::RenderFlexibleBox::adjustChildSizeForMinAndMax): Deleted.
        * rendering/RenderFlexibleBox.h:

2021-06-11  Sergio Villar Senin  <svillar@igalia.com>

        logged in GitHub issue pages have bad layout for "Notifications Customize" link
        https://bugs.webkit.org/show_bug.cgi?id=226859

        Reviewed by Alan Bujtas.

        Test: imported/w3c/web-platform-tests/html/rendering/the-details-element/summary-display-list-item-002.html

        In r278280 we made display:list-item on <summary> elements to fallback to display:flexbox in order not to
        show two markers. However there is no reason why it should be a flexible box instead of a block container,
        actually is causing issues in some sites. We better fallback to block instead of flexbox renderer.

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::createFor): create a RenderBlockFlow when OnlyCreateBlockAndFlexboxRenderers is
        specified (right now only by summary elements).

2021-06-15  Said Abou-Hallawa  <said@apple.com>

        [CG] Create a sub-image when drawing an image only if the destination image will be enlarged, rotated or sheared
        https://bugs.webkit.org/show_bug.cgi?id=226916
        <rdar://71712144>

        Reviewed by Simon Fraser.

        When drawing only part of the image, we may want to create a sub-image 
        first and draw this sub-image. But creating the sub-image is expensive.
        So we use SubimageCacheWithTimer to avoid recreating them very often.
        If the same part of the image is drawn multiple times, creating the sub-
        image is a win. But if the part of the image is drawn only once, drawing
        the  whole image to a clipped context will be faster. In some cases, we
        must to draw the part of the image through a sub-image. For example, if
        the destination rectangle stretches only a part of an image, interpolating
        the sub-image will give the correct display.

        In this patch GraphicsContextCG::drawNativeImage() is re-factored to do
        the following:
        1) Normalize the srcRect and destRect
        2) Simplify calculation of adjustDestRect and subimageRect using FloatRect
           and FloatSize math
        3) Move the heuristic which decides whether to use a sub-image or not to
           a separate function.

        A sub-image will be created if:
        1) An interpolation will be performed when drawing the sub-image
        2) and one of the following:
            a) If the context is rotated or sheared
            b) If destRect.size() / srcRect.size() is non-uniformly scaled
            c) If destRect.size() / srcRect.size() is uniformly enlarging in
               both direction

        * html/canvas/CanvasRenderingContext2DBase.cpp:
        (WebCore::normalizeRect): Deleted.
        * platform/graphics/FloatRect.cpp:
        (WebCore::normalizeRect):
        * platform/graphics/FloatRect.h:
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::shouldUseSubimage):
        (WebCore::getSubimage):
        (WebCore::imageLogicalSize):
        (WebCore::GraphicsContextCG::drawNativeImage):
        * platform/graphics/transforms/AffineTransform.h:
        (WebCore::AffineTransform::isRotateOrShear const):

2021-06-15  Martin Robinson  <mrobinson@webkit.org>

        [css-scroll-snap] New snap containers always snap to the first scroll position
        https://bugs.webkit.org/show_bug.cgi?id=226630

        Reviewed by Simon Fraser.

        There are two situations where we should not immediately snap to the first snap position
        of a scroller after initial layout:
            1. If that scroll is right-to-left. In this case the last snap position is closest to
               the origin.
            2. If the scroller uses proximity snapping and the first snap position is far enough
               away from the origin that it isn't yet active.
        Previously, WebKit was always snapping to the first position. The change fixes that by
        not snapping to the 0 index snap point immediately after initial layout and only snapping
        to an eligible snap positions after running a snap point search.

        No new tests. This change fixes two existing WPT tests:
            - imported/w3c/web-platform-tests/css/css-scroll-snap/scroll-target-snap-003.htm
            - imported/w3c/web-platform-tests/css/css-scroll-snap/snap-after-initial-layout/scroll-snap-initial-layout-000.htm

        * page/scrolling/ScrollSnapOffsetsInfo.cpp:
        (WebCore::closestSnapOffsetWithInfoAndAxis): Pull in isNearEnoughToOffsetForProximity as
        an anonymous function and use it to avoid snapping to the first and last position if
        they are too far for proximity snapping.
        * page/scrolling/ScrollingStateScrollingNode.cpp:
        (WebCore::ScrollingStateScrollingNode::dumpProperties const): Use invalidSnapOffsetIndex as
        the default for the snap index property. Interpret 0 as a valid snap position.
        * page/scrolling/ScrollingStateScrollingNode.h: Ditto.
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::dumpProperties const): Ditto.
        * page/scrolling/ScrollingTreeScrollingNode.h: Ditto.
        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::resnapAfterLayout): Added this method that passes through to ScrollController.
        (WebCore::ScrollAnimator::updateActiveScrollSnapIndexForOffset): Simplified setActiveScrollSnapIndicesForOffset
        into updateActiveScrollSnapIndexForClientOffset.
        * platform/ScrollAnimator.h: Added method definition.
        * platform/ScrollController.cpp:
        (WebCore::ScrollController::setSnapOffsetsInfo): Use updateActiveScrollSnapIndexForClientOffset now.
        (WebCore::ScrollController::activeScrollSnapIndexForAxis const): Return invalidSnapOffsetIndex 
        when snapping is disabled.
        (WebCore::ScrollController::setNearestScrollSnapIndexForAxisAndOffset): No longer clamp the scroll
        position to the first and last snap points. We might be scrolling to a position before or after
        them that isn't subject to proximity snapping.
        (WebCore::ScrollController::updateActiveScrollSnapIndexForClientOffset): Renamed from setActiveScrollSnapIndicesForOffset
        because it always just took the client's current offset.
        (WebCore::ScrollController::resnapAfterLayout): Added this helper which snaps in axes that aren't currently
        snapped to a snap position after a layout.
        * platform/ScrollController.h: Removed unused method that used 0 incorrectly as an invalid snap position.
        Update method definitions.
        * platform/ScrollSnapAnimatorState.h: Use invalidSnapOffsetIndex to signify no snapping.
        * platform/ScrollSnapAnimatorState.cpp:
        (WebCore::ScrollSnapAnimatorState::targetOffsetForStartOffset const): No longer clamp offsets to first and
        last scroll snap offsets.
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::currentHorizontalSnapPointIndex const): Ditto.
        (WebCore::ScrollableArea::currentVerticalSnapPointIndex const): Ditto.
        (WebCore::ScrollableArea::resnapAfterLayout): Call into ScrollController::resnapAfterLayout.

2021-06-14  Myles C. Maxfield  <mmaxfield@apple.com>

        Font::applyTransforms() can redirect GlyphBuffer's internal pointers
        https://bugs.webkit.org/show_bug.cgi?id=226997
        <rdar://problem/78704666>

        Reviewed by Ryosuke Niwa.

        After calling Font::applyTransforms(), we need to update any pointers which point into the GlyphBuffer.

        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::applyFontTransforms):

2021-06-14  Kate Cheney  <katherine_cheney@apple.com>

        Remove Storage Access API quirk on live.com
        https://bugs.webkit.org/show_bug.cgi?id=226990
        <rdar://problem/79218986>

        Reviewed by Brent Fulgham.

        The quirk on live.com is unnecessary, and we should remove it.

        * dom/DocumentStorageAccess.cpp:
        (WebCore::DocumentStorageAccess::requestStorageAccessQuirk):
        * page/Quirks.cpp:
        (WebCore::isStorageAccessQuirkDomainAndElement):
        (WebCore::Quirks::requestStorageAccessAndHandleClick const):
        (WebCore::Quirks::mapToTopDomain): Deleted.
        * page/Quirks.h:

2021-06-14  Truitt Savell  <tsavell@apple.com>

        Unreviewed, reverting r278842.

        introduced a failing test

        Reverted changeset:

        "Fix RTCDataChannelInit::decode"
        https://bugs.webkit.org/show_bug.cgi?id=226968
        https://commits.webkit.org/r278842

2021-06-14  Devin Rousso  <drousso@apple.com>

        [macOS] TouchBar playback speed controls don't work
        https://bugs.webkit.org/show_bug.cgi?id=226987
        <rdar://problem/79216098>

        Reviewed by Eric Carlson.

        Override `setRate:` and `setDefaultPlaybackRate:` instead of just having an ivar so that
        TouchBar playback speed controls actually affect the corresponding `<video>`.

        * platform/mac/WebPlaybackControlsManager.mm:
        (-[WebPlaybackControlsManager defaultPlaybackRate]): Added.
        (-[WebPlaybackControlsManager setDefaultPlaybackRate:]): Added.
        (-[WebPlaybackControlsManager rate]): Added.
        (-[WebPlaybackControlsManager setRate:]): Added.

2021-06-14  Alex Christensen  <achristensen@webkit.org>

        Pass PAL::SessionID by value instead of reference
        https://bugs.webkit.org/show_bug.cgi?id=226983

        Reviewed by Geoffrey Garen.

        It's a wrapper around an integer which will pass in a register.
        There's no reason to pass a pointer to it.

        * loader/CrossOriginAccessControl.cpp:
        (WebCore::validatePreflightResponse):
        * loader/CrossOriginAccessControl.h:
        * loader/CrossOriginPreflightResultCache.cpp:
        (WebCore::CrossOriginPreflightResultCache::appendEntry):
        (WebCore::CrossOriginPreflightResultCache::canSkipPreflight):
        * loader/CrossOriginPreflightResultCache.h:
        * loader/EmptyClients.cpp:
        * loader/cache/CachedApplicationManifest.cpp:
        (WebCore::CachedApplicationManifest::CachedApplicationManifest):
        * loader/cache/CachedApplicationManifest.h:
        * loader/cache/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::CachedCSSStyleSheet):
        * loader/cache/CachedCSSStyleSheet.h:
        * loader/cache/CachedFont.cpp:
        (WebCore::CachedFont::CachedFont):
        * loader/cache/CachedFont.h:
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::CachedImage):
        * loader/cache/CachedImage.h:
        * loader/cache/CachedRawResource.cpp:
        (WebCore::CachedRawResource::CachedRawResource):
        * loader/cache/CachedRawResource.h:
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::CachedResource):
        * loader/cache/CachedResource.h:
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::createResource):
        (WebCore::CachedResourceLoader::updateCachedResourceWithCurrentRequest):
        * loader/cache/CachedResourceLoader.h:
        * loader/cache/CachedSVGDocument.cpp:
        (WebCore::CachedSVGDocument::CachedSVGDocument):
        * loader/cache/CachedSVGDocument.h:
        * loader/cache/CachedSVGFont.cpp:
        (WebCore::CachedSVGFont::CachedSVGFont):
        * loader/cache/CachedSVGFont.h:
        * loader/cache/CachedScript.cpp:
        (WebCore::CachedScript::CachedScript):
        * loader/cache/CachedScript.h:
        * loader/cache/CachedTextTrack.cpp:
        (WebCore::CachedTextTrack::CachedTextTrack):
        * loader/cache/CachedTextTrack.h:
        * loader/cache/CachedXSLStyleSheet.cpp:
        (WebCore::CachedXSLStyleSheet::CachedXSLStyleSheet):
        * loader/cache/CachedXSLStyleSheet.h:
        * page/DatabaseProvider.h:
        * platform/WebCoreCrossThreadCopier.cpp:
        (WTF::PAL::SessionID>::copy):
        * platform/WebCoreCrossThreadCopier.h:
        * storage/StorageNamespaceProvider.cpp:
        (WebCore::StorageNamespaceProvider::setSessionIDForTesting):
        * storage/StorageNamespaceProvider.h:

2021-06-14  Patrick Angle  <pangle@apple.com>

        Web Inspector: CSS variables not handled as case sensitive
        https://bugs.webkit.org/show_bug.cgi?id=226875

        Reviewed by Devin Rousso.

        Test: inspector/css/overridden-property.html

        CSS variables support distinct declarations with only differences in cases. Previously, we naively converted all
        property names to lowercase, instead of properly providing variable names in their original case.

        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyle::styleWithProperties const):

2021-06-14  Youenn Fablet  <youenn@apple.com>

        Fix RTCDataChannelInit::decode
        https://bugs.webkit.org/show_bug.cgi?id=226968

        Reviewed by Eric Carlson.

        Test: imported/w3c/web-platform-tests/webrtc-extensions/transfer-datachannel-service-worker.https.html

        * platform/mediastream/RTCDataChannelHandler.h:
        (WebCore::RTCDataChannelInit::decode):
        Make sure to use optionals of optionals.

2021-06-14  Per Arne  <pvollan@apple.com>

        [AppleWin] Fix build failure
        https://bugs.webkit.org/show_bug.cgi?id=226966
        <rdar://79228536>

        Reviewed by Eric Carlson.

        Disable warning causing the build failure.

        * platform/cf/MediaAccessibilitySoftLink.h:

2021-06-14  Chris Dumez  <cdumez@apple.com>

        Avoid converting SecurityOrigins to Strings in SecurityPolicy
        https://bugs.webkit.org/show_bug.cgi?id=226976

        Reviewed by Geoffrey Garen.

        Avoid converting SecurityOrigins to Strings in SecurityPolicy, by using a SecurityOriginData
        as key in the originAccessMap instead of a String. Getting a SecurityOriginData from a
        SecurityOrigin is very cheap.

        * page/SecurityPolicy.cpp:
        (WebCore::SecurityPolicy::isAccessAllowed):
        (WebCore::SecurityPolicy::addOriginAccessAllowlistEntry):
        (WebCore::SecurityPolicy::removeOriginAccessAllowlistEntry):

2021-06-14  Jonathan Bedard  <jbedard@apple.com>

        [Monterey] Support building WebKit (Part 2)
        https://bugs.webkit.org/show_bug.cgi?id=226846
        <rdar://problem/79095148>

        Reviewed by Chris Dumez.

        Covered by exisiting tests.

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::updateWithTextRecognitionResult): Explicitly define second arugment
        to avoid 'missing field' compilation error.

2021-06-14  Chris Dumez  <cdumez@apple.com>

        Micro-optimize ResourceResponseBase::sanitizeHTTPHeaderFields()
        https://bugs.webkit.org/show_bug.cgi?id=226977

        Reviewed by Geoffrey Garen.

        Micro-optimize ResourceResponseBase::sanitizeHTTPHeaderFields() as it is not as efficient as it could be and it
        shows on profiles. In particular, rely on Vector::removeAllMatching() more instead of reconstructing HTTPHeaderMaps
        & Vectors.

        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::sanitizeHTTPHeaderFieldsAccordingToTainting):
        (WebCore::ResourceResponseBase::sanitizeHTTPHeaderFields):

2021-06-14  Kimmo Kinnunen  <kkinnunen@apple.com>

        AcceleratedImageBuffer not instantiated but objects are punned to the type
        https://bugs.webkit.org/show_bug.cgi?id=226917

        Reviewed by Said Abou-Hallawa.

        AcceleratedImageBuffer::create would create instance
        of ConcreteImageBuffer, not AcceleratedImageBuffer.

        Fix by adding a correct create static function.

        Tested by new test:
        TestWebKitAPI.ImageBufferTests.ImageBufferSubTypeCreateCreatesSubtypes

        * platform/graphics/PlatformImageBuffer.h:
        (WebCore::IOSurfaceImageBuffer::create):
        (WebCore::IOSurfaceImageBuffer::IOSurfaceImageBuffer):
        Add the correct factory functions and public constructors.

        * platform/graphics/cg/ImageBufferCGBitmapBackend.h:
        Add export statements that are needed for the added test.

        * platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:
        (WebCore::FilterEffectRendererCoreImage::imageForSourceGraphic):
        (WebCore::FilterEffectRendererCoreImage::renderToImageBuffer):
        Change the image creation site to create the explicit IOSurfaceImageBuffer
        since that's what it's trying to create.
        Change the type-punning call sites to use explicit
        IOSurfaceImageBuffer name, as that's what the call site
        is intending to use.


2021-06-14  Zalan Bujtas  <zalan@apple.com>

        [LFC][TFC] Add support for flexing columns when the content is also flexing
        https://bugs.webkit.org/show_bug.cgi?id=226959

        Reviewed by Antti Koivisto.

        This patch adds support for (the very common) cases when the minimum content width < maximum content width
        (e.g. text content wraps across multiple lines) and the parent column does not have fixed width either.
        Note that in some cases now table layout agrees with Chrome/Firefox and not with trunk WebKit
        (see table-space-distribution-simple-mismatching.htnl).

        Tests: fast/layoutformattingcontext/table-space-distribution-simple-mismatching.html
               fast/layoutformattingcontext/table-space-distribution-simple2.html

        * layout/formattingContexts/table/TableLayout.cpp:
        (WebCore::Layout::TableFormattingContext::TableLayout::distributedHorizontalSpace):

2021-06-13  Chris Dumez  <cdumez@apple.com>

        Relax "parent must be an HTMLElement" restriction in outerHTML setter
        https://bugs.webkit.org/show_bug.cgi?id=226808

        Reviewed by Ryosuke Niwa.

        Made the following change to our outerHTML setter for better compatibility and to better
        match the specification [1]:
        - Stop throwing an exception when the parent is not an HTML element. This new behavior matches
          the specification, Blink and Gecko behavior.

        I did not fully align us with the specification because we are mostly aligned with Blink at
        the moment. In particular:
        - The specification says the outerHTML setter should be a no-op when the parent is null.
          Firefox matches the specification but WebKit & Blink throw a NoModificationAllowedError.
        - The specification says we should allow setting outerHTML if the parent is a DocumentFragment.
          Firefox allows this but WebKit & Blink throw a NoModificationAllowedError.
        - WebKit & Blink have some Text node merging logic that is not present in the specification
          and which Gecko doesn't implement.

        [1] https://w3c.github.io/DOM-Parsing/#dom-element-outerhtml

        Test: fast/dom/set-outer-html-special-cases.html

        * dom/Element.cpp:
        (WebCore::Element::setOuterHTML):

2021-06-13  Sam Weinig  <weinig@apple.com>

        SimulatedXRDevice::shutDownTrackingAndRendering() should clear it's GraphicsContextGL to ensure the resource is cleaned up quickly
        https://bugs.webkit.org/show_bug.cgi?id=226947

        Reviewed by Dean Jackson.

        SimulatedXRDevice::shutDownTrackingAndRendering() needs to clear its GraphicsContextGL
        to ensure the resource is cleaned up quickly, and doesn't wait for GC to be reclaimed. 
        Without this, we can run out of GraphicsContextGLs and fail tests if GC happens to be
        running a bit behind.

        * testing/WebFakeXRDevice.cpp:
        (WebCore::SimulatedXRDevice::shutDownTrackingAndRendering):

2021-06-13  Alan Bujtas  <zalan@apple.com>

        [LFC][TFC] Add support for over-constrained cases for available space distribution
        https://bugs.webkit.org/show_bug.cgi?id=226957

        Reviewed by Antti Koivisto.

        This patch cleans up the code for the available space distribution. It also enables
        cases when the final column width is less than the preferred width (available space is negative).
        See further explanation inline in the source.

        Test: fast/layoutformattingcontext/table-space-distribution-simple.html

        * layout/formattingContexts/table/TableLayout.cpp:
        (WebCore::Layout::GridSpace::isEmpty const):
        (WebCore::Layout::max):
        (WebCore::Layout::operator-):
        (WebCore::Layout::operator+=):
        (WebCore::Layout::operator/):
        (WebCore::Layout::distributeAvailableSpace):
        (WebCore::Layout::TableFormattingContext::TableLayout::distributedHorizontalSpace):

2021-06-11  Chris Dumez  <cdumez@apple.com>

        Lazily compute SecurityOrigin::m_isPotentiallyTrustworthy for performance
        https://bugs.webkit.org/show_bug.cgi?id=226946

        Reviewed by Alex Christensen.

        We currently initialize m_isPotentiallyTrustworthy in the SecurityOrigin constructor.
        However, it is a bit expensive to compute and shows on profiles, and we often don't
        actually use this data member. As a result, this patch makes it so that
        SecurityOrigin::m_isPotentiallyTrustworthy gets computed lazily.

        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::SecurityOrigin):
        (WebCore::SecurityOrigin::isPotentiallyTrustworthy const):
        * page/SecurityOrigin.h:
        (WebCore::SecurityOrigin::isPotentiallyTrustworthy const): Deleted.

2021-06-10  Yusuke Suzuki  <ysuzuki@apple.com>

        Use DOMConstructor array instead of HashMap since window constructor property access is critical
        https://bugs.webkit.org/show_bug.cgi?id=226909

        Reviewed by Filip Pizlo.

        window.XXX constructor access is relatively frequently done. But its implementation is using HashMap lookup even though
        we are successfully caching the custom property accesses. This patch stop using HashMap and instead using array by
        collecting all constructors at build time. # of constructors are 774 in macOS build.

        preprocess-idls.pl collects all constructors and assign DOMConstructor::XXX enum to each constructor. And it also counts
        the number of constructors & create DOMConstructors class which holds array of constructors.

        We also remove locking for JSDOMGlobalObject::m_constructors since it is no longer HashTable, so GC can safely access to
        these fields.

        * CMakeLists.txt:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::JSDOMGlobalObject):
        (WebCore::JSDOMGlobalObject::visitChildrenImpl):
        * bindings/js/JSDOMGlobalObject.h:
        (WebCore::getDOMConstructor): Deleted.
        * bindings/js/JSDOMGlobalObjectInlines.h: Added.
        (WebCore::getDOMConstructor):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        (GenerateCallbackImplementationContent):
        * bindings/scripts/preprocess-idls.pl:
        * bindings/scripts/test/JS/JSDOMWindow.cpp:
        (WebCore::JSDOMWindow::getConstructor):
        * bindings/scripts/test/JS/JSDedicatedWorkerGlobalScope.cpp:
        (WebCore::JSDedicatedWorkerGlobalScope::getConstructor):
        * bindings/scripts/test/JS/JSExposedToWorkerAndWindow.cpp:
        (WebCore::JSExposedToWorkerAndWindow::getConstructor):
        * bindings/scripts/test/JS/JSPaintWorkletGlobalScope.cpp:
        (WebCore::JSPaintWorkletGlobalScope::getConstructor):
        * bindings/scripts/test/JS/JSServiceWorkerGlobalScope.cpp:
        (WebCore::JSServiceWorkerGlobalScope::getConstructor):
        * bindings/scripts/test/JS/JSTestCEReactions.cpp:
        (WebCore::JSTestCEReactions::getConstructor):
        * bindings/scripts/test/JS/JSTestCEReactionsStringifier.cpp:
        (WebCore::JSTestCEReactionsStringifier::getConstructor):
        * bindings/scripts/test/JS/JSTestCallTracer.cpp:
        (WebCore::JSTestCallTracer::getConstructor):
        * bindings/scripts/test/JS/JSTestCallbackInterface.cpp:
        (WebCore::JSTestCallbackInterface::getConstructor):
        * bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.cpp:
        (WebCore::JSTestClassWithJSBuiltinConstructor::getConstructor):
        * bindings/scripts/test/JS/JSTestConditionalIncludes.cpp:
        (WebCore::JSTestConditionalIncludes::getConstructor):
        * bindings/scripts/test/JS/JSTestConditionallyReadWrite.cpp:
        (WebCore::JSTestConditionallyReadWrite::getConstructor):
        * bindings/scripts/test/JS/JSTestDOMJIT.cpp:
        (WebCore::JSTestDOMJIT::getConstructor):
        * bindings/scripts/test/JS/JSTestDefaultToJSON.cpp:
        (WebCore::JSTestDefaultToJSON::getConstructor):
        * bindings/scripts/test/JS/JSTestDefaultToJSONFilteredByExposed.cpp:
        (WebCore::JSTestDefaultToJSONFilteredByExposed::getConstructor):
        * bindings/scripts/test/JS/JSTestDefaultToJSONIndirectInheritance.cpp:
        (WebCore::JSTestDefaultToJSONIndirectInheritance::getConstructor):
        * bindings/scripts/test/JS/JSTestDefaultToJSONInherit.cpp:
        (WebCore::JSTestDefaultToJSONInherit::getConstructor):
        * bindings/scripts/test/JS/JSTestDefaultToJSONInheritFinal.cpp:
        (WebCore::JSTestDefaultToJSONInheritFinal::getConstructor):
        * bindings/scripts/test/JS/JSTestDelegateToSharedSyntheticAttribute.cpp:
        (WebCore::JSTestDelegateToSharedSyntheticAttribute::getConstructor):
        * bindings/scripts/test/JS/JSTestDomainSecurity.cpp:
        (WebCore::JSTestDomainSecurity::getConstructor):
        * bindings/scripts/test/JS/JSTestEnabledBySetting.cpp:
        (WebCore::JSTestEnabledBySetting::getConstructor):
        * bindings/scripts/test/JS/JSTestEnabledForContext.cpp:
        (WebCore::JSTestEnabledForContext::getConstructor):
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore::JSTestEventConstructor::getConstructor):
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::JSTestEventTarget::getConstructor):
        * bindings/scripts/test/JS/JSTestException.cpp:
        (WebCore::JSTestException::getConstructor):
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        (WebCore::JSTestGenerateIsReachable::getConstructor):
        * bindings/scripts/test/JS/JSTestGlobalObject.cpp:
        (WebCore::JSTestGlobalObject::getConstructor):
        * bindings/scripts/test/JS/JSTestIndexedSetterNoIdentifier.cpp:
        (WebCore::JSTestIndexedSetterNoIdentifier::getConstructor):
        * bindings/scripts/test/JS/JSTestIndexedSetterThrowingException.cpp:
        (WebCore::JSTestIndexedSetterThrowingException::getConstructor):
        * bindings/scripts/test/JS/JSTestIndexedSetterWithIdentifier.cpp:
        (WebCore::JSTestIndexedSetterWithIdentifier::getConstructor):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterface::getConstructor):
        * bindings/scripts/test/JS/JSTestInterfaceLeadingUnderscore.cpp:
        (WebCore::JSTestInterfaceLeadingUnderscore::getConstructor):
        * bindings/scripts/test/JS/JSTestIterable.cpp:
        (WebCore::JSTestIterable::getConstructor):
        * bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp:
        (WebCore::JSTestJSBuiltinConstructor::getConstructor):
        * bindings/scripts/test/JS/JSTestLegacyFactoryFunction.cpp:
        (WebCore::JSTestLegacyFactoryFunction::getConstructor):
        (WebCore::JSTestLegacyFactoryFunction::getLegacyFactoryFunction):
        * bindings/scripts/test/JS/JSTestLegacyOverrideBuiltIns.cpp:
        (WebCore::JSTestLegacyOverrideBuiltIns::getConstructor):
        * bindings/scripts/test/JS/JSTestMapLike.cpp:
        (WebCore::JSTestMapLike::getConstructor):
        * bindings/scripts/test/JS/JSTestMapLikeWithOverriddenOperations.cpp:
        (WebCore::JSTestMapLikeWithOverriddenOperations::getConstructor):
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterNoIdentifier.cpp:
        (WebCore::JSTestNamedAndIndexedSetterNoIdentifier::getConstructor):
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterThrowingException.cpp:
        (WebCore::JSTestNamedAndIndexedSetterThrowingException::getConstructor):
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterWithIdentifier.cpp:
        (WebCore::JSTestNamedAndIndexedSetterWithIdentifier::getConstructor):
        * bindings/scripts/test/JS/JSTestNamedDeleterNoIdentifier.cpp:
        (WebCore::JSTestNamedDeleterNoIdentifier::getConstructor):
        * bindings/scripts/test/JS/JSTestNamedDeleterThrowingException.cpp:
        (WebCore::JSTestNamedDeleterThrowingException::getConstructor):
        * bindings/scripts/test/JS/JSTestNamedDeleterWithIdentifier.cpp:
        (WebCore::JSTestNamedDeleterWithIdentifier::getConstructor):
        * bindings/scripts/test/JS/JSTestNamedDeleterWithIndexedGetter.cpp:
        (WebCore::JSTestNamedDeleterWithIndexedGetter::getConstructor):
        * bindings/scripts/test/JS/JSTestNamedGetterCallWith.cpp:
        (WebCore::JSTestNamedGetterCallWith::getConstructor):
        * bindings/scripts/test/JS/JSTestNamedGetterNoIdentifier.cpp:
        (WebCore::JSTestNamedGetterNoIdentifier::getConstructor):
        * bindings/scripts/test/JS/JSTestNamedGetterWithIdentifier.cpp:
        (WebCore::JSTestNamedGetterWithIdentifier::getConstructor):
        * bindings/scripts/test/JS/JSTestNamedSetterNoIdentifier.cpp:
        (WebCore::JSTestNamedSetterNoIdentifier::getConstructor):
        * bindings/scripts/test/JS/JSTestNamedSetterThrowingException.cpp:
        (WebCore::JSTestNamedSetterThrowingException::getConstructor):
        * bindings/scripts/test/JS/JSTestNamedSetterWithIdentifier.cpp:
        (WebCore::JSTestNamedSetterWithIdentifier::getConstructor):
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetter.cpp:
        (WebCore::JSTestNamedSetterWithIndexedGetter::getConstructor):
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetterAndSetter.cpp:
        (WebCore::JSTestNamedSetterWithIndexedGetterAndSetter::getConstructor):
        * bindings/scripts/test/JS/JSTestNamedSetterWithLegacyOverrideBuiltIns.cpp:
        (WebCore::JSTestNamedSetterWithLegacyOverrideBuiltIns::getConstructor):
        * bindings/scripts/test/JS/JSTestNamedSetterWithLegacyUnforgeableProperties.cpp:
        (WebCore::JSTestNamedSetterWithLegacyUnforgeableProperties::getConstructor):
        * bindings/scripts/test/JS/JSTestNamedSetterWithLegacyUnforgeablePropertiesAndLegacyOverrideBuiltIns.cpp:
        (WebCore::JSTestNamedSetterWithLegacyUnforgeablePropertiesAndLegacyOverrideBuiltIns::getConstructor):
        * bindings/scripts/test/JS/JSTestNamespaceObject.cpp:
        (WebCore::JSTestNamespaceObject::getConstructor):
        * bindings/scripts/test/JS/JSTestNode.cpp:
        (WebCore::JSTestNode::getConstructor):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::JSTestObj::getConstructor):
        * bindings/scripts/test/JS/JSTestOperationConditional.cpp:
        (WebCore::JSTestOperationConditional::getConstructor):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        (WebCore::JSTestOverloadedConstructors::getConstructor):
        * bindings/scripts/test/JS/JSTestOverloadedConstructorsWithSequence.cpp:
        (WebCore::JSTestOverloadedConstructorsWithSequence::getConstructor):
        * bindings/scripts/test/JS/JSTestPluginInterface.cpp:
        (WebCore::JSTestPluginInterface::getConstructor):
        * bindings/scripts/test/JS/JSTestPromiseRejectionEvent.cpp:
        (WebCore::JSTestPromiseRejectionEvent::getConstructor):
        * bindings/scripts/test/JS/JSTestReadOnlyMapLike.cpp:
        (WebCore::JSTestReadOnlyMapLike::getConstructor):
        * bindings/scripts/test/JS/JSTestReadOnlySetLike.cpp:
        (WebCore::JSTestReadOnlySetLike::getConstructor):
        * bindings/scripts/test/JS/JSTestReportExtraMemoryCost.cpp:
        (WebCore::JSTestReportExtraMemoryCost::getConstructor):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::JSTestSerializedScriptValueInterface::getConstructor):
        * bindings/scripts/test/JS/JSTestSetLike.cpp:
        (WebCore::JSTestSetLike::getConstructor):
        * bindings/scripts/test/JS/JSTestSetLikeWithOverriddenOperations.cpp:
        (WebCore::JSTestSetLikeWithOverriddenOperations::getConstructor):
        * bindings/scripts/test/JS/JSTestStringifier.cpp:
        (WebCore::JSTestStringifier::getConstructor):
        * bindings/scripts/test/JS/JSTestStringifierAnonymousOperation.cpp:
        (WebCore::JSTestStringifierAnonymousOperation::getConstructor):
        * bindings/scripts/test/JS/JSTestStringifierNamedOperation.cpp:
        (WebCore::JSTestStringifierNamedOperation::getConstructor):
        * bindings/scripts/test/JS/JSTestStringifierOperationImplementedAs.cpp:
        (WebCore::JSTestStringifierOperationImplementedAs::getConstructor):
        * bindings/scripts/test/JS/JSTestStringifierOperationNamedToString.cpp:
        (WebCore::JSTestStringifierOperationNamedToString::getConstructor):
        * bindings/scripts/test/JS/JSTestStringifierReadOnlyAttribute.cpp:
        (WebCore::JSTestStringifierReadOnlyAttribute::getConstructor):
        * bindings/scripts/test/JS/JSTestStringifierReadWriteAttribute.cpp:
        (WebCore::JSTestStringifierReadWriteAttribute::getConstructor):
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::JSTestTypedefs::getConstructor):
        * bindings/scripts/test/JS/JSWorkerGlobalScope.cpp:
        (WebCore::JSWorkerGlobalScope::getConstructor):
        * bindings/scripts/test/JS/JSWorkletGlobalScope.cpp:
        (WebCore::JSWorkletGlobalScope::getConstructor):

2021-06-11  Alex Christensen  <achristensen@webkit.org>

        Partition CrossOriginPreflightResultCache by SessionID
        https://bugs.webkit.org/show_bug.cgi?id=226910

        Reviewed by Youenn Fablet.

        * loader/CrossOriginAccessControl.cpp:
        (WebCore::validatePreflightResponse):
        * loader/CrossOriginAccessControl.h:
        * loader/CrossOriginPreflightChecker.cpp:
        (WebCore::CrossOriginPreflightChecker::validatePreflightResponse):
        * loader/CrossOriginPreflightResultCache.cpp:
        (WebCore::CrossOriginPreflightResultCache::appendEntry):
        (WebCore::CrossOriginPreflightResultCache::canSkipPreflight):
        * loader/CrossOriginPreflightResultCache.h:
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::makeCrossOriginAccessRequest):

2021-06-11  Chris Dumez  <cdumez@apple.com>

        Use SharedBuffer!=() in CachedResource::tryReplaceEncodedData()
        https://bugs.webkit.org/show_bug.cgi?id=226943

        Reviewed by Geoff Garen.

        Use SharedBuffer!=() in CachedResource::tryReplaceEncodedData() instead of duplicating its logic.
        SharedBuffer!=() is also potentially more efficient since it doesn't requires combining the
        SharedBuffers' data segments.

        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::tryReplaceEncodedData):

2021-06-11  Imanol Fernandez  <ifernandez@igalia.com>

        Implement Encode/Decode templates for WebXR InputSources
        https://bugs.webkit.org/show_bug.cgi?id=226923

        Reviewed by Sam Weinig.

        Process WebXR InputSources in PlatformXR FrameData Encode/Decode templates.

        Tested by WebXR WPT.

        * platform/xr/PlatformXR.h:
        (PlatformXR::Device::FrameData::InputSourceButton::encode const):
        (PlatformXR::Device::FrameData::InputSourceButton::decode):
        (PlatformXR::Device::FrameData::InputSourcePose::encode const):
        (PlatformXR::Device::FrameData::InputSourcePose::decode):
        (PlatformXR::Device::FrameData::InputSource::encode const):
        (PlatformXR::Device::FrameData::InputSource::decode):
        (PlatformXR::Device::FrameData::encode const):
        (PlatformXR::Device::FrameData::decode):

2021-06-11  Chris Dumez  <cdumez@apple.com>

        Enable more release logging in WebCore for ephemeral sessions
        https://bugs.webkit.org/show_bug.cgi?id=226940

        Reviewed by Geoffrey Garen.

        Enable more release logging in WebCore for ephemeral sessions, to faciliate
        debugging.

        * Modules/webaudio/AudioContext.cpp:
        * loader/PolicyChecker.cpp:
        (WebCore::FrameLoader::PolicyChecker::checkNavigationPolicy):
        * page/FrameView.cpp:
        (WebCore::FrameView::scheduleResizeEventIfNeeded):
        (WebCore::FrameView::paintContents):
        (WebCore::FrameView::fireLayoutRelatedMilestonesIfNeeded):
        * page/PerformanceMonitor.cpp:
        (WebCore::PerformanceMonitor::measurePostLoadCPUUsage):
        (WebCore::PerformanceMonitor::measurePostLoadMemoryUsage):
        (WebCore::PerformanceMonitor::measurePostBackgroundingMemoryUsage):
        (WebCore::PerformanceMonitor::measurePostBackgroundingCPUUsage):
        (WebCore::PerformanceMonitor::measureCPUUsageInActivityState):
        * workers/service/ServiceWorker.cpp:
        (WebCore::ServiceWorker::ServiceWorker):
        (WebCore::ServiceWorker::updateState):
        (WebCore::ServiceWorker::isAlwaysOnLoggingAllowed const): Deleted.
        * workers/service/ServiceWorker.h:
        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::addRegistration):
        (WebCore::ServiceWorkerContainer::unregisterRegistration):
        (WebCore::ServiceWorkerContainer::updateRegistration):
        (WebCore::ServiceWorkerContainer::jobFailedWithException):
        (WebCore::ServiceWorkerContainer::jobResolvedWithRegistration):
        (WebCore::ServiceWorkerContainer::jobResolvedWithUnregistrationResult):
        (WebCore::ServiceWorkerContainer::startScriptFetchForJob):
        (WebCore::ServiceWorkerContainer::jobFinishedLoadingScript):
        (WebCore::ServiceWorkerContainer::jobFailedLoadingScript):
        (WebCore::ServiceWorkerContainer::isAlwaysOnLoggingAllowed const): Deleted.
        * workers/service/ServiceWorkerContainer.h:
        * workers/service/ServiceWorkerRegistration.cpp:
        (WebCore::ServiceWorkerRegistration::ServiceWorkerRegistration):
        (WebCore::ServiceWorkerRegistration::updateStateFromServer):
        (WebCore::ServiceWorkerRegistration::queueTaskToFireUpdateFoundEvent):

2021-06-11  Patrick Angle  <pangle@apple.com>

        Web Inspector: Add instrumentation to node destruction for InspectorDOMAgent
        https://bugs.webkit.org/show_bug.cgi?id=226624

        Reviewed by Devin Rousso.

        Test: inspector/dom/willDestroyDOMNode.html

        Add instrumentation for destruction of nodes in order to cease instrumenting nodes and inform the frontend that
        the node no longer exists. This work serves as a prelude to <https://webkit.org/b/189687> (Web Inspector:
        preserve DOM.NodeId if a node is removed and re-added) to eventually only forget about nodes upon destruction,
        instead of removal from the DOM tree. Additionally, the storage of nodes is simplified down to two inverse maps,
        one that maps `Node` to `NodeId`, and another that maps `NodeId` to `Node`. These are kept in sync throughout,
        and both attached and detached nodes are now handled as part of these two maps of Nodes.

        * dom/Node.cpp:
        (WebCore::Node::~Node):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::willDestroyDOMNodeImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didRemoveDOMNode):
        (WebCore::InspectorInstrumentation::willDestroyDOMNode):
        * inspector/agents/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::didRemoveDOMNode):
        * inspector/agents/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::InspectorDOMAgent):
        (WebCore::InspectorDOMAgent::reset):
        (WebCore::InspectorDOMAgent::bind):
        (WebCore::InspectorDOMAgent::unbind):
        (WebCore::InspectorDOMAgent::getDocument):
        (WebCore::InspectorDOMAgent::pushChildNodesToFrontend):
        (WebCore::InspectorDOMAgent::discardBindings):
        (WebCore::InspectorDOMAgent::pushNodePathToFrontend):
        (WebCore::InspectorDOMAgent::boundNodeId):
        - Add a check that the `Node*` is a valid key (not `nullptr`) before getting its id.
        (WebCore::InspectorDOMAgent::buildObjectForNode):
        (WebCore::InspectorDOMAgent::buildArrayForContainerChildren):
        (WebCore::InspectorDOMAgent::buildArrayForPseudoElements):
        (WebCore::InspectorDOMAgent::didCommitLoad):
        (WebCore::InspectorDOMAgent::didInsertDOMNode):
        (WebCore::InspectorDOMAgent::didRemoveDOMNode):
        (WebCore::InspectorDOMAgent::willDestroyDOMNode):
        (WebCore::InspectorDOMAgent::destroyedNodesTimerFired):
        - Added instrumentation point for DOM nodes being destroyed so they can be removed from the agent, and the
        frontend can also be informed of their ceasing to exist.
        (WebCore::InspectorDOMAgent::characterDataModified):
        (WebCore::InspectorDOMAgent::didInvalidateStyleAttr):
        (WebCore::InspectorDOMAgent::didPushShadowRoot):
        (WebCore::InspectorDOMAgent::willPopShadowRoot):
        (WebCore::InspectorDOMAgent::didChangeCustomElementState):
        (WebCore::InspectorDOMAgent::pseudoElementCreated):
        (WebCore::InspectorDOMAgent::pseudoElementDestroyed):
        (WebCore::InspectorDOMAgent::releaseDanglingNodes): Deleted.
        - Removed usage of NodeToIdMap and nested maps of nodes throughout in favor of two inverse maps for relating
        `Node`s and `NodeId`s. Because there is now a single set of canonical node maps, we no longer to to pass a
        NodeToIdMap throughout the agent.
        * inspector/agents/InspectorDOMAgent.h:
        * inspector/agents/page/PageConsoleAgent.cpp:
        (WebCore::PageConsoleAgent::PageConsoleAgent):
        (WebCore::PageConsoleAgent::clearMessages):
        * inspector/agents/page/PageConsoleAgent.h:
        * inspector/agents/page/PageDOMDebuggerAgent.cpp:
        (WebCore::PageDOMDebuggerAgent::willDestroyDOMNode):
        * inspector/agents/page/PageDOMDebuggerAgent.h:

2021-06-11  Yusuke Suzuki  <ysuzuki@apple.com>

        Add fast-path for binding security check of DOMWindow
        https://bugs.webkit.org/show_bug.cgi?id=226930

        Reviewed by Geoffrey Garen.

        The security check[1] must pass if the current JSDOMGlobalObject is the same to the accessed JSDOMWindow.
        This clarification paves the way to emit JIT code which removes this security check when the lexical and
        accessed JSGlobalObjects are the same.

        [1]: https://html.spec.whatwg.org/multipage/browsers.html#integration-with-idl

        * bindings/js/JSDOMBindingSecurity.cpp:
        (WebCore::BindingSecurity::shouldAllowAccessToDOMWindow):
        * bindings/js/JSDOMBindingSecurity.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateAttributeGetterBodyDefinition):
        (GenerateAttributeSetterBodyDefinition):
        (GenerateOperationBodyDefinition):

2021-06-11  Jonathan Bedard  <jbedard@apple.com>

        [Monterey] Support building WebKit
        https://bugs.webkit.org/show_bug.cgi?id=226846
        <rdar://problem/79095148>

        Reviewed by Tim Horton.

        Covered by exisiting tests.

        * testing/Internals.cpp:
        (WebCore::Internals::installImageOverlay): Explicitly define second arugment
        to avoid 'missing field' compilation error.

2021-06-11  Chris Dumez  <cdumez@apple.com>

        Enable release logging in ephemeral sessions for parts of WebCore
        https://bugs.webkit.org/show_bug.cgi?id=226929

        Reviewed by Eric Carlson.

        Enable release logging in ephemeral sessions for parts of WebCore, to facilitate debugging.

        * dom/Document.cpp:
        (WebCore::Document::canNavigate):
        * dom/Document.h:
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::setRequest):
        (WebCore::DocumentLoader::setMainDocumentError):
        (WebCore::DocumentLoader::mainReceivedError):
        (WebCore::DocumentLoader::frameDestroyed):
        (WebCore::DocumentLoader::stopLoading):
        (WebCore::DocumentLoader::notifyFinished):
        (WebCore::DocumentLoader::willSendRequest):
        (WebCore::DocumentLoader::tryLoadingSubstituteData):
        (WebCore::DocumentLoader::disallowDataRequest const):
        (WebCore::DocumentLoader::continueAfterContentPolicy):
        (WebCore::DocumentLoader::attachToFrame):
        (WebCore::DocumentLoader::detachFromFrame):
        (WebCore::DocumentLoader::startLoadingMainResource):
        (WebCore::DocumentLoader::loadMainResource):
        (WebCore::DocumentLoader::cancelMainResourceLoad):
        * loader/DocumentLoader.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::changeLocation):
        (WebCore::FrameLoader::loadURLIntoChildFrame):
        (WebCore::FrameLoader::loadArchive):
        (WebCore::FrameLoader::loadInSameDocument):
        (WebCore::FrameLoader::prepareForLoadStart):
        (WebCore::FrameLoader::setupForReplace):
        (WebCore::FrameLoader::loadFrameRequest):
        (WebCore::FrameLoader::loadURL):
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::loadWithNavigationAction):
        (WebCore::FrameLoader::loadWithDocumentLoader):
        (WebCore::FrameLoader::clearProvisionalLoadForPolicyCheck):
        (WebCore::FrameLoader::reloadWithOverrideEncoding):
        (WebCore::FrameLoader::reload):
        (WebCore::FrameLoader::stopAllLoaders):
        (WebCore::FrameLoader::stopForBackForwardCache):
        (WebCore::FrameLoader::setDocumentLoader):
        (WebCore::FrameLoader::setPolicyDocumentLoader):
        (WebCore::FrameLoader::setProvisionalDocumentLoader):
        (WebCore::FrameLoader::setState):
        (WebCore::FrameLoader::clearProvisionalLoad):
        (WebCore::FrameLoader::transitionToCommitted):
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame):
        (WebCore::FrameLoader::loadPostRequest):
        (WebCore::FrameLoader::continueFragmentScrollAfterNavigationPolicy):
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy):
        (WebCore::FrameLoader::loadDifferentDocumentItem):
        (WebCore::FrameLoader::retryAfterFailedCacheOnlyMainResourceLoad):
        * loader/FrameLoader.h:
        * loader/ProgressTracker.cpp:
        (WebCore::ProgressTracker::progressStarted):
        (WebCore::ProgressTracker::progressCompleted):
        (WebCore::ProgressTracker::finalProgressComplete):
        * loader/ProgressTracker.h:
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::init):
        (WebCore::ResourceLoader::loadDataURL):
        (WebCore::ResourceLoader::willSendRequestInternal):
        (WebCore::ResourceLoader::didReceiveResponse):
        (WebCore::ResourceLoader::didFinishLoading):
        (WebCore::ResourceLoader::didFinishLoadingOnePart):
        (WebCore::ResourceLoader::didFail):
        (WebCore::ResourceLoader::willSendRequestAsync):
        (WebCore::ResourceLoader::wasBlocked):
        (WebCore::ResourceLoader::cannotShowURL):
        * loader/ResourceLoader.h:
        (WebCore::ResourceLoader::frame const):
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::init):
        (WebCore::SubresourceLoader::willSendRequestInternal):
        (WebCore::SubresourceLoader::didReceiveResponse):
        (WebCore::SubresourceLoader::didFinishLoading):
        (WebCore::SubresourceLoader::didFail):
        (WebCore::SubresourceLoader::willCancel):
        (WebCore::SubresourceLoader::notifyDone):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::load):
        (WebCore::CachedResource::redirectReceived):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::canRequestAfterRedirection const):
        (WebCore::CachedResourceLoader::requestResource):
        * loader/cache/CachedResourceLoader.h:
        * page/Frame.cpp:
        (WebCore::Frame::injectUserScriptImmediately):
        * page/Frame.h:
        * page/FrameView.cpp:
        * page/Page.cpp:
        * page/Page.h:
        * page/PerformanceMonitor.cpp:

2021-06-11  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Live Text] Text selection inside image elements should not be cleared upon resize
        https://bugs.webkit.org/show_bug.cgi?id=226911

        Reviewed by Tim Horton.

        Refactor `HTMLElement::updateWithTextRecognitionResult`, such that it doesn't tear down and recreate the host
        element's shadow DOM structure in the case where the extant DOM elements are compatible with the given text
        recognition result. This prevents us from removing or inserting DOM elements in the case where an image element
        is resized (and thus adjusts its shadow DOM content using the updated size), which in turn prevents us from
        clearing out the text selection.

        Test: fast/images/text-recognition/mac/image-overlay-maintain-selection-during-size-change.html

        * editing/cocoa/DataDetection.h:
        * editing/cocoa/DataDetection.mm:

        Make this helper method return an HTMLDivElement instead of just an HTMLElement.

        (WebCore::DataDetection::createElementForImageOverlay):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::updateWithTextRecognitionResult):

        Split this method into two logical parts: the first builds up a TextRecognitionElements struct that contains
        references to all connected elements in the image element's shadow DOM that require style updates due to the
        new size; the second uses this TextRecognitionElements information to compute the new CSS transforms to apply to
        each of the data detector, line containers, and text containers underneath each line container element.

        Importantly, in step (1), we avoid regenerating shadow DOM content in the case where the DOM elements already
        exist in their expected places within the shadow DOM.

2021-06-11  Megan Gardner  <megan_gardner@apple.com>

        Rename AppHighlight group to QuickNote to correctly reflect feature.
        https://bugs.webkit.org/show_bug.cgi?id=226888

        Reviewed by Tim Horton.

        Rename only, no behavior change.

        * Modules/highlight/AppHighlight.h:
        (WebCore::AppHighlight::encode const):
        (WebCore::AppHighlight::decode):
        * Modules/highlight/AppHighlightStorage.cpp:
        (WebCore::AppHighlightStorage::storeAppHighlight):
        * Modules/highlight/AppHighlightStorage.h:
        * en.lproj/Localizable.strings:
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected):
        (WebCore::ContextMenuController::populate):
        (WebCore::ContextMenuController::checkOrEnableIfNeeded const):
        * platform/ContextMenuItem.cpp:
        (WebCore::isValidContextMenuAction):
        * platform/ContextMenuItem.h:
        * platform/LocalizedStrings.h:
        * platform/cocoa/LocalizedStringsCocoa.mm:
        (WebCore::contextMenuItemTagAddHighlightToQuickNote):
        (WebCore::contextMenuItemTagAddHighlightToNewQuickNote):
        (WebCore::contextMenuItemTagAddHighlightToCurrentGroup): Deleted.
        (WebCore::contextMenuItemTagAddHighlightToNewGroup): Deleted.
        * testing/Internals.cpp:
        (WebCore::Internals::appHighlightContextMenuItemTitles const):

2021-06-11  Cathie Chen  <cathiechen@igalia.com>

        Use HTMLDimension to parse different HTML attribute length values
        https://bugs.webkit.org/show_bug.cgi?id=226810

        Reviewed by Darin Adler.

        This patch uses HTMLDimension to parse different kind of html length values which are defined in [1].
        Then according the length types to determine if the value is valid.

        [1] https://www.w3.org/TR/html4/sgml/dtd.html#Length

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::addHTMLLengthToStyle):
        (WebCore::HTMLElement::addHTMLLengthToStyle): Add HTMLLength (including percentage values and pixel values) to style.
        (WebCore::HTMLElement::addHTMLMultiLengthToStyle): Add MultiLength (including percentage, pixel and relative values) to style.
        (WebCore::HTMLElement::addHTMLPixelsToStyle): Add pixel values to style.
        (WebCore::HTMLElement::addHTMLNumberToStyle): Add number (including percentage values and numbers) to style.
        * html/HTMLElement.h:
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::collectPresentationalHintsForAttribute): <img>'s width and height attributes are multiLength.
        * html/HTMLMarqueeElement.cpp:
        (WebCore::HTMLMarqueeElement::collectPresentationalHintsForAttribute): scrolldelayAttr and loopAttr are numbers.
        * html/HTMLTableColElement.cpp:
        (WebCore::HTMLTableColElement::collectPresentationalHintsForAttribute): <col>'s width and height attributes are multiLength.
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::collectPresentationalHintsForAttribute): <table>'s cellspacingAttr only supports pixel values.
        * html/parser/HTMLParserIdioms.cpp:
        (WebCore::parseHTMLDimensionInternal):
        (WebCore::parseHTMLDimension):
        (WebCore::parseHTMLMultiLength): MultiLength doesn't support relative_length (number + *), but make sure relative_length not be treated as a pixel value.
        * html/parser/HTMLParserIdioms.h:

2021-06-11  Youenn Fablet  <youenn@apple.com>

        getDisplayMedia API doesn't work
        https://bugs.webkit.org/show_bug.cgi?id=226874
        <rdar://problem/79134041>

        Reviewed by Eric Carlson.

        Test: fast/mediastream/getDisplayMedia-frame-rate.html

        * platform/mediastream/RealtimeVideoSource.cpp:
        (WebCore::RealtimeVideoSource::videoSampleAvailable):
        Only apply decimation in case frame rate is set.

2021-06-11  Alex Christensen  <achristensen@webkit.org>

        EventSource.constructor throws an exception when the url param is an empty string
        https://bugs.webkit.org/show_bug.cgi?id=226635

        Reviewed by Yusuke Suzuki.

        * page/EventSource.cpp:
        (WebCore::EventSource::create):

2021-06-11  Adrian Perez de Castro  <aperez@igalia.com>

        Unreviewed non-unified build fixes.

        * loader/ResourceCryptographicDigest.cpp: Add missing SharedBuffer.h header.
        * platform/network/soup/ResourceHandleSoup.cpp: Add missing SecurityOrigin.h header.

2021-06-11  Kimmo Kinnunen  <kkinnunen@apple.com>

        WebGL context image buffer accumulates the NativeImage contents when drawn to RemoteImageBufferProxy
        https://bugs.webkit.org/show_bug.cgi?id=226813
        <rdar://77421966>

        Reviewed by Simon Fraser.

        Add a workaround to flush WebGL element image buffer before
        every new frame in order to clear the WebContent process side
        NativeImage caches.

        Test: webgl/draw-webgl-to-context2d-memory-test.html

        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::paintRenderingResultsToCanvas):

2021-06-10  Chris Dumez  <cdumez@apple.com>

        CARingBuffer::frameOffset() makes incorrect assumptions about the frame count
        https://bugs.webkit.org/show_bug.cgi?id=226253
        <rdar://problem/78463453>

        Reviewed by Eric Carlson.

        CARingBuffer::frameOffset() was trying to avoid doing a `frameNumber % m_frameCount`
        modulo operation by doing a `frameNumber & (m_frameCount - 1)`. However, this bitwise
        operation is only equivalent if m_frameCount is a power of 2. It isn't enforced
        anywhere that the frameCount is a power of 2. As a matter of fact, we frequently use
        2*sampleRate which is often 2*44100=88200, which is NOT a power of 2.

        When adding logging, I saw frameOffset(512) returning 0 for a frameCount of 88200, which
        made no sense. It was causing offset0 and offset1 in CARingBuffer::fetchInternal() to
        be both 0 (even though startRead was 0 and endRead was 512) and it was leading the
        function to make bad computations.

        To address the issue, I updated CARingBuffer::frameOffset() to use a simple modulo
        operation. It is safer as it makes no assumption on the frame count and it is more
        readable. If we're worried about the performance, we could alternatively round up the
        frameCount to the next power of 2 and keep using the bitwise operation, but I am
        personally do not think it is worth it.

        * platform/audio/cocoa/CARingBuffer.cpp:
        (WebCore::CARingBuffer::initializeAfterAllocation):
        * platform/audio/cocoa/CARingBuffer.h:
        (WebCore::CARingBuffer::frameOffset):

2021-06-10  Yury Semikhatsky  <yurys@chromium.org>

        [REGRESSION][Curl] Network::ResourceTiming are broken after r278391
        https://bugs.webkit.org/show_bug.cgi?id=226901

        Reviewed by Fujii Hironori.

        Initialize fetchStart with startTime in Curl.

        No new tests.

        * platform/network/curl/CurlContext.cpp:
        (WebCore::CurlHandle::getNetworkLoadMetrics):

2021-06-10  Sam Weinig  <weinig@apple.com>

        Nothing is keeping navigator.xr alive during GC
        https://bugs.webkit.org/show_bug.cgi?id=226898

        Reviewed by Chris Dumez.

        Ensure the navigator.xr wrapper is kept alive when it has custom properties
        by annotating it with `GenerateIsReachable=ReachableFromNavigator`. 

        Test: webxr/gc.html

        * Modules/webxr/NavigatorWebXR.cpp:
        (WebCore::NavigatorWebXR::xr):
        * Modules/webxr/WebXRSystem.cpp:
        (WebCore::WebXRSystem::create):
        (WebCore::WebXRSystem::WebXRSystem):
        (WebCore::WebXRSystem::navigator):
        * Modules/webxr/WebXRSystem.h:
        * Modules/webxr/WebXRSystem.idl:

2021-06-10  Chris Dumez  <cdumez@apple.com>

        Drop unnecessary call to StringView::toStringWithoutCopying() in shouldTreatAsPotentiallyTrustworthy()
        https://bugs.webkit.org/show_bug.cgi?id=226907

        Reviewed by Darin Adler.

        Drop unnecessary call to StringView::toStringWithoutCopying() in shouldTreatAsPotentiallyTrustworthy() since
        the function we're calling takes a StringView.

        * page/SecurityOrigin.cpp:
        (WebCore::shouldTreatAsPotentiallyTrustworthy):

2021-06-10  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Live Text] Add a mechanism to regenerate text in an image element when it changes dimensions
        https://bugs.webkit.org/show_bug.cgi?id=226858
        rdar://77522786

        Reviewed by Devin Rousso.

        Push `m_elementsWithTextRecognitionResults` from WebPage down to Page, and additionally keep track of a
        TextRecognitionResult per element, as well as the size of the element at the time when we last injected text
        recognition results. Use this information to tell elements to update their OCR text containers if their
        dimenions have changed since the last update, after finishing a rendering update.

        Test: fast/images/text-recognition/image-overlay-size-change.html

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::updateWithTextRecognitionResult):

        Refactor this to take a `const TextRecognitionResult&` instead of a `TextRecognitionResult&&`, since this method
        doesn't actually take ownership of the TextRecognitionResult. This allows us to avoid explicitly copying a
        TextRecognitionResult when calling this method from `Page::updateElementsWithTextRecognitionResults`. Also, add
        a CacheTextRecognitionResults enum flag as an argument, to avoid entering `Page::cacheTextRecognitionResult`
        every time we update a resized element in `Page::updateElementsWithTextRecognitionResults`; since we know that
        the dimensions are the only thing that changed, we simply update the cached dimensions.

        Call into `Page::cacheTextRecognitionResult` to store per-element TextRecognitionResults when we
        finish injecting the OCR text and data detectors into the image element.

        * html/HTMLElement.h:
        * page/Page.cpp:
        (WebCore::Page::didCommitLoad):

        Clear out both `m_textRecognitionResultsByElement` and `m_elementsWithTextRecognitionResults`.

        (WebCore::Page::doAfterUpdateRendering):

        At the end of each rendering update, go through `m_elementsWithTextRecognitionResults` and check if any of the
        elements' dimensions have changed; if so, tell those elements to re-update their OCR text quads and data
        detectors in the UA shadow tree.

        (WebCore::Page::resetTextRecognitionResults):
        (WebCore::Page::updateElementsWithTextRecognitionResults):
        (WebCore::Page::hasCachedTextRecognitionResult const):
        (WebCore::Page::cacheTextRecognitionResult):

        Add the element to `m_elementsWithTextRecognitionResults` and `m_textRecognitionResultsByElement`, appending a
        new entry to `m_textRecognitionResultsByElement` only if necessary.

        * page/Page.h:

2021-06-10  Chris Dumez  <cdumez@apple.com>

        REGRESSION: (r278544) [ Mac-wk1 ] media/media-continues-playing-after-replace-source.html is a flaky failure
        https://bugs.webkit.org/show_bug.cgi?id=226899
        <rdar://problem/79160701>

        Reviewed by Ryosuke Niwa.

        Have MediaPlayerPrivateAVFoundationObjC schedule tasks on the HTML event loop instead of simply using
        callOnMainThread() to address flakiness issues, since the rest of the media code uses the HTML event
        loop.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerQueueTaskOnEventLoop):
        * html/HTMLMediaElement.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::queueTaskOnEventLoop):
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayerClient::mediaPlayerQueueTaskOnEventLoop):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::queueTaskOnEventLoop):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (-[WebCoreAVFMovieObserver metadataLoaded]):
        (-[WebCoreAVFMovieObserver didEnd:]):
        (-[WebCoreAVFMovieObserver observeValueForKeyPath:ofObject:change:context:]):
        (-[WebCoreAVFMovieObserver legibleOutput:didOutputAttributedStrings:nativeSampleBuffers:forItemTime:]):
        (-[WebCoreAVFMovieObserver outputSequenceWasFlushed:]):
        (-[WebCoreAVFMovieObserver metadataOutput:didOutputTimedMetadataGroups:fromPlayerItemTrack:]):
        (-[WebCoreAVFMovieObserver metadataCollector:didCollectDateRangeMetadataGroups:indexesOfNewGroups:indexesOfModifiedGroups:]):
        (-[WebCoreAVFLoaderDelegate resourceLoader:shouldWaitForLoadingOfRequestedResource:]):
        (-[WebCoreAVFLoaderDelegate resourceLoader:didCancelLoadingRequest:]):

2021-06-10  Alex Christensen  <achristensen@webkit.org>

        Move Timing-Allow-Origin checks to the network process
        https://bugs.webkit.org/show_bug.cgi?id=226678
        <rdar://problem/45227788>

        Reviewed by Chris Dumez.

        We tried hard to do it in the web process by keeping track of whether the last redirect was cross-origin
        and checking the final response and original security origin.  We got many tests to pass, but to get the rest
        and be correct, we need to check the Timing-Allow-Origin header field of each redirect against the original security origin.

        Tests: imported/w3c/web-platform-tests/resource-timing/SO-XO-SO-redirect-chain-tao.https.html
               imported/w3c/web-platform-tests/resource-timing/TAO-match.html
               imported/w3c/web-platform-tests/resource-timing/TAO-null-opaque-origin.html
               imported/w3c/web-platform-tests/resource-timing/TAO-port-mismatch-means-crossorigin.html
               imported/w3c/web-platform-tests/resource-timing/connection-reuse.html
               imported/w3c/web-platform-tests/resource-timing/connection-reuse.https.html
               imported/w3c/web-platform-tests/resource-timing/cross-origin-start-end-time-with-redirects.html
               imported/w3c/web-platform-tests/resource-timing/document-domain-no-impact-opener.html
               imported/w3c/web-platform-tests/resource-timing/entry-attributes.html
               imported/w3c/web-platform-tests/resource-timing/fetch-cross-origin-redirect.https.html
               imported/w3c/web-platform-tests/resource-timing/font-timestamps.html
               imported/w3c/web-platform-tests/resource-timing/iframe-failed-commit.html
               imported/w3c/web-platform-tests/resource-timing/initiator-type-for-script.html
               imported/w3c/web-platform-tests/resource-timing/nextHopProtocol-is-tao-protected.https.html
               imported/w3c/web-platform-tests/resource-timing/object-not-found-after-TAO-cross-origin-redirect.html
               imported/w3c/web-platform-tests/resource-timing/object-not-found-after-cross-origin-redirect.html
               imported/w3c/web-platform-tests/resource-timing/redirects.html
               imported/w3c/web-platform-tests/resource-timing/resource-ignore-data-url.html
               imported/w3c/web-platform-tests/resource-timing/resource_cached.html
               imported/w3c/web-platform-tests/resource-timing/resource_timing_content_length.html
               imported/w3c/web-platform-tests/resource-timing/same-origin-from-cross-origin-redirect.html
               imported/w3c/web-platform-tests/resource-timing/sizes-redirect-img.html

        * Headers.cmake:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::start):
        Get a SecurityOrigin for our WebKitLegacy ResourceHandle use like we do in WebLoaderStrategy::scheduleLoadFromNetworkProcess
        * loader/ResourceTiming.cpp:
        (WebCore::ResourceTiming::ResourceTiming):
        (WebCore::ResourceTiming::initServerTiming):
        (WebCore::ResourceTiming::isolatedCopy const):
        (WebCore::passesTimingAllowCheck): Deleted.
        * loader/ResourceTiming.h:
        (WebCore::ResourceTiming::networkLoadMetrics const):
        (WebCore::ResourceTiming::ResourceTiming):
        (WebCore::ResourceTiming::allowTimingDetails const): Deleted.
        (): Deleted.
        * page/PerformanceNavigation.cpp:
        (WebCore::PerformanceNavigation::redirectCount const):
        * page/PerformanceNavigationTiming.cpp:
        (WebCore::PerformanceNavigationTiming::sameOriginCheckFails const):
        (WebCore::PerformanceNavigationTiming::redirectCount const):
        * page/PerformanceResourceTiming.cpp:
        (WebCore::entryStartTime):
        (WebCore::entryEndTime):
        (WebCore::PerformanceResourceTiming::redirectStart const):
        (WebCore::PerformanceResourceTiming::redirectEnd const):
        (WebCore::PerformanceResourceTiming::domainLookupStart const):
        (WebCore::PerformanceResourceTiming::domainLookupEnd const):
        (WebCore::PerformanceResourceTiming::connectStart const):
        (WebCore::PerformanceResourceTiming::connectEnd const):
        (WebCore::PerformanceResourceTiming::secureConnectionStart const):
        (WebCore::PerformanceResourceTiming::requestStart const):
        (WebCore::PerformanceResourceTiming::responseStart const):
        (WebCore::PerformanceResourceTiming::transferSize const):
        (WebCore::PerformanceResourceTiming::encodedBodySize const):
        (WebCore::PerformanceResourceTiming::decodedBodySize const):
        * page/PerformanceTiming.cpp:
        (WebCore::PerformanceTiming::unloadEventStart const):
        (WebCore::PerformanceTiming::unloadEventEnd const):
        (WebCore::PerformanceTiming::redirectStart const):
        (WebCore::PerformanceTiming::redirectEnd const):
        * platform/network/BlobResourceHandle.cpp:
        (WebCore::BlobResourceHandle::BlobResourceHandle):
        * platform/network/NetworkLoadMetrics.h:
        (WebCore::NetworkLoadMetrics::isolatedCopy const):
        (WebCore::NetworkLoadMetrics::operator== const):
        (WebCore::NetworkLoadMetrics::encode const):
        (WebCore::NetworkLoadMetrics::decode):
        * platform/network/ResourceHandle.cpp:
        (WebCore::ResourceHandle::ResourceHandle):
        (WebCore::ResourceHandle::create):
        (WebCore::ResourceHandle::loadResourceSynchronously):
        (WebCore::ResourceHandle::isCrossOriginWithoutTAO const):
        (WebCore::ResourceHandle::markAsCrossOriginWithoutTAO):
        (WebCore::ResourceHandle::sourceOrigin const):
        (WebCore::ResourceHandle::hasCrossOriginRedirect const): Deleted.
        (WebCore::ResourceHandle::setHasCrossOriginRedirect): Deleted.
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        * platform/network/TimingAllowOrigin.cpp: Added.
        (WebCore::passesTimingAllowOriginCheck):
        * platform/network/TimingAllowOrigin.h: Added.
        * platform/network/cocoa/NetworkLoadMetrics.mm:
        (WebCore::packageTimingData):
        (WebCore::copyTimingData):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::platformLoadResourceSynchronously):
        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm:
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:willSendRequest:redirectResponse:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:didReceiveResponse:]):

2021-06-10  Alex Christensen  <achristensen@webkit.org>

        Origin is null in http requests when baseURL has custom scheme on iOS 15.0
        https://bugs.webkit.org/show_bug.cgi?id=226760
        <rdar://79027280>

        Reviewed by Chris Dumez.

        This fixes a regression from r272469 where I made two mistakes.

        1. I made schemes handled by a WKURLSchemeHandler able to create non-null origins to increase compatibility.
        I forgot that one can also call loadHTMLString and pass a baseURL that can be a custom scheme.
        In this case, the custom scheme is also treated as the "origin" so it should be non-null.
        2. When updateRequestForAccessControl is called in the Network Process, it uses SecurityOrigins that have been
        serialized and deserialized then passed through the SecurityOrigin constructor, which doesn't know about the
        registry of custom schemes that are handled for that WKWebView and may deserialize to a different (null) origin.
        We want to deserialize the origin having been made with the rules of SecurityOrigins in the Web Process, so
        set its data to be the same as the serialized data.

        I added a unit test to prevent future regression.

        * page/SecurityOrigin.h:
        (WebCore::SecurityOrigin::decode):

2021-06-10  Arcady Goldmints-Orlov  <agoldmints@igalia.com>

        [Cairo] Fix Path::boundingRectSlowCase when the path is a single MoveTo
        https://bugs.webkit.org/show_bug.cgi?id=226613

        Cairo says there is no bounding rectangle in this case, whereas the SVG
        standard says there it should be a zero-size rectangle at the moved-to
        point. This fixes the recently added test
        fast/svg/bounding-rect-for-path-with-only-move-command.html

        Reviewed by Fujii Hironori.

        * platform/graphics/cairo/PathCairo.cpp:
        (WebCore::Path::boundingRectSlowCase const):

2021-06-10  Chris Dumez  <cdumez@apple.com>

        Fix incorrect check in AudioNode.disconnect()
        https://bugs.webkit.org/show_bug.cgi?id=226818
        <rdar://problem/79076999>

        Reviewed by Eric Carlson.

        * Modules/webaudio/AudioNode.cpp:
        (WebCore::AudioNode::disconnect):

2021-06-10  Toshio Ogasawara  <toshio.ogasawara@access-company.com>

        [MSE] When currentTime is a large value, it takes time to process SourceBufferPrivate::evictCodedFrames().
        https://bugs.webkit.org/show_bug.cgi?id=226867

        Reviewed by Eric Carlson.

        SourceBufferPrivate::evictCodedFrames() now starts with the earliest PTS value
        in trackBuffer instead of MediaTime::zeroTime() to avoid unnecessary loops.

        Test: media/media-source/media-source-evict-codedframe-large-currenttime.html

        * platform/graphics/SourceBufferPrivate.cpp:
        (WebCore::SourceBufferPrivate::evictCodedFrames):

2021-06-10  Andres Gonzalez  <andresg_22@apple.com>

        iOS - VoiceOver reads the programmatically associated label instead of the accessible name provided via the aria-label or aria-labelledby attribute
        https://bugs.webkit.org/show_bug.cgi?id=226534
        rdar://65935211

        Reviewed by Chris Fleizach.

        The problem is due to VoiceOver retrieving the titleUIElement for the
        given object, and using the label of that title element as the label of
        the object in question. The solution in this patch is to only return a
        title element if the object can have title elements (if exposesTitleUIElement
        is true). This check was missing in AccessibilityRenderObject::titleUIElement.

        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::exposesTitleUIElement const):
        This method is no longer necessary in the AXCoreObject interface,
        instead is a virtual in the AXObject class hierarchy.

        * accessibility/AccessibilityObjectInterface.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::titleUIElement const):
        Checks whether this object can have a title element.

        (WebCore::AccessibilityRenderObject::computeAccessibilityIsIgnored const):
        (WebCore::AccessibilityRenderObject::accessibilityHitTest const):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/atk/WebKitAccessibleUtil.cpp:
        (accessibilityTitle):
        * accessibility/isolatedtree/AXIsolatedObject.cpp:
        (WebCore::AXIsolatedObject::initializeAttributeData):
        No need to cache this value any more.

        * accessibility/isolatedtree/AXIsolatedObject.h:
        * accessibility/isolatedtree/AXIsolatedTree.h:
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
        * accessibility/win/AccessibilityObjectWrapperWin.cpp:
        (WebCore::AccessibilityObjectWrapper::accessibilityAttributeValue):

2021-06-10  Ben Nham  <nham@apple.com>

        Only cache GET requests in the memory cache
        https://bugs.webkit.org/show_bug.cgi?id=226359

        Reviewed by Geoff Garen.

        Test: http/tests/cache/memory-cache-only-caches-get.html

        We only cache GET requests at the disk cache level, but we don't have that same restriction
        at the memory cache level. We should make the policies match. In particular, in long-running
        webpages, we're accumulating POSTs from XMLHttpRequests in our memory cache and should stop
        doing that, since POST response caching is generally not used or expected.

        I also changed InspectorInstrumentation::willSendRequest to take an optional CachedResource
        parameter because it currently uses InspectorPageAgent::cachedResource to find the resource,
        which in turn expects to find the resource in the memory cache. That doesn't work anymore
        for these non-GET requests, so we now pass down the CachedResource explicitly in the cases
        where that's necessary.

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::willSendRequestImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::willSendRequest):
        * inspector/agents/InspectorNetworkAgent.cpp:
        (WebCore::resourceTypeForCachedResource):
        (WebCore::InspectorNetworkAgent::willSendRequest):
        * inspector/agents/InspectorNetworkAgent.h:
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::tryLoadingSubstituteData):
        (WebCore::DocumentLoader::addSubresourceLoader):
        (WebCore::DocumentLoader::loadMainResource):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::requestFromDelegate):
        * loader/ResourceLoadNotifier.cpp:
        (WebCore::ResourceLoadNotifier::willSendRequest):
        (WebCore::ResourceLoadNotifier::dispatchWillSendRequest):
        * loader/ResourceLoadNotifier.h:
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::willSendRequestInternal):
        * loader/ResourceLoader.h:
        (WebCore::ResourceLoader::cachedResource const):
        * loader/SubresourceLoader.cpp:
        * loader/SubresourceLoader.h:
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::update):
        (WebCore::ApplicationCacheGroup::startLoadingEntry):
        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::add):

2021-06-10  Chris Dumez  <cdumez@apple.com>

        Replace ReadableStreamChunk struct with a WTF::Span
        https://bugs.webkit.org/show_bug.cgi?id=226879

        Reviewed by Alex Christensen.

        Replace ReadableStreamChunk struct with a WTF::Span now that we support
        Span and they are essentially the same thing.

        * Headers.cmake:
        * Modules/cache/DOMCache.cpp:
        (WebCore::DOMCache::addAll):
        (WebCore::DOMCache::put):
        * Modules/fetch/FetchBodyConsumer.cpp:
        (WebCore::FetchBodyConsumer::resolve):
        * Modules/fetch/FetchResponse.cpp:
        (WebCore::FetchResponse::BodyLoader::didReceiveData):
        (WebCore::FetchResponse::BodyLoader::consumeDataByChunk):
        * Modules/fetch/FetchResponse.h:
        * Modules/streams/ReadableStreamChunk.h: Removed.
        * Modules/streams/ReadableStreamSink.cpp:
        (WebCore::ReadableStreamToSharedBufferSink::enqueue):
        * Modules/streams/ReadableStreamSink.h:
        * WebCore.xcodeproj/project.pbxproj:
        * workers/service/context/ServiceWorkerFetch.cpp:

2021-06-10  Chris Dumez  <cdumez@apple.com>

        Enable WebPage's release logging in ephemeral sessions
        https://bugs.webkit.org/show_bug.cgi?id=226510

        Reviewed by Eric Carlson.

        Enable WebPage's release logging in ephemeral sessions. Our release logging doesn't contain
        anything sensitive and not having this logging makes it hard to debug issues in apps using
        ephemeral sessions.

        * Modules/applepay/PaymentCoordinator.cpp:
        (WebCore::PaymentCoordinator::supportsVersion const):
        (WebCore::PaymentCoordinator::canMakePayments):
        (WebCore::PaymentCoordinator::canMakePaymentsWithActiveCard):
        (WebCore::PaymentCoordinator::openPaymentSetup):
        (WebCore::PaymentCoordinator::beginPaymentSession):
        (WebCore::PaymentCoordinator::completeMerchantValidation):
        (WebCore::PaymentCoordinator::completeShippingMethodSelection):
        (WebCore::PaymentCoordinator::completeShippingContactSelection):
        (WebCore::PaymentCoordinator::completePaymentMethodSelection):
        (WebCore::PaymentCoordinator::completePaymentMethodModeChange):
        (WebCore::PaymentCoordinator::completePaymentSession):
        (WebCore::PaymentCoordinator::abortPaymentSession):
        (WebCore::PaymentCoordinator::cancelPaymentSession):
        (WebCore::PaymentCoordinator::validateMerchant):
        (WebCore::PaymentCoordinator::didAuthorizePayment):
        (WebCore::PaymentCoordinator::didSelectPaymentMethod):
        (WebCore::PaymentCoordinator::didSelectShippingMethod):
        (WebCore::PaymentCoordinator::didSelectShippingContact):
        (WebCore::PaymentCoordinator::didChangePaymentMethodMode):
        (WebCore::PaymentCoordinator::didCancelPaymentSession):
        (WebCore::PaymentCoordinator::shouldEnableApplePayAPIs const):
        (WebCore::PaymentCoordinator::setApplePayIsActiveIfAllowed const):
        (WebCore::PaymentCoordinator::shouldAllowUserAgentScripts const):
        (WebCore::PaymentCoordinator::getSetupFeatures):
        (WebCore::PaymentCoordinator::beginApplePaySetup):
        (WebCore::PaymentCoordinator::endApplePaySetup):
        * Modules/applepay/PaymentCoordinatorClient.h:
        * testing/MockPaymentCoordinator.h:

2021-06-10  Youenn Fablet  <youenn@apple.com>

        CountQueuingStrategy.constructor misses checking the type of init param
        https://bugs.webkit.org/show_bug.cgi?id=226759

        Reviewed by Chris Dumez.

        Now that streams are WebIDLed, add related parameter type checks.
        Covered by rebased tests.

        * Modules/streams/CountQueuingStrategy.js:
        (initializeCountQueuingStrategy):

2021-06-10  Rob Buis  <rbuis@igalia.com>

        Treat intrinsic like *-content
        https://bugs.webkit.org/show_bug.cgi?id=226790

        Reviewed by Sergio Villar Senin.

        Treat intrinsic like *-content for intrinsic logical
        content calculations.

        Tests: fast/flexbox/intrinsic-width-column-flow-crash.html
               fast/flexbox/intrinsic-width-crash.html
               fast/flexbox/min-intrinsic-width-crash.html

        * platform/Length.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeIntrinsicLogicalContentHeightUsing const):
        (WebCore::RenderBox::computeContentAndScrollbarLogicalHeightUsing const):

2021-06-10  Chris Dumez  <cdumez@apple.com>

        Fix some inefficient uses of SharedBuffer
        https://bugs.webkit.org/show_bug.cgi?id=226857

        Reviewed by Darin Adler.

        Fix some inefficient uses of SharedBuffer:
        - Avoid calling SharedBuffer::data() whenever possible since this function
          may have to combine internal segments of SharedBuffer. Added a convenience
          function on SharedBuffer (forEachSegment()) to get the data pointer / size
          of each segment.
        - Avoid some unnecessary construction of SharedBuffer simply to get a Vector.
          We should construct the Vector directly in such cases. I dropped the
          Blob factory that took in a SharedBuffer as it was inefficient and frequently
          called instead of the more efficient factory that takes in a Vector<uint8_t>.
        - Add convenience functions to SharedBuffer that return a Vector, including one
          named takeData() that avoids copying the data.
        - Add convenience functions to SharedBuffer for doing a prefix check or copying
          to a destination pointer.

        * Modules/async-clipboard/ClipboardItem.cpp:
        (WebCore::ClipboardItem::blobFromString):
        * Modules/async-clipboard/ios/ClipboardImageReaderIOS.mm:
        (WebCore::ClipboardImageReader::readBuffer):
        * Modules/async-clipboard/mac/ClipboardImageReaderMac.mm:
        (WebCore::ClipboardImageReader::readBuffer):
        * Modules/fetch/FetchBodyConsumer.cpp:
        (WebCore::blobFromData):
        (WebCore::packageFormData):
        (WebCore::resolveWithTypeAndData):
        (WebCore::FetchBodyConsumer::takeAsBlob):
        * Modules/indexeddb/IDBGetResult.cpp:
        * Modules/indexeddb/IDBGetResult.h:
        * Modules/mediarecorder/MediaRecorder.cpp:
        (WebCore::createDataAvailableEvent):
        * Modules/mediastream/RTCDataChannel.cpp:
        (WebCore::RTCDataChannel::didReceiveRawData):
        * editing/WebCorePasteboardFileReader.cpp:
        (WebCore::WebCorePasteboardFileReader::readBuffer):
        * editing/cocoa/WebContentReaderCocoa.mm:
        (WebCore::createFragmentForImageAttachment):
        (WebCore::replaceRichContentWithAttachments):
        (WebCore::createFragmentAndAddResources):
        (WebCore::sanitizeMarkupWithArchive):
        (WebCore::WebContentReader::readImage):
        (WebCore::attachmentForData):
        * editing/gtk/WebContentReaderGtk.cpp:
        (WebCore::WebContentReader::readImage):
        * fileapi/Blob.cpp:
        * fileapi/Blob.h:
        * fileapi/NetworkSendQueue.cpp:
        (WebCore::NetworkSendQueue::processMessages):
        * html/HTMLAttachmentElement.cpp:
        (WebCore::HTMLAttachmentElement::updateEnclosingImageWithData):
        * inspector/agents/InspectorNetworkAgent.cpp:
        (WebCore::InspectorNetworkAgent::didReceiveResponse):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::continueAfterContentPolicy):
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::didFinishLoading):
        (WebCore::DocumentThreadableLoader::loadRequest):
        * loader/NetscapePlugInStreamLoader.cpp:
        (WebCore::NetscapePlugInStreamLoader::didReceiveDataOrBuffer):
        * loader/ResourceCryptographicDigest.cpp:
        (WebCore::cryptographicDigestForSharedBuffer):
        * loader/ResourceCryptographicDigest.h:
        * loader/SubresourceIntegrity.cpp:
        (WebCore::matchIntegrityMetadata):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::didFinishLoadingManifest):
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::writeDataToUniqueFileInDirectory):
        * loader/cache/CachedRawResource.cpp:
        (WebCore::CachedRawResource::didAddClient):
        * loader/icon/IconLoader.cpp:
        (WebCore::IconLoader::notifyFinished):
        * platform/SharedBuffer.cpp:
        (WebCore::combineSegmentsData):
        (WebCore::SharedBuffer::combineIntoOneSegment const):
        (WebCore::SharedBuffer::data const):
        (WebCore::SharedBuffer::takeData):
        (WebCore::SharedBuffer::toHexString const):
        (WebCore::SharedBuffer::forEachSegment const):
        (WebCore::SharedBuffer::startsWith const):
        (WebCore::SharedBuffer::copyTo const):
        * platform/SharedBuffer.h:
        * platform/cf/SharedBufferCF.cpp:
        (WebCore::SharedBuffer::createCFData const):
        * platform/graphics/displaylists/DisplayListItemBuffer.cpp:
        (WebCore::DisplayList::ItemBuffer::append):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged):
        * workers/ScriptBuffer.cpp:
        (WebCore::ScriptBuffer::toString const):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::createResponseBlob):

2021-06-10  Youenn Fablet  <youenn@apple.com> and Victor M. Jaquez L. <vjaquez@igalia.com>

        Update libwebrtc to M92
        https://bugs.webkit.org/show_bug.cgi?id=226494

        Reviewed by Eric Carlson.

        Covered by existing tests.

        * Configurations/WebCore.xcconfig:
        * Configurations/WebCoreTestSupport.xcconfig:
        * Modules/mediastream/libwebrtc/LibWebRTCRtpReceiverBackend.cpp:
        (WebCore::LibWebRTCRtpReceiverBackend::createSource):
        * Modules/mediastream/libwebrtc/LibWebRTCStatsCollector.cpp:
        (WebCore::fillInboundRtpStreamStats):
        (WebCore::fillOutboundRtpStreamStats):
        (WebCore::fillRTCIceCandidateStats):
        * platform/mediastream/libwebrtc/LibWebRTCProvider.cpp:
        (WebCore::LibWebRTCProvider::signalingThread):
        (WebCore::LibWebRTCProvider::createPeerConnectionFactory):
        (WebCore::LibWebRTCProvider::setPeerConnectionFactory):
        (WebCore::LibWebRTCProvider::createPeerConnection):
        * platform/mediastream/libwebrtc/LibWebRTCProvider.h:
        * testing/MockLibWebRTCPeerConnection.cpp:
        (WebCore::createConnection):
        (WebCore::MockLibWebRTCPeerConnectionFactory::CreatePeerConnectionOrError):
        * testing/MockLibWebRTCPeerConnection.h:

2021-06-10  Adrian Perez de Castro  <aperez@igalia.com>

        Non-unified build fixes, early May 2021 edition
        https://bugs.webkit.org/show_bug.cgi?id=226763

        Unreviewed non-unified build fixes.

        * css/calc/CSSCalcValue.cpp: Add missing CSSCalcSymbolTable.h header.
        * layout/formattingContexts/inline/text/TextUtil.h: Add missing forward declaration for
        InlineTextBox class.
        * loader/MixedContentChecker.h: Add missing <optional> header.
        * page/FrameSnapshotting.cpp: Remove unneeded inclusion of DestinationColorSpace.h and
        wtf/OptionSet.h headers.
        * page/FrameSnapshotting.h: Add mission DestinationColorSpace.h and wtf/OptionSet.h headers,
        remove now unneeded wtf/Forward.h heeder and forward declaration for the
        DestinationColorSpace class.
        * platform/DateComponents.h: Add missing <optional> header, remove unneeded <limits> header.
        * platform/Theme.h: Add missin <optional> header.
        * platform/graphics/HEVCUtilities.h: Ditto.
        * rendering/HighlightData.h: Add missing forward declaration for the RenderText class.
        * rendering/MarkedText.cpp: Add missing HighlightData.h header.
        * rendering/RenderLineBoxList.cpp: Add missing inclusion of the LegacyInlineElementBox.h
        header.
        * style/StyleAdjuster.cpp: Add missing ShadowRoot.h header.
        * svg/SVGToOTFFontConversion.h: Add missing <optional> header.
        * workers/service/ServiceWorkerClientQueryOptions.h: Ditto.

2021-06-09  Rob Buis  <rbuis@igalia.com>

        Null check page in generateCertificate
        https://bugs.webkit.org/show_bug.cgi?id=226798

        Reviewed by Youenn Fablet.

        Null check page in generateCertificate.

        Test: http/wpt/webrtc/RTCPeerConnection-generateCertificate-crash.html

        * Modules/mediastream/PeerConnectionBackend.cpp:
        (WebCore::PeerConnectionBackend::generateCertificate):

2021-06-09  Cameron McCormack  <heycam@apple.com>

        Add window.internals.log()
        https://bugs.webkit.org/show_bug.cgi?id=226403

        Reviewed by Tim Horton.

        window.internals.log() writes output to stderr using WTFLogAlways.
        This may be useful for interleaving some output generated from within a
        test with WebCore logging, which also goes to stderr. console.log()
        doesn't work for this, since that goes to stdout and is captured as
        the test output.

        * testing/Internals.cpp:
        (WebCore::Internals::log):
        * testing/Internals.h:
        * testing/Internals.idl:

2021-06-09  Cathie Chen  <cathiechen@igalia.com>

        Aspect ratio from width and height attribute is not compatible to string with invalid ends
        https://bugs.webkit.org/show_bug.cgi?id=226469

        Reviewed by Antti Koivisto.

        The patch follows the steps defined in [1] to parse the dimension values from the attribute values.
        It adds HTMLDimension to present the dimension value which has two types, Percentage and Pixel.
        And parseHTMLDimension() follows the specification steps to check validation and parse the dimension
        value. Currently, it is only used by parsing aspect-ratio from width and height attributes. It will
        apply to other attributes length parse in the future patch.

        [1] https://html.spec.whatwg.org/#rules-for-parsing-dimension-values

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::applyAspectRatioFromWidthAndHeightAttributesToStyle): Call parseHTMLDimension to get the length values.
        * html/parser/HTMLParserIdioms.cpp:
        (WebCore::parseHTMLDimensionNumber):
        (WebCore::parseHTMLDimension):
        * html/parser/HTMLParserIdioms.h:

2021-06-09  Andres Gonzalez  <andresg_22@apple.com>

        iOS - VoiceOver reads the old heading text when updated with heading.firstChild.data.
        https://bugs.webkit.org/show_bug.cgi?id=226754
        rdar://44949563

        Reviewed by Chris Fleizach.

        Tests: accessibility/ios-simulator/heading-text-updates.html
               accessibility/mac/heading-text-updates.html

        The problem was caused by [WebAccessibilityObjectWrapper _accessibilityTraitsFromAncestors]
        setting the value and label of static text inside headings. since this
        method is called only on the initialization of the object, the label is
        never updated when the text changes.
        The solution is to move the logic to return the label and value of
        static text inside headings to the accessibilityLabel and accessibilityValue
        respectively.

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper _accessibilityTraitsFromAncestors]):
        (-[WebAccessibilityObjectWrapper accessibilityLabel]):
        (-[WebAccessibilityObjectWrapper accessibilityValue]):

2021-06-09  Eric Carlson  <eric.carlson@apple.com>

        Nullptr crash in MediaSource::updateBufferedIfNeeded
        https://bugs.webkit.org/show_bug.cgi?id=226851
        rdar://79059134

        Reviewed by Devin Rousso.

        No new tests, I was unable to come up with a reproducible case.

        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::updateBufferedIfNeeded): NULL-check `m_private`.

2021-06-09  Chris Dumez  <cdumez@apple.com>

        Avoid some calls to StringView::toString() / StringView::toStringWithoutCopying()
        https://bugs.webkit.org/show_bug.cgi?id=226803

        Reviewed by Darin Adler.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeFontVariationTag):
        * page/FrameView.cpp:
        (WebCore::FrameView::scrollToFragmentInternal):
        * platform/text/hyphen/HyphenationLibHyphen.cpp:
        (WebCore::lastHyphenLocation):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::writeDebugInfo):

2021-06-09  Tyler Wilcock  <twilco.o@protonmail.com>

        [css-counter-styles] Mark counter-style descriptors as "descriptor-only"
        https://bugs.webkit.org/show_bug.cgi?id=226792

        Reviewed by Simon Fraser.

        * css/CSSProperties.json:
        Mark @counter-style rule descriptors (additive-symbols, fallback, pad,
        symbols, negative, prefix, range, suffix, system) as "descriptor-only".

        Note that while `speak-as` is also a valid descriptor for
        @counter-style rules, it is deliberately excluded from this change as
        it is also a property in the CSS Speech specification.

        https://www.w3.org/TR/css-speech-1/#speaking-props-speak-as

2021-06-09  Alex Christensen  <achristensen@webkit.org>

        Performance API: Implement performance.timeOrigin
        https://bugs.webkit.org/show_bug.cgi?id=174862

        Reviewed by Ryosuke Niwa.

        * page/Performance.cpp:
        (WebCore::Performance::timeOrigin const):
        * page/Performance.h:
        * page/Performance.idl:

2021-06-09  Simon Fraser  <simon.fraser@apple.com>

        Unreviewed Windows build fix.

        * rendering/RenderLayerScrollableArea.cpp:

2021-06-09  Simon Fraser  <simon.fraser@apple.com>

        Clean up scrollbar creation code in RenderLayerScrollableArea
        https://bugs.webkit.org/show_bug.cgi?id=226805

        Reviewed by Alan Bujtas.

        Share code between updateScrollbarsAfterStyleChange() and updateScrollbarsAfterLayout() which
        had a lot of common logic. updateScrollbarPresenceAndState() takes two optionals, indicating
        whether information about overflow is available (which is only the case after layout).

        Also make lots of member function declarations private in RenderLayerScrollableArea.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateScrollingNodeLayers):
        * rendering/RenderLayerScrollableArea.cpp:
        (WebCore::RenderLayerScrollableArea::updateScrollbarPresenceAndState):
        (WebCore::RenderLayerScrollableArea::updateScrollbarsAfterStyleChange):
        (WebCore::RenderLayerScrollableArea::updateScrollbarsAfterLayout):
        * rendering/RenderLayerScrollableArea.h:

2021-06-09  Alan Bujtas  <zalan@apple.com>

        [Flexbox] FlexItem stays invisible after initial layout
        https://bugs.webkit.org/show_bug.cgi?id=226778

        Reviewed by Simon Fraser.

        RenderFlexibleBox::layoutAndPlaceChildren() initiates repaint() on newly constructed flex items by checking their everHadLayout bit.
        This is similar to what we do for regular block layout when block level boxes appear.
        However flexitems are laid out multiple times, first right after they are constructed in constructFlexItem. This initial layout
        sets everHadLayout bit to true which makes the check in layoutAndPlaceChildren somewhat late.

        Test: fast/flexbox/repaint-issue-when-flex-item-appears.html

        * rendering/FlexibleBoxAlgorithm.cpp:
        (WebCore::FlexItem::FlexItem):
        * rendering/FlexibleBoxAlgorithm.h:
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::constructFlexItem):
        (WebCore::RenderFlexibleBox::layoutAndPlaceChildren):

2021-06-09  Alexander Mikhaylenko  <alexm@gnome.org>

        [GTK4] Add support for navigation gestures
        https://bugs.webkit.org/show_bug.cgi?id=212327

        Reviewed by Michael Catanzaro.

        Support GskRenderNode for GRefPtr.

        * platform/gtk/GRefPtrGtk.cpp:
        (WTF::refGPtr):
        (WTF::derefGPtr):
        * platform/gtk/GRefPtrGtk.h:

2021-06-09  Alicia Boya García  <aboya@igalia.com>

        [WTF][GStreamer] Add RAII lockers for 3rd party locks
        https://bugs.webkit.org/show_bug.cgi?id=225650

        Reviewed by Xabier Rodriguez-Calvar.

        This patch introduces RAII locker classes that wrap GST_OBJECT_LOCK
        and GST_PAD_STREAM_LOCK to match the style, safety and convenience of
        locks from WTF.

        This patch also changes all usages of GStreamer locks in the WebKit
        codebase to use these new lockers.

        This patch introduces no behavior changes.

        * platform/graphics/gstreamer/GStreamerCommon.h:
        (gstObjectLock):
        (gstObjectUnlock):
        (gstPadStreamLock):
        (gstPadStreamUnlock):
        (holdGstObjectLock):
        (holdGstPadStreamLock):
        * platform/graphics/gstreamer/TextCombinerPadGStreamer.cpp:
        (webkitTextCombinerPadGetProperty):
        (webkitTextCombinerPadSetProperty):
        * platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamer.cpp:
        (webKitMediaSrcWaitForPadLinkedOrFlush):
        (webKitMediaSrcLoop):
        (webKitMediaSrcStreamFlush):
        (webKitMediaSrcGetUri):
        (webKitMediaSrcSetUri):

2021-06-09  Chris Dumez  <cdumez@apple.com>

        Rely on SQLiteDatabase::setMaximumSize() for quota management in LocalStorageDatabase
        https://bugs.webkit.org/show_bug.cgi?id=226788

        Reviewed by Sihui Liu.

        Export SQLiteDatabase::setMaximumSize() so it can be used from WebKit2.

        * platform/sql/SQLiteDatabase.h:

2021-06-08  Alex Christensen  <achristensen@webkit.org>

        Move PrivacyStance code from WebKitAdditions
        https://bugs.webkit.org/show_bug.cgi?id=226774

        Reviewed by Jer Noble.

        * platform/network/NetworkLoadMetrics.h:
        (WebCore::NetworkLoadMetrics::isolatedCopy const):
        (WebCore::NetworkLoadMetrics::operator== const):
        (WebCore::NetworkLoadMetrics::encode const):
        (WebCore::NetworkLoadMetrics::decode):
        * platform/network/cocoa/WebCoreNSURLSession.mm:
        (-[WebCoreNSURLSessionTaskTransactionMetrics _privacyStance]):

2021-06-08  Rob Buis  <rbuis@igalia.com>

        CSSOM test for serializing counter() fails
        https://bugs.webkit.org/show_bug.cgi?id=184256

        Reviewed by Sam Weinig.

        The last CSS component value should be omitted if it is "decimal" [1].

        Behavior matches Firefox and Chrome.

        [1] https://drafts.csswg.org/cssom/#serialize-a-css-component-value

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::formatNumberForCustomCSSText const):

2021-06-08  Sam Weinig  <weinig@apple.com>

        Adopt WTF::Span in SQLiteStatement
        https://bugs.webkit.org/show_bug.cgi?id=226773

        Reviewed by Alex Christensen.

        Do some initial adoption of WTF::Span by adopting it in SQLiteStatement.
        
        - Removes class BlobView.
        - Renames columnBlobView to columnBlobAsSpan() (mirrors columnBlobAsString() naming)
          and have it return a Span<const uint8_t>.
        - Replace bindBlob(int index, const void* blob, int size) with bindBlob(int index, Span<const uint8_t>).

        Due to implicit construction for types with data() and size() functions (actually anything
        that std::data() and std::size() can reason about), Vector and SharedBuffer cleanly work
        to convert to Span of the same underlying type. This means that many callers of bindBlob
        are now simpler, as instead of doing:

            bindBlob(1, foo->data(), foo->size());

        we instead do:

            bindBlob(1, *foo);

        There is much much more to do to take advantage of this new type, but this is
        kept intentionally small, as the pulling back the onion can go very deep. 

        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
        (WebCore::IDBServer::SQLiteIDBBackingStore::migrateIndexInfoTableForIDUpdate):
        (WebCore::IDBServer::SQLiteIDBBackingStore::migrateIndexRecordsTableForIDUpdate):
        (WebCore::IDBServer::SQLiteIDBBackingStore::addExistingIndex):
        (WebCore::IDBServer::SQLiteIDBBackingStore::extractExistingDatabaseInfo):
        (WebCore::IDBServer::SQLiteIDBBackingStore::createObjectStore):
        (WebCore::IDBServer::SQLiteIDBBackingStore::createIndex):
        (WebCore::IDBServer::SQLiteIDBBackingStore::uncheckedHasIndexRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::uncheckedPutIndexRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::keyExistsInObjectStore):
        (WebCore::IDBServer::SQLiteIDBBackingStore::deleteRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::addRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::getRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::getAllObjectStoreRecords):
        (WebCore::IDBServer::SQLiteIDBBackingStore::uncheckedGetIndexRecordForOneKey):
        (WebCore::IDBServer::SQLiteIDBBackingStore::getCount):
        * Modules/indexeddb/server/SQLiteIDBCursor.cpp:
        (WebCore::IDBServer::SQLiteIDBCursor::bindArguments):
        (WebCore::IDBServer::SQLiteIDBCursor::resetAndRebindPreIndexStatementIfNecessary):
        (WebCore::IDBServer::SQLiteIDBCursor::internalFetchNextRecord):
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::store):
        * platform/sql/SQLiteStatement.cpp:
        (WebCore::SQLiteStatement::bindBlob):
        (WebCore::SQLiteStatement::columnBlob):
        (WebCore::SQLiteStatement::columnBlobAsSpan):
        (WebCore::SQLiteStatement::columnBlobView): Deleted.
        * platform/sql/SQLiteStatement.h:
        (WebCore::SQLiteStatement::BlobView::BlobView): Deleted.
        (WebCore::SQLiteStatement::BlobView::data): Deleted.
        (WebCore::SQLiteStatement::BlobView::size): Deleted.
        (): Deleted.
        * workers/service/server/RegistrationDatabase.cpp:
        (WebCore::RegistrationDatabase::doPushChanges):
        (WebCore::RegistrationDatabase::importRecords):

2021-06-08  Jean-Yves Avenard  <jya@apple.com>

        MediaPlayerPrivateRemote::didLoadingProgress should not send synchronous message to GPU process
        https://bugs.webkit.org/show_bug.cgi?id=226761
        rdar://78834312

        Reviewed by Eric Carlson.

        Make MediaPlayer::didLoadingProgress method asynchronous. This method is particularly well
        suited to be made async as there's only one calling point from the HTMLMediaElement that
        occurs when the progressEventTimer gets fired. As such, when the operation is precisely run
        isn't particularly relevant as per spec:
        "While the load is not suspended (see below), every 350ms (±200ms) or for every byte received,
         whichever is least frequent, queue a media element task given the media element to fire an
         event named progress at the element.".
        This allows to make the query to the GPU process async.
        While we can expect the time to query the GPU process to take less than 200ms on average,
        there will be no change in the obversable behaviour compare to the previous implementation
        where the call to the GPU process was synchronous.
        Covered by existing tests.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::progressEventTimerFired): Use new method definition.
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::didLoadingProgress const):
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::didLoadingProgressAsync const): Add default implementation
        that calls the old sync didLoadingProgress method.

2021-06-08  Chris Dumez  <cdumez@apple.com>

        Drop legacy EventLoopEventQueue class
        https://bugs.webkit.org/show_bug.cgi?id=226748

        Reviewed by Darin Adler.

        Drop legacy EventLoopEventQueue class which was used by HTMLMediaElement. I added a
        queueCancellableTaskToDispatchEvent() convenience function on ActiveDOMObject to
        schedule cancellable events directly on the HTML event loop. The function takes
        care of keeping the object and its wrapper alive until the event has fired.

        Note that the previous code was using EventLoopEventQueue to dispatch events on
        other objects than the HTMLMediaElement. This was wrong as it wouldn't take
        care of keeping the real target's JS wrapper alive to actually dispatch the
        event. As a result, I had to update a couple of media classes to subclass
        ActiveDOMObject and the HTMLMediaElement now calls
        queueCancellableTaskToDispatchEvent() directly on the target.

        * Headers.cmake:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/ActiveDOMObject.cpp:
        (WebCore::ActiveDOMObjectEventDispatchTask::ActiveDOMObjectEventDispatchTask):
        (WebCore::ActiveDOMObject::queueTaskToDispatchEventInternal):
        (WebCore::ActiveDOMObject::queueCancellableTaskToDispatchEventInternal):
        * dom/ActiveDOMObject.h:
        * dom/EventLoopEventQueue.cpp: Removed.
        * dom/EventLoopEventQueue.h: Removed.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        (WebCore::HTMLMediaElement::~HTMLMediaElement):
        (WebCore::HTMLMediaElement::scheduleEvent):
        (WebCore::HTMLMediaElement::updateActiveTextTrackCues):
        (WebCore::HTMLMediaElement::cancelPendingEventsAndCallbacks):
        (WebCore::HTMLMediaElement::mediaPlayerKeyNeeded):
        (WebCore::HTMLMediaElement::mediaPlayerInitializationDataEncountered):
        (WebCore::HTMLMediaElement::closeTaskQueues):
        (WebCore::HTMLMediaElement::virtualHasPendingActivity const):
        (WebCore::HTMLMediaElement::enqueuePlaybackTargetAvailabilityChangedEvent):
        (WebCore::HTMLMediaElement::scheduleEventOn):
        * html/HTMLMediaElement.h:
        * html/track/InbandTextTrack.cpp:
        (WebCore::InbandTextTrack::create):
        * html/track/LoadableTextTrack.cpp:
        (WebCore::LoadableTextTrack::create):
        * html/track/TextTrack.cpp:
        (WebCore::TextTrack::TextTrack):
        (WebCore::TextTrack::create):
        (WebCore::TextTrack::activeDOMObjectName const):
        * html/track/TextTrack.h:
        * html/track/TextTrack.idl:
        * html/track/TextTrackCue.cpp:
        (WebCore::TextTrackCue::create):
        (WebCore::TextTrackCue::TextTrackCue):
        (WebCore::TextTrackCue::activeDOMObjectName const):
        * html/track/TextTrackCue.h:
        * html/track/TextTrackCue.idl:

2021-06-08  Devin Rousso  <drousso@apple.com>

        Unreviewed, followup to r278630

        * Modules/applepay/ApplePaySession.h:
        Remove mentions of file that doesn't exist anymore.

2021-06-08  Michael Catanzaro  <mcatanzaro@gnome.org>

        Unreviewed, fix new -Wreturn-type warning
        https://bugs.webkit.org/show_bug.cgi?id=226718
        <rdar://problem/78947485>

        * rendering/HighlightData.cpp:
        (WebCore::HighlightData::rangeForTextBox):

2021-06-08  Jean-Yves Avenard  <jya@apple.com>

        [MSE] Assertion if attempting to perform eviction before playback starts.
        https://bugs.webkit.org/show_bug.cgi?id=226720
        <rdar://problem/78943223>

        Reviewed by Eric Carlson.

        Handle the case where the buffered range doesn't yet exist as we haven't parsed
        an init segment yet.
        Test: media/media-source/media-source-append-buffer-full-quota-exceeded-error-onstart.html

        * platform/graphics/SourceBufferPrivate.cpp:
        (WebCore::SourceBufferPrivate::evictCodedFrames): Exit early if the buffered range is empty
        and handle the case where a buffered range index wasn't found.

2021-06-08  Devin Rousso  <drousso@apple.com>

        [Payment Request] upstream new features
        https://bugs.webkit.org/show_bug.cgi?id=226740
        <rdar://problem/78963132>

        Reviewed by Andy Estes.

         - recurring line items (`HAVE_PASSKIT_RECURRING_SUMMARY_ITEM` and `ENABLE_APPLE_PAY_RECURRING_LINE_ITEM`)
         - deferred line items (`HAVE_PASSKIT_DEFERRED_SUMMARY_ITEM` and `ENABLE_APPLE_PAY_DEFERRED_LINE_ITEM`)
         - estimated shipping dates (`HAVE_PASSKIT_SHIPPING_METHOD_DATE_COMPONENTS_RANGE` and `ENABLE_APPLE_PAY_SHIPPING_METHOD_DATE_COMPONENTS_RANGE`)
         - coupon code entry (`HAVE_PASSKIT_COUPON_CODE` and `ENABLE_APPLE_PAY_COUPON_CODE`)
         - shipped vs in-store pickup (`HAVE_PASSKIT_SHIPPING_CONTACT_EDITING_MODE` and `ENABLE_APPLE_PAY_SHIPPING_CONTACT_EDITING_MODE`)

        Tests: http/tests/paymentrequest/ApplePayModifier-additionalLineItems.https.html
               http/tests/paymentrequest/ApplePayModifier-additionalShippingMethods.https.html
               http/tests/paymentrequest/ApplePayModifier-total.https.html
               http/tests/paymentrequest/paymentmethodchange-couponCode.https.html
               http/tests/paymentrequest/paymentrequest-couponCode.https.html
               http/tests/paymentrequest/paymentrequest-shippingContactEditingMode.https.html
               http/tests/paymentrequest/paymentrequest-supportsCouponCode.https.html

        * Modules/applepay/ApplePayCouponCodeUpdate.idl: Copied from Source/WebCore/Modules/applepay/ApplePayPaymentMethodModeUpdate.idl.
        * Modules/applepay/ApplePayCouponCodeUpdate.h: Renamed from Source/WebCore/Modules/applepay/ApplePayPaymentMethodModeUpdate.h.
        (WebCore::ApplePayCouponCodeUpdate::encode const):
        (WebCore::ApplePayCouponCodeUpdate::decode):
        Object used to update the payment request via `ApplePaySession.prototype.completeCouponCodeChange`
        when responding to the user modifying the coupon code.

        * Modules/applepay/ApplePayErrorCode.idl:
        * Modules/applepay/ApplePayErrorCode.h:
        Add `"couponCodeInvalid"` and `"couponCodeExpired"`.

        * Modules/applepay/ApplePayLineItem.idl:
        * Modules/applepay/ApplePayLineItem.h:
        (WebCore::ApplePayLineItem::encode const):
        (WebCore::ApplePayLineItem::decode):
        * Modules/applepay/ApplePayPaymentTiming.idl: Added.
        * Modules/applepay/ApplePayPaymentTiming.h: Added.
        * Modules/applepay/ApplePayRecurringPaymentDateUnit.idl: Added.
        * Modules/applepay/ApplePayRecurringPaymentDateUnit.h: Added.
        Add members that indicate whether this line item is immediate, recurring, or deferred.
        Depending on that timing, additional members are added for further configuration (e.g. the
        start and/or end date of a recurring payment, it's frequency, etc.).

        * Modules/applepay/ApplePayShippingMethod.idl:
        * Modules/applepay/ApplePayShippingMethod.h:
        (WebCore::ApplePayShippingMethod::encode const):
        (WebCore::ApplePayShippingMethod::decode):
        * Modules/applepay/ApplePayDateComponentsRange.idl: Added.
        * Modules/applepay/ApplePayDateComponentsRange.h: Added.
        (WebCore::ApplePayDateComponentsRange::encode const):
        (WebCore::ApplePayDateComponentsRange::decode):
        * Modules/applepay/ApplePayDateComponents.idl: Added.
        * Modules/applepay/ApplePayDateComponents.h: Added.
        (WebCore::ApplePayDateComponents::encode const):
        (WebCore::ApplePayDateComponents::decode):
        Add members that can be used to indicate the estimated shipping dates for this shipping method.

        * Modules/applepay/ApplePayRequestBase.idl:
        * Modules/applepay/ApplePayRequestBase.h:
        * Modules/applepay/ApplePayRequestBase.cpp:
        (WebCore::convertAndValidate):
        * Modules/applepay/ApplePaySessionPaymentRequest.h:
        (WebCore::ApplePaySessionPaymentRequest::supportsCouponCode const): Added.
        (WebCore::ApplePaySessionPaymentRequest::setSupportsCouponCode): Added.
        (WebCore::ApplePaySessionPaymentRequest::couponCode const): Added.
        (WebCore::ApplePaySessionPaymentRequest::setCouponCode): Added.
        (WebCore::ApplePaySessionPaymentRequest::shippingContactEditingMode const): Added.
        (WebCore::ApplePaySessionPaymentRequest::setShippingContactEditingMode): Added.
        * Modules/applepay/ApplePayShippingContactEditingMode.idl: Added.
        * Modules/applepay/ApplePayShippingContactEditingMode.h: Added.
        Add members that indicate:
         - whether this payment request supports a coupon code at all
         - the initial coupon code (assuming the above)
         - whether this payment request allows editing the shipping contact (i.e. in-store pickup does not)

         * dom/EventNames.h:
         * dom/EventNames.in:
        * Modules/applepay/ApplePayCouponCodeChangedEvent.idl: Added.
        * Modules/applepay/ApplePayCouponCodeChangedEvent.h: Added.
        * Modules/applepay/ApplePayCouponCodeChangedEvent.cpp: Added.
        (WebCore::ApplePayCouponCodeChangedEvent::ApplePayCouponCodeChangedEvent):
        (WebCore::ApplePayCouponCodeChangedEvent::eventInterface const):
        Add a `"couponcodechange"` event that is dispatched whenever the user modifies the coupon code for an `ApplePaySession`.

        * Modules/applepay/ApplePayCouponCodeDetails.idl: Copied from Source/WebCore/Modules/applepay/ApplePayPaymentMethodModeDetails.idl.
        * Modules/applepay/ApplePayCouponCodeDetails.h: Copied from Source/WebCore/Modules/applepay/ApplePayPaymentMethodModeUpdate.idl.
        Used as the `object methodData` when a `PaymentMethodChangeEvent` is dispatched for a `PaymentRequest`.

        * Modules/applepay/ApplePaySession.idl:
        * Modules/applepay/ApplePaySession.h:
        * Modules/applepay/ApplePaySession.cpp:
        (WebCore::convertAndValidate):
        (WebCore::ApplePaySession::completeCouponCodeChange): Added.
        (WebCore::ApplePaySession::didChangeCouponCode): Renamed from `WebCore::ApplePaySession::didChangePaymentMethodMode`.
        (WebCore::ApplePaySession::canSuspendWithoutCanceling const):
        (WebCore::ApplePaySession::canBegin const):
        (WebCore::ApplePaySession::canAbort const):
        (WebCore::ApplePaySession::canCancel const):
        (WebCore::ApplePaySession::canCompleteShippingMethodSelection const):
        (WebCore::ApplePaySession::canCompleteShippingContactSelection const):
        (WebCore::ApplePaySession::canCompletePaymentMethodSelection const):
        (WebCore::ApplePaySession::canCompleteCouponCodeChange const): Renamed from `WebCore::ApplePaySession::canCompletePaymentMethodModeChange const`.
        (WebCore::ApplePaySession::canCompletePayment const):
        (WebCore::ApplePaySession::isFinalState const):
        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.h:
        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp:
        (WebCore::ApplePayPaymentHandler::paymentMethodUpdated):
        (WebCore::ApplePayPaymentHandler::didChangeCouponCode): Renamed from `WebCore::ApplePayPaymentHandler::didChangePaymentMethodMode`.
        Add methods for JS to call and state logic to handle coupon code changes.

        * Modules/applepay/PaymentCoordinator.h:
        * Modules/applepay/PaymentCoordinator.cpp:
        (WebCore::PaymentCoordinator::completeCouponCodeChange): Renamed from `WebCore::PaymentCoordinator::completePaymentMethodModeChange`.
        (WebCore::PaymentCoordinator::didChangeCouponCode): Renamed from `WebCore::PaymentCoordinator::didChangePaymentMethodMode`.
        * Modules/applepay/PaymentCoordinatorClient.h:
        * loader/EmptyClients.cpp:
        (WebCore::EmptyPaymentCoordinatorClient::completeCouponCodeChange): Renamed from `WebCore::EmptyPaymentCoordinatorClient::completePaymentMethodModeChange`.
        Plumbing up to WebKit.

        * Modules/applepay/cocoa/PaymentSummaryItemsCocoa.mm:
        (WebCore::toDate): Added.
        (WebCore::toCalendarUnit): Added.
        (WebCore::toPKPaymentSummaryItem):
        Convert WebCore objects to PassKit objects.

        * testing/MockPaymentCoordinator.idl:
        * testing/MockPaymentCoordinator.h:
        * testing/MockPaymentCoordinator.cpp:
        (WebCore::MockPaymentCoordinator::showPaymentUI):
        (WebCore::MockPaymentCoordinator::completeCouponCodeChange): Renamed from `WebCore::MockPaymentCoordinator::completePaymentMethodModeChange`.
        (WebCore::MockPaymentCoordinator::changeCouponCode): Added.

        * Modules/applepay/cocoa/PaymentAPIVersionCocoa.mm:
        (WebCore::PaymentAPIVersion::current):

        * Modules/applepay/PaymentHeaders.h:
        * Modules/applepay/PaymentSession.h:

        * Modules/applepay/ApplePayLineItemData.idl: Removed.
        * Modules/applepay/ApplePayLineItemData.h: Removed.
        * Modules/applepay/ApplePayShippingMethodData.idl: Removed.
        * Modules/applepay/ApplePayShippingMethodData.h: Removed.
        Remove unnecessary base types after r275169.

        * PlatformMac.cmake:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:

2021-06-08  Michael Catanzaro  <mcatanzaro@gnome.org>

        Unreviewed, fix build after r278621
        https://bugs.webkit.org/show_bug.cgi?id=226731
        <rdar://problem/79021715>

        * rendering/MarkedText.cpp:

2021-06-08  Chris Dumez  <cdumez@apple.com>

        Unreviewed Windows build fix after r278619.

        * platform/graphics/avfoundation/cf/CDMSessionAVFoundationCF.cpp:
        (WebCore::CDMSessionAVFoundationCF::generateKeyRequest):

2021-06-08  Devin Rousso  <drousso@apple.com>

        [Modern Media Controls] Don't show Playback Speed when up-to-date Live Boadcasts
        https://bugs.webkit.org/show_bug.cgi?id=226744

        Reviewed by Eric Carlson.

        Test: http/tests/media/modern-media-controls/overflow-support/playback-speed-live-broadcast.html

        * Modules/modern-media-controls/media/overflow-support.js:
        (OverflowSupport.prototype.get mediaEvents):
        (OverflowSupport.prototype.syncControl):
        (OverflowSupport.prototype.get _includePlaybackRates): Added.
        Rework existing logic that determines whether to include "Playback Speed" into a separate
        function for clarity.

2021-06-08  Antti Koivisto  <antti@apple.com>

        Factor MarkedText collection out of LegacyInlineTextBox
        https://bugs.webkit.org/show_bug.cgi?id=226731

        Reviewed by Sam Weinig.

        Move more code out from the legacy inline classes.

        * rendering/LegacyInlineTextBox.cpp:
        (WebCore::LegacyInlineTextBox::paint):
        (WebCore::LegacyInlineTextBox::hasMarkers const):
        (WebCore::LegacyInlineTextBox::paintPlatformDocumentMarkers):
        (WebCore::LegacyInlineTextBox::calculateUnionOfAllDocumentMarkerBounds const):
        (WebCore::LegacyInlineTextBox::paintMarkedTexts):
        (WebCore::LegacyInlineTextBox::highlightStartEnd const): Deleted.
        (WebCore::LegacyInlineTextBox::collectMarkedTextsForDraggedContent): Deleted.
        (WebCore::LegacyInlineTextBox::collectMarkedTextsForDocumentMarkers const): Deleted.
        (WebCore::LegacyInlineTextBox::collectMarkedTextsForHighlights const): Deleted.
        * rendering/LegacyInlineTextBox.h:
        (WebCore::LegacyInlineTextBox::paintMarkedTexts):
        * rendering/MarkedText.cpp:
        (WebCore::MarkedText::subdivide):
        (WebCore::MarkedText::collectForHighlights):
        (WebCore::MarkedText::collectForDocumentMarkers):
        (WebCore::MarkedText::collectForDraggedContent):
        (WebCore::subdivide): Deleted.
        * rendering/MarkedText.h:
        (WebCore::MarkedText::operator== const):
        * rendering/MarkedTextStyle.cpp:
        (WebCore::subdivideAndResolveStyle):

2021-06-08  Truitt Savell  <tsavell@apple.com>

        Unreviewed, reverting r278609.

        Broke builds with a linker error.

        Reverted changeset:

        "Update libwebrtc to M92"
        https://bugs.webkit.org/show_bug.cgi?id=226494
        https://commits.webkit.org/r278609

2021-06-08  Chris Dumez  <cdumez@apple.com>

        Reduce use of reinterpret_cast<> in the codebase
        https://bugs.webkit.org/show_bug.cgi?id=226743

        Reviewed by Darin Adler.

        * Modules/encryptedmedia/legacy/LegacyCDMSessionClearKey.cpp:
        (WebCore::CDMSessionClearKey::generateKeyRequest):
        * Modules/fetch/FetchBody.cpp:
        (WebCore::FetchBody::take):
        * Modules/fetch/FetchBodyConsumer.cpp:
        (WebCore::FetchBodyConsumer::resolve):
        (WebCore::FetchBodyConsumer::takeAsBlob):
        (WebCore::FetchBodyConsumer::takeAsText):
        * Modules/mediastream/RTCDataChannelRemoteHandler.cpp:
        (WebCore::RTCDataChannelRemoteHandler::readyToSend):
        (WebCore::RTCDataChannelRemoteHandler::sendStringData):
        (WebCore::RTCDataChannelRemoteHandler::sendRawData):
        * Modules/webaudio/MediaStreamAudioSourceGStreamer.cpp:
        (WebCore::copyBusData):
        * Modules/webauthn/AuthenticatorResponseData.h:
        (WebCore::encodeArrayBuffer):
        (WebCore::decodeArrayBuffer):
        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::startClosingHandshake):
        (WebCore::WebSocketChannel::processOutgoingFrameQueue):
        * Modules/websockets/WebSocketHandshake.cpp:
        (WebCore::WebSocketHandshake::getExpectedWebSocketAccept):
        (WebCore::headerHasValidHTTPVersion):
        * bindings/js/ScriptBufferSourceProvider.h:
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneDeserializer::readString):
        * contentextensions/SerializedNFA.cpp:
        (WebCore::ContentExtensions::SerializedNFA::pointerAtOffsetInFile const):
        * dom/Node.cpp:
        (WebCore::hashPointer):
        * dom/TextEncoder.cpp:
        (WebCore::TextEncoder::encode const):
        * dom/TextEncoderStreamEncoder.cpp:
        (WebCore::TextEncoderStreamEncoder::flush):
        * editing/cocoa/WebContentReaderCocoa.mm:
        (WebCore::sanitizeMarkupWithArchive):
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::texImageArrayBufferViewHelper):
        * inspector/DOMPatchSupport.cpp:
        (WebCore::addStringToSHA1):
        * loader/TextResourceDecoder.cpp:
        (WebCore::TextResourceDecoder::textFromUTF8):
        * loader/cache/CachedScript.cpp:
        (WebCore::CachedScript::script):
        * page/cocoa/ResourceUsageOverlayCocoa.mm:
        (WebCore::showText):
        * platform/SharedBufferChunkReader.cpp:
        (WebCore::SharedBufferChunkReader::nextChunk):
        * platform/cf/SharedBufferCF.cpp:
        (WebCore::SharedBuffer::createCFData const):
        * platform/generic/KeyedEncoderGeneric.cpp:
        (WebCore::KeyedEncoderGeneric::encodeString):
        * platform/graphics/GraphicsContextGL.cpp:
        (WebCore::GraphicsContextGL::packImageData):
        * platform/graphics/ImageBufferBackend.cpp:
        (WebCore::ImageBufferBackend::getPixelBuffer const):
        (WebCore::ImageBufferBackend::putPixelBuffer):
        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp:
        (WebCore::InbandTextTrackPrivateAVF::processNativeSamples):
        * platform/graphics/avfoundation/cf/CDMSessionAVFoundationCF.cpp:
        (WebCore::CDMSessionAVFoundationCF::generateKeyRequest):
        (WebCore::CDMSessionAVFoundationCF::update):
        * platform/graphics/avfoundation/cf/InbandTextTrackPrivateAVCF.cpp:
        (WebCore::InbandTextTrackPrivateAVCF::readNativeSampleBuffer):
        * platform/graphics/displaylists/DisplayListItemBuffer.cpp:
        (WebCore::DisplayList::ItemBuffer::createItemBuffer):
        * platform/graphics/displaylists/DisplayListIterator.cpp:
        (WebCore::DisplayList::DisplayList::Iterator::updateCurrentItem):
        * platform/image-decoders/gif/GIFImageReader.h:
        (GIFImageReader::data const):
        * platform/mac/SSLKeyGeneratorMac.mm:
        (WebCore::signedPublicKeyAndChallengeString):
        * platform/mediastream/RealtimeMediaSourceCenter.cpp:
        (WebCore::addStringToSHA1):
        * platform/network/FormDataBuilder.cpp:
        (WebCore::FormDataBuilder::encodeStringAsFormData):
        * platform/network/SocketStreamHandle.cpp:
        (WebCore::SocketStreamHandle::sendHandshake):
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        * platform/network/cf/ResourceRequestCFNet.h:
        (WebCore::httpHeaderValueUsingSuitableEncoding):
        * platform/network/cf/SocketStreamHandleImplCFNet.cpp:
        (WebCore::SocketStreamHandleImpl::platformSendInternal):
        * platform/network/curl/CurlCacheEntry.cpp:
        (WebCore::CurlCacheEntry::generateBaseFilename):
        * platform/sql/SQLiteStatement.cpp:
        (WebCore::SQLiteStatement::columnBlobView):
        * testing/MockCDMFactory.cpp:
        (WebCore::MockCDM::sanitizeResponse const):

2021-06-08  Devin Rousso  <drousso@apple.com>

        [Modern Media Controls] upstream new features
        https://bugs.webkit.org/show_bug.cgi?id=226736
        <rdar://problem/78957464>

        Reviewed by Eric Carlson.

         - bring the "Audio"/"Languages" tracks menu to iOS
         - add a new "Playback Speed" menu in the overflow menu on iOS and macOS
         - add support for showing the most relevant `<track kind="chapters">` in the overflow menu on iOS and macOS

        Tests: media/modern-media-controls/overflow-button/overflow-button.html
               media/modern-media-controls/overflow-support/chapters.html
               media/modern-media-controls/overflow-support/playback-speed.html

        * Modules/mediacontrols/MediaControlsHost.cpp:
        (WebCore::MediaControlsHost::showMediaControlsContextMenu):
        * Modules/modern-media-controls/media/overflow-support.js:
        (OverflowSupport.prototype.get mediaEvents):
        (OverflowSupport.prototype.get tracksToMonitor):
        (OverflowSupport.prototype.syncControl):
        * en.lproj/Localizable.strings:

        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::mediaControlsScripts):
        * rendering/RenderThemeAdwaita.cpp:
        (WebCore::RenderThemeAdwaita::mediaControlsScripts):
        * rendering/RenderThemeAdwaita.h:
        * rendering/RenderThemeCocoa.h:
        * rendering/RenderThemeCocoa.mm:
        (WebCore::RenderThemeCocoa::purgeCaches):
        (WebCore::RenderThemeCocoa::mediaControlsScripts):
        * rendering/RenderThemeWin.h:
        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::mediaControlsScripts):
        Drop the "additional script" and lower the inline capacity of the `Vector`.

        * testing/Internals.idl:
        * testing/Internals.h:
        * testing/Internals.cpp:
        (WebCore::Internals::setMediaControlsHidePlaybackRates): Added.
        * html/HTMLMediaElement.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setMediaControlsHidePlaybackRates): Added.
        Since Playback Rates is always shown, provide a way for tests to turn it off.

2021-06-08  Devin Rousso  <drousso@apple.com>

        Require that callsites of `SnapshotOptions` specify a `PixelFormat` and `DestinationColorSpace`
        https://bugs.webkit.org/show_bug.cgi?id=226756

        Reviewed by Sam Weinig.

        Don't wrap `PixelFormat` or `DestinationColorSpace` with `std::optional` as we want each
        callsite to explicity configure them. This makes it easier to find where values for each
        are used as there's no implicit behavior.

        No behavior change. Followup after r278565.

        * page/FrameSnapshotting.h:
        * page/FrameSnapshotting.cpp:
        (WebCore::snapshotFrameRect):
        (WebCore::snapshotFrameRectWithClip):
        (WebCore::snapshotNode):
        (WebCore::snapshotSelection):

        * inspector/agents/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::snapshotNode):
        (WebCore::InspectorPageAgent::snapshotRect):
        * page/PageConsoleClient.cpp:
        (WebCore::PageConsoleClient::screenshot):
        * page/TextIndicator.cpp:
        (WebCore::snapshotOptionsForTextIndicatorOptions):
        (WebCore::takeSnapshots):
        * platform/DragImage.cpp:
        (WebCore::createDragImageForNode):
        (WebCore::createDragImageForSelection):
        (WebCore::createDragImageForRange):
        (WebCore::createDragImageForImage):

2021-06-08  Sam Weinig  <weinig@apple.com>

        Move some hand rolled CSSProperty predicates to be generated based on new CSSProperties.json properties
        https://bugs.webkit.org/show_bug.cgi?id=226768

        Reviewed by Antti Koivisto.

        Replace hand rolled isDescriptorOnly, isDirectionAwareProperty and isColorProperty
        functions with generated versions using new "color-property", "direction-aware-property"
        and "descriptor-only" properties in CSSProperties.json.

        * css/CSSProperties.json:
        * css/CSSProperty.cpp:
        (WebCore::CSSProperty::isDescriptorOnly): Deleted.
        (WebCore::CSSProperty::isDirectionAwareProperty): Deleted.
        (WebCore::CSSProperty::isColorProperty): Deleted.
        * css/makeprop.pl:
        (addProperty):

2021-06-08  Antoine Quint  <graouts@webkit.org>

        REGRESSION (r256095): Adding a border-radius, border, or box-shadow breaks animations from scale(0)
        https://bugs.webkit.org/show_bug.cgi?id=218371
        <rdar://problem/70906316>

        Reviewed by Simon Fraser.

        When computing an animation's transform extent, we must account for implicit keyframes.

        Test: webanimations/accelerated-transform-animation-to-scale-zero-with-implicit-from-keyframe.html

        * animation/KeyframeEffect.cpp:
        (WebCore::KeyframeEffect::computeExtentOfTransformAnimation const):

2021-06-08  Youenn Fablet  <youenn@apple.com> and Victor M. Jaquez L. <vjaquez@igalia.com>

        Update libwebrtc to M92
        https://bugs.webkit.org/show_bug.cgi?id=226494

        Reviewed by Eric Carlson.

        Covered by existing tests.

        * Configurations/WebCore.xcconfig:
        * Configurations/WebCoreTestSupport.xcconfig:
        * Modules/mediastream/libwebrtc/LibWebRTCRtpReceiverBackend.cpp:
        (WebCore::LibWebRTCRtpReceiverBackend::createSource):
        * Modules/mediastream/libwebrtc/LibWebRTCStatsCollector.cpp:
        (WebCore::fillInboundRtpStreamStats):
        (WebCore::fillOutboundRtpStreamStats):
        (WebCore::fillRTCIceCandidateStats):
        * platform/mediastream/libwebrtc/LibWebRTCProvider.cpp:
        (WebCore::LibWebRTCProvider::signalingThread):
        (WebCore::LibWebRTCProvider::createPeerConnectionFactory):
        (WebCore::LibWebRTCProvider::setPeerConnectionFactory):
        (WebCore::LibWebRTCProvider::createPeerConnection):
        * platform/mediastream/libwebrtc/LibWebRTCProvider.h:
        * testing/MockLibWebRTCPeerConnection.cpp:
        (WebCore::createConnection):
        (WebCore::MockLibWebRTCPeerConnectionFactory::CreatePeerConnectionOrError):
        * testing/MockLibWebRTCPeerConnection.h:

2021-06-08  Alan Bujtas  <zalan@apple.com>

        [LFC][TFC] Add initial percent value support for columns
        https://bugs.webkit.org/show_bug.cgi?id=226751

        Reviewed by Simon Fraser.

        This patch adds the initial support for content like this:
        <table>
          <tr>
            <td style="width: 10%"></td><td style="width: 90%"></td>
          </tr>
        </table>

        Percent values work in mysterious ways in cases when the table has no fixed width.

        1. The smaller the percent value is, the wider the table may become.

         Percent values are resolved against the cell's border box (so essentially they are resolved
         against their own content as opposed to the table/containing block) and the formula is slightly different.

            <td style="padding: 5px; width: 20%;"></td> : produces a 10px wide border box (horizontal border: 0px, padding: 10px, content: 0px).
              The maximum constraint is resolved to 50px (width / percent * 100)
            <td style="padding: 5px; width: 100%;"></td> : produces a 10px wide border box and the maximum constraint is resolved to 10px. 

          This maximum constraint value turns into the available width for the table content and becomes the final table width.

        2. With multiple rows, we pick the highest _percent_ value for each column (as opposed to the resolved values).

              <tr><td style="width: 20%"></td></tr> (assum same 5px padding on both sides)
              <tr><td style="width: 80%"></td></tr>

          While the second row's cell has a higher maximum constraint value (50px see #1) since we only look at the raw percent values,
          this content only produces a 12.5px wide table.

        3. The percent values do not accumulate across columns but instead we pick the largest one to represent the entire table's max constraint width.

            <tr><td style="width: 60%"></td><td style="width: 40%"></td></tr>

          60% resolves to 16.6px
          40% resolves to 25px and we use the 25px value as the width for the entire table (and not 16.6px + 25px).

        4. Since we pick the highest percent values across rows for each columns, we may end up with > 100%.
          In such cases we start dropping percent values for subsequent columns:

            <tr><td style="width: 20%;"></td><td style="width: 80%;"></td></tr>
            <tr><td style="width: 60%;"></td><td style="width: 10%;"></td></tr>

          First column width is max(20%, 60%) -> 60%
          Second column width is max(80%, 10%) -> 80%
          As we limit the accumulated percent value to 100%, the final column percent values are 60% and 40% (and not 80%).
          Now the 60% is resolved to 16.6px and the 40% is resolved to 25px and since we don't accumulate these values (see #3)
          the final table width is 25px (based on a percent value which is not even in the markup).

        5. While the smaller percent values produce wider tables (see #1), during the available space distribution
          columns with smaller percent values get assigned less space.

            <tr><td style="width: 1%"></td><td style="width: 99%"></td></tr>

          This content produces a 1000px wide table due to the small (1%) percent value (see #1 #2 and #3).
          When we distribute the available space (1000px), the first cell gets only 10px (1%) while the second cell ends up with 990px (99%).

        (and this is the cherry on top (not included in this patch):
         Imagine the following scenario:
           1. the accumulated column percent value > 100% (let's say 80% and 30%)
           2. as we reach the 100% while walking the columns one by one (see #4), the remaining percent value becomes 0%.
           3. In order to avoid division by 0, we pick a very small epsilon value to run the formula.
           4. Now this very small percent value produces a large resolved value (see #2) which means

            <tr><td style="width: 100%"></td></tr>

            produces a 10px wide table

            <tr><td style="width: 100%"></td><td style="width: 1%"></td></tr> <- note the 1%

            produces a very very very wide table.
        )

        Test: fast/layoutformattingcontext/table-with-percent-columns-only-no-content.html

        * layout/formattingContexts/table/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::computedIntrinsicWidthConstraints):
        (WebCore::Layout::TableFormattingContext::computedPreferredWidthForColumns):
        * layout/formattingContexts/table/TableGrid.h:
        (WebCore::Layout::TableGrid::Column::percent const):
        (WebCore::Layout::TableGrid::Column::setFixedWidth):
        (WebCore::Layout::TableGrid::Column::setPercent):
        * layout/formattingContexts/table/TableLayout.cpp:
        (WebCore::Layout::TableFormattingContext::TableLayout::distributedHorizontalSpace):

2021-06-08  Jean-Yves Avenard  <jya@apple.com>

        [MSE] Rework handling of SourceBuffer's buffer full.
        https://bugs.webkit.org/show_bug.cgi?id=226711
        <rdar://problem/78937909>

        Reviewed by Jer Noble.

        Bug 225630 modified the handling of the Source Buffer "buffer full" algorithm.
        Per spec, we are to reject a buffer only once we know that the source buffer is full.
        The first appendBuffer should always complete.
        https://w3c.github.io/media-source/#sourcebuffer-buffer-full-flag
        "The buffer full flag keeps track of whether appendBuffer() is allowed to accept
         more bytes. It is set to false when the SourceBuffer object is created and gets
         updated as data is appended and removed."

        "buffer full flag" only gets modified to true in the 3.5.1 Segment Parser Loop
        algorithm, step 6.3
        https://w3c.github.io/media-source/#sourcebuffer-segment-parser-loop
        "If this SourceBuffer is full and cannot accept more media data, then set the
         buffer full flag to true."

        On the 2nd call to the appendBuffer, in the Prepare Append algorithm, step 3.5.4.6:
        https://w3c.github.io/media-source/#sourcebuffer-prepare-append

        "If the buffer full flag equals true, then throw a QuotaExceededError exception
         and abort these steps."

        This change moves the check of the source buffer size back into SourceBufferPrivate
        so that checking if we have sufficient space or not is hidden from the SourceBuffer.
        Rather than deal with a single "buffer full" flag, we use instead a isBufferFullFor()
        method which allows to easily swap between the previous per-spec behaviour and the
        one introduced by bug 225630 as it does present some advantages.
        We can always determine if we have sufficient space by checking the current source
        buffer memory size and the requested limit.
        The previous algorithm took into consideration the allocated capacity of the
        temporary SourceBuffer::m_pendingAppendData ; this approach was flawed in that we
        always checked if m_pendingAppendData.capacity + newDataSize would fit in the
        source buffer. However newDataSize would always happen to fit within the existing
        capacity, so it was accounted for twice.
        We remove check on the capacity allocated as it simplifies the code a great deal,
        and avoid the piggy-backing of unrelated methods (such as
        SourceBufferPrivate::reenqueueMediaIfNeeded that ended up also checking capacity)

        This change is already covered with existing tests.

        * Modules/mediasource/SourceBuffer.cpp: call new isBufferFullFor to check if
        sufficient is available.
        (WebCore::SourceBuffer::appendBufferInternal):
        (WebCore::SourceBuffer::sourceBufferPrivateAppendComplete):
        * platform/graphics/SourceBufferPrivate.h: Add isBufferFullFor method
        remove m_bufferFull member.
        * platform/graphics/SourceBufferPrivate.cpp:
        (WebCore::SourceBufferPrivate::reenqueueMediaIfNeeded): remove reference to
        buffer capacity
        (WebCore::SourceBufferPrivate::evictCodedFrames): remove reference to
        buffer capacity
        (WebCore::SourceBufferPrivate::isBufferFullFor): To get per-spec behaviour
        we only need to stop checking the value of the requiredSize argument.

2021-06-08  Antti Koivisto  <antti@apple.com>

        `text-decoration: underline` is not applied to web component
        https://bugs.webkit.org/show_bug.cgi?id=226724
        <rdar://problem/78987286>

        Reviewed by Ryosuke Niwa.

        'text-decoration' is not an inherited property in itself but its effective value
        behaves as it was. We fail to inherit this effective value into author shadow trees.

        Test case by Jeroen Zwartepoorte.

        Test: fast/shadow-dom/effective-text-decoration-inheritance.html

        * style/StyleAdjuster.cpp:
        (WebCore::Style::shouldInheritEffectiveTextDecorations):

        Test for user agent shadow tree, not a shadow tree in general.
        Also inverse the logic and refactor a bit.

        (WebCore::Style::Adjuster::adjust const):
        (WebCore::Style::isAtShadowBoundary): Deleted.
        (WebCore::Style::doesNotInheritTextDecoration): Deleted.

2021-06-08  Frédéric Wang  <fwang@igalia.com>

        Crash in InsertParagraphSeparatorCommand::doApply
        https://bugs.webkit.org/show_bug.cgi?id=226527

        Reviewed by Ryosuke Niwa.

        After r273375 and r278002, it is possible that InsertParagraphSeparatorCommand::doApply is
        confused by a display: table start block, leading to nullptr crash in the rest of the
        function. This patch just excludes that case in order to work around that kind of issue.

        Test: fast/editing/insert-paragraph-with-img-in-table-crash.html

        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply):

2021-06-07  Alex Christensen  <achristensen@webkit.org>

        Adopt SecTrustGetCertificateAtIndex replacement where available
        https://bugs.webkit.org/show_bug.cgi?id=225893

        Reviewed by Chris Dumez.

        * platform/network/cf/CertificateInfoCFNet.cpp:
        (WebCore::certificatesMatch):
        (WebCore::CertificateInfo::certificateChainFromSecTrust):
        (WebCore::CertificateInfo::containsNonRootSHA1SignedCertificate const):
        * platform/network/cocoa/CertificateInfoCocoa.mm:
        (WebCore::CertificateInfo::dump const):

2021-06-07  Alexey Shvayka  <shvaikalesh@gmail.com>

        Unreviewed, reland r276592 with a fix for put() override in prototype chain of a JSProxy
        https://bugs.webkit.org/show_bug.cgi?id=226185

        Tests: js/dom/script-tests/reflect-set-onto-dom.js
               imported/w3c/web-platform-tests/WebIDL/ecmascript-binding/interface-object-set-receiver.html
               http/tests/security/cross-frame-access-object-getPrototypeOf-in-put.html

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::put):
        (WebCore::JSDOMWindow::doPutPropertySecurityCheck): Deleted.
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::JSLocation::doPutPropertySecurityCheck): Deleted.
        * bindings/js/JSRemoteDOMWindowCustom.cpp:
        (WebCore::JSRemoteDOMWindow::put):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GeneratePut):
        (GenerateHeader):
        * bindings/scripts/test/JS/*: Updated.
        * bridge/objc/objc_runtime.h:
        * bridge/runtime_array.h:
        * bridge/runtime_object.h:

2021-06-07  Devin Rousso  <drousso@apple.com>

        Fix localized strings after r278202
        https://bugs.webkit.org/show_bug.cgi?id=226742

        Reviewed by Eric Carlson.

        * Scripts/extract-localizable-strings.pl:
        Add support for `WEB_UI_CFSTRING_KEY`.

        * en.lproj/Localizable.strings:

2021-06-07  Alexey Shvayka  <shvaikalesh@gmail.com>

        Window should behave like a legacy platform object without indexed setter
        https://bugs.webkit.org/show_bug.cgi?id=225894

        Reviewed by Darin Adler.

        This change fixes major interop issue by disallowing expando indexed properties on WindowProxy,
        raising TypeError only when needed, which aligns WebKit with Blink and Gecko.

        While [[DefineOwnProperty]] [1] and [[Delete]] [2] methods of WindowProxy are implemented
        precisely per spec, current [[Set]] [3] algorithm seems to allow invoking setters from
        the prototype chain. Blink and Gecko implement stricter semantics by failing early rather
        than traversing the prototype chain, as does this patch.

        To avoid breaking native apps that either add expando indexed properties to WindowProxy, or
        more likely read / write indices of sloppy function's |this| value, which accidently happens
        to be a WindowProxy, the new behavior is introduced only for web content and newly-built apps.

        Since unlike putByIndex(), deletePropertyByIndex() might be invoked with UINT_MAX, which is
        not an array index [4], isIndex() check is required. In future, JSC will be fixed to remove
        such checks from all indexed overrides.

        DeletePropertySlot::disableCaching() is not called because indexed deletes are not currently
        repatched, and once they are, cacheability should be inferred from added type info flags.

        Also, removes extra jsDOMWindowGetOwnPropertySlotRestrictedAccess() call for indices, which
        is missing from the spec [5]; this is unobservable.

        [1] https://html.spec.whatwg.org/multipage/window-object.html#windowproxy-defineownproperty (step 2.1)
        [2] https://html.spec.whatwg.org/multipage/window-object.html#windowproxy-delete (step 2.1)
        [3] https://html.spec.whatwg.org/multipage/window-object.html#windowproxy-set (step 3)
        [4] https://tc39.es/ecma262/#array-index
        [5] https://html.spec.whatwg.org/multipage/window-object.html#windowproxy-getownproperty (step 2.5.2)

        Tests: imported/w3c/web-platform-tests/html/browsers/the-window-object/window-indexed-properties-delete-no-cache.html
               imported/w3c/web-platform-tests/html/browsers/the-window-object/window-indexed-properties.html
               imported/w3c/web-platform-tests/html/browsers/the-window-object/window-indexed-properties-strict.html

        * bindings/js/JSDOMExceptionHandling.cpp:
        (WebCore::makeUnsupportedIndexedSetterErrorMessage):
        * bindings/js/JSDOMExceptionHandling.h:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::allowsLegacyExpandoIndexedProperties):
        (WebCore::JSDOMWindow::getOwnPropertySlotByIndex): Remove outdated comments.
        (WebCore::JSDOMWindow::put):
        (WebCore::JSDOMWindow::putByIndex): Release scope when calling Base::putByIndex(), which could throw.
        (WebCore::JSDOMWindow::deleteProperty):
        (WebCore::JSDOMWindow::deletePropertyByIndex):
        (WebCore::JSDOMWindow::defineOwnProperty):
        * platform/cocoa/VersionChecks.h:

2021-06-07  Chris Dumez  <cdumez@apple.com>

        Drop legacy MainThreadTaskQueue & EventLoopTaskQueue classes
        https://bugs.webkit.org/show_bug.cgi?id=226734

        Reviewed by Ryosuke Niwa.

        Drop legacy MainThreadTaskQueue & EventLoopTaskQueue classes. Code that was using MainThreadTaskQueue
        is now calling callOnMainThread() directly. Call that was using EventLoopTaskQueue is now using the
        HTML event loop directly. If said code needed to cancel tasks or check if a previously scheduled task
        is still pending, it now relies on WTF::CancellableTask / WTF::TaskCancellationGroup to do so.

        * Headers.cmake:
        * Modules/encryptedmedia/MediaKeySystemAccess.cpp:
        * WebCore.xcodeproj/project.pbxproj:
        * animation/DocumentTimelinesController.cpp:
        (WebCore::DocumentTimelinesController::cacheCurrentTime):
        (WebCore::DocumentTimelinesController::maybeClearCachedCurrentTime):
        * animation/DocumentTimelinesController.h:
        * dom/ActiveDOMObject.h:
        * dom/Document.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        (WebCore::HTMLMediaElement::~HTMLMediaElement):
        (WebCore::HTMLMediaElement::scheduleNextSourceChild):
        (WebCore::HTMLMediaElement::scheduleCheckPlaybackTargetCompatability):
        (WebCore::HTMLMediaElement::seekWithTolerance):
        (WebCore::HTMLMediaElement::setVolume):
        (WebCore::HTMLMediaElement::scheduleConfigureTextTracks):
        (WebCore::HTMLMediaElement::scheduleMediaEngineWasUpdated):
        (WebCore::HTMLMediaElement::scheduleUpdatePlayState):
        (WebCore::HTMLMediaElement::cancelPendingTasks):
        (WebCore::HTMLMediaElement::clearMediaPlayer):
        (WebCore::HTMLMediaElement::closeTaskQueues):
        (WebCore::HTMLMediaElement::suspend):
        (WebCore::HTMLMediaElement::resume):
        (WebCore::HTMLMediaElement::virtualHasPendingActivity const):
        (WebCore::HTMLMediaElement::markCaptionAndSubtitleTracksAsUnconfigured):
        (WebCore::HTMLMediaElement::mediaPlayerBufferedTimeRangesChanged):
        (WebCore::HTMLMediaElement::scheduleUpdateMediaState):
        (WebCore::HTMLMediaElement::playbackControlsManagerBehaviorRestrictionsTimerFired):
        * html/HTMLMediaElement.h:
        * platform/GenericTaskQueue.h: Removed.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (-[WebCoreAVFMovieObserver metadataLoaded]):
        (-[WebCoreAVFMovieObserver didEnd:]):
        (-[WebCoreAVFMovieObserver observeValueForKeyPath:ofObject:change:context:]):
        (-[WebCoreAVFMovieObserver legibleOutput:didOutputAttributedStrings:nativeSampleBuffers:forItemTime:]):
        (-[WebCoreAVFMovieObserver outputSequenceWasFlushed:]):
        (-[WebCoreAVFMovieObserver metadataOutput:didOutputTimedMetadataGroups:fromPlayerItemTrack:]):
        (-[WebCoreAVFMovieObserver metadataCollector:didCollectDateRangeMetadataGroups:indexesOfNewGroups:indexesOfModifiedGroups:]):
        (-[WebCoreAVFLoaderDelegate resourceLoader:shouldWaitForLoadingOfRequestedResource:]):
        (-[WebCoreAVFLoaderDelegate resourceLoader:didCancelLoadingRequest:]):
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::~SourceBufferPrivateAVFObjC):
        (WebCore::SourceBufferPrivateAVFObjC::didParseInitializationData):
        (WebCore::SourceBufferPrivateAVFObjC::abort):
        * platform/mediastream/ios/AVAudioSessionCaptureDeviceManager.h:

2021-06-07  Wenson Hsieh  <wenson_hsieh@apple.com>

        Upstream WebKit support for Live Text
        https://bugs.webkit.org/show_bug.cgi?id=226706
        <rdar://problem/78933684>

        Reviewed by Tim Horton.

        Upstream WebKit support for the family of "live text" and visual intelligence features from WebKitAdditions.
        This encompasses the following features on macOS 12 and iOS 15:

        - Text selection and interaction in images.
        - Data detectors in images.
        - Visual search (Look Up) via context menu in images.

        To do this, we rename the IMAGE_EXTRACTION feature flag (and any other similar symbol names that reference
        "image extraction" in some capacity) to their real names in macOS and iOS:

        - "Text recognition", in code that supports automatic OCR and data detectors in images.
        - "Look Up", in code that references the context menu action to invoke visual search.
        - "Visual Search", in code that manages QuickLook integration for invoking visual search.
        - "Image analysis", in code that directly integrates with VKImageAnalyzer and VKImageAnalyzerRequest.

        Tests: fast/images/text-recognition/basic-image-overlay.html
               fast/images/text-recognition/click-link-with-image-overlay.html
               fast/images/text-recognition/image-overlay-creation-is-idempotent.html
               fast/images/text-recognition/image-overlay-in-image-with-zero-font-size.html
               fast/images/text-recognition/image-overlay-with-selection-styles.html
               fast/images/text-recognition/ios/coalesce-selection-rects-in-image-overlay.html
               fast/images/text-recognition/ios/reselect-word-in-image-overlay.html
               fast/images/text-recognition/ios/select-word-in-image-overlay-inside-link.html
               fast/images/text-recognition/ios/select-word-in-image-overlay.html
               fast/images/text-recognition/ios/selection-rects-in-image-overlay.html
               fast/images/text-recognition/mac/copy-image-overlay-text-with-context-menu.html
               fast/images/text-recognition/mac/image-overlay-text-disables-app-highlight-menu-items.html
               fast/images/text-recognition/mac/select-image-overlay-in-link-with-mouse-drag.html
               fast/images/text-recognition/mac/select-image-overlay-with-mouse-drag-2.html
               fast/images/text-recognition/mac/select-image-overlay-with-mouse-drag-does-not-fire-click.html
               fast/images/text-recognition/mac/select-image-overlay-with-mouse-drag.html
               fast/images/text-recognition/mac/select-rotated-transparent-image-overlay.html
               fast/images/text-recognition/mac/select-word-in-draggable-image-overlay.html
               fast/images/text-recognition/mac/select-word-in-transparent-image-overlay.html

        * WebCore.xcodeproj/project.pbxproj:
        * editing/cocoa/DataDetection.h:
        * editing/cocoa/DataDetection.mm:
        (WebCore::DataDetection::createElementForImageOverlay):
        * en.lproj/Localizable.strings:
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::updateWithTextRecognitionResult):
        (WebCore::HTMLElement::updateWithImageExtractionResult): Deleted.
        * html/HTMLElement.h:
        * page/ChromeClient.h:
        (WebCore::ChromeClient::requestTextRecognition):
        (WebCore::ChromeClient::requestImageExtraction): Deleted.
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected):
        (WebCore::ContextMenuController::populate):
        (WebCore::ContextMenuController::checkOrEnableIfNeeded const):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::EventHandler):
        (WebCore::EventHandler::clear):
        (WebCore::EventHandler::mouseMoved):
        (WebCore::EventHandler::updateMouseEventTargetNode):
        (WebCore::EventHandler::m_textRecognitionHoverTimerFired):
        (WebCore::EventHandler::imageExtractionTimerFired): Deleted.
        * page/EventHandler.h:
        * page/Quirks.cpp:
        * page/Quirks.h:
        * platform/ContextMenuItem.cpp:
        (WebCore::isValidContextMenuAction):
        * platform/ContextMenuItem.h:
        * platform/LocalizedStrings.h:
        * platform/TextRecognitionResult.h: Renamed from Source/WebCore/platform/ImageExtractionResult.h.

        Rename the following:
        - ImageExtractionResult => TextRecognitionResult
        - ImageExtractionTextData => TextRecognitionWordData
        - ImageExtractionLineData => TextRecognitionLineData
        - ImageExtractionDataDetectorInfo => TextRecognitionDataDetector

        (WebCore::TextRecognitionWordData::TextRecognitionWordData):
        (WebCore::TextRecognitionWordData::encode const):
        (WebCore::TextRecognitionWordData::decode):
        (WebCore::TextRecognitionLineData::TextRecognitionLineData):
        (WebCore::TextRecognitionDataDetector::TextRecognitionDataDetector):
        (WebCore::TextRecognitionLineData::encode const):
        (WebCore::TextRecognitionLineData::decode):
        (WebCore::TextRecognitionResult::isEmpty const):
        (WebCore::TextRecognitionResult::encode const):
        (WebCore::TextRecognitionResult::decode):
        * platform/cocoa/LocalizedStringsCocoa.mm:
        (WebCore::contextMenuItemTagLookUpImage):
        (WebCore::contextMenuItemTagRevealImage): Deleted.
        * testing/Internals.cpp:
        (WebCore::makeDataForLine):
        (WebCore::Internals::installImageOverlay):

2021-06-07  Eleni Maria Stea  <estea@igalia.com>

        Compile error by trying to fit a GCGLint64* to a GLint64*
        https://bugs.webkit.org/show_bug.cgi?id=226639

        Reviewed by Kenneth Russell.

        ANGLE functions GetInteger64vRobustANGLE and
        GetInteger64i_vRobustANGLE expect a value of GLint64* aka
        long int * but we try to fit a pointer to a long long int.
        Fixed compile errors.

        * platform/graphics/GraphicsTypesGL.h:

2021-06-07  Antoine Quint  <graouts@webkit.org>

        REGRESSION (r272201): iPad render flashing on load
        https://bugs.webkit.org/show_bug.cgi?id=226216
        <rdar://problem/78466306>

        Reviewed by Simon Fraser.

        When we switched to wrapping all animations in animation groups for bug 219894, we neglected to update GraphicsLayerCA::moveOrCopyAnimations().
        We now iterate over m_animationGroups which contain the animation groups that are current and in the order they were added, and also ensure
        we preserve the original begin time for each group.

        Test: webanimations/accelerated-animation-tiled-while-running.html

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::moveOrCopyLayerAnimation):
        (WebCore::GraphicsLayerCA::moveOrCopyAnimations):
        * platform/graphics/ca/GraphicsLayerCA.h:

2021-06-07  Devin Rousso  <drousso@apple.com>

        Convert WebCore::SnapshotOptions into an enum class
        https://bugs.webkit.org/show_bug.cgi?id=226730

        Reviewed by Wenson Hsieh.

        Convert `SnapshotOptions` into an `enum class SnapshotFlags` and create a container `struct
        SnapshotOptions` that also allows for changing the `DestinationColorSpace` (defaults to sRGB)
        and `PixelFormat` (defaults to BGRA8).

        No behavior change.

        * page/FrameSnapshotting.h:
        * page/FrameSnapshotting.cpp:
        (WebCore::snapshotFrameRect):
        (WebCore::snapshotFrameRectWithClip):
        (WebCore::snapshotSelection):
        (WebCore::snapshotNode):

        * inspector/agents/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::snapshotRect):
        * page/PageColorSampler.cpp:
        (WebCore::sampleColor):
        * page/PageConsoleClient.cpp:
        (WebCore::PageConsoleClient::screenshot):
        * page/TextIndicator.cpp:
        (WebCore::snapshotOptionsForTextIndicatorOptions):
        (WebCore::takeSnapshot):
        (WebCore::takeSnapshots):
        * platform/DragImage.cpp:
        (WebCore::createDragImageForSelection):
        (WebCore::createDragImageForRange):

2021-06-07  Imanol Fernandez  <ifernandez@igalia.com>

        Change WebXRSpace::efectiveOrigin() matrix multiplication order
        https://bugs.webkit.org/show_bug.cgi?id=224364
        <rdar://problem/76754680>

        Reviewed by Sergio Villar Senin.

        The current multiplication order is not working correctly when combining local-floor space and getOfffsetReferenceSpace().
        The reference space is out of sync with input ray pose after some teleportations:
        https://github.com/immersive-web/webxr-samples/blob/main/teleportation.html

        Tested using WebXR WPT tests.

        * Modules/webxr/WebXRSpace.cpp:
        (WebCore::WebXRSpace::effectiveOrigin const):

2021-06-07  Imanol Fernandez  <ifernandez@igalia.com>

        Use 3D points to map the WebXRBoundedReferenceSpace bounds transform
        https://bugs.webkit.org/show_bug.cgi?id=224365
        <rdar://problem/76754927>

        Reviewed by Sergio Villar Senin.

        WebXRBoundedReferenceSpace is currently using Point2D mapping to transfom the bounds geometry.
        This is not correct because the originOffset is a 3D transform and it expects the bounds depth
        coordinates to be on the z axis instead of the y axis.

        Tested by WebXR WPT tests.

        * Modules/webxr/WebXRBoundedReferenceSpace.cpp:
        (WebCore::WebXRBoundedReferenceSpace::updateIfNeeded):

2021-06-07  Antti Koivisto  <antti@apple.com>

        Factor selection state computation out of LegacyInlineTextBox
        https://bugs.webkit.org/show_bug.cgi?id=226718

        Reviewed by Alan Bujtas.

        Move the code to SelectionRangeData.

        * layout/integration/LayoutIntegrationRunIteratorModernPath.h:
        (WebCore::LayoutIntegration::RunIteratorModernPath::selectableRange const):
        * rendering/HighlightData.cpp:
        (WebCore::HighlightData::highlightStateForRenderer):
        (WebCore::HighlightData::highlightStateForTextBox):
        (WebCore::HighlightData::rangeForTextBox):
        * rendering/HighlightData.h:
        (WebCore::HighlightData::HighlightData):
        * rendering/LegacyInlineTextBox.cpp:
        (WebCore::LegacyInlineTextBox::selectionState):
        (WebCore::LegacyInlineTextBox::selectableRange const):
        (WebCore::LegacyInlineTextBox::selectionStartEnd const):
        (WebCore::LegacyInlineTextBox::highlightStartEnd const):
        (WebCore::LegacyInlineTextBox::verifySelectionState const): Deleted.
        (WebCore::LegacyInlineTextBox::clampedStartEndForState const): Deleted.
        * rendering/LegacyInlineTextBox.h:
        * rendering/SelectionRangeData.cpp:
        (WebCore::SelectionRangeData::SelectionRangeData):
        * rendering/TextBoxSelectableRange.h:

2021-06-07  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Cocoa] Find-in-page should match text inside image overlays
        https://bugs.webkit.org/show_bug.cgi?id=226704

        Reviewed by Tim Horton.

        Add a new TextIteratorBehavior to allow TextIterator to descend into image overlay content, and use this option
        when creating TextIterators for find-in-page. See WebKit/ChangeLog for more details.

        Test: WebKit.FindTextInImageOverlay

        * editing/TextIterator.cpp:
        (WebCore::TextIterator::handleReplacedElement):
        (WebCore::findIteratorOptions):
        * editing/TextIteratorBehavior.h:

2021-06-07  Alicia Boya García  <aboya@igalia.com>

        [GStreamer] Add clang TSA annotations: MainThreadNotifier
        https://bugs.webkit.org/show_bug.cgi?id=226717

        Reviewed by Xabier Rodriguez-Calvar.

        Adds clang thread safety annotations to
        MainThreadNotifier.h

        * platform/graphics/gstreamer/MainThreadNotifier.h:

2021-06-07  Alicia Boya García  <aboya@igalia.com>

        [GStreamer] Add clang TSA annotations: InbandTextTrackPrivateGStreamer
        https://bugs.webkit.org/show_bug.cgi?id=226716

        Reviewed by Xabier Rodriguez-Calvar.

        Adds clang thread safety annotations to
        InbandTextTrackPrivateGStreamer.h.

        * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.h:

2021-06-07  Alicia Boya García  <aboya@igalia.com>

        [GStreamer] Fix clang TSA warning in AbortableTaskQueue
        https://bugs.webkit.org/show_bug.cgi?id=226715

        Reviewed by Michael Catanzaro.

        Fixes a clang thread safety analysis warning in AbortableTaskQueue.

        * platform/AbortableTaskQueue.h:

2021-06-06  Antti Koivisto  <antti@apple.com>

        Factor selection clamping into a type
        https://bugs.webkit.org/show_bug.cgi?id=226697

        Reviewed by Sam Weinig.

        TextBoxSelectableRange will be helpful for moving selection code out of the legacy inline boxes.
        It also allows some code sharing already in this patch.

        * Headers.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * layout/integration/LayoutIntegrationRunIteratorLegacyPath.h:
        (WebCore::LayoutIntegration::RunIteratorLegacyPath::isSelectable const):
        * layout/integration/LayoutIntegrationRunIteratorModernPath.h:
        (WebCore::LayoutIntegration::RunIteratorModernPath::positionForOffset const):
        (WebCore::LayoutIntegration::RunIteratorModernPath::isSelectable const):
        (WebCore::LayoutIntegration::RunIteratorModernPath::selectionRect const):
        (WebCore::LayoutIntegration::RunIteratorModernPath::selectableRange const):
        (WebCore::LayoutIntegration::RunIteratorModernPath::clampedOffset const): Deleted.
        * rendering/LegacyInlineTextBox.cpp:
        (WebCore::LegacyInlineTextBox::isSelectable const):
        (WebCore::LegacyInlineTextBox::localSelectionRect const):
        (WebCore::LegacyInlineTextBox::paint):
        (WebCore::LegacyInlineTextBox::selectableRange const):
        (WebCore::LegacyInlineTextBox::clampedStartEndForState const):
        (WebCore::LegacyInlineTextBox::calculateDocumentMarkerBounds const):
        (WebCore::LegacyInlineTextBox::collectMarkedTextsForDraggedContent):
        (WebCore::LegacyInlineTextBox::collectMarkedTextsForDocumentMarkers const):
        (WebCore::LegacyInlineTextBox::paintCompositionBackground):
        (WebCore::LegacyInlineTextBox::positionForOffset const):
        (WebCore::LegacyInlineTextBox::isSelected const): Deleted.
        (WebCore::LegacyInlineTextBox::clampedOffset const): Deleted.
        * rendering/LegacyInlineTextBox.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::inlineSelectionGaps):
        * rendering/TextBoxSelectableRange.h: Added.
        (WebCore::TextBoxSelectableRange::clamp const):
        (WebCore::TextBoxSelectableRange::intersects const):
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::localSelectionRect const):

2021-06-06  Chris Dumez  <cdumez@apple.com>

        Drop MainThreadTaskDispatcher and use callOnMainThread() instead
        https://bugs.webkit.org/show_bug.cgi?id=226701

        Reviewed by Darin Adler.

        Drop MainThreadTaskDispatcher and use callOnMainThread() instead. There is a no need for a
        global Timer or a Deque of tasks.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/DeferrableTask.h:
        (WebCore::MainThreadDeferrableTask::scheduleTask):
        * platform/GenericTaskQueue.cpp: Removed.
        * platform/GenericTaskQueue.h:
        (WebCore::MainThreadTaskQueue::MainThreadTaskQueue):
        (WebCore::MainThreadTaskQueue::enqueueTask):

2021-06-06  Chris Dumez  <cdumez@apple.com>

        Stop using legacy EventLoopDeferrableTask
        https://bugs.webkit.org/show_bug.cgi?id=226700

        Reviewed by Darin Adler.

        Stop using legacy EventLoopDeferrableTask and drop the class entirely. Call sites are
        now using the HTML event loop directly and using WTF::CancellableTask to wrap the task
        they schedule. This achieves the same result as EventLoopDeferrableTask but is more
        lightweight and flexible.

        * animation/DocumentTimelinesController.cpp:
        (WebCore::DocumentTimelinesController::DocumentTimelinesController):
        (WebCore::DocumentTimelinesController::detachFromDocument):
        (WebCore::DocumentTimelinesController::cacheCurrentTime):
        * animation/DocumentTimelinesController.h:
        * dom/ActiveDOMObject.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        (WebCore::HTMLMediaElement::~HTMLMediaElement):
        (WebCore::HTMLMediaElement::scheduleCheckPlaybackTargetCompatability):
        (WebCore::HTMLMediaElement::seekWithTolerance):
        (WebCore::HTMLMediaElement::setVolume):
        (WebCore::HTMLMediaElement::scheduleConfigureTextTracks):
        (WebCore::HTMLMediaElement::scheduleMediaEngineWasUpdated):
        (WebCore::HTMLMediaElement::scheduleUpdatePlayState):
        (WebCore::HTMLMediaElement::cancelPendingTasks):
        (WebCore::HTMLMediaElement::closeTaskQueues):
        (WebCore::HTMLMediaElement::suspend):
        (WebCore::HTMLMediaElement::resume):
        (WebCore::HTMLMediaElement::markCaptionAndSubtitleTracksAsUnconfigured):
        (WebCore::HTMLMediaElement::mediaPlayerBufferedTimeRangesChanged):
        (WebCore::HTMLMediaElement::scheduleUpdateMediaState):
        (WebCore::HTMLMediaElement::playbackControlsManagerBehaviorRestrictionsTimerFired):
        * html/HTMLMediaElement.h:
        * platform/DeferrableTask.h:

2021-06-06  Wenson Hsieh  <wenson_hsieh@apple.com>

        Turn TextIteratorBehaviorFlag into an enum class and wrap it in OptionSet
        https://bugs.webkit.org/show_bug.cgi?id=226691

        Reviewed by Darin Adler.

        Modernize some editing code by turning `TextIteratorBehaviorFlag` into an enum class, `TextIteratorBehavior`,
        with an explicit width of 16 bits. Additionally, since this is a bitmask, refactor various codepaths to use
        `OptionSet<TextIteratorBehavior>` instead of the underlying type.

        This gives us improved type safety when using this enum, and also narrows the width of this enum to 16 bits
        (from 32). No change in behavior.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::traverseToOffsetInRange):
        (WebCore::AXObjectCache::rangeMatchesTextNearRange):
        (WebCore::AXObjectCache::nextBoundary):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::textIteratorBehaviorForTextRange const):
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityObjectInterface.h:
        * accessibility/atk/WebKitAccessibleHyperlink.cpp:
        (rangeLengthForObject):
        * accessibility/atk/WebKitAccessibleInterfaceText.cpp:
        (getSelectionOffsetsForObject):
        * accessibility/atk/WebKitAccessibleUtil.cpp:
        (objectFocusedAndCaretOffsetUnignored):
        * accessibility/isolatedtree/AXIsolatedObject.cpp:
        (WebCore::AXIsolatedObject::textIteratorBehaviorForTextRange const):

        Fix this method to return the empty (default) option set instead of `false` (which was previously implicitly
        converted to `TextIteratorDefaultBehavior`).

        * accessibility/isolatedtree/AXIsolatedObject.h:
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyBlockStyle):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::moveParagraphs):
        * editing/Editing.cpp:
        (WebCore::indexForVisiblePosition):
        (WebCore::visiblePositionForIndex):
        * editing/Editor.cpp:
        (WebCore::Editor::selectedText const):
        (WebCore::Editor::selectedTextForDataTransfer const):
        * editing/Editor.h:
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplacementFragment::ReplacementFragment):
        * editing/TextIterator.cpp:
        (WebCore::isClippedByFrameAncestor):
        (WebCore::TextIterator::TextIterator):
        (WebCore::TextIterator::init):
        (WebCore::firstChild):
        (WebCore::nextSibling):
        (WebCore::nextNode):
        (WebCore::isDescendantOf):
        (WebCore::parentNodeOrShadowHost):
        (WebCore::TextIterator::advance):
        (WebCore::TextIterator::handleTextNode):
        (WebCore::TextIterator::handleTextRun):
        (WebCore::TextIterator::handleTextNodeFirstLetter):
        (WebCore::TextIterator::handleReplacedElement):
        (WebCore::TextIterator::shouldRepresentNodeOffsetZero):
        (WebCore::TextIterator::shouldEmitSpaceBeforeAndAfterNode):
        (WebCore::TextIterator::handleNonTextNode):
        (WebCore::TextIterator::exitNode):
        (WebCore::TextIterator::emitText):
        (WebCore::SimplifiedBackwardsTextIterator::handleNonTextNode):
        (WebCore::SimplifiedBackwardsTextIterator::exitNode):
        (WebCore::CharacterIterator::CharacterIterator):
        (WebCore::characterCount):
        (WebCore::resolveCharacterRange):
        (WebCore::hasAnyPlainText):
        (WebCore::plainText):
        (WebCore::plainTextReplacingNoBreakSpace):
        (WebCore::findIteratorOptions):
        * editing/TextIterator.h:
        (WebCore::characterCount):
        (WebCore::characterRange):
        (WebCore::resolveCharacterLocation):
        (WebCore::resolveCharacterRange):
        (WebCore::plainText):
        (WebCore::hasAnyPlainText):
        (WebCore::plainTextReplacingNoBreakSpace):
        (WebCore::TextIterator::TextIterator):
        (WebCore::CharacterIterator::CharacterIterator):
        * editing/TextIteratorBehavior.h:

        Add an alias for `OptionSet<TextIteratorBehavior>`, `TextIteratorBehaviors`, to help with readability when
        specifying or consulting these flags. Additionally remove the `TextIteratorDefaultBehavior` enum value
        altogether, since we can now just use the default constructor (`OptionSet<TextIteratorBehavior> { }`) to get a
        set of empty options.

        * editing/TextManipulationController.cpp:
        (WebCore::ParagraphContentIterator::ParagraphContentIterator):
        * editing/VisibleSelection.cpp:
        (WebCore::VisibleSelection::appendTrailingWhitespace):
        * editing/VisibleUnits.cpp:
        (WebCore::nextBoundary):
        * editing/markup.cpp:
        (WebCore::StyledMarkupAccumulator::renderedTextRespectingRange):
        * page/EventHandler.cpp:
        (WebCore::textDistance):

2021-06-06  Chris Dumez  <cdumez@apple.com>

        Flaky assertion hit in AudioSessionRoutingArbitratorProxy::endRoutingArbitration()
        https://bugs.webkit.org/show_bug.cgi?id=226699

        Reviewed by Darin Adler.

        If m_setupArbitrationOngoing is true, then beginRoutingArbitrationForToken() only adds the token to
        m_tokens once the setup is done, asynchronously. As a result, if endRoutingArbitrationForToken() during
        setup, the `isInRoutingArbitrationForToken(token)` assertion will hit, because the token wasn't added
        to m_tokens yet. Tweak the assertion so that it doesn't hit when m_setupArbitrationOngoing is true.

        This is a speculative fix as I wasn't able to reproduce the assertion hit locally.

        * platform/audio/mac/SharedRoutingArbitrator.mm:
        (WebCore::SharedRoutingArbitrator::endRoutingArbitrationForToken):

2021-06-06  Darin Adler  <darin@apple.com>

        Handle custom identifiers and strings separately, so we can quote strings correctly consistently
        https://bugs.webkit.org/show_bug.cgi?id=226694

        Reviewed by Sam Weinig.

        Progressions in a number of WPT tests.

        * animation/CSSAnimation.cpp:
        (WebCore::CSSAnimation::CSSAnimation): Update since Animation::name() now
        returns a struct.
        * animation/KeyframeEffect.cpp:
        (WebCore::KeyframeEffect::computeCSSAnimationBlendingKeyframes): Ditto.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::OrderedNamedLinesCollector::appendLines const): Use
        createCustomIdent for line names.
        (WebCore::valueForGridPosition): Use createCustomIdent for grid line name.
        (WebCore::createTransitionPropertyValue): Use createCustomIdent for
        animation property names.
        (WebCore::counterToCSSValue): Use createCustomIdent for counter names.
        (WebCore::ComputedStyleExtractor::valueForPropertyInStyle): Use
        createCustomIdent for list-style-type, locale, animation names if they
        were created from a custom-ident, and line-grid.

        * css/CSSCustomIdentValue.cpp: Emptied out this file; we can delete it soon.
        * css/CSSCustomIdentValue.h: Ditto.

        * css/CSSMarkup.cpp:
        (WebCore::serializeCharacterAsCodePoint): Optimized to do a single
        StringBuilder::append call.
        (WebCore::serializeAsStringOrCustomIdent): Deleted.
        * css/CSSMarkup.h: Removed serializeAsStringOrCustomIdent.

        * css/CSSPrimitiveValue.cpp:
        (WebCore::isValidCSSUnitTypeForDoubleConversion): Added a case for
        CustomIdent. Changed CSS_IDENT to assert not reached, since it should
        never be passed to this function. More cleanup of CSSUnitType is needed,
        but for now mostly leaving it alone.
        (WebCore::isStringType): Added a case for CustomIdent. Moved CSS_DIMENSION,
        which was incorrectly returning true, to return false. Pretty sure there's
        no way to create one of these with CSS_DIMENSION, but this is less peculiar.
        (WebCore::CSSPrimitiveValue::primitiveType const): Added transformation
        from CustomIdent to CSS_IDENT as we do with CSS_PROPERTY_ID and CSS_VALUE_ID.
        (WebCore::CSSPrimitiveValue::cleanup): Added a case for CustomIdent.
        Moved CSS_DIMENSION to the correct section. Pretty sure there's no way to
        create one of these with CSS_DIMENSION, but this is less peculiar.
        (WebCore::CSSPrimitiveValue::setFloatValue): Deleted.
        (WebCore::CSSPrimitiveValue::setStringValue): Deleted.
        (WebCore::CSSPrimitiveValue::getStringValue const): Deleted.
        (WebCore::CSSPrimitiveValue::stringValue const): Added a case for CustomIdent.
        (WebCore::CSSPrimitiveValue::unitTypeString): Added a case for CustomIdent
        and an ASSERT_NOT_REACHED for invalid enumeration values.
        (WebCore::CSSPrimitiveValue::formatNumberForCustomCSSText const):
        Removed inaccurate FIXME comment for CSS_DIMENSION and changed it to do
        something less wrong, but still incorrect. Pretty sure there's no way to
        create one of these with CSS_DIMENSION, but this is less peculiar. Changed
        CSS_STRING case to always serializeAsString. Added a CustomIdent case
        that always serializes as an identifier.
        (WebCore::CSSPrimitiveValue::equals const): Moved the CSS_DIMENSION to
        the correct part of this switch statement. Pretty sure there's no way to
        create one of these with CSS_DIMENSION, but this is less peculiar.
        Added case for CustomIdent.

        * css/CSSPrimitiveValue.h: Made isFontRelativeLength, isResolution,
        and isViewportPercentageLength private. Made those plus isLength all
        constexpr. Removed WEBCORE_EXPORT from primitiveType and getFloatValue:
        those needed to be exported when this was the web-exposed class, but
        that is now DeprecatedCSSOMPrimitiveValue. Deleted setFloatValue,
        setStringValue, and getStringValue for the same reason: those functions
        are now in DeprecatedCSSOMPrimitiveValue and don't need to be here.

        * css/CSSToStyleMap.cpp:
        (WebCore::CSSToStyleMap::mapAnimationName): Updated to pass a boolean
        in to the animation name to keep track of whether it was created with
        a string or a custom-ident so we it can properly round-trip in computed
        style. This is required to pass some of the WPT tests, although I could
        not find clear guidance in the specification that this behavior is required.
        The same name with a string and custom-ident are equivalent in other ways.

        * css/CSSUnits.cpp:
        (WebCore::operator<<): Added a case for CustomIdent.
        * css/CSSUnits.h: Added CustomIdent. Added some FIXME about how we can
        change this in the future. It's a remnant of the past when these were part
        of our web-facing API, and this can be greatly cleaned up.

        * css/CSSValue.cpp:
        (WebCore::CSSValue::cssText const): Removed CSSCustomIdentValue.h,
        CustomIdentClass, CSSCustomIdentValue. We are not going to use a separate
        class for custom-ident, just a separate type of primitive value.
        (WebCore::CSSValue::destroy): Ditto.
        * css/CSSValue.h: Deleted isCustomIdentValue and CustomIdentClass.

        * css/CSSValueList.cpp:
        (WebCore::CSSValueList::customCSSText const): Tweaked algorithm
        to be slightly more efficient.

        * css/CSSValuePool.h: Added createCustomIdent. Later should remove
        the create function that takes a string value and a type and use
        separate named functions for the few different cases, but doing the
        new one this way for now.

        * css/DeprecatedCSSOMPrimitiveValue.cpp:
        (WebCore::DeprecatedCSSOMPrimitiveValue::primitiveType const):
        Rewrote this to be a switch that preserves the current behavior
        but no longer relies on the numeric values of CSSUnitType values.
        Added a FIXME about using CSS_UNKNOWN more: some of the numbers
        we are exposing to the web are doing no good.
        (WebCore::DeprecatedCSSOMPrimitiveValue::setFloatValue): Moved this
        function to the header.
        (WebCore::DeprecatedCSSOMPrimitiveValue::getFloatValue const):
        Rewrote this to be a switch as above. Preserves current behavior
        but stops relying on CSSUnitType numeric values.
        (WebCore::DeprecatedCSSOMPrimitiveValue::setStringValue): Moved this
        function to the header.
        (WebCore::DeprecatedCSSOMPrimitiveValue::getStringValue const):
        Ditto. By putting a switch on primitiveType here, we can enforce
        the desired exception behavior here, instead of getting it from
        CSSPrimitiveValue, and it's better for this class to deal with
        the legacy bindings issues.
        (WebCore::DeprecatedCSSOMPrimitiveValue::getCounterValue const): Ditto.
        (WebCore::DeprecatedCSSOMPrimitiveValue::getRectValue const): Ditto.
        (WebCore::DeprecatedCSSOMPrimitiveValue::getRGBColorValue const): Ditto.

        * css/DeprecatedCSSOMPrimitiveValue.h: Removed unneeded cssValueType
        function. Made both setFloatValue and setStringValue simpler since
        they always raise an exception and we do not intend to change that.
        Also stop using protected since we have no classes derived from this.
        Could do more cleanup, but this is a start.

        * css/DeprecatedCSSOMValue.cpp:
        (WebCore::DeprecatedCSSOMValue::cssValueType const): Put the constant
        values, CSS_PRIMITIVE_VALUE and CSS_VALUE_LIST, here rather than
        calling member functions.

        * css/DeprecatedCSSOMValueList.cpp:
        (WebCore::DeprecatedCSSOMValueList::cssText const): Tweaked to make
        the code more efficient.

        * css/DeprecatedCSSOMValueList.h: Removed unneeded cssValueType
        function and const overload of item function. Also stop using protected
        since we have no classes derived from this.

        * css/MediaQueryExpression.cpp:
        (WebCore::featureWithValidIdent): Fixed indentation to match WebKit style.
        (WebCore::featureWithValidDensity): Ditto.
        (WebCore::featureWithValidPositiveLength): Ditto.
        (WebCore::featureExpectingPositiveInteger): Ditto.
        (WebCore::featureWithPositiveNumber): Ditto.

        * css/calc/CSSCalcCategoryMapping.cpp:
        (WebCore::hasDoubleValue): Added a case for CustomIdent.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeWillChange): Removed comment saying we should use
        CSSCustomIdentValue since using a property ID for the value is great.
        (WebCore::consumeAnimationName): Removed comment saying we should use
        CSSCustomIdentValue here because that would be incorrect: we need to
        preserve and round-trip the fact that this was string, not custom-ident.
        (WebCore::consumeTransitionProperty): Remove special case for
        CSSValueAll that wasn't doing anything. Removed comment saying we should
        use CSSCustomIdentValue since using a value ID for the value is great.
        (WebCore::consumeAttr): Updated comment.
        (WebCore::isCustomIdentValue): Updated to work with the new primitive value.

        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::consumeCustomIdent):
        Use the new createCustomIdent and removed an outdated comment. While we
        might some day want to implement custom-ident differently, we won't need
        to change the code here to make that happen.

        * platform/animation/Animation.cpp:
        (WebCore::Animation::animationsMatch const): Update since m_name now is a
        struct.
        (WebCore::Animation::initialName): Update to return Name instead of String.
        (WebCore::operator<<): Update since name() now returns a struct.
        * platform/animation/Animation.h: Added the Name struct so we can store a
        boolean to indicate whether it's a string or custom-ident for round tripping.
        Update types and implementations of function and data members accordingly.

        * style/StyleBuilderConverter.h:
        (WebCore::Style::BuilderConverter::createGridPosition): Update code to expect
        custom-ident instead of string; they used to both be the same thing.

        * style/Styleable.cpp:
        (WebCore::shouldConsiderAnimation): Update since Animation::name() now
        returns a struct. Also got rid of unsuccessful attempt to optimize comparison
        againt the string "none"; later might be good to clean out that special case.
        (WebCore::Styleable::updateCSSAnimations const): Ditto.

2021-06-06  Jean-Yves Avenard  <jya@apple.com>

        [GPUP][MSE] QuotaExceededError Exception not thrown even if the sum of totalTrackBufferSize and appendBuffer size exceeds maximumBufferSize
        https://bugs.webkit.org/show_bug.cgi?id=226034
        rdar://78579904

        Reviewed by Eric Carlson.

        Existing media-source-append-buffer-full-quota-exceeded-error.html test will
        be exercising this code once bug 225367 has been fixed.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::appendBufferInternal): fly-by fix, use size of pending
        buffer rather than the capacity of the holding vector.
        * platform/graphics/SourceBufferPrivate.h: Make totalTrackBufferSizeInBytes method virtual.

2021-06-06  Chris Dumez  <cdumez@apple.com>

        Reduce use of legacy EventLoopEventQueue and EventLoopTaskQueue
        https://bugs.webkit.org/show_bug.cgi?id=226692

        Reviewed by Darin Adler.

        Reduce use of legacy EventLoopEventQueue and EventLoopTaskQueue, and use the HTML event
        loop directly instead. Those are very simple cases, they really don't need any of the
        features the queue was providing (such as cancelling events).

        To get rid of the remaining usage of EventLoopEventQueue / EventLoopTaskQueue, I believe
        we'll need a way to cancel tasks scheduled in the HTML event loop.

        * Modules/mediasession/MediaSessionCoordinator.cpp:
        (WebCore::MediaSessionCoordinator::MediaSessionCoordinator):
        (WebCore::MediaSessionCoordinator::coordinatorStateChanged):
        * Modules/mediasession/MediaSessionCoordinator.h:
        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::MediaSource):
        (WebCore::MediaSource::virtualHasPendingActivity const):
        (WebCore::MediaSource::scheduleEvent):
        * Modules/mediasource/MediaSource.h:
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::SourceBuffer):
        (WebCore::SourceBuffer::virtualHasPendingActivity const):
        (WebCore::SourceBuffer::scheduleEvent):
        * Modules/mediasource/SourceBuffer.h:
        * Modules/mediasource/SourceBufferList.cpp:
        (WebCore::SourceBufferList::SourceBufferList):
        (WebCore::SourceBufferList::scheduleEvent):
        * Modules/mediasource/SourceBufferList.h:
        * Modules/remoteplayback/RemotePlayback.cpp:
        (WebCore::RemotePlayback::RemotePlayback):
        (WebCore::RemotePlayback::watchAvailability):
        (WebCore::RemotePlayback::cancelWatchAvailability):
        (WebCore::RemotePlayback::prompt):
        (WebCore::RemotePlayback::setState):
        (WebCore::RemotePlayback::disconnect):
        (WebCore::RemotePlayback::availabilityChanged):
        (WebCore::RemotePlayback::stop): Deleted.
        * Modules/remoteplayback/RemotePlayback.h:
        * animation/DocumentTimelinesController.cpp:
        (WebCore::DocumentTimelinesController::DocumentTimelinesController):
        (WebCore::DocumentTimelinesController::detachFromDocument):
        (WebCore::DocumentTimelinesController::cacheCurrentTime):
        (WebCore::DocumentTimelinesController::maybeClearCachedCurrentTime):
        * animation/DocumentTimelinesController.h:
        * dom/FullscreenManager.cpp:
        (WebCore::FullscreenManager::FullscreenManager):
        (WebCore::FullscreenManager::requestFullscreenForElement):
        (WebCore::FullscreenManager::exitFullscreen):
        (): Deleted.
        * dom/FullscreenManager.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        (WebCore::HTMLMediaElement::~HTMLMediaElement):
        (WebCore::HTMLMediaElement::removedFromAncestor):
        (WebCore::HTMLMediaElement::scheduleResolvePendingPlayPromises):
        (WebCore::HTMLMediaElement::scheduleRejectPendingPlayPromises):
        (WebCore::HTMLMediaElement::scheduleNotifyAboutPlaying):
        (WebCore::HTMLMediaElement::setMediaKeys):
        (WebCore::HTMLMediaElement::closeTaskQueues):
        (WebCore::HTMLMediaElement::virtualHasPendingActivity const):
        (WebCore::HTMLMediaElement::setIsPlayingToWirelessTarget):
        (WebCore::HTMLMediaElement::enterFullscreen):
        (WebCore::HTMLMediaElement::isVisibleInViewportChanged):
        * html/HTMLMediaElement.h:
        * html/shadow/MediaControlTextTrackContainerElement.cpp:
        (WebCore::MediaControlTextTrackContainerElement::MediaControlTextTrackContainerElement):
        (WebCore::MediaControlTextTrackContainerElement::updateSizes):
        * html/shadow/MediaControlTextTrackContainerElement.h:
        * html/track/TrackListBase.cpp:
        (WebCore::TrackListBase::TrackListBase):
        (WebCore::TrackListBase::scheduleChangeEvent):
        (WebCore::TrackListBase::isChangeEventScheduled const):
        (WebCore::TrackListBase::virtualHasPendingActivity const): Deleted.
        * html/track/TrackListBase.h:
        * platform/network/curl/CurlMultipartHandle.cpp:
        (WebCore::CurlMultipartHandle::processContent):
        (WebCore::CurlMultipartHandle::matchedLength):
        * platform/network/curl/CurlMultipartHandle.h:
        * testing/MockMediaSessionCoordinator.h:

2021-06-06  Alan Bujtas  <zalan@apple.com>

        [LFC][TFC] Adopt a less quirky fixed column width space distribution
        https://bugs.webkit.org/show_bug.cgi?id=226696

        Reviewed by Antti Koivisto.

        This patch adopts a less quirky space distribution model where any fixed cell width
        makes the column fixed (as opposed to just when <col> has fixed with).
        This distribution model matches both Chrome and Firefox.
        It also enables us to simplify some of the distribution logic by using the same set of values (min vs max)
        as the base for the distribution ratio.

        Test: fast/layoutformattingcontext/table-fixed-width-variations-simple.html

        * layout/formattingContexts/table/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::computedPreferredWidthForColumns): Collect the fixed with values from the cells too now.
        * layout/formattingContexts/table/TableFormattingGeometry.cpp:
        (WebCore::Layout::TableFormattingGeometry::intrinsicWidthConstraintsForCellContent const):
        (WebCore::Layout::TableFormattingGeometry::intrinsicWidthConstraintsForCell const): Deleted.
        * layout/formattingContexts/table/TableFormattingGeometry.h:
        * layout/formattingContexts/table/TableGrid.cpp:
        (WebCore::Layout::TableGrid::appendCell):
        (WebCore::Layout::TableGrid::Column::isFixedWidth const): Deleted.
        (WebCore::Layout::TableGrid::Columns::hasFixedColumnsOnly const): Deleted.
        (WebCore::Layout::TableGrid::Cell::isFixedWidth const): Deleted.
        * layout/formattingContexts/table/TableGrid.h:
        (WebCore::Layout::TableGrid::Column::setFixedWidth):
        (WebCore::Layout::TableGrid::Column::fixedWidth const):
        (WebCore::Layout::TableGrid::Columns::logicalWidth const):
        (WebCore::Layout::TableGrid::Column::setHasFixedWidthCell): Deleted.
        (WebCore::Layout::TableGrid::Column::hasFixedWidthCell const): Deleted.
        * layout/formattingContexts/table/TableLayout.cpp:
        (WebCore::Layout::TableFormattingContext::TableLayout::distributedHorizontalSpace): Adjust the distribution values based on whether
        the column has fixed width and use max/max in both fixed and non-fixed cases.

2021-06-06  Antti Koivisto  <antti@apple.com>

        Rename InlineElementBox to LegacyInlineElementBox
        https://bugs.webkit.org/show_bug.cgi?id=226695

        Reviewed by Sam Weinig.

        Also EllipsisBox -> LegacyEllipsisBox.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * accessibility/AXObjectCache.cpp:
        * dom/Position.cpp:
        * layout/integration/LayoutIntegrationRunIterator.h:
        * rendering/LegacyEllipsisBox.cpp: Renamed from Source/WebCore/rendering/EllipsisBox.cpp.
        (WebCore::LegacyEllipsisBox::LegacyEllipsisBox):
        (WebCore::LegacyEllipsisBox::paint):
        (WebCore::LegacyEllipsisBox::markupBox const):
        (WebCore::LegacyEllipsisBox::paintMarkupBox):
        (WebCore::LegacyEllipsisBox::selectionRect):
        (WebCore::LegacyEllipsisBox::paintSelection):
        (WebCore::LegacyEllipsisBox::nodeAtPoint):
        * rendering/LegacyEllipsisBox.h: Renamed from Source/WebCore/rendering/EllipsisBox.h.
        * rendering/LegacyInlineElementBox.cpp: Renamed from Source/WebCore/rendering/InlineElementBox.cpp.
        (WebCore::LegacyInlineElementBox::deleteLine):
        (WebCore::LegacyInlineElementBox::extractLine):
        (WebCore::LegacyInlineElementBox::attachLine):
        (WebCore::LegacyInlineElementBox::paint):
        (WebCore::LegacyInlineElementBox::nodeAtPoint):
        * rendering/LegacyInlineElementBox.h: Renamed from Source/WebCore/rendering/InlineElementBox.h.
        (WebCore::LegacyInlineElementBox::LegacyInlineElementBox):
        * rendering/LegacyInlineFlowBox.cpp:
        (WebCore::LegacyInlineFlowBox::nodeAtPoint):
        * rendering/LegacyInlineTextBox.cpp:
        (WebCore::LegacyInlineTextBox::selectionState):
        * rendering/LegacyLineLayout.cpp:
        (WebCore::LegacyLineLayout::computeBlockDirectionPositionsForLine):
        * rendering/LegacyRootInlineBox.cpp:
        (WebCore::LegacyRootInlineBox::placeEllipsis):
        (WebCore::LegacyRootInlineBox::ellipsisBox const):
        * rendering/LegacyRootInlineBox.h:
        * rendering/RenderBlock.cpp:
        * rendering/RenderBlock.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::createInlineBox):
        (WebCore::RenderBox::positionLineBox):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::inlineBoxWrapper const):
        (WebCore::RenderBox::setInlineBoxWrapper):
        * rendering/RenderFragmentedFlow.cpp:
        (WebCore::RenderFragmentedFlow::computedFragmentRangeForBox const):
        * rendering/RenderImage.cpp:
        * rendering/RenderInline.cpp:
        * rendering/RenderLineBoxList.cpp:
        * rendering/RenderLineBreak.cpp:
        (WebCore::RenderLineBreak::createInlineBox):
        (WebCore::RenderLineBreak::setInlineBoxWrapper):
        (WebCore::RenderLineBreak::replaceInlineBoxWrapper):
        * rendering/RenderLineBreak.h:
        * rendering/RenderListItem.cpp:
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::createInlineBox):
        * rendering/RenderListMarker.h:
        * rendering/RenderReplaced.cpp:
        * rendering/RenderText.cpp:
        * rendering/RenderTextLineBoxes.cpp:

2021-06-05  Chris Dumez  <cdumez@apple.com>

        Fix repeated call to String::utf8() in SQLiteFileSystem::computeHashForFileName()
        https://bugs.webkit.org/show_bug.cgi?id=226693

        Reviewed by Darin Adler.

        * platform/sql/SQLiteFileSystem.cpp:
        (WebCore::SQLiteFileSystem::computeHashForFileName):

2021-06-05  Chris Dumez  <cdumez@apple.com>

        Use `const uint8_t*` type more consistently to store bytes in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=226688

        Reviewed by Darin Adler.

        * Modules/cache/DOMCache.cpp:
        (WebCore::DOMCache::addAll):
        (WebCore::DOMCache::put):
        * Modules/fetch/FetchBodyConsumer.cpp:
        (WebCore::FetchBodyConsumer::resolve):
        (WebCore::FetchBodyConsumer::append):
        * Modules/fetch/FetchBodyConsumer.h:
        * Modules/mediastream/libwebrtc/LibWebRTCDataChannelHandler.cpp:
        (WebCore::LibWebRTCDataChannelHandler::OnMessage):
        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::send):
        (WebCore::WebSocketChannel::didReceiveSocketStreamData):
        (WebCore::WebSocketChannel::appendToBuffer):
        (WebCore::WebSocketChannel::startClosingHandshake):
        (WebCore::WebSocketChannel::processFrame):
        (WebCore::WebSocketChannel::enqueueRawFrame):
        (WebCore::WebSocketChannel::processOutgoingFrameQueue):
        (WebCore::WebSocketChannel::sendFrame):
        * Modules/websockets/WebSocketChannel.h:
        * Modules/websockets/WebSocketDeflater.cpp:
        (WebCore::setStreamParameter):
        (WebCore::WebSocketDeflater::addBytes):
        (WebCore::WebSocketInflater::addBytes):
        (WebCore::WebSocketInflater::finish):
        * Modules/websockets/WebSocketDeflater.h:
        (WebCore::WebSocketDeflater::data):
        (WebCore::WebSocketInflater::data):
        * Modules/websockets/WebSocketFrame.cpp:
        (WebCore::WebSocketFrame::parseFrame):
        (WebCore::appendFramePayload):
        (WebCore::WebSocketFrame::makeFrameData):
        (WebCore::WebSocketFrame::WebSocketFrame):
        * Modules/websockets/WebSocketFrame.h:
        * Modules/websockets/WebSocketHandshake.cpp:
        (WebCore::trimInputSample):
        (WebCore::WebSocketHandshake::readServerHandshake):
        (WebCore::WebSocketHandshake::readStatusLine):
        (WebCore::WebSocketHandshake::readHTTPHeaders):
        * Modules/websockets/WebSocketHandshake.h:
        * Modules/websockets/WorkerThreadableWebSocketChannel.cpp:
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::send):
        * contentextensions/SerializedNFA.cpp:
        (WebCore::ContentExtensions::writeAllToFile):
        * crypto/SubtleCrypto.cpp:
        (WebCore::SubtleCrypto::unwrapKey):
        * crypto/mac/SerializedCryptoKeyWrapMac.mm:
        (WebCore::findMasterKey):
        * dom/DecodedDataDocumentParser.cpp:
        (WebCore::DecodedDataDocumentParser::appendBytes):
        * dom/DecodedDataDocumentParser.h:
        * dom/DocumentParser.h:
        * dom/RawDataDocumentParser.h:
        * html/ImageDocument.cpp:
        (WebCore::ImageDocumentParser::appendBytes):
        * html/MediaDocument.cpp:
        (WebCore::MediaDocumentParser::appendBytes):
        * html/PluginDocument.cpp:
        (WebCore::PluginDocumentParser::appendBytes):
        * html/track/InbandTextTrack.h:
        * html/track/InbandWebVTTTextTrack.cpp:
        (WebCore::InbandWebVTTTextTrack::parseWebVTTCueData):
        * html/track/InbandWebVTTTextTrack.h:
        * html/track/WebVTTParser.cpp:
        (WebCore::WebVTTParser::parseBytes):
        (WebCore::WebVTTParser::fileFinished):
        * html/track/WebVTTParser.h:
        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::addData):
        * loader/DocumentWriter.h:
        * loader/SinkDocument.cpp:
        * loader/TextTrackLoader.cpp:
        (WebCore::TextTrackLoader::processNewCueData):
        * platform/graphics/InbandTextTrackPrivateClient.h:
        * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.cpp:
        (WebCore::InbandTextTrackPrivateGStreamer::notifyTrackOfSample):
        * platform/network/HTTPParsers.cpp:
        (WebCore::trimInputSample):
        (WebCore::isValidHeaderNameCharacter):
        (WebCore::parseHTTPHeader):
        (WebCore::parseHTTPRequestBody):
        * platform/network/HTTPParsers.h:
        * platform/network/SocketStreamHandle.cpp:
        (WebCore::SocketStreamHandle::sendData):
        * platform/network/SocketStreamHandle.h:
        * platform/network/SocketStreamHandleClient.h:
        * platform/network/cf/SocketStreamHandleImplCFNet.cpp:
        (WebCore::SocketStreamHandleImpl::readStreamCallback):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged):

2021-06-05  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] Move DataDetectors softlinking in DataDetectorsSPI.h out into a separate PAL header
        https://bugs.webkit.org/show_bug.cgi?id=226669

        Reviewed by Sam Weinig.

        Clean up some softlinking code for the DataDetectors framework. Currently, the `SOFT_LINK_*` macros are defined
        inside the SPI header (`pal/spi/mac/DataDetectorsSPI.h`); this patch moves them out into
        `pal/mac/DataDetectorsSoftLink.{h|mm}` instead, and updates a few places that use these soft-linked symbols to
        import `DataDetectorsSoftLink.h` instead of `DataDetectorsSPI.h`.

        * editing/cocoa/DataDetection.mm:
        (WebCore::detectItem):
        (WebCore::DataDetection::detectItemAroundHitTestResult):
        * page/mac/ImageOverlayControllerMac.mm:
        (WebCore::ImageOverlayController::updateDataDetectorHighlights):
        (WebCore::ImageOverlayController::platformHandleMouseEvent):
        * page/mac/ServicesOverlayController.mm:
        (WebCore::ServicesOverlayController::mouseIsOverHighlight const):
        (WebCore::ServicesOverlayController::buildPhoneNumberHighlights):
        (WebCore::ServicesOverlayController::buildSelectionHighlight):
        * platform/mac/DataDetectorHighlight.mm:
        (WebCore::DataDetectorHighlight::setHighlight):
        (WebCore::DataDetectorHighlight::paintContents):

2021-06-05  Dean Jackson  <dino@apple.com>

        [WebXR] Supply an IOSurface in SimulatedXRDevice
        https://bugs.webkit.org/show_bug.cgi?id=226564
        <rdar://problem/78793086>

        Reviewed by Sam Weinig.

        Rather than handle the case where we get a null IOSurface,
        have the SimulatedXRDevice create one on each frame.

        * Modules/webxr/WebXROpaqueFramebuffer.cpp:
        (WebCore::WebXROpaqueFramebuffer::startFrame):
        * testing/WebFakeXRDevice.cpp:
        (WebCore::SimulatedXRDevice::frameTimerFired):

2021-06-05  Simon Fraser  <simon.fraser@apple.com>

        Remove some duplicated code related to scrollbars
        https://bugs.webkit.org/show_bug.cgi?id=226685

        Reviewed by Alan Bujtas.

        RenderLayerScrollableArea and RenderBox had some very similar code related to 
        computing whether scrollbars are present, so remove the duplication, and prepare
        for ScrollbarOrientation to become an enum class.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::hasAutoScrollbar const):
        (WebCore::RenderBox::hasAlwaysPresentScrollbar const):
        (WebCore::RenderBox::hasVerticalScrollbarWithAutoBehavior const): Deleted.
        (WebCore::RenderBox::hasHorizontalScrollbarWithAutoBehavior const): Deleted.
        * rendering/RenderBox.h:
        * rendering/RenderLayerScrollableArea.cpp:
        (WebCore::RenderLayerScrollableArea::updateScrollbarsAfterLayout):
        (WebCore::RenderLayerScrollableArea::updateScrollbarsAfterStyleChange):
        (WebCore::styleRequiresScrollbar): Deleted.
        (WebCore::styleDefinesAutomaticScrollbar): Deleted.

2021-06-04  Dean Jackson  <dino@apple.com>

        [WebXR] WebXR on Cocoa doesn't work with webgl 1 contexts
        https://bugs.webkit.org/show_bug.cgi?id=226675

        Reviewed by Sam Weinig.

        Support WebGL 1 contexts by attaching the correct combined depth+stencil
        target.

        While here, rename some variables to be a bit more clear about what
        they do.

        * Modules/webxr/WebXROpaqueFramebuffer.cpp:
        (WebCore::WebXROpaqueFramebuffer::~WebXROpaqueFramebuffer): Make sure we delete
        the texture if we created one.
        (WebCore::WebXROpaqueFramebuffer::startFrame): Use the correct attachment point
        if we're a WebGL 1 context.
        (WebCore::WebXROpaqueFramebuffer::setupFramebuffer):

2021-06-05  Antti Koivisto  <antti@apple.com>

        Rename InlineTextBox to LegacyInlineTextBox
        https://bugs.webkit.org/show_bug.cgi?id=226633

        Rubber-stamped by Sam Weinig.

        More legacy line layout naming.

        * Headers.cmake:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/ContainerNode.cpp:
        * dom/DocumentMarkerController.cpp:
        (WebCore::DocumentMarkerController::addMarker):
        * dom/Position.cpp:
        * editing/CompositeEditCommand.cpp:
        * editing/Editor.h:
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::debugRenderer const):
        * editing/RenderedPosition.cpp:
        * editing/TextIterator.cpp:
        * editing/VisiblePosition.cpp:
        * layout/Verification.cpp:
        (WebCore::Layout::checkForMatchingTextRuns):
        (WebCore::Layout::outputMismatchingComplexLineInformationIfNeeded):
        * layout/formattingContexts/inline/text/TextUtil.h:
        * layout/integration/LayoutIntegrationRunIterator.cpp:
        (WebCore::LayoutIntegration::firstTextRunInTextOrderFor):
        * layout/integration/LayoutIntegrationRunIterator.h:
        (WebCore::LayoutIntegration::PathTextRun::legacyInlineBox const):
        * layout/integration/LayoutIntegrationRunIteratorLegacyPath.h:
        (WebCore::LayoutIntegration::RunIteratorLegacyPath::traverseNextTextRunInTextOrder):
        (WebCore::LayoutIntegration::RunIteratorLegacyPath::inlineTextBox const):
        * layout/layouttree/LayoutBox.h:
        (WebCore::Layout::Box::isInlineTextBox const):
        * layout/layouttree/LayoutInlineTextBox.cpp:
        (WebCore::Layout::InlineTextBox::InlineTextBox):
        * rendering/CaretRectComputation.cpp:
        (WebCore::computeCaretRectForSVGInlineText):
        * rendering/EllipsisBox.cpp:
        * rendering/LegacyInlineBox.h:
        * rendering/LegacyInlineFlowBox.cpp:
        (WebCore::LegacyInlineFlowBox::addToLine):
        (WebCore::LegacyInlineFlowBox::placeBoxRangeInInlineDirection):
        (WebCore::LegacyInlineFlowBox::requiresIdeographicBaseline const):
        (WebCore::LegacyInlineFlowBox::placeBoxesInBlockDirection):
        (WebCore::LegacyInlineFlowBox::addTextBoxVisualOverflow):
        (WebCore::LegacyInlineFlowBox::computeOverflow):
        (WebCore::LegacyInlineFlowBox::computeOverAnnotationAdjustment const):
        (WebCore::LegacyInlineFlowBox::computeUnderAnnotationAdjustment const):
        * rendering/LegacyInlineFlowBox.h:
        * rendering/LegacyInlineTextBox.cpp: Renamed from Source/WebCore/rendering/InlineTextBox.cpp.
        (WebCore::LegacyInlineTextBox::~LegacyInlineTextBox):
        (WebCore::LegacyInlineTextBox::hasTextContent const):
        (WebCore::LegacyInlineTextBox::markDirty):
        (WebCore::LegacyInlineTextBox::logicalOverflowRect const):
        (WebCore::LegacyInlineTextBox::setLogicalOverflowRect):
        (WebCore::LegacyInlineTextBox::baselinePosition const):
        (WebCore::LegacyInlineTextBox::lineHeight const):
        (WebCore::LegacyInlineTextBox::selectionTop const):
        (WebCore::LegacyInlineTextBox::selectionBottom const):
        (WebCore::LegacyInlineTextBox::selectionHeight const):
        (WebCore::LegacyInlineTextBox::isSelected const):
        (WebCore::LegacyInlineTextBox::selectionState):
        (WebCore::LegacyInlineTextBox::verifySelectionState const):
        (WebCore::LegacyInlineTextBox::lineFont const):
        (WebCore::snappedSelectionRect):
        (WebCore::LegacyInlineTextBox::localSelectionRect const):
        (WebCore::LegacyInlineTextBox::deleteLine):
        (WebCore::LegacyInlineTextBox::extractLine):
        (WebCore::LegacyInlineTextBox::attachLine):
        (WebCore::LegacyInlineTextBox::placeEllipsisBox):
        (WebCore::LegacyInlineTextBox::isLineBreak const):
        (WebCore::LegacyInlineTextBox::nodeAtPoint):
        (WebCore::LegacyInlineTextBox::emphasisMarkExistsAndIsAbove const):
        (WebCore::createMarkedTextFromSelectionInBox):
        (WebCore::LegacyInlineTextBox::paint):
        (WebCore::LegacyInlineTextBox::clampedOffset const):
        (WebCore::LegacyInlineTextBox::clampedStartEndForState const):
        (WebCore::LegacyInlineTextBox::selectionStartEnd const):
        (WebCore::LegacyInlineTextBox::highlightStartEnd const):
        (WebCore::LegacyInlineTextBox::hasMarkers const):
        (WebCore::LegacyInlineTextBox::paintPlatformDocumentMarkers):
        (WebCore::LegacyInlineTextBox::calculateUnionOfAllDocumentMarkerBounds const):
        (WebCore::LegacyInlineTextBox::calculateDocumentMarkerBounds const):
        (WebCore::LegacyInlineTextBox::paintPlatformDocumentMarker):
        (WebCore::LegacyInlineTextBox::collectMarkedTextsForDraggedContent):
        (WebCore::LegacyInlineTextBox::collectMarkedTextsForDocumentMarkers const):
        (WebCore::LegacyInlineTextBox::collectMarkedTextsForHighlights const):
        (WebCore::LegacyInlineTextBox::textOriginFromBoxRect const):
        (WebCore::LegacyInlineTextBox::paintMarkedTexts):
        (WebCore::LegacyInlineTextBox::paintMarkedTextBackground):
        (WebCore::LegacyInlineTextBox::paintMarkedTextForeground):
        (WebCore::LegacyInlineTextBox::paintMarkedTextDecoration):
        (WebCore::LegacyInlineTextBox::paintCompositionBackground):
        (WebCore::LegacyInlineTextBox::paintCompositionUnderlines const):
        (WebCore::mirrorRTLSegment):
        (WebCore::LegacyInlineTextBox::paintCompositionUnderline const):
        (WebCore::LegacyInlineTextBox::caretMinOffset const):
        (WebCore::LegacyInlineTextBox::caretMaxOffset const):
        (WebCore::LegacyInlineTextBox::textPos const):
        (WebCore::LegacyInlineTextBox::offsetForPosition const):
        (WebCore::LegacyInlineTextBox::positionForOffset const):
        (WebCore::LegacyInlineTextBox::createTextRun const):
        (WebCore::LegacyInlineTextBox::text const):
        (WebCore::LegacyInlineTextBox::combinedText const):
        (WebCore::LegacyInlineTextBox::debugTextShadow):
        (WebCore::LegacyInlineTextBox::expansionBehavior const):
        (WebCore::LegacyInlineTextBox::boxName const):
        (WebCore::LegacyInlineTextBox::outputLineBox const):
        * rendering/LegacyInlineTextBox.h: Renamed from Source/WebCore/rendering/InlineTextBox.h.
        (WebCore::LegacyInlineTextBox::LegacyInlineTextBox):
        (WebCore::LegacyInlineTextBox::renderer const):
        (WebCore::LegacyInlineTextBox::lineStyle const):
        (WebCore::LegacyInlineTextBox::prevTextBox const):
        (WebCore::LegacyInlineTextBox::nextTextBox const):
        (WebCore::LegacyInlineTextBox::setNextTextBox):
        (WebCore::LegacyInlineTextBox::setPreviousTextBox):
        (WebCore::LegacyInlineTextBox::start const):
        (WebCore::LegacyInlineTextBox::end const):
        (WebCore::LegacyInlineTextBox::len const):
        (WebCore::LegacyInlineTextBox::setStart):
        (WebCore::LegacyInlineTextBox::setLen):
        (WebCore::LegacyInlineTextBox::offsetRun):
        (WebCore::LegacyInlineTextBox::truncation const):
        (WebCore::LegacyInlineTextBox::compareByStart):
        (WebCore::LegacyInlineTextBox::logicalTopVisualOverflow const):
        (WebCore::LegacyInlineTextBox::logicalBottomVisualOverflow const):
        (WebCore::LegacyInlineTextBox::logicalLeftVisualOverflow const):
        (WebCore::LegacyInlineTextBox::logicalRightVisualOverflow const):
        (WebCore::LegacyInlineTextBox::dirtyOwnLineBoxes):
        (WebCore::LegacyInlineTextBox::paintMarkedTexts):
        * rendering/LegacyLineLayout.cpp:
        (WebCore::LegacyLineLayout::constructLine):
        (WebCore::setLogicalWidthForTextRun):
        (WebCore::LegacyLineLayout::computeExpansionForJustifiedText):
        (WebCore::expansionBehaviorForInlineTextBox):
        (WebCore::applyExpansionBehavior):
        (WebCore::LegacyLineLayout::computeInlineDirectionPositionsForSegment):
        (WebCore::LegacyLineLayout::removeInlineBox const):
        (WebCore::LegacyLineLayout::computeBlockDirectionPositionsForLine):
        (WebCore::LegacyLineLayout::createLineBoxesFromBidiRuns):
        * rendering/LegacyRootInlineBox.cpp:
        (WebCore::LegacyRootInlineBox::isHyphenated const):
        (WebCore::LegacyRootInlineBox::ascentAndDescentForBox const):
        * rendering/RenderBlock.cpp:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::inlineSelectionGaps):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintMaskForTextFillBox):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::generateCulledLineBoxRects const):
        (WebCore::RenderInline::culledInlineVisualOverflowBoundingBox const):
        (WebCore::RenderInline::dirtyLineBoxes):
        * rendering/RenderLineBoxList.cpp:
        (WebCore::RenderLineBoxList::dirtyLinesFromChangedChild):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::absoluteQuadsForRange const):
        (WebCore::RenderText::createTextBox):
        (WebCore::RenderText::positionLineBox):
        * rendering/RenderText.h:
        (WebCore::RenderText::extractTextBox):
        (WebCore::RenderText::attachTextBox):
        (WebCore::RenderText::removeTextBox):
        (WebCore::RenderText::createInlineTextBox):
        (WebCore::RenderText::firstTextBox const):
        (WebCore::RenderText::lastTextBox const):
        (WebCore::RenderText::findNextInlineTextBox const):
        * rendering/RenderTextLineBoxes.cpp:
        (WebCore::RenderTextLineBoxes::createAndAppendLineBox):
        (WebCore::RenderTextLineBoxes::extract):
        (WebCore::RenderTextLineBoxes::attach):
        (WebCore::RenderTextLineBoxes::remove):
        (WebCore::RenderTextLineBoxes::deleteAll):
        (WebCore::RenderTextLineBoxes::findNext const):
        (WebCore::RenderTextLineBoxes::checkConsistency const):
        * rendering/RenderTextLineBoxes.h:
        (WebCore::RenderTextLineBoxes::first const):
        (WebCore::RenderTextLineBoxes::last const):
        * rendering/RenderTreeAsText.cpp:
        * rendering/TextDecorationPainter.h:
        (WebCore::TextDecorationPainter::setInlineTextBox):
        * rendering/TextPainter.cpp:
        (WebCore::TextPainter::clearGlyphDisplayLists):
        * rendering/svg/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::createTextBox):
        * rendering/svg/RenderSVGInlineText.h:
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::SVGInlineTextBox):
        (WebCore::SVGInlineTextBox::dirtyOwnLineBoxes):
        (WebCore::SVGInlineTextBox::dirtyLineBoxes):
        (WebCore::SVGInlineTextBox::offsetForPositionInFragment const):
        (WebCore::SVGInlineTextBox::paint):
        (WebCore::SVGInlineTextBox::nodeAtPoint):
        * rendering/svg/SVGInlineTextBox.h:
        * rendering/svg/SVGRenderTreeAsText.cpp:
        (WebCore::writeSVGInlineTextBoxes):
        * style/InlineTextBoxStyle.cpp:
        (WebCore::computeUnderlineOffset):
        (WebCore::visualOverflowForDecorations):
        * style/InlineTextBoxStyle.h:

2021-06-05  Cameron McCormack  <heycam@apple.com>

        Diff aspect-ratio property values correctly
        https://bugs.webkit.org/show_bug.cgi?id=226673

        Reviewed by Rob Buis.

        Test: fast/css/aspect-ratio-no-relayout.html

        * rendering/style/RenderStyle.cpp:
        (WebCore::rareNonInheritedDataChangeRequiresLayout):

2021-06-04  Chris Dumez  <cdumez@apple.com>

        Optimize a few call sites creating SharedBuffer objects
        https://bugs.webkit.org/show_bug.cgi?id=226674

        Reviewed by Darin Adler.

        * Modules/mediastream/RTCRtpSFrameTransform.cpp:
        (WebCore::transformFrame):
        * inspector/agents/InspectorNetworkAgent.cpp:
        (WebCore::InspectorNetworkAgent::interceptWithResponse):
        (WebCore::InspectorNetworkAgent::interceptRequestWithResponse):
        * platform/graphics/avfoundation/CDMFairPlayStreaming.cpp:
        (WebCore::CDMPrivateFairPlayStreaming::extractKeyIDsSinf):
        * workers/service/context/ServiceWorkerFetch.cpp:
        (WebCore::ServiceWorkerFetch::processResponse):

2021-06-04  Chris Dumez  <cdumez@apple.com>

        Reduce use of legacy MainThreadTaskQueue in media code
        https://bugs.webkit.org/show_bug.cgi?id=226672

        Reviewed by Darin Adler.

        Reduce use of legacy MainThreadTaskQueue in media code. Simply use callOnMainThread()
        for these instead.

        * platform/graphics/cocoa/TextTrackRepresentationCocoa.h:
        * platform/graphics/cocoa/TextTrackRepresentationCocoa.mm:
        (WebCore::TextTrackRepresentationCocoa::boundsChanged):
        * platform/mediastream/ios/AVAudioSessionCaptureDeviceManager.h:
        * platform/mediastream/mac/CoreAudioCaptureDeviceManager.cpp:
        (WebCore::CoreAudioCaptureDeviceManager::scheduleUpdateCaptureDevices):
        * platform/mediastream/mac/CoreAudioCaptureDeviceManager.h:
        * platform/mock/MediaPlaybackTargetPickerMock.cpp:
        (WebCore::MediaPlaybackTargetPickerMock::showPlaybackTargetPicker):
        (WebCore::MediaPlaybackTargetPickerMock::startingMonitoringPlaybackTargets):
        (WebCore::MediaPlaybackTargetPickerMock::setState):
        * platform/mock/MediaPlaybackTargetPickerMock.h:

2021-06-04  Chris Dumez  <cdumez@apple.com>

        FileSystem::readFromFile() should return data as `void*`
        https://bugs.webkit.org/show_bug.cgi?id=226671

        Reviewed by Darin Adler.

        FileSystem::readFromFile() should return data as `void*` instead of `char*`. This is more flexible and
        consistent with FileSystem::writeToFile().

        * platform/FileHandle.cpp:
        (WebCore::FileHandle::read):
        * platform/FileStream.cpp:
        (WebCore::FileStream::read):
        * platform/FileStream.h:
        * platform/network/BlobResourceHandle.cpp:
        (WebCore::BlobResourceHandle::readSync):
        (WebCore::BlobResourceHandle::readDataSync):
        (WebCore::BlobResourceHandle::readFileSync):
        (WebCore::BlobResourceHandle::notifyReceiveData):
        * platform/network/BlobResourceHandle.h:
        * platform/network/curl/CurlCacheEntry.cpp:
        (WebCore::CurlCacheEntry::readCachedData):
        (WebCore::CurlCacheEntry::loadResponseHeaders):
        (WebCore::CurlCacheEntry::loadFileToBuffer):
        * platform/network/curl/CurlCacheEntry.h:
        * rendering/RenderThemeWin.cpp:
        (WebCore::fillBufferWithContentsOfFile):
        (WebCore::RenderThemeWin::stringWithContentsOfFile):

2021-06-04  Chris Dumez  <cdumez@apple.com>

        Worker.constructor throws an exception when the url param is an empty string
        https://bugs.webkit.org/show_bug.cgi?id=226637

        Reviewed by Darin Adler.

        Stop throwing an exception if the Worker constructor gets called with an empty string.
        Instead treat it as a relative URL, like Chrome and Firefox do.

        No new tests, updated existing ones.

        * workers/AbstractWorker.cpp:
        (WebCore::AbstractWorker::resolveURL):

2021-06-04  Chris Dumez  <cdumez@apple.com>

        Unreviewed Windows build fix after r278516.

        * platform/graphics/avfoundation/cf/WebCoreAVCFResourceLoader.cpp:
        (WebCore::WebCoreAVCFResourceLoader::dataReceived):
        * platform/graphics/avfoundation/cf/WebCoreAVCFResourceLoader.h:

2021-06-04  Chris Dumez  <cdumez@apple.com>

        Use Vector<uint8_t> instead of Vector<char> to store bytes in SharedBuffer
        https://bugs.webkit.org/show_bug.cgi?id=226623

        Reviewed by Darin Adler.

        Use Vector<uint8_t> instead of Vector<char> to store bytes in SharedBuffer. Also have SharedBuffer::data()
        return a `const uint8_t*` instead of `const char*`. This is our preferred type to store bytes.

        * Modules/fetch/FetchBody.cpp:
        (WebCore::FetchBody::consumeFormData):
        * Modules/fetch/FetchBodyConsumer.cpp:
        (WebCore::packageFormData):
        (WebCore::resolveWithTypeAndData):
        * Modules/highlight/AppHighlight.h:
        (WebCore::AppHighlight::encode const):
        * Modules/indexeddb/IDBGetResult.cpp:
        (WebCore::IDBGetResult::dataFromBuffer):
        * Modules/indexeddb/server/IDBSerialization.cpp:
        (WebCore::serializeIDBKeyData):
        * Modules/mediastream/RTCDataChannel.cpp:
        (WebCore::RTCDataChannel::didReceiveRawData):
        * Modules/mediastream/RTCDataChannel.h:
        * Modules/mediastream/RTCDataChannelRemoteHandler.cpp:
        (WebCore::RTCDataChannelRemoteHandler::didReceiveRawData):
        (WebCore::RTCDataChannelRemoteHandler::sendRawData):
        * Modules/mediastream/RTCDataChannelRemoteHandler.h:
        * Modules/mediastream/RTCDataChannelRemoteSource.h:
        (WebCore::RTCDataChannelRemoteSource::sendRawData):
        * Modules/mediastream/libwebrtc/LibWebRTCDataChannelHandler.cpp:
        (WebCore::LibWebRTCDataChannelHandler::sendRawData):
        (WebCore::LibWebRTCDataChannelHandler::OnMessage):
        * Modules/mediastream/libwebrtc/LibWebRTCDataChannelHandler.h:
        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::load):
        * fileapi/Blob.cpp:
        (WebCore::Blob::Blob):
        * fileapi/NetworkSendQueue.cpp:
        (WebCore::NetworkSendQueue::enqueue):
        (WebCore::NetworkSendQueue::processMessages):
        * fileapi/NetworkSendQueue.h:
        * inspector/NetworkResourcesData.cpp:
        (WebCore::NetworkResourcesData::ResourceData::appendData):
        (WebCore::NetworkResourcesData::maybeAddResourceData):
        * inspector/NetworkResourcesData.h:
        * inspector/agents/InspectorNetworkAgent.cpp:
        (WebCore::InspectorNetworkAgent::didReceiveData):
        * inspector/agents/InspectorPageAgent.cpp:
        (WebCore::decodeBuffer):
        (WebCore::InspectorPageAgent::dataContent):
        * inspector/agents/InspectorPageAgent.h:
        * loader/ContentFilter.cpp:
        (WebCore::ContentFilter::deliverResourceData):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::continueAfterContentPolicy):
        (WebCore::DocumentLoader::maybeCreateArchive):
        (WebCore::DocumentLoader::maybeFinishLoadingMultipartContent):
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::didFinishLoading):
        (WebCore::DocumentThreadableLoader::loadRequest):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadResourceSynchronously):
        * loader/NetscapePlugInStreamLoader.cpp:
        (WebCore::NetscapePlugInStreamLoader::didReceiveDataOrBuffer):
        * loader/NetscapePlugInStreamLoader.h:
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::didReceiveDataOrBuffer):
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didReceiveDataOrBuffer):
        * loader/TextResourceDecoder.h:
        (WebCore::TextResourceDecoder::decode):
        (WebCore::TextResourceDecoder::decodeAndFlush):
        * loader/TextTrackLoader.cpp:
        (WebCore::TextTrackLoader::processNewCueData):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::didFinishLoadingManifest):
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::writeDataToUniqueFileInDirectory):
        * loader/archive/mhtml/MHTMLArchive.cpp:
        (WebCore::MHTMLArchive::generateMHTMLData):
        * loader/archive/mhtml/MHTMLParser.cpp:
        (WebCore::MHTMLParser::parseNextPart):
        * loader/cache/CachedRawResource.cpp:
        (WebCore::CachedRawResource::updateBuffer):
        (WebCore::CachedRawResource::finishLoading):
        (WebCore::CachedRawResource::didAddClient):
        * loader/cache/CachedSVGFont.cpp:
        (WebCore::CachedSVGFont::ensureCustomFontData):
        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::SharedBuffer):
        (WebCore::SharedBuffer::create):
        (WebCore::SharedBuffer::combineIntoOneSegment const):
        (WebCore::SharedBuffer::data const):
        (WebCore::SharedBuffer::tryCreateArrayBuffer const):
        (WebCore::SharedBuffer::append):
        (WebCore::SharedBuffer::DataSegment::data const):
        (WebCore::SharedBuffer::DataSegment::size const):
        (WebCore::SharedBufferDataView::data const):
        (WebCore::utf8Buffer):
        * platform/SharedBuffer.h:
        * platform/encryptedmedia/clearkey/CDMClearKey.cpp:
        (WebCore::extractKeyidsLocationFromCencInitData):
        (WebCore::extractKeyidsFromCencInitData):
        * platform/graphics/Model.h:
        (WebCore::Model::encode const):
        * platform/graphics/displaylists/DisplayListItemBuffer.cpp:
        (WebCore::DisplayList::ItemBuffer::append):
        * platform/graphics/gstreamer/eme/CDMThunder.cpp:
        (WebCore::CDMInstanceThunder::setServerCertificate):
        (WebCore::ParsedResponseMessage::ParsedResponseMessage):
        (WebCore::CDMInstanceSessionThunder::errorCallback):
        (WebCore::CDMInstanceSessionThunder::requestLicense):
        (WebCore::CDMInstanceSessionThunder::updateLicense):
        (WebCore::CDMInstanceSessionThunder::loadSession):
        * platform/graphics/opentype/OpenTypeTypes.h:
        (WebCore::OpenType::TableBase::isValidEnd):
        * platform/mediastream/RTCDataChannelHandler.h:
        * platform/mediastream/RTCDataChannelHandlerClient.h:
        * platform/mediastream/RTCDataChannelRemoteSourceConnection.h:
        * platform/mock/RTCDataChannelHandlerMock.cpp:
        (WebCore::RTCDataChannelHandlerMock::sendRawData):
        * platform/mock/RTCDataChannelHandlerMock.h:
        * platform/network/FormData.cpp:
        (WebCore::FormData::asSharedBuffer const):
        * platform/network/ResourceHandleClient.cpp:
        (WebCore::ResourceHandleClient::didReceiveBuffer):
        * platform/network/cocoa/RangeResponseGenerator.mm:
        (WebCore::RangeResponseGenerator::giveResponseToTaskIfBytesInRangeReceived):
        * platform/text/TextEncoding.h:
        (WebCore::TextEncoding::decode const):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged):
        * xml/XSLTProcessorLibxslt.cpp:
        (WebCore::docLoaderFunc):
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::OffsetBuffer::OffsetBuffer):

2021-06-04  Brady Eidson  <beidson@apple.com>

        Enforce a quota in window.sessionStorage
        rdar://78507096 and https://bugs.webkit.org/show_bug.cgi?id=226337

        Reviewed by Chris Dumez.

        Covered by change to existing test.

        * page/Page.cpp:
        (WebCore::Page::sessionStorage): Make sure the quota for session storage is not "noQuota"

        * page/Settings.yaml: Default to 5mb instead of noQuota to match other browsers.

2021-06-03  Darin Adler  <darin@apple.com>

        Move from WebCore::SuccessOr to WTF::Expected
        https://bugs.webkit.org/show_bug.cgi?id=226614

        Reviewed by Sam Weinig.

        The upcoming std::expected is designed for cases like the ones we
        are using SuccessOr for, using void for the expected type in a case like
        this where it's success or failure. Our WTF::Expected is for our use
        while waiting for compilers with std::expected. It was straightforward
        to port our uses of SuccessOr to instead use Expected.

        * Headers.cmake: Removed SuccessOr.h.
        * WebCore.xcodeproj/project.pbxproj: Ditto.

        * dom/SuccessOr.h: Emptied out this file for now; delete later.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::canTransitionFromAutoplayToPlay const): Use
        Expected for the return type and call makeUnexpected as needed. Also
        updated the check of the result from playbackStateChangePermitted to
        call Expected::error instead of SuccessOr::value.
        (WebCore::HTMLMediaElement::setReadyState): Use Expected::error
        instead of SuccessOr::value, and updated local variable name for
        greater clarity. Also fixed one call site that had the success check
        backwards: The symptom is that it would never log "Autoplay blocked"
        in that case, but otherwise seems harmless.
        (WebCore::HTMLMediaElement::play): Ditto.

        * html/HTMLMediaElement.h: Use Expected for the return type of
        canTransitionFromAutoplayToPlay.

        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::playbackStateChangePermitted const): Use
        Expected for the return type and call makeUnexpected as needed.

        * html/MediaElementSession.h: Removed include of SuccessOr.h, and
        tweaked coding style a bit. Use Expected for the return type of
        playbackStateChangePermitted.

2021-06-04  Ryosuke Niwa  <rniwa@webkit.org>

        Store MediaPlayer using WeakPtr in MediaPlayerPrivateRemote
        https://bugs.webkit.org/show_bug.cgi?id=224421

        Reviewed by Eric Carlson.

        Made it possible to create a WeakPtr of MediaPlayer.

        * platform/graphics/MediaPlayer.h:

2021-06-04  Martin Robinson  <mrobinson@webkit.org>

        [css-scroll-snap] Snap offsets and active index are duplicated in ScrollController and ScrollableArea
        https://bugs.webkit.org/show_bug.cgi?id=226538

        Reviewed by Simon Fraser.

        Remove duplicate css-scroll-snap state from ScrollableArea. This state is already
        stored in ScrollController, so we do not need to store it also in ScrollableArea.
        This change also renames a couple methods so that they have clearer and more
        consistent names.

        No new tests. This should not change behavior.

        * page/FrameView.cpp:
        (WebCore::FrameView::performPostLayoutTasks): updateScrollSnapState() is now called
        resnapAfterLayout().
        * page/scrolling/AsyncScrollingCoordinator.cpp: snapOffsetInfo() is now called
        snapOffsetsInfo().
        (WebCore::AsyncScrollingCoordinator::setScrollingNodeScrollableAreaGeometry): Ditto.
        (WebCore::AsyncScrollingCoordinator::updateScrollSnapPropertiesWithFrameView): Ditto.
        * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.mm:
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::updateFromStateNode): Use new method name.
        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::updateActiveScrollSnapIndexForOffset): We no longer need to
        sync state with Scrollable Area.
        (WebCore::ScrollAnimator::setSnapOffsetsInfo): Added this setter which
        calls through to ScrollController.
        (WebCore::ScrollAnimator::snapOffsetsInfo const): Added this getter which calls through
        to ScrollController.
        (WebCore::ScrollAnimator::setActiveScrollSnapIndexForAxis): Added this method.
        * platform/ScrollAnimator.h: Update method declarations.
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::allowsVerticalStretching const): Use new method names.
        (WebCore::ScrollAnimatorMac::allowsHorizontalStretching const): Ditto.
        * platform/ScrollController.cpp:
        (WebCore::ScrollController::setSnapOffsetsInfo): Combined updateScrollSnapState and
        updateScrollSnapPoints into this method.
        (WebCore::ScrollController::snapOffsetsInfo const): Added this getter.
        * platform/ScrollController.h: Update method declarations.
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::handleWheelEventForScrolling): We no longer need to sync
        from the ScrollAnimator.
        (WebCore::ScrollableArea::snapOffsetsInfo const): Renamed this getter.
        (WebCore::ScrollableArea::setScrollSnapOffsetInfo): This now calls through to
        ScrollController.
        (WebCore::ScrollableArea::clearSnapOffsets): Ditto.
        (WebCore::ScrollableArea::currentHorizontalSnapPointIndex const): Ditto.
        (WebCore::ScrollableArea::currentVerticalSnapPointIndex const): Ditto.
        (WebCore::ScrollableArea::setCurrentHorizontalSnapPointIndex): Ditto.
        (WebCore::ScrollableArea::setCurrentVerticalSnapPointIndex): Ditto.
        (WebCore::ScrollableArea::resnapAfterLayout): Renamed this method and moved
        setting the ScrollSnapOffsetsInfo to setScrollSnapOffsetInfo.
        (WebCore::ScrollableArea::doPostThumbMoveSnapping): Use new methods to access
        scroll snap state and return early if we don't have a ScrollAnimator already.
        This was done implicitly in the previous implementation.
        * platform/ScrollableArea.h:
        * rendering/RenderLayerScrollableArea.cpp: Update method definitions and
        remove members that are no longer used.
        (WebCore::RenderLayerScrollableArea::updateScrollInfoAfterLayout): Use new method name.
        * testing/Internals.cpp:
        (WebCore::Internals::scrollSnapOffsets): Ditto.

2021-06-04  Chris Dumez  <cdumez@apple.com>

        Stop using legacy MainThreadTaskQueue in PlatformMediaSessionManager / MediaSessionManagerCocoa
        https://bugs.webkit.org/show_bug.cgi?id=226649

        Reviewed by Eric Carlson.

        Stop using legacy MainThreadTaskQueue in PlatformMediaSessionManager / MediaSessionManagerCocoa.
        Media code should be using the HTML event loop whenever possible and can use callOnMainThread()
        for global singleton classes that are not associated with a particular document (like
        PlatformMediaSessionManager).

        Also stop subclassing CanMakeWeakPtr<>. It doesn't make sense since the class is a singleton.

        * platform/audio/PlatformMediaSessionManager.cpp:
        (WebCore::PlatformMediaSessionManager::scheduleUpdateSessionState):
        * platform/audio/PlatformMediaSessionManager.h:
        * platform/audio/cocoa/MediaSessionManagerCocoa.h:
        * platform/audio/cocoa/MediaSessionManagerCocoa.mm:
        (WebCore::MediaSessionManagerCocoa::scheduleSessionStatusUpdate):
        (WebCore::MediaSessionManagerCocoa::sessionWillEndPlayback):
        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (WebCore::MediaSessionManageriOS::mediaServerConnectionDied):

2021-06-04  Wenson Hsieh  <wenson_hsieh@apple.com>

        Remove the unused `sourceElementID` argument in `Document::updateIsPlayingMedia` and related code
        https://bugs.webkit.org/show_bug.cgi?id=226650

        Reviewed by Chris Dumez.

        This `uint64_t` argument is currently not used for anything. It was originally added in r188030 with the purpose
        of mapping to HTMLMediaElements via `HTMLMediaElement::elementWithID()`, but that mechanism was entirely removed
        in r267885.

        It appears that this code has been superceded by (relatively recent) support for the Media Session API.

        No change in behavior.

        * dom/Document.cpp:
        (WebCore::Document::willBeRemovedFromFrame):
        (WebCore::Document::updateIsPlayingMedia):
        * dom/Document.h:
        * page/ChromeClient.h:
        (WebCore::ChromeClient::isPlayingMediaDidChange):
        * page/Page.cpp:
        (WebCore::Page::updateIsPlayingMedia):
        * page/Page.h:

2021-06-04  Chris Dumez  <cdumez@apple.com>

        Port MediaKeySystemAccess & MediaCapabilities to the HTML event loop
        https://bugs.webkit.org/show_bug.cgi?id=226646

        Reviewed by Eric Carlson.

        Port MediaKeySystemAccess & MediaCapabilities to the HTML event loop instead of using
        a global Timer. Most of the media code has been ported to the HTML event loop already.

        * Modules/encryptedmedia/MediaKeySystemAccess.cpp:
        (WebCore::MediaKeySystemAccess::createMediaKeys):
        * Modules/encryptedmedia/MediaKeySystemAccess.h:
        * Modules/mediacapabilities/MediaCapabilities.cpp:
        (WebCore::MediaCapabilities::decodingInfo):
        (WebCore::MediaCapabilities::encodingInfo):
        * Modules/mediacapabilities/MediaCapabilities.h:
        * Modules/mediacapabilities/MediaCapabilities.idl:

2021-06-04  Chris Dumez  <cdumez@apple.com>

        DOMFileSystem::listDirectory() fails to protect |this| when going to the background thread
        https://bugs.webkit.org/show_bug.cgi?id=226652

        Reviewed by Darin Adler.

        * Modules/entriesapi/DOMFileSystem.cpp:
        (WebCore::DOMFileSystem::listDirectory):

2021-06-04  Chris Dumez  <cdumez@apple.com>

        Stop using legacy MainThreadTaskQueue in Document::didLogMessage()
        https://bugs.webkit.org/show_bug.cgi?id=226645

        Reviewed by Darin Adler.

        Stop using legacy MainThreadTaskQueue in Document::didLogMessage() and use the HTML
        event loop instead.

        * dom/Document.cpp:
        (WebCore::Document::didLogMessage):
        * dom/Document.h:

2021-06-04  Antti Koivisto  <antti@apple.com>

        REGRESSION (maybe r276882): custom properties not available on host on initial paint
        https://bugs.webkit.org/show_bug.cgi?id=226574
        <rdar://problem/78863643>

        Reviewed by Simon Fraser.

        We fail to invalidate :host style when switching out of shared resolver after asynchronously
        loading a stylesheet into a shadow tree. This happens because the resolver has been cleared and
        the invalidation code just bails out if none is present.

        Test case by vb@bigdot.de.

        Test: fast/shadow-dom/shared-resolver-host-invalidation.html

        * style/StyleInvalidator.cpp:
        (WebCore::Style::Invalidator::invalidateHostAndSlottedStyleIfNeeded):

        Change the assumption so that if we don't have a resolver we always invalidate the host.
        The alternative would be to build the resolver and do this accurately but doing that here
        seems bit risky. This should be cheap and rare invalidation in any case.

2021-06-04  Alex Christensen  <achristensen@webkit.org>

        Implement off-by-default experimental feature for PerformanceResourceTiming.transferSize, encodedBodySize, and decodedBodySize
        https://bugs.webkit.org/show_bug.cgi?id=226629

        Reviewed by Brady Eidson.

        The tests for TAO are entangled with the tests for these properties.  Having an implementation helps see what is still broken.
        Covered by web platform tests.

        * page/PerformanceResourceTiming.cpp:
        (WebCore::PerformanceResourceTiming::transferSize const):
        (WebCore::PerformanceResourceTiming::encodedBodySize const):
        (WebCore::PerformanceResourceTiming::decodedBodySize const):
        * page/PerformanceResourceTiming.h:
        * page/PerformanceResourceTiming.idl:

2021-06-04  Myles C. Maxfield  <mmaxfield@apple.com>

        Use references in font loading code instead of pointers which can never be null
        https://bugs.webkit.org/show_bug.cgi?id=226622

        Reviewed by Chris Dumez.

        CSSFontFace::create()'s CSSFontSelector can never be null. This is clear from
        observation of all 3 call sites.

        No new tests because there is no behavior change.

        * css/CSSFontFace.cpp:
        (WebCore::CSSFontFace::create):
        * css/CSSFontFace.h:
        * css/CSSFontFaceSet.cpp:
        (WebCore::CSSFontFaceSet::ensureLocalFontFacesForFamilyRegistered):
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::addFontFaceRule):
        * css/FontFace.cpp:
        (WebCore::FontFace::FontFace):

2021-06-04  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r278121): Fix build failure due to weak external symbol

        Occurs when building coverage+release builds:

            ERROR: symbol _DDHighlightCreateWithRectsInVisibleRectWithStyleScaleAndDirection

        The soft-linked symbol was originally added in r259276.

        * Configurations/WebCore.unexp:
        - Add _DDHighlightCreateWithRectsInVisibleRectWithStyleScaleAndDirection
          to the list of unexported symbols.
        - Also sort symbols in the group alphabetically.

2021-06-04  Michael Catanzaro  <mcatanzaro@gnome.org>

        Fix more GCC warnings
        https://bugs.webkit.org/show_bug.cgi?id=226193

        Reviewed by Adrian Perez de Castro.

        Fix -Wunused-parameter warnings. Also, fix a -Wredundant-move warning.

        * platform/animation/TimingFunction.cpp:
        (WebCore::TimingFunction::createFromCSSText):
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContextCairo::getCTM const):
        (WebCore::GraphicsContextCairo::roundToDevicePixels):
        * platform/graphics/x11/PlatformDisplayX11.cpp:
        (WebCore::PlatformDisplayX11::supportsGLX const):

2021-06-04  Chris Dumez  <cdumez@apple.com>

        Rename MainThreadGenericEventQueue to EventLoopEventQueue
        https://bugs.webkit.org/show_bug.cgi?id=226618

        Reviewed by Ryosuke Niwa.

        Rename MainThreadGenericEventQueue to EventLoopEventQueue, now that it is based on the HTML
        event loop (and not a global Timer).

        * Modules/mediasession/MediaSessionCoordinator.cpp:
        (WebCore::MediaSessionCoordinator::MediaSessionCoordinator):
        * Modules/mediasession/MediaSessionCoordinator.h:
        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::MediaSource):
        * Modules/mediasource/MediaSource.h:
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::SourceBuffer):
        * Modules/mediasource/SourceBuffer.h:
        * Modules/mediasource/SourceBufferList.cpp:
        (WebCore::SourceBufferList::SourceBufferList):
        * Modules/mediasource/SourceBufferList.h:
        * Modules/remoteplayback/RemotePlayback.cpp:
        (WebCore::RemotePlayback::RemotePlayback):
        * Modules/remoteplayback/RemotePlayback.h:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/EventLoopEventQueue.cpp: Renamed from Source/WebCore/dom/GenericEventQueue.cpp.
        (WebCore::EventLoopEventQueue::EventLoopEventQueue):
        (WebCore::EventLoopEventQueue::enqueueEvent):
        (WebCore::EventLoopEventQueue::dispatchOneEvent):
        (WebCore::EventLoopEventQueue::close):
        (WebCore::EventLoopEventQueue::cancelAllEvents):
        (WebCore::EventLoopEventQueue::hasPendingActivity const):
        (WebCore::EventLoopEventQueue::hasPendingEventsOfType const):
        (WebCore::EventLoopEventQueue::stop):
        (WebCore::EventLoopEventQueue::activeDOMObjectName const):
        (WebCore::EventLoopEventQueue::create):
        * dom/EventLoopEventQueue.h: Renamed from Source/WebCore/dom/GenericEventQueue.h.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        * html/HTMLMediaElement.h:
        * html/track/TrackListBase.cpp:
        (WebCore::TrackListBase::TrackListBase):
        * html/track/TrackListBase.h:

2021-06-04  Youenn Fablet  <youenn@apple.com>

        Reintroduce logging useful for debugging in AudioSampleDataSource
        https://bugs.webkit.org/show_bug.cgi?id=226578

        Reviewed by Eric Carlson.

        Removed logging was actually useful for debugging audio issues.
        Reintroduce it by restrict logging to ensure we do not introduce too much audio glitches by doing so:
        - If we pull samples and do not have enough data, enter more-data-needed mode, and log once that data is missing.
        - If we pull samples and do not have enough data and we are already in more-data-needed mode, do not log anything.
        - If we push samples and are in more-data-needed mode, reset mode to none and log this information.
        The mode check happens in two different threads so might be a bit racy but at worst, this reduces accuracy of the logging.

        No change of behavior.

        * platform/audio/cocoa/AudioSampleDataSource.h:
        * platform/audio/cocoa/AudioSampleDataSource.mm:
        (WebCore::AudioSampleDataSource::pushSamplesInternal):
        (WebCore::AudioSampleDataSource::pullSamplesInternal):

2021-05-27  Sergio Villar Senin  <svillar@igalia.com>

        [css-flexbox] Sanitize the aspect ratio handling code
        https://bugs.webkit.org/show_bug.cgi?id=226324

        Reviewed by Javier Fernandez.

        Sanitized the code that detects whether aspect ratio should be used to compute sizes. The
        useChildAspectRatio() method was removed as it was very misleading, the name was a bad choice
        and it was very confusing. A new method childHasComputableAspectRatio() was added. It verifies
        whether the item has an aspect ratio (of any type) and whether we could compute it.

        Also two calls to detect whether the cross size was definite (or considered definite) were
        unified in a single method.

        No new tests as there is no change in behaviour.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::childHasComputableAspectRatio const): New method which takes the
        checks from useChildAspectRatio.
        (WebCore::RenderFlexibleBox::childHasComputableAspectRatioAndCrossSizeIsConsideredDefinite):
        New method doing 3 different checks.
        (WebCore::RenderFlexibleBox::childCrossSizeShouldUseContainerCrossSize const): Removed the aspect
        ratio checks which make no sense there.
        (WebCore::RenderFlexibleBox::computeInnerFlexBaseSizeForChild): Use the new method.
        (WebCore::RenderFlexibleBox::adjustChildSizeForMinAndMax): Ditto.
        (WebCore::RenderFlexibleBox::useChildAspectRatio): Deleted.
        * rendering/RenderFlexibleBox.h:

2021-06-03  Jean-Yves Avenard  <jya@apple.com>

        fast/dom/Window/property-access-on-cached-window-after-frame-removed.html (layout-test) may crash
        https://bugs.webkit.org/show_bug.cgi?id=226612
        rdar://78846264

        Reviewed by Eric Carlson.

        It is possible under some circumstances for a MediaSession to be constructed
        when no page or frame exists (such as when we move in/out bfcache).
        The MediaSession constructor incorrectly only created the MediaSessionCoordinatorPrivate
        if a Page and Frame existed.
        To avoid any ambiguities on when MediaSession::m_coordinator could be set, we
        make this member a const Ref<>.
        Test is covered by fast/dom/Window/property-access-on-cached-window-after-frame-removed.html

        * Modules/mediasession/MediaSession.cpp:
        (WebCore::MediaSession::MediaSession): Create MediaSessionCoordinatorPrivate in initializer list.
        (WebCore::MediaSession::suspend): Remove unnecessary null check
        (WebCore::MediaSession::stop): Remove unnecessary null check
        * Modules/mediasession/MediaSession.h: Make m_coordinator a const Ref<>
        (WebCore::MediaSession::coordinator const):
        * Modules/mediasession/MediaSessionCoordinator.cpp:
        (WebCore::MediaSessionCoordinator::create): Remove MediaSessionCoordinatorPrivate argument to constructor.
        (WebCore::MediaSessionCoordinator::MediaSessionCoordinator):
        * Modules/mediasession/MediaSessionCoordinator.h:

2021-06-03  Alan Bujtas  <zalan@apple.com>

        Crack in hero text on https://www.apple.com/mac-mini/
        https://bugs.webkit.org/show_bug.cgi?id=226610
        <rdar://71246655>

        Reviewed by Simon Fraser.

        FillBox::Text's mask rect needs pixel snapping so that we can position/size it properly on non-1x screens.

        Test: fast/clip/hidpi-background-clip-with-text-fill-color.html

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintMaskForTextFillBox):
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * rendering/RenderBoxModelObject.h:

2021-06-03  Jean-Yves Avenard  <jya@apple.com>

        REGRESSION(r278336): fast/dom/Window/property-access-on-cached-window-after-frame-removed.html (layout-test) is a constant crash
        https://bugs.webkit.org/show_bug.cgi?id=226570
        rdar://78784709

        Reviewed by Eric Carlson.

        Now that the coordinator attribute is no longer optional following bug 226328, it can
        be iterated while in closed state. Check that the MediaSessionCoordinatorPrivate is set.
        Fix crash in existing test.
        Fly-by fixes: trailing whitespaces and make header declaration conditional.

        * Modules/mediasession/MediaSession.h:
        * Modules/mediasession/MediaSessionCoordinator.h:
        (WebCore::MediaSessionCoordinator::identifier const): Add nullptr check, return empty String if so.
        * Modules/mediasession/MediaSessionCoordinator.idl: Remove trailing whitespace

2021-06-03  Devin Rousso  <drousso@apple.com>

        [Payment Request] allow additional line items and/or an override total to be specified in `ApplePayModifier`
        https://bugs.webkit.org/show_bug.cgi?id=226597
        <rdar://problem/78835065>

        Reviewed by Wenson Hsieh.

        Instead of merging properties of the first applicable `PaymentDetailsModifier` (or more
        specifically the related `ApplePayModifier` with only the `total` line item, add `total`
        and `additionalLineItems` properties to `ApplePayModifier` that are `ApplePayLineItem`.

        * Modules/applepay/paymentrequest/ApplePayModifier.idl:
        * Modules/applepay/paymentrequest/ApplePayModifier.h:
        Drive-by: Rename `additionalShippingOptions` to `additionalShippingMethods` to emphasize
                  that the values are `ApplePayShippingMethod` instead of `PaymentShippingOption`.

        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp:
        (WebCore::ApplePayPaymentHandler::computeShippingMethods const):
        (WebCore::ApplePayPaymentHandler::computeTotalAndLineItems const):

2021-06-03  Chris Lord  <clord@igalia.com>

        [WPE] position:sticky content is not correctly offset on async scrolled overflow layers with an RTL vertical scrollbar
        https://bugs.webkit.org/show_bug.cgi?id=226327

        Reviewed by Darin Adler.

        Make sure to respect the origin of sticky positioning nodes'
        constraining rect.

        No new tests, covered by existing tests.

        * page/scrolling/cocoa/ScrollingTreeStickyNode.mm:
        (WebCore::ScrollingTreeStickyNode::computeLayerPosition const):
        * page/scrolling/nicosia/ScrollingTreeStickyNode.cpp:
        (WebCore::ScrollingTreeStickyNode::computeLayerPosition const):

2021-06-03  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (Safari 14): Menu items jump around on codelearn.cat
        https://bugs.webkit.org/show_bug.cgi?id=226608
        <rdar://78636003>

        Reviewed by Alan Bujtas.

        This site changes overflow style dynamically on a stacking-context layer which
        has an existing child compositing layer, and the layer has an offset from its
        renderer due to the box-shadow.

        When this happens, we need to ensure the child layers get a geometry update,
        because the newly created clipping layer changes the offset for the child layers.

        Test: compositing/overflow/overflow-change-reposition-descendants.html

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateAfterLayout):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::layerStyleChanged):

2021-06-03  Chris Dumez  <cdumez@apple.com>

        Drop generic GenericTaskQueue<T> and DeferrableTask<T> now that they are unused
        https://bugs.webkit.org/show_bug.cgi?id=226601

        Reviewed by Ryosuke Niwa.

        Drop generic GenericTaskQueue<T> and DeferrableTask<T> now that they are unused. Rename
        GenericTaskQueue<Timer> to MainThreadTaskQueue and DeferrableTask<Timer> to
        MainThreadDeferrableTask as they still have some usage.

        I used the "MainThread" naming for consistency with the legacy MainThreadEventQueue and
        because the implementation relies on a static Timer.

        * Modules/encryptedmedia/MediaKeySystemAccess.h:
        * Modules/mediacapabilities/MediaCapabilities.h:
        * dom/Document.h:
        * dom/ScriptExecutionContext.h:
        (WebCore::ScriptExecutionContext::enqueueTaskForDispatcher): Deleted.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        (WebCore::HTMLMediaElement::setVolume):
        (WebCore::HTMLMediaElement::cancelPendingTasks):
        (WebCore::HTMLMediaElement::closeTaskQueues):
        (WebCore::HTMLMediaElement::enqueueTaskForDispatcher): Deleted.
        * html/HTMLMediaElement.h:
        * platform/DeferrableTask.h:
        (WebCore::MainThreadDeferrableTask::MainThreadDeferrableTask):
        (WebCore::DeferrableTask::DeferrableTask): Deleted.
        (WebCore::DeferrableTask::scheduleTask): Deleted.
        * platform/GenericTaskQueue.cpp:
        (WebCore::MainThreadTaskDispatcher::MainThreadTaskDispatcher):
        (WebCore::MainThreadTaskDispatcher::postTask):
        (WebCore::MainThreadTaskDispatcher::sharedTimer):
        (WebCore::MainThreadTaskDispatcher::sharedTimerFired):
        (WebCore::MainThreadTaskDispatcher::pendingDispatchers):
        (WebCore::MainThreadTaskDispatcher::dispatchOneTask):
        (WebCore::TaskDispatcher<Timer>::TaskDispatcher): Deleted.
        (WebCore::TaskDispatcher<Timer>::postTask): Deleted.
        (WebCore::TaskDispatcher<Timer>::sharedTimer): Deleted.
        (WebCore::TaskDispatcher<Timer>::sharedTimerFired): Deleted.
        (WebCore::TaskDispatcher<Timer>::pendingDispatchers): Deleted.
        (WebCore::TaskDispatcher<Timer>::dispatchOneTask): Deleted.
        * platform/GenericTaskQueue.h:
        (WebCore::MainThreadTaskQueue::MainThreadTaskQueue):
        (WebCore::MainThreadTaskQueue::~MainThreadTaskQueue):
        (WebCore::TaskDispatcher::TaskDispatcher): Deleted.
        (WebCore::TaskDispatcher::postTask): Deleted.
        (WebCore::GenericTaskQueueBase::hasPendingTasks const): Deleted.
        (WebCore::GenericTaskQueueBase::isClosed const): Deleted.
        (WebCore::GenericTaskQueueBase::close): Deleted.
        (WebCore::GenericTaskQueueBase::cancelAllTasks): Deleted.
        (WebCore::GenericTaskQueueBase::incrementPendingTasks): Deleted.
        (WebCore::GenericTaskQueueBase::decrementPendingTasks): Deleted.
        (WebCore::GenericTaskQueue::GenericTaskQueue): Deleted.
        (WebCore::GenericTaskQueue::~GenericTaskQueue): Deleted.
        (WebCore::GenericTaskQueue::enqueueTask): Deleted.
        * platform/RemoteCommandListener.h:
        * platform/audio/PlatformMediaSessionManager.h:
        * platform/audio/cocoa/MediaSessionManagerCocoa.h:
        (WebCore::MediaSessionManagerCocoa::taskQueue):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h:
        * platform/graphics/cocoa/TextTrackRepresentationCocoa.h:
        * platform/graphics/gpu/GPUBuffer.h:
        * platform/graphics/gpu/GPUQueue.h:
        * platform/mediastream/ios/AVAudioSessionCaptureDeviceManager.h:
        * platform/mediastream/mac/CoreAudioCaptureDeviceManager.h:
        * platform/mock/MediaPlaybackTargetPickerMock.h:

2021-06-03  Jean-Yves Avenard  <jya@apple.com>

        Add MediaSessionCoordinator test to ensure that disconnection on the private side is properly handled.
        https://bugs.webkit.org/show_bug.cgi?id=226568
        rdar://problem/78801408

        Reviewed by Eric Carlson.

        Make MediaSessionCoordinatorClient::coordinatorStateChanged pure virtual.

        * Modules/mediasession/MediaSessionCoordinatorPrivate.h: Add coordinatorStateChanged method,
        will forward state to RemoteMediaSessionCoordinatorProxy::coordinatorStateChanged.

2021-06-03  Cameron McCormack  <heycam@apple.com>

        Prevent background-attachment:fixed from causing slow scrolling when in a position:fixed layer
        https://bugs.webkit.org/show_bug.cgi?id=226399

        Reviewed by Simon Fraser.

        Tests: scrollingcoordinator/mac/fixed-backgrounds/fixed-background-slow-scrolling-1.html
               scrollingcoordinator/mac/fixed-backgrounds/fixed-background-slow-scrolling-2-async.html
               scrollingcoordinator/mac/fixed-backgrounds/fixed-background-slow-scrolling-2-sync.html
               scrollingcoordinator/mac/fixed-backgrounds/fixed-background-slow-scrolling-3-async.html
               scrollingcoordinator/mac/fixed-backgrounds/fixed-background-slow-scrolling-3-sync.html
               scrollingcoordinator/mac/fixed-backgrounds/fixed-background-slow-scrolling-4.html
               scrollingcoordinator/mac/fixed-backgrounds/fixed-background-slow-scrolling-5-async.html
               scrollingcoordinator/mac/fixed-backgrounds/fixed-background-slow-scrolling-5-sync.html
               scrollingcoordinator/mac/fixed-backgrounds/fixed-background-slow-scrolling-6.html
               scrollingcoordinator/mac/fixed-backgrounds/fixed-background-slow-scrolling-7.html
               scrollingcoordinator/mac/fixed-backgrounds/fixed-background-slow-scrolling-8-async.html
               scrollingcoordinator/mac/fixed-backgrounds/fixed-background-slow-scrolling-8-sync.html
               scrollingcoordinator/mac/fixed-backgrounds/fixed-background-slow-scrolling-9-async.html
               scrollingcoordinator/mac/fixed-backgrounds/fixed-background-slow-scrolling-9-sync.html

        We move responsbility for managing the HasSlowRepaintObjects
        synchronous scrolling reason on the root scrolling node from
        ScrollingCoordinator to RenderLayerCompositor, which is where it's
        handled for all other scrolling nodes.

        If a slow repaint object (i.e. a background-attachment:fixed element) is
        present in a non-root async scrolling layer, then it continues to add
        HasSlowRepaintObjects to the scrolling node's synchronous scrolling
        reasons. But we now no longer add HasSlowRepaintObjects to the root
        scrolling node's synchronous scrolling reasons if its containing async
        scrolling layer "behaves as fixed", i.e. won't move while scrolling the
        viewport.

        * page/FrameView.cpp:
        (WebCore::FrameView::addSlowRepaintObject): No longer need to inform
        the ScrollingCoordinator since the RenderLayerCompositor now handles
        HasSlowRepaintObjects synchronous scroling reason updates for the root.
        (WebCore::FrameView::removeSlowRepaintObject): Ditto.
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::synchronousScrollingReasons const):
        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::updateSynchronousScrollingReasons):
        Preserve the current value of HasSlowRepaintObjects when updating
        synchronous scrolling reasons.
        (WebCore::ScrollingCoordinator::shouldUpdateScrollLayerPositionSynchronously const):
        (WebCore::ScrollingCoordinator::synchronousScrollingReasonsAsText const):
        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollingCoordinator::synchronousScrollingReasons const):
        (WebCore::ScrollingCoordinator::hasSynchronousScrollingReasons const):
        * page/scrolling/ThreadedScrollingTree.cpp:
        (WebCore::ThreadedScrollingTree::propagateSynchronousScrollingReasons):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateSynchronousScrollingNodes):
        Take responsibility for managing HasSlowRepaintObjects on the root
        scroll tree node. Only add HasSlowRepaintObjects on the root if not
        in a fixed position layer.

2021-06-03  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] Remove unused GraphicsContext::shouldIncludeChildWindows()
        https://bugs.webkit.org/show_bug.cgi?id=226567

        Reviewed by Don Olmstead.

        It was added by r40366 (Bug 23623) for Plugins. However, the
        plugin support was removed by r278265 (Bug 226410).

        * platform/graphics/GraphicsContext.h:
        (WebCore::GraphicsContext::shouldIncludeChildWindows const): Deleted.
        * platform/graphics/cairo/GraphicsContextPlatformPrivateCairo.h:
        * platform/graphics/cg/GraphicsContextPlatformPrivateCG.h:
        (WebCore::GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate):
        * platform/graphics/win/GraphicsContextPlatformPrivateDirect2D.h:
        * platform/graphics/win/GraphicsContextWin.cpp:
        (WebCore::GraphicsContext::setShouldIncludeChildWindows): Deleted.
        (WebCore::GraphicsContext::shouldIncludeChildWindows const): Deleted.

2021-06-03  Youenn Fablet  <youenn@apple.com>

        Do not recalibrate camera if the settings are the same
        https://bugs.webkit.org/show_bug.cgi?id=226585

        Reviewed by Eric Carlson.

        Make sure to not update the preset if the constraints are equal to the current settings.
        Manually tested.

        * platform/mediastream/RealtimeVideoCaptureSource.cpp:
        (WebCore::RealtimeVideoCaptureSource::clientUpdatedSizeAndFrameRate):

2021-06-03  Alan Bujtas  <zalan@apple.com>

        Incorrect text selection when crossing flex item boundary
        https://bugs.webkit.org/show_bug.cgi?id=226518
        <rdar://59487603>

        Reviewed by Simon Fraser.

        Let's use the more sophisticated "which child is closer to the hit point" logic in RenderBox for the flex (and grid) content.
        The rest of the RenderBlock::positionForPoint is meant to deal with BFC content where block level boxes are positioned in block direction, after each other.

        Test: editing/selection/selecting-content-by-overshooting-the-container.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::positionForPoint):

2021-06-03  Antti Koivisto  <antti@apple.com>

        Remove TrailingFloatsRootInlineBox
        https://bugs.webkit.org/show_bug.cgi?id=226579

        Reviewed by Sam Weinig.

        Replace it with a bit in LegacyRootInlineBox.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * editing/VisibleUnits.cpp:
        (WebCore::previousLinePosition):
        (WebCore::nextLinePosition):
        * rendering/LegacyInlineBox.cpp:
        (WebCore::LegacyInlineBox::logicalHeight const):
        * rendering/LegacyInlineFlowBox.h:
        (WebCore::LegacyInlineFlowBox::LegacyInlineFlowBox):
        * rendering/LegacyLineLayout.cpp:
        (WebCore::LegacyLineLayout::linkToEndLineIfNeeded):
        * rendering/LegacyRootInlineBox.h:
        (WebCore::LegacyRootInlineBox::isForTrailingFloats const):
        (WebCore::LegacyRootInlineBox::setIsForTrailingFloats):
        (WebCore::LegacyRootInlineBox::isTrailingFloatsRootInlineBox const): Deleted.
        * rendering/RenderLineBoxList.cpp:
        (WebCore::RenderLineBoxList::dirtyLinesFromChangedChild):
        * rendering/TrailingFloatsRootInlineBox.cpp: Removed.
        * rendering/TrailingFloatsRootInlineBox.h: Removed.

2021-06-03  Miguel Gomez  <magomez@igalia.com>

        [GStreamer] Remove dependency on glvideoflip and videoflip
        https://bugs.webkit.org/show_bug.cgi?id=225456

        Reviewed by Philippe Normand.

        Stop using videoflip and glvideoflip to rotate the video frames inside GStreamer. These perform a copy
        of the frame to perform the rotation that we can avoid if we rotate the frames ourselves when painting them.

        Covered by existent tests.

        * platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp:
        (webKitGLVideoSinkConstructed):
        (webKitGLVideoSinkGetProperty):
        (webkit_gl_video_sink_class_init):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin):
        (WebCore::MediaPlayerPrivateGStreamer::updateVideoSizeAndOrientationFromCaps):
        (WebCore::MediaPlayerPrivateGStreamer::paint):
        (WebCore::MediaPlayerPrivateGStreamer::createVideoSinkGL):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:

2021-06-03  Antti Koivisto  <antti@apple.com>

        Rename InlineFlowBox to LegacyInlineFlowBox
        https://bugs.webkit.org/show_bug.cgi?id=226569

        Reviewed by Alan Bujtas.

        More legacy line layout naming.

        * Headers.cmake:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * layout/Verification.cpp:
        (WebCore::Layout::collectFlowBoxSubtree):
        (WebCore::Layout::collectInlineBoxes):
        * layout/formattingContexts/inline/InlineFormattingQuirks.cpp:
        (WebCore::Layout::InlineFormattingQuirks::inlineLevelBoxAffectsLineBox const):
        * layout/integration/LayoutIntegrationInlineContentBuilder.cpp:
        (WebCore::LayoutIntegration::InlineContentBuilder::computeLineLevelVisualAdjustmentsForRuns const):
        (WebCore::LayoutIntegration::InlineContentBuilder::createDisplayLines const):
        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::EllipsisBox):
        * rendering/EllipsisBox.h:
        * rendering/InlineElementBox.cpp:
        * rendering/InlineElementBox.h:
        (WebCore::InlineElementBox::InlineElementBox):
        * rendering/LegacyInlineBox.cpp:
        (WebCore::LegacyInlineBox::dirtyLineBoxes):
        (WebCore::LegacyInlineBox::nextLeafOnLine const):
        (WebCore::LegacyInlineBox::previousLeafOnLine const):
        * rendering/LegacyInlineBox.h:
        (WebCore::LegacyInlineBox::parent const):
        (WebCore::LegacyInlineBox::setParent):
        (WebCore::LegacyInlineBox::LegacyInlineBox):
        * rendering/LegacyInlineFlowBox.cpp: Renamed from Source/WebCore/rendering/InlineFlowBox.cpp.
        (WebCore::LegacyInlineFlowBox::~LegacyInlineFlowBox):
        (WebCore::LegacyInlineFlowBox::setHasBadChildList):
        (WebCore::LegacyInlineFlowBox::getFlowSpacingLogicalWidth):
        (WebCore::setHasTextDescendantsOnAncestors):
        (WebCore::LegacyInlineFlowBox::addToLine):
        (WebCore::LegacyInlineFlowBox::removeChild):
        (WebCore::LegacyInlineFlowBox::deleteLine):
        (WebCore::LegacyInlineFlowBox::removeLineBoxFromRenderObject):
        (WebCore::LegacyInlineFlowBox::extractLine):
        (WebCore::LegacyInlineFlowBox::extractLineBoxFromRenderObject):
        (WebCore::LegacyInlineFlowBox::attachLine):
        (WebCore::LegacyInlineFlowBox::attachLineBoxToRenderObject):
        (WebCore::LegacyInlineFlowBox::adjustPosition):
        (WebCore::isLastChildForRenderer):
        (WebCore::isAncestorAndWithinBlock):
        (WebCore::LegacyInlineFlowBox::determineSpacingForFlowBoxes):
        (WebCore::LegacyInlineFlowBox::placeBoxesInInlineDirection):
        (WebCore::LegacyInlineFlowBox::placeBoxRangeInInlineDirection):
        (WebCore::LegacyInlineFlowBox::requiresIdeographicBaseline const):
        (WebCore::verticalAlignApplies):
        (WebCore::LegacyInlineFlowBox::adjustMaxAscentAndDescent):
        (WebCore::LegacyInlineFlowBox::computeLogicalBoxHeights):
        (WebCore::LegacyInlineFlowBox::placeBoxesInBlockDirection):
        (WebCore::LegacyInlineFlowBox::maxLogicalBottomForTextDecorationLine const):
        (WebCore::LegacyInlineFlowBox::minLogicalTopForTextDecorationLine const):
        (WebCore::LegacyInlineFlowBox::flipLinesInBlockDirection):
        (WebCore::LegacyInlineFlowBox::addBoxShadowVisualOverflow):
        (WebCore::LegacyInlineFlowBox::addBorderOutsetVisualOverflow):
        (WebCore::LegacyInlineFlowBox::addTextBoxVisualOverflow):
        (WebCore::LegacyInlineFlowBox::addOutlineVisualOverflow):
        (WebCore::LegacyInlineFlowBox::addReplacedChildOverflow):
        (WebCore::LegacyInlineFlowBox::computeOverflow):
        (WebCore::LegacyInlineFlowBox::setLayoutOverflow):
        (WebCore::LegacyInlineFlowBox::setVisualOverflow):
        (WebCore::LegacyInlineFlowBox::setOverflowFromLogicalRects):
        (WebCore::LegacyInlineFlowBox::nodeAtPoint):
        (WebCore::LegacyInlineFlowBox::paint):
        (WebCore::LegacyInlineFlowBox::paintFillLayers):
        (WebCore::LegacyInlineFlowBox::boxShadowCanBeAppliedToBackground const):
        (WebCore::LegacyInlineFlowBox::paintFillLayer):
        (WebCore::LegacyInlineFlowBox::paintBoxShadow):
        (WebCore::LegacyInlineFlowBox::constrainToLineTopAndBottomIfNeeded const):
        (WebCore::clipRectForNinePieceImageStrip):
        (WebCore::LegacyInlineFlowBox::paintBoxDecorations):
        (WebCore::LegacyInlineFlowBox::paintMask):
        (WebCore::LegacyInlineFlowBox::firstLeafDescendant const):
        (WebCore::LegacyInlineFlowBox::lastLeafDescendant const):
        (WebCore::LegacyInlineFlowBox::selectionState):
        (WebCore::LegacyInlineFlowBox::canAccommodateEllipsis const):
        (WebCore::LegacyInlineFlowBox::placeEllipsisBox):
        (WebCore::LegacyInlineFlowBox::clearTruncation):
        (WebCore::LegacyInlineFlowBox::computeOverAnnotationAdjustment const):
        (WebCore::LegacyInlineFlowBox::computeUnderAnnotationAdjustment const):
        (WebCore::LegacyInlineFlowBox::collectLeafBoxesInLogicalOrder const):
        (WebCore::LegacyInlineFlowBox::computeReplacedAndTextLineTopAndBottom const):
        (WebCore::LegacyInlineFlowBox::boxName const):
        (WebCore::LegacyInlineFlowBox::outputLineTreeAndMark const):
        (WebCore::LegacyInlineFlowBox::checkConsistency const):
        * rendering/LegacyInlineFlowBox.h: Renamed from Source/WebCore/rendering/InlineFlowBox.h.
        (WebCore::LegacyInlineFlowBox::LegacyInlineFlowBox):
        (WebCore::LegacyInlineFlowBox::renderer const):
        (WebCore::LegacyInlineFlowBox::lineStyle const):
        (WebCore::LegacyInlineFlowBox::prevLineBox const):
        (WebCore::LegacyInlineFlowBox::nextLineBox const):
        (WebCore::LegacyInlineFlowBox::setNextLineBox):
        (WebCore::LegacyInlineFlowBox::setPreviousLineBox):
        (WebCore::LegacyInlineFlowBox::firstChild const):
        (WebCore::LegacyInlineFlowBox::lastChild const):
        (WebCore::LegacyInlineFlowBox::marginBorderPaddingLogicalLeft const):
        (WebCore::LegacyInlineFlowBox::marginBorderPaddingLogicalRight const):
        (WebCore::LegacyInlineFlowBox::marginLogicalLeft const):
        (WebCore::LegacyInlineFlowBox::marginLogicalRight const):
        (WebCore::LegacyInlineFlowBox::borderLogicalLeft const):
        (WebCore::LegacyInlineFlowBox::borderLogicalRight const):
        (WebCore::LegacyInlineFlowBox::paddingLogicalLeft const):
        (WebCore::LegacyInlineFlowBox::paddingLogicalRight const):
        (WebCore::LegacyInlineFlowBox::includeLogicalLeftEdge const):
        (WebCore::LegacyInlineFlowBox::includeLogicalRightEdge const):
        (WebCore::LegacyInlineFlowBox::setEdges):
        (WebCore::LegacyInlineFlowBox::beginPlacingBoxRangesInInlineDirection):
        (WebCore::LegacyInlineFlowBox::endPlacingBoxRangesInInlineDirection):
        (WebCore::LegacyInlineFlowBox::hasTextChildren const):
        (WebCore::LegacyInlineFlowBox::hasTextDescendants const):
        (WebCore::LegacyInlineFlowBox::hasHardLinebreak const):
        (WebCore::LegacyInlineFlowBox::setHasTextChildren):
        (WebCore::LegacyInlineFlowBox::setHasTextDescendants):
        (WebCore::LegacyInlineFlowBox::layoutOverflowRect const):
        (WebCore::LegacyInlineFlowBox::logicalTopLayoutOverflow const):
        (WebCore::LegacyInlineFlowBox::logicalBottomLayoutOverflow const):
        (WebCore::LegacyInlineFlowBox::logicalLayoutOverflowRect const):
        (WebCore::LegacyInlineFlowBox::visualOverflowRect const):
        (WebCore::LegacyInlineFlowBox::logicalLeftVisualOverflow const):
        (WebCore::LegacyInlineFlowBox::logicalRightVisualOverflow const):
        (WebCore::LegacyInlineFlowBox::logicalTopVisualOverflow const):
        (WebCore::LegacyInlineFlowBox::logicalBottomVisualOverflow const):
        (WebCore::LegacyInlineFlowBox::logicalVisualOverflowRect const):
        (WebCore::LegacyInlineFlowBox::frameRectIncludingLineHeight const):
        (WebCore::LegacyInlineFlowBox::logicalFrameRectIncludingLineHeight const):
        (WebCore::LegacyInlineFlowBox::descendantsHaveSameLineHeightAndBaseline const):
        (WebCore::LegacyInlineFlowBox::clearDescendantsHaveSameLineHeightAndBaseline):
        (WebCore::LegacyInlineFlowBox::checkConsistency const):
        (WebCore::LegacyInlineFlowBox::setHasBadChildList):
        * rendering/LegacyLineLayout.cpp:
        (WebCore::parentIsConstructedOrHaveNext):
        (WebCore::LegacyLineLayout::createLineBoxes):
        (WebCore::LegacyLineLayout::constructLine):
        (WebCore::LegacyLineLayout::computeInlineDirectionPositionsForSegment):
        * rendering/LegacyLineLayout.h:
        * rendering/LegacyRootInlineBox.cpp:
        (WebCore::LegacyRootInlineBox::LegacyRootInlineBox):
        (WebCore::LegacyRootInlineBox::clearTruncation):
        (WebCore::LegacyRootInlineBox::lineCanAccommodateEllipsis):
        (WebCore::LegacyRootInlineBox::placeEllipsisBox):
        (WebCore::LegacyRootInlineBox::paint):
        (WebCore::LegacyRootInlineBox::nodeAtPoint):
        (WebCore::LegacyRootInlineBox::adjustPosition):
        (WebCore::LegacyRootInlineBox::includeFontForBox const):
        (WebCore::LegacyRootInlineBox::includeGlyphsForBox const):
        (WebCore::LegacyRootInlineBox::includeInitialLetterForBox const):
        * rendering/LegacyRootInlineBox.h:
        (WebCore::LegacyRootInlineBox::logicalTopVisualOverflow const):
        (WebCore::LegacyRootInlineBox::logicalBottomVisualOverflow const):
        (WebCore::LegacyRootInlineBox::logicalTopLayoutOverflow const):
        (WebCore::LegacyRootInlineBox::logicalBottomLayoutOverflow const):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::inlineBlockBaseline const):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::containingBlockLogicalWidthForPositioned const):
        (WebCore::RenderBox::containingBlockLogicalHeightForPositioned const):
        (WebCore::RenderBox::computePositionedLogicalWidthUsing const):
        (WebCore::RenderBox::computePositionedLogicalWidthReplaced const):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::getBackgroundRoundedRect const):
        (WebCore::RenderBoxModelObject::backgroundRoundedRectAdjustedForBleedAvoidance const):
        (WebCore::RenderBoxModelObject::paintMaskForTextFillBox):
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        (WebCore::RenderBoxModelObject::boxShadowShouldBeAppliedToBackground const):
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::boxShadowShouldBeAppliedToBackground const):
        * rendering/RenderImage.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::generateLineBoxRects const):
        (WebCore::RenderInline::generateCulledLineBoxRects const):
        (WebCore::RenderInline::linesBoundingBox const):
        (WebCore::RenderInline::linesVisualOverflowBoundingBox const):
        (WebCore::RenderInline::linesVisualOverflowBoundingBoxInFragment const):
        (WebCore::RenderInline::dirtyLineBoxes):
        (WebCore::RenderInline::createInlineFlowBox):
        (WebCore::RenderInline::createAndAppendInlineFlowBox):
        (WebCore::RenderInline::paintOutline):
        * rendering/RenderInline.h:
        (WebCore::RenderInline::firstLineBox const):
        (WebCore::RenderInline::lastLineBox const):
        * rendering/RenderLineBoxList.cpp:
        (WebCore::RenderLineBoxList::appendLineBox):
        (WebCore::RenderLineBoxList::deleteLineBoxTree):
        (WebCore::RenderLineBoxList::extractLineBox):
        (WebCore::RenderLineBoxList::attachLineBox):
        (WebCore::RenderLineBoxList::removeLineBox):
        (WebCore::RenderLineBoxList::deleteLineBoxes):
        (WebCore::RenderLineBoxList::dirtyLineBoxes):
        (WebCore::RenderLineBoxList::lineIntersectsDirtyRect const):
        (WebCore::RenderLineBoxList::paint const):
        (WebCore::RenderLineBoxList::hitTest const):
        (WebCore::RenderLineBoxList::checkConsistency const):
        * rendering/RenderLineBoxList.h:
        (WebCore::RenderLineBoxList::firstLineBox const):
        (WebCore::RenderLineBoxList::lastLineBox const):
        * rendering/RenderOverflow.h:
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::boxShadowShouldBeAppliedToBackground const):
        * rendering/RenderTableCell.h:
        * rendering/RenderVTTCue.cpp:
        (WebCore::RenderVTTCue::initializeLayoutParameters):
        (WebCore::RenderVTTCue::shouldSwitchDirection const):
        (WebCore::RenderVTTCue::repositionCueSnapToLinesSet):
        (WebCore::RenderVTTCue::repositionGenericCue):
        * rendering/RenderVTTCue.h:
        * rendering/svg/RenderSVGInline.cpp:
        (WebCore::RenderSVGInline::createInlineFlowBox):
        (WebCore::RenderSVGInline::absoluteQuads const):
        * rendering/svg/RenderSVGInline.h:
        * rendering/svg/SVGInlineFlowBox.h:
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::findRendererDefininingTextDecoration):
        * rendering/svg/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBox::layoutCharactersInTextBoxes):
        (WebCore::SVGRootInlineBox::layoutChildBoxes):
        * rendering/svg/SVGRootInlineBox.h:
        * rendering/svg/SVGTextQuery.cpp:
        (WebCore::flowBoxForRenderer):
        (WebCore::SVGTextQuery::collectTextBoxesInFlowBox):
        * rendering/svg/SVGTextQuery.h:

2021-06-03  Alan Bujtas  <zalan@apple.com>

        [LFC][TFC] Use the fixed table height value to resolve percent column height values
        https://bugs.webkit.org/show_bug.cgi?id=226566

        Reviewed by Antti Koivisto.

        Test: fast/layoutformattingcontext/table-with-percent-columns-simple.html

        * layout/formattingContexts/table/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::layoutInFlowContent):
        (WebCore::Layout::TableFormattingContext::setUsedGeometryForCells):
        (WebCore::Layout::TableFormattingContext::computeAndDistributeExtraSpace):
        * layout/formattingContexts/table/TableFormattingContext.h:
        * layout/formattingContexts/table/TableFormattingGeometry.cpp:
        (WebCore::Layout::TableFormattingGeometry::verticalSpaceForCellContent const):
        * layout/formattingContexts/table/TableFormattingGeometry.h:

2021-06-03  Julian Gonzalez  <julian_a_gonzalez@apple.com>

        Crash in HTMLConverter::_addLinkForElement()
        https://bugs.webkit.org/show_bug.cgi?id=226398

        Reviewed by Ryosuke Niwa.

        While traversing a node, exit an element with a startIndex
        that is always inside the bounds of the attribute string.

        Test: editing/pasteboard/select-all-link-cut.html

        * editing/cocoa/HTMLConverter.mm:
        (HTMLConverter::_traverseNode):

2021-06-02  Rob Buis  <rbuis@igalia.com>

        Make EndTransparancyLayer a potential no-op
        https://bugs.webkit.org/show_bug.cgi?id=226523

        Reviewed by Simon Fraser.

        Make EndTransparancyLayer a no-op if there is no
        current transparency layer in place.

        * platform/graphics/displaylists/DisplayListItems.cpp:
        (WebCore::DisplayList::EndTransparencyLayer::apply const):

2021-06-02  Rob Buis  <rbuis@igalia.com>

        Split FillInlinePath/StrokeInlinePath
        https://bugs.webkit.org/show_bug.cgi?id=225687

        Reviewed by Wenson Hsieh.

        Use specialized display list item types instead of
        a Variant for FillInlinePath/StrokeInlinePath.

        * platform/graphics/displaylists/DisplayList.cpp:
        (WebCore::DisplayList::DisplayList::append):
        * platform/graphics/displaylists/DisplayListItemBuffer.cpp:
        (WebCore::DisplayList::ItemHandle::apply):
        (WebCore::DisplayList::ItemHandle::destroy):
        (WebCore::DisplayList::ItemHandle::safeCopy const):
        * platform/graphics/displaylists/DisplayListItemType.cpp:
        (WebCore::DisplayList::sizeOfItemInBytes):
        (WebCore::DisplayList::isDrawingItem):
        (WebCore::DisplayList::isInlineItem):
        * platform/graphics/displaylists/DisplayListItemType.h:
        * platform/graphics/displaylists/DisplayListItems.cpp:
        (WebCore::DisplayList::FillLine::apply const):
        (WebCore::DisplayList::operator<<):
        (WebCore::DisplayList::FillArc::apply const):
        (WebCore::DisplayList::FillQuadCurve::apply const):
        (WebCore::DisplayList::FillBezierCurve::apply const):
        (WebCore::DisplayList::StrokeArc::localBounds const):
        (WebCore::DisplayList::StrokeArc::apply const):
        (WebCore::DisplayList::StrokeQuadCurve::localBounds const):
        (WebCore::DisplayList::StrokeQuadCurve::apply const):
        (WebCore::DisplayList::StrokeBezierCurve::localBounds const):
        (WebCore::DisplayList::StrokeBezierCurve::apply const):
        (WebCore::DisplayList::FillInlinePath::apply const): Deleted.
        (WebCore::DisplayList::StrokeInlinePath::localBounds const): Deleted.
        (WebCore::DisplayList::StrokeInlinePath::apply const): Deleted.
        * platform/graphics/displaylists/DisplayListItems.h:
        (WebCore::DisplayList::FillLine::FillLine):
        (WebCore::DisplayList::FillLine::path const):
        (WebCore::DisplayList::FillLine::globalBounds const):
        (WebCore::DisplayList::FillLine::localBounds const):
        (WebCore::DisplayList::FillArc::FillArc):
        (WebCore::DisplayList::FillArc::path const):
        (WebCore::DisplayList::FillArc::globalBounds const):
        (WebCore::DisplayList::FillArc::localBounds const):
        (WebCore::DisplayList::FillQuadCurve::FillQuadCurve):
        (WebCore::DisplayList::FillQuadCurve::path const):
        (WebCore::DisplayList::FillQuadCurve::globalBounds const):
        (WebCore::DisplayList::FillQuadCurve::localBounds const):
        (WebCore::DisplayList::FillBezierCurve::FillBezierCurve):
        (WebCore::DisplayList::FillBezierCurve::path const):
        (WebCore::DisplayList::StrokeLine::StrokeLine):
        (WebCore::DisplayList::StrokeArc::StrokeArc):
        (WebCore::DisplayList::StrokeArc::path const):
        (WebCore::DisplayList::StrokeArc::globalBounds const):
        (WebCore::DisplayList::StrokeQuadCurve::StrokeQuadCurve):
        (WebCore::DisplayList::StrokeQuadCurve::path const):
        (WebCore::DisplayList::StrokeQuadCurve::globalBounds const):
        (WebCore::DisplayList::StrokeBezierCurve::StrokeBezierCurve):
        (WebCore::DisplayList::StrokeBezierCurve::path const):
        (WebCore::DisplayList::InlinePathDataStorage::InlinePathDataStorage): Deleted.
        (WebCore::DisplayList::InlinePathDataStorage::isValid const): Deleted.
        (WebCore::DisplayList::InlinePathDataStorage::path const): Deleted.
        (WebCore::DisplayList::FillInlinePath::FillInlinePath): Deleted.
        (WebCore::DisplayList::FillInlinePath::globalBounds const): Deleted.
        (WebCore::DisplayList::FillInlinePath::localBounds const): Deleted.
        (WebCore::DisplayList::StrokeInlinePath::StrokeInlinePath): Deleted.
        (WebCore::DisplayList::StrokeInlinePath::globalBounds const): Deleted.
        * platform/graphics/displaylists/DisplayListRecorder.cpp:
        (WebCore::DisplayList::Recorder::fillPath):
        (WebCore::DisplayList::Recorder::strokePath):

2021-06-02  Sihui Liu  <sihui_liu@apple.com>

        Introduce a shared IDB serialization thread
        https://bugs.webkit.org/show_bug.cgi?id=226228
        <rdar://problem/78725516>

        Reviewed by Chris Dumez.

        Currently each WebIDBServer has its own thread, and does serialization/deserialization on that thread. To
        prepare for making WebIDBServer use WorkQueue, like the other storage manager classes, let's create a shared
        thread for handling all serialization/deserialization operations, which cannot be done on WorkQueue as VM needs 
        to access thread-specific data. Now IDB tasks will call callOnIDBSerializationThreadAndWait to perform 
        serialization/deserialization operations synchronously.

        * Modules/indexeddb/server/IDBBackingStore.h:
        * Modules/indexeddb/server/IDBSerializationContext.cpp: Removed. Moved to IDBBindingUtilities.cpp as 
        IDBSerializationContext is only used by IDBSerialization thread now.
        * Modules/indexeddb/server/IDBSerializationContext.h: Removed.
        * Modules/indexeddb/server/MemoryIDBBackingStore.cpp:
        (WebCore::IDBServer::MemoryIDBBackingStore::MemoryIDBBackingStore):
        (WebCore::IDBServer::MemoryIDBBackingStore::serializationContext): Deleted.
        * Modules/indexeddb/server/MemoryIDBBackingStore.h:
        * Modules/indexeddb/server/MemoryObjectStore.cpp:
        (WebCore::IDBServer::MemoryObjectStore::MemoryObjectStore):
        (WebCore::IDBServer::MemoryObjectStore::addRecord):
        (WebCore::IDBServer::MemoryObjectStore::populateIndexWithExistingRecords):
        * Modules/indexeddb/server/MemoryObjectStore.h:
        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
        (WebCore::IDBServer::SQLiteIDBBackingStore::SQLiteIDBBackingStore):
        (WebCore::IDBServer::SQLiteIDBBackingStore::updateOneIndexForAddRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::serializationContext): Deleted.
        * Modules/indexeddb/server/SQLiteIDBBackingStore.h:
        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::putOrAdd):
        * Sources.txt:
        * bindings/js/IDBBindingUtilities.cpp:
        (WebCore::IDBSerializationContext::IDBSerializationContext):
        (WebCore::IDBSerializationContext::~IDBSerializationContext):
        (WebCore::IDBSerializationContext::globalObject):
        (WebCore::IDBSerializationContext::initializeVM):
        (WebCore::callOnIDBSerializationThreadAndWait): Create a IDBSerialization thread if not exists, and dispatch a 
        synchronous task to it.
        * bindings/js/IDBBindingUtilities.h:

2021-06-02  Chris Dumez  <cdumez@apple.com>

        Port media code to the HTML event loop
        https://bugs.webkit.org/show_bug.cgi?id=226543

        Reviewed by Ryosuke Niwa.

        Port media code to the HTML event loop so that event processing order is consistent
        with non-media related events. To avoid having a very large patch, I made the following
        changes:
        - Update MainThreadGenericEventQueue to be based on the HTML event loop instead of a
          global Timer.
        - Introduce a EventLoopDeferrableTask which has the same API as DeferrableTask<Timer> but
          uses the HTML event loop instead of a global Timer. Port media code to use
          EventLoopDeferrableTask instead of DeferrableTask.
        - Introduce an EventLoopTaskQueue which has the same API as GenericTaskQueue<Timer>
          but uses the HTML event loop instead of a global Timer. Port media code to use
          EventLoopTaskQueue instead of GenericTaskQueue<Timer>.

        This effectively ports our entire media code to the HTML event loop. It allows new
        media code to use the HTML event loop *directly* without fear of ordering issues. It also
        allows us to refactor existing media code to use the HTML event loop *directly* when possible,
        in an incremental fashion, without causing ordering issues.

        * Headers.cmake:
        * Modules/remoteplayback/RemotePlayback.cpp:
        (WebCore::RemotePlayback::RemotePlayback):
        * Modules/remoteplayback/RemotePlayback.h:
        * animation/DocumentTimelinesController.cpp:
        (WebCore::DocumentTimelinesController::DocumentTimelinesController):
        * animation/DocumentTimelinesController.h:
        * dom/FullscreenManager.cpp:
        * dom/FullscreenManager.h:
        * dom/GenericEventQueue.cpp:
        (WebCore::MainThreadGenericEventQueue::MainThreadGenericEventQueue):
        (WebCore::MainThreadGenericEventQueue::enqueueEvent):
        (WebCore::MainThreadGenericEventQueue::close):
        (WebCore::MainThreadGenericEventQueue::cancelAllEvents):
        (WebCore::MainThreadGenericEventQueue::hasPendingEventsOfType const):
        * dom/GenericEventQueue.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        * html/HTMLMediaElement.h:
        * html/shadow/MediaControlTextTrackContainerElement.cpp:
        (WebCore::MediaControlTextTrackContainerElement::MediaControlTextTrackContainerElement):
        * html/shadow/MediaControlTextTrackContainerElement.h:
        * platform/DeferrableTask.h:
        (WebCore::DeferrableTaskBase::close):
        (WebCore::DeferrableTaskBase::cancelTask):
        (WebCore::DeferrableTaskBase::hasPendingTask const):
        (WebCore::DeferrableTaskBase::isClosed const):
        (WebCore::DeferrableTaskBase::setHasPendingTask):
        * platform/GenericTaskQueue.h:
        (WebCore::GenericTaskQueueBase::hasPendingTasks const):
        (WebCore::GenericTaskQueueBase::isClosed const):
        (WebCore::GenericTaskQueueBase::close):
        (WebCore::GenericTaskQueueBase::cancelAllTasks):
        (WebCore::GenericTaskQueueBase::incrementPendingTasks):
        (WebCore::GenericTaskQueueBase::decremementPendingTasks):

2021-06-02  Alex Christensen  <achristensen@webkit.org>

        Fix WPT test resource-timing/cross-origin-redirects.html
        https://bugs.webkit.org/show_bug.cgi?id=190523
        <rdar://45227788>

        Reviewed by Brady Eidson.

        Test: imported/w3c/web-platform-tests/resource-timing/cross-origin-redirects.html

        This test took more to fix than I thought it would.  We used to collect our timing data
        from various sources into various structures, mostly based on Google's work from 2010 with
        a few things tacked on to it.  The timing specifications have changed considerably in the
        last 11 years, and so should the shape of the structures we put the data into.

        We used to have a LoadTiming structure in various places that claimed to contain the redirect times,
        but markRedirectStart and markRedirectEnd were never called.  Instead we tried to collect this data
        from the SubResourceLoader and DocumentLoader reporting redirects in the web process.  This wasn't great.
        Redirect timing is best collected in the network process by the framework doing the redirecting,
        and now we have the NSURLSessionTaskMetrics API to get the data we need.

        I've made NetworkLoadMetrics the structure that contains all the network load metrics from the network process.
        DocumentEventTiming is owned in the web process by the Document, and it contains the load event timing data.
        ResourceLoadTiming is owned by the ResourceLoader, and it contains the fetch start and end times including the
        parts of the fetch algorithm that happen in the web process.
        DocumentLoadTiming inherits from it and is owned by the DocumentLoader, which reflects the fact that
        PerformanceNavigationTiming inherits from PerformanceResourceTiming in the specs.
        With these structures in place, we now have the infrastructure to collect timing data and expose it correctly.

        Another thing that has changed is that these structures consistently store the timing data in the MonotonicTime type,
        which is the number of seconds since the machine restarted.  NetworkLoadMetrics used to confusingly store fetch
        start time and then other network times as deltas from it, and we would pretend that fetch start time was the same
        as the fetch start time in the web process and calculate everything from the deltas.  This is an unfortunate
        consequence of my younger self not realizing that the double values from NSURLConnection._timingData are values to
        be put into [NSDate initWithTimeIntervalSinceReferenceDate] then pulled out with timeIntervalSince1970 to get
        WallTime.  I was confused because they weren't WallTime or MonotonicTime, so I only dealt with them as deltas
        from each other.  Consistently using MonotonicTime makes all this code much more straightforward.

        I also use std::numeric_limits<uint64_t>::max() instead of std::numeric_limits<uint32_t>::max() as a sentinel value
        for requestHeaderBytesSent and responseHeaderBytesReceived to make everything more sane.  I'm not too worried about
        the metrics of downloads of exactly 4GB, but they should also be fixed.

        A consequence of collecting the redirect times in the network process is that we have to move the
        SecurityOrigin::canRequest checks to see if the redirects are same-origin to ResourceHandle and NetworkDataTask.

        * Headers.cmake:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::setReadyState):
        (WebCore::Document::finishedParsing):
        (WebCore::Document::monotonicTimestamp const):
        * dom/Document.h:
        (WebCore::Document::eventTiming const):
        (WebCore::Document::timing const): Deleted.
        * dom/DocumentEventTiming.h: Copied from Source/WebCore/dom/DocumentTiming.h.
        * inspector/agents/InspectorNetworkAgent.cpp:
        (WebCore::InspectorNetworkAgent::buildObjectForTiming):
        (WebCore::InspectorNetworkAgent::buildObjectForMetrics):
        (WebCore::InspectorNetworkAgent::buildObjectForResourceResponse):
        (WebCore::InspectorNetworkAgent::didFinishLoading):
        * inspector/agents/InspectorNetworkAgent.h:
        * loader/DocumentLoadTiming.h: Renamed from Source/WebCore/loader/LoadTiming.h.
        (WebCore::DocumentLoadTiming::timeOrigin const):
        (WebCore::DocumentLoadTiming::markUnloadEventStart):
        (WebCore::DocumentLoadTiming::markUnloadEventEnd):
        (WebCore::DocumentLoadTiming::markLoadEventStart):
        (WebCore::DocumentLoadTiming::markLoadEventEnd):
        (WebCore::DocumentLoadTiming::setHasSameOriginAsPreviousDocument):
        (WebCore::DocumentLoadTiming::unloadEventStart const):
        (WebCore::DocumentLoadTiming::unloadEventEnd const):
        (WebCore::DocumentLoadTiming::loadEventStart const):
        (WebCore::DocumentLoadTiming::loadEventEnd const):
        (WebCore::DocumentLoadTiming::hasSameOriginAsPreviousDocument const):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::finishedLoading):
        (WebCore::DocumentLoader::willSendRequest):
        (WebCore::DocumentLoader::dataReceived):
        (WebCore::DocumentLoader::startLoadingMainResource):
        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::timing const):
        (WebCore::DocumentLoader::timing):
        (WebCore::DocumentLoader::resetTiming):
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::loadRequest):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::dispatchUnloadEvents):
        * loader/LoadTiming.cpp: Removed.
        * loader/ResourceLoadTiming.h: Renamed from Source/WebCore/dom/DocumentTiming.h.
        (WebCore::ResourceLoadTiming::markStartTime):
        (WebCore::ResourceLoadTiming::markEndTime):
        (WebCore::ResourceLoadTiming::startTime const):
        (WebCore::ResourceLoadTiming::endTime const):
        (WebCore::ResourceLoadTiming::isolatedCopy const):
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::init):
        * loader/ResourceLoader.h:
        (WebCore::ResourceLoader::loadTiming):
        * loader/ResourceTiming.cpp:
        (WebCore::ResourceTiming::fromMemoryCache):
        (WebCore::ResourceTiming::fromLoad):
        (WebCore::ResourceTiming::fromSynchronousLoad):
        (WebCore::ResourceTiming::ResourceTiming):
        (WebCore::ResourceTiming::isolatedCopy const):
        (WebCore::ResourceTiming::fromCache): Deleted.
        * loader/ResourceTiming.h:
        (WebCore::ResourceTiming::resourceLoadTiming const):
        (WebCore::ResourceTiming::ResourceTiming):
        (WebCore::ResourceTiming::loadTiming const): Deleted.
        * loader/ResourceTimingInformation.cpp:
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::willSendRequestInternal):
        (WebCore::SubresourceLoader::didFinishLoading):
        * loader/cache/CachedResource.h:
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestResource):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::performance const):
        * page/Performance.cpp:
        (WebCore::Performance::addNavigationTiming):
        * page/Performance.h:
        * page/PerformanceNavigation.cpp:
        (WebCore::PerformanceNavigation::redirectCount const):
        * page/PerformanceNavigationTiming.cpp:
        (WebCore::PerformanceNavigationTiming::PerformanceNavigationTiming):
        (WebCore::PerformanceNavigationTiming::millisecondsSinceOrigin const):
        (WebCore::PerformanceNavigationTiming::sameOriginCheckFails const):
        (WebCore::PerformanceNavigationTiming::unloadEventStart const):
        (WebCore::PerformanceNavigationTiming::unloadEventEnd const):
        (WebCore::PerformanceNavigationTiming::domInteractive const):
        (WebCore::PerformanceNavigationTiming::domContentLoadedEventStart const):
        (WebCore::PerformanceNavigationTiming::domContentLoadedEventEnd const):
        (WebCore::PerformanceNavigationTiming::domComplete const):
        (WebCore::PerformanceNavigationTiming::loadEventStart const):
        (WebCore::PerformanceNavigationTiming::loadEventEnd const):
        (WebCore::PerformanceNavigationTiming::redirectCount const):
        * page/PerformanceNavigationTiming.h:
        * page/PerformanceResourceTiming.cpp:
        (WebCore::networkLoadTimeToDOMHighResTimeStamp):
        (WebCore::fetchStart):
        (WebCore::entryStartTime):
        (WebCore::entryEndTime):
        (WebCore::PerformanceResourceTiming::redirectStart const):
        (WebCore::PerformanceResourceTiming::redirectEnd const):
        (WebCore::PerformanceResourceTiming::fetchStart const):
        (WebCore::PerformanceResourceTiming::domainLookupStart const):
        (WebCore::PerformanceResourceTiming::domainLookupEnd const):
        (WebCore::PerformanceResourceTiming::connectStart const):
        (WebCore::PerformanceResourceTiming::connectEnd const):
        (WebCore::PerformanceResourceTiming::secureConnectionStart const):
        (WebCore::PerformanceResourceTiming::requestStart const):
        (WebCore::PerformanceResourceTiming::responseStart const):
        (WebCore::PerformanceResourceTiming::responseEnd const):
        (WebCore::monotonicTimeToDOMHighResTimeStamp): Deleted.
        (WebCore::PerformanceResourceTiming::networkLoadTimeToDOMHighResTimeStamp const): Deleted.
        * page/PerformanceResourceTiming.h:
        * page/PerformanceTiming.cpp:
        (WebCore::PerformanceTiming::navigationStart const):
        (WebCore::PerformanceTiming::unloadEventStart const):
        (WebCore::PerformanceTiming::unloadEventEnd const):
        (WebCore::PerformanceTiming::redirectStart const):
        (WebCore::PerformanceTiming::redirectEnd const):
        (WebCore::PerformanceTiming::fetchStart const):
        (WebCore::PerformanceTiming::domainLookupStart const):
        (WebCore::PerformanceTiming::domainLookupEnd const):
        (WebCore::PerformanceTiming::connectStart const):
        (WebCore::PerformanceTiming::connectEnd const):
        (WebCore::PerformanceTiming::secureConnectionStart const):
        (WebCore::PerformanceTiming::requestStart const):
        (WebCore::PerformanceTiming::responseStart const):
        (WebCore::PerformanceTiming::responseEnd const):
        (WebCore::PerformanceTiming::domLoading const):
        (WebCore::PerformanceTiming::domInteractive const):
        (WebCore::PerformanceTiming::domContentLoadedEventStart const):
        (WebCore::PerformanceTiming::domContentLoadedEventEnd const):
        (WebCore::PerformanceTiming::domComplete const):
        (WebCore::PerformanceTiming::loadEventStart const):
        (WebCore::PerformanceTiming::loadEventEnd const):
        (WebCore::PerformanceTiming::documentLoader const):
        (WebCore::PerformanceTiming::documentEventTiming const):
        (WebCore::PerformanceTiming::documentLoadTiming const):
        (WebCore::PerformanceTiming::networkLoadMetrics const):
        (WebCore::PerformanceTiming::monotonicTimeToIntegerMilliseconds const):
        (WebCore::PerformanceTiming::documentTiming const): Deleted.
        (WebCore::PerformanceTiming::loadTiming const): Deleted.
        (WebCore::PerformanceTiming::resourceLoadTimeRelativeToFetchStart const): Deleted.
        * page/PerformanceTiming.h:
        * platform/network/NetworkLoadMetrics.h:
        (WebCore::NetworkLoadMetrics::isolatedCopy const):
        (WebCore::NetworkLoadMetrics::operator== const):
        (WebCore::NetworkLoadMetrics::encode const):
        (WebCore::NetworkLoadMetrics::decode):
        * platform/network/ResourceHandle.cpp:
        (WebCore::ResourceHandle::hasCrossOriginRedirect const):
        (WebCore::ResourceHandle::setHasCrossOriginRedirect):
        (WebCore::ResourceHandle::incrementRedirectCount):
        (WebCore::ResourceHandle::redirectCount const):
        (WebCore::ResourceHandle::startTimeBeforeRedirects const):
        (WebCore::ResourceHandle::networkLoadMetrics):
        (WebCore::ResourceHandle::setNetworkLoadMetrics):
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleInternal.h:
        * platform/network/cocoa/NetworkLoadMetrics.mm:
        (WebCore::dateToMonotonicTime):
        (WebCore::packageTimingData):
        (WebCore::copyTimingData):
        * platform/network/cocoa/WebCoreNSURLSession.mm:
        (networkLoadMetricsDate):
        (-[WebCoreNSURLSessionTaskTransactionMetrics fetchStartDate]):
        (-[WebCoreNSURLSessionTaskTransactionMetrics domainLookupStartDate]):
        (-[WebCoreNSURLSessionTaskTransactionMetrics domainLookupEndDate]):
        (-[WebCoreNSURLSessionTaskTransactionMetrics connectStartDate]):
        (-[WebCoreNSURLSessionTaskTransactionMetrics secureConnectionStartDate]):
        (-[WebCoreNSURLSessionTaskTransactionMetrics connectEndDate]):
        (-[WebCoreNSURLSessionTaskTransactionMetrics requestStartDate]):
        (-[WebCoreNSURLSessionTaskTransactionMetrics responseStartDate]):
        (-[WebCoreNSURLSessionTaskTransactionMetrics responseEndDate]):
        * platform/network/curl/CurlContext.cpp:
        (WebCore::CurlHandle::getNetworkLoadMetrics):
        * platform/network/curl/CurlContext.h:
        * platform/network/curl/CurlRequest.cpp:
        (WebCore::CurlRequest::didCompleteTransfer):
        (WebCore::CurlRequest::networkLoadMetrics):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::start):
        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.h:
        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm:
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:willSendRequest:redirectResponse:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:didReceiveResponse:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connectionDidFinishLoading:]):

2021-06-02  Alan Bujtas  <zalan@apple.com>

        Remove redundant isChildHitTestCandidate in RenderBlock::positionForPoint
        https://bugs.webkit.org/show_bug.cgi?id=226554
        <rdar://problem/78782485>

        Reviewed by Simon Fraser.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::positionForPoint):

2021-06-02  Alan Bujtas  <zalan@apple.com>

        Incorrect selection when tall float is present
        https://bugs.webkit.org/show_bug.cgi?id=226552
        <rdar://problem/78781056>

        Reviewed by Simon Fraser.

        While floats may end up at the bottom of their containers, they do not necessarily stretch the container by their full height.
        e.g. <div><div style="float: left; height: 10px; width: 10px;"></div>some<br>text<br>here</div>
        The [some text here] content wraps around the float and stretches the containing block <div>.

        Test: editing/selection/select-out-of-floated-non-editable-13.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::positionForPoint):

2021-06-02  Antoine Quint  <graouts@webkit.org>

        Hit-testing does not account for clip-path set on parent of <iframe>
        https://bugs.webkit.org/show_bug.cgi?id=226499
        <rdar://problem/77317612>

        Reviewed by Simon Fraser.

        Before considering hit-testing children layers, we should ensure that the current RenderLayer doesn't have styles
        set on its renderer that would clip the layer in such a way that the hit test location wouldn't yield a positive
        result.

        Tests: css3/masking/clip-path-hit-test-on-absolute-position-iframe-parent.html
               css3/masking/clip-path-hit-test-on-iframe-parent.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::hitTestLayer):

2021-06-02  Antoine Quint  <graouts@webkit.org>

        REGRESSION (r275227): Check boxes on V-Safe site flicker when selected
        https://bugs.webkit.org/show_bug.cgi?id=226549
        <rdar://problem/77722651>

        Reviewed by Simon Fraser.

        When checking equality for StyleCachedImage, check whether the backing CSSImageValue is equal even if the pointer is different.

        Test: webanimations/background-image-css-variable-no-transition.html

        * rendering/style/StyleCachedImage.cpp:
        (WebCore::StyleCachedImage::operator== const):

2021-06-02  Jer Noble  <jer.noble@apple.com>

        REGRESSION(r276993): 5 TestWebKitAPI.AudioRoutingArbitration (api-tests) are constant failures
        https://bugs.webkit.org/show_bug.cgi?id=226104
        <rdar://77998049>

        Reviewed by Eric Carlson.

        Add a mechanism for a client to wait until an AudioSession is created or changed before taking
        an action.

        * platform/audio/AudioSession.cpp:
        (WebCore::audioSessionChangedObservers):
        (WebCore::AudioSession::sharedSession):
        (WebCore::AudioSession::setSharedSession):
        (WebCore::AudioSession::addAudioSessionChangedObserver):
        * platform/audio/AudioSession.h:

2021-06-02  Chris Dumez  <cdumez@apple.com>

        Drop legacy ActiveDOMObject::setPendingActivity() / unsetPendingActivity()
        https://bugs.webkit.org/show_bug.cgi?id=226544

        Reviewed by Darin Adler.

        Drop legacy ActiveDOMObject::setPendingActivity() / unsetPendingActivity(). They are too leak-prone. The modern
        way to do this is to either override ActiveDOMObject::virtualHasPendingActivity() or use
        ActiveDOMObject::makePendingActivity().

        * Modules/applepay/ApplePaySession.cpp:
        (WebCore::ApplePaySession::begin):
        (WebCore::ApplePaySession::abort):
        (WebCore::ApplePaySession::completePayment):
        (WebCore::ApplePaySession::didCancelPaymentSession):
        (WebCore::ApplePaySession::stop):
        (WebCore::ApplePaySession::suspend):
        (WebCore::ApplePaySession::virtualHasPendingActivity const):
        (WebCore::ApplePaySession::didReachFinalState): Deleted.
        * Modules/applepay/ApplePaySession.h:
        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::addedToRegistry):
        (WebCore::MediaSource::removedFromRegistry):
        (WebCore::MediaSource::virtualHasPendingActivity const):
        * Modules/mediasource/MediaSource.h:
        * Modules/mediastream/RTCDataChannel.cpp:
        (WebCore::RTCDataChannel::create):
        (WebCore::RTCDataChannel::close):
        (WebCore::RTCDataChannel::virtualHasPendingActivity const):
        * Modules/mediastream/RTCDataChannel.h:
        * dom/ActiveDOMObject.h:
        * page/EventSource.cpp:
        (WebCore::EventSource::create):
        (WebCore::EventSource::networkRequestEnded):
        (WebCore::EventSource::close):
        (WebCore::EventSource::abortConnectionAttempt):
        (WebCore::EventSource::virtualHasPendingActivity const):
        * page/EventSource.h:
        * workers/Worker.cpp:
        (WebCore::Worker::create):
        (WebCore::Worker::virtualHasPendingActivity const):
        (WebCore::Worker::notifyFinished):

2021-06-02  Sam Weinig  <weinig@apple.com>

        Add support for "relative color syntax" for color()
        https://bugs.webkit.org/show_bug.cgi?id=226513

        Reviewed by Darin Adler.

        CSS Color 5 has recently been update to support relative color syntax for
        the color() function in addition to the existing rgb(), hsl(), hwb(), lab()
        and lch().

        Took the opertunity to refactor other relative color syntax parsing to share
        more code between relative and non-relative parsers using a shared function
        with lambdas to differentiate the component consumers. This was done for all
        the color types except rgb() and hsl(), which have notable differences in 
        parsing between the relative and non-relative version.

        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::parseNonRelativeRGBParameters):
        (WebCore::CSSPropertyParserHelpers::parseRGBParameters):
        (WebCore::CSSPropertyParserHelpers::colorByNormalizingHSLComponents):
        (WebCore::CSSPropertyParserHelpers::parseRelativeHSLParameters):
        (WebCore::CSSPropertyParserHelpers::parseNonRelativeHSLParameters):
        (WebCore::CSSPropertyParserHelpers::parseHSLParameters):
        (WebCore::CSSPropertyParserHelpers::parseHWBParameters):
        (WebCore::CSSPropertyParserHelpers::parseRelativeHWBParameters):
        (WebCore::CSSPropertyParserHelpers::parseNonRelativeHWBParameters):
        (WebCore::CSSPropertyParserHelpers::parseLabParameters):
        (WebCore::CSSPropertyParserHelpers::parseRelativeLabParameters):
        (WebCore::CSSPropertyParserHelpers::parseNonRelativeLabParameters):
        (WebCore::CSSPropertyParserHelpers::parseLCHParameters):
        (WebCore::CSSPropertyParserHelpers::parseRelativeLCHParameters):
        (WebCore::CSSPropertyParserHelpers::parseNonRelativeLCHParameters):
        (WebCore::CSSPropertyParserHelpers::parseColorFunctionForRGBTypes):
        (WebCore::CSSPropertyParserHelpers::parseRelativeColorFunctionForRGBTypes):
        (WebCore::CSSPropertyParserHelpers::parseColorFunctionForXYZParameters):
        (WebCore::CSSPropertyParserHelpers::parseRelativeColorFunctionForXYZParameters):
        (WebCore::CSSPropertyParserHelpers::parseRelativeColorFunctionParameters):
        (WebCore::CSSPropertyParserHelpers::parseNonRelativeColorFunctionParameters):
        (WebCore::CSSPropertyParserHelpers::parseColorFunctionParameters):

2021-06-02  Youenn Fablet  <youenn@apple.com>

        HTMLMediaElement::virtualHasPendingActivity may keep objects alive unnecessarily
        https://bugs.webkit.org/show_bug.cgi?id=226529
        <rdar://78726921>

        Reviewed by Eric Carlson.

        In case a media element srcObject is set, its media player is no longer null, even if its srcObject is set back to null later on.
        Its ended state is set to false so the media element is kept alive if an event listener is set on the element.
        To prevent this, add a check to:
        - keep the media element alive if its resource selection queue is not empty
        - allow GC of a media element if its media player has no engine
        A follow-up patch should allow GC a media element with an ended MediaStream.

        Test: fast/mediastream/mediaElement-gc.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::virtualHasPendingActivity const):
        * html/HTMLMediaElement.h:
        * testing/Internals.cpp:
        (WebCore::Internals::mediaElementCount const):
        * testing/Internals.h:
        * testing/Internals.idl:

2021-06-02  Garrett Davidson  <garrett_davidson@apple.com>

        [Cocoa] _WKAuthenticatorAssertionResponse should specify the attachment type used
        https://bugs.webkit.org/show_bug.cgi?id=225519
        <rdar://problem/76554090>

        Reviewed by Brent Fulgham.

        Allow WebAuthn authenticators to pass back their attachment type and continue
        plumbing through up to the authenticator coordinator.

        Covered by manual tests.

        * Modules/webauthn/AuthenticatorAssertionResponse.cpp:
        (WebCore::AuthenticatorAssertionResponse::create):
        (WebCore::AuthenticatorAssertionResponse::AuthenticatorAssertionResponse):
        * Modules/webauthn/AuthenticatorAssertionResponse.h:
        * Modules/webauthn/AuthenticatorAttestationResponse.cpp:
        (WebCore::AuthenticatorAttestationResponse::create):
        (WebCore::AuthenticatorAttestationResponse::AuthenticatorAttestationResponse):
        * Modules/webauthn/AuthenticatorAttestationResponse.h:
        * Modules/webauthn/AuthenticatorCoordinator.cpp:
        (WebCore::AuthenticatorCoordinator::create const):
        (WebCore::AuthenticatorCoordinator::discoverFromExternalSource const):
        * Modules/webauthn/AuthenticatorCoordinatorClient.h:
        * Modules/webauthn/AuthenticatorResponse.cpp:
        (WebCore::AuthenticatorResponse::tryCreate):
        (WebCore::AuthenticatorResponse::attachment const):
        (WebCore::AuthenticatorResponse::AuthenticatorResponse):
        * Modules/webauthn/AuthenticatorResponse.h:
        * Modules/webauthn/fido/DeviceResponseConverter.cpp:
        (fido::readCTAPMakeCredentialResponse):
        (fido::readCTAPGetAssertionResponse):
        * Modules/webauthn/fido/DeviceResponseConverter.h:
        * Modules/webauthn/fido/U2fResponseConverter.cpp:
        (fido::readU2fRegisterResponse):
        (fido::readU2fSignResponse):
        * Modules/webauthn/fido/U2fResponseConverter.h:

2021-06-02  Youenn Fablet  <youenn@apple.com>

        Reduce logging in MediaElementSession::playbackStateChangePermitted
        https://bugs.webkit.org/show_bug.cgi?id=226531

        Reviewed by Eric Carlson.

        Downgrade logging to INFO level for the regular code path.
        Keep logging more rare case as before.

        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::playbackStateChangePermitted const):

2021-06-02  Antti Koivisto  <antti@apple.com>

        Style::Scope should use CheckedPtr
        https://bugs.webkit.org/show_bug.cgi?id=226530

        Reviewed by Sam Weinig.

        Instead of WeakPtr.

        * style/StyleScope.cpp:
        (WebCore::Style::Scope::collectResolverScopes):
        * style/StyleScope.h:

2021-06-02  Antti Koivisto  <antti@apple.com>

        Rename RootInlineBox to LegacyRootInlineBox
        https://bugs.webkit.org/show_bug.cgi?id=226533

        Reviewed by Sam Weinig.

        More legacy line layout path renaming.

        * Headers.cmake:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/ContainerNode.cpp:
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::getNextSoftBreak):
        (WebCore::HTMLTextFormControlElement::valueWithHardLineBreaks const):
        * layout/integration/LayoutIntegrationLineIterator.h:
        (WebCore::LayoutIntegration::LineIterator::LineIterator):
        (WebCore::LayoutIntegration::PathLine::legacyRootInlineBox const):
        * layout/integration/LayoutIntegrationLineIteratorLegacyPath.h:
        (WebCore::LayoutIntegration::LineIteratorLegacyPath::LineIteratorLegacyPath):
        (WebCore::LayoutIntegration::LineIteratorLegacyPath::selectionTopForHitTesting const):
        (WebCore::LayoutIntegration::LineIteratorLegacyPath::legacyRootInlineBox const):
        * layout/integration/LayoutIntegrationLineIteratorModernPath.h:
        (WebCore::LayoutIntegration::LineIteratorModernPath::legacyRootInlineBox const):
        * layout/integration/LayoutIntegrationRunIteratorLegacyPath.h:
        (WebCore::LayoutIntegration::RunIteratorLegacyPath::RunIteratorLegacyPath):
        (WebCore::LayoutIntegration::RunIteratorLegacyPath::rootInlineBox const):
        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::markupBox const):
        (WebCore::EllipsisBox::selectionRect):
        (WebCore::EllipsisBox::paintSelection):
        * rendering/FloatingObjects.cpp:
        * rendering/FloatingObjects.h:
        (WebCore::FloatingObject::originatingLine const):
        (WebCore::FloatingObject::setOriginatingLine):
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::innerTextIfTruncated const):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::computeLogicalBoxHeights):
        (WebCore::InlineFlowBox::nodeAtPoint):
        (WebCore::InlineFlowBox::constrainToLineTopAndBottomIfNeeded const):
        * rendering/InlineFlowBox.h:
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintMarkedTextBackground):
        * rendering/LegacyInlineBox.cpp:
        (WebCore::LegacyInlineBox::root const):
        (WebCore::LegacyInlineBox::root):
        * rendering/LegacyInlineBox.h:
        * rendering/LegacyLineLayout.cpp:
        (WebCore::LegacyLineLayout::createRootInlineBox):
        (WebCore::LegacyLineLayout::createAndAppendRootInlineBox):
        (WebCore::LegacyLineLayout::constructLine):
        (WebCore::setLogicalWidthForTextRun):
        (WebCore::LegacyLineLayout::updateRubyForJustifiedText):
        (WebCore::LegacyLineLayout::updateLogicalWidthForAlignment):
        (WebCore::LegacyLineLayout::computeInlineDirectionPositionsForLine):
        (WebCore::LegacyLineLayout::computeInlineDirectionPositionsForSegment):
        (WebCore::LegacyLineLayout::removeInlineBox const):
        (WebCore::LegacyLineLayout::computeBlockDirectionPositionsForLine):
        (WebCore::LegacyLineLayout::createLineBoxesFromBidiRuns):
        (WebCore::deleteLineRange):
        (WebCore::LegacyLineLayout::layoutRunsAndFloats):
        (WebCore::LegacyLineLayout::layoutRunsAndFloatsInRange):
        (WebCore::LegacyLineLayout::reattachCleanLineFloats):
        (WebCore::LegacyLineLayout::checkFloatInCleanLine):
        (WebCore::LegacyLineLayout::determineStartPosition):
        (WebCore::LegacyLineLayout::determineEndPosition):
        (WebCore::LegacyLineLayout::checkPaginationAndFloatsAtEndLine):
        (WebCore::LegacyLineLayout::lineWidthForPaginatedLineChanged const):
        (WebCore::LegacyLineLayout::matchedEndLine):
        (WebCore::LegacyLineLayout::addOverflowFromInlineChildren):
        (WebCore::LegacyLineLayout::lineCountUntil const):
        (WebCore::LegacyLineLayout::deleteEllipsisLineBoxes):
        (WebCore::LegacyLineLayout::checkLinesForTextOverflow):
        (WebCore::LegacyLineLayout::updateFragmentForLine const):
        * rendering/LegacyLineLayout.h:
        (WebCore::LegacyLineLayout::firstRootBox const):
        (WebCore::LegacyLineLayout::lastRootBox const):
        * rendering/LegacyRootInlineBox.cpp: Renamed from Source/WebCore/rendering/RootInlineBox.cpp.
        (WebCore::containingFragmentMap):
        (WebCore::LegacyRootInlineBox::LegacyRootInlineBox):
        (WebCore::LegacyRootInlineBox::~LegacyRootInlineBox):
        (WebCore::LegacyRootInlineBox::detachEllipsisBox):
        (WebCore::LegacyRootInlineBox::clearTruncation):
        (WebCore::LegacyRootInlineBox::isHyphenated const):
        (WebCore::LegacyRootInlineBox::baselinePosition const):
        (WebCore::LegacyRootInlineBox::lineHeight const):
        (WebCore::LegacyRootInlineBox::lineCanAccommodateEllipsis):
        (WebCore::LegacyRootInlineBox::placeEllipsis):
        (WebCore::LegacyRootInlineBox::placeEllipsisBox):
        (WebCore::LegacyRootInlineBox::paintEllipsisBox const):
        (WebCore::LegacyRootInlineBox::paint):
        (WebCore::LegacyRootInlineBox::nodeAtPoint):
        (WebCore::LegacyRootInlineBox::adjustPosition):
        (WebCore::LegacyRootInlineBox::childRemoved):
        (WebCore::LegacyRootInlineBox::containingFragment const):
        (WebCore::LegacyRootInlineBox::clearContainingFragment):
        (WebCore::LegacyRootInlineBox::setContainingFragment):
        (WebCore::LegacyRootInlineBox::alignBoxesInBlockDirection):
        (WebCore::LegacyRootInlineBox::beforeAnnotationsAdjustment const):
        (WebCore::LegacyRootInlineBox::lineSnapAdjustment const):
        (WebCore::LegacyRootInlineBox::lineSelectionGap):
        (WebCore::LegacyRootInlineBox::selectionState):
        (WebCore::LegacyRootInlineBox::firstSelectedBox):
        (WebCore::LegacyRootInlineBox::lastSelectedBox):
        (WebCore::LegacyRootInlineBox::selectionTop const):
        (WebCore::blockBeforeWithinSelectionRoot):
        (WebCore::LegacyRootInlineBox::selectionTopAdjustedForPrecedingBlock const):
        (WebCore::LegacyRootInlineBox::selectionBottom const):
        (WebCore::LegacyRootInlineBox::blockFlow const):
        (WebCore::LegacyRootInlineBox::lineBreakBidiStatus const):
        (WebCore::LegacyRootInlineBox::setLineBreakInfo):
        (WebCore::LegacyRootInlineBox::ellipsisBox const):
        (WebCore::LegacyRootInlineBox::removeLineBoxFromRenderObject):
        (WebCore::LegacyRootInlineBox::extractLineBoxFromRenderObject):
        (WebCore::LegacyRootInlineBox::attachLineBoxToRenderObject):
        (WebCore::LegacyRootInlineBox::paddedLayoutOverflowRect const):
        (WebCore::setAscentAndDescent):
        (WebCore::LegacyRootInlineBox::ascentAndDescentForBox const):
        (WebCore::LegacyRootInlineBox::verticalPositionForBox):
        (WebCore::LegacyRootInlineBox::includeLeadingForBox const):
        (WebCore::LegacyRootInlineBox::includeFontForBox const):
        (WebCore::LegacyRootInlineBox::includeGlyphsForBox const):
        (WebCore::LegacyRootInlineBox::includeInitialLetterForBox const):
        (WebCore::LegacyRootInlineBox::includeMarginForBox const):
        (WebCore::LegacyRootInlineBox::fitsToGlyphs const):
        (WebCore::LegacyRootInlineBox::includesRootLineBoxFontOrLeading const):
        (WebCore::LegacyRootInlineBox::outputLineBox const):
        (WebCore::LegacyRootInlineBox::boxName const):
        * rendering/LegacyRootInlineBox.h: Renamed from Source/WebCore/rendering/RootInlineBox.h.
        (WebCore::LegacyRootInlineBox::lineTop const):
        (WebCore::LegacyRootInlineBox::lineBottom const):
        (WebCore::LegacyRootInlineBox::lineBoxTop const):
        (WebCore::LegacyRootInlineBox::lineBoxBottom const):
        (WebCore::LegacyRootInlineBox::lineBoxHeight const):
        (WebCore::LegacyRootInlineBox::paginationStrut const):
        (WebCore::LegacyRootInlineBox::setPaginationStrut):
        (WebCore::LegacyRootInlineBox::isFirstAfterPageBreak const):
        (WebCore::LegacyRootInlineBox::setIsFirstAfterPageBreak):
        (WebCore::LegacyRootInlineBox::paginatedLineWidth const):
        (WebCore::LegacyRootInlineBox::setPaginatedLineWidth):
        (WebCore::LegacyRootInlineBox::selectionHeight const):
        (WebCore::LegacyRootInlineBox::selectionHeightAdjustedForPrecedingBlock const):
        (WebCore::LegacyRootInlineBox::setLineTopBottomPositions):
        (WebCore::LegacyRootInlineBox::lineBreakObj const):
        (WebCore::LegacyRootInlineBox::lineBreakPos const):
        (WebCore::LegacyRootInlineBox::setLineBreakPos):
        (WebCore::LegacyRootInlineBox::appendFloat):
        (WebCore::LegacyRootInlineBox::removeFloat):
        (WebCore::LegacyRootInlineBox::floatsPtr):
        (WebCore::LegacyRootInlineBox::baselineType const):
        (WebCore::LegacyRootInlineBox::hasAnnotationsBefore const):
        (WebCore::LegacyRootInlineBox::hasAnnotationsAfter const):
        (WebCore::LegacyRootInlineBox::logicalTopVisualOverflow const):
        (WebCore::LegacyRootInlineBox::logicalBottomVisualOverflow const):
        (WebCore::LegacyRootInlineBox::logicalTopLayoutOverflow const):
        (WebCore::LegacyRootInlineBox::logicalBottomLayoutOverflow const):
        (WebCore::LegacyRootInlineBox::isTrailingFloatsRootInlineBox const):
        (WebCore::LegacyRootInlineBox::nextRootBox const):
        (WebCore::LegacyRootInlineBox::prevRootBox const):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::simplifiedNormalFlowLayout):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::calculateMinimumPageHeight):
        (WebCore::needsAppleMailPaginationQuirk):
        (WebCore::RenderBlockFlow::adjustLinePositionForPagination):
        (WebCore::RenderBlockFlow::layoutLineGridBox):
        (WebCore::RenderBlockFlow::markLinesDirtyInBlockRange):
        (WebCore::RenderBlockFlow::inlineSelectionGaps):
        (WebCore::shouldIncludeLinesForParentLineCount):
        (WebCore::RenderBlockFlow::lineCount const):
        (WebCore::RenderBlockFlow::clearTruncation):
        (WebCore::RenderBlockFlow::addFocusRingRectsForInlineChildren):
        (WebCore::RenderBlockFlow::outputLineTreeAndMark const):
        (WebCore::shouldCheckLines): Deleted.
        * rendering/RenderBlockFlow.h:
        (WebCore::RenderBlockFlow::lineGridBox const):
        (WebCore::RenderBlockFlow::setLineGridBox):
        (WebCore::RenderBlockFlow::firstRootBox const):
        (WebCore::RenderBlockFlow::lastRootBox const):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::positionLineBox):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintMaskForTextFillBox):
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::lineAtIndex):
        (WebCore::getHeightForLineCount):
        (WebCore::RenderDeprecatedFlexibleBox::applyLineClamp):
        (WebCore::shouldCheckLines): Deleted.
        * rendering/RenderFragmentedFlow.cpp:
        (WebCore::RenderFragmentedFlow::checkLinesConsistency const):
        * rendering/RenderFragmentedFlow.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::generateCulledLineBoxRects const):
        (WebCore::RenderInline::linesVisualOverflowBoundingBox const):
        (WebCore::RenderInline::linesVisualOverflowBoundingBoxInFragment const):
        (WebCore::RenderInline::paintOutline):
        * rendering/RenderLineBoxList.cpp:
        (WebCore::RenderLineBoxList::anyLineIntersectsRect const):
        (WebCore::RenderLineBoxList::lineIntersectsDirtyRect const):
        (WebCore::RenderLineBoxList::paint const):
        (WebCore::RenderLineBoxList::hitTest const):
        (WebCore::RenderLineBoxList::dirtyLinesFromChangedChild):
        * rendering/RenderLineBreak.cpp:
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::localSelectionRect):
        (WebCore::RenderListMarker::addOverflowFromListMarker):
        (WebCore::RenderListMarker::selectionRectForRepaint):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::shouldPaint):
        (WebCore::RenderReplaced::localSelectionRect const):
        * rendering/RenderRubyRun.cpp:
        (WebCore::RenderRubyRun::layoutBlock):
        (WebCore::RenderRubyRun::getOverhang const):
        * rendering/RenderTextLineBoxes.cpp:
        (WebCore::RenderTextLineBoxes::dirtyRange):
        * rendering/TrailingFloatsRootInlineBox.h:
        * rendering/line/LineLayoutState.h:
        (WebCore::LineLayoutState::endLine const):
        (WebCore::LineLayoutState::setEndLine):
        (WebCore::LineLayoutState::updateRepaintRangeFromBox):
        * rendering/mathml/RenderMathMLBlock.cpp:
        (WebCore::RenderMathMLBlock::baselinePosition const):
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::positionForPoint):
        * rendering/svg/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBox::SVGRootInlineBox):
        * rendering/svg/SVGRootInlineBox.h:
        * style/InlineTextBoxStyle.cpp:
        (WebCore::computeUnderlineOffset):

2021-06-02  Chris Dumez  <cdumez@apple.com>

        Use Checked aliases instead of Checked<T, RecordOverflow>
        https://bugs.webkit.org/show_bug.cgi?id=226535

        Reviewed by Keith Miller.

        * html/ImageData.cpp:
        (WebCore::computeDataSize):
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::validateTexFuncData):
        (WebCore::WebGLRenderingContextBase::validateCompressedTexFuncData):
        * platform/graphics/GraphicsContextGL.cpp:
        (WebCore::GraphicsContextGL::computeImageSizeInBytes):
        * platform/graphics/IntRect.cpp:
        (WebCore::IntRect::isValid const):
        * platform/graphics/PixelBuffer.cpp:
        (WebCore::PixelBuffer::computeBufferSize):
        * platform/graphics/PixelBuffer.h:
        * platform/graphics/avfoundation/ISOFairPlayStreamingPsshBox.cpp:
        (WebCore::ISOFairPlayStreamingKeyRequestInfoBox::parse):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::updateBackdropFilters):
        * platform/graphics/cg/ImageBufferCGBitmapBackend.cpp:
        (WebCore::ImageBufferCGBitmapBackend::calculateSafeBackendSize):
        * platform/graphics/win/Direct2DUtilities.cpp:
        (WebCore::Direct2D::createDirect2DImageSurfaceWithData):
        * platform/graphics/win/ImageBufferDirect2DBackend.cpp:
        (WebCore::ImageBufferDirect2DBackend::copyNativeImage const):
        (WebCore::ImageBufferDirect2DBackend::compatibleBitmap):

2021-06-02  Martin Robinson  <mrobinson@igalia.com>

        [css-scroll-snap] Scroll snap is broken with non-horizontal writing modes
        https://bugs.webkit.org/show_bug.cgi?id=226010

        Reviewed by Frédéric Wang.

        Fix issues related to vertical writing modes and scroll snap.

        This change fixes three existing WPT tests.
            imported/w3c/web-platform-tests/css/css-scroll-snap/scroll-snap-type-on-root-element.html
            imported/w3c/web-platform-tests/css/css-scroll-snap/snap-after-initial-layout/writing-mode-vertical-lr.html
            imported/w3c/web-platform-tests/css/css-scroll-snap/snap-inline-block.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForScrollSnapAlignment): Update to reflect new member names of ScrollSnapAlign.
        * page/FrameView.cpp:
        (WebCore::FrameView::updateSnapOffsets): Pass in the text direction and writing mode of the
        container, allowing the values specified on the body to override those specified on the root
        element.
        * page/scrolling/ScrollSnapOffsetsInfo.cpp:
        (WebCore::updateSnapOffsetsForScrollableArea): Properly handle the writing mode and the
        text direction of the container.
        * page/scrolling/ScrollSnapOffsetsInfo.h: Update function signature.
        * rendering/RenderLayerModelObject.cpp:
        (WebCore::scrollSnapContainerRequiresUpdateForStyleUpdate): Pass in the writing mode and
        text direction of the scrolling container.
        * rendering/RenderLayerScrollableArea.cpp:
        (WebCore::RenderLayerScrollableArea::updateSnapOffsets): Update to reflect new member names
        of ScrollSnapAlign.
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::hasSnapPosition const): Ditto.
        * rendering/style/StyleScrollSnapPoints.h: Change the name of the members of ScrollSnapAlign
        to match what is described in the specification. The values provided are for block and
        inline directions, but depending on the scroll container.
        (WebCore::operator==): Ditto.
        * style/StyleBuilderConverter.h:
        (WebCore::Style::BuilderConverter::convertScrollSnapAlign): Ditto.

2021-06-02  Antti Koivisto  <antti@apple.com>

        REGRESSION(r276882): Style not invalidated correctly for media queries in shadow trees that share style
        https://bugs.webkit.org/show_bug.cgi?id=226369
        <rdar://problem/78684562>

        Reviewed by Sam Weinig.

        Style resolvers are stateful in respect to media queries. We would only invalidate in the first shadow tree
        because that evaluation flipped the state and the second evaluation would see nothing changing in media query
        state.

        * style/StyleScope.cpp:
        (WebCore::Style::Scope::collectResolverScopes):

        Add a helper to collect all scopes associated with a resolver.

        (WebCore::Style::Scope::evaluateMediaQueries):

        Only evaluate each resolver once, then invalidate all associated scopes if needed.

        * style/StyleScope.h:

2021-05-28  Antoine Quint  <graouts@webkit.org>

        Hit-testing does not account for clip-path on <iframe>
        https://bugs.webkit.org/show_bug.cgi?id=226380
        <rdar://problem/78621486>

        Reviewed by Antti Koivisto.

        The logic to account for the clip-path property during hit-testing was only found in RenderBlock::nodeAtPoint()
        although other types of RenderBox objects may need this, such as RenderIFrame. So we move some of the logic
        from RenderBlock::nodeAtPoint() to dedicated methods on RenderBox such that RenderBox::nodeAtPoint() may call them
        but also allow for RenderBlock::nodeAtPoint() to call them.

        Test: css3/masking/clip-path-hit-test-iframe.html
              css3/masking/clip-path-hit-test-img.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::nodeAtPoint):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::hitTestVisualOverflow const):
        (WebCore::RenderBox::hitTestClipPath const):
        (WebCore::RenderBox::hitTestBorderRadius const):
        (WebCore::RenderBox::nodeAtPoint):
        * rendering/RenderBox.h:

2021-06-02  Youenn Fablet  <youenn@apple.com>

        Improve AudioMediaStreamTrackRendererUnit logging to know which source is being played
        https://bugs.webkit.org/show_bug.cgi?id=226466

        Reviewed by Eric Carlson.

        Log AudioSampleDataSource identifier when using it with the render unit.
        Set AudioSampleDataSource identifier to its MediaStreamTrack/RealtimeMediaSource identifier.
        This allows identifying which tracks are being played.

        No change of behavior.

        * platform/mediastream/AudioTrackPrivateMediaStream.cpp:
        (WebCore::AudioTrackPrivateMediaStream::createRenderer):
        (WebCore::AudioTrackPrivateMediaStream::setLogger): Deleted.
        * platform/mediastream/AudioTrackPrivateMediaStream.h:
        * platform/mediastream/cocoa/AudioMediaStreamTrackRendererCocoa.cpp:
        (WebCore::AudioMediaStreamTrackRendererCocoa::pushSamples):
        * platform/mediastream/cocoa/AudioMediaStreamTrackRendererUnit.cpp:
        (WebCore::AudioMediaStreamTrackRendererUnit::addSource):
        (WebCore::AudioMediaStreamTrackRendererUnit::removeSource):

2021-06-01  Darin Adler  <darin@apple.com>

        Remove <wtf/Optional.h>
        https://bugs.webkit.org/show_bug.cgi?id=226437

        Reviewed by Chris Dumez.

        * <many files>: Removed include of <wtf/Optional.h>.

        * platform/graphics/Font.h: Tweaked style a bit.

        * Modules/geolocation/GeolocationClient.h: Added include of <optional>.
        * Modules/mediastream/DoubleRange.h: Ditto.
        * Modules/mediastream/LongRange.h: Ditto.
        * Modules/webauthn/AuthenticationExtensionsClientOutputs.h: Ditto.
        * css/CSSToLengthConversionData.h: Ditto.
        * css/DOMMatrix2DInit.h: Ditto.
        * dom/AddEventListenerOptions.h: Ditto.
        * dom/DeviceMotionData.h: Ditto.
        * dom/DeviceOrientationData.h: Ditto.
        * dom/SuccessOr.h: Ditto.
        * html/DateTimeFieldsState.h: Ditto.
        * html/ImageBitmapOptions.h: Ditto.
        * html/canvas/PredefinedColorSpace.h: Ditto.
        * layout/LayoutPhase.h: Ditto.
        * layout/MarginTypes.h: Ditto.
        * loader/ResourceLoadNotifier.h: Ditto.
        * page/RuntimeEnabledFeatures.h: Ditto.
        * page/ScrollOptions.h: Ditto.
        * platform/MediaCapabilitiesInfo.h: Ditto.
        * platform/cocoa/SystemBattery.h: Ditto.
        * platform/graphics/DecodingOptions.h: Ditto.
        * platform/graphics/DestinationColorSpace.h: Ditto.
        * platform/graphics/DisplayRefreshMonitorClient.h: Ditto.
        * platform/graphics/FloatLine.h: Ditto.
        * platform/graphics/gpu/GPURequestAdapterOptions.h: Ditto.
        * platform/graphics/x11/PlatformDisplayX11.h: Ditto.
        * platform/ios/SelectionGeometry.h: Ditto.
        * platform/mac/NSScrollerImpDetails.h: Ditto.
        * platform/network/DNS.h: Ditto.
        * platform/text/EncodingTables.h: Ditto.
        * platform/text/TextCodecCJK.h: Ditto.
        * platform/text/TextCodecUTF16.h: Ditto.
        * platform/text/TextFlags.h: Ditto.

2021-06-01  Chris Dumez  <cdumez@apple.com>

        Rename Checked::unsafeGet() to Checked::value()
        https://bugs.webkit.org/show_bug.cgi?id=226514

        Reviewed by Darin Adler.

        Rename Checked::unsafeGet() to Checked::value(). The "unsafeGet" naming is confusing as this
        function isn't really unsafe since it will crash if the value has overflowed. Also add an
        `operator T()` to implicitly convert a Checked to its underlying type without needing to
        call value().

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneDeserializer::readTerminal):
        * dom/TextEncoderStreamEncoder.cpp:
        (WebCore::TextEncoderStreamEncoder::encode):
        * editing/markup.cpp:
        (WebCore::StyledMarkupAccumulator::takeResults):
        * html/FileInputType.cpp:
        (WebCore::FileInputType::saveFormControlState const):
        * html/ImageData.cpp:
        (WebCore::ImageData::create):
        (WebCore::ImageData::createUninitialized):
        * html/MediaElementSession.cpp:
        (WebCore::isElementRectMostlyInMainFrame):
        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::sliceArrayBufferView):
        (WebCore::WebGL2RenderingContext::copyBufferSubData):
        (WebCore::WebGL2RenderingContext::getBufferSubData):
        (WebCore::WebGL2RenderingContext::validateClearBuffer):
        * html/canvas/WebGLBuffer.cpp:
        (WebCore::WebGLBuffer::associateBufferSubDataImpl):
        (WebCore::WebGLBuffer::associateCopyBufferSubData):
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::clip2D):
        (WebCore::WebGLRenderingContextBase::validateDrawArrays):
        (WebCore::WebGLRenderingContextBase::validateDrawElements):
        (WebCore::WebGLRenderingContextBase::validateTexFuncData):
        (WebCore::WebGLRenderingContextBase::validateCompressedTexFuncData):
        (WebCore::WebGLRenderingContextBase::validateSimulatedVertexAttrib0):
        * html/canvas/WebGLRenderingContextBase.h:
        (WebCore::WebGLRenderingContextBase::validateTexImageSubRectangle):
        (WebCore::WebGLRenderingContextBase::checkedAddAndMultiply):
        * page/FrameView.h:
        (WebCore::FrameView::incrementVisuallyNonEmptyPixelCount):
        * page/History.cpp:
        (WebCore::History::stateObjectAdded):
        * platform/audio/AudioArray.h:
        (WebCore::AudioArray::resize):
        * platform/audio/cocoa/AudioFileReaderCocoa.cpp:
        (WebCore::tryCreateAudioBufferList):
        * platform/audio/cocoa/CARingBuffer.cpp:
        (WebCore::CARingBuffer::adoptStorage):
        (WebCore::CARingBuffer::initializeAfterAllocation):
        (WebCore::CARingBuffer::allocate):
        * platform/audio/cocoa/WebAudioBufferList.cpp:
        (WebCore::WebAudioBufferList::WebAudioBufferList):
        * platform/graphics/FormatConverter.h:
        (WebCore::FormatConverter::FormatConverter):
        * platform/graphics/GraphicsContextGL.cpp:
        (WebCore::GraphicsContextGL::computeImageSizeInBytes):
        * platform/graphics/ImageBackingStore.h:
        (WebCore::ImageBackingStore::setSize):
        (WebCore::ImageBackingStore::clear):
        * platform/graphics/ImageBufferBackend.cpp:
        (WebCore::ImageBufferBackend::calculateMemoryCost):
        * platform/graphics/ImageFrame.h:
        (WebCore::ImageFrame::frameBytes const):
        * platform/graphics/ImageSource.cpp:
        (WebCore::ImageSource::maximumSubsamplingLevel):
        * platform/graphics/PixelBuffer.cpp:
        (WebCore::PixelBuffer::tryCreateForDecoding):
        (WebCore::PixelBuffer::tryCreate):
        * platform/graphics/PixelBuffer.h:
        (WebCore::PixelBuffer::encode const):
        (WebCore::PixelBuffer::decode):
        * platform/graphics/avfoundation/objc/ImageDecoderAVFObjC.mm:
        (WebCore::ImageDecoderAVFObjC::frameBytesAtIndex const):
        * platform/graphics/avfoundation/objc/MediaSampleAVFObjC.mm:
        (WebCore::MediaSampleAVFObjC::setByteRangeOffset):
        (WebCore::MediaSampleAVFObjC::byteRangeForAttachment const):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::updateBackdropFilters):
        * platform/graphics/ca/LayerPool.cpp:
        (WebCore::LayerPool::backingStoreBytesForSize):
        * platform/graphics/cg/GraphicsContextGLCG.cpp:
        (WebCore::GraphicsContextGLImageExtractor::extractImage):
        * platform/graphics/cg/ImageBufferCGBackend.cpp:
        (WebCore::ImageBufferCGBackend::calculateBytesPerRow):
        * platform/graphics/cg/ImageDecoderCG.cpp:
        (WebCore::ImageDecoderCG::frameBytesAtIndex const):
        * platform/graphics/cocoa/SourceBufferParser.cpp:
        (WebCore::SourceBufferParser::Segment::read const):
        * platform/graphics/filters/FEColorMatrix.cpp:
        (WebCore::effectApplyAccelerated):
        * platform/graphics/filters/FEGaussianBlur.cpp:
        (WebCore::FEGaussianBlur::platformApplySoftware):
        * platform/graphics/filters/FETurbulence.cpp:
        (WebCore::FETurbulence::platformApplySoftware):
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::unmultipliedResult):
        (WebCore::FilterEffect::premultipliedResult):
        (WebCore::copyPremultiplyingAlpha):
        (WebCore::copyUnpremultiplyingAlpha):
        * platform/graphics/gpu/cocoa/GPUBindGroupAllocatorMetal.mm:
        (WebCore::GPUBindGroupAllocator::allocateAndSetEncoders):
        (WebCore::GPUBindGroupAllocator::reallocate):
        * platform/graphics/gpu/cocoa/GPUCommandBufferMetal.mm:
        (WebCore::GPUCommandBuffer::copyBufferToBuffer):
        * platform/graphics/gpu/cocoa/GPURenderPassEncoderMetal.mm:
        (WebCore::GPURenderPassEncoder::drawIndexed):
        * platform/graphics/gstreamer/ImageDecoderGStreamer.cpp:
        (WebCore::ImageDecoderGStreamer::frameBytesAtIndex const):
        * platform/graphics/nicosia/NicosiaBuffer.cpp:
        (Nicosia::Buffer::Buffer):
        * platform/graphics/win/Direct2DUtilities.cpp:
        (WebCore::Direct2D::createDirect2DImageSurfaceWithData):
        * platform/graphics/win/ImageBufferDirect2DBackend.cpp:
        (WebCore::ImageBufferDirect2DBackend::compatibleBitmap):
        * platform/graphics/win/ImageDecoderDirect2D.cpp:
        (WebCore::ImageDecoderDirect2D::frameBytesAtIndex const):
        * platform/image-decoders/ScalableImageDecoder.cpp:
        (WebCore::ScalableImageDecoder::frameBytesAtIndex const):
        * platform/image-decoders/jpeg2000/JPEG2000ImageDecoder.cpp:
        (WebCore::sycc444ToRGB):
        (WebCore::sycc422ToRGB):
        (WebCore::sycc420ToRGB):
        * platform/ios/LegacyTileLayerPool.mm:
        (WebCore::LegacyTileLayerPool::bytesBackingLayerWithPixelSize):
        * platform/text/TextCodecUTF16.cpp:
        (WebCore::TextCodecUTF16::encode const):
        * platform/text/TextCodecUTF8.cpp:
        (WebCore::TextCodecUTF8::encodeUTF8):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingForCanvas const):
        * rendering/shapes/Shape.cpp:
        (WebCore::Shape::createRasterShape):
        * storage/StorageMap.cpp:
        (WebCore::StorageMap::setItem):
        * xml/XSLStyleSheetLibxslt.cpp:
        (WebCore::XSLStyleSheet::parseString):
        * xml/XSLTProcessorLibxslt.cpp:
        (WebCore::xsltParamArrayFromParameterMap):
        * xml/parser/CharacterReferenceParserInlines.h:
        (WebCore::consumeCharacterReference):

2021-06-01  Jean-Yves Avenard  <jya@apple.com>

        MediaSession.coordinator should not be optional, relying on coordinator state change instead
        https://bugs.webkit.org/show_bug.cgi?id=226328
        rdar://77461335

        Reviewed by Eric Carlson.

        The coordinator was a read-only optional attribute of the MediaSession element.
        Testing if the attribute was to be used to determine if a MediaSessionCoordinator
        was now available and for the MediaSession to join it. This made the use of an external
        polyfill difficult and enforcing the validity of an user created custom
        MediaSessionCoordinator due to IDL semantics limitations hard.
        We instead always create a MediaSessionCoordinator which in its default state is Closed.
        Once this state is changed to Waiting and an event is fire the MediaSession can now
        join it.

        * Modules/mediasession/MediaSession.cpp:
        (WebCore::MediaSession::MediaSession): MediaSession no longer needs to fire event.
        Remove no longer necessary inheritance and async event queue.
        (WebCore::MediaSession::create): Drive-by fix, don't call suspendIfNeeded() in the constructor.
        (WebCore::MediaSession::createCoordinator): Make method private.
        * Modules/mediasession/MediaSession.h:
        (WebCore::MediaSession::coordinator const): MediaSessionCoordinator always exists. Return reference instead.
        * Modules/mediasession/MediaSession.idl: Amend definition, remove EventHandler
        * Modules/mediasession/MediaSessionCoordinator.cpp:
        (WebCore::MediaSessionCoordinator::create):
        (WebCore::MediaSessionCoordinator::MediaSessionCoordinator):
        (WebCore::MediaSessionCoordinator::setMediaSessionCoordinatorPrivate):
        (WebCore::MediaSessionCoordinator::virtualHasPendingActivity const):
        (WebCore::MediaSessionCoordinator::join):
        (WebCore::MediaSessionCoordinator::close):
        (WebCore::MediaSessionCoordinator::coordinatorStateChanged):
        * Modules/mediasession/MediaSessionCoordinator.h:
        * Modules/mediasession/MediaSessionCoordinator.idl: Added new EventHandler attribute.
        * Modules/mediasession/MediaSessionCoordinatorMixin.idl: Update for new API definition.
        * dom/EventNames.h:
        * dom/EventTargetFactory.in:
        * page/Page.cpp:
        (WebCore::Page::setMediaSessionCoordinator):
        (WebCore::Page::invalidateMediaSessionCoordinator):
        * testing/Internals.cpp:
        (WebCore::Internals::registerMockMediaSessionCoordinator):

2021-06-01  Chris Dumez  <cdumez@apple.com>

        Drop unused AudioChannel::resizeSmaller()
        https://bugs.webkit.org/show_bug.cgi?id=226516

        Reviewed by Sam Weinig.

        * platform/audio/AudioBus.cpp:
        * platform/audio/AudioBus.h:
        * platform/audio/AudioChannel.cpp:
        * platform/audio/AudioChannel.h:

2021-06-01  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] Data detector highlights should appear when hovering inside image overlays
        https://bugs.webkit.org/show_bug.cgi?id=226507

        Reviewed by Tim Horton.

        Refactor some logic in ImageOverlayController, such that the overlay is installed if _either_ selection painting
        is required, or data detector highlights for the image overlay host element exist; additionally, add plumbing to
        allow the ImageOverlayController to install a page overlay when the element under the mouse is inside an image
        overlay.

        * dom/Document.cpp:
        (WebCore::Document::willBeRemovedFromFrame):

        Drive-by fix: use `imageOverlayControllerIfExists` instead of `imageOverlayController` to avoid unnecessarily
        creating a new ImageOverlayController when detaching a Document.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::clear):

        Refactor logic for clearing out `m_elementUnderMouse` into a separate helper, and call it from these two places.
        This new helper clears out `m_elementUnderMouse` and additionally notifies the page's image overlay controller
        (only if it has already been constructed).

        (WebCore::EventHandler::updateMouseEventTargetNode):

        Call out to the page's image overlay controller when changing `m_elementUnderMouse`.

        (WebCore::EventHandler::clearElementUnderMouse):
        * page/EventHandler.h:
        * page/ImageOverlayController.cpp:
        (WebCore::ImageOverlayController::selectionQuadsDidChange):

        Refactor ImageOverlayController so that it only installs its page overlay if either:
        1. Selection painting is needed for selected text inside an image overlay, or...
        2. The cursor is over an image overlay host element with data detection results.

        To achieve this, we maintain a weak pointer to the image overlay host that contains the selection separately
        from the weak pointer to the image overlay host that contains data detectors, and is the element currently under
        the mouse cursor.

        Drive-by fix: also ignore selection updates due to temporary selections triggered as a result of gathering
        dictionary popup info.

        (WebCore::ImageOverlayController::documentDetached):
        (WebCore::ImageOverlayController::uninstallPageOverlay):
        (WebCore::ImageOverlayController::uninstallPageOverlayIfNeeded):

        Split this into two functions: `uninstallPageOverlayIfNeeded`, which removes and destroys the PageOverlay if
        it is no longer needed (i.e. the overlay is required for neither selection painting nor data detectors).

        (WebCore::ImageOverlayController::willMoveToPage):
        (WebCore::ImageOverlayController::drawRect):
        (WebCore::ImageOverlayController::elementUnderMouseDidChange):
        * page/ImageOverlayController.h:

        Rename `m_imageOverlayBounds` to `m_selectionClipRect` to make it clear that this is only used during selection
        painting, and rename `m_overlaySelectionQuads` to just `m_selectionQuads` for conciseness.

        * page/Page.h:
        (WebCore::Page::imageOverlayControllerIfExists):

        Add a version of this getter that does not initialize the ImageOverlayController if it didn't already exist. See
        call sites in EventHandler and Document.

        * page/mac/ImageOverlayControllerMac.mm:
        (WebCore::ImageOverlayController::clearDataDetectorHighlights):

        Additionally clear out `m_hostElementForDataDetectors`.

        (WebCore::ImageOverlayController::elementUnderMouseDidChange):

        Update data detector highlights whenever the element under the mouse is over content inside an image overlay.
        Note that we effectively ignore this method call in the case where we're clearing out `m_elementUnderMouse` for
        a different Document than the one containing `m_hostElementForDataDetectors`, which prevents us from erroneously
        hiding data detectors when `m_elementUnderMouse` is removed or otherwise cleared out in a different Document.

2021-06-01  Chris Dumez  <cdumez@apple.com>

        Fix unsafe access to m_upload in XMLHttpRequest::virtualHasPendingActivity()
        https://bugs.webkit.org/show_bug.cgi?id=226508

        Reviewed by Geoffrey Garen.

        Fix unsafe access to m_upload in XMLHttpRequest::virtualHasPendingActivity() as virtualHasPendingActivity()
        may get called off the main thread and m_upload gets initialized lazily on the main thread.

        Tests: fast/xmlhttprequest/xmlhttprequest-upload-sameobject.html
               http/tests/xmlhttprequest/upload-progress-events-gc.html

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::updateHasRelevantEventListener):
        (WebCore::XMLHttpRequest::eventListenersDidChange):
        (WebCore::XMLHttpRequest::virtualHasPendingActivity const):
        * xml/XMLHttpRequest.h:
        * xml/XMLHttpRequest.idl:
        * xml/XMLHttpRequestUpload.cpp:
        (WebCore::XMLHttpRequestUpload::eventListenersDidChange):
        (WebCore::XMLHttpRequestUpload::hasRelevantEventListener const):
        * xml/XMLHttpRequestUpload.h:

2021-06-01  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] Remove unused GraphicsContext::hdc()
        https://bugs.webkit.org/show_bug.cgi?id=226309

        Reviewed by Anders Carlsson.

        * platform/graphics/GraphicsContext.h:
        * platform/graphics/win/GraphicsContextWin.cpp:
        (WebCore::GraphicsContext::hdc const): Deleted.

2021-06-01  Cameron McCormack  <heycam@apple.com>

        Remove duplicate "behavior for fixed" entry from scrolling state tree logging
        https://bugs.webkit.org/show_bug.cgi?id=226479

        Reviewed by Frédéric Wang.

        * page/scrolling/ScrollingStateFrameScrollingNode.cpp:
        (WebCore::ScrollingStateFrameScrollingNode::dumpProperties const):

2021-06-01  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo] GraphicsContextCairo::GraphicsContextCairo(HDC, bool) leaks cairo_t
        https://bugs.webkit.org/show_bug.cgi?id=226317

        Reviewed by Don Olmstead.

        * platform/graphics/win/GraphicsContextCairoWin.cpp:
        (WebCore::createCairoContextWithHDC): Changed the return type from cairo_t* to RefPtr<cairo_t>.
        (WebCore::GraphicsContextCairo::GraphicsContextCairo):

2021-06-01  Philippe Normand  <pnormand@igalia.com>

        [EME][Thunder] Build broken since r278244
        https://bugs.webkit.org/show_bug.cgi?id=226498

        Reviewed by Alex Christensen.

        * platform/graphics/gstreamer/eme/CDMThunder.cpp:
        (WebCore::CDMInstanceSessionThunder::cdmInstanceThunder const): Cast raw pointer instead of
        its smart pointer container.

2021-06-01  Antti Koivisto  <antti@apple.com>

        Rename InlineBox to LegacyInlineBox
        https://bugs.webkit.org/show_bug.cgi?id=226501

        Reviewed by Alan Bujtas.

        More legacy line layout path renaming.

        * Headers.cmake:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Position.h:
        * layout/Verification.cpp:
        (WebCore::Layout::checkForMatchingNonTextRuns):
        (WebCore::Layout::collectFlowBoxSubtree):
        (WebCore::Layout::collectInlineBoxes):
        (WebCore::Layout::outputMismatchingComplexLineInformationIfNeeded):
        * layout/integration/LayoutIntegrationRunIterator.cpp:
        (WebCore::LayoutIntegration::firstTextRunInTextOrderFor):
        * layout/integration/LayoutIntegrationRunIterator.h:
        (WebCore::LayoutIntegration::PathRun::legacyInlineBox const):
        * layout/integration/LayoutIntegrationRunIteratorLegacyPath.h:
        (WebCore::LayoutIntegration::RunIteratorLegacyPath::RunIteratorLegacyPath):
        (WebCore::LayoutIntegration::RunIteratorLegacyPath::legacyInlineBox const):
        * layout/integration/LayoutIntegrationRunIteratorModernPath.h:
        (WebCore::LayoutIntegration::RunIteratorModernPath::legacyInlineBox const):
        * rendering/BidiRun.cpp:
        * rendering/BidiRun.h:
        (WebCore::BidiRun::box):
        (WebCore::BidiRun::setBox):
        * rendering/CaretRectComputation.cpp:
        (WebCore::computeCaretRectForInline):
        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::EllipsisBox):
        (WebCore::EllipsisBox::markupBox const):
        (WebCore::EllipsisBox::paintMarkupBox):
        (WebCore::EllipsisBox::nodeAtPoint):
        * rendering/EllipsisBox.h:
        * rendering/InlineElementBox.h:
        (WebCore::InlineElementBox::InlineElementBox):
        (WebCore::InlineElementBox::renderer const):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::setHasBadChildList):
        (WebCore::InlineFlowBox::getFlowSpacingLogicalWidth):
        (WebCore::InlineFlowBox::addToLine):
        (WebCore::InlineFlowBox::removeChild):
        (WebCore::InlineFlowBox::deleteLine):
        (WebCore::InlineFlowBox::extractLine):
        (WebCore::InlineFlowBox::attachLine):
        (WebCore::InlineFlowBox::adjustPosition):
        (WebCore::InlineFlowBox::determineSpacingForFlowBoxes):
        (WebCore::InlineFlowBox::placeBoxRangeInInlineDirection):
        (WebCore::InlineFlowBox::requiresIdeographicBaseline const):
        (WebCore::InlineFlowBox::adjustMaxAscentAndDescent):
        (WebCore::InlineFlowBox::computeLogicalBoxHeights):
        (WebCore::InlineFlowBox::placeBoxesInBlockDirection):
        (WebCore::InlineFlowBox::maxLogicalBottomForTextDecorationLine const):
        (WebCore::InlineFlowBox::minLogicalTopForTextDecorationLine const):
        (WebCore::InlineFlowBox::flipLinesInBlockDirection):
        (WebCore::InlineFlowBox::addReplacedChildOverflow):
        (WebCore::InlineFlowBox::computeOverflow):
        (WebCore::InlineFlowBox::nodeAtPoint):
        (WebCore::InlineFlowBox::paint):
        (WebCore::InlineFlowBox::firstLeafDescendant const):
        (WebCore::InlineFlowBox::lastLeafDescendant const):
        (WebCore::InlineFlowBox::canAccommodateEllipsis const):
        (WebCore::InlineFlowBox::placeEllipsisBox):
        (WebCore::InlineFlowBox::clearTruncation):
        (WebCore::InlineFlowBox::computeOverAnnotationAdjustment const):
        (WebCore::InlineFlowBox::computeUnderAnnotationAdjustment const):
        (WebCore::InlineFlowBox::collectLeafBoxesInLogicalOrder const):
        (WebCore::InlineFlowBox::outputLineTreeAndMark const):
        (WebCore::InlineFlowBox::checkConsistency const):
        * rendering/InlineFlowBox.h:
        (WebCore::InlineFlowBox::InlineFlowBox):
        (WebCore::InlineFlowBox::renderer const):
        (WebCore::InlineFlowBox::firstChild const):
        (WebCore::InlineFlowBox::lastChild const):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::markDirty):
        * rendering/InlineTextBox.h:
        (WebCore::InlineTextBox::InlineTextBox):
        (WebCore::InlineTextBox::renderer const):
        * rendering/LegacyInlineBox.cpp: Renamed from Source/WebCore/rendering/InlineBox.cpp.
        (WebCore::LegacyInlineBox::assertNotDeleted const):
        (WebCore::LegacyInlineBox::~LegacyInlineBox):
        (WebCore::LegacyInlineBox::setHasBadParent):
        (WebCore::LegacyInlineBox::invalidateParentChildList):
        (WebCore::LegacyInlineBox::removeFromParent):
        (WebCore::LegacyInlineBox::boxName const):
        (WebCore::LegacyInlineBox::showNodeTreeForThis const):
        (WebCore::LegacyInlineBox::showLineTreeForThis const):
        (WebCore::LegacyInlineBox::outputLineTreeAndMark const):
        (WebCore::LegacyInlineBox::outputLineBox const):
        (WebCore::LegacyInlineBox::logicalHeight const):
        (WebCore::LegacyInlineBox::baselinePosition const):
        (WebCore::LegacyInlineBox::lineHeight const):
        (WebCore::LegacyInlineBox::caretMinOffset const):
        (WebCore::LegacyInlineBox::caretMaxOffset const):
        (WebCore::LegacyInlineBox::dirtyLineBoxes):
        (WebCore::LegacyInlineBox::adjustPosition):
        (WebCore::LegacyInlineBox::root const):
        (WebCore::LegacyInlineBox::root):
        (WebCore::LegacyInlineBox::nextOnLineExists const):
        (WebCore::LegacyInlineBox::previousOnLineExists const):
        (WebCore::LegacyInlineBox::nextLeafOnLine const):
        (WebCore::LegacyInlineBox::previousLeafOnLine const):
        (WebCore::LegacyInlineBox::selectionState):
        (WebCore::LegacyInlineBox::canAccommodateEllipsis const):
        (WebCore::LegacyInlineBox::placeEllipsisBox):
        (WebCore::LegacyInlineBox::clearKnownToHaveNoOverflow):
        (WebCore::LegacyInlineBox::locationIncludingFlipping const):
        (WebCore::LegacyInlineBox::flipForWritingMode const):
        (showNodeTree):
        (showLineTree):
        * rendering/LegacyInlineBox.h: Renamed from Source/WebCore/rendering/InlineBox.h.
        (WebCore::LegacyInlineBox::nextOnLine const):
        (WebCore::LegacyInlineBox::previousOnLine const):
        (WebCore::LegacyInlineBox::setNextOnLine):
        (WebCore::LegacyInlineBox::setPreviousOnLine):
        (WebCore::LegacyInlineBox::LegacyInlineBox):
        (WebCore::LegacyInlineBox::~LegacyInlineBox):
        (WebCore::LegacyInlineBox::assertNotDeleted const):
        * rendering/LegacyLineLayout.cpp:
        (WebCore::LegacyLineLayout::createInlineBoxForRenderer):
        (WebCore::LegacyLineLayout::createLineBoxes):
        (WebCore::LegacyLineLayout::constructLine):
        (WebCore::inlineAncestorHasStartBorderPaddingOrMargin):
        (WebCore::inlineAncestorHasEndBorderPaddingOrMargin):
        (WebCore::LegacyLineLayout::computeInlineDirectionPositionsForSegment):
        (WebCore::LegacyLineLayout::layoutRunsAndFloats):
        * rendering/LegacyLineLayout.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::outputLineTreeAndMark const):
        * rendering/RenderBlockFlow.h:
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::RenderDeprecatedFlexibleBox::applyLineClamp):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::offsetLeft const):
        (WebCore::RenderInline::offsetTop const):
        (WebCore::RenderInline::culledInlineFirstLineBox const):
        (WebCore::RenderInline::culledInlineLastLineBox const):
        * rendering/RenderInline.h:
        (WebCore::RenderInline::firstLineBoxIncludingCulling const):
        (WebCore::RenderInline::lastLineBoxIncludingCulling const):
        * rendering/RenderLineBoxList.cpp:
        (WebCore::RenderLineBoxList::dirtyLinesFromChangedChild):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::localSelectionRect):
        * rendering/RenderObject.h:
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::isHyphenated const):
        (WebCore::RootInlineBox::placeEllipsis):
        (WebCore::RootInlineBox::childRemoved):
        (WebCore::RootInlineBox::lineSelectionGap):
        (WebCore::RootInlineBox::selectionState):
        (WebCore::RootInlineBox::firstSelectedBox):
        (WebCore::RootInlineBox::lastSelectedBox):
        (WebCore::RootInlineBox::ascentAndDescentForBox const):
        (WebCore::RootInlineBox::verticalPositionForBox):
        (WebCore::RootInlineBox::includeLeadingForBox const):
        (WebCore::RootInlineBox::includeFontForBox const):
        (WebCore::RootInlineBox::includeGlyphsForBox const):
        (WebCore::RootInlineBox::includeInitialLetterForBox const):
        (WebCore::RootInlineBox::includeMarginForBox const):
        (WebCore::RootInlineBox::outputLineBox const):
        * rendering/RootInlineBox.h:
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::positionForPoint):
        * rendering/svg/SVGInlineFlowBox.cpp:
        (WebCore::SVGInlineFlowBox::paintSelectionBackground):
        (WebCore::SVGInlineFlowBox::paint):
        * rendering/svg/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBox::paint):
        (WebCore::SVGRootInlineBox::layoutCharactersInTextBoxes):
        (WebCore::SVGRootInlineBox::layoutChildBoxes):
        (WebCore::SVGRootInlineBox::layoutRootBox):
        (WebCore::SVGRootInlineBox::closestLeafChildForPosition):
        (WebCore::SVGRootInlineBox::nodeAtPoint):
        (WebCore::reverseInlineBoxRangeAndValueListsIfNeeded):
        (WebCore::SVGRootInlineBox::reorderValueLists):
        * rendering/svg/SVGRootInlineBox.h:
        * rendering/svg/SVGTextQuery.cpp:
        (WebCore::SVGTextQuery::collectTextBoxesInFlowBox):

2021-06-01  Dean Jackson  <dino@apple.com>

        [WebXR] Attach IOSurface to WebXROpaqueFramebuffer
        https://bugs.webkit.org/show_bug.cgi?id=225896
        <rdar://problem/78128289>

        Add a null check to fix a test crash.

        * Modules/webxr/WebXROpaqueFramebuffer.cpp:
        (WebCore::WebXROpaqueFramebuffer::startFrame):

2021-06-01  Sam Weinig  <weinig@apple.com>

        Factor out token-type dependent CSS property parsing functions to allow more code sharing
        https://bugs.webkit.org/show_bug.cgi?id=226473

        Reviewed by Darin Adler.

        As a step toward reducing duplicate code and making CSSPropertyParserHelpers a bit
        easier to follow, this change extracts the token type specific parts of the primitive
        consume functions (e.g. the part of consumeNumberRaw where the token is known to be
        a FunctionToken) into their own functions. This allows sharing between functions that
        both need that logic (e.g. consumeNumberRaw and consumeNumberRawOrPercentRaw can share)
        without extra branches, rechecking the token type, or duplication. It also has the
        benefit of creating a strict pattern for primitive consumers going forward.

        The new names are rather long to make it very clear what they do, but they are unlikely
        to stay for very long. Future changes will try to generalize through templates to allow
        programatic combinations of the consumers without always haveing to write the boilerplate.

        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::shouldAcceptUnitlessValue):
        (WebCore::CSSPropertyParserHelpers::consumeIntegerTypeRawWithKnownTokenTypeFunction):
        (WebCore::CSSPropertyParserHelpers::consumeIntegerTypeRawWithKnownTokenTypeNumber):
        (WebCore::CSSPropertyParserHelpers::consumeIntegerTypeCSSPrimitiveValueWithCalcWithKnownTokenTypeFunction):
        (WebCore::CSSPropertyParserHelpers::consumeIntegerTypeCSSPrimitiveValueWithCalcWithKnownTokenTypeNumber):
        (WebCore::CSSPropertyParserHelpers::validatedNumberRaw):
        (WebCore::CSSPropertyParserHelpers::consumeNumberRawWithKnownTokenTypeFunction):
        (WebCore::CSSPropertyParserHelpers::consumeNumberRawWithKnownTokenTypeNumber):
        (WebCore::CSSPropertyParserHelpers::consumeNumberRawWithKnownTokenTypeIdent):
        (WebCore::CSSPropertyParserHelpers::consumeNumberCSSPrimitiveValueWithCalcWithKnownTokenTypeFunction):
        (WebCore::CSSPropertyParserHelpers::consumeNumberCSSPrimitiveValueWithCalcWithKnownTokenTypeNumber):
        (WebCore::CSSPropertyParserHelpers::validatedPercentRaw):
        (WebCore::CSSPropertyParserHelpers::consumePercentRawWithKnownTokenTypeFunction):
        (WebCore::CSSPropertyParserHelpers::consumePercentRawWithKnownTokenTypePercentage):
        (WebCore::CSSPropertyParserHelpers::consumePercentRawWithKnownTokenTypeIdent):
        (WebCore::CSSPropertyParserHelpers::consumePercentCSSPrimitiveValueWithCalcWithKnownTokenTypeFunction):
        (WebCore::CSSPropertyParserHelpers::consumePercentCSSPrimitiveValueWithCalcWithKnownTokenTypePercentage):
        (WebCore::CSSPropertyParserHelpers::validatedLengthRaw):
        (WebCore::CSSPropertyParserHelpers::consumeLengthRawWithKnownTokenTypeFunction):
        (WebCore::CSSPropertyParserHelpers::consumeLengthRawWithKnownTokenTypeDimension):
        (WebCore::CSSPropertyParserHelpers::consumeLengthRawWithKnownTokenTypeNumber):
        (WebCore::CSSPropertyParserHelpers::consumeLengthCSSPrimitiveValueWithCalcWithKnownTokenTypeFunction):
        (WebCore::CSSPropertyParserHelpers::consumeLengthCSSPrimitiveValueWithCalcWithKnownTokenTypeDimension):
        (WebCore::CSSPropertyParserHelpers::consumeLengthCSSPrimitiveValueWithCalcWithKnownTokenTypeNumber):
        (WebCore::CSSPropertyParserHelpers::consumeAngleRawWithKnownTokenTypeFunction):
        (WebCore::CSSPropertyParserHelpers::consumeAngleRawWithKnownTokenTypeDimension):
        (WebCore::CSSPropertyParserHelpers::consumeAngleRawWithKnownTokenTypeNumber):
        (WebCore::CSSPropertyParserHelpers::consumeAngleCSSPrimitiveValueWithCalcWithKnownTokenTypeFunction):
        (WebCore::CSSPropertyParserHelpers::consumeAngleCSSPrimitiveValueWithCalcWithKnownTokenTypeDimension):
        (WebCore::CSSPropertyParserHelpers::consumeAngleCSSPrimitiveValueWithCalcWithKnownTokenTypeNumber):
        (WebCore::CSSPropertyParserHelpers::consumeTimeCSSPrimitiveValueWithCalcWithKnownTokenTypeFunction):
        (WebCore::CSSPropertyParserHelpers::consumeTimeCSSPrimitiveValueWithCalcWithKnownTokenTypeDimension):
        (WebCore::CSSPropertyParserHelpers::consumeTimeCSSPrimitiveValueWithCalcWithKnownTokenTypeNumber):
        (WebCore::CSSPropertyParserHelpers::consumeResolutionCSSPrimitiveValueWithKnownTokenTypeDimension):
        (WebCore::CSSPropertyParserHelpers::consumeIntegerTypeRaw):
        (WebCore::CSSPropertyParserHelpers::consumeIntegerType):
        (WebCore::CSSPropertyParserHelpers::consumeIntegerRaw):
        (WebCore::CSSPropertyParserHelpers::consumeInteger):
        (WebCore::CSSPropertyParserHelpers::consumePositiveIntegerRaw):
        (WebCore::CSSPropertyParserHelpers::consumePositiveInteger):
        (WebCore::CSSPropertyParserHelpers::consumeNumberRaw):
        (WebCore::CSSPropertyParserHelpers::consumeNumber):
        (WebCore::CSSPropertyParserHelpers::consumeLengthRaw):
        (WebCore::CSSPropertyParserHelpers::consumeLength):
        (WebCore::CSSPropertyParserHelpers::consumePercentRaw):
        (WebCore::CSSPropertyParserHelpers::consumePercent):
        (WebCore::CSSPropertyParserHelpers::consumePercentWorkerSafe):
        (WebCore::CSSPropertyParserHelpers::canConsumeCalcValue):
        (WebCore::CSSPropertyParserHelpers::consumeAngleRaw):
        (WebCore::CSSPropertyParserHelpers::consumeAngle):
        (WebCore::CSSPropertyParserHelpers::consumeAngleWorkerSafe):
        (WebCore::CSSPropertyParserHelpers::consumeTime):
        (WebCore::CSSPropertyParserHelpers::consumeResolution):
        (WebCore::CSSPropertyParserHelpers::consumeAngleOrPercent):
        (WebCore::CSSPropertyParserHelpers::consumeLengthOrPercentRaw):
        (WebCore::CSSPropertyParserHelpers::consumeLengthOrPercent):
        (WebCore::CSSPropertyParserHelpers::consumeNumberAllowingSymbolTableIdent):
        (WebCore::CSSPropertyParserHelpers::consumePercentAllowingSymbolTableIdent):
        (WebCore::CSSPropertyParserHelpers::consumeAngleRawOrNumberRaw):
        (WebCore::CSSPropertyParserHelpers::consumeAngleRawOrNumberRawAllowingSymbolTableIdent):
        (WebCore::CSSPropertyParserHelpers::consumeNumberRawOrPercentRaw):
        (WebCore::CSSPropertyParserHelpers::consumeNumberRawOrPercentDividedBy100Raw):
        (WebCore::CSSPropertyParserHelpers::consumeNumberRawOrPercentRawAllowingSymbolTableIdent):
        (WebCore::CSSPropertyParserHelpers::consumeNumberRawOrPercentDividedBy100RawAllowingSymbolTableIdent):
        (WebCore::CSSPropertyParserHelpers::divisibleBy100):
        (WebCore::CSSPropertyParserHelpers::consumeFontWeightNumberRaw):
        (WebCore::CSSPropertyParserHelpers::consumeFontWeightNumber):
        (WebCore::CSSPropertyParserHelpers::consumeFontWeightNumberWorkerSafe):
        (WebCore::CSSPropertyParserHelpers::consumeIdentRaw):
        (WebCore::CSSPropertyParserHelpers::consumeIdent):
        (WebCore::CSSPropertyParserHelpers::consumeIdentWorkerSafe):
        (WebCore::CSSPropertyParserHelpers::consumeUrlAsStringView):
        (WebCore::CSSPropertyParserHelpers::consumeOptionalAlpha):
        (WebCore::CSSPropertyParserHelpers::consumeOptionalAlphaAllowingSymbolTableIdent):
        (WebCore::CSSPropertyParserHelpers::normalizeRGBComponentNumber):
        (WebCore::CSSPropertyParserHelpers::normalizeRGBComponentPercentage):
        (WebCore::CSSPropertyParserHelpers::consumeRelativeRGBComponent):
        (WebCore::CSSPropertyParserHelpers::clampRGBComponent):
        (WebCore::CSSPropertyParserHelpers::consumeRGBOrHSLOptionalAlpha):
        (WebCore::CSSPropertyParserHelpers::parseRelativeRGBParameters):
        (WebCore::CSSPropertyParserHelpers::parseRelativeHSLParameters):
        (WebCore::CSSPropertyParserHelpers::parseHSLParameters):
        (WebCore::CSSPropertyParserHelpers::parseRelativeHWBParameters):
        (WebCore::CSSPropertyParserHelpers::parseHWBParameters):
        (WebCore::CSSPropertyParserHelpers::parseRelativeLabParameters):
        (WebCore::CSSPropertyParserHelpers::parseRelativeLCHParameters):
        (WebCore::CSSPropertyParserHelpers::parseLCHParameters):
        (WebCore::CSSPropertyParserHelpers::parseColorFunctionForRGBTypes):
        (WebCore::CSSPropertyParserHelpers::consumeDeprecatedGradientColorStop):
        (WebCore::CSSPropertyParserHelpers::consumeCrossFade):
        (WebCore::CSSPropertyParserHelpers::consumeNumberOrPercentDividedBy100Raw): Deleted.
        (WebCore::CSSPropertyParserHelpers::consumeOptionalAlphaOrIdent): Deleted.
        (WebCore::CSSPropertyParserHelpers::consumeHue): Deleted.
        (WebCore::CSSPropertyParserHelpers::consumeHueOrIdent): Deleted.
        (WebCore::CSSPropertyParserHelpers::consumeNumberOrIdent): Deleted.
        (WebCore::CSSPropertyParserHelpers::consumePercentOrIdent): Deleted.
        (WebCore::CSSPropertyParserHelpers::consumeNumberOrPercentOrIdentNormalizedForRelativeRGB): Deleted.

2021-06-01  Chris Dumez  <cdumez@apple.com>

        Fix thread safety issues in MediaStreamAudioSourceNode
        https://bugs.webkit.org/show_bug.cgi?id=226476

        Reviewed by Youenn Fablet.

        Adopt thread safety analysis annotations in MediaStreamAudioSourceNode and fix
        bugs found by clang. In particular, the following issues were fixed:
        - setFormat() could modify m_sourceNumberOfChannels before locking on the main
          thread.
        - process() was accessing m_sourceNumberOfChannels / m_sourceSampleRate
          on the rendering thread *before* locking.

        * Modules/webaudio/MediaStreamAudioSourceNode.cpp:
        (WebCore::MediaStreamAudioSourceNode::setFormat):
        (WebCore::MediaStreamAudioSourceNode::process):
        * Modules/webaudio/MediaStreamAudioSourceNode.h:

2021-06-01  Chris Dumez  <cdumez@apple.com>

        Fix thread safety issues in WaveShaperProcessor
        https://bugs.webkit.org/show_bug.cgi?id=226478

        Reviewed by Youenn Fablet.

        Adopt thread safety analysis annotations in WaveShaperProcessor and fix bugs
        found by clang. In particular, the following issues were fixed:
        - WaveShaperDSPKernel::latencyTime() was failing to grab the lock before accessing
          the WaveShaperProcessor's oversample on the rendering thread, even though
          oversample gets modified on the main thread.
        - WaveShaperNode::propagatesSilence() was failing to grab the lock before accessing
          the WaveShaperProcessor's curve on the rendering thread, even though the curve
          gets modified on the main thread.

        * Modules/webaudio/AudioBasicProcessorNode.h:
        (WebCore::AudioBasicProcessorNode::processor const):
        * Modules/webaudio/WaveShaperDSPKernel.cpp:
        (WebCore::WaveShaperDSPKernel::process):
        (WebCore::WaveShaperDSPKernel::processCurve):
        (WebCore::WaveShaperDSPKernel::latencyTime const):
        * Modules/webaudio/WaveShaperDSPKernel.h:
        * Modules/webaudio/WaveShaperNode.cpp:
        (WebCore::WaveShaperNode::create):
        (WebCore::WaveShaperNode::setCurveForBindings):
        (WebCore::WaveShaperNode::curveForBindings):
        (WebCore::WaveShaperNode::setOversampleForBindings):
        (WebCore::WaveShaperNode::oversampleForBindings const):
        (WebCore::WaveShaperNode::propagatesSilence const):
        * Modules/webaudio/WaveShaperNode.h:
        * Modules/webaudio/WaveShaperNode.idl:
        * Modules/webaudio/WaveShaperProcessor.cpp:
        (WebCore::WaveShaperProcessor::setCurveForBindings):
        (WebCore::WaveShaperProcessor::setOversampleForBindings):
        (WebCore::WaveShaperProcessor::process):
        * Modules/webaudio/WaveShaperProcessor.h:

2021-06-01  Chris Dumez  <cdumez@apple.com>

        Fix thread safety issues in MediaElementAudioSourceNode
        https://bugs.webkit.org/show_bug.cgi?id=226475

        Reviewed by Youenn Fablet.

        Adopt thread safety analysis annotations in MediaElementAudioSourceNode and fix
        bugs found by clang. In particular, the following issues were fixed:
        - setFormat() was modifying m_muted / m_sourceNumberOfChannels / m_sourceSampleRate
          on the main thread without locking, even though those data members are accessed
          from the rendering thread.
        - process() was accessing  m_muted / m_sourceNumberOfChannels / m_sourceSampleRate
          on the rendering thread *before* locking.

        * Modules/webaudio/MediaElementAudioSourceNode.cpp:
        (WebCore::MediaElementAudioSourceNode::setFormat):
        (WebCore::MediaElementAudioSourceNode::process):
        * Modules/webaudio/MediaElementAudioSourceNode.h:

2021-06-01  Antti Koivisto  <antti@apple.com>

        Rename ComplexLineLayout to LegacyLineLayout
        https://bugs.webkit.org/show_bug.cgi?id=226482

        Reviewed by Alan Bujtas.

        Since we now handle most inline content with LFC, rename the legacy path as "legacy".

        * Headers.cmake:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * layout/integration/LayoutIntegrationInlineContentBuilder.cpp:
        (WebCore::LayoutIntegration::lineOverflowWidth):
        * rendering/InlineIterator.h:
        (WebCore::IsolateTracker::addFakeRunIfNecessary):
        (WebCore::InlineBidiResolver::appendRunInternal):
        * rendering/LegacyLineLayout.cpp: Renamed from Source/WebCore/rendering/ComplexLineLayout.cpp.
        (WebCore::LegacyLineLayout::LegacyLineLayout):
        (WebCore::LegacyLineLayout::~LegacyLineLayout):
        (WebCore::determineDirectionality):
        (WebCore::createRun):
        (WebCore::LegacyLineLayout::appendRunsForObject):
        (WebCore::LegacyLineLayout::createRootInlineBox):
        (WebCore::LegacyLineLayout::createAndAppendRootInlineBox):
        (WebCore::LegacyLineLayout::createInlineBoxForRenderer):
        (WebCore::dirtyLineBoxesForRenderer):
        (WebCore::parentIsConstructedOrHaveNext):
        (WebCore::LegacyLineLayout::createLineBoxes):
        (WebCore::endsWithHTMLSpaces):
        (WebCore::reachedEndOfTextRenderer):
        (WebCore::LegacyLineLayout::constructLine):
        (WebCore::LegacyLineLayout::textAlignmentForLine const):
        (WebCore::updateLogicalWidthForLeftAlignedBlock):
        (WebCore::updateLogicalWidthForRightAlignedBlock):
        (WebCore::updateLogicalWidthForCenterAlignedBlock):
        (WebCore::LegacyLineLayout::setMarginsForRubyRun):
        (WebCore::setLogicalWidthForTextRun):
        (WebCore::LegacyLineLayout::updateRubyForJustifiedText):
        (WebCore::LegacyLineLayout::computeExpansionForJustifiedText):
        (WebCore::LegacyLineLayout::updateLogicalWidthForAlignment):
        (WebCore::updateLogicalInlinePositions):
        (WebCore::LegacyLineLayout::computeInlineDirectionPositionsForLine):
        (WebCore::expansionBehaviorForInlineTextBox):
        (WebCore::applyExpansionBehavior):
        (WebCore::inlineAncestorHasStartBorderPaddingOrMargin):
        (WebCore::inlineAncestorHasEndBorderPaddingOrMargin):
        (WebCore::isLastInFlowRun):
        (WebCore::LegacyLineLayout::computeInlineDirectionPositionsForSegment):
        (WebCore::LegacyLineLayout::removeInlineBox const):
        (WebCore::LegacyLineLayout::computeBlockDirectionPositionsForLine):
        (WebCore::isCollapsibleSpace):
        (WebCore::findFirstTrailingSpace):
        (WebCore::LegacyLineLayout::handleTrailingSpaces):
        (WebCore::LegacyLineLayout::appendFloatingObjectToLastLine):
        (WebCore::notifyResolverToResumeInIsolate):
        (WebCore::setUpResolverToResumeInIsolate):
        (WebCore::constructBidiRunsForSegment):
        (WebCore::LegacyLineLayout::createLineBoxesFromBidiRuns):
        (WebCore::deleteLineRange):
        (WebCore::repaintDirtyFloats):
        (WebCore::LegacyLineLayout::layoutRunsAndFloats):
        (WebCore::LegacyLineLayout::restartLayoutRunsAndFloatsInRange):
        (WebCore::LegacyLineLayout::layoutRunsAndFloatsInRange):
        (WebCore::LegacyLineLayout::reattachCleanLineFloats):
        (WebCore::LegacyLineLayout::linkToEndLineIfNeeded):
        (WebCore::LegacyLineLayout::layoutLineBoxes):
        (WebCore::LegacyLineLayout::checkFloatInCleanLine):
        (WebCore::LegacyLineLayout::determineStartPosition):
        (WebCore::LegacyLineLayout::determineEndPosition):
        (WebCore::LegacyLineLayout::checkPaginationAndFloatsAtEndLine):
        (WebCore::LegacyLineLayout::lineWidthForPaginatedLineChanged const):
        (WebCore::LegacyLineLayout::matchedEndLine):
        (WebCore::LegacyLineLayout::addOverflowFromInlineChildren):
        (WebCore::LegacyLineLayout::lineCount const):
        (WebCore::LegacyLineLayout::lineCountUntil const):
        (WebCore::LegacyLineLayout::deleteEllipsisLineBoxes):
        (WebCore::LegacyLineLayout::checkLinesForTextOverflow):
        (WebCore::LegacyLineLayout::positionNewFloatOnLine):
        (WebCore::LegacyLineLayout::updateFragmentForLine const):
        (WebCore::LegacyLineLayout::style const):
        (WebCore::LegacyLineLayout::layoutContext const):
        * rendering/LegacyLineLayout.h: Renamed from Source/WebCore/rendering/ComplexLineLayout.h.
        (WebCore::LegacyLineLayout::lineBoxes):
        (WebCore::LegacyLineLayout::lineBoxes const):
        (WebCore::LegacyLineLayout::firstRootBox const):
        (WebCore::LegacyLineLayout::lastRootBox const):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::willBeDestroyed):
        (WebCore::RenderBlockFlow::layoutInlineChildren):
        (WebCore::RenderBlockFlow::startAlignedOffsetForLine):
        (WebCore::RenderBlockFlow::adjustLinePositionForPagination):
        (WebCore::RenderBlockFlow::styleDidChange):
        (WebCore::RenderBlockFlow::hitTestInlineChildren):
        (WebCore::RenderBlockFlow::addOverflowFromInlineChildren):
        (WebCore::RenderBlockFlow::inlineBlockBaseline const):
        (WebCore::RenderBlockFlow::lineCount const):
        (WebCore::RenderBlockFlow::paintInlineChildren):
        (WebCore::RenderBlockFlow::hasLines const):
        (WebCore::RenderBlockFlow::ensureLineBoxes):
        * rendering/RenderBlockFlow.h:
        (WebCore::RenderBlockFlow::firstRootBox const):
        (WebCore::RenderBlockFlow::lastRootBox const):
        (WebCore::RenderBlockFlow::hasLegacyLineLayout const):
        (WebCore::RenderBlockFlow::legacyLineLayout const):
        (WebCore::RenderBlockFlow::legacyLineLayout):
        (WebCore::RenderBlockFlow::hasComplexLineLayout const): Deleted.
        (WebCore::RenderBlockFlow::complexLineLayout const): Deleted.
        (WebCore::RenderBlockFlow::complexLineLayout): Deleted.
        * rendering/RenderText.cpp:
        (WebCore::RenderText::usesLegacyLineLayoutPath const):
        (WebCore::RenderText::usesComplexLineLayoutPath const): Deleted.
        * rendering/RenderText.h:
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::removeLineBoxFromRenderObject):
        (WebCore::RootInlineBox::extractLineBoxFromRenderObject):
        (WebCore::RootInlineBox::attachLineBoxToRenderObject):
        * rendering/line/LineBreaker.cpp:
        (WebCore::LineBreaker::skipLeadingWhitespace):
        * rendering/line/LineBreaker.h:
        (WebCore::LineBreaker::positionNewFloatOnLine):

2021-06-01  Sam Weinig  <weinig@apple.com>

        Support calc() on components inside relative color syntax colors
        https://bugs.webkit.org/show_bug.cgi?id=226272

        Reviewed by Darin Adler.

        Added new and updated test cases to fast/css/parsing-relative-color-syntax.html.

        Updates support for the CSS Color 5 "Relative Color Syntax" to support
        both calc() on components and component permutations within the syntax.

        This allows for things like:
        
            background: lch(from var(--primary-color) 60% calc(c * 0.8) h);

            or

            background: lch(from rebeccapurple g b r);

        To make this work, the calc() infrastructure now supports passing a CSSCalcSymbolTable
        which allows the logic in the parser to lookup unknown identifiers when parsing a value.
        The relative color syntax parsers can then build an appropriate CSSCalcSymbolTable filled
        with the components of the origin color.

        Since these calc() values are not serialized, this can all happen in the parser, but if
        we to be able serialize them in the future, CSSCalcPrimitiveValueNode could be updated
        to store the symbol name in addition to storing the value and type (or we could we could
        add a new node for it).

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * css/calc/CSSCalcSymbolTable.cpp: Added.
        * css/calc/CSSCalcSymbolTable.h: Added.
        Add CSSCalcSymbolTable which contains a mapping from CSSValueID to CSSUnitType/double pairs.

        * css/calc/CSSCalcExpressionNodeParser.cpp:
        (WebCore::CSSCalcExpressionNodeParser::parseValue):
        When trying to construct a value node, if the token is a identifier, use the new
        symbol table to look up a type/value to use instead. Use a switch to make things
        a bit more clear that differentiation is being done based on token type.

        * css/calc/CSSCalcExpressionNodeParser.h:
        Add reference to a CSSCalcSymbolTable to the parser. The parser should only ever be used
        on the stack, so this works well and allows us to avoid copying the table.

        * css/calc/CSSCalcValue.cpp:
        (WebCore::CSSCalcValue::create):
        * css/calc/CSSCalcValue.h:
        Pass the CSSCalcSymbolTable to the parser if one is provided. An overload was used
        to avoid #including CSSCalcSymbolTable.h in the header just to add a default value.

        * css/makevalues.pl:
        Give a concrete base of uint16_t to allow it to be forward declared and add DefaultHash
        and HashTraits to allow it to be used with HashTable. These match the definition of
        CSSPropertyID.

        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::CalcParser::CalcParser):
        (WebCore::CSSPropertyParserHelpers::consumeNumberRaw):
        (WebCore::CSSPropertyParserHelpers::consumePercentWorkerSafe):
        (WebCore::CSSPropertyParserHelpers::consumeAngleRaw):
        (WebCore::CSSPropertyParserHelpers::consumeAngleWorkerSafe):
        (WebCore::CSSPropertyParserHelpers::consumeAngleOrPercent):
        (WebCore::CSSPropertyParserHelpers::consumeOptionalAlphaOrIdent):
        (WebCore::CSSPropertyParserHelpers::consumeHueOrIdent):
        (WebCore::CSSPropertyParserHelpers::consumeNumberOrIdent):
        (WebCore::CSSPropertyParserHelpers::consumePercentOrIdent):
        (WebCore::CSSPropertyParserHelpers::consumeNumberOrPercentOrIdentNormalizedForRelativeRGB):
        (WebCore::CSSPropertyParserHelpers::parseRelativeRGBParameters):
        (WebCore::CSSPropertyParserHelpers::parseRelativeHSLParameters):
        (WebCore::CSSPropertyParserHelpers::parseRelativeHWBParameters):
        (WebCore::CSSPropertyParserHelpers::parseRelativeLabParameters):
        (WebCore::CSSPropertyParserHelpers::parseRelativeLCHParameters):
        (WebCore::CSSPropertyParserHelpers::extractChannelValue): Deleted.
        (WebCore::CSSPropertyParserHelpers::resolveRelativeColorChannel): Deleted.
        Rework relative color syntax parsing to allow permutation of channel symbols
        and use of the calc() symbol table support to allow passing in the channels.
        This makes the relatative color syntax variants much closer to the normal
        variants (with the exception of passing the symbol table) and a subsequent
        change will attempt to merge them further.

2021-06-01  Alan Bujtas  <zalan@apple.com>

        [LFC][TFC][Quirks] heightValueOfNearestContainingBlockWithFixedHeight should not need to cross formatting context boundary
        https://bugs.webkit.org/show_bug.cgi?id=226470

        Reviewed by Antti Koivisto.

        Now that the incoming vertical constraint is applied properly for the cell layout, we don't need to cross
        the formatting context boundary in heightValueOfNearestContainingBlockWithFixedHeight to check if the table
        box has fixed height value.

        * layout/formattingContexts/table/TableFormattingQuirks.cpp:
        (WebCore::Layout::TableFormattingQuirks::heightValueOfNearestContainingBlockWithFixedHeight const):

2021-05-27  Sergio Villar Senin  <svillar@igalia.com>

        Improve if condition in RenderReplaced::computeReplacedLogicalWidth
        https://bugs.webkit.org/show_bug.cgi?id=226325

        Reviewed by Darin Adler.

        Removed the check for intrinsicRatio as we're already inside a block in which intrinsicRatio
        is true. Also switched the position of the two conditions in the OR clause as it allows us
        to remove the check for computedHeightIsAuto. Last but not least, used a ternary operator
        to initialize the value of boxSizing instead of the if clause.

        No new tests as there is no change in functionality.

        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::computeReplacedLogicalWidth const):

2021-05-31  Dean Jackson  <dino@apple.com>

        [WebXR] Attach IOSurface to WebXROpaqueFramebuffer
        https://bugs.webkit.org/show_bug.cgi?id=225896
        <rdar://problem/78128289>

        Reviewed by Sam Weinig.

        Implement binding of incoming IOSurfaces (via FrameData)
        into the WebGL framebuffer that the page will use as
        a rendering target.

        Currently only single-sample (non-antialiased) buffers
        are supported and the canvas context must be WebGL 2.

        * Modules/webxr/WebXROpaqueFramebuffer.cpp:
        (WebCore::WebXROpaqueFramebuffer::startFrame): Create a texture if necessary, then
        bind its backing store to the incoming IOSurface, then hook it up to the framebuffer.
        (WebCore::WebXROpaqueFramebuffer::endFrame): Release the Pbuffer we used in startFrame.
        (WebCore::WebXROpaqueFramebuffer::setupFramebuffer): Add Cocoa+ANGLE specific implementation.
        * Modules/webxr/WebXROpaqueFramebuffer.h: Keep a member variable for the Pbuffer.

2021-05-31  Alan Bujtas  <zalan@apple.com>

        [LFC][TFC] Decouple stretching and final cell layouts
        https://bugs.webkit.org/show_bug.cgi?id=226452

        Reviewed by Antti Koivisto.

        Stretching layout is slightly different from the final cell layout.

        * layout/formattingContexts/table/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::setUsedGeometryForCells):
        (WebCore::Layout::TableFormattingContext::computeAndDistributeExtraSpace):
        (WebCore::Layout::TableFormattingContext::layoutCell): Deleted.
        * layout/formattingContexts/table/TableFormattingContext.h:
        * layout/formattingContexts/table/TableFormattingGeometry.cpp:
        (WebCore::Layout::TableFormattingGeometry::horizontalSpaceForCellContent const):
        (WebCore::Layout::TableFormattingGeometry::verticalSpaceForCellContent const):
        * layout/formattingContexts/table/TableFormattingGeometry.h:

2021-05-31  Alan Bujtas  <zalan@apple.com>

        [LFC] Tighten the constraint classes (ConstraintsForInFlowContent/ConstraintsForOutOfFlowContent)
        https://bugs.webkit.org/show_bug.cgi?id=226435

        Reviewed by Antti Koivisto.

        While logical height should always be available for out of flow content by design,
        the base inflow layout can't necessarily provide it. This height constraint is not even required/used in most of the layout systems,
        so let's move it to the derived class(es).

        * layout/LayoutContext.cpp:
        (WebCore::Layout::LayoutContext::layoutFormattingContextSubtree):
        * layout/LayoutUnits.h:
        * layout/formattingContexts/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeOutOfFlowVerticalGeometry):
        * layout/formattingContexts/FormattingGeometry.cpp:
        (WebCore::Layout::FormattingGeometry::outOfFlowNonReplacedVerticalGeometry const):
        (WebCore::Layout::FormattingGeometry::outOfFlowReplacedVerticalGeometry const):
        (WebCore::Layout::FormattingGeometry::inlineReplacedContentHeightAndMargin const):
        (WebCore::Layout::FormattingGeometry::inlineReplacedContentWidthAndMargin const):
        (WebCore::Layout::FormattingGeometry::constraintsForInFlowContent const):
        * layout/formattingContexts/block/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::layoutInFlowContent):
        (WebCore::Layout::BlockFormattingContext::computeStaticVerticalPosition):
        (WebCore::Layout::BlockFormattingContext::precomputeVerticalPositionForBoxAndAncestors):
        (WebCore::Layout::BlockFormattingContext::verticalPositionWithMargin const):
        * layout/formattingContexts/block/BlockFormattingContext.h:
        * layout/formattingContexts/block/BlockFormattingGeometry.cpp:
        (WebCore::Layout::BlockFormattingGeometry::staticVerticalPosition const):
        (WebCore::Layout::BlockFormattingGeometry::staticPosition const): Deleted.
        * layout/formattingContexts/block/BlockFormattingGeometry.h:
        * layout/formattingContexts/block/tablewrapper/TableWrapperBlockFormattingContext.cpp:
        (WebCore::Layout::TableWrapperBlockFormattingContext::layoutTableBox):
        (WebCore::Layout::TableWrapperBlockFormattingContext::computeHeightAndMarginForTableBox):
        * layout/formattingContexts/flex/FlexFormattingContext.cpp:
        (WebCore::Layout::FlexFormattingContext::sizeAndPlaceFlexItems):
        * layout/formattingContexts/inline/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::lineLayout):
        * layout/formattingContexts/table/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::layoutInFlowContent):
        (WebCore::Layout::TableFormattingContext::setUsedGeometryForCells):
        (WebCore::Layout::TableFormattingContext::setUsedGeometryForSections):
        (WebCore::Layout::TableFormattingContext::layoutCell):
        * layout/formattingContexts/table/TableFormattingContext.h:
        * layout/integration/LayoutIntegrationLineLayout.cpp:
        (WebCore::LayoutIntegration::LineLayout::layout):

2021-05-31  Aakash Jain  <aakash_jain@apple.com>

        REGRESSION(r278261): Broke windows build - follow-up fix
        https://bugs.webkit.org/show_bug.cgi?id=226477

        Unreviewed build fix.

        * css/calc/CSSCalcValue.cpp:

2021-05-31  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r278261.
        https://bugs.webkit.org/show_bug.cgi?id=226477

        Broke windows build

        Reverted changeset:

        "Support calc() on components inside relative color syntax
        colors"
        https://bugs.webkit.org/show_bug.cgi?id=226272
        https://trac.webkit.org/changeset/278261

2021-05-31  Chris Dumez  <cdumez@apple.com>

        Fix thread safety issues in ConvolverNode
        https://bugs.webkit.org/show_bug.cgi?id=226449

        Reviewed by Darin Adler.

        Adopt thread safety annotations in ConvolverNode and fix bugs found by clang.
        In particular, the following issues were found and fixed:
        - tailTime() / latencyTime() were accessing m_reverb on the audio thread without
          locking even though m_reverb gets modified on the main thread.
        - checkNumberOfChannelsForInput() was accessing m_buffer on the audio thread
          without locking even though m_buffer gets modified on the main thread.

        * Modules/webaudio/ConvolverNode.cpp:
        (WebCore::ConvolverNode::create):
        (WebCore::ConvolverNode::setBufferForBindings):
        (WebCore::ConvolverNode::setNormalizeForBindings):
        (WebCore::ConvolverNode::tailTime const):
        (WebCore::ConvolverNode::latencyTime const):
        (WebCore::ConvolverNode::checkNumberOfChannelsForInput):
        * Modules/webaudio/ConvolverNode.h:
        * Modules/webaudio/ConvolverNode.idl:

2021-05-31  Chris Dumez  <cdumez@apple.com>

        Drop PendingActivity data member from BaseAudioContext
        https://bugs.webkit.org/show_bug.cgi?id=226445

        Reviewed by Darin Adler.

        Drop PendingActivity data member from BaseAudioContext and instead have AudioContext / OfflineAudioContext
        override virtualHasPendingActivity() to keep their JS wrapper alive. I find that PendingActivity data members
        are too error prone and a frequent cause of leaks.

        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::AudioContext):
        (WebCore::AudioContext::startRendering):
        (WebCore::AudioContext::mayResumePlayback):
        (WebCore::AudioContext::suspendPlayback):
        (WebCore::AudioContext::virtualHasPendingActivity const):
        * Modules/webaudio/AudioContext.h:
        * Modules/webaudio/BaseAudioContext.cpp:
        (WebCore::BaseAudioContext::clear):
        (WebCore::BaseAudioContext::clearPendingActivity): Deleted.
        (WebCore::BaseAudioContext::setPendingActivity): Deleted.
        * Modules/webaudio/BaseAudioContext.h:
        * Modules/webaudio/OfflineAudioContext.cpp:
        (WebCore::OfflineAudioContext::startRendering):
        (WebCore::OfflineAudioContext::resumeRendering):
        (WebCore::OfflineAudioContext::didSuspendRendering):
        (WebCore::OfflineAudioContext::finishedRendering):
        (WebCore::OfflineAudioContext::virtualHasPendingActivity const):
        (WebCore::OfflineAudioContext::dispatchEvent): Deleted.
        * Modules/webaudio/OfflineAudioContext.h:

2021-05-31  Chris Dumez  <cdumez@apple.com>

        Fix thread safety issues in AudioBufferSourceNode
        https://bugs.webkit.org/show_bug.cgi?id=226448

        Reviewed by Darin Adler.

        Adopt thread safety analysis annotations in AudioBufferSourceNode and fix the bugs
        that were found by clang:
        - We were failing to grab the processLock when setting the loop / loopStart / loopEnd attributes
          on the main thread (Those are set by JS at any time).
        - propagatesSilence() was failing to grab the lock when checking m_buffer on the audio thread.

        * Modules/webaudio/AudioBufferSourceNode.cpp:
        (WebCore::AudioBufferSourceNode::process):
        (WebCore::AudioBufferSourceNode::renderSilenceAndFinishIfNotLooping):
        (WebCore::AudioBufferSourceNode::renderFromBuffer):
        (WebCore::AudioBufferSourceNode::setBuffer):
        (WebCore::AudioBufferSourceNode::setLoop):
        (WebCore::AudioBufferSourceNode::setLoopStart):
        (WebCore::AudioBufferSourceNode::setLoopEnd):
        (WebCore::AudioBufferSourceNode::adjustGrainParameters):
        (WebCore::AudioBufferSourceNode::totalPitchRate):
        (WebCore::AudioBufferSourceNode::propagatesSilence const):
        * Modules/webaudio/AudioBufferSourceNode.h:

2021-05-31  Chris Dumez  <cdumez@apple.com>

        Stop using WTF_IGNORES_THREAD_SAFETY_ANALYSIS in MediaRecorderPrivateWriter code
        https://bugs.webkit.org/show_bug.cgi?id=226446

        Reviewed by Darin Adler.

        Fold MediaRecorderPrivateWriter::clear() into the destructor since this is the
        only place it is called. This allows us to stop using WTF_IGNORES_THREAD_SAFETY_ANALYSIS
        since thread safety checks do not apply to destructors.

        * platform/mediarecorder/cocoa/MediaRecorderPrivateWriterCocoa.h:
        * platform/mediarecorder/cocoa/MediaRecorderPrivateWriterCocoa.mm:
        (WebCore::MediaRecorderPrivateWriter::~MediaRecorderPrivateWriter):
        (): Deleted.

2021-05-31  Chris Dumez  <cdumez@apple.com>

        Fix thread safety issues in OscillatorNode
        https://bugs.webkit.org/show_bug.cgi?id=226450

        Reviewed by Darin Adler.

        Adopt thread safety annotations in OscillatorNode and fix bugs found by clang.
        In particular, propagatesSilence() was failing to grab the lock before accessing
        m_periodicWave, which gets modified on the main thread.

        * Modules/webaudio/OscillatorNode.cpp:
        (WebCore::OscillatorNode::create):
        (WebCore::OscillatorNode::setTypeForBindings):
        (WebCore::OscillatorNode::propagatesSilence const):
        * Modules/webaudio/OscillatorNode.h:
        * Modules/webaudio/OscillatorNode.idl:

2021-05-31  Chris Dumez  <cdumez@apple.com>

        Fix thread safety issues in PannerNode
        https://bugs.webkit.org/show_bug.cgi?id=226455

        Reviewed by Darin Adler.

        Adopt thread safety annotations in PannerNode and fix bugs found by clang.
        In particular, the following issues were fixed:
        - tailTime() / latencyTime() were accessing m_panner on the audio thread without locking
          even though m_panner gets modified on the main thread.
        - process() was accessing panningModel and m_panner before locking, on the audio thread,
          even though those get modified on the main thread.
        - processOnlyAudioParams() was failing to grab the process lock.
        - requiresTailProcessing() may get called on the audio thread and was failing to grab
          the processLock before accessing m_panner, which gets modified on the main thread.

        * Modules/webaudio/PannerNode.cpp:
        (WebCore::PannerNode::create):
        (WebCore::PannerNode::PannerNode):
        (WebCore::PannerNode::process):
        (WebCore::PannerNode::processOnlyAudioParams):
        (WebCore::PannerNode::setPanningModelForBindings):
        (WebCore::PannerNode::setDistanceModelForBindings):
        (WebCore::PannerNode::setRefDistanceForBindings):
        (WebCore::PannerNode::setMaxDistanceForBindings):
        (WebCore::PannerNode::setRolloffFactorForBindings):
        (WebCore::PannerNode::setConeOuterGainForBindings):
        (WebCore::PannerNode::setConeOuterAngleForBindings):
        (WebCore::PannerNode::setConeInnerAngleForBindings):
        (WebCore::PannerNode::requiresTailProcessing const):
        (WebCore::PannerNode::tailTime const):
        (WebCore::PannerNode::latencyTime const):
        * Modules/webaudio/PannerNode.h:
        * Modules/webaudio/PannerNode.idl:
        * platform/audio/Distance.h:

2021-05-31  Adrian Perez de Castro  <aperez@igalia.com>

        Non-unified build fixes, very early June 2021 edition
        https://bugs.webkit.org/show_bug.cgi?id=226471

        Unreviewed non-unified build fixes.

        No new tests needed.

        * css/calc/CSSCalcOperationNode.cpp: Add missing CSSCalcValua.h, CSSPrimitiveValue.h,
        CSSUnits.h, and wtf/text/TextStream.h headers.
        * css/calc/CSSCalcOperationNode.h: Add missing CalcOperator.h header.
        * css/calc/CSSCalcValue.cpp: Add missing CSSCalcSymbolTable.h, CalcExpressionInversion.h,
        CalcExpressionNumber.h, and CalcExpressionOperation.h headers.
        * platform/calc/CalcExpressionInversion.h: Add missing wtf/TypeCasts.h header, remove
        unneeded <memory> header.
        * platform/calc/CalcExpressionNegation.h: Ditto.
        * platform/calc/CalcExpressionNumber.h: Add missing wtf/TypeCasts.h header.

2021-04-29  Sergio Villar Senin  <svillar@igalia.com>

        Enable <summary> to be a flex container
        https://bugs.webkit.org/show_bug.cgi?id=190065

        Reviewed by Antti Koivisto.

        Create grid or flex renderers for <summary> elements whenever display: {inline}-{grid|flex}
        is specified. All vendors but WebKit allowed it so it should be good for interoperability.

        * html/HTMLSummaryElement.cpp:
        (WebCore::HTMLSummaryElement::createElementRenderer): create the renderer specifying
        RenderElement::OnlyCreateBlockAndFlexboxRenderers.
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::createFor): do not create a RenderListItem for <summary> if display:list-item
        is used because they're already list items. Let it fallthrough to RenderBlockFlow creation.

2021-05-31  Alan Bujtas  <zalan@apple.com>

        [LFC][TFC] Move ensureTableGrid to TableFormattingState
        https://bugs.webkit.org/show_bug.cgi?id=226424

        Reviewed by Antti Koivisto.

        We can certainly have this much logic in a formatting state class.

        * layout/formattingContexts/table/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::ensureTableGrid): Deleted.
        * layout/formattingContexts/table/TableFormattingContext.h:
        * layout/formattingContexts/table/TableFormattingState.cpp:
        (WebCore::Layout::ensureTableGrid):
        (WebCore::Layout::TableFormattingState::TableFormattingState):

2021-05-31  Antti Koivisto  <antti@apple.com>

        Rename presentationAttributeStyle to presentationalHintStyle to match spec language
        https://bugs.webkit.org/show_bug.cgi?id=226467

        Reviewed by Sam Weinig.

        The HTML specification calls these "presentational hints", https://html.spec.whatwg.org/#presentational-hints.

        * dom/Attr.cpp:
        (WebCore::Attr::style):
        * dom/Element.cpp:
        (WebCore::Element::cloneAttributesFromElement):
        * dom/ElementData.cpp:
        (WebCore::ShareableElementData::ShareableElementData):
        (WebCore::UniqueElementData::UniqueElementData):
        * dom/ElementData.h:
        (WebCore::ElementData::presentationalHintStyleIsDirty const):
        (WebCore::ElementData::setPresentationalHintStyleIsDirty const):
        (WebCore::ElementData::presentationalHintStyle const):
        (WebCore::ElementData::presentationAttributeStyleIsDirty const): Deleted.
        (WebCore::ElementData::setPresentationAttributeStyleIsDirty const): Deleted.
        (WebCore::ElementData::presentationAttributeStyle const): Deleted.
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::attributeChanged):
        (WebCore::StyledElement::rebuildPresentationalHintStyle):
        (WebCore::StyledElement::addPropertyToPresentationalHintStyle):
        (WebCore::StyledElement::rebuildPresentationAttributeStyle): Deleted.
        (WebCore::StyledElement::addPropertyToPresentationAttributeStyle): Deleted.
        * dom/StyledElement.h:
        (WebCore::StyledElement::collectPresentationalHintsForAttribute):
        (WebCore::StyledElement::additionalPresentationalHintStyle const):
        (WebCore::StyledElement::hasPresentationalHintsForAttribute const):
        (WebCore::StyledElement::presentationalHintStyle const):
        (WebCore::StyledElement::additionalPresentationAttributeStyle const): Deleted.
        (WebCore::StyledElement::collectStyleForPresentationAttribute): Deleted.
        (WebCore::StyledElement::isPresentationAttribute const): Deleted.
        (WebCore::StyledElement::presentationAttributeStyle const): Deleted.
        * html/HTMLBRElement.cpp:
        (WebCore::HTMLBRElement::hasPresentationalHintsForAttribute const):
        (WebCore::HTMLBRElement::collectPresentationalHintsForAttribute):
        (WebCore::HTMLBRElement::isPresentationAttribute const): Deleted.
        (WebCore::HTMLBRElement::collectStyleForPresentationAttribute): Deleted.
        * html/HTMLBRElement.h:
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::hasPresentationalHintsForAttribute const):
        (WebCore::HTMLBodyElement::collectPresentationalHintsForAttribute):
        (WebCore::HTMLBodyElement::isPresentationAttribute const): Deleted.
        (WebCore::HTMLBodyElement::collectStyleForPresentationAttribute): Deleted.
        * html/HTMLBodyElement.h:
        * html/HTMLButtonElement.cpp:
        (WebCore::HTMLButtonElement::hasPresentationalHintsForAttribute const):
        (WebCore::HTMLButtonElement::isPresentationAttribute const): Deleted.
        * html/HTMLButtonElement.h:
        * html/HTMLDivElement.cpp:
        (WebCore::HTMLDivElement::collectPresentationalHintsForAttribute):
        (WebCore::HTMLDivElement::collectStyleForPresentationAttribute): Deleted.
        * html/HTMLDivElement.h:
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::applyBorderAttributeToStyle):
        (WebCore::HTMLElement::mapLanguageAttributeToLocale):
        (WebCore::HTMLElement::hasPresentationalHintsForAttribute const):
        (WebCore::HTMLElement::collectPresentationalHintsForAttribute):
        (WebCore::HTMLElement::applyAlignmentAttributeToStyle):
        (WebCore::HTMLElement::addHTMLLengthToStyle):
        (WebCore::HTMLElement::isPresentationAttribute const): Deleted.
        (WebCore::HTMLElement::collectStyleForPresentationAttribute): Deleted.
        * html/HTMLElement.h:
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::collectPresentationalHintsForAttribute):
        (WebCore::HTMLEmbedElement::collectStyleForPresentationAttribute): Deleted.
        * html/HTMLEmbedElement.h:
        * html/HTMLFontElement.cpp:
        (WebCore::HTMLFontElement::hasPresentationalHintsForAttribute const):
        (WebCore::HTMLFontElement::collectPresentationalHintsForAttribute):
        (WebCore::HTMLFontElement::isPresentationAttribute const): Deleted.
        (WebCore::HTMLFontElement::collectStyleForPresentationAttribute): Deleted.
        * html/HTMLFontElement.h:
        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::hasPresentationalHintsForAttribute const):
        (WebCore::HTMLFrameSetElement::collectPresentationalHintsForAttribute):
        (WebCore::HTMLFrameSetElement::isPresentationAttribute const): Deleted.
        (WebCore::HTMLFrameSetElement::collectStyleForPresentationAttribute): Deleted.
        * html/HTMLFrameSetElement.h:
        * html/HTMLHRElement.cpp:
        (WebCore::HTMLHRElement::hasPresentationalHintsForAttribute const):
        (WebCore::HTMLHRElement::collectPresentationalHintsForAttribute):
        (WebCore::HTMLHRElement::isPresentationAttribute const): Deleted.
        (WebCore::HTMLHRElement::collectStyleForPresentationAttribute): Deleted.
        * html/HTMLHRElement.h:
        * html/HTMLIFrameElement.cpp:
        (WebCore::HTMLIFrameElement::hasPresentationalHintsForAttribute const):
        (WebCore::HTMLIFrameElement::collectPresentationalHintsForAttribute):
        (WebCore::HTMLIFrameElement::isPresentationAttribute const): Deleted.
        (WebCore::HTMLIFrameElement::collectStyleForPresentationAttribute): Deleted.
        * html/HTMLIFrameElement.h:
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::hasPresentationalHintsForAttribute const):
        (WebCore::HTMLImageElement::collectPresentationalHintsForAttribute):
        (WebCore::HTMLImageElement::isPresentationAttribute const): Deleted.
        (WebCore::HTMLImageElement::collectStyleForPresentationAttribute): Deleted.
        * html/HTMLImageElement.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::hasPresentationalHintsForAttribute const):
        (WebCore::HTMLInputElement::collectPresentationalHintsForAttribute):
        (WebCore::HTMLInputElement::isPresentationAttribute const): Deleted.
        (WebCore::HTMLInputElement::collectStyleForPresentationAttribute): Deleted.
        * html/HTMLInputElement.h:
        * html/HTMLLIElement.cpp:
        (WebCore::HTMLLIElement::hasPresentationalHintsForAttribute const):
        (WebCore::HTMLLIElement::collectPresentationalHintsForAttribute):
        (WebCore::HTMLLIElement::isPresentationAttribute const): Deleted.
        (WebCore::HTMLLIElement::collectStyleForPresentationAttribute): Deleted.
        * html/HTMLLIElement.h:
        * html/HTMLMarqueeElement.cpp:
        (WebCore::HTMLMarqueeElement::hasPresentationalHintsForAttribute const):
        (WebCore::HTMLMarqueeElement::collectPresentationalHintsForAttribute):
        (WebCore::HTMLMarqueeElement::isPresentationAttribute const): Deleted.
        (WebCore::HTMLMarqueeElement::collectStyleForPresentationAttribute): Deleted.
        * html/HTMLMarqueeElement.h:
        * html/HTMLOListElement.cpp:
        (WebCore::HTMLOListElement::hasPresentationalHintsForAttribute const):
        (WebCore::HTMLOListElement::collectPresentationalHintsForAttribute):
        (WebCore::HTMLOListElement::isPresentationAttribute const): Deleted.
        (WebCore::HTMLOListElement::collectStyleForPresentationAttribute): Deleted.
        * html/HTMLOListElement.h:
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::hasPresentationalHintsForAttribute const):
        (WebCore::HTMLObjectElement::collectPresentationalHintsForAttribute):
        (WebCore::HTMLObjectElement::isPresentationAttribute const): Deleted.
        (WebCore::HTMLObjectElement::collectStyleForPresentationAttribute): Deleted.
        * html/HTMLObjectElement.h:
        * html/HTMLParagraphElement.cpp:
        (WebCore::HTMLParagraphElement::collectPresentationalHintsForAttribute):
        (WebCore::HTMLParagraphElement::collectStyleForPresentationAttribute): Deleted.
        * html/HTMLParagraphElement.h:
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::hasPresentationalHintsForAttribute const):
        (WebCore::HTMLPlugInElement::collectPresentationalHintsForAttribute):
        (WebCore::HTMLPlugInElement::isPresentationAttribute const): Deleted.
        (WebCore::HTMLPlugInElement::collectStyleForPresentationAttribute): Deleted.
        * html/HTMLPlugInElement.h:
        * html/HTMLPreElement.cpp:
        (WebCore::HTMLPreElement::hasPresentationalHintsForAttribute const):
        (WebCore::HTMLPreElement::collectPresentationalHintsForAttribute):
        (WebCore::HTMLPreElement::isPresentationAttribute const): Deleted.
        (WebCore::HTMLPreElement::collectStyleForPresentationAttribute): Deleted.
        * html/HTMLPreElement.h:
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::hasPresentationalHintsForAttribute const):
        (WebCore::HTMLSelectElement::isPresentationAttribute const): Deleted.
        * html/HTMLSelectElement.h:
        * html/HTMLTableCaptionElement.cpp:
        (WebCore::HTMLTableCaptionElement::collectPresentationalHintsForAttribute):
        (WebCore::HTMLTableCaptionElement::collectStyleForPresentationAttribute): Deleted.
        * html/HTMLTableCaptionElement.h:
        * html/HTMLTableCellElement.cpp:
        (WebCore::HTMLTableCellElement::hasPresentationalHintsForAttribute const):
        (WebCore::HTMLTableCellElement::collectPresentationalHintsForAttribute):
        (WebCore::HTMLTableCellElement::additionalPresentationalHintStyle const):
        (WebCore::HTMLTableCellElement::isPresentationAttribute const): Deleted.
        (WebCore::HTMLTableCellElement::collectStyleForPresentationAttribute): Deleted.
        (WebCore::HTMLTableCellElement::additionalPresentationAttributeStyle const): Deleted.
        * html/HTMLTableCellElement.h:
        * html/HTMLTableColElement.cpp:
        (WebCore::HTMLTableColElement::hasPresentationalHintsForAttribute const):
        (WebCore::HTMLTableColElement::collectPresentationalHintsForAttribute):
        (WebCore::HTMLTableColElement::additionalPresentationalHintStyle const):
        (WebCore::HTMLTableColElement::isPresentationAttribute const): Deleted.
        (WebCore::HTMLTableColElement::collectStyleForPresentationAttribute): Deleted.
        (WebCore::HTMLTableColElement::additionalPresentationAttributeStyle const): Deleted.
        * html/HTMLTableColElement.h:
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::collectPresentationalHintsForAttribute):
        (WebCore::HTMLTableElement::hasPresentationalHintsForAttribute const):
        (WebCore::HTMLTableElement::additionalPresentationalHintStyle const):
        (WebCore::HTMLTableElement::collectStyleForPresentationAttribute): Deleted.
        (WebCore::HTMLTableElement::isPresentationAttribute const): Deleted.
        (WebCore::HTMLTableElement::additionalPresentationAttributeStyle const): Deleted.
        * html/HTMLTableElement.h:
        * html/HTMLTablePartElement.cpp:
        (WebCore::HTMLTablePartElement::hasPresentationalHintsForAttribute const):
        (WebCore::HTMLTablePartElement::collectPresentationalHintsForAttribute):
        (WebCore::HTMLTablePartElement::isPresentationAttribute const): Deleted.
        (WebCore::HTMLTablePartElement::collectStyleForPresentationAttribute): Deleted.
        * html/HTMLTablePartElement.h:
        * html/HTMLTableSectionElement.cpp:
        (WebCore::HTMLTableSectionElement::additionalPresentationalHintStyle const):
        (WebCore::HTMLTableSectionElement::additionalPresentationAttributeStyle const): Deleted.
        * html/HTMLTableSectionElement.h:
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::hasPresentationalHintsForAttribute const):
        (WebCore::HTMLTextAreaElement::collectPresentationalHintsForAttribute):
        (WebCore::HTMLTextAreaElement::isPresentationAttribute const): Deleted.
        (WebCore::HTMLTextAreaElement::collectStyleForPresentationAttribute): Deleted.
        * html/HTMLTextAreaElement.h:
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::adjustInnerTextStyle const):
        * html/HTMLUListElement.cpp:
        (WebCore::HTMLUListElement::hasPresentationalHintsForAttribute const):
        (WebCore::HTMLUListElement::collectPresentationalHintsForAttribute):
        (WebCore::HTMLUListElement::isPresentationAttribute const): Deleted.
        (WebCore::HTMLUListElement::collectStyleForPresentationAttribute): Deleted.
        * html/HTMLUListElement.h:
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::collectPresentationalHintsForAttribute):
        (WebCore::HTMLVideoElement::hasPresentationalHintsForAttribute const):
        (WebCore::HTMLVideoElement::collectStyleForPresentationAttribute): Deleted.
        (WebCore::HTMLVideoElement::isPresentationAttribute const): Deleted.
        * html/HTMLVideoElement.h:
        * inspector/agents/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::buildObjectForAttributesStyle):
        * mathml/MathMLElement.cpp:
        (WebCore::MathMLElement::hasPresentationalHintsForAttribute const):
        (WebCore::MathMLElement::collectPresentationalHintsForAttribute):
        (WebCore::MathMLElement::isPresentationAttribute const): Deleted.
        (WebCore::MathMLElement::collectStyleForPresentationAttribute): Deleted.
        * mathml/MathMLElement.h:
        * style/ElementRuleCollector.cpp:
        (WebCore::Style::ElementRuleCollector::matchAllRules):
        * style/MatchedDeclarationsCache.cpp:
        (WebCore::Style::MatchedDeclarationsCache::sweep):
        * style/StyleSharingResolver.cpp:
        (WebCore::Style::SharingResolver::canShareStyleWithElement const):
        (WebCore::Style::SharingResolver::sharingCandidateHasIdenticalStyleAffectingAttributes const):
        * svg/SVGCircleElement.cpp:
        (WebCore::SVGCircleElement::svgAttributeChanged):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::hasPresentationalHintsForAttribute const):
        (WebCore::SVGElement::collectPresentationalHintsForAttribute):
        (WebCore::SVGElement::isPresentationAttribute const): Deleted.
        (WebCore::SVGElement::collectStyleForPresentationAttribute): Deleted.
        * svg/SVGElement.h:
        (WebCore::SVGElement::invalidateSVGPresentationalHintStyle):
        (WebCore::SVGElement::invalidateSVGPresentationAttributeStyle): Deleted.
        * svg/SVGEllipseElement.cpp:
        (WebCore::SVGEllipseElement::svgAttributeChanged):
        * svg/SVGFilterElement.cpp:
        (WebCore::SVGFilterElement::svgAttributeChanged):
        * svg/SVGForeignObjectElement.cpp:
        (WebCore::SVGForeignObjectElement::svgAttributeChanged):
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::svgAttributeChanged):
        * svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::svgAttributeChanged):
        * svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::svgAttributeChanged):
        * svg/SVGRectElement.cpp:
        (WebCore::SVGRectElement::svgAttributeChanged):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::svgAttributeChanged):
        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::hasPresentationalHintsForAttribute const):
        (WebCore::SVGTextContentElement::collectPresentationalHintsForAttribute):
        (WebCore::SVGTextContentElement::isPresentationAttribute const): Deleted.
        (WebCore::SVGTextContentElement::collectStyleForPresentationAttribute): Deleted.
        * svg/SVGTextContentElement.h:
        * svg/SVGTextPositioningElement.cpp:
        (WebCore::SVGTextPositioningElement::collectPresentationalHintsForAttribute):
        (WebCore::SVGTextPositioningElement::hasPresentationalHintsForAttribute const):
        (WebCore::SVGTextPositioningElement::collectStyleForPresentationAttribute): Deleted.
        (WebCore::SVGTextPositioningElement::isPresentationAttribute const): Deleted.
        * svg/SVGTextPositioningElement.h:
        * svg/properties/SVGAttributeAnimator.cpp:
        (WebCore::SVGAttributeAnimator::invalidateStyle):

2021-05-31  Miguel Gomez  <magomez@igalia.com>

        [GStreamer] Incorrect rendering of VP9 with transparency
        https://bugs.webkit.org/show_bug.cgi?id=225961

        Reviewed by Žan Doberšek.

        Fix the rendering of videos with transparency. This is done both AC and non AC modes and
        with and without GSTREAMER_GL enabled.

        On AC mode and using GSTREAMER_GL, a new option is added to TextureMapperGL and TextureMapperShaderProgram
        to support premultiplying the components of a pixel. This is required because GStreamer uses straight alpha,
        and we need it premultiplied in order to perform the correct blending blending of the video frames. Then we
        use that new option to render video frames. This new option is also used when copying the video frame into
        an external texture if premultiplyAlpha is requested.

        On non AC mode, or when GStreamer-gl is disabled, add support to ImageGStreamerCairo to premultiply the alpha
        of the video frame before creating the cairo surface to paint, and pass the appropriate composite operator when
        drawing with alpha.

        Test: media/video-with-alpha.html

        * platform/graphics/gstreamer/GStreamerVideoFrameHolder.cpp:
        (WebCore::GstVideoFrameHolder::GstVideoFrameHolder):
        * platform/graphics/gstreamer/ImageGStreamerCairo.cpp:
        (WebCore::ImageGStreamer::ImageGStreamer):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::pushTextureToCompositor):
        (WebCore::MediaPlayerPrivateGStreamer::paint): update the caps of the conversion to make them match the format
        expected by cairo, so we can avoid a component swap.
        (WebCore::MediaPlayerPrivateGStreamer::copyVideoTextureToPlatformTexture):
        * platform/graphics/gstreamer/VideoTextureCopierGStreamer.cpp:
        (WebCore::VideoTextureCopierGStreamer::copyVideoTextureToPlatformTexture):
        * platform/graphics/gstreamer/VideoTextureCopierGStreamer.h:
        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGL::drawTexture):
        * platform/graphics/texmap/TextureMapperGL.h:
        * platform/graphics/texmap/TextureMapperShaderProgram.cpp:
        (WebCore::TextureMapperShaderProgram::create):
        * platform/graphics/texmap/TextureMapperShaderProgram.h:

2021-05-31  Rob Buis  <rbuis@igalia.com>

        Treat width: intrinsic as non definite
        https://bugs.webkit.org/show_bug.cgi?id=226367

        Reviewed by Darin Adler.

        Treat width: intrinsic as non definite in
        childMainSizeIsDefinite.

        Test: fast/css/flex-box-intrinsic-width-crash.html

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::childMainSizeIsDefinite):

2021-05-31  Youenn Fablet  <youenn@apple.com>

        Go to network in case fetch event is not yet responded when being destroyed instead of failing the load
        https://bugs.webkit.org/show_bug.cgi?id=226374
        <rdar://78298472>

        Reviewed by Alex Christensen.

        In case worker is terminated, instead of failing fetch events that are pending a response, we should go to the network.
        This mirrors what is already done in ServiceWorkerFetchTask.

        This can for instance happen in case a lot of fetches are done in parallel on the same service worker.
        The service worker will do the fetch itself but given there are lots of fetches, some fetch might not start until other loads are complete.
        This may trigger the fetch timeout which might then trigger terminating the worker.
        We should probably revisit our fetch timeout policy now that we have added worker spin detection.

        Test: http/wpt/service-workers/fetch-worker-terminate.https.html

        * testing/ServiceWorkerInternals.cpp:
        (WebCore::ServiceWorkerInternals::terminate):
        (WebCore::ServiceWorkerInternals::waitForFetchEventToFinish):
        * testing/ServiceWorkerInternals.h:
        * testing/ServiceWorkerInternals.idl:
        * workers/service/FetchEvent.cpp:
        (WebCore::FetchEvent::~FetchEvent):
        Update logging to only log the case where respondWith is called but fetch event is destroyed before processing the response.
        Otherwise, we would log the case of respondWith being never called, which is happening often and leads to go to the network.
        (WebCore::FetchEvent::processResponse):
        * workers/service/FetchEvent.h:
        * workers/service/context/ServiceWorkerFetch.cpp:
        (WebCore::ServiceWorkerFetch::processResponse):

2021-05-30  Wenson Hsieh  <wenson_hsieh@apple.com>

        REGRESSION (r258118): SVG paths that contain a single move command incorrect client bounding rects
        https://bugs.webkit.org/show_bug.cgi?id=226447
        rdar://72112744

        Reviewed by Alan Bujtas.

        r258118 introduced a fast path for computing the bounding rect of a `WebCore::Path` without having to
        materialize a platform path object (e.g. `CGPathRef` on platforms that use CoreGraphics). To do this, we
        introduce `InlinePathData` -- a variant capable of representing several types of simple `Path` objects without
        allocating a platform path.

        However, in the case where a `Path` only consists of a single `moveTo` command, this fast path for computing the
        bounding rect currently returns the zero rect (an empty rect at the origin), rather than an empty rect at the
        location we've moved to. This causes the offset of the bounding rect of an SVG path element that contains only a
        single `M` drawing command to be incorrect.

        Simply fix this by returning an empty rect that is offset by the `moveTo` location, rather than the origin.

        Test: fast/svg/bounding-rect-for-path-with-only-move-command.html

        * platform/graphics/Path.cpp:
        (WebCore::Path::boundingRectFromInlineData const):

2021-05-30  Youenn Fablet  <youenn@apple.com>

        Add logging to allow relating a HTMLMediaElement to a MediaStream
        https://bugs.webkit.org/show_bug.cgi?id=226373

        Reviewed by Eric Carlson.

        Update logging to print the ID of the MediaStream being played by the HTMLMediaElement.

        * Modules/mediastream/MediaStream.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::loadResource):

2021-05-30  Sam Weinig  <weinig@apple.com>

        Use SortedArrayMap in parseColorContrastFunctionParameters
        https://bugs.webkit.org/show_bug.cgi?id=226444

        Reviewed by Darin Adler.

        Use SortedArrayMap to remove some boilerplate and allow for a future where
        this list gets big and the map can switch to a binary search automatically.

        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::parseColorContrastFunctionParameters):

2021-05-30  Sam Weinig  <weinig@apple.com>

        Remove support for no longer specific color(lab ...) syntax
        https://bugs.webkit.org/show_bug.cgi?id=226439

        Reviewed by Darin Adler.

        Remove support for parsing the color(lab ...) syntax.

        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::parseColorFunctionParameters):
        (WebCore::CSSPropertyParserHelpers::parseColorFunctionForLabParameters): Deleted.

2021-05-30  Cameron McCormack  <heycam@apple.com>

        Fix some comment typos
        https://bugs.webkit.org/show_bug.cgi?id=226443

        Reviewed by Sam Weinig.

        Trivial fixes for comment typos I noticed over the past couple of
        months.

        * page/scrolling/ScrollingStateTree.h:
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawPlatformImage):
        (WebCore::GraphicsContext::drawPlatformPattern):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::hitTestList):
        * rendering/RenderLayer.h:

2021-05-30  Chris Dumez  <cdumez@apple.com>

        Drop PendingActivity from ScriptProcessorNode
        https://bugs.webkit.org/show_bug.cgi?id=226442

        Reviewed by Darin Adler.

        ScriptProcessorNode already has a virtualHasPendingActivity() implementation that keeps
        the JS wrapper alive as long has the audio context is running and there is an "audioprocess"
        event listener registered on the node. Therefore, there is no need for an additional
        PendingActivity data member.

        * Modules/webaudio/AudioNode.cpp:
        (WebCore::AudioNode::markNodeForDeletionIfNecessary):
        * Modules/webaudio/AudioNode.h:
        (WebCore::AudioNode::didBecomeMarkedForDeletion): Deleted.
        * Modules/webaudio/ScriptProcessorNode.cpp:
        (WebCore::ScriptProcessorNode::ScriptProcessorNode):
        (WebCore::ScriptProcessorNode::didBecomeMarkedForDeletion): Deleted.
        * Modules/webaudio/ScriptProcessorNode.h:

2021-05-30  Chris Dumez  <cdumez@apple.com>

        Remove some dead code from BaseAudioContext / AudioContext
        https://bugs.webkit.org/show_bug.cgi?id=226441

        Reviewed by Sam Weinig.

        * Modules/webaudio/AudioContext.h:
        * Modules/webaudio/AudioNode.cpp:
        (WebCore::AudioNode::connect):
        * Modules/webaudio/AudioScheduledSourceNode.cpp:
        (WebCore::AudioScheduledSourceNode::updateSchedulingInfo):
        (WebCore::AudioScheduledSourceNode::finish):
        * Modules/webaudio/BaseAudioContext.cpp:
        (WebCore::BaseAudioContext::sourceNodeWillBeginPlayback):
        (WebCore::BaseAudioContext::refSourceNode): Deleted.
        (WebCore::BaseAudioContext::derefSourceNode): Deleted.
        (WebCore::BaseAudioContext::incrementActiveSourceCount): Deleted.
        (WebCore::BaseAudioContext::decrementActiveSourceCount): Deleted.
        * Modules/webaudio/BaseAudioContext.h:
        (WebCore::BaseAudioContext::sampleRate const):
        (WebCore::BaseAudioContext::activeSourceCount const): Deleted.
        (WebCore::BaseAudioContext::incrementConnectionCount): Deleted.
        (WebCore::BaseAudioContext::connectionCount const): Deleted.

2021-05-30  Chris Dumez  <cdumez@apple.com>

        Unreviewed, tweak slightly incorrect assertion added in r278233.

        The assertion was hitting flakily on the bots.

        * Modules/webaudio/BaseAudioContext.cpp:
        (WebCore::BaseAudioContext::addTailProcessingNode):

2021-05-30  Sam Weinig  <weinig@apple.com>

        Add additional target luminance keywords for color-contrast() added for https://github.com/w3c/csswg-drafts/issues/6311
        https://bugs.webkit.org/show_bug.cgi?id=226438

        Reviewed by Chris Dumez.

        Add newly spec'd target luminance keywords. 

        * css/CSSValueKeywords.in:
        Add AAA and AAA-large keywords.

        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::parseColorContrastFunctionParameters):
        Add target luminance mappings for "AAA" -> 7 and "AAA-large" -> 4.5

2021-05-30  Sam Weinig  <weinig@apple.com>

        Support calc() on components inside relative color syntax colors
        https://bugs.webkit.org/show_bug.cgi?id=226272

        Reviewed by Darin Adler.

        Added new and updated test cases to fast/css/parsing-relative-color-syntax.html.

        Updates support for the CSS Color 5 "Relative Color Syntax" to support
        both calc() on components and component permutations within the syntax.

        This allows for things like:
        
            background: lch(from var(--primary-color) 60% calc(c * 0.8) h);

            or

            background: lch(from rebeccapurple g b r);

        To make this work, the calc() infrastructure now supports passing a CSSCalcSymbolTable
        which allows the logic in the parser to lookup unknown identifiers when parsing a value.
        The relative color syntax parsers can then build an appropriate CSSCalcSymbolTable filled
        with the components of the origin color.

        Since these calc() values are not serialized, this can all happen in the parser, but if
        we to be able serialize them in the future, CSSCalcPrimitiveValueNode could be updated
        to store the symbol name in addition to storing the value and type (or we could we could
        add a new node for it).

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * css/calc/CSSCalcSymbolTable.cpp: Added.
        * css/calc/CSSCalcSymbolTable.h: Added.
        Add CSSCalcSymbolTable which contains a mapping from CSSValueID to CSSUnitType/double pairs.

        * css/calc/CSSCalcExpressionNodeParser.cpp:
        (WebCore::CSSCalcExpressionNodeParser::parseValue):
        When trying to construct a value node, if the token is a identifier, use the new
        symbol table to look up a type/value to use instead. Use a switch to make things
        a bit more clear that differentiation is being done based on token type.

        * css/calc/CSSCalcExpressionNodeParser.h:
        Add reference to a CSSCalcSymbolTable to the parser. The parser should only ever be used
        on the stack, so this works well and allows us to avoid copying the table.

        * css/calc/CSSCalcValue.cpp:
        (WebCore::CSSCalcValue::create):
        * css/calc/CSSCalcValue.h:
        Pass the CSSCalcSymbolTable to the parser if one is provided. An overload was used
        to avoid #including CSSCalcSymbolTable.h in the header just to add a default value.

        * css/makevalues.pl:
        Give a concrete base of uint16_t to allow it to be forward declared and add DefaultHash
        and HashTraits to allow it to be used with HashTable. These match the definition of
        CSSPropertyID.

        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::CalcParser::CalcParser):
        (WebCore::CSSPropertyParserHelpers::consumeNumberRaw):
        (WebCore::CSSPropertyParserHelpers::consumePercentWorkerSafe):
        (WebCore::CSSPropertyParserHelpers::consumeAngleRaw):
        (WebCore::CSSPropertyParserHelpers::consumeAngleWorkerSafe):
        (WebCore::CSSPropertyParserHelpers::consumeAngleOrPercent):
        (WebCore::CSSPropertyParserHelpers::consumeOptionalAlphaOrIdent):
        (WebCore::CSSPropertyParserHelpers::consumeHueOrIdent):
        (WebCore::CSSPropertyParserHelpers::consumeNumberOrIdent):
        (WebCore::CSSPropertyParserHelpers::consumePercentOrIdent):
        (WebCore::CSSPropertyParserHelpers::consumeNumberOrPercentOrIdentNormalizedForRelativeRGB):
        (WebCore::CSSPropertyParserHelpers::parseRelativeRGBParameters):
        (WebCore::CSSPropertyParserHelpers::parseRelativeHSLParameters):
        (WebCore::CSSPropertyParserHelpers::parseRelativeHWBParameters):
        (WebCore::CSSPropertyParserHelpers::parseRelativeLabParameters):
        (WebCore::CSSPropertyParserHelpers::parseRelativeLCHParameters):
        (WebCore::CSSPropertyParserHelpers::extractChannelValue): Deleted.
        (WebCore::CSSPropertyParserHelpers::resolveRelativeColorChannel): Deleted.
        Rework relative color syntax parsing to allow permutation of channel symbols
        and use of the calc() symbol table support to allow passing in the channels.
        This makes the relatative color syntax variants much closer to the normal
        variants (with the exception of passing the symbol table) and a subsequent
        change will attempt to merge them further.

2021-05-30  Dean Jackson  <dino@apple.com>

        [WebXR] Provide a way to bind and unbind IOSurfaces to ANGLE Pbuffers
        https://bugs.webkit.org/show_bug.cgi?id=226423
        <rdar://problem/78652783>

        Reviewed by Sam Weinig.

        WebXR on Cocoa platforms gets framebuffer texture targets via
        IOSurfaces. Those must be attached to ANGLE Pbuffers, which are
        then bound to GL textures. There is already some code in
        GraphicsContextGL (and in the CoreVideo classes) to do this, but
        this is an attempt to make a generic function that will handle all
        cases.

        * platform/graphics/cocoa/GraphicsContextGLOpenGLCocoa.mm:
        (WebCore::GraphicsContextGLOpenGL::createPbufferAndAttachIOSurface):
        (WebCore::GraphicsContextGLOpenGL::destroyPbufferAndDetachIOSurface):
        * platform/graphics/opengl/GraphicsContextGLOpenGL.h:

2021-05-30  Dean Jackson  <dino@apple.com>

        [WebXR] No need for opaqueTexture when USE(IOSURFACE_FOR_XR_LAYER_DATA)
        https://bugs.webkit.org/show_bug.cgi?id=226405
        <rdar://problem/78636950>

        Reviewed by Tim Horton.

        When USE(IOSURFACE_FOR_XR_LAYER_DATA) is true, we'll get our
        textures via a different method - we'll create them based on an
        IOSurface we receive. This means that when we're in a
        USE(IOSURFACE_FOR_XR_LAYER_DATA) configuration, we don't need the
        opaqueTexture property on FrameData.

        * platform/xr/PlatformXR.h: Put opaqueTexture in the #else clause.
        (PlatformXR::Device::FrameData::LayerData::encode const):
        (PlatformXR::Device::FrameData::LayerData::decode):
        * testing/WebFakeXRDevice.cpp:
        (WebCore::SimulatedXRDevice::frameTimerFired):
        * Modules/webxr/WebXROpaqueFramebuffer.cpp: Guard use of opaqueTexture.

2021-05-30  Dean Jackson  <dino@apple.com>

        [WebXR] invalidateFramebuffer is not the same as clearing contents
        https://bugs.webkit.org/show_bug.cgi?id=226422
        <rdar://problem/78652351>

        Reviewed by Sam Weinig.

        The WebXR specification says that buffer contents must be cleared
        before each frame. The code currently does glInvalidateFramebuffer
        to wipe the attachments, which isn't the same thing (and produces
        an error since it tries to invalidate attachments that don't exist).

        Remove the call to invalidateFramebuffer for the moment since it
        causes a glError. Add a FIXME to replace it with explicit calls
        to glClear. I expect most content does this already, so it is unlikely
        anything will break.

        * Modules/webxr/WebXROpaqueFramebuffer.cpp:
        (WebCore::WebXROpaqueFramebuffer::startFrame): Remove the call to
        invalidateFramebuffer.

2021-05-30  Dean Jackson  <dino@apple.com>

        [WebXR] Recommended framebuffer width incorrectly scaled
        https://bugs.webkit.org/show_bug.cgi?id=226408
        <rdar://problem/78638309>

        Reviewed by Tim Horton.

        When WebXRWebGLLayer creates the WebXROpaqueFramebuffer, it asks
        the session for the recommended framebuffer size. It then
        multiplies the width by 2 - I assume because there are two eyes.
        However, the specification [1] says that it is a "best estimate of
        the WebGL framebuffer resolution large enough to contain all of the
        session’s XRViews". So it should be the session that makes account
        for the multiple views, not the framebuffer.

        Since this would almost certainly break existing content using the OpenXR
        backend, I edited the implementation to include the 2x width scale.

        * Modules/webxr/WebXRWebGLLayer.cpp:
        (WebCore::createOpaqueFramebuffer): Remove the "* 2".
        * platform/xr/openxr/PlatformXROpenXR.cpp: Add a "* 2" to not break content.

2021-05-30  Darin Adler  <darin@apple.com>

        Remove WTF::Optional synonym for std::optional, using that class template directly instead
        https://bugs.webkit.org/show_bug.cgi?id=226433

        Reviewed by Chris Dumez.

        * <many files>: Let the do-webcore-rename script rename Optional<> to std::optional<>.

2021-05-29  Chris Dumez  <cdumez@apple.com>

        Adopt clang thread safety annotations in WTF::DataMutex
        https://bugs.webkit.org/show_bug.cgi?id=226431

        Reviewed by Darin Adler.

        Update code base due to DataMutex API changes.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::performTaskAtMediaTime):
        (WebCore::MediaPlayerPrivateGStreamer::triggerRepaint):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webKitWebSrcConstructed):
        (webKitWebSrcGetProperty):
        (webKitWebSrcSetContext):
        (webKitWebSrcCreate):
        (webKitWebSrcMakeRequest):
        (webKitWebSrcStop):
        (webKitWebSrcGetSize):
        (webKitWebSrcIsSeekable):
        (webKitWebSrcDoSeek):
        (webKitWebSrcQuery):
        (webKitWebSrcUnLock):
        (webKitWebSrcUnLockStop):
        (webKitWebSrcSetMediaPlayer):
        (webKitSrcPassedCORSAccessCheck):
        (CachedResourceStreamingClient::responseReceived):
        (CachedResourceStreamingClient::dataReceived):
        (CachedResourceStreamingClient::accessControlCheckFailed):
        (CachedResourceStreamingClient::loadFailed):
        (CachedResourceStreamingClient::loadFinished):
        (webKitSrcWouldTaintOrigin):
        * platform/graphics/gstreamer/mse/MediaSourceTrackGStreamer.cpp:
        (WebCore::MediaSourceTrackGStreamer::isReadyForMoreSamples):
        (WebCore::MediaSourceTrackGStreamer::notifyWhenReadyForMoreSamples):
        (WebCore::MediaSourceTrackGStreamer::enqueueObject):
        (WebCore::MediaSourceTrackGStreamer::clearQueue):
        * platform/graphics/gstreamer/mse/MediaSourceTrackGStreamer.h:
        * platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamer.cpp:
        (webKitMediaSrcActivateMode):
        (webKitMediaSrcPadLinked):
        (webKitMediaSrcLoop):
        (webKitMediaSrcStreamFlush):

2021-05-29  Sam Weinig  <weinig@apple.com>

        Split calc() related files into 1-class per file structure
        https://bugs.webkit.org/show_bug.cgi?id=226421

        Reviewed by Chris Dumez.

        It's bothered me for a while that the calc related classes (both in css/
        and in platform/) were bundled all in two big files. This change splits
        them all out into their own header and implementation files that match
        their name, and puts them in new calc/ subdirectories (css/calc/... and
        platform/calc/...). This should hopefully make the modifications I need
        to make to calc() to support relative color syntax a little easier.

        * Headers.cmake:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSCalculationValue.cpp: Removed.
        * css/CSSCalculationValue.h: Removed.
        * css/CSSGradientValue.cpp:
        * css/CSSPrimitiveValue.cpp:
        * css/CSSPrimitiveValueMappings.h:
        * css/CSSValue.cpp:
        * css/calc: Added.
        * css/calc/CSSCalcCategoryMapping.cpp: Added.
        (WebCore::calcUnitCategory):
        (WebCore::calculationCategoryForCombination):
        (WebCore::canonicalUnitTypeForCalculationCategory):
        (WebCore::hasDoubleValue):
        * css/calc/CSSCalcCategoryMapping.h: Added.
        * css/calc/CSSCalcExpressionNode.cpp: Added.
        (WebCore::operator<<):
        (WebCore::prettyPrintNode):
        (WebCore::prettyPrintNodes):
        * css/calc/CSSCalcExpressionNode.h: Added.
        (WebCore::CSSCalcExpressionNode::equals const):
        (WebCore::CSSCalcExpressionNode::category const):
        (WebCore::CSSCalcExpressionNode::CSSCalcExpressionNode):
        * css/calc/CSSCalcExpressionNodeParser.cpp: Added.
        (WebCore::CSSCalcExpressionNodeParser::parseCalc):
        (WebCore::CSSCalcExpressionNodeParser::operatorValue):
        (WebCore::checkDepthAndIndex):
        (WebCore::CSSCalcExpressionNodeParser::parseCalcFunction):
        (WebCore::CSSCalcExpressionNodeParser::parseValue):
        (WebCore::CSSCalcExpressionNodeParser::parseCalcValue):
        (WebCore::CSSCalcExpressionNodeParser::parseCalcProduct):
        (WebCore::CSSCalcExpressionNodeParser::parseCalcSum):
        * css/calc/CSSCalcExpressionNodeParser.h: Added.
        (WebCore::CSSCalcExpressionNodeParser::CSSCalcExpressionNodeParser):
        * css/calc/CSSCalcInvertNode.cpp: Added.
        (WebCore::CSSCalcInvertNode::createCalcExpression const):
        (WebCore::CSSCalcInvertNode::doubleValue const):
        (WebCore::CSSCalcInvertNode::computeLengthPx const):
        (WebCore::CSSCalcInvertNode::dump const):
        * css/calc/CSSCalcInvertNode.h: Added.
        * css/calc/CSSCalcNegateNode.cpp: Added.
        (WebCore::CSSCalcNegateNode::createCalcExpression const):
        (WebCore::CSSCalcNegateNode::dump const):
        * css/calc/CSSCalcNegateNode.h: Added.
        * css/calc/CSSCalcOperationNode.cpp: Added.
        (WebCore::determineCategory):
        (WebCore::categoryForInvert):
        (WebCore::resolvedTypeForMinOrMaxOrClamp):
        (WebCore::isSamePair):
        (WebCore::sortingCategoryForType):
        (WebCore::sortingCategory):
        (WebCore::primitiveTypeForCombination):
        (WebCore::conversionToAddValuesWithTypes):
        (WebCore::functionFromOperator):
        (WebCore::CSSCalcOperationNode::create):
        (WebCore::CSSCalcOperationNode::createSum):
        (WebCore::CSSCalcOperationNode::createProduct):
        (WebCore::CSSCalcOperationNode::createMinOrMaxOrClamp):
        (WebCore::CSSCalcOperationNode::hoistChildrenWithOperator):
        (WebCore::CSSCalcOperationNode::canCombineAllChildren const):
        (WebCore::CSSCalcOperationNode::combineChildren):
        (WebCore::CSSCalcOperationNode::simplify):
        (WebCore::CSSCalcOperationNode::simplifyRecursive):
        (WebCore::CSSCalcOperationNode::simplifyNode):
        (WebCore::CSSCalcOperationNode::primitiveType const):
        (WebCore::CSSCalcOperationNode::createCalcExpression const):
        (WebCore::CSSCalcOperationNode::doubleValue const):
        (WebCore::CSSCalcOperationNode::computeLengthPx const):
        (WebCore::CSSCalcOperationNode::collectDirectComputationalDependencies const):
        (WebCore::CSSCalcOperationNode::collectDirectRootComputationalDependencies const):
        (WebCore::CSSCalcOperationNode::buildCSSText):
        (WebCore::functionPrefixForOperator):
        (WebCore::CSSCalcOperationNode::buildCSSTextRecursive):
        (WebCore::CSSCalcOperationNode::dump const):
        (WebCore::CSSCalcOperationNode::equals const):
        (WebCore::CSSCalcOperationNode::evaluateOperator):
        * css/calc/CSSCalcOperationNode.h: Added.
        * css/calc/CSSCalcPrimitiveValueNode.cpp: Added.
        (WebCore::CSSCalcPrimitiveValueNode::create):
        (WebCore::CSSCalcPrimitiveValueNode::customCSSText const):
        (WebCore::CSSCalcPrimitiveValueNode::primitiveType const):
        (WebCore::CSSCalcPrimitiveValueNode::CSSCalcPrimitiveValueNode):
        (WebCore::CSSCalcPrimitiveValueNode::isNumericValue const):
        (WebCore::CSSCalcPrimitiveValueNode::isNegative const):
        (WebCore::CSSCalcPrimitiveValueNode::negate):
        (WebCore::CSSCalcPrimitiveValueNode::invert):
        (WebCore::CSSCalcPrimitiveValueNode::add):
        (WebCore::CSSCalcPrimitiveValueNode::multiply):
        (WebCore::CSSCalcPrimitiveValueNode::convertToUnitType):
        (WebCore::CSSCalcPrimitiveValueNode::canonicalizeUnit):
        (WebCore::CSSCalcPrimitiveValueNode::createCalcExpression const):
        (WebCore::CSSCalcPrimitiveValueNode::doubleValue const):
        (WebCore::CSSCalcPrimitiveValueNode::computeLengthPx const):
        (WebCore::CSSCalcPrimitiveValueNode::collectDirectComputationalDependencies const):
        (WebCore::CSSCalcPrimitiveValueNode::collectDirectRootComputationalDependencies const):
        (WebCore::CSSCalcPrimitiveValueNode::isZero const):
        (WebCore::CSSCalcPrimitiveValueNode::equals const):
        (WebCore::CSSCalcPrimitiveValueNode::dump const):
        * css/calc/CSSCalcPrimitiveValueNode.h: Added.
        * css/calc/CSSCalcValue.cpp: Added.
        (WebCore::createBlendHalf):
        (WebCore::createCSS):
        (WebCore::CSSCalcValue::CSSCalcValue):
        (WebCore::CSSCalcValue::category const):
        (WebCore::CSSCalcValue::primitiveType const):
        (WebCore::CSSCalcValue::createCalculationValue const):
        (WebCore::CSSCalcValue::setPermittedValueRange):
        (WebCore::CSSCalcValue::collectDirectComputationalDependencies const):
        (WebCore::CSSCalcValue::collectDirectRootComputationalDependencies const):
        (WebCore::CSSCalcValue::customCSSText const):
        (WebCore::CSSCalcValue::equals const):
        (WebCore::CSSCalcValue::clampToPermittedRange const):
        (WebCore::CSSCalcValue::doubleValue const):
        (WebCore::CSSCalcValue::computeLengthPx const):
        (WebCore::CSSCalcValue::isCalcFunction):
        (WebCore::CSSCalcValue::dump const):
        (WebCore::CSSCalcValue::create):
        (WebCore::operator<<):
        * css/calc/CSSCalcValue.h: Added.
        * css/parser/CSSPropertyParserHelpers.cpp:
        * platform/CalculationValue.cpp: Removed.
        * platform/CalculationValue.h: Removed.
        * platform/Length.cpp:
        * platform/calc: Added.
        * platform/calc/CalcExpressionBlendLength.cpp: Added.
        (WebCore::CalcExpressionBlendLength::CalcExpressionBlendLength):
        (WebCore::CalcExpressionBlendLength::evaluate const):
        (WebCore::CalcExpressionBlendLength::operator== const):
        (WebCore::CalcExpressionBlendLength::dump const):
        * platform/calc/CalcExpressionBlendLength.h: Added.
        (WebCore::operator==):
        * platform/calc/CalcExpressionInversion.cpp: Added.
        (WebCore::CalcExpressionInversion::evaluate const):
        (WebCore::CalcExpressionInversion::dump const):
        (WebCore::CalcExpressionInversion::operator== const):
        (WebCore::operator==):
        * platform/calc/CalcExpressionInversion.h: Added.
        * platform/calc/CalcExpressionLength.cpp: Added.
        (WebCore::CalcExpressionLength::evaluate const):
        (WebCore::CalcExpressionLength::operator== const):
        (WebCore::CalcExpressionLength::dump const):
        * platform/calc/CalcExpressionLength.h: Added.
        (WebCore::CalcExpressionLength::CalcExpressionLength):
        (WebCore::operator==):
        * platform/calc/CalcExpressionNegation.cpp: Added.
        (WebCore::CalcExpressionNegation::evaluate const):
        (WebCore::CalcExpressionNegation::operator== const):
        (WebCore::CalcExpressionNegation::dump const):
        (WebCore::operator==):
        * platform/calc/CalcExpressionNegation.h: Added.
        * platform/calc/CalcExpressionNode.cpp: Added.
        (WebCore::operator<<):
        * platform/calc/CalcExpressionNode.h: Added.
        (WebCore::CalcExpressionNode::type const):
        (WebCore::CalcExpressionNode::CalcExpressionNode):
        * platform/calc/CalcExpressionNumber.cpp: Added.
        (WebCore::CalcExpressionNumber::evaluate const):
        (WebCore::CalcExpressionNumber::dump const):
        (WebCore::CalcExpressionNumber::operator== const):
        * platform/calc/CalcExpressionNumber.h: Added.
        (WebCore::CalcExpressionNumber::CalcExpressionNumber):
        (WebCore::operator==):
        * platform/calc/CalcExpressionOperation.cpp: Added.
        (WebCore::CalcExpressionOperation::evaluate const):
        (WebCore::CalcExpressionOperation::operator== const):
        (WebCore::operator==):
        (WebCore::CalcExpressionOperation::dump const):
        * platform/calc/CalcExpressionOperation.h: Added.
        (WebCore::CalcExpressionOperation::CalcExpressionOperation):
        * platform/calc/CalcOperator.cpp: Added.
        (WebCore::operator<<):
        * platform/calc/CalcOperator.h: Added.
        * platform/calc/CalculationCategory.cpp: Added.
        (WebCore::operator<<):
        * platform/calc/CalculationCategory.h: Added.
        * platform/calc/CalculationValue.cpp: Added.
        (WebCore::CalculationValue::create):
        (WebCore::CalculationValue::CalculationValue):
        (WebCore::CalculationValue::evaluate const):
        (WebCore::operator==):
        (WebCore::operator<<):
        * platform/calc/CalculationValue.h: Added.
        (WebCore::CalculationValue::shouldClampToNonNegative const):
        (WebCore::CalculationValue::expression const):
        * style/StyleBuilderConverter.h:

2021-05-29  Cameron McCormack  <heycam@apple.com>

        Rename Internals.mainThreadScrollingReasons to synchronousScrollingReasons
        https://bugs.webkit.org/show_bug.cgi?id=226415

        Reviewed by Simon Fraser.

        Brings the name into accordance with the term the C++ code uses.

        * testing/Internals.cpp:
        (WebCore::Internals::synchronousScrollingReasons const):
        * testing/Internals.h:
        * testing/Internals.idl:

2021-05-28  Darin Adler  <darin@apple.com>

        Clients of optional should use has_value instead of relying on hasValue macro
        https://bugs.webkit.org/show_bug.cgi?id=226395

        Reviewed by Chris Dumez.

        In some files we are touching, moved from Optional to std::optional, but doing
        that consistently in files we are not otherwise modifying is out of scope here.

        In some places, use has_value instead of hasValue. In others, improved further
        by not using has_value explicitly when it's clearer to do so. Wasn't 100%
        consistent about that, but did aim to cover 100% of the hasValue call sites.

        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::create): Don't use hasValue.
        * Modules/webxr/WebXRFrame.cpp:
        (WebCore::WebXRFrame::getViewerPose): Ditto.
        (WebCore::WebXRFrame::getPose): Ditto.
        * Modules/webxr/WebXRGamepad.cpp:
        (WebCore::WebXRGamepad::WebXRGamepad): Ditto.

        * Modules/webxr/WebXRInputSource.cpp:
        (WebCore::WebXRInputSource::requiresInputSourceChange): Use has_value.
        * bindings/js/DOMPromiseProxy.h:
        (WebCore::DOMPromiseProxy<IDLType>::isFulfilled const): Ditto.
        (WebCore::DOMPromiseProxy<IDLUndefined>::isFulfilled const): Ditto.
        (WebCore::DOMPromiseProxyWithResolveCallback<IDLType>::isFulfilled const): Ditto.
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneDeserializer::readTerminal): Ditto.

        * css/CSSFontFaceSet.cpp:
        (WebCore::CSSFontFaceSet::addToFacesLookupTable): Removed unneeded double check
        of optional value. !x and !x.has_value() check the same thing.
        (WebCore::CSSFontFaceSet::remove): Ditto.
        (WebCore::CSSFontFaceSet::fontFace): Simplified code with extra local variables
        to use an idiom that does not use hasValue. Since using *, ->, or value() on an
        optional already asserts, there is no need to explicitly assert in the caller.

        * css/CSSGradientValue.cpp:
        (WebCore::GradientStop::isSpecified const): Use has_value.

        * css/CSSSegmentedFontFace.cpp:
        (WebCore::CSSSegmentedFontFace::fontRanges): Removed unneeded calls to hasValue.

        * css/FontFace.cpp:
        (WebCore::FontFace::family const): Use has_value.
        (WebCore::FontFace::style const): Ditto.
        (WebCore::FontFace::weight const): Ditto.
        (WebCore::FontFace::stretch const): Ditto.
        (WebCore::FontFace::unicodeRange const): Ditto.
        (WebCore::FontFace::featureSettings const): Ditto.
        (WebCore::FontFace::display const): Ditto.
        * css/parser/CSSSelectorParser.cpp:
        (WebCore::consumeANPlusB): Ditto.
        * display/css/DisplayStyle.h: Ditto.
        * dom/DataTransferItemList.h: Ditto.
        * dom/Document.cpp:
        (WebCore::Document::updateHighlightPositions): Ditto.
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::addEventListener): Ditto.
        * editing/AlternativeTextController.cpp:
        (WebCore::AlternativeTextController::hasPendingCorrection const): Ditto.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyInlineStyle): Don't call hasValue.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::captionDisplayMode): Ditto.
        * html/ImageBitmap.h: Ditto.

        * inspector/agents/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::setScreenSizeOverride): Use has_value.
        * layout/LayoutPhase.cpp:
        (WebCore::Layout::PhaseScope::PhaseScope): Ditto.
        * layout/formattingContexts/inline/InlineContentBreaker.cpp:
        (WebCore::Layout::InlineContentBreaker::tryBreakingTextRun const): Ditto.
        * layout/formattingContexts/inline/InlineLine.h: Ditto.
        * loader/CrossOriginPreflightResultCache.cpp:
        (WebCore::parseAccessControlMaxAge): Ditto.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::defaultWheelEventHandler): Ditto.
        * page/ios/ContentChangeObserver.cpp:
        (WebCore::ContentChangeObserver::StyleChangeScope::~StyleChangeScope): Ditto.
        * page/scrolling/ScrollSnapOffsetsInfo.cpp:
        (WebCore::closestSnapOffsetWithInfoAndAxis): Ditto.

        * platform/ScrollController.cpp:
        (WebCore::ScrollController::adjustScrollDestination): Don't use hasValue.

        * platform/cocoa/SystemBattery.mm:
        (WebCore::systemHasBattery): Use has_value.
        (WebCore::systemHasAC): Use has_value.
        * platform/graphics/Gradient.h: Ditto.
        * platform/graphics/ImageSource.h: Ditto.

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::wouldTaintOrigin const): Changed idiom to not use hasValue.

        * platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp:
        (setGLContext): Do not use hasValue.
        * platform/graphics/gstreamer/GStreamerRegistryScanner.cpp:
        (WebCore::GStreamerRegistryScanner::ElementFactories::hasElementForMediaType const): Ditto.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::playbackPosition const): Ditto.
        (WebCore::MediaPlayerPrivateGStreamer::performTaskAtMediaTime): Ditto.
        (WebCore::MediaPlayerPrivateGStreamer::triggerRepaint): Ditto.

        * platform/graphics/gstreamer/eme/CDMProxyThunder.cpp:
        (WebCore::CDMProxyThunder::getDecryptionSession const): Use has_value.
        * platform/graphics/gstreamer/eme/CDMThunder.cpp:
        (WebCore::ParsedResponseMessage::hasType const): Use has_value.
        (WebCore::CDMInstanceSessionThunder::cdmInstanceThunder const): Use
        a pointer for the erturn value instead of Optional<&>. This hasn't
        compiled since we switched to std::optional so I suspect this code is
        not compiled by EWS or the buildbot.
        * platform/graphics/gstreamer/eme/CDMThunder.h: Updated to match above.

        * platform/graphics/gstreamer/mse/AppendPipeline.cpp:
        (WebCore::AppendPipeline::parseDemuxerSrcPadCaps): Use value_or.
        (WebCore::AppendPipeline::appsinkCapsChanged): Do not use has_value.
        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:
        (WebCore::MediaPlayerPrivateGStreamerMSE::trackDetected): Ditto.

        * platform/graphics/transforms/TransformState.h: Use has_value.
        * platform/ios/VideoFullscreenInterfaceAVKit.mm:
        (WebCore::supportsPictureInPicture): Ditto.
        * platform/mac/NSScrollerImpDetails.mm:
        (WebCore::ScrollerStyle::recommendedScrollerStyle): Ditto.
        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::isSystemPreview const): Ditto.
        * platform/xr/openxr/OpenXRInputSource.cpp:
        (PlatformXR::OpenXRInputSource::getInputSource const): Ditto.
        * rendering/EventRegion.h: Ditto.

        * rendering/GridTrackSizingAlgorithm.h: Remove unnecessary assertion, since
        the * operator already does the assertion.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::canComputePercentageFlexBasis): Use has_value.
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::setExplicitValue): Ditto.
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::systemFocusRingColor): Ditto.
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::removeAnonymousWrappersForInlineChildrenIfNeeded): Ditto.

        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::createSVGTransformFromMatrix): Changed idiom to not
        call hasValue.
        * svg/SVGTransform.h: Ditto.
        * testing/WebFakeXRDevice.cpp:
        (WebCore::WebFakeXRDevice::setViews): Ditto.

2021-05-29  Alan Bujtas  <zalan@apple.com>

        [LFC][TFC] Do not include vertical spacing when resolving percent height for table content
        https://bugs.webkit.org/show_bug.cgi?id=226365

        Reviewed by Antti Koivisto.

        <table style="height: 100px; border-spacing: 10px;"><tr><td style="height: 100%"></td></tr></table>
        The <td>'s 100% height is resolved against 100px - (2 * 10px) -> 80px;

        Test: fast/layoutformattingcontext/table-with-percent-columns-and-spacing.html

        * layout/formattingContexts/table/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::TableFormattingContext):
        * layout/formattingContexts/table/TableFormattingContext.h:
        * layout/formattingContexts/table/TableFormattingGeometry.cpp:
        (WebCore::Layout::TableFormattingGeometry::TableFormattingGeometry):
        (WebCore::Layout::TableFormattingGeometry::computedCellBorder const):
        * layout/formattingContexts/table/TableFormattingGeometry.h:
        (WebCore::Layout::TableFormattingGeometry::formattingContext const):
        * layout/formattingContexts/table/TableFormattingQuirks.cpp:
        (WebCore::Layout::TableFormattingQuirks::heightValueOfNearestContainingBlockWithFixedHeight const):
        * layout/formattingContexts/table/TableFormattingQuirks.h:
        (WebCore::Layout::TableFormattingQuirks::formattingContext const):

2021-05-29  Alan Bujtas  <zalan@apple.com>

        [LFC] Transition containing block for loops to range loops
        https://bugs.webkit.org/show_bug.cgi?id=226315

        Reviewed by Antti Koivisto.

        Add support for stayWithin.

        * layout/floats/FloatingContext.cpp:
        (WebCore::Layout::FloatingContext::mapTopLeftToFloatingStateRoot const):
        * layout/formattingContexts/FormattingGeometry.cpp:
        (WebCore::Layout::FormattingGeometry::computedHeightValue const):
        * layout/formattingContexts/block/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::usedAvailableWidthForFloatAvoider):
        * layout/layouttree/LayoutBox.cpp:
        (WebCore::Layout::Box::isDescendantOf const):
        * layout/layouttree/LayoutBox.h:
        * layout/layouttree/LayoutContainingBlockChainIterator.h:
        (WebCore::Layout::LayoutContainingBlockChainIteratorAdapter::begin):
        (WebCore::Layout::LayoutContainingBlockChainIteratorAdapter::end):
        (WebCore::Layout::LayoutContainingBlockChainIterator::LayoutContainingBlockChainIterator):
        (WebCore::Layout::LayoutContainingBlockChainIteratorAdapter::LayoutContainingBlockChainIteratorAdapter):
        (WebCore::Layout::containingBlockChain):

2021-05-28  Wenson Hsieh  <wenson_hsieh@apple.com>

        Web process terminates when attempting to log in on bankid.no
        https://bugs.webkit.org/show_bug.cgi?id=226411
        rdar://77419432

        Reviewed by Chris Dumez.

        On bankid.no, we hit an erroneous MESSAGE_CHECK after decoding and applying an `EndClipToDrawingCommands` while
        the display list replayer's `m_maskImageBuffer` is null. This may occur as a result of the following sequence of
        events:

        1.  We call into `clipToDrawingCommands` inside `CanvasRenderingContext2DBase`, while drawing text with either
            a gradient or pattern fill style.

        2.  A `BeginClipToDrawingCommands` item is decoded and handled in the GPU process; we create and store a new
            mask image buffer on the display list replayer in the GPU process.

        3.  When we decode the `DrawGlyphs` item while drawing into the mask buffer, we see that the resource identifier
            corresponding to the font is missing from the resource cache in the GPU process, and subsequently go to
            sleep while we wait for the resource to arrive.

        4.  The web font data arrives in the GPU process, and we add it to the cache; this allows us to continue
            processing the display list from where we paused replay in step (3).

        5.  Eventually, we handle the `EndClipToDrawingCommands` item; however, since this is now happening underneath
            a different GPU process wakeup message than in (2), our mask image buffer from (1) is missing. This not only
            causes all of the prior drawing commands to target the canvas' image buffer rather than the mask image
            buffer, but also causes us to hit a `MESSAGE_CHECK` and terminate the web process.

        To fix this, we add some DisplayList::Replayer::Delegate method hooks to call out into the replayer client when
        a mask image buffer has been created or cleared out; in the GPU process, we then use these client hooks to keep
        track of the current mask image buffer that is the target of display list replayer.

        If we go to sleep and then resume display list processing later for any reason, we then pass this mask image
        buffer back to the display list replayer upon construction, and simply let the display list replayer paint into
        the maks image buffer's context.

        Test: fast/canvas/fill-gradient-text-with-web-font.html

        * platform/graphics/displaylists/DisplayListReplayer.cpp:
        (WebCore::DisplayList::Replayer::Replayer):
        (WebCore::DisplayList::Replayer::applyItem):

        Call into the client hooks below.

        * platform/graphics/displaylists/DisplayListReplayer.h:
        (WebCore::DisplayList::Replayer::Replayer):

        When initializing a DisplayList::Replayer, make it possible to take in an initial mask image buffer as well.

        (WebCore::DisplayList::Replayer::Delegate::didCreateMaskImageBuffer):
        (WebCore::DisplayList::Replayer::Delegate::didResetMaskImageBuffer):

        Add new replayer delegate hooks to inform the clients layer when the replayer's mask image buffer has been
        created or cleared out. See WebKit ChangeLog for more information.

2021-05-28  Chris Dumez  <cdumez@apple.com>

        Regression: Raw AudioBufferSourceNode playback causes repeated crackling sound
        https://bugs.webkit.org/show_bug.cgi?id=222098
        <rdar://problem/74546471>

        Reviewed by Darin Adler.

        The issue was due to certain audio nodes (such as AudioBufferSourceNode) staying in the audio
        graph after they were no longer needed. As a result, the audio graph was becoming larger and
        larger and the audio performance should degrade due to us traversing this increasingly large
        graph.

        The audio nodes that had trouble getting removed from the graphs were tail processing nodes.
        Those are nodes that may still produce output for a while after they no longer have any
        inputs. PannerNode and DelayNode are example of such nodes.

        When a Node is no longer useful (the node no longer has any connections, m_connectionRefCount
        is 0), we call disableOutputsIfNecessary() on it to disable its outputs and avoid doing any
        processing of these outputs since they no longer have an input. disableOutputsIfNecessary()
        would normally call disableOutputs() (if not already disabled) but there was an exception
        in the case where the node requires tail processing. For such nodes, you wouldn't want to
        disable them until they've finished processing their tail.

        The issue was that once those nodes had finished processing their tail, we wouldn't come
        back to them and disable their outputs later on. As a result, we would process more and
        more (silent) nodes and the audio performance would seriously deteriorate.

        To address this, we now add the node to the context's list of tail processing nodes in
        disableOutputsIfNecessary() if the node requires tail processing. After each rendering
        quantum, we go through those tail processing nodes and check if they have finished
        processing their tail. If they have, we go ahead and disable their outputs at this point
        and remove them from the list.

        This is modeled after what Blink is doing for tail processing nodes in:
        - https://github.com/chromium/chromium/blob/master/third_party/blink/renderer/modules/webaudio/deferred_task_handler.cc

        I have verified that on the following demo, the performance no longer deteriorates after
        a while:
        - https://jsfiddle.net/KrisJohnson/s5vL24o1/123/

        * Modules/webaudio/AudioNode.cpp:
        (WebCore::AudioNode::enableOutputsIfNecessary):
        (WebCore::AudioNode::disableOutputsIfNecessary):
        * Modules/webaudio/AudioNode.h:
        (WebCore::AudioNode::isTailProcessing const):
        (WebCore::AudioNode::setIsTailProcessing):
        * Modules/webaudio/BaseAudioContext.cpp:
        (WebCore::BaseAudioContext::uninitialize):
        (WebCore::BaseAudioContext::handlePostRenderTasks):
        (WebCore::BaseAudioContext::addTailProcessingNode):
        (WebCore::BaseAudioContext::removeTailProcessingNode):
        (WebCore::BaseAudioContext::updateTailProcessingNodes):
        (WebCore::BaseAudioContext::disableOutputsForFinishedTailProcessingNodes):
        (WebCore::BaseAudioContext::finishTailProcessing):
        * Modules/webaudio/BaseAudioContext.h:
        (WebCore::BaseAudioContext::TailProcessingNode::TailProcessingNode):
        (WebCore::BaseAudioContext::TailProcessingNode::~TailProcessingNode):
        (WebCore::BaseAudioContext::TailProcessingNode::operator-> const):
        (WebCore::BaseAudioContext::TailProcessingNode::operator== const):

2021-05-28  Chris Dumez  <cdumez@apple.com>

        DelayDSPKernel::process() is slow
        https://bugs.webkit.org/show_bug.cgi?id=226358

        Reviewed by Darin Adler.

        When I profiled the demo at https://jsfiddle.net/KrisJohnson/s5vL24o1/123/ (in the context of Bug 222098),
        I noticed that 20% of the CPU time was spent under DelayDSPKernel::process().

        To improve this, we now vectorize DelayDSPKernel::process() in the common case where there is no automation
        and the delay time is constant.

        The implementation is very similar to the one in Blink:
        - https://github.com/chromium/chromium/blob/master/third_party/blink/renderer/platform/audio/audio_delay_dsp_kernel.cc

        Some differences compared to the Blink implementation:
        - I did not vectorize the A-rate case for simplicity. It is not as common and it is more complicated.
          We may consider doing this in the future if really needed.
        - On Cocoa, we leveage Accelerate's vDSP_vintb() to do the interpolation instead of doing 2 separate
          operations.

        This doesn't fix Bug 222098 but it does improve the situation quite a bit. I also see that the CPU time
        spent under DelayDSPKernel::process() went from ~20% to 1.2% on this demo.

        No new tests, no Web-facing behavior change, just a performance optimization.

        * Modules/webaudio/DelayDSPKernel.cpp:
        (WebCore::copyToCircularBuffer):
        (WebCore::DelayDSPKernel::DelayDSPKernel):
        (WebCore::DelayDSPKernel::bufferLengthForDelay const):
        (WebCore::DelayDSPKernel::process):
        (WebCore::DelayDSPKernel::processARate):
        (WebCore::DelayDSPKernel::processKRate):
        * Modules/webaudio/DelayDSPKernel.h:
        * platform/audio/VectorMath.cpp:
        (WebCore::VectorMath::substract):
        (WebCore::VectorMath::interpolate):
        * platform/audio/VectorMath.h:

2021-05-28  Brent Fulgham  <bfulgham@apple.com>

        [Cocoa] Prevent GPU Process from attempt to connect to the AppSSO service (Part 2)
        https://bugs.webkit.org/show_bug.cgi?id=226393
        <rdar://problem/78614833>

        Reviewed by Eric Carlson.

        In Bug 224834 I modified WebKit to use avoid invoking AppSSO in CFNetwork calls, since we make those
        decisions prior to beginning our network interactions. I missed a media call where this was being done.

        This patch corrects that mistake.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::canonicalURL):

2021-05-28  Chris Dumez  <cdumez@apple.com>

        Stop using UncheckedLock in JSDOMGlobalObject
        https://bugs.webkit.org/show_bug.cgi?id=226281

        Reviewed by Darin Adler.

        Stop using UncheckedLock in JSDOMGlobalObject and use Lock instead of benefit from Clang thread
        safety analysis. This is a step towards phasing out UncheckedLock and improving the thread
        safety of our code.

        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::visitChildrenImpl):
        (WebCore::JSDOMGlobalObject::clearDOMGuardedObjects):
        * bindings/js/JSDOMGlobalObject.h:
        (WebCore::getDOMConstructor):
        * bindings/js/JSDOMGuardedObject.cpp:
        (WebCore::DOMGuardedObject::DOMGuardedObject):
        (WebCore::DOMGuardedObject::clear):
        (WebCore::DOMGuardedObject::removeFromGlobalObject):
        * bindings/js/JSDOMGuardedObject.h:
        * bindings/js/JSDOMWrapperCache.cpp:
        (WebCore::cacheDOMStructure):

2021-05-28  Jean-Yves Avenard  <jya@apple.com>

        Add MediaSession.callActionHandler
        https://bugs.webkit.org/show_bug.cgi?id=226077
        rdar://77463304

        Reviewed by Eric Carlson.

        Make it possible for JavaScript to be able to trigger a MediaSession action
        handler so a MediaSession.coordinator polyfill such as one provided by an
        external JS library will work.
        Test: media/media-session/callActionHandler.html

        * Modules/mediasession/MediaSession.cpp:
        (WebCore::MediaSession::callActionHandler):
        * Modules/mediasession/MediaSession.h:
        * Modules/mediasession/MediaSession.idl: Add method definition.

2021-05-28  Alan Bujtas  <zalan@apple.com>

        CrashOnOverflow in WebCore::RenderTable::cellBefore(WebCore::RenderTableCell const*)
        https://bugs.webkit.org/show_bug.cgi?id=225949

        Reviewed by Antti Koivisto.

        The table section maintains a grid of rows and columns. This grid is used to jump to cells directly during layout (as opposed to tree walking).
        It needs to be re-populated on tree mutations e.g when a new row is added to the table.
        RenderTableSection::willInsertTableRow assumes that rows and cells are inserted subsequently, after each other and
        it's ok to ignore the grid invalidation on appends as the subsequent ::addCell() call takes care of the grid. 
        However in some continuation split cases, we re-parent complete rows under table sections which means no subsequent ::addCell() calls.

        This patch addresses this case by using the same pattern we have for block continuation invalidation in RenderTreeBuilder::splitAnonymousBoxesAroundChild().

        Test: fast/table/table-split-on-insert-with-section-crash.html

        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::markBoxForRelayoutAfterSplit):
        (WebCore::markBoxForRelayoutAfterSplit): Deleted.
        * rendering/updating/RenderTreeBuilder.h:
        * rendering/updating/RenderTreeBuilderInline.cpp:
        (WebCore::RenderTreeBuilder::Inline::splitInlines):

2021-05-28  Sam Weinig  <weinig@apple.com>

        Add stub implementation of CA separated portal bits for GraphicsLayer
        https://bugs.webkit.org/show_bug.cgi?id=226343

        Reviewed by Simon Fraser.

        Plumbs isSeparatedPortal and isDescendentOfSeparatedPortal bits through GraphicsLayer.
        Renames setSeparated to setIsSeparated for consistency.

        Currently unused, but getting the bits in is big enough that its helpful
        to land on its own.

        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::GraphicsLayer):
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::isIsSeparated const):
        (WebCore::GraphicsLayer::setIsSeparated):
        (WebCore::GraphicsLayer::isSeparatedPortal const):
        (WebCore::GraphicsLayer::setIsSeparatedPortal):
        (WebCore::GraphicsLayer::isDescendentOfSeparatedPortal const):
        (WebCore::GraphicsLayer::setIsDescendentOfSeparatedPortal):
        (WebCore::GraphicsLayer::isSeparated const): Deleted.
        (WebCore::GraphicsLayer::setSeparated): Deleted.
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::setIsSeparated):
        (WebCore::GraphicsLayerCA::setIsSeparatedPortal):
        (WebCore::GraphicsLayerCA::setIsDescendentOfSeparatedPortal):
        (WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers):
        (WebCore::GraphicsLayerCA::updateIsSeparated):
        (WebCore::GraphicsLayerCA::updateIsSeparatedPortal):
        (WebCore::GraphicsLayerCA::updateIsDescendentOfSeparatedPortal):
        (WebCore::GraphicsLayerCA::setSeparated): Deleted.
        (WebCore::GraphicsLayerCA::updateSeparated): Deleted.
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.h:
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:
        (WebCore::PlatformCALayerCocoa::setIsSeparated):
        (WebCore::PlatformCALayerCocoa::isSeparatedPortal const):
        (WebCore::PlatformCALayerCocoa::setIsSeparatedPortal):
        (WebCore::PlatformCALayerCocoa::isDescendentOfSeparatedPortal const):
        (WebCore::PlatformCALayerCocoa::setIsDescendentOfSeparatedPortal):
        (WebCore::PlatformCALayerCocoa::setSeparated): Deleted.
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGeometry):

2021-05-28  Brent Fulgham  <bfulgham@apple.com>

        Buffer computations should use correct type
        https://bugs.webkit.org/show_bug.cgi?id=226352
        <rdar://problem/78116213>

        Reviewed by Ryosuke Niwa.

        The implementation of utf8Buffer holds the buffer size in an 'int', even though our buffer
        APIs take size_t arguments. Let's make this consistent.

        * platform/SharedBuffer.cpp:
        (WebCore::utf8Buffer):

2021-05-28  Eric Carlson  <eric.carlson@apple.com>

        [Cocoa] Return immediately when asked to paint an AVPlayer that hasn't reached HaveCurrentData
        https://bugs.webkit.org/show_bug.cgi?id=226350
        rdar://77910715

        Reviewed by Jer Noble.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::updateLastPixelBuffer): Return immediately
        if readyState < HaveCurrentData.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::videoOutputHasAvailableFrame): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::updateLastImage): Ditto.

2021-05-28  Devin Rousso  <drousso@apple.com>

        [Modern Media Controls] put the localized information for tracks first if the track is not in the user's preferred language
        https://bugs.webkit.org/show_bug.cgi?id=226361
        <rdar://problem/78497853>

        Reviewed by Eric Carlson.

        Test: media/modern-media-controls/tracks-support/sorted-by-user-preferred-languages.html

        This makes it clearer/easier for the user to understand what's going on when the track label
        is not in the user's preferred language. For example, if a `<video>` has an "English" audio
        track, it's not very helpful to show "English (英语)" for Chinese users instead of something
        like "英语 (English)".

        If the track has a `label` and either matches the user's preferred language or its `label`
        already contains the localized language name, combine the track's `label` with a localized
        description of the track if that description isn't already in the `label`. Otherwise, add
        the localized language name first, then the description of the track, and finally the `label`.

        Here are some examples if the user's preferred language is English:
         - `<track kind="subtitles" srclang="en">`                  would show "English"
         - `<track kind="subtitles" srclang="en" label="Foo">`      would show "Foo"
         - `<track kind="captions"  srclang="en">`                  would show "English Captions"
         - `<track kind="captions"  srclang="en" label="Foo">`      would show "Foo Captions"
         - `<track kind="captions"  srclang="en" label="Captions">` would show "Captions"
         - `<track kind="subtitles" srclang="fr">`                  would show "French"
         - `<track kind="subtitles" srclang="fr" label="Foo">`      would show "French (Foo)"
         - `<track kind="captions"  srclang="fr">`                  would show "French Captions"
         - `<track kind="captions"  srclang="fr" label="Foo">`      would show "French Captions (Foo)"
         - `<track kind="captions"  srclang="fr" label="Captions">` would show "French Captions"

        * page/CaptionUserPreferences.cpp:
        (WebCore::trackDisplayName):
        * page/CaptionUserPreferencesMediaAF.cpp:
        (WebCore::addTextTrackKindDisplayNameIfNeeded): Added.
        (WebCore::addAudioTrackKindDisplayNameIfNeeded): Added.
        (WebCore::addTrackKindDisplayNameIfNeeded): Added.
        (WebCore::trackDisplayName):
        (WebCore::CaptionUserPreferencesMediaAF::displayNameForTrack const):
        (WebCore::textTrackCompare):
        (WebCore::CaptionUserPreferencesMediaAF::sortedTrackListForMenu):
        (WebCore::buildDisplayStringForTrackBase): Deleted.

        * platform/LocalizedStrings.h:
        * platform/LocalizedStrings.cpp:
        (WebCore::trackNoLabelText): Added.
        (WebCore::textTrackOffMenuItemText): Added.
        (WebCore::textTrackAutomaticMenuItemText): Added.
        (WebCore::addTrackLabelAsSuffix): Added.
        (WebCore::textTrackKindClosedCaptionsDisplayName): Added.
        (WebCore::addTextTrackKindClosedCaptionsSuffix): Added.
        (WebCore::textTrackKindCaptionsDisplayName): Added.
        (WebCore::addTextTrackKindCaptionsSuffix): Added.
        (WebCore::textTrackKindDescriptionsDisplayName): Added.
        (WebCore::addTextTrackKindDescriptionsSuffix): Added.
        (WebCore::textTrackKindChaptersDisplayName): Added.
        (WebCore::addTextTrackKindChaptersSuffix): Added.
        (WebCore::textTrackKindMetadataDisplayName): Added.
        (WebCore::addTextTrackKindMetadataSuffix): Added.
        (WebCore::textTrackKindSDHDisplayName): Added.
        (WebCore::addTextTrackKindSDHSuffix): Added.
        (WebCore::textTrackKindEasyReaderDisplayName): Added.
        (WebCore::addTextTrackKindEasyReaderSuffix): Added.
        (WebCore::textTrackKindForcedDisplayName): Added.
        (WebCore::addTextTrackKindForcedSuffix): Added.
        (WebCore::audioTrackKindDescriptionsDisplayName): Added.
        (WebCore::addAudioTrackKindDescriptionsSuffix): Added.
        (WebCore::audioTrackKindCommentaryDisplayName): Added.
        (WebCore::addAudioTrackKindCommentarySuffix): Added.
        (WebCore::textTrackNoLabelText): Deleted.
        (WebCore::audioTrackNoLabelText): Deleted.
        (WebCore::captionsTextTrackKindDisplayName): Deleted.
        (WebCore::captionsTextTrackWithoutLabelMenuItemText): Deleted.
        (WebCore::descriptionsTextTrackKindDisplayName): Deleted.
        (WebCore::descriptionsTextTrackWithoutLabelMenuItemText): Deleted.
        (WebCore::chaptersTextTrackKindDisplayName): Deleted.
        (WebCore::chaptersTextTrackWithoutLabelMenuItemText): Deleted.
        (WebCore::metadataTextTrackKindDisplayName): Deleted.
        (WebCore::metadataTextTrackWithoutLabelMenuItemText): Deleted.
        (WebCore::textTrackCountryAndLanguageMenuItemText): Deleted.
        (WebCore::textTrackLanguageMenuItemText): Deleted.
        (WebCore::closedCaptionKindTrackDisplayName): Deleted.
        (WebCore::closedCaptionTrackMenuItemText): Deleted.
        (WebCore::sdhTrackKindDisplayName): Deleted.
        (WebCore::sdhTrackMenuItemText): Deleted.
        (WebCore::easyReaderKindDisplayName): Deleted.
        (WebCore::easyReaderTrackMenuItemText): Deleted.
        (WebCore::forcedTrackKindDisplayName): Deleted.
        (WebCore::forcedTrackMenuItemText): Deleted.
        (WebCore::audioDescriptionTrackSuffixText): Deleted.
        * en.lproj/Localizable.strings:
        Clean up localized string functions related to media controls.

2021-05-28  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r278196.
        https://bugs.webkit.org/show_bug.cgi?id=226379

        Causes asserts in layoutformattingcontext

        Reverted changeset:

        "[LFC] Transition containing block for loops to range loops"
        https://bugs.webkit.org/show_bug.cgi?id=226315
        https://trac.webkit.org/changeset/278196

2021-05-28  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r278199.
        https://bugs.webkit.org/show_bug.cgi?id=226378

        Causes asserts in layoutformattingcontext

        Reverted changeset:

        "[LFC][TFC] Do not include vertical spacing when resolving
        percent height for table content"
        https://bugs.webkit.org/show_bug.cgi?id=226365
        https://trac.webkit.org/changeset/278199

2021-05-28  Alan Bujtas  <zalan@apple.com>

        [LFC][TFC] Do not include vertical spacing when resolving percent height for table content
        https://bugs.webkit.org/show_bug.cgi?id=226365

        Reviewed by Antti Koivisto.

        <table style="height: 100px; border-spacing: 10px;"><tr><td style="height: 100%"></td></tr></table>
        The <td>'s 100% height is resolved against 100px - (2 * 10px) -> 80px;

        Test: fast/layoutformattingcontext/table-with-percent-columns-and-spacing.html

        * layout/formattingContexts/table/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::TableFormattingContext):
        * layout/formattingContexts/table/TableFormattingContext.h:
        * layout/formattingContexts/table/TableFormattingGeometry.cpp:
        (WebCore::Layout::TableFormattingGeometry::TableFormattingGeometry):
        (WebCore::Layout::TableFormattingGeometry::computedCellBorder const):
        * layout/formattingContexts/table/TableFormattingGeometry.h:
        (WebCore::Layout::TableFormattingGeometry::formattingContext const):
        * layout/formattingContexts/table/TableFormattingQuirks.cpp:
        (WebCore::Layout::TableFormattingQuirks::heightValueOfNearestContainingBlockWithFixedHeight const):
        * layout/formattingContexts/table/TableFormattingQuirks.h:
        (WebCore::Layout::TableFormattingQuirks::formattingContext const):

2021-05-28  Alan Bujtas  <zalan@apple.com>

        [LFC] Transition containing block for loops to range loops
        https://bugs.webkit.org/show_bug.cgi?id=226315

        Reviewed by Antti Koivisto.

        Add support for stayWithin.

        * layout/floats/FloatingContext.cpp:
        (WebCore::Layout::FloatingContext::mapTopLeftToFloatingStateRoot const):
        * layout/formattingContexts/FormattingGeometry.cpp:
        (WebCore::Layout::FormattingGeometry::computedHeightValue const):
        * layout/formattingContexts/block/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::usedAvailableWidthForFloatAvoider):
        * layout/layouttree/LayoutBox.cpp:
        (WebCore::Layout::Box::isDescendantOf const):
        * layout/layouttree/LayoutBox.h:
        * layout/layouttree/LayoutContainingBlockChainIterator.h:
        (WebCore::Layout::LayoutContainingBlockChainIteratorAdapter::begin):
        (WebCore::Layout::LayoutContainingBlockChainIteratorAdapter::end):
        (WebCore::Layout::LayoutContainingBlockChainIterator::LayoutContainingBlockChainIterator):
        (WebCore::Layout::LayoutContainingBlockChainIteratorAdapter::LayoutContainingBlockChainIteratorAdapter):
        (WebCore::Layout::containingBlockChain):

2021-05-28  Rob Buis  <rbuis@igalia.com>

        Webkit doesn't calculate padding-top/-bottom in % correctly when parent has padding
        https://bugs.webkit.org/show_bug.cgi?id=221202

        Reviewed by Manuel Rego Casasnovas.

        Absolute positioned elements should resolve %-ge padding against containing block padding-edge:
        https://drafts.csswg.org/css-position-3/#absolute-positioning-containing-block

        Test: imported/w3c/web-platform-tests/css/css-position/position-absolute-padding-percentage.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::containingBlockLogicalWidthForContent const):

2021-05-28  Martin Robinson  <mrobinson@webkit.org>

        More readily layout when scroll-snap properties change
        https://bugs.webkit.org/show_bug.cgi?id=225950

        Reviewed by Simon Fraser.

        Do a layout when scroll-snap properties change instead of trying
        to update scroll positions without a layout.

        Test: css3/scroll-snap/scroll-snap-style-change-crash.html

        * rendering/RenderLayerModelObject.cpp:
        (WebCore::RenderLayerModelObject::styleDidChange): Remove code dealing with scrollports
        as this is now handled by the RenderStyle diff. Now trigger a layout for scrollports
        when the scrolled children change their snap properties.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::enclosingScrollableContainerForSnapping const): Made this return a non-const.
        * rendering/RenderObject.h:
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::changeRequiresLayout const): Added code to handle scrollport specific
        properties.

2021-05-27  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] Show context menu when clicking on data detection results in image overlays
        https://bugs.webkit.org/show_bug.cgi?id=226274
        rdar://75504956

        Reviewed by Tim Horton and Aditya Keerthi.

        Add a client hook to allow ImageOverlayController to call out into the WebKit client layer when a data detector
        button (with a corresponding DDScannerResult) is clicked. See WebKit ChangeLog for more details.

        * WebCore.xcodeproj/project.pbxproj:
        * page/ChromeClient.h:
        (WebCore::ChromeClient::handleClickForDataDetectionResult):
        * page/cocoa/DataDetectorElementInfo.h: Added.

        Introduce a struct that wraps a data detection result and the accompanying element bounding rect, mainly so that
        we have a C++ struct we can plumb through the client layers (rather than directly passing Objective-C objects
        around).

        * page/mac/ImageOverlayControllerMac.mm:
        (WebCore::ImageOverlayController::handleDataDetectorAction):

2021-05-27  Devin Rousso  <drousso@apple.com>

        Sampled Page Top Color: allow snapshotting of elements with CSS animations/transitions if they're paused
        https://bugs.webkit.org/show_bug.cgi?id=226313
        <rdar://problem/78534076>

        Reviewed by Tim Horton.

        The primary concern of sampling elements with CSS animations/transitions is that it
        introduces some indeterminism in when the sampling happens vs how far progressed the CSS
        animation/transition is. As an example, sampling from a page with an inline `<style>` that
        applies a CSS animation to fade in the CSS `background-color` from `white` to `black` is
        more likely to get a color closer to `black` than if that same CSS was in an external
        uncached resource. This wouldn't make for a great experience, so r277044 made it so that any
        CSS animations/transitions caused the sampling logic to bail, regardless of the state of the
        CSS animation/transition. This is only really an issue for CSS animations/transitions that
        are actively running, however, not ones that have yet to run or have already finished. It's
        still possible that two loads of the same page could result in different colors (or bails)
        depending on how quickly the CSS animation/transition runs or (if the CSS is in an external
        resource) how long the containing resource takes to load, but with this patch it's now a
        binary state (sample or bail) instead of an indeterminate range of possible sampled colors.

        Tests: SampledPageTopColor.HitTestBeforeCSSTransition
               SampledPageTopColor.HitTestDuringCSSTransition
               SampledPageTopColor.HitTestAfterCSSTransition
               SampledPageTopColor.HitTestBeforeCSSAnimation
               SampledPageTopColor.HitTestDuringCSSAnimation
               SampledPageTopColor.HitTestAfterCSSAnimation

        * page/PageColorSampler.cpp:
        (WebCore::isValidSampleLocation):
        Use `Styleable` instead of `RenderStyle` to get more information about active CSS animations/transitions.

2021-05-27  Said Abou-Hallawa  <said@apple.com>

        Values of keySplines control points must all be in the range 0 to 1
        https://bugs.webkit.org/show_bug.cgi?id=226336

        Reviewed by Sam Weinig.

        W3C specs:
                https://svgwg.org/specs/animations/#KeySplinesAttribute

        MDN documenation:
                https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/keySplines

        Test: imported/w3c/web-platform-tests/svg/animations/keysplines-y-limits.html

        * svg/SVGAnimationElement.cpp:
        (WebCore::parseKeySplines):

2021-05-27  Darin Adler  <darin@apple.com>

        Next step toward using std::optional directly instead of through WTF::Optional typedef
        https://bugs.webkit.org/show_bug.cgi?id=226280

        Reviewed by Chris Dumez.

        * <many files>: Accept the renaming done by do-webcore-rename.

        * Modules/webauthn/fido/DeviceRequestConverter.h: Since style checker complained
        about the names of some arguments, fixed them, and also hand-updated Optional to
        std::optional as long as we were touching it.

        * loader/EmptyClients.cpp: Since style checker complained about the mix of
        WEBCORE_EXPORT and inlined functions, moved them out of line, and
        also hand-updated Optional to std::optional as long as we were touching it.
        Also removed is<EmptyFrameLoaderClient>().
        * loader/EmptyFrameLoaderClient.h: Ditto.

2021-05-27  Brent Fulgham  <bfulgham@apple.com>

        [Hardening] Use a RELEASE_ASSERT for SharedBufferDataView constructor
        https://bugs.webkit.org/show_bug.cgi?id=226346
        <rdar://problem/78115298>

        Reviewed by Ryosuke Niwa.

        We have a DEBUG assert in the constructor for SharedBufferDataView. Debug test show that we don't hit this during normal
        operation, and it's not a hot code path. We should make it a RELEASE_ASSERT.

        * platform/SharedBuffer.cpp:
        (WebCore::SharedBufferDataView::SharedBufferDataView):

2021-05-27  Sihui Liu  <sihui_liu@apple.com>

        Abandon pending tasks on background thread when WebIDBServer is closed
        https://bugs.webkit.org/show_bug.cgi?id=226295

        Reviewed by Chris Dumez.

        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp: Disable threading check as we may
        abort transactions on the main thread.
        (WebCore::IDBServer::SQLiteIDBBackingStore::getOrEstablishDatabaseInfo):

2021-05-27  Wenson Hsieh  <wenson_hsieh@apple.com>

        Refactor some data detector code in WebCore::Frame
        https://bugs.webkit.org/show_bug.cgi?id=226267

        Reviewed by Andy Estes and Devin Rousso.

        In preparation for supporting data detection in image overlays, this patch refactors some existing data detector
        logic inside (and adjacent to) Frame. See comments below for more details.

        * WebCore.xcodeproj/project.pbxproj:
        * editing/cocoa/DataDetection.h:
        * editing/cocoa/DataDetection.mm:
        (WebCore::DataDetection::canPresentDataDetectorsUIForElement):

        Use DataDetectionResultsStorage instead of grabbing the array of scanner results directly from Frame.

        (WebCore::DataDetection::createElementForImageOverlay):

        Add a helper method to create a data detector element for image overlays; this grabs a scanner result from the
        given ImageExtractionDataDetectorInfo, adds it to the element's document's frame, and then sets the newly
        created element's "x-apple-data-detectors-result" attribute to the new identifier value. The main reason we do
        this is to avoid having HTMLElement directly handle DDScannerResult (and instead delegate out to platform-
        specific helpers in DataDetection).

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::updateWithImageExtractionResult):

        Use the new helper function above.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame):

        Use DataDetectionResultsStorage instead of setting the array of scanner results directly on Frame.

        * page/Frame.cpp:
        (WebCore::Frame::dataDetectionResults):
        * page/Frame.h:

        We currently store a list of document-wide data detection results (Objective-C DDScannerResult objects)
        directly on Frame. For image overlays, I need to store a map of identifiers to scanner results in a similar
        fashion. Rather than add more Objective-C code on Frame, it's better to instead move this logic out into a
        separate C++ class, DataDetectionResultsStorage, that wraps both the document-level array of DDScannerResults,
        as well as the new map of ImageOverlayDataDetectionResultIdentifier => DDScannerResult specifically for data
        detector results inside image overlays.

        * page/cocoa/DataDetectionResultsStorage.h: Copied from Source/WebCore/editing/cocoa/DataDetection.h.
        (WebCore::DataDetectionResultsStorage::setDocumentLevelResults):
        (WebCore::DataDetectionResultsStorage::documentLevelResults const):

        Move the existing `m_dataDetectionResults` NSArray on Frame out into the storage helper class, as
        `m_documentLevelResults`. As its name suggests, this array stores data detection results gathered by running
        data detection over the entire document.

        (WebCore::DataDetectionResultsStorage::imageOverlayDataDetectionResult):
        (WebCore::DataDetectionResultsStorage::addImageOverlayDataDetectionResult):

        Add a new map of ImageOverlayDataDetectionResultIdentifier to DDScannerResult for storing scanner results
        specific to image overlay content. Using a separate data structure here prevents image overlay data detector
        results from getting blown away when document-level data detection finishes and sets document-wide results on
        the frame.

        * page/cocoa/ImageOverlayDataDetectionResultIdentifier.h: Added.

        Add an identifier type that we can use to look up data detection results in image overlay elements in Frame's
        data detection result storage.

2021-05-27  Ziran Sun  <zsun@igalia.com>

        [css-grid] Add discrete animation support for grid-template-columns|rows
        https://bugs.webkit.org/show_bug.cgi?id=226174

        For CSSGridTemplateTemplate|Row, the animation wrapper setter needs to check a few style
        settings such as gridColumns|gridRows, gridAutoRepeatColumns|gridAutoRepeatRows etc. to be
        inline with the style specified. So does the getter. 

        Reviewed by Antoine Quint.

        This change has improved the two exising animation related grid-template-* tests.

        * animation/CSSPropertyAnimation.cpp:
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):

2021-05-27  Tim Horton  <timothy_horton@apple.com>

        Introduce BifurcatedGraphicsContext
        https://bugs.webkit.org/show_bug.cgi?id=226318

        Reviewed by Sam Weinig.

        New test: BifurcatedGraphicsContextTests.BasicBifurcatedContext

        Introduce a GraphicsContext subclass that forwards painting 
        to two arbitrary child GraphicsContexts. This can be used, for example,
        to paint into a bitmap and display list simultaneously.

        * Headers.cmake:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/BifurcatedGraphicsContext.cpp: Added.
        (WebCore::BifurcatedGraphicsContext::BifurcatedGraphicsContext):
        (WebCore::BifurcatedGraphicsContext::~BifurcatedGraphicsContext):
        (WebCore::BifurcatedGraphicsContext::hasPlatformContext const):
        (WebCore::BifurcatedGraphicsContext::platformContext const):
        (WebCore::BifurcatedGraphicsContext::save):
        (WebCore::BifurcatedGraphicsContext::restore):
        (WebCore::BifurcatedGraphicsContext::drawRect):
        (WebCore::BifurcatedGraphicsContext::drawLine):
        (WebCore::BifurcatedGraphicsContext::drawEllipse):
        (WebCore::BifurcatedGraphicsContext::applyStrokePattern):
        (WebCore::BifurcatedGraphicsContext::applyFillPattern):
        (WebCore::BifurcatedGraphicsContext::drawPath):
        (WebCore::BifurcatedGraphicsContext::fillPath):
        (WebCore::BifurcatedGraphicsContext::strokePath):
        (WebCore::BifurcatedGraphicsContext::beginTransparencyLayer):
        (WebCore::BifurcatedGraphicsContext::endTransparencyLayer):
        (WebCore::BifurcatedGraphicsContext::applyDeviceScaleFactor):
        (WebCore::BifurcatedGraphicsContext::fillRect):
        (WebCore::BifurcatedGraphicsContext::fillRoundedRectImpl):
        (WebCore::BifurcatedGraphicsContext::fillRectWithRoundedHole):
        (WebCore::BifurcatedGraphicsContext::clearRect):
        (WebCore::BifurcatedGraphicsContext::strokeRect):
        (WebCore::BifurcatedGraphicsContext::fillEllipse):
        (WebCore::BifurcatedGraphicsContext::strokeEllipse):
        (WebCore::BifurcatedGraphicsContext::setIsCALayerContext):
        (WebCore::BifurcatedGraphicsContext::isCALayerContext const):
        (WebCore::BifurcatedGraphicsContext::setIsAcceleratedContext):
        (WebCore::BifurcatedGraphicsContext::renderingMode const):
        (WebCore::BifurcatedGraphicsContext::clip):
        (WebCore::BifurcatedGraphicsContext::clipOut):
        (WebCore::BifurcatedGraphicsContext::clipPath):
        (WebCore::BifurcatedGraphicsContext::clipBounds const):
        (WebCore::BifurcatedGraphicsContext::setLineCap):
        (WebCore::BifurcatedGraphicsContext::setLineDash):
        (WebCore::BifurcatedGraphicsContext::setLineJoin):
        (WebCore::BifurcatedGraphicsContext::setMiterLimit):
        (WebCore::BifurcatedGraphicsContext::drawNativeImage):
        (WebCore::BifurcatedGraphicsContext::drawPattern):
        (WebCore::BifurcatedGraphicsContext::scale):
        (WebCore::BifurcatedGraphicsContext::rotate):
        (WebCore::BifurcatedGraphicsContext::translate):
        (WebCore::BifurcatedGraphicsContext::concatCTM):
        (WebCore::BifurcatedGraphicsContext::setCTM):
        (WebCore::BifurcatedGraphicsContext::getCTM const):
        (WebCore::BifurcatedGraphicsContext::roundToDevicePixels):
        (WebCore::BifurcatedGraphicsContext::drawFocusRing):
        (WebCore::BifurcatedGraphicsContext::drawLinesForText):
        (WebCore::BifurcatedGraphicsContext::drawDotsForDocumentMarker):
        (WebCore::BifurcatedGraphicsContext::setURLForRect):
        (WebCore::BifurcatedGraphicsContext::setDestinationForRect):
        (WebCore::BifurcatedGraphicsContext::addDestinationAtPoint):
        (WebCore::BifurcatedGraphicsContext::supportsInternalLinks const):
        (WebCore::BifurcatedGraphicsContext::updateState):
        (WebCore::BifurcatedGraphicsContext::deprecatedPrivateContext const):
        * platform/graphics/BifurcatedGraphicsContext.h: Added.

2021-05-27  Simon Fraser  <simon.fraser@apple.com>

        Add animations to GraphicsLayer logging output
        https://bugs.webkit.org/show_bug.cgi?id=226303

        Reviewed by Tim Horton.

        Log animations in GraphicsLayer, so that it shows up in the "Layers" log channel,
        and in showGraphicsLayerTree() output.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::operator<<):
        (WebCore::GraphicsLayerCA::dumpAnimations):
        (WebCore::GraphicsLayerCA::dumpAdditionalProperties const):
        * platform/graphics/ca/GraphicsLayerCA.h:

2021-05-27  Brent Fulgham  <bfulgham@apple.com>

        Pass frame ref during navigationPolicyCompletionHandler
        https://bugs.webkit.org/show_bug.cgi?id=226268
        <rdar://problem/78512383>

        Reviewed by Ryosuke Niwa.

        Pass the active frame to the navigationPolicyCompletionHandler lambda as a Ref to
        ensure it is kept alive during the policy check and subsequent steps.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::willSendRequest):

2021-05-27  Alan Bujtas  <zalan@apple.com>

        REGRESSION (r244434) Dispatch intrinsicContentsSizeChanged on the main frame only
        https://bugs.webkit.org/show_bug.cgi?id=226311

        Reviewed by Tim Horton.

        While the Mail version of the content autosizing runs on both the main frame and the subframe(s),
        the content size reporting should only happen on the main frame. The client is only interested
        in the enclosing size of the content (also the API to retrieve the information is per-WKWebView,
        it doesn't expose this information on a frame-by-frame basis).

        Test: fast/dynamic/mail-autosize-with-iframe.html

        * page/FrameView.cpp:
        (WebCore::FrameView::autoSizeIfEnabled):
        (WebCore::FrameView::enableFixedWidthAutoSizeMode):
        (WebCore::FrameView::enableSizeToContentAutoSizeMode):
        (WebCore::FrameView::enableAutoSizeMode):

2021-05-27  Sam Weinig  <weinig@apple.com>

        Merge WorkerGlobalScope+Caches.idl and DOMWindow+Caches.idl into a single WindowOrWorkerGlobalScope+Caches.idl
        https://bugs.webkit.org/show_bug.cgi?id=226271

        Reviewed by Darin Adler.

        Address FIXMEs in both WorkerGlobalScope+Caches.idl and DOMWindow+Caches.idl by
        merging them into a single WindowOrWorkerGlobalScope+Caches.idl, matching the spec
        langauge more closely.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/cache/DOMWindow+Caches.idl: Removed.
        * Modules/cache/DOMWindowCaches.cpp: Removed.
        * Modules/cache/DOMWindowCaches.h: Removed.
        * Modules/cache/WindowOrWorkerGlobalScope+Caches.idl: Added.
        * Modules/cache/WindowOrWorkerGlobalScopeCaches.cpp: Added.
        (WebCore::DOMWindowCaches::supplementName):
        (WebCore::WorkerGlobalScopeCaches::supplementName):
        (WebCore::DOMWindowCaches::DOMWindowCaches):
        (WebCore::DOMWindowCaches::from):
        (WebCore::DOMWindowCaches::caches const):
        (WebCore::WorkerGlobalScopeCaches::WorkerGlobalScopeCaches):
        (WebCore::WorkerGlobalScopeCaches::from):
        (WebCore::WorkerGlobalScopeCaches::caches const):
        (WebCore::WindowOrWorkerGlobalScopeCaches::caches):
        * Modules/cache/WindowOrWorkerGlobalScopeCaches.h: Added.
        * Modules/cache/WorkerGlobalScope+Caches.idl: Removed.
        * Modules/cache/WorkerGlobalScopeCaches.cpp: Removed.
        * Modules/cache/WorkerGlobalScopeCaches.h: Removed.
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

2021-05-27  Adrian Perez de Castro  <aperez@igalia.com>

        Non-unified build fixes, late May 2021 edition
        https://bugs.webkit.org/show_bug.cgi?id=226322

        Unreviewed non-unified build fixes.

        No new tests needed.

        * css/CSSGridIntegerRepeatValue.cpp: Add missing wtf/text/StringConcatenateNumbers.h
        header.
        * css/CSSTimingFunctionValue.cpp: Ditto.
        * layout/formattingContexts/flex/FlexFormattingContext.h: Add missing FormattingQuirks.h
        header, remove now unneeded FormattingContext.h header.
        * loader/PrivateClickMeasurement.cpp: Add missing wtf/text/StringConcatenateNumbers.h
        header.
        * platform/graphics/cairo/GraphicsContextCairo.cpp: Add missing Gradient.h header.
        * platform/graphics/filters/FEMorphology.cpp: Add missing ColorTypes.h header.

2021-05-27  Youenn Fablet  <youenn@apple.com>

        Support H264 profiles in MediaRecorder
        https://bugs.webkit.org/show_bug.cgi?id=226219
        <rdar://78027944>

        Reviewed by Eric Carlson.

        Use mimeType option given in MediaRecorder options to detect which H264 profile to use.
        Implement this by parsing the mime type codec parameter and use the avc1.WXYZ string to compute the profile.
        By default, use baseline profile, which is not VideoToolbox profile but has wider decoding support.
        If profile specified by the application fails, we downgrade to baseline.

        Test: http/wpt/mediarecorder/MediaRecorder-video-h264-profiles.html

        * Modules/mediarecorder/MediaRecorderProvider.cpp:
        (WebCore::MediaRecorderProvider::isSupported):
        * platform/mediarecorder/cocoa/MediaRecorderPrivateWriterCocoa.h:
        * platform/mediarecorder/cocoa/MediaRecorderPrivateWriterCocoa.mm:
        (WebCore::MediaRecorderPrivateWriter::create):
        (WebCore::MediaRecorderPrivateWriter::initialize):
        (WebCore::MediaRecorderPrivateWriter::setOptions): Deleted.
        * platform/mediarecorder/cocoa/VideoSampleBufferCompressor.h:
        * platform/mediarecorder/cocoa/VideoSampleBufferCompressor.mm:
        (WebCore::VideoSampleBufferCompressor::create):
        (WebCore::VideoSampleBufferCompressor::VideoSampleBufferCompressor):
        (WebCore::VideoSampleBufferCompressor::vtProfileLevel const):
        (WebCore::VideoSampleBufferCompressor::initCompressionSession):

2021-05-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Do not disable the idle connection timeout
        https://bugs.webkit.org/show_bug.cgi?id=226263

        Reviewed by Sergio Villar Senin.

        We disable the connection timeout in SoupSession because we implement our own timeout in WebKit, but that's not
        the case for the idle connection timeout. There's no reason keep idle connection alive forever.

        * platform/network/soup/SoupNetworkSession.cpp:
        (WebCore::SoupNetworkSession::SoupNetworkSession):

2021-05-26  Cameron McCormack  <heycam@apple.com>

        Prevent sbix glyphs from being rendered in the GPU process
        https://bugs.webkit.org/show_bug.cgi?id=226159
        <rdar://77231959>

        Reviewed by Darin Adler.

        When GPUP canvas is enabled, the display list recorder handles sbix
        glyphs by recording drawImage calls. This means that during display list
        replay, we should not have any sbix glyphs in a DrawGlyphs display list
        item. This patch checks for such glyphs (like we already do for SVG
        glyphs) and returns early if they're found.

        Manually tested. No new tests, since we'd need to add some way inject
        sbix glyph IDs into display list items.

        * platform/graphics/Font.h:
        (WebCore::Font::ComplexColorFormatGlyphs::hasRelevantTables const):
        (WebCore::Font::ComplexColorFormatGlyphs::bitForInitialized):
        (WebCore::Font::ComplexColorFormatGlyphs::bitForValue):
        (WebCore::Font::ComplexColorFormatGlyphs::bitsRequiredForGlyphCount):
        (WebCore::Font::ComplexColorFormatGlyphs::ComplexColorFormatGlyphs):
        * platform/graphics/coretext/FontCascadeCoreText.cpp:
        (WebCore::FontCascade::drawGlyphs): Call new function that checks for
        SVG and sbix glyph presence. Change release assertion to debug
        assertion to avoid unnecessarily crashing the GPUP, and instead return
        early in the presence of these glyphs.
        * platform/graphics/coretext/FontCoreText.cpp:
        (WebCore::Font::otSVGTable const):
        (WebCore::Font::ComplexColorFormatGlyphs::createWithNoRelevantTables):
        (WebCore::Font::ComplexColorFormatGlyphs::createWithRelevantTablesAndGlyphCount):
        (WebCore::Font::ComplexColorFormatGlyphs::hasValueFor const):
        (WebCore::Font::ComplexColorFormatGlyphs::get const):
        (WebCore::Font::ComplexColorFormatGlyphs::set):
        (WebCore::Font::hasComplexColorFormatTables const):
        (WebCore::Font::glyphsWithComplexColorFormat const):
        (WebCore::Font::glyphHasComplexColorFormat const):
        (WebCore::Font::findOTSVGGlyphs const):
        (WebCore::Font::hasAnyComplexColorFormatGlyphs const): New function to
        check if a list of glyph IDs has any that would be inappropriate
        to render in the GPU process. Since calling the CoreText function that
        allows us to check if an sbix glyph exists would be too expensive to
        call for every drawGlyphs call, we lazily cache (in a BitVector) the
        presence of sbix and SVG images for glyph IDs we check.

2021-05-26  Sihui Liu  <sihui_liu@apple.com>

        Add logging for when SQLiteDatabase fails to close
        https://bugs.webkit.org/show_bug.cgi?id=226290

        Reviewed by Chris Dumez.

        Also fix some logging error in IDB.

        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
        (WebCore::IDBServer::createOrMigrateRecordsTableIfNecessary):
        (WebCore::IDBServer::SQLiteIDBBackingStore::ensureValidBlobTables):
        (WebCore::IDBServer::SQLiteIDBBackingStore::ensureValidRecordsTable):
        (WebCore::IDBServer::SQLiteIDBBackingStore::ensureValidIndexRecordsTable):
        (WebCore::IDBServer::SQLiteIDBBackingStore::ensureValidIndexRecordsIndex):
        (WebCore::IDBServer::SQLiteIDBBackingStore::ensureValidIndexRecordsRecordIndex):
        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::performCurrentOpenOperation):
        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::open):
        (WebCore::SQLiteDatabase::close):
        * platform/sql/SQLiteDatabase.h:

2021-05-26  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] Remove unused GraphicsContext::WindowsBitmap class
        https://bugs.webkit.org/show_bug.cgi?id=226312

        Reviewed by Don Olmstead.

        * platform/graphics/GraphicsContext.h:
        (WebCore::GraphicsContext::WindowsBitmap::hdc const): Deleted.
        (WebCore::GraphicsContext::WindowsBitmap::buffer const): Deleted.
        (WebCore::GraphicsContext::WindowsBitmap::bufferLength const): Deleted.
        (WebCore::GraphicsContext::WindowsBitmap::size const): Deleted.
        (WebCore::GraphicsContext::WindowsBitmap::bytesPerRow const): Deleted.
        (WebCore::GraphicsContext::WindowsBitmap::bitsPerPixel const): Deleted.
        (WebCore::GraphicsContext::WindowsBitmap::windowsDIB const): Deleted.
        * platform/graphics/win/GraphicsContextCGWin.cpp:
        (WebCore::GraphicsContext::drawWindowsBitmap): Deleted.
        * platform/graphics/win/GraphicsContextCairoWin.cpp:
        (WebCore::GraphicsContext::drawWindowsBitmap): Deleted.
        * platform/graphics/win/GraphicsContextDirect2D.cpp:
        (WebCore::GraphicsContextDirect2D::drawWindowsBitmap): Deleted.
        * platform/graphics/win/GraphicsContextWin.cpp:
        (WebCore::GraphicsContext::shouldIncludeChildWindows const):
        (WebCore::GraphicsContext::WindowsBitmap::WindowsBitmap): Deleted.
        (WebCore::GraphicsContext::WindowsBitmap::~WindowsBitmap): Deleted.
        (WebCore::GraphicsContext::createWindowsBitmap): Deleted.

2021-05-26  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Cairo] Remove unused members ownedPlatformContext and platformContext of GraphicsContextPlatformPrivate
        https://bugs.webkit.org/show_bug.cgi?id=226310

        Reviewed by Don Olmstead.

        GraphicsContextPlatformPrivate is a class tracking HDC
        transforming. It doesn't need to know about PlatformContextCairo.
        Remove unused members ownedPlatformContext and platformContext.

        GraphicsContextPlatformPrivate::syncContext was a setter of
        cairo_t*. Removed it and set cairo_t* as an argument of the
        constructor.

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContextCairo::GraphicsContextCairo):
        * platform/graphics/cairo/GraphicsContextPlatformPrivateCairo.h:
        (WebCore::GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate):
        (WebCore::GraphicsContextPlatformPrivate::setCTM):
        (WebCore::GraphicsContextPlatformPrivate::syncContext): Deleted.
        * platform/graphics/win/GraphicsContextCairoWin.cpp:
        (WebCore::GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate):
        (WebCore::GraphicsContextPlatformPrivate::syncContext): Deleted.

2021-05-26  Toshio Ogasawara  <toshio.ogasawara@access-company.com>

        [MSE] MediaSample that need to be removed with SourceBufferPrivate::evictCodedFrames() may not be removed.
        https://bugs.webkit.org/show_bug.cgi?id=225800
        <rdar://problem/78296352>

        Reviewed by Jer Noble.

        Fixed evictCodedFrames to remove MediaSample that can be removed after the minimumRangeStart.

        Test: media/media-source/media-source-evict-codedframe-after-seek.html

        * platform/graphics/SourceBufferPrivate.cpp:
        (WebCore::SourceBufferPrivate::evictCodedFrames):

2021-05-26  Chris Dumez  <cdumez@apple.com>

        Leverage the new Vector(const T*, size_t) constructor
        https://bugs.webkit.org/show_bug.cgi?id=226304

        Reviewed by Darin Adler.

        Leverage the new Vector(const T*, size_t) constructor in existing code.

        * Modules/fetch/FetchBodyConsumer.cpp:
        (WebCore::blobFromData):
        * Modules/indexeddb/IDBGetResult.cpp:
        (WebCore::IDBGetResult::dataFromBuffer):
        * Modules/webauthn/WebAuthenticationUtils.cpp:
        (WebCore::convertBytesToVector):
        * Modules/webauthn/fido/DeviceResponseConverter.cpp:
        (fido::decodeResponseMap):
        * Modules/webauthn/fido/FidoHidPacket.cpp:
        (fido::FidoHidInitPacket::createFromSerializedData):
        (fido::FidoHidContinuationPacket::createFromSerializedData):
        * Modules/webauthn/fido/Pin.cpp:
        (fido::pin::encodeCOSEPublicKey):
        * Modules/webauthn/fido/U2fResponseConverter.cpp:
        (fido::WebCore::extractECPublicKeyFromU2fRegistrationResponse):
        (fido::WebCore::extractCredentialIdFromU2fRegistrationResponse):
        (fido::WebCore::createFidoAttestationStatementFromU2fRegisterResponse):
        (fido::readU2fSignResponse):
        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::enqueueRawFrame):
        * crypto/SubtleCrypto.cpp:
        (WebCore::toKeyData):
        (WebCore::copyToVector):
        * crypto/gcrypt/CryptoKeyECGCrypt.cpp:
        (WebCore::CryptoKeyEC::platformAddFieldElements const):
        * crypto/mac/CryptoKeyECMac.cpp:
        (WebCore::CryptoKeyEC::platformImportPkcs8):
        * crypto/mac/SerializedCryptoKeyWrapMac.mm:
        (WebCore::vectorFromNSData):
        * crypto/openssl/CryptoAlgorithmAES_GCMOpenSSL.cpp:
        (WebCore::cryptDecrypt):
        * fileapi/Blob.cpp:
        (WebCore::Blob::Blob):
        * platform/graphics/ImageBackingStore.h:
        (WebCore::ImageBackingStore::ImageBackingStore):
        * platform/graphics/cairo/ImageBufferUtilitiesCairo.cpp:
        (WebCore::data):
        * platform/graphics/gstreamer/GStreamerCommon.cpp:
        (WebCore::GstMappedBuffer::createVector const):
        * platform/graphics/gstreamer/eme/CDMProxyClearKey.cpp:
        (WebCore::CDMProxyClearKey::cencSetDecryptionKey):
        * platform/mediarecorder/MediaRecorderPrivateMock.cpp:
        (WebCore::MediaRecorderPrivateMock::fetchData):
        * platform/network/FormData.cpp:
        (WebCore::FormDataElement::isolatedCopy const):
        (WebCore::FormData::appendData):
        * platform/network/curl/OpenSSLHelper.cpp:
        (OpenSSL::BIO::getDataAsVector const):
        * testing/Internals.cpp:
        (WebCore::Internals::deserializeBuffer const):
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::openFunc):

2021-05-26  Jean-Yves Avenard  <jya@apple.com>

        Make MediaSession readystate enums all lowercase
        https://bugs.webkit.org/show_bug.cgi?id=226213
        <rdar://problem/78437011>

        Reviewed by Eric Carlson.

        Use the current MediaSession definition pattern which makes all enum names
        lower case.

        * Modules/mediasession/MediaSession.h:
        * Modules/mediasession/MediaSessionReadyState.h:
        * Modules/mediasession/MediaSessionReadyState.idl:

2021-05-26  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add a PAL softlinking header for the Reveal framework
        https://bugs.webkit.org/show_bug.cgi?id=226292

        Reviewed by Tim Horton.

        Pull soft-linking bits out of `DictionaryLookup.mm` and into a separate PAL header, so that we can easily soft-
        link both Reveal and RevealCore in WebKit, in future patches. See below for more details.

        No change in behavior.

        * editing/cocoa/DictionaryLookup.mm:

        Also do some minor cleanup around this code:

        -   Use `auto` in more places.
        -   Make `WebRevealHighlight` conform to `RVPresenterHighlightDelegate` and `UIRVPresenterHighlightDelegate`, as
            was (probably) intended. Currently, the names of these delegate methods are treated as unused type template
            arguments on the class. This means we no longer need to `static_cast` to the protocol when passing these
            objects around.
        -   Move several ivars on `WebRevealHighlight` out of the @interface, and into the @implementation.

        (-[WebRevealHighlight revealContext:drawRectsForItem:]):
        (WebCore::canCreateRevealItems):
        (WebCore::DictionaryLookup::rangeForSelection):
        (WebCore::DictionaryLookup::rangeAtHitTestResult):
        (WebCore::showPopupOrCreateAnimationController):
        (SOFT_LINK_CLASS_OPTIONAL): Deleted.

2021-05-26  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Support USE_ANGLE_EGL on additional platforms
        https://bugs.webkit.org/show_bug.cgi?id=224888
        <rdar://problem/77280211>

        Reviewed by Ken Russell.

        Use the ANGLE library targets when applicable.

        * CMakeLists.txt:
        * Headers.cmake:

2021-05-26  Chris Lord  <clord@igalia.com>

        Scrollbars/indicators are sometimes incorrectly drawn when async overflow scrolling is enabled
        https://bugs.webkit.org/show_bug.cgi?id=226259

        Reviewed by Simon Fraser.

        Respect scrolled contents visibility when rendering scrollbar layers.

        No new tests, covered by existing tests.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintContents):

2021-05-26  Truitt Savell  <tsavell@apple.com>

        Unreviewed, reverting r278028.

        Caused fast/selectors/slow-style-sharing-with-long-cousin-
        list.html to timeout on iOS and Windows.

        Reverted changeset:

        "CrashOnOverflow in
        WebCore::RenderTable::cellBefore(WebCore::RenderTableCell
        const*)"
        https://bugs.webkit.org/show_bug.cgi?id=225949
        https://commits.webkit.org/r278028

2021-05-26  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] Support painting data detector highlights inside image overlays
        https://bugs.webkit.org/show_bug.cgi?id=226227

        Reviewed by Tim Horton.

        Add support for painting data detector highlights inside image overlays by leveraging `DataDetectorHighlight`.
        See comments below for more details.

        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * editing/Editor.cpp:
        (WebCore::scanForTelephoneNumbers):

        Avoid painting service-controls-based telephone number highlights for selected text inside image overlays, in
        order to avoid painting a redundant data detector highlight for telephone numbers in image overlays.

        * html/HTMLElement.cpp:
        (WebCore::imageOverlayDataDetectorClassName):
        (WebCore::HTMLElement::isImageOverlayDataDetectorResult const):
        (WebCore::HTMLElement::updateWithImageExtractionResult):
        * html/HTMLElement.h:
        * html/shadow/imageOverlay.css:
        (div.image-overlay-data-detector-result):

        Add support for injecting elements in the DOM that represent data detection results; these are transformed and
        overlaid on the image in the same way as existing text containers. Note that we lay out these elements on top
        of text, but make them invisible to hit-testing unless the `IgnoreCSSPointerEventsProperty` option is specified.
        We'll take advantage of this behavior in a future patch.

        * page/ImageOverlayController.cpp:
        (WebCore::ImageOverlayController::selectionQuadsDidChange):
        (WebCore::ImageOverlayController::uninstallPageOverlayIfNeeded):
        (WebCore::ImageOverlayController::drawRect):
        (WebCore::ImageOverlayController::platformHandleMouseEvent):
        * page/ImageOverlayController.h:

        Refactor the image overlay controller, such that we install the page overlay if there is any selection inside
        the image overlay (as opposed to only when we need to use this overlay to paint the text selection for
        transparent images). If data detectors are present, we'll additionally set up out `DataDetectorHighlight`s (one
        for each data detection result container).

        * page/mac/ImageOverlayControllerMac.mm: Added.
        (WebCore::ImageOverlayController::updateDataDetectorHighlights):

        Traverse the image overlay's subtree in search of container elements that correspond to data detection results;
        for each of these elements, we create a new `DataDetectorHighlight` using the element's bounds, and save the
        pair in `m_dataDetectorContainersAndHighlights`. Note that we hold a weak pointer to the container element, such
        that there's no risk of leaking any of these data detection result containers (or their documents).

        (WebCore::ImageOverlayController::platformHandleMouseEvent):
        (WebCore::ImageOverlayController::handleDataDetectorAction):

        Add a FIXME referencing the next patch in the sequence.

        (WebCore::ImageOverlayController::clearDataDetectorHighlights):
        * platform/mac/DataDetectorHighlight.h:
        * platform/mac/DataDetectorHighlight.mm:
        (WebCore::DataDetectorHighlight::createForImageOverlay):

        Add a helper method to create a `DataDetectorHighlight` for image overlays.

2021-05-26  Antti Koivisto  <antti@apple.com>

        Don't hang onto expired resources without validation headers in memory cache
        https://bugs.webkit.org/show_bug.cgi?id=226083
        rdar://78035612

        Reviewed by Chris Dumez.

        They consume memory while only really being useful for history navigation.
        Disk cache can handle the relatively rare cases where that is useful and not
        covered by the page cache.

        * loader/ResourceTimingInformation.cpp:
        (WebCore::ResourceTimingInformation::addResourceTiming):
        (WebCore::ResourceTimingInformation::removeResourceTiming):

        Add way to remove entries from the map.

        * loader/ResourceTimingInformation.h:
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::removeClient):

        Removal from cache is now handled in deleteIfPossible() so any path that gets the resource to
        canDelete() state will do cache removal check.
        Since deleteIfPossible is invoked by removeClient the existing behavior is covered.

        (WebCore::CachedResource::deleteIfPossible):

        Remove expired resources without validation headers from the cache if the resource is otherwise deletable.
        Also eagerly remove no-store http resources (previously only https was removed).

        (WebCore::CachedResource::deleteThis):

        Factor into a function.

        * loader/cache/CachedResource.h:
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestResource):

        Ensure existing resource is removed from cache adding a new one. This was causing confusion with inCache state.

        (WebCore::CachedResourceLoader::garbageCollectDocumentResources):

        Don't remove entries with active loader. They are needed for resource timing.
        Don't leave removed entries to ResourceTimingInformation. They are not guaranteed to stay alive after
        being removed from m_documentResources.

        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::remove):

        Call CachedResource::deleteThis() directly.

2021-05-26  Chris Dumez  <cdumez@apple.com>

        Drop SecurityPolicyViolationEvent's blockedURL & documentURL attributes
        https://bugs.webkit.org/show_bug.cgi?id=226270

        Reviewed by Alex Christensen.

        Drop SecurityPolicyViolationEvent's blockedURL & documentURL attributes that I very recently added as part of
        r278042. No other browser supports those and it looks like they may get dropped from the spec
        (https://github.com/w3c/webappsec-csp/issues/498) since the blockedURI/documentURI cannot be renamed in the
        SecurityPolicyViolationEventInit dictionary.

        This is basically a partial revert of r278042, while we work on the spec to get updated to match browsers.

        * dom/SecurityPolicyViolationEvent.h:
        * dom/SecurityPolicyViolationEvent.idl:

2021-05-26  Alan Bujtas  <zalan@apple.com>

        [LFC] Introduce containingBlockChain iterator
        https://bugs.webkit.org/show_bug.cgi?id=226269

        Reviewed by Antti Koivisto.

        Let's use the range loop syntax to climb the containing block chain.

        * WebCore.xcodeproj/project.pbxproj:
        * layout/formattingContexts/table/TableFormattingQuirks.cpp:
        (WebCore::Layout::TableFormattingQuirks::heightValueOfNearestContainingBlockWithFixedHeight const):
        * layout/layouttree/LayoutContainingBlockChainIterator.h: Added.
        (WebCore::Layout::LayoutContainingBlockChainIterator::operator* const):
        (WebCore::Layout::LayoutContainingBlockChainIterator::operator-> const):
        (WebCore::Layout::LayoutContainingBlockChainIterator::operator== const):
        (WebCore::Layout::LayoutContainingBlockChainIterator::operator!= const):
        (WebCore::Layout::LayoutContainingBlockChainIterator::LayoutContainingBlockChainIterator):
        (WebCore::Layout::LayoutContainingBlockChainIterator::operator++):
        (WebCore::Layout::LayoutContainingBlockChainIteratorAdapter::LayoutContainingBlockChainIteratorAdapter):
        (WebCore::Layout::LayoutContainingBlockChainIteratorAdapter::begin):
        (WebCore::Layout::LayoutContainingBlockChainIteratorAdapter::end):
        (WebCore::Layout::containingBlockChainOf):

2021-05-26  Alan Bujtas  <zalan@apple.com>

        REGRESSION: Safari v14.1 computes element height to be 33,554,432 pixels
        https://bugs.webkit.org/show_bug.cgi?id=226006
        <rdar://problem/78471122>

        Reviewed by Antti Koivisto.

        We fail to find the intrusive floats when they don't line up with the top of the line. 

        The fix is twofold here. 
        - when probing for the intrusive float boxes, we need to look at both the line geometry and the initial line constraints.
          When the intrusive floats take up the entire horizontal space and the line ends up with no inline content,
          the computed line geometry may come back with a 0px tall line.
          Now if we probe the intrusive floats at [top: 0px, bottom: 0px] and they happen to have a vertical offset e.g 1px,
          we won't find them (since we only scan at 0px vertically).
        - if we still don't find the intrusive float(s), let's just offset the next line by the line height candidate (e.g. 18px)
          instead of the "inifitePoint". The layout will likely be incorrect but it won't produce an infinitely tall content. 

        Test: fast/inline/inline-root-with-negative-margin-and-sibling-float.html

        * layout/floats/FloatingContext.h:
        * layout/formattingContexts/inline/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::lineLayout):

2021-05-25  Fujii Hironori  <Hironori.Fujii@sony.com>

        Rename ImageBuffer::transformColorSpace to transformToColorSpace, and it should take a single argument
        https://bugs.webkit.org/show_bug.cgi?id=226108

        Reviewed by Said Abou-Hallawa.

        The 'srcColorSpace' argument of ImageBuffer::transformColorSpace()
        should be removed because it is redundant and it is the same as
        ImageBuffer::colorSpace().

        RenderSVGResourceMasker::applyResource creates a image buffer for
        a mask image. In Cairo, rendering happens in sRGB color space. So,
        create a image buffer in sRGB, then renders the content and
        transforms to linear sRGB.

        * platform/graphics/ConcreteImageBuffer.h:
        * platform/graphics/ImageBuffer.h:
        * platform/graphics/ImageBufferBackend.h:
        (WebCore::ImageBufferBackend::transformToColorSpace): Take a single argument 'newColorSpace'.
        (WebCore::ImageBufferBackend::transformColorSpace): Renamed to transformToColorSpace.
        * platform/graphics/cairo/ImageBufferCairoBackend.cpp:
        (WebCore::ImageBufferCairoBackend::transformToColorSpace):
        (WebCore::ImageBufferCairoBackend::transformColorSpace): Renamed to transformToColorSpace.
        * platform/graphics/cairo/ImageBufferCairoBackend.h:
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::transformResultColorSpace):
        * rendering/svg/RenderSVGResourceMasker.cpp:
        (WebCore::RenderSVGResourceMasker::applyResource):
        (WebCore::RenderSVGResourceMasker::drawContentIntoMaskImage):

2021-05-25  Chris Dumez  <cdumez@apple.com>

        Stop using UncheckedLock in MediaElementAudioSourceNode
        https://bugs.webkit.org/show_bug.cgi?id=226250

        Reviewed by Darin Adler.

        Stop using UncheckedLock in MediaElementAudioSourceNode as it is being phased out in favor of
        Lock, which supports clang thread safety analysis.

        * Modules/webaudio/MediaElementAudioSourceNode.h:
        * html/HTMLMediaElement.cpp:

2021-05-25  Chris Dumez  <cdumez@apple.com>

        [GStreamer] Stop using UncheckedLock in WebKitCommonEncryptionDecryptorGStreamer
        https://bugs.webkit.org/show_bug.cgi?id=226249

        Reviewed by Darin Adler.

        Stop using UncheckedLock in WebKitCommonEncryptionDecryptorGStreamer as it is being phased out
        in favor of WTF::Lock, which supports Clang thread safety analysis.

        * platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.cpp:
        (transformInPlace):
        (isCDMProxyAvailable):
        (attachCDMProxy):
        (sinkEventHandler):
        (webKitMediaCommonEncryptionDecryptIsFlushing):
        (setContext):

2021-05-25  Sam Weinig  <weinig@apple.com>

        Support byte components for all bounded RGB color types, not just SRGBA
        https://bugs.webkit.org/show_bug.cgi?id=226222

        Reviewed by Darin Adler.

        We currently arbitrarily restrict byte components (e.g. SRGBA<uint8_t>)
        to just SRGBA by only supporting conversion for that one color type. Support
        for any bounded (e.g. [0..1]) RGB type would have the same semantics and
        be useful now that we can get pixel buffers that are not SRGBA only out
        of ImageBuffer.

        To do this, we replace the ColorConversion specializations for this type
        of conversion, and inline it directly in the main conversion convert function,
        allowing for a more complex conditional without SFINAE complexity.

        To make things a bit simpler, this also simplifies the RGB color type descriptors
        to no longer be templates, as the description of the types is always float
        based, regardless of the component used. This allows for a simpler new helper,
        SelfWithReplacementComponent, to convert to and from ColorType<float>/ColorType<uint8_t>.

        * platform/graphics/ColorConversion.cpp:
        (WebCore::SRGBA<uint8_t>>::convert): Deleted.
        * platform/graphics/ColorConversion.h:
        (WebCore::ColorConversion::convert):
        (WebCore::ColorConversion::handleToFloatConversion):
        (WebCore::ColorConversion::handleToByteConversion):
        * platform/graphics/ColorTypes.h:

2021-05-25  Chris Dumez  <cdumez@apple.com>

        CSP does not apply to AudioWorklets
        https://bugs.webkit.org/show_bug.cgi?id=225862
        <rdar://problem/78098440>

        Reviewed by Eric Carlson.

        Make sure Worklet::addModule() checks with CSP before attempting to load the script.

        Tests: http/tests/security/contentSecurityPolicy/audioworklet-script-src-allowed.html
               http/tests/security/contentSecurityPolicy/audioworklet-script-src-blocked.html

        * worklets/Worklet.cpp:
        (WebCore::Worklet::addModule):

2021-05-25  Devin Rousso  <drousso@apple.com>

        [Modern Media Controls] REGRESSION(r254389) media controls needs the full list of language preferences for ordering tracks
        https://bugs.webkit.org/show_bug.cgi?id=226038

        Reviewed by Myles C. Maxfield and Eric Carlson.

        Media controls need access to the full list of language preferences in order to properly
        sort/order the list of tracks in the controls UI. For example, if a `<video>` has subtitles
        for English, Spanish, and French, and the user has English (default) and French (alternate)
        configured in the Language & Region view of System Preferences on macOS, WebKit should order
        the subtitles list English, French, and then Spanish.

        Test: media/modern-media-controls/tracks-support/sorted-by-user-preferred-languages.html

        * page/CaptionUserPreferences.cpp:
        (WebCore::CaptionUserPreferences::preferredLanguages const):
        (WebCore::CaptionUserPreferences::textTrackSelectionScore const):
        (WebCore::CaptionUserPreferences::primaryAudioTrackLanguageOverride const):
        * page/CaptionUserPreferencesMediaAF.cpp:
        (WebCore::CaptionUserPreferencesMediaAF::preferredLanguages const):
        (WebCore::buildDisplayStringForTrackBase):
        (WebCore::trackDisplayName):
        (WebCore::textTrackCompare):
        * platform/graphics/avfoundation/MediaSelectionGroupAVFObjC.mm:
        (WebCore::MediaSelectionGroupAVFObjC::updateOptions):

        * bindings/js/JSDOMWindowBase.cpp:
        * bindings/js/JSWorkerGlobalScopeBase.cpp:
        * bindings/js/JSWorkletGlobalScopeBase.cpp:
        Wrap `defaultLanguage` in a lambda since it now has a parameter.

        * platform/LocalizedStrings.h:
        * platform/LocalizedStrings.cpp:
        (WebCore::captionsTextTrackKindDisplayName): Added.
        (WebCore::descriptionsTextTrackKindDisplayName): Added.
        (WebCore::chaptersTextTrackKindDisplayName): Added.
        (WebCore::metadataTextTrackKindDisplayName): Added.
        (WebCore::closedCaptionKindTrackDisplayName): Added.
        (WebCore::sdhTrackKindDisplayName): Added.
        (WebCore::easyReaderKindDisplayName): Added.
        (WebCore::forcedTrackKindDisplayName): Added.
        Move the logic added in r277797 from `buildDisplayStringForTrackBase` to `trackDisplayName`
        and only perform it if the text track display name doesn't already contain the display name
        for the text track kind (e.g. if the `label` is "English Captions" don't add "Captions", but
        do if the `label` is only "English").

2021-05-25  Tim Horton  <timothy_horton@apple.com>

        Virtualize GraphicsContext
        https://bugs.webkit.org/show_bug.cgi?id=226170

        Reviewed by Simon Fraser.

        No new tests, just a refactoring.

        In preparation for future patches which introduce new kinds of GraphicsContexts,
        virtualize GraphicsContext, moving platform implementations into subclasses
        GraphicsContext{CG,Cairo,Direct2D}, NullGraphicsContext, DisplayList::Recorder,
        and Nicosia::CairoOperationRecorder.

        GraphicsContextImpl dissolves away; platform contexts that were
        unnecessarily implemented both as `GraphicsContext` and as a subclass
        of GraphicsContextImpl (GraphicsContextImplCairo and GraphicsContextImplDirect2D)
        are folded into their GraphicsContext subclass.

        `paintingDisabled()` is no longer relevant in GraphicsContext implementations,
        so we no longer have to check it everywhere; NullGraphicsContext overrides
        everything with an empty implementation. We keep `paintingDisabled()` for
        use in code outside of GraphicsContext, where it just distinguishes between
        NullGraphicsContext and the others.

        Also, a few bits of cleanup to make this easier:

        - Legacy shadow radius behavior becomes a parameter to setShadow instead of a separate method.
        - canvasClip(), which hasn't done anything different than clip() since Skia, is removed.
        - GraphicsContext gains renderingMode() in place of isAcceleratedContext().
        - Subclasses override updateState() to respond to GraphicsContext state changes,
          as was already done for GraphicsContextImpl, to keep subclassing simple.
        - builderState(), which was unused, is removed.
        - drawPath() is introduced on all platforms, with a default implementation that just fills and strokes.

        * Headers.cmake:
        * PlatformFTW.cmake:
        * PlatformWin.cmake:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * display/css/DisplayBoxDecorationPainter.cpp:
        (WebCore::Display::BoxDecorationPainter::paintBoxShadow const):
        * html/canvas/CanvasRenderingContext2DBase.cpp:
        (WebCore::CanvasRenderingContext2DBase::isAccelerated const):
        (WebCore::CanvasRenderingContext2DBase::clipInternal):
        (WebCore::CanvasRenderingContext2DBase::clearRect):
        (WebCore::CanvasRenderingContext2DBase::applyShadow):
        (WebCore::CanvasRenderingContext2DBase::createPattern):
        (WebCore::CanvasRenderingContext2DBase::drawTextUnchecked):
        * page/FrameView.cpp:
        (WebCore::FrameView::traverseForPaintInvalidation):
        (WebCore::FrameView::adjustPageHeightDeprecated):
        * page/FrameView.h:
        * page/win/FrameCGWin.cpp:
        (WebCore::imageFromRect):
        * page/win/FrameGdiWin.cpp:
        (WebCore::imageFromRect):
        * platform/Cairo.cmake:
        * platform/SourcesCairo.txt:
        * platform/cocoa/DragImageCocoa.mm:
        (WebCore::createDragImageForLink):
        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::displayListForTextRun const):
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContextState::GraphicsContextState):
        (WebCore::GraphicsContextStateChange::accumulate):
        (WebCore::GraphicsContextStateChange::apply const):
        (WebCore::GraphicsContextStateChange::dump const):
        (WebCore::GraphicsContext::~GraphicsContext):
        (WebCore::GraphicsContext::save):
        (WebCore::GraphicsContext::restore):
        (WebCore::GraphicsContext::drawRaisedEllipse):
        (WebCore::GraphicsContext::setStrokeColor):
        (WebCore::GraphicsContext::setShadow):
        (WebCore::GraphicsContext::clearShadow):
        (WebCore::GraphicsContext::setFillColor):
        (WebCore::GraphicsContext::setStrokePattern):
        (WebCore::GraphicsContext::setFillPattern):
        (WebCore::GraphicsContext::setStrokeGradient):
        (WebCore::GraphicsContext::setFillGradient):
        (WebCore::GraphicsContext::beginTransparencyLayer):
        (WebCore::GraphicsContext::endTransparencyLayer):
        (WebCore::GraphicsContext::drawText):
        (WebCore::GraphicsContext::drawGlyphs):
        (WebCore::GraphicsContext::drawEmphasisMarks):
        (WebCore::GraphicsContext::drawBidiText):
        (WebCore::GraphicsContext::drawImage):
        (WebCore::GraphicsContext::drawTiledImage):
        (WebCore::GraphicsContext::drawImageBuffer):
        (WebCore::GraphicsContext::drawConsumingImageBuffer):
        (WebCore::GraphicsContext::clipRoundedRect):
        (WebCore::GraphicsContext::clipOutRoundedRect):
        (WebCore::GraphicsContext::clipToDrawingCommands):
        (WebCore::GraphicsContext::clipToImageBuffer):
        (WebCore::GraphicsContext::clipBounds const):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::fillRoundedRect):
        (WebCore::GraphicsContext::fillRectWithRoundedHole):
        (WebCore::GraphicsContext::setCompositeOperation):
        (WebCore::GraphicsContext::drawPath):
        (WebCore::GraphicsContext::drawLineForText):
        (WebCore::GraphicsContext::paintFrameForMedia):
        (WebCore::NullGraphicsContext::drawConsumingImageBuffer):
        (WebCore::GraphicsContext::GraphicsContext): Deleted.
        (WebCore::GraphicsContext::hasPlatformContext const): Deleted.
        (WebCore::GraphicsContext::setStrokeThickness): Deleted.
        (WebCore::GraphicsContext::setStrokeStyle): Deleted.
        (WebCore::GraphicsContext::setLegacyShadow): Deleted.
        (WebCore::GraphicsContext::setShadowsIgnoreTransforms): Deleted.
        (WebCore::GraphicsContext::setShouldAntialias): Deleted.
        (WebCore::GraphicsContext::setShouldSmoothFonts): Deleted.
        (WebCore::GraphicsContext::setShouldSubpixelQuantizeFonts): Deleted.
        (WebCore::GraphicsContext::setImageInterpolationQuality): Deleted.
        (WebCore::GraphicsContext::setFillRule): Deleted.
        (WebCore::GraphicsContext::drawNativeImage): Deleted.
        (WebCore::GraphicsContext::drawPattern): Deleted.
        (WebCore::GraphicsContext::setTextDrawingMode): Deleted.
        (WebCore::GraphicsContext::setAlpha): Deleted.
        (WebCore::GraphicsContext::setDrawLuminanceMask): Deleted.
        (WebCore::GraphicsContext::setUseDarkAppearance): Deleted.
        (WebCore::GraphicsContext::setPlatformTextDrawingMode): Deleted.
        (WebCore::GraphicsContext::setPlatformStrokeStyle): Deleted.
        (WebCore::GraphicsContext::setPlatformShouldSmoothFonts): Deleted.
        (WebCore::GraphicsContext::isAcceleratedContext const): Deleted.
        (WebCore::GraphicsContext::platformApplyDeviceScaleFactor): Deleted.
        (WebCore::GraphicsContext::applyDeviceScaleFactor): Deleted.
        (WebCore::GraphicsContext::fillEllipse): Deleted.
        (WebCore::GraphicsContext::strokeEllipse): Deleted.
        (WebCore::GraphicsContext::platformFillEllipse): Deleted.
        (WebCore::GraphicsContext::platformStrokeEllipse): Deleted.
        (WebCore::GraphicsContext::builderState): Deleted.
        (WebCore::GraphicsContext::supportsInternalLinks const): Deleted.
        (WebCore::GraphicsContext::setDestinationForRect): Deleted.
        (WebCore::GraphicsContext::addDestinationAtPoint): Deleted.
        * platform/graphics/GraphicsContext.h:
        (WebCore::GraphicsContext::hasPlatformContext const):
        (WebCore::GraphicsContext::platformContext const):
        (WebCore::GraphicsContext::paintingDisabled const):
        (WebCore::GraphicsContext::performingPaintInvalidation const):
        (WebCore::GraphicsContext::invalidatingControlTints const):
        (WebCore::GraphicsContext::invalidatingImagesWithAsyncDecodes const):
        (WebCore::GraphicsContext::detectingContentfulPaint const):
        (WebCore::GraphicsContext::setStrokeThickness):
        (WebCore::GraphicsContext::setStrokeStyle):
        (WebCore::GraphicsContext::setStrokeGradient):
        (WebCore::GraphicsContext::setFillRule):
        (WebCore::GraphicsContext::setShadowsIgnoreTransforms):
        (WebCore::GraphicsContext::setShouldAntialias):
        (WebCore::GraphicsContext::setShouldSmoothFonts):
        (WebCore::GraphicsContext::setShouldSubpixelQuantizeFonts):
        (WebCore::GraphicsContext::setImageInterpolationQuality):
        (WebCore::GraphicsContext::imageInterpolationQuality const):
        (WebCore::GraphicsContext::setAlpha):
        (WebCore::GraphicsContext::alpha const):
        (WebCore::GraphicsContext::compositeOperation const):
        (WebCore::GraphicsContext::blendModeOperation const):
        (WebCore::GraphicsContext::setDrawLuminanceMask):
        (WebCore::GraphicsContext::drawLuminanceMask const):
        (WebCore::GraphicsContext::setTextDrawingMode):
        (WebCore::GraphicsContext::textDrawingMode const):
        (WebCore::GraphicsContext::hasVisibleShadow const):
        (WebCore::GraphicsContext::hasShadow const):
        (WebCore::GraphicsContext::hasBlurredShadow const):
        (WebCore::GraphicsContext::setUseDarkAppearance):
        (WebCore::GraphicsContext::useDarkAppearance const):
        (WebCore::GraphicsContext::state const):
        (WebCore::GraphicsContext::renderingMode const):
        (WebCore::GraphicsContext::fillEllipse):
        (WebCore::GraphicsContext::strokeEllipse):
        (WebCore::GraphicsContext::drawNativeImage):
        (WebCore::GraphicsContext::drawImage):
        (WebCore::GraphicsContext::drawTiledImage):
        (WebCore::GraphicsContext::drawImageBuffer):
        (WebCore::GraphicsContext::drawConsumingImageBuffer):
        (WebCore::GraphicsContext::drawPattern):
        (WebCore::GraphicsContext::isInTransparencyLayer const):
        (WebCore::GraphicsContext::scale):
        (WebCore::GraphicsContext::applyDeviceScaleFactor):
        (WebCore::GraphicsContext::setURLForRect):
        (WebCore::GraphicsContext::setDestinationForRect):
        (WebCore::GraphicsContext::addDestinationAtPoint):
        (WebCore::GraphicsContext::supportsInternalLinks const):
        (WebCore::GraphicsContext::setContentfulPaintDetected):
        (WebCore::GraphicsContext::contenfulPaintDetected const):
        (WebCore::GraphicsContext::deprecatedPrivateContext const):
        (WebCore::GraphicsContext::supportsTransparencyLayers const):
        (WebCore::GraphicsContext::impl): Deleted.
        * platform/graphics/GraphicsContextImpl.cpp: Removed.
        * platform/graphics/GraphicsContextImpl.h: Removed.
        * platform/graphics/Image.cpp:
        (WebCore::Image::drawTiled):
        * platform/graphics/Image.h:
        * platform/graphics/ShadowBlur.cpp:
        (WebCore::ShadowBlur::ShadowBlur):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::recursiveCommitChanges):
        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        (PlatformCALayerWin::drawTextAtPoint const):
        * platform/graphics/ca/win/PlatformCALayerWinInternal.cpp:
        (PlatformCALayerWinInternal::displayCallback):
        (PlatformCALayerWinInternal::drawRepaintCounters):
        * platform/graphics/ca/win/WebTiledBackingLayerWin.cpp:
        (WebTiledBackingLayerWin::displayCallback):
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContextCairo::GraphicsContextCairo):
        (WebCore::GraphicsContextCairo::~GraphicsContextCairo):
        (WebCore::GraphicsContextCairo::hasPlatformContext const):
        (WebCore::GraphicsContextCairo::getCTM const):
        (WebCore::GraphicsContextCairo::platformContext const):
        (WebCore::GraphicsContextCairo::save):
        (WebCore::GraphicsContextCairo::restore):
        (WebCore::GraphicsContextCairo::drawRect):
        (WebCore::GraphicsContextCairo::drawNativeImage):
        (WebCore::GraphicsContextCairo::drawLine):
        (WebCore::GraphicsContextCairo::drawEllipse):
        (WebCore::GraphicsContextCairo::fillPath):
        (WebCore::GraphicsContextCairo::strokePath):
        (WebCore::GraphicsContextCairo::fillRect):
        (WebCore::GraphicsContextCairo::clip):
        (WebCore::GraphicsContextCairo::clipPath):
        (WebCore::GraphicsContextCairo::clipBounds const):
        (WebCore::GraphicsContextCairo::clipToImageBuffer):
        (WebCore::GraphicsContextCairo::drawFocusRing):
        (WebCore::GraphicsContextCairo::drawLinesForText):
        (WebCore::GraphicsContextCairo::drawDotsForDocumentMarker):
        (WebCore::GraphicsContextCairo::roundToDevicePixels):
        (WebCore::GraphicsContextCairo::translate):
        (WebCore::GraphicsContextCairo::updateState):
        (WebCore::GraphicsContextCairo::concatCTM):
        (WebCore::GraphicsContextCairo::setCTM):
        (WebCore::GraphicsContextCairo::beginTransparencyLayer):
        (WebCore::GraphicsContextCairo::endTransparencyLayer):
        (WebCore::GraphicsContextCairo::clearRect):
        (WebCore::GraphicsContextCairo::strokeRect):
        (WebCore::GraphicsContextCairo::setLineCap):
        (WebCore::GraphicsContextCairo::setLineDash):
        (WebCore::GraphicsContextCairo::setLineJoin):
        (WebCore::GraphicsContextCairo::setMiterLimit):
        (WebCore::GraphicsContextCairo::clipOut):
        (WebCore::GraphicsContextCairo::rotate):
        (WebCore::GraphicsContextCairo::scale):
        (WebCore::GraphicsContextCairo::fillRoundedRectImpl):
        (WebCore::GraphicsContextCairo::fillRectWithRoundedHole):
        (WebCore::GraphicsContextCairo::drawPattern):
        (WebCore::GraphicsContextCairo::renderingMode const):
        (WebCore::GraphicsContextCairo::drawGlyphs):
        (WebCore::GraphicsContext::platformInit): Deleted.
        (WebCore::GraphicsContext::platformDestroy): Deleted.
        (WebCore::GraphicsContext::getCTM const): Deleted.
        (WebCore::GraphicsContext::platformContext const): Deleted.
        (WebCore::GraphicsContext::savePlatformState): Deleted.
        (WebCore::GraphicsContext::restorePlatformState): Deleted.
        (WebCore::GraphicsContext::drawRect): Deleted.
        (WebCore::GraphicsContext::drawPlatformImage): Deleted.
        (WebCore::GraphicsContext::drawLine): Deleted.
        (WebCore::GraphicsContext::drawEllipse): Deleted.
        (WebCore::GraphicsContext::fillPath): Deleted.
        (WebCore::GraphicsContext::strokePath): Deleted.
        (WebCore::GraphicsContext::fillRect): Deleted.
        (WebCore::GraphicsContext::clip): Deleted.
        (WebCore::GraphicsContext::clipPath): Deleted.
        (WebCore::GraphicsContext::clipBounds const): Deleted.
        (WebCore::GraphicsContext::drawFocusRing): Deleted.
        (WebCore::GraphicsContext::drawLineForText): Deleted.
        (WebCore::GraphicsContext::drawLinesForText): Deleted.
        (WebCore::GraphicsContext::drawDotsForDocumentMarker): Deleted.
        (WebCore::GraphicsContext::roundToDevicePixels): Deleted.
        (WebCore::GraphicsContext::translate): Deleted.
        (WebCore::GraphicsContext::setPlatformFillColor): Deleted.
        (WebCore::GraphicsContext::setPlatformStrokeColor): Deleted.
        (WebCore::GraphicsContext::setPlatformStrokeThickness): Deleted.
        (WebCore::GraphicsContext::setPlatformStrokeStyle): Deleted.
        (WebCore::GraphicsContext::setURLForRect): Deleted.
        (WebCore::GraphicsContext::concatCTM): Deleted.
        (WebCore::GraphicsContext::setCTM): Deleted.
        (WebCore::GraphicsContext::setPlatformShadow): Deleted.
        (WebCore::GraphicsContext::clearPlatformShadow): Deleted.
        (WebCore::GraphicsContext::beginPlatformTransparencyLayer): Deleted.
        (WebCore::GraphicsContext::endPlatformTransparencyLayer): Deleted.
        (WebCore::GraphicsContext::supportsTransparencyLayers): Deleted.
        (WebCore::GraphicsContext::clearRect): Deleted.
        (WebCore::GraphicsContext::strokeRect): Deleted.
        (WebCore::GraphicsContext::setLineCap): Deleted.
        (WebCore::GraphicsContext::setLineDash): Deleted.
        (WebCore::GraphicsContext::setLineJoin): Deleted.
        (WebCore::GraphicsContext::setMiterLimit): Deleted.
        (WebCore::GraphicsContext::setPlatformAlpha): Deleted.
        (WebCore::GraphicsContext::setPlatformCompositeOperation): Deleted.
        (WebCore::GraphicsContext::canvasClip): Deleted.
        (WebCore::GraphicsContext::clipOut): Deleted.
        (WebCore::GraphicsContext::rotate): Deleted.
        (WebCore::GraphicsContext::scale): Deleted.
        (WebCore::GraphicsContext::platformFillRoundedRect): Deleted.
        (WebCore::GraphicsContext::fillRectWithRoundedHole): Deleted.
        (WebCore::GraphicsContext::drawPlatformPattern): Deleted.
        (WebCore::GraphicsContext::setPlatformShouldAntialias): Deleted.
        (WebCore::GraphicsContext::setPlatformImageInterpolationQuality): Deleted.
        (WebCore::GraphicsContext::isAcceleratedContext const): Deleted.
        * platform/graphics/cairo/GraphicsContextImplCairo.cpp: Removed.
        * platform/graphics/cairo/GraphicsContextImplCairo.h: Removed.
        * platform/graphics/cairo/ImageBufferCairoBackend.cpp:
        * platform/graphics/cairo/ImageBufferCairoSurfaceBackend.cpp:
        (WebCore::ImageBufferCairoSurfaceBackend::ImageBufferCairoSurfaceBackend):
        * platform/graphics/cairo/PathCairo.cpp:
        (WebCore::Path::strokeBoundingRect const):
        (WebCore::Path::strokeContains const):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::coreInterpolationQuality):
        (WebCore::cgInterpolationQuality):
        (WebCore::cgTextDrawingMode):
        (WebCore::GraphicsContextCG::GraphicsContextCG):
        (WebCore::GraphicsContextCG::~GraphicsContextCG):
        (WebCore::GraphicsContextCG::hasPlatformContext const):
        (WebCore::GraphicsContextCG::platformContext const):
        (WebCore::GraphicsContextCG::save):
        (WebCore::GraphicsContextCG::restore):
        (WebCore::GraphicsContextCG::drawNativeImage):
        (WebCore::drawPatternCallback):
        (WebCore::GraphicsContextCG::drawPattern):
        (WebCore::GraphicsContextCG::drawRect):
        (WebCore::GraphicsContextCG::drawLine):
        (WebCore::GraphicsContextCG::drawEllipse):
        (WebCore::GraphicsContextCG::applyStrokePattern):
        (WebCore::GraphicsContextCG::applyFillPattern):
        (WebCore::GraphicsContextCG::drawPath):
        (WebCore::GraphicsContextCG::fillPath):
        (WebCore::GraphicsContextCG::strokePath):
        (WebCore::GraphicsContextCG::fillRect):
        (WebCore::GraphicsContextCG::fillRoundedRectImpl):
        (WebCore::GraphicsContextCG::fillRectWithRoundedHole):
        (WebCore::GraphicsContextCG::clip):
        (WebCore::GraphicsContextCG::clipOut):
        (WebCore::GraphicsContextCG::clipPath):
        (WebCore::GraphicsContextCG::clipBounds const):
        (WebCore::GraphicsContextCG::beginTransparencyLayer):
        (WebCore::GraphicsContextCG::endTransparencyLayer):
        (WebCore::applyShadowOffsetWorkaroundIfNeeded):
        (WebCore::setCGShadow):
        (WebCore::GraphicsContextCG::updateState):
        (WebCore::GraphicsContextCG::setMiterLimit):
        (WebCore::GraphicsContextCG::clearRect):
        (WebCore::GraphicsContextCG::strokeRect):
        (WebCore::GraphicsContextCG::setLineCap):
        (WebCore::GraphicsContextCG::setLineDash):
        (WebCore::GraphicsContextCG::setLineJoin):
        (WebCore::GraphicsContextCG::scale):
        (WebCore::GraphicsContextCG::rotate):
        (WebCore::GraphicsContextCG::translate):
        (WebCore::GraphicsContextCG::concatCTM):
        (WebCore::GraphicsContextCG::setCTM):
        (WebCore::GraphicsContextCG::getCTM const):
        (WebCore::GraphicsContextCG::roundToDevicePixels):
        (WebCore::GraphicsContextCG::drawLinesForText):
        (WebCore::GraphicsContextCG::setURLForRect):
        (WebCore::GraphicsContextCG::setIsCALayerContext):
        (WebCore::GraphicsContextCG::isCALayerContext const):
        (WebCore::GraphicsContextCG::setIsAcceleratedContext):
        (WebCore::GraphicsContextCG::renderingMode const):
        (WebCore::GraphicsContextCG::applyDeviceScaleFactor):
        (WebCore::GraphicsContextCG::fillEllipse):
        (WebCore::GraphicsContextCG::strokeEllipse):
        (WebCore::GraphicsContextCG::supportsInternalLinks const):
        (WebCore::GraphicsContextCG::setDestinationForRect):
        (WebCore::GraphicsContextCG::addDestinationAtPoint):
        (WebCore::setCGStrokeColor): Deleted.
        (WebCore::convertInterpolationQuality): Deleted.
        (WebCore::GraphicsContext::platformInit): Deleted.
        (WebCore::GraphicsContext::platformDestroy): Deleted.
        (WebCore::GraphicsContext::platformContext const): Deleted.
        (WebCore::GraphicsContext::savePlatformState): Deleted.
        (WebCore::GraphicsContext::restorePlatformState): Deleted.
        (WebCore::GraphicsContext::drawPlatformImage): Deleted.
        (WebCore::GraphicsContext::drawPlatformPattern): Deleted.
        (WebCore::GraphicsContext::drawRect): Deleted.
        (WebCore::GraphicsContext::drawLine): Deleted.
        (WebCore::GraphicsContext::drawEllipse): Deleted.
        (WebCore::GraphicsContext::applyStrokePattern): Deleted.
        (WebCore::GraphicsContext::applyFillPattern): Deleted.
        (WebCore::GraphicsContext::drawPath): Deleted.
        (WebCore::GraphicsContext::fillPath): Deleted.
        (WebCore::GraphicsContext::strokePath): Deleted.
        (WebCore::GraphicsContext::fillRect): Deleted.
        (WebCore::GraphicsContext::platformFillRoundedRect): Deleted.
        (WebCore::GraphicsContext::fillRectWithRoundedHole): Deleted.
        (WebCore::GraphicsContext::clip): Deleted.
        (WebCore::GraphicsContext::clipOut): Deleted.
        (WebCore::GraphicsContext::clipPath): Deleted.
        (WebCore::GraphicsContext::clipBounds const): Deleted.
        (WebCore::GraphicsContext::beginPlatformTransparencyLayer): Deleted.
        (WebCore::GraphicsContext::endPlatformTransparencyLayer): Deleted.
        (WebCore::GraphicsContext::supportsTransparencyLayers): Deleted.
        (WebCore::GraphicsContext::setPlatformShadow): Deleted.
        (WebCore::GraphicsContext::clearPlatformShadow): Deleted.
        (WebCore::GraphicsContext::setMiterLimit): Deleted.
        (WebCore::GraphicsContext::clearRect): Deleted.
        (WebCore::GraphicsContext::strokeRect): Deleted.
        (WebCore::GraphicsContext::setLineCap): Deleted.
        (WebCore::GraphicsContext::setLineDash): Deleted.
        (WebCore::GraphicsContext::setLineJoin): Deleted.
        (WebCore::GraphicsContext::canvasClip): Deleted.
        (WebCore::GraphicsContext::scale): Deleted.
        (WebCore::GraphicsContext::rotate): Deleted.
        (WebCore::GraphicsContext::translate): Deleted.
        (WebCore::GraphicsContext::concatCTM): Deleted.
        (WebCore::GraphicsContext::setCTM): Deleted.
        (WebCore::GraphicsContext::getCTM const): Deleted.
        (WebCore::GraphicsContext::roundToDevicePixels): Deleted.
        (WebCore::GraphicsContext::drawLineForText): Deleted.
        (WebCore::GraphicsContext::drawLinesForText): Deleted.
        (WebCore::GraphicsContext::setURLForRect): Deleted.
        (WebCore::GraphicsContext::setPlatformImageInterpolationQuality): Deleted.
        (WebCore::GraphicsContext::setIsCALayerContext): Deleted.
        (WebCore::GraphicsContext::isCALayerContext const): Deleted.
        (WebCore::GraphicsContext::setIsAcceleratedContext): Deleted.
        (WebCore::GraphicsContext::isAcceleratedContext const): Deleted.
        (WebCore::GraphicsContext::setPlatformTextDrawingMode): Deleted.
        (WebCore::GraphicsContext::setPlatformStrokeColor): Deleted.
        (WebCore::GraphicsContext::setPlatformStrokeThickness): Deleted.
        (WebCore::GraphicsContext::setPlatformFillColor): Deleted.
        (WebCore::GraphicsContext::setPlatformShouldAntialias): Deleted.
        (WebCore::GraphicsContext::setPlatformShouldSmoothFonts): Deleted.
        (WebCore::GraphicsContext::setPlatformAlpha): Deleted.
        (WebCore::GraphicsContext::setPlatformCompositeOperation): Deleted.
        (WebCore::GraphicsContext::platformApplyDeviceScaleFactor): Deleted.
        (WebCore::GraphicsContext::platformFillEllipse): Deleted.
        (WebCore::GraphicsContext::platformStrokeEllipse): Deleted.
        (WebCore::GraphicsContext::supportsInternalLinks const): Deleted.
        (WebCore::GraphicsContext::setDestinationForRect): Deleted.
        (WebCore::GraphicsContext::addDestinationAtPoint): Deleted.
        * platform/graphics/cg/GraphicsContextCG.h:
        * platform/graphics/cg/ImageBufferCGBitmapBackend.cpp:
        (WebCore::ImageBufferCGBitmapBackend::create):
        * platform/graphics/cg/PathCG.cpp:
        (WebCore::Path::strokeContains const):
        (WebCore::Path::strokeBoundingRect const):
        * platform/graphics/cg/PatternCG.cpp:
        (WebCore::patternCallback):
        * platform/graphics/cocoa/FontCascadeCocoa.mm:
        * platform/graphics/cocoa/GraphicsContextCocoa.mm:
        (WebCore::GraphicsContextCG::drawFocusRing):
        (WebCore::drawFocusRingToContextAtTime):
        (WebCore::GraphicsContextCG::drawDotsForDocumentMarker):
        (WebCore::GraphicsContext::drawFocusRing): Deleted.
        (WebCore::GraphicsContext::drawDotsForDocumentMarker): Deleted.
        * platform/graphics/cocoa/IOSurface.mm:
        (WebCore::IOSurface::ensureGraphicsContext):
        * platform/graphics/displaylists/DisplayListDrawGlyphsRecorder.h:
        * platform/graphics/displaylists/DisplayListDrawGlyphsRecorderCoreText.cpp:
        (WebCore::DisplayList::DrawGlyphsRecorder::createInternalContext):
        (WebCore::DisplayList::DrawGlyphsRecorder::populateInternalContext):
        (WebCore::DisplayList::DrawGlyphsRecorder::recordDrawGlyphs):
        * platform/graphics/displaylists/DisplayListDrawingContext.cpp:
        (WebCore::DisplayList::DrawingContext::DrawingContext):
        (WebCore::DisplayList::DrawingContext::recorder): Deleted.
        * platform/graphics/displaylists/DisplayListDrawingContext.h:
        (WebCore::DisplayList::DrawingContext::recorder):
        * platform/graphics/displaylists/DisplayListItems.cpp:
        (WebCore::DisplayList::DrawPath::apply const):
        * platform/graphics/displaylists/DisplayListItems.h:
        (WebCore::DisplayList::SetState::encode const):
        (WebCore::DisplayList::SetState::decode):
        * platform/graphics/displaylists/DisplayListRecorder.cpp:
        (WebCore::DisplayList::Recorder::Recorder):
        (WebCore::DisplayList::Recorder::drawImageBuffer):
        (WebCore::DisplayList::Recorder::getCTM const):
        (WebCore::DisplayList::Recorder::drawLinesForText):
        (WebCore::DisplayList::Recorder::drawFocusRing):
        (WebCore::DisplayList::Recorder::clipBounds const):
        (WebCore::DisplayList::Recorder::clipToDrawingCommands):
        (WebCore::DisplayList::Recorder::paintFrameForMedia):
        (WebCore::DisplayList::Recorder::extentFromLocalBounds const):
        (WebCore::DisplayList::Recorder::clearShadow): Deleted.
        (WebCore::DisplayList::Recorder::getCTM): Deleted.
        (WebCore::DisplayList::Recorder::clipBounds): Deleted.
        (WebCore::DisplayList::Recorder::canPaintFrameForMedia const): Deleted.
        * platform/graphics/displaylists/DisplayListRecorder.h:
        (WebCore::DisplayList::Recorder::append):
        * platform/graphics/mac/ColorMac.mm:
        (WebCore::makeSimpleColorFromNSColor):
        * platform/graphics/mac/WebLayer.mm:
        (-[WebLayer drawInContext:]):
        (-[WebSimpleLayer drawInContext:]):
        * platform/graphics/nicosia/cairo/NicosiaCairoOperationRecorder.cpp:
        (Nicosia::CairoOperationRecorder::CairoOperationRecorder):
        (Nicosia::CairoOperationRecorder::fillRect):
        (Nicosia::CairoOperationRecorder::fillRoundedRect):
        (Nicosia::CairoOperationRecorder::fillRectWithRoundedHole):
        (Nicosia::CairoOperationRecorder::fillPath):
        (Nicosia::CairoOperationRecorder::fillEllipse):
        (Nicosia::CairoOperationRecorder::strokeRect):
        (Nicosia::CairoOperationRecorder::strokePath):
        (Nicosia::CairoOperationRecorder::strokeEllipse):
        (Nicosia::CairoOperationRecorder::drawGlyphs):
        (Nicosia::CairoOperationRecorder::drawNativeImage):
        (Nicosia::CairoOperationRecorder::drawRect):
        (Nicosia::CairoOperationRecorder::drawLine):
        (Nicosia::CairoOperationRecorder::drawLinesForText):
        (Nicosia::CairoOperationRecorder::drawEllipse):
        (Nicosia::CairoOperationRecorder::getCTM const):
        (Nicosia::CairoOperationRecorder::clipBounds const):
        (Nicosia::CairoOperationRecorder::clipToDrawingCommands):
        (Nicosia::CairoOperationRecorder::paintFrameForMedia):
        (Nicosia::CairoOperationRecorder::clearShadow): Deleted.
        (Nicosia::CairoOperationRecorder::drawPath): Deleted.
        (Nicosia::CairoOperationRecorder::getCTM): Deleted.
        (Nicosia::CairoOperationRecorder::clipBounds): Deleted.
        * platform/graphics/nicosia/cairo/NicosiaCairoOperationRecorder.h:
        * platform/graphics/nicosia/cairo/NicosiaPaintingContextCairo.cpp:
        (Nicosia::PaintingContextCairo::ForPainting::ForPainting):
        (Nicosia::PaintingContextCairo::ForRecording::ForRecording):
        * platform/graphics/win/GraphicsContextCGWin.cpp:
        (WebCore::GraphicsContextCG::GraphicsContextCG):
        (WebCore::GraphicsContext::releaseWindowsContext):
        (WebCore::GraphicsContext::drawWindowsBitmap):
        (WebCore::GraphicsContextCG::drawFocusRing):
        (WebCore::GraphicsContextCG::drawDotsForDocumentMarker):
        (WebCore::GraphicsContextCG::deprecatedPrivateContext const):
        (WebCore::GraphicsContext::GraphicsContext): Deleted.
        (WebCore::GraphicsContext::platformInit): Deleted.
        (WebCore::GraphicsContext::drawFocusRing): Deleted.
        (WebCore::GraphicsContext::drawDotsForDocumentMarker): Deleted.
        * platform/graphics/win/GraphicsContextCairoWin.cpp:
        (WebCore::GraphicsContextCairo::GraphicsContextCairo):
        (WebCore::GraphicsContext::releaseWindowsContext):
        (WebCore::GraphicsContextCairo::deprecatedPrivateContext const):
        (WebCore::GraphicsContext::GraphicsContext): Deleted.
        (WebCore::GraphicsContext::platformInit): Deleted.
        * platform/graphics/win/GraphicsContextDirect2D.cpp:
        (WebCore::GraphicsContextDirect2D::GraphicsContextDirect2D):
        (WebCore::GraphicsContextDirect2D::systemFactory):
        (WebCore::GraphicsContextDirect2D::defaultRenderTarget):
        (WebCore::GraphicsContextDirect2D::platformInit):
        (WebCore::GraphicsContextDirect2D::~GraphicsContextDirect2D):
        (WebCore::GraphicsContextDirect2D::platformContext const):
        (WebCore::GraphicsContextDirect2D::save):
        (WebCore::GraphicsContextDirect2D::restore):
        (WebCore::GraphicsContextDirect2D::drawNativeImage):
        (WebCore::GraphicsContextDirect2D::releaseWindowsContext):
        (WebCore::GraphicsContextDirect2D::drawWindowsBitmap):
        (WebCore::GraphicsContextDirect2D::drawFocusRing):
        (WebCore::GraphicsContextDirect2D::drawDotsForDocumentMarker):
        (WebCore::GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate):
        (WebCore::GraphicsContextDirect2D::brushWithColor):
        (WebCore::GraphicsContextDirect2D::colorWithGlobalAlpha const):
        (WebCore::GraphicsContextDirect2D::solidStrokeBrush const):
        (WebCore::GraphicsContextDirect2D::solidFillBrush const):
        (WebCore::GraphicsContextDirect2D::patternStrokeBrush const):
        (WebCore::GraphicsContextDirect2D::patternFillBrush const):
        (WebCore::GraphicsContextDirect2D::beginDraw):
        (WebCore::GraphicsContextDirect2D::endDraw):
        (WebCore::GraphicsContextDirect2D::flush):
        (WebCore::GraphicsContextDirect2D::drawPattern):
        (WebCore::GraphicsContextDirect2D::drawRect):
        (WebCore::GraphicsContextDirect2D::strokeStyle const):
        (WebCore::GraphicsContextDirect2D::drawLine):
        (WebCore::GraphicsContextDirect2D::drawEllipse):
        (WebCore::GraphicsContextDirect2D::applyStrokePattern):
        (WebCore::GraphicsContextDirect2D::applyFillPattern):
        (WebCore::GraphicsContextDirect2D::drawPath):
        (WebCore::GraphicsContextDirect2D::fillPath):
        (WebCore::GraphicsContextDirect2D::strokePath):
        (WebCore::GraphicsContextDirect2D::fillRect):
        (WebCore::GraphicsContextDirect2D::fillRoundedRectImpl):
        (WebCore::GraphicsContextDirect2D::fillRectWithRoundedHole):
        (WebCore::GraphicsContextDirect2D::clip):
        (WebCore::GraphicsContextDirect2D::clipOut):
        (WebCore::GraphicsContextDirect2D::clipPath):
        (WebCore::GraphicsContextDirect2D::clipBounds const):
        (WebCore::GraphicsContextDirect2D::beginTransparencyLayer):
        (WebCore::GraphicsContextDirect2D::endTransparencyLayer):
        (WebCore::GraphicsContextDirect2D::supportsTransparencyLayers):
        (WebCore::GraphicsContextDirect2D::updateState):
        (WebCore::GraphicsContextDirect2D::setMiterLimit):
        (WebCore::GraphicsContextDirect2D::clearRect):
        (WebCore::GraphicsContextDirect2D::strokeRect):
        (WebCore::GraphicsContextDirect2D::setLineCap):
        (WebCore::GraphicsContextDirect2D::setLineDash):
        (WebCore::GraphicsContextDirect2D::setLineJoin):
        (WebCore::GraphicsContextDirect2D::scale):
        (WebCore::GraphicsContextDirect2D::rotate):
        (WebCore::GraphicsContextDirect2D::translate):
        (WebCore::GraphicsContextDirect2D::concatCTM):
        (WebCore::GraphicsContextDirect2D::setCTM):
        (WebCore::GraphicsContextDirect2D::getCTM const):
        (WebCore::GraphicsContextDirect2D::roundToDevicePixels):
        (WebCore::GraphicsContextDirect2D::drawLinesForText):
        (WebCore::GraphicsContextDirect2D::setURLForRect):
        (WebCore::GraphicsContextDirect2D::setIsCALayerContext):
        (WebCore::GraphicsContextDirect2D::isCALayerContext const):
        (WebCore::GraphicsContextDirect2D::setIsAcceleratedContext):
        (WebCore::GraphicsContextDirect2D::isAcceleratedContext const):
        (WebCore::GraphicsContextDirect2D::applyDeviceScaleFactor):
        (WebCore::GraphicsContextDirect2D::fillEllipse):
        (WebCore::GraphicsContextDirect2D::strokeEllipse):
        (WebCore::GraphicsContextDirect2D::drawGlyphs):
        (WebCore::GraphicsContextDirect2D::clipToDrawingCommands):
        (WebCore::GraphicsContextDirect2D::clipToImageBuffer):
        (WebCore::GraphicsContextDirect2D::paintFrameForMedia):
        (WebCore::GraphicsContext::GraphicsContext): Deleted.
        (WebCore::GraphicsContext::systemFactory): Deleted.
        (WebCore::GraphicsContext::defaultRenderTarget): Deleted.
        (WebCore::GraphicsContext::platformInit): Deleted.
        (WebCore::GraphicsContext::platformDestroy): Deleted.
        (WebCore::GraphicsContext::platformContext const): Deleted.
        (WebCore::GraphicsContext::savePlatformState): Deleted.
        (WebCore::GraphicsContext::restorePlatformState): Deleted.
        (WebCore::GraphicsContext::drawPlatformImage): Deleted.
        (WebCore::GraphicsContext::releaseWindowsContext): Deleted.
        (WebCore::GraphicsContext::drawWindowsBitmap): Deleted.
        (WebCore::GraphicsContext::drawFocusRing): Deleted.
        (WebCore::GraphicsContext::drawDotsForDocumentMarker): Deleted.
        (WebCore::GraphicsContext::brushWithColor): Deleted.
        (WebCore::GraphicsContext::colorWithGlobalAlpha const): Deleted.
        (WebCore::GraphicsContext::solidStrokeBrush const): Deleted.
        (WebCore::GraphicsContext::solidFillBrush const): Deleted.
        (WebCore::GraphicsContext::patternStrokeBrush const): Deleted.
        (WebCore::GraphicsContext::patternFillBrush const): Deleted.
        (WebCore::GraphicsContext::beginDraw): Deleted.
        (WebCore::GraphicsContext::endDraw): Deleted.
        (WebCore::GraphicsContext::flush): Deleted.
        (WebCore::GraphicsContext::drawPlatformPattern): Deleted.
        (WebCore::GraphicsContext::drawRect): Deleted.
        (WebCore::GraphicsContext::platformStrokeStyle const): Deleted.
        (WebCore::GraphicsContext::drawLine): Deleted.
        (WebCore::GraphicsContext::drawEllipse): Deleted.
        (WebCore::GraphicsContext::applyStrokePattern): Deleted.
        (WebCore::GraphicsContext::applyFillPattern): Deleted.
        (WebCore::GraphicsContext::drawPath): Deleted.
        (WebCore::GraphicsContext::fillPath): Deleted.
        (WebCore::GraphicsContext::strokePath): Deleted.
        (WebCore::GraphicsContext::fillRect): Deleted.
        (WebCore::GraphicsContext::platformFillRoundedRect): Deleted.
        (WebCore::GraphicsContext::fillRectWithRoundedHole): Deleted.
        (WebCore::GraphicsContext::clip): Deleted.
        (WebCore::GraphicsContext::clipOut): Deleted.
        (WebCore::GraphicsContext::clipPath): Deleted.
        (WebCore::GraphicsContext::clipBounds const): Deleted.
        (WebCore::GraphicsContext::beginPlatformTransparencyLayer): Deleted.
        (WebCore::GraphicsContext::endPlatformTransparencyLayer): Deleted.
        (WebCore::GraphicsContext::supportsTransparencyLayers): Deleted.
        (WebCore::GraphicsContext::setPlatformShadow): Deleted.
        (WebCore::GraphicsContext::clearPlatformShadow): Deleted.
        (WebCore::GraphicsContext::setPlatformStrokeStyle): Deleted.
        (WebCore::GraphicsContext::setMiterLimit): Deleted.
        (WebCore::GraphicsContext::clearRect): Deleted.
        (WebCore::GraphicsContext::strokeRect): Deleted.
        (WebCore::GraphicsContext::setLineCap): Deleted.
        (WebCore::GraphicsContext::setLineDash): Deleted.
        (WebCore::GraphicsContext::setLineJoin): Deleted.
        (WebCore::GraphicsContext::canvasClip): Deleted.
        (WebCore::GraphicsContext::scale): Deleted.
        (WebCore::GraphicsContext::rotate): Deleted.
        (WebCore::GraphicsContext::translate): Deleted.
        (WebCore::GraphicsContext::concatCTM): Deleted.
        (WebCore::GraphicsContext::setCTM): Deleted.
        (WebCore::GraphicsContext::getCTM const): Deleted.
        (WebCore::GraphicsContext::roundToDevicePixels): Deleted.
        (WebCore::GraphicsContext::drawLineForText): Deleted.
        (WebCore::GraphicsContext::drawLinesForText): Deleted.
        (WebCore::GraphicsContext::setURLForRect): Deleted.
        (WebCore::GraphicsContext::setPlatformImageInterpolationQuality): Deleted.
        (WebCore::GraphicsContext::setIsCALayerContext): Deleted.
        (WebCore::GraphicsContext::isCALayerContext const): Deleted.
        (WebCore::GraphicsContext::setIsAcceleratedContext): Deleted.
        (WebCore::GraphicsContext::isAcceleratedContext const): Deleted.
        (WebCore::GraphicsContext::setPlatformTextDrawingMode): Deleted.
        (WebCore::GraphicsContext::setPlatformStrokeColor): Deleted.
        (WebCore::GraphicsContext::setPlatformStrokeThickness): Deleted.
        (WebCore::GraphicsContext::setPlatformFillColor): Deleted.
        (WebCore::GraphicsContext::setPlatformShouldAntialias): Deleted.
        (WebCore::GraphicsContext::setPlatformShouldSmoothFonts): Deleted.
        (WebCore::GraphicsContext::setPlatformAlpha): Deleted.
        (WebCore::GraphicsContext::setPlatformCompositeOperation): Deleted.
        (WebCore::GraphicsContext::platformApplyDeviceScaleFactor): Deleted.
        (WebCore::GraphicsContext::platformFillEllipse): Deleted.
        (WebCore::GraphicsContext::platformStrokeEllipse): Deleted.
        * platform/graphics/win/GraphicsContextImplDirect2D.cpp: Removed.
        * platform/graphics/win/GraphicsContextImplDirect2D.h: Removed.
        * platform/graphics/win/GraphicsContextWin.cpp:
        (WebCore::GraphicsContext::setShouldIncludeChildWindows):
        (WebCore::GraphicsContext::shouldIncludeChildWindows const):
        (WebCore::GraphicsContext::createWindowsBitmap):
        (WebCore::GraphicsContext::getWindowsContext):
        (WebCore::GraphicsContext::hdc const):
        * platform/graphics/win/ImageBufferDirect2DBackend.cpp:
        (WebCore::ImageBufferDirect2DBackend::create):
        * platform/graphics/win/ImageCGWin.cpp:
        (WebCore::BitmapImage::getHBITMAPOfSize):
        * platform/graphics/win/ImageCairoWin.cpp:
        (WebCore::BitmapImage::getHBITMAPOfSize):
        * platform/graphics/win/PathDirect2D.cpp:
        (WebCore::Path::strokeContains const):
        (WebCore::Path::strokeBoundingRect const):
        * platform/ios/DragImageIOS.mm:
        (WebCore::createDragImageFromImage):
        (WebCore::createDragImageForLink):
        (WebCore::createDragImageForSelection):
        (WebCore::createDragImageForRange):
        (WebCore::createDragImageForColor):
        * platform/mediastream/cocoa/AudioMediaStreamTrackRendererCocoa.cpp:
        * platform/win/DragImageWin.cpp:
        (WebCore::createDragImageForLink):
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenuWin::paint):
        * rendering/ContentfulPaintChecker.cpp:
        (WebCore::ContentfulPaintChecker::qualifiesForContentfulPaint):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::applyBoxShadowForBackground):
        (WebCore::RenderBoxModelObject::paintBoxShadow):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateEventRegion):

2021-05-25  Chris Dumez  <cdumez@apple.com>

        Stop using UncheckedLock in Node's s_eventTargetDataMapLock
        https://bugs.webkit.org/show_bug.cgi?id=226191

        Reviewed by Geoffrey Garen.

        Stop using UncheckedLock in Node's s_eventTargetDataMapLock. This is a step towards phasing
        out UncheckedLock in favor of Lock which supports Clang Thread Safety Analysis.

        Note that I had to factor the code a little differently because Clang Thread Safety Analysis
        doesn't support conditional locking.

        * dom/Node.cpp:
        (WebCore::Node::eventTargetDataConcurrently):

2021-05-25  Chris Dumez  <cdumez@apple.com>

        Stop using UncheckedLock in html/canvas
        https://bugs.webkit.org/show_bug.cgi?id=226186

        Reviewed by Darin Adler.

        Stop using UncheckedLock in html/canvas. This is a step towards phasing out
        UncheckedLock, in favor of the checked Lock. Technically, the code still
        doesn't do much thread-safety analysis after this change. It is very difficult
        to adopt thread-safety analysis here because the call sites don't always lock
        (there are cases where no locking is needed). It is also hard to get a reference
        to the various locks to make WTF_REQUIRES_LOCK() work.

        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::deleteVertexArray):
        * html/canvas/WebGLContextGroup.cpp:
        (WebCore::WebGLContextGroup::objectGraphLockForAContext):
        * html/canvas/WebGLContextGroup.h:
        * html/canvas/WebGLContextObject.cpp:
        (WebCore::WebGLContextObject::objectGraphLockForContext):
        * html/canvas/WebGLContextObject.h:
        * html/canvas/WebGLObject.h:
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::objectGraphLock):
        * html/canvas/WebGLRenderingContextBase.h:
        * html/canvas/WebGLSharedObject.cpp:
        (WebCore::WebGLSharedObject::objectGraphLockForContext):
        * html/canvas/WebGLSharedObject.h:

2021-05-25  Chris Dumez  <cdumez@apple.com>

        [iOS] ASSERTION FAILED: !isMainThread() in WebCore::SpeechRecognitionCaptureSourceImpl::audioSamplesAvailable
        https://bugs.webkit.org/show_bug.cgi?id=226247
        <rdar://problem/78481513>

        Unreviewed, drop threading assertions I added in r277921 as my understanding was wrong
        about which thread the functions run on and they are hitting on the bots.

        * Modules/speech/SpeechRecognitionCaptureSourceImpl.cpp:
        (WebCore::SpeechRecognitionCaptureSourceImpl::updateDataSource):
        * Modules/speech/SpeechRecognitionCaptureSourceImpl.h:

2021-05-25  Sihui Liu  <sihui_liu@apple.com>

        Make error returned by SQLiteIDBBackingStore::getOrEstablishDatabaseInfo more detailed
        https://bugs.webkit.org/show_bug.cgi?id=226124

        Reviewed by Chris Dumez.

        Convert some error loggings to error info to help debug rdar://77532291.

        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
        (WebCore::IDBServer::createOrMigrateRecordsTableIfNecessary):
        (WebCore::IDBServer::SQLiteIDBBackingStore::ensureValidBlobTables):
        (WebCore::IDBServer::SQLiteIDBBackingStore::ensureValidRecordsTable):
        (WebCore::IDBServer::SQLiteIDBBackingStore::ensureValidIndexRecordsTable):
        (WebCore::IDBServer::SQLiteIDBBackingStore::ensureValidIndexRecordsIndex):
        (WebCore::IDBServer::SQLiteIDBBackingStore::ensureValidIndexRecordsRecordIndex):
        (WebCore::IDBServer::SQLiteIDBBackingStore::ensureValidObjectStoreInfoTable):
        (WebCore::IDBServer::SQLiteIDBBackingStore::getOrEstablishDatabaseInfo):
        * Modules/indexeddb/server/SQLiteIDBBackingStore.h:
        * platform/sql/SQLiteDatabase.cpp: add two helper funtions that are used in many places.
        (WebCore::SQLiteDatabase::tableExists):
        (WebCore::SQLiteDatabase::tableSQL):
        (WebCore::SQLiteDatabase::indexSQL):
        * platform/sql/SQLiteDatabase.h:

2021-05-25  Don Olmstead  <don.olmstead@sony.com>

        [PlayStation] Build failure in UserAgentPlayStation
        https://bugs.webkit.org/show_bug.cgi?id=226232

        Unreviewed build fix after r277967.

        * platform/playstation/UserAgentPlayStation.cpp:
        (WebCore::standardUserAgentStatic):

2021-05-25  Chris Dumez  <cdumez@apple.com>

        SecurityPolicyViolationEvent.constructor do not throw any exception as expected when eventInitDict param do not include all the members required
        https://bugs.webkit.org/show_bug.cgi?id=226215

        Reviewed by Darin Adler.

        Update our SecurityPolicyViolationEvent & SecurityPolicyViolationEventInit IDL to match
        Blink more closely, which gets us much closer to the specification:
        - https://w3c.github.io/webappsec-csp/#securitypolicyviolationevent

        I added comments in the IDL for cases where we intentionally don't match the specification
        because it would not be compatible with Blink.

        The following changes were made:
        - Mark documentURI, violatedDirective, effectiveDirective, originalPolicy, disposition and
          statusCode dictionary members as required.
        - Use 'unsigned long' type for lineNumber & columNumber dictionary members instead of 'long'.
        - Add disposition and sample dictionary members.
        - Use USVString type for referrer dictionary member instead of DOMString
        - Allow workers to construct a SecurityPolicyViolationEvent.
        - Add documentURL, blockedURL, sample, disposition, lineno, colno attributes to
          SecurityPolicyViolationEvent.

        * dom/SecurityPolicyViolationEvent.h:
        (WebCore::SecurityPolicyViolationEvent::Init::encode const):
        (WebCore::SecurityPolicyViolationEvent::Init::decode):
        * dom/SecurityPolicyViolationEvent.idl:
        * page/csp/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::reportViolation const):

2021-05-24  Darin Adler  <darin@apple.com>

        Switch from WTF::Optional to std::optional
        https://bugs.webkit.org/show_bug.cgi?id=211674

        Reviewed by Chris Dumez.

        * platform/graphics/VP9Utilities.h: Tweaked coding style a bit.
        Added missing operator!= because std::optional's operator!= relies
        on that, while WTF::Optional's operator!= relied on operator==.

        * platform/mediastream/libwebrtc/GStreamerVideoEncoder.cpp:
        (Encoders::definition): Use a pointer instead of Optional<&>.

        * testing/Internals.cpp:
        (WebCore::Internals::setVP9ScreenSizeAndScaleForTesting): Use a
        form of construction for ScreenDataOverrides that works with both
        WTF::Optional and std::optional. Something about way the old code
        used WTF::makeOptional was not compatible with std::make_optional,
        but it was easy to make it more straightforward and not even have
        to use a "make" function.

2021-05-25  Simon Fraser  <simon.fraser@apple.com>

        Divide by zero in DisplayUpdate::relevantForUpdateFrequency()
        https://bugs.webkit.org/show_bug.cgi?id=226224
        <rdar://76894675>

        Reviewed by Wenson Hsieh.

        Check for non-zero preferredFramesPerSecond before using it as a denominator
        to avoid divide by zero.

        * platform/graphics/DisplayUpdate.cpp:
        (WebCore::DisplayUpdate::relevantForUpdateFrequency const):

2021-05-25  Alan Bujtas  <zalan@apple.com>

        CrashOnOverflow in WebCore::RenderTable::cellBefore(WebCore::RenderTableCell const*)
        https://bugs.webkit.org/show_bug.cgi?id=225949

        Reviewed by Sergio Villar Senin.

        The table section maintains a grid of rows and columns. This grid is used to jump to cells directly during layout (as opposed to tree walking).
        It needs to be re-populated on tree mutations e.g when a new row is added to the table.
        RenderTableSection::willInsertTableRow assumes that rows and cells are inserted subsequently, after each other and
        it's ok to ignore the grid invalidation on the first row insertion (beforeChild is nullptr). 
        However in case of continuation split (e.g <table> is inside of an inline element and this inline element
        needs to be split due to a block level box insertion), the row and all of its cells are cloned and inserted under the table section at once.

        Test: fast/table/table-split-on-insert-with-section-crash.html

        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::willInsertTableRow): fun fact: this code dates back to r3351 "The new table code from Lars.".

2021-05-25  Alan Bujtas  <zalan@apple.com>

        [LFC][TFC] Percent height resolving quirk should stop at the table formatting context root
        https://bugs.webkit.org/show_bug.cgi?id=226156

        Reviewed by Darin Adler.

        Test: fast/layoutformattingcontext/table-with-percent-height-descendant.html

        * layout/formattingContexts/FormattingQuirks.h:
        * layout/formattingContexts/table/TableFormattingQuirks.cpp:
        (WebCore::Layout::TableFormattingQuirks::heightValueOfNearestContainingBlockWithFixedHeight const):
        * layout/formattingContexts/table/TableFormattingQuirks.h:

2021-05-25  Chris Dumez  <cdumez@apple.com>

        Stop using UncheckedLock in DatabaseTracker
        https://bugs.webkit.org/show_bug.cgi?id=226208

        Reviewed by Sam Weinig.

        Stop using UncheckedLock in DatabaseTracker. This is a step towards phasing out the
        UncheckedLock in favor of the regular Lock which support Clang thread safety analysis.

        In this particular instance, I have opted to annotate the functions that gave out
        warning with WTF_IGNORES_THREAD_SAFETY_ANALYSIS. I initially tried to use proper
        annotations (WTF_ACQUIRES_LOCK() / WTF_RELEASES_LOCK()). However, the call sites are
        Objective C functions and I am unable to annotate those.

        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::openDatabaseMutex):
        * Modules/webdatabase/DatabaseTracker.h:

2021-05-25  Simon Fraser  <simon.fraser@apple.com>

        Initialize WebCore and WebKit logging channels in the GPU Process
        https://bugs.webkit.org/show_bug.cgi?id=226210

        Reviewed by Andy Estes.

        Send the strings representing the enabled WebCore and WebKit logging channels to the
        GPU Process, and use them to initialize log channels there, as we do for the WebContent
        process.

        * platform/LogInitialization.h: Export logLevelString().
        * platform/Logging.h: Remove functions that are declared in LogInitialization.h.
        * platform/mac/LoggingMac.mm:

2021-05-25  Enrique Ocaña González  <eocanha@igalia.com>

        [GTK] Layout test media/track/track-cue-missing.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=191004

        Reviewed by Alicia Boya Garcia.

        Implemented the missing performTaskAtMediaTime() method, needed by HTMLMediaElement::updateActiveTextTrackCues()
        to trigger custom updates at times that don't fit in the regular updates statically scheduled every 250 ms.
        The implementation uses triggerRepaint() for synchronization instead of timers, computing the current stream time
        of the last video frame to be painted as an heuristic, instead of asking the position to the pipeline (more
        expensive and risky from a non-main thread). If the stream time is beyond the task target time, the task is run
        on the main thread.

        Still, that is not enough. The task scheduled by HTMLMediaElement requires currentTime() to return an accurate
        value, not one cached every 200ms. m_cachedTime needs to be updated more frequently (at least once every main
        loop iteration), but still remain consistent along the whole iteration. This is achieved by enqueing an
        invalidation task (to be run at the end of the current iteration) each time the cached value is set with a value
        coming from a position query.

        The changes in the m_cachedTime management add an overhead between 173% (track-cue-missing test) and 426%
        (regular video playback without subtitles) in the run time spent querying the position to the pipeline. As an
        optimization, the position is now directly queried to the audio and video sink and the highest value (according
        to the current playback direction) is returned. This reduces the overhead to just 63% in the regular playback
        without subtitles case.

        The inner TaskAtMediaTimeScheduler class is used for task target time evaluation. As it can be used from the
        main thread and from a secondary one in triggerRepaint(), it's wrapped in a DataMutex to manage concurrent
        access. The original task is returned to the caller of checkTaskForScheduling() when the currentTime is beyond
        the target time. The caller is then responsible of running the task externally in the main thread, out of the
        influence of the DataMutex lock (the task can be expensive and the lock is only needed to evaluate the triggering
        conditions).

        Covered by existing tests.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        (WebCore::MediaPlayerPrivateGStreamer::TaskAtMediaTimeScheduler::setTask): Configure the object with the right task, targetTime, and current playback direction.
        (WebCore::MediaPlayerPrivateGStreamer::TaskAtMediaTimeScheduler::checkTaskForScheduling): Check if the task must run. In that case, return the task as result so the caller can run it externally on the main thread after the DataMutex lock has been released.
        (WebCore::MediaPlayerPrivateGStreamer::invalidateCachedPosition): Implementation moved to the cpp file.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::MediaPlayerPrivateGStreamer): Don't initialize m_cachedPosition, as it's now an Optional that will be initialized as no-value.
        (WebCore::MediaPlayerPrivateGStreamer::playbackPosition const): Change the time based caching mechanism to a mainloop iteration based one. Directly query the sinks instead of the pipeline for position.
        (WebCore::MediaPlayerPrivateGStreamer::asyncStateChangeDone): Invalidate the Optional, instead of setting an invalid MediaTime.
        (WebCore::MediaPlayerPrivateGStreamer::updateStates): Ditto.
        (WebCore::MediaPlayerPrivateGStreamer::didEnd): Ditto.
        (WebCore::MediaPlayerPrivateGStreamer::performTaskAtMediaTime): Set the task on the TaskAtMediaTimeScheduler when the media is currently playing. That task will run at the target time. The HTMLMediaElement periodic update will already take care if the media isn't currently playing.
        (WebCore::MediaPlayerPrivateGStreamer::invalidateCachedPosition const): Reset Optional<MediaTime> m_cachedTime.
        (WebCore::MediaPlayerPrivateGStreamer::invalidateCachedPositionOnNextIteration const): Enqueue an invalidation on the next mainloop iteration.
        (WebCore::MediaPlayerPrivateGStreamer::triggerRepaint): Check if the PendingTask needs to be run, using the streaming time of the last rendered sample as an approximate way to get the position, and run it if that's the case.

2021-05-25  Tim Nguyen  <ntim@apple.com>

        Add basic <dialog> element UA styles
        https://bugs.webkit.org/show_bug.cgi?id=226169

        Reviewed by Antti Koivisto.

        Basic styles from https://html.spec.whatwg.org/#flow-content-3

        * css/dialog.css:
        (dialog):

2021-05-25  Frederic Wang  <fwang@igalia.com>

        Crash in CompositeEditCommand::splitTreeToNode via InsertParagraphSeparatorCommand::doApply
        https://bugs.webkit.org/show_bug.cgi?id=225267

        Reviewed by Ryosuke Niwa.

        WebCore::Position::upstream behaves specially for table renderer, which may confuse the
        execution of WebCore::InsertParagraphSeparatorCommand::doApply() when the visible position
        is within a table, leading to a debug assertion failure and a nullptr dereference in release
        build. In r273375, this was fixed for DOM elements with the table tag, but this does not work
        for display: table. This patch instead directly calls isRenderedTable, for consistency with
        WebCore::Position::upstream.

        Test: fast/editing/paste-and-match-style-with-table-2-crash.html

        * editing/markup.cpp:
        (WebCore::createFragmentFromText): Use isRenderedTable instead of checking the tag name.

2021-05-25  Ian Gilbert  <iang@apple.com>

        Only create MediaElementSession when necessary
        https://bugs.webkit.org/show_bug.cgi?id=226132

        Reviewed by Eric Carlson.

        Some methods had an unexpected side effect of creating a MediaElementSession.
        Modified these to not create one if one does not already exist.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::enqueuePlaybackTargetAvailabilityChangedEvent):
        (WebCore::HTMLMediaElement::mediaState const):

2021-05-24  Zan Dobersek  <zdobersek@igalia.com>

        GLContextEGL::swapBuffers() shouldn't do anything for Surfaceless contexts
        https://bugs.webkit.org/show_bug.cgi?id=226164

        Reviewed by Philippe Normand.

        In case of a surfaceless GLContextEGL, the swapBuffers() method should
        return early, avoiding an assert expecting a non-null EGLSurface (not
        viable for surfaceless context) and a call to eglSwapBuffers(), which
        on some drivers could still fail even when the surfaceless context
        support is present and active.

        * platform/graphics/egl/GLContextEGL.cpp:
        (WebCore::GLContextEGL::swapBuffers):

2021-05-24  Cathie Chen  <cathiechen@igalia.com>

        Use the parsed width and height attributes as a presentational hint for aspect-ratio CSS property
        https://bugs.webkit.org/show_bug.cgi?id=217529

        Reviewed by Antti Koivisto.

        The feature "mapping attributes width and height to aspect ratio" currently is handled by RenderReplaced::computeIntrinsicRatioInformation.
        However, per [1], the non-negative width and height attributes are expected to be used as a presentational hint for the aspect-ratio property.
        This patch addes HTMLElement::applyAspectRatioFromWidthAndHeightAttributesToStyle to apply the attributes to m_presentationAttributeStyle.
        Also this patch supports the feature for <video> and <input> with type="image".

        [1] https://html.spec.whatwg.org/#map-to-the-aspect-ratio-property-(using-dimension-rules)

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::applyAspectRatioFromWidthAndHeightAttributesToStyle): Apply attributes width / height to aspectRatio of style if they aren't negative.
        * html/HTMLElement.h:
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::collectStyleForPresentationAttribute): Use attributes width and height as a presentational hint for aspect-ratio.
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::collectStyleForPresentationAttribute): If isImageButton(), collect attributes width and height as aspect-ratio of m_presentationAttributeStyle.
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::collectStyleForPresentationAttribute): Ditto.
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::computeIntrinsicRatioInformation const): The intrinsicRatio is logicalAspectRatio()
        if error image is not showing alt text.
        (WebCore::RenderImage::canMapWidthHeightToAspectRatio const): Deleted. Remove the legacy code.
        * rendering/RenderImage.h:
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::computeIntrinsicRatioInformation const): Ditto.
        (WebCore::RenderReplaced::intrinsicAspectRatioFromWidthHeight const): Deleted. Ditto.
        * rendering/RenderReplaced.h:
        (WebCore::RenderReplaced::canMapWidthHeightToAspectRatio const): Deleted. Ditto.

2021-05-24  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r277867.
        https://bugs.webkit.org/show_bug.cgi?id=226211

        Causes problems playing YouTube videos

        Reverted changeset:

        "[Cocoa] Last few seconds of 'audio/webm; codecs=vorbis'
        appended to a SampleBuffer are not played"
        https://bugs.webkit.org/show_bug.cgi?id=226069
        https://trac.webkit.org/changeset/277867

2021-05-24  Sam Weinig  <weinig@apple.com>

        DestinationColorSpace's well known color space accessors cause unnecessary retain count churn
        https://bugs.webkit.org/show_bug.cgi?id=226160

        Reviewed by Darin Adler.

        While unlikely to be hot, we can avoid unnecessary retain count churn of
        the well known color spaces on DestinationColorSpace by switching their
        signature to return a const-reference and storing/returning a static instance.

        * platform/graphics/DestinationColorSpace.cpp:
        (WebCore::knownColorSpace):
        (WebCore::DestinationColorSpace::SRGB):
        (WebCore::DestinationColorSpace::LinearSRGB):
        (WebCore::DestinationColorSpace::DisplayP3):
        * platform/graphics/DestinationColorSpace.h:

2021-05-24  Chris Dumez  <cdumez@apple.com>

        [GStreamer] Stop using UncheckedLock in VideoRenderRequestScheduler
        https://bugs.webkit.org/show_bug.cgi?id=226192

        Reviewed by Sam Weinig.

        Stop using UncheckedLock in VideoRenderRequestScheduler to benefit from Clang thread safety
        analysis.

        * platform/graphics/gstreamer/VideoSinkGStreamer.cpp:
        (VideoRenderRequestScheduler::start):
        (VideoRenderRequestScheduler::stop):
        (VideoRenderRequestScheduler::drain):
        (VideoRenderRequestScheduler::requestRender):

2021-05-24  Sam Weinig  <weinig@apple.com>

        Convert DestinationColorSpace from an enum to class wrapping a platform color space (CGColorSpaceRef for CG ports, etc.)
        https://bugs.webkit.org/show_bug.cgi?id=226143

        Reviewed by Darin Adler.

        Replace enumeration based DestinationColorSpace with a struct wrapping
        a platform color space (CGColorSpaceRef for CG ports, etc.). For ports
        that don't have a platform level color space type, a builtin PlatformColorSpace
        type is provided that is just the old enum renamed to PlatformColorSpace::Name.

        The goal of this change is to unify the currently bifurcated concept of an
        ImageBuffer's color space, which previosly could either be based on the 
        DestinationColorSpace (and reflected in the colorSpace() member function),
        or (for CG ports) based on a CGColorSpaceRef, with the colorSpace() function
        returning sRGB even if the ImageBuffer was not. 

        * Headers.cmake:
        * Modules/async-clipboard/ClipboardItemBindingsDataSource.cpp:
        (WebCore::ClipboardItemBindingsDataSource::ClipboardItemTypeLoader::sanitizeDataIfNeeded):
        * Modules/mediasession/MediaMetadata.cpp:
        (WebCore::ArtworkImageLoader::notifyFinished):
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::dumpImageBitmap):
        (WebCore::CloneDeserializer::readImageBitmap):
        * css/CSSFilterImageValue.cpp:
        (WebCore::CSSFilterImageValue::image):
        * html/CustomPaintCanvas.cpp:
        (WebCore::CustomPaintCanvas::copiedImage const):
        * html/CustomPaintImage.cpp:
        (WebCore::CustomPaintImage::drawPattern):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::toMediaSample):
        (WebCore::HTMLCanvasElement::createImageBuffer const):
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::createBufferForPainting const):
        * html/HTMLVideoElement.h:
        * html/ImageBitmap.cpp:
        (WebCore::ImageBitmap::createImageBuffer):
        (WebCore::ImageBitmap::createPromise):
        * html/OffscreenCanvas.cpp:
        (WebCore::OffscreenCanvas::commitToPlaceholderCanvas):
        * html/canvas/CanvasRenderingContext.cpp:
        (WebCore::CanvasRenderingContext::colorSpace const):
        * html/canvas/CanvasRenderingContext.h:
        * html/canvas/CanvasRenderingContext2D.cpp:
        * html/canvas/ImageBitmapRenderingContext.cpp:
        (WebCore::ImageBitmapRenderingContext::setOutputBitmap):
        * html/canvas/PredefinedColorSpace.cpp:
        (WebCore::toDestinationColorSpace):
        (WebCore::toPredefinedColorSpace):
        * html/canvas/PredefinedColorSpace.h:
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::LRUImageBufferCache::imageBuffer):
        * html/shadow/MediaControlTextTrackContainerElement.cpp:
        (WebCore::MediaControlTextTrackContainerElement::createTextTrackRepresentationImage):
        * inspector/InspectorCanvas.cpp:
        (WebCore::InspectorCanvas::indexForData):
        (WebCore::InspectorCanvas::buildArrayForCanvasPattern):
        * page/Chrome.cpp:
        (WebCore::Chrome::createImageBuffer const):
        * page/Chrome.h:
        * page/ChromeClient.h:
        (WebCore::ChromeClient::createImageBuffer const):
        * page/FrameSnapshotting.cpp:
        (WebCore::snapshotFrameRectWithClip):
        * page/PageColorSampler.cpp:
        (WebCore::sampleColor):
        * page/PageConsoleClient.cpp:
        (WebCore::PageConsoleClient::screenshot):
        * platform/HostWindow.h:
        * platform/PlatformColorSpace.h: Added.
        (WebCore::PlatformColorSpace::get const):
        * platform/PlatformScreen.h:
        * platform/ScreenProperties.h:
        (WebCore::ScreenProperties::encode const):
        (WebCore::ScreenData::encode const):
        (WebCore::ScreenData::decode):
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::preTransformedNativeImageForCurrentFrame):
        (WebCore::BitmapImage::drawPattern):
        * platform/graphics/Color.cpp:
        (WebCore::Color::toColorComponentsInColorSpace const):
        * platform/graphics/Color.h:
        * platform/graphics/ColorConversion.cpp:
        (WebCore::converColorComponents):
        * platform/graphics/ColorConversion.h:
        * platform/graphics/ColorSpace.cpp:
        * platform/graphics/ColorSpace.h:
        * platform/graphics/ConcreteImageBuffer.h:
        (WebCore::ConcreteImageBuffer::create):
        * platform/graphics/CrossfadeGeneratedImage.cpp:
        (WebCore::CrossfadeGeneratedImage::drawPattern):
        * platform/graphics/DestinationColorSpace.cpp: Added.
        (WebCore::DestinationColorSpace::SRGB):
        (WebCore::DestinationColorSpace::LinearSRGB):
        (WebCore::DestinationColorSpace::DisplayP3):
        (WebCore::DestinationColorSpace::DestinationColorSpace):
        (WebCore::operator==):
        (WebCore::operator!=):
        (WebCore::operator<<):
        * platform/graphics/DestinationColorSpace.h: Added.
        (WebCore::DestinationColorSpace::platformColorSpace const):
        (WebCore::DestinationColorSpace::encode const):
        (WebCore::DestinationColorSpace::decode):
        * platform/graphics/GradientImage.cpp:
        (WebCore::GradientImage::drawPattern):
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::clipToDrawingCommands):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/GraphicsContextImpl.h:
        * platform/graphics/ImageBuffer.cpp:
        (WebCore::ImageBuffer::create):
        (WebCore::ImageBuffer::createCompatibleBuffer):
        (WebCore::ImageBuffer::copyRectToBuffer):
        * platform/graphics/ImageBuffer.h:
        * platform/graphics/ImageBufferBackend.cpp:
        (WebCore::ImageBufferBackend::getPixelBuffer const):
        (WebCore::ImageBufferBackend::putPixelBuffer):
        * platform/graphics/ImageBufferBackend.h:
        (WebCore::ImageBufferBackend::transformColorSpace):
        (WebCore::ImageBufferBackend::colorSpace const):
        * platform/graphics/PixelBuffer.h:
        (WebCore::PixelBuffer::decode):
        * platform/graphics/PixelBufferConversion.cpp:
        (WebCore::makeVImageCGImageFormat):
        * platform/graphics/PixelBufferFormat.h:
        (WebCore::PixelBufferFormat::decode):
        * platform/graphics/RemoteVideoSample.cpp:
        (WebCore::transferBGRAPixelBufferToIOSurface):
        (WebCore::RemoteVideoSample::create):
        (WebCore::RemoteVideoSample::RemoteVideoSample):
        (WebCore::RemoteVideoSample::surface const):
        * platform/graphics/RemoteVideoSample.h:
        * platform/graphics/ShadowBlur.cpp:
        (WebCore::ScratchBuffer::getScratchBuffer):
        (WebCore::ShadowBlur::drawRectShadowWithoutTiling):
        (WebCore::ShadowBlur::drawInsetShadowWithoutTiling):
        (WebCore::ShadowBlur::drawRectShadowWithTiling):
        (WebCore::ShadowBlur::drawInsetShadowWithTiling):
        (WebCore::ShadowBlur::blurShadowBuffer):
        (WebCore::ShadowBlur::drawShadowLayer):
        * platform/graphics/angle/GraphicsContextGLANGLE.cpp:
        (WebCore::GraphicsContextGLOpenGL::readPixelsForPaintResults):
        * platform/graphics/cairo/ImageBufferCairoBackend.cpp:
        (WebCore::ImageBufferCairoBackend::transformColorSpace):
        * platform/graphics/cairo/ImageBufferCairoBackend.h:
        * platform/graphics/cg/ColorCG.cpp:
        (WebCore::convertToCGCompatibleComponents):
        (WebCore::createCGColor):
        (WebCore::platformConvertColorComponents):
        * platform/graphics/cg/ColorSpaceCG.h:
        (WebCore::cachedCGColorSpace): Deleted.
        * platform/graphics/cg/GraphicsContextGLCG.cpp:
        (WebCore::GraphicsContextGLOpenGL::paintToCanvas):
        * platform/graphics/cg/IOSurfacePool.cpp:
        (WebCore::surfaceMatchesParameters):
        (WebCore::IOSurfacePool::takeSurface):
        * platform/graphics/cg/IOSurfacePool.h:
        * platform/graphics/cg/ImageBufferCGBackend.cpp:
        (WebCore::createBitmapImageAfterScalingIfNeeded):
        (WebCore::ImageBufferCGBackend::copyCGImageForEncoding const):
        * platform/graphics/cg/ImageBufferCGBitmapBackend.cpp:
        (WebCore::ImageBufferCGBitmapBackend::create):
        (WebCore::ImageBufferCGBitmapBackend::copyNativeImage const):
        * platform/graphics/cg/ImageBufferCGBitmapBackend.h:
        * platform/graphics/cg/ImageBufferIOSurfaceBackend.cpp:
        (WebCore::ImageBufferIOSurfaceBackend::create):
        * platform/graphics/cg/ImageBufferIOSurfaceBackend.h:
        * platform/graphics/cg/ImageBufferUtilitiesCG.cpp:
        (WebCore::encode):
        * platform/graphics/cg/NativeImageCG.cpp:
        (WebCore::NativeImage::singlePixelSolidColor const):
        * platform/graphics/cocoa/GraphicsContextGLOpenGLCocoa.mm:
        (WebCore::GraphicsContextGLOpenGL::allocateAndBindDisplayBufferBacking):
        * platform/graphics/cocoa/IOSurface.h:
        * platform/graphics/cocoa/IOSurface.mm:
        (WebCore::IOSurface::surfaceFromPool):
        (WebCore::IOSurface::create):
        (WebCore::IOSurface::createFromSendRight):
        (WebCore::IOSurface::createFromSurface):
        (WebCore::IOSurface::createFromImage):
        (WebCore::IOSurface::createFromPixelBuffer):
        (WebCore::IOSurface::IOSurface):
        (WebCore::IOSurface::ensurePlatformContext):
        (WebCore::IOSurface::migrateColorSpaceToProperties):
        * platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:
        (WebCore::FilterEffectRendererCoreImage::renderToImageBuffer):
        * platform/graphics/cv/ImageTransferSessionVT.mm:
        (WebCore::ImageTransferSessionVT::createPixelBuffer):
        * platform/graphics/cv/PixelBufferConformerCV.cpp:
        (WebCore::PixelBufferConformerCV::createImageFromPixelBuffer):
        * platform/graphics/displaylists/DisplayListImageBuffer.h:
        (WebCore::DisplayList::ImageBuffer::create):
        * platform/graphics/displaylists/DisplayListItemBuffer.cpp:
        (WebCore::DisplayList::ItemHandle::destroy):
        * platform/graphics/displaylists/DisplayListItems.h:
        (WebCore::DisplayList::BeginClipToDrawingCommands::BeginClipToDrawingCommands):
        (WebCore::DisplayList::BeginClipToDrawingCommands::colorSpace const):
        (WebCore::DisplayList::BeginClipToDrawingCommands::encode const):
        (WebCore::DisplayList::BeginClipToDrawingCommands::decode):
        (WebCore::DisplayList::GetPixelBuffer::GetPixelBuffer):
        (WebCore::DisplayList::GetPixelBuffer::outputFormat const):
        (WebCore::DisplayList::GetPixelBuffer::encode const):
        (WebCore::DisplayList::GetPixelBuffer::decode):
        * platform/graphics/displaylists/DisplayListRecorder.cpp:
        (WebCore::DisplayList::Recorder::clipToDrawingCommands):
        * platform/graphics/displaylists/DisplayListRecorder.h:
        * platform/graphics/filters/FEDisplacementMap.cpp:
        (WebCore::FEDisplacementMap::setResultColorSpace):
        * platform/graphics/filters/FEDisplacementMap.h:
        * platform/graphics/filters/FEFlood.h:
        * platform/graphics/filters/FETile.cpp:
        (WebCore::FETile::platformApplySoftware):
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::convertPixelBufferToColorSpace):
        (WebCore::FilterEffect::convertImageBufferToColorSpace):
        (WebCore::FilterEffect::copyConvertedImageBufferToDestination):
        (WebCore::FilterEffect::copyConvertedPixelBufferToDestination):
        (WebCore::FilterEffect::requiresPixelBufferColorSpaceConversion):
        (WebCore::FilterEffect::transformResultColorSpace):
        * platform/graphics/filters/FilterEffect.h:
        (WebCore::FilterEffect::operatingColorSpace const):
        (WebCore::FilterEffect::setOperatingColorSpace):
        (WebCore::FilterEffect::resultColorSpace const):
        (WebCore::FilterEffect::setResultColorSpace):
        * platform/graphics/filters/SourceGraphic.h:
        (WebCore::SourceGraphic::SourceGraphic):
        * platform/gtk/PlatformScreenGtk.cpp:
        (WebCore::screenColorSpace):
        * platform/ios/PlatformScreenIOS.mm:
        (WebCore::screenColorSpace):
        (WebCore::collectScreenProperties):
        * platform/mac/PlatformScreenMac.mm:
        (WebCore::collectScreenProperties):
        (WebCore::screenColorSpace):
        * platform/mac/ThemeMac.mm:
        (WebCore::ThemeMac::drawCellOrFocusRingWithViewIntoContext):
        * platform/mediastream/mac/ScreenDisplayCapturerMac.mm:
        (WebCore::ScreenDisplayCapturerMac::createDisplayStream):
        * platform/mock/MockRealtimeVideoSource.cpp:
        (WebCore::MockRealtimeVideoSource::imageBuffer const):
        * platform/playstation/PlatformScreenPlayStation.cpp:
        (WebCore::screenColorSpace):
        * platform/win/PlatformScreenWin.cpp:
        (WebCore::screenColorSpace):
        * platform/wpe/PlatformScreenWPE.cpp:
        (WebCore::screenColorSpace):
        * platform/xr/PlatformXR.h:
        (PlatformXR::Device::FrameData::LayerData::decode):
        * rendering/CSSFilter.cpp:
        (WebCore::CSSFilter::buildReferenceFilter):
        (WebCore::CSSFilter::build):
        (WebCore::CSSFilter::allocateBackingStoreIfNeeded):
        (WebCore::CSSFilter::apply):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::patternForDescription):
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::paintSystemPreviewBadge):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintProgressBar):
        * rendering/shapes/Shape.cpp:
        (WebCore::Shape::createRasterShape):
        * rendering/svg/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::applyClippingToContext):
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::buildPrimitives const):
        (WebCore::RenderSVGResourceFilter::applyResource):
        (WebCore::RenderSVGResourceFilter::postApplyResource):
        * rendering/svg/RenderSVGResourceGradient.cpp:
        (WebCore::createMaskAndSwapContextForTextGradient):
        * rendering/svg/RenderSVGResourceMasker.cpp:
        (WebCore::RenderSVGResourceMasker::applyResource):
        (WebCore::RenderSVGResourceMasker::drawContentIntoMaskImage):
        * rendering/svg/RenderSVGResourceMasker.h:
        * rendering/svg/RenderSVGResourcePattern.cpp:
        (WebCore::RenderSVGResourcePattern::createTileImage const):
        * rendering/svg/SVGRenderingContext.cpp:
        (WebCore::SVGRenderingContext::createImageBuffer):
        (WebCore::SVGRenderingContext::bufferForeground):
        * rendering/svg/SVGRenderingContext.h:
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::nativeImage):
        (WebCore::SVGImage::drawPatternForContainer):
        * svg/graphics/filters/SVGFEImage.cpp:
        (WebCore::FEImage::platformApplySoftware):

2021-05-24  Alan Bujtas  <zalan@apple.com>

        [LFC] Add support for geometry/quirks virtual functions
        https://bugs.webkit.org/show_bug.cgi?id=226150

        Reviewed by Antti Koivisto.

        This enables us to override quirks/geometry functionality at the subclasses.

        * layout/formattingContexts/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeOutOfFlowHorizontalGeometry):
        (WebCore::Layout::FormattingContext::computeOutOfFlowVerticalGeometry):
        (WebCore::Layout::FormattingContext::computeBorderAndPadding):
        (WebCore::Layout::FormattingContext::layoutOutOfFlowContent):
        (WebCore::Layout::FormattingContext::geometry const): Deleted.
        (WebCore::Layout::FormattingContext::quirks const): Deleted.
        * layout/formattingContexts/FormattingContext.h:
        * layout/formattingContexts/FormattingGeometry.cpp:
        (WebCore::Layout::FormattingGeometry::computedHeightValue const):
        * layout/formattingContexts/FormattingGeometry.h:
        (WebCore::Layout::FormattingGeometry::isBlockFormattingGeometry const):
        (WebCore::Layout::FormattingGeometry::isInlineFormattingGeometry const):
        (WebCore::Layout::FormattingGeometry::isFlexFormattingGeometry const):
        (WebCore::Layout::FormattingGeometry::isTableFormattingGeometry const):
        * layout/formattingContexts/FormattingQuirks.cpp:
        (WebCore::Layout::FormattingQuirks::heightValueOfNearestContainingBlockWithFixedHeight const):
        * layout/formattingContexts/FormattingQuirks.h:
        (WebCore::Layout::FormattingQuirks::isBlockFormattingQuirks const):
        (WebCore::Layout::FormattingQuirks::isInlineFormattingQuirks const):
        (WebCore::Layout::FormattingQuirks::isTableFormattingQuirks const):
        * layout/formattingContexts/block/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::BlockFormattingContext):
        (WebCore::Layout::BlockFormattingContext::layoutInFlowContent):
        (WebCore::Layout::BlockFormattingContext::placeInFlowPositionedChildren):
        (WebCore::Layout::BlockFormattingContext::computeStaticVerticalPosition):
        (WebCore::Layout::BlockFormattingContext::computeStaticHorizontalPosition):
        (WebCore::Layout::BlockFormattingContext::precomputeVerticalPositionForBoxAndAncestors):
        (WebCore::Layout::BlockFormattingContext::computeWidthAndMargin):
        (WebCore::Layout::BlockFormattingContext::computeHeightAndMargin):
        (WebCore::Layout::BlockFormattingContext::computedIntrinsicWidthConstraints):
        (WebCore::Layout::BlockFormattingContext::geometry const): Deleted.
        * layout/formattingContexts/block/BlockFormattingContext.h:
        (WebCore::Layout::BlockFormattingContext::formattingState):
        (WebCore::Layout::BlockFormattingContext::blockFormattingGeometry const):
        (WebCore::Layout::BlockFormattingContext::blockFormattingQuirks const):
        * layout/formattingContexts/block/BlockFormattingGeometry.cpp:
        (WebCore::Layout::BlockFormattingGeometry::inFlowContentHeightAndMargin const):
        * layout/formattingContexts/block/BlockFormattingGeometry.h:
        * layout/formattingContexts/block/BlockFormattingQuirks.cpp:
        (WebCore::Layout::BlockFormattingQuirks::stretchedInFlowHeightIfApplicable const):
        * layout/formattingContexts/block/BlockFormattingQuirks.h:
        * layout/formattingContexts/block/tablewrapper/TableWrapperBlockFormattingContext.cpp:
        (WebCore::Layout::TableWrapperBlockFormattingContext::TableWrapperBlockFormattingContext):
        (WebCore::Layout::TableWrapperBlockFormattingContext::layoutTableBox):
        (WebCore::Layout::TableWrapperBlockFormattingContext::computeBorderAndPaddingForTableBox):
        (WebCore::Layout::TableWrapperBlockFormattingContext::computeWidthAndMarginForTableBox):
        (WebCore::Layout::TableWrapperBlockFormattingContext::computeHeightAndMarginForTableBox):
        * layout/formattingContexts/block/tablewrapper/TableWrapperBlockFormattingContext.h:
        * layout/formattingContexts/block/tablewrapper/TableWrapperBlockFormattingQuirks.cpp:
        (WebCore::Layout::TableWrapperQuirks::overriddenTableHeight const):
        * layout/formattingContexts/block/tablewrapper/TableWrapperBlockFormattingQuirks.h:
        * layout/formattingContexts/flex/FlexFormattingContext.cpp:
        (WebCore::Layout::FlexFormattingContext::FlexFormattingContext):
        (WebCore::Layout::FlexFormattingContext::sizeAndPlaceFlexItems):
        (WebCore::Layout::FlexFormattingContext::computeIntrinsicWidthConstraintsForFlexItems):
        (WebCore::Layout::FlexFormattingContext::geometry const): Deleted.
        * layout/formattingContexts/flex/FlexFormattingContext.h:
        * layout/formattingContexts/flex/FlexFormattingGeometry.h:
        * layout/formattingContexts/inline/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::InlineFormattingContext):
        (WebCore::Layout::InlineFormattingContext::layoutInFlowContent):
        (WebCore::Layout::InlineFormattingContext::lineLayout):
        (WebCore::Layout::InlineFormattingContext::computedIntrinsicWidthConstraints):
        (WebCore::Layout::InlineFormattingContext::computeIntrinsicWidthForFormattingRoot):
        (WebCore::Layout::InlineFormattingContext::computeHorizontalMargin):
        (WebCore::Layout::InlineFormattingContext::computeWidthAndMargin):
        (WebCore::Layout::InlineFormattingContext::computeHeightAndMargin):
        (WebCore::Layout::InlineFormattingContext::computeGeometryForLineContent):
        (WebCore::Layout::InlineFormattingContext::geometry const): Deleted.
        * layout/formattingContexts/inline/InlineFormattingContext.h:
        * layout/formattingContexts/inline/InlineFormattingGeometry.cpp:
        (WebCore::Layout::LineBoxBuilder::computeLineBoxHeightAndAlignInlineLevelBoxesVertically):
        (WebCore::Layout::InlineFormattingGeometry::lineBoxForLineContent const):
        (WebCore::Layout::InlineFormattingGeometry::inlineLevelBoxAffectsLineBox const):
        (WebCore::Layout::InlineFormattingGeometry::lineBoxForLineContent): Deleted.
        * layout/formattingContexts/inline/InlineFormattingGeometry.h:
        * layout/formattingContexts/inline/InlineFormattingQuirks.h:
        * layout/formattingContexts/inline/InlineLineBuilder.cpp:
        (WebCore::Layout::isAtSoftWrapOpportunity):
        * layout/formattingContexts/table/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::TableFormattingContext):
        (WebCore::Layout::TableFormattingContext::setUsedGeometryForRows):
        (WebCore::Layout::TableFormattingContext::layoutCell):
        (WebCore::Layout::TableFormattingContext::computedPreferredWidthForColumns):
        (WebCore::Layout::TableFormattingContext::computeAndDistributeExtraSpace):
        (WebCore::Layout::TableFormattingContext::geometry const): Deleted.
        * layout/formattingContexts/table/TableFormattingContext.h:
        * layout/formattingContexts/table/TableFormattingGeometry.h:
        * layout/formattingContexts/table/TableFormattingQuirks.h:
        * layout/formattingContexts/table/TableLayout.cpp:
        (WebCore::Layout::TableFormattingContext::TableLayout::distributedVerticalSpace):
        * layout/integration/LayoutIntegrationInlineContentBuilder.cpp:
        (WebCore::LayoutIntegration::InlineContentBuilder::createDisplayNonRootInlineBoxes const):

2021-05-24  Darin Adler  <darin@apple.com>

        Remove StringBuilder::appendLiteral
        https://bugs.webkit.org/show_bug.cgi?id=226137

        Reviewed by Chris Dumez.

        * Modules/fetch/FetchBodyConsumer.cpp:
        (WebCore::packageFormData): Use auto for the result of makeString.

        * Modules/indexeddb/IDBKeyData.cpp:
        (WebCore::IDBKeyData::loggingString const): Use append instead
        of appendLiteral.

        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
        (WebCore::IDBServer::SQLiteIDBBackingStore::addRecord): Use auto
        for the result of makeString.

        * Modules/indexeddb/server/SQLiteIDBCursor.cpp:
        (WebCore::IDBServer::buildPreIndexStatement): Use makeString
        instead of StringBuilder.
        (WebCore::IDBServer::buildIndexStatement): Ditto.
        (WebCore::IDBServer::buildObjectStoreStatement): Ditto.

        * Modules/websockets/WebSocket.cpp:
        (WebCore::encodeProtocolString): Use append instead of appendLiteral.
        * Modules/websockets/WebSocketExtensionDispatcher.cpp:
        (WebCore::WebSocketExtensionDispatcher::appendAcceptedExtension): Ditto.

        * Modules/websockets/WebSocketHandshake.cpp:
        (WebCore::WebSocketHandshake::clientHandshakeMessage const): Use
        makeString instead of StringBuilder.
        (WebCore::WebSocketHandshake::clientHandshakeRequest const): Tweak
        to match the function above more closely, and use ASCIILiteral.

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (formatForDebugger): Use makeString instead of StringBuilder.

        * contentextensions/CombinedURLFilters.cpp:
        (WebCore::ContentExtensions::prefixTreeVertexToString): Use
        append instead of appendLiteral.
        * css/CSSBasicShapes.cpp:
        (WebCore::buildCircleString): Ditto.
        (WebCore::buildEllipseString): Ditto.
        (WebCore::buildPathString): Ditto.
        (WebCore::buildPolygonString): Ditto.
        (WebCore::buildInsetString): Ditto.
        * css/CSSGradientValue.cpp:
        (WebCore::CSSLinearGradientValue::customCSSText const): Ditto.
        (WebCore::CSSRadialGradientValue::customCSSText const): Ditto.
        (WebCore::CSSConicGradientValue::customCSSText const): Ditto.

        * css/CSSGridIntegerRepeatValue.cpp:
        (WebCore::CSSGridIntegerRepeatValue::customCSSText const):
        Use makeString instead of StringBuilder.

        * css/CSSImageSetValue.cpp:
        (WebCore::CSSImageSetValue::customCSSText const): Use append
        instead of appendLiteral.

        * css/CSSImportRule.cpp:
        (WebCore::CSSImportRule::cssText const): Use makeString instead
        of StringBuilder.
        * css/CSSKeyframeRule.cpp:
        (WebCore::StyleRuleKeyframe::cssText const): Ditto.

        * css/CSSKeyframesRule.cpp:
        (WebCore::CSSKeyframesRule::cssText const): Use variadic append.

        * css/CSSLineBoxContainValue.cpp:
        (WebCore::CSSLineBoxContainValue::customCSSText const): Use
        append instead of appendLiteral.
        * css/CSSNamespaceRule.cpp:
        (WebCore::CSSNamespaceRule::cssText const): Ditto.

        * css/CSSPageRule.cpp:
        (WebCore::CSSPageRule::cssText const): Use makeString instead of
        StringBuilder.
        * css/CSSPaintImageValue.cpp:
        (WebCore::CSSPaintImageValue::customCSSText const): Ditto.

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::formatNumberForCustomCSSText const):
        Use append instead of appendLiteral.

        * css/CSSSelector.cpp:
        (WebCore::appendLangArgumentList): Use variadic append.
        (WebCore::CSSSelector::selectorText const): Ditto. Also use
        append instead of appendLiteral and make some improvements to
        cut down on allocations a little.

        * css/CSSSelectorList.cpp:
        (WebCore::CSSSelectorList::buildSelectorsText const): Use
        append instead of appendLiteral.

        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::CSSStyleSheet): Moved more of the
        data member initialization to the class definition.
        (WebCore::CSSStyleSheet::addRule): Use makeString instead of
        StringBuilder.
        * css/CSSStyleSheet.h: Moved initialization here.

        * css/CSSTimingFunctionValue.cpp:
        (WebCore::CSSStepsTimingFunctionValue::customCSSText const):
        Use makeString instead of StringBuilder.
        (WebCore::CSSSpringTimingFunctionValue::customCSSText const):
        Ditto.

        * css/MediaList.cpp:
        (WebCore::MediaQuerySet::mediaText const): Use append instead
        of appendLiteral.
        * css/MediaQuery.cpp:
        (WebCore::MediaQuery::serialize const): Ditto.

        * css/MediaQueryExpression.cpp:
        (WebCore::MediaQueryExpression::serialize const): Use makeString
        instead of StringBuilder.

        * css/StyleProperties.cpp:
        (WebCore::StyleProperties::getLayeredShorthandValue const):
        Use append instead of appendLiteral.

        * css/parser/CSSParserToken.cpp:
        (WebCore::CSSParserToken::serialize const): Removed a lot of
        unnecessary braces. Use variadic append and append instead of appendLiteral.

        * dom/Document.cpp:
        (WebCore::Document::initSecurityContext): Use auto for the result
        of makeString.

        * dom/Element.cpp:
        (WebCore::appendAttributes): Use variadic append and append
        instead of appendLiteral.
        * dom/SecurityContext.cpp:
        (WebCore::SecurityContext::parseSandboxPolicy): Ditto.
        * editing/HTMLInterchange.cpp:
        (WebCore::convertHTMLTextToInterchangeFormat): Ditto.

        * editing/TextIterator.cpp:
        (WebCore::createSearcher): Use auto for the result of makeString.

        * editing/markup.cpp:
        (WebCore::StyledMarkupAccumulator::appendStyleNodeOpenTag):
        Use append instead of appendLiteral.
        (WebCore::StyledMarkupAccumulator::appendStartTag): Ditto.
        (WebCore::urlToMarkup): Ditto.
        * html/FormController.cpp:
        (WebCore::recordFormStructure): Ditto.

        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::reportValidity): Use auto for
        the result of makeString.
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::validateInteractively): Ditto.

        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::completeURLsInAttributeValue const):
        Use append insteaed of appendLiteral.

        * html/MediaElementSession.cpp:
        (WebCore::restrictionNames): Use auto for the result of makeString.
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::getUniformLocation): Ditto.
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::ExternalCharacterTokenBuffer::takeRemaining): Ditto.

        * html/parser/XSSAuditorDelegate.cpp:
        (WebCore::buildConsoleError): Use makeString instead of StringBuilder.
        * html/track/TextTrackCue.cpp:
        (WebCore::TextTrackCue::rebuildDisplayTree): Ditto.

        * inspector/InspectorFrontendAPIDispatcher.cpp:
        (WebCore::expressionForEvaluatingCommand): Use append instead of appendLiteral.

        * inspector/InspectorOverlay.cpp:
        (WebCore::InspectorOverlay::drawElementTitle): Use auto for the result of makeString.

        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::addRule): Use append instead of appendLiteral.

        * inspector/agents/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::buildObjectForApplicationCacheResource):
        Use makeString instead of StringBuilder.

        * inspector/agents/WebConsoleAgent.cpp:
        (WebCore::WebConsoleAgent::didReceiveResponse): Use auto for the result of makeString.
        (WebCore::WebConsoleAgent::didFailLoading): Ditto.
        * loader/MixedContentChecker.cpp:
        (WebCore::logWarning): Ditto
        (WebCore::MixedContentChecker::checkFormForMixedContent): Ditto

        * loader/PrivateClickMeasurement.cpp:
        (WebCore::makeValidURL): Added. Used for various cases below that all construct
        URLs in the same way with the same kinds of checks. Use makeString here instead
        of StringBuilder.
        (WebCore::attributionReportURL): Call makeValidURL.
        (WebCore::PrivateClickMeasurement::tokenSignatureURL const): Ditto.
        (WebCore::PrivateClickMeasurement::tokenPublicKeyURL const): Ditto.

        * loader/ResourceLoadStatistics.cpp:
        (WebCore::appendBoolean): Use append instead of appendLiteral.
        (WebCore::appendHashSet): Ditto.
        (WebCore::appendNavigatorAPIOptionSet): Ditto.
        (WebCore::appendScreenAPIOptionSet): Ditto.
        (WebCore::ResourceLoadStatistics::toString const): Ditto.

        * loader/WorkerThreadableLoader.cpp:
        (WebCore::WorkerThreadableLoader::loadResourceSynchronously): Use auto for
        the result of makeString.
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::postMessage): Ditto.

        * page/Frame.cpp:
        (WebCore::createRegExpForLabels): Use append instead of appendLiteral.
        Also tweak coding style a bit.

        * page/FrameView.cpp:
        (WebCore::FrameView::logMockScrollAnimatorMessage const): Use makeString
        instead of StringBuilder.

        * page/PageSerializer.cpp:
        (WebCore::PageSerializer::SerializerMarkupAccumulator::appendStartTag):
        Use append instead of appendLiteral.
        (WebCore::PageSerializer::serializeCSSStyleSheet): Ditto.
        (WebCore::PageSerializer::urlForBlankFrame): Use auto for the result of
        makeString.

        * page/PerformanceLoggingClient.cpp:
        (WebCore::PerformanceLoggingClient::synchronousScrollingReasonsAsString):
        Use makeString instead of StringBuilder.

        * page/cocoa/ResourceUsageOverlayCocoa.mm:
        (WebCore::ResourceUsageOverlay::platformDraw): Use auto for the result of
        makeString.

        * page/csp/ContentSecurityPolicy.cpp:
        (WebCore::consoleMessageForViolation): Use makeString instsead of StringBuilder.
        (WebCore::ContentSecurityPolicy::allowRunningOrDisplayingInsecureContent): Ditto.
        (WebCore::ContentSecurityPolicy::reportInvalidDirectiveValueCharacter const):
        Get rid of local variable for result of makeString.
        (WebCore::ContentSecurityPolicy::reportInvalidPathCharacter const): Ditto.
        (WebCore::ContentSecurityPolicy::reportInvalidSourceExpression const): Ditto.

        * page/csp/ContentSecurityPolicyDirectiveList.cpp:
        (WebCore::ContentSecurityPolicyDirectiveList::create): Get rid of local
        variable for result of makeString.

        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::synchronousScrollingReasonsAsText):
        Use makeString instead of StringBulder.

        * platform/Decimal.cpp:
        (WebCore::Decimal::toString const): Use append instead of appendLiteral.

        * platform/animation/TimingFunction.cpp:
        (WebCore::TimingFunction::createFromCSSText): Use makeString instead
        of StringBuilder.

        * platform/audio/HRTFElevation.cpp:
        (WebCore::HRTFElevation::calculateKernelsForAzimuthElevation): Use auto
        for the result of makeString.

        * platform/glib/UserAgentGLib.cpp:
        (WebCore::buildUserAgentString): Use append instead of appendLiteral.

        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp:
        (WebCore::InbandTextTrackPrivateAVF::processCueAttributes): Use
        append instead of appendLiteral.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::recursiveCommitChanges): Got rid of local
        variable for result of makeString.
        (WebCore::GraphicsLayerCA::appendToUncommittedAnimations): Use auto
        for result of makeString.

        * platform/graphics/ca/TileController.cpp:
        (WebCore::TileController::tileRevalidationTimerFired): Update to
        use OptionSet.

        * platform/graphics/ca/TileGrid.cpp:
        (WebCore::validationPolicyAsString): Use OptionSet.
        (WebCore::TileGrid::setNeedsDisplayInRect): Use auto for iterator
        and range-based for loop.
        (WebCore::TileGrid::updateTileLayerProperties): Ditto.
        (WebCore::TileGrid::blankPixelCount const): Ditto.
        (WebCore::TileGrid::removeTiles): Use HashCountedSet.
        (WebCore::TileGrid::revalidateTiles): Use OptionSet.
        (WebCore::TileGrid::retainedTileBackingStoreMemory const): Use
        ranged-based for loop.
        (WebCore::TileGrid::drawTileMapContents const): Use range-based
        for loop and use writeIntegerToBuffer instead of String::number.
        (WebCore::TileGrid::platformCALayerRepaintCount const): Use
        HashCountedSet.
        (WebCore::TileGrid::platformCALayerIncrementRepaintCount): Ditto.
        This cuts us down from 3 hash table lookups to 1.
        (WebCore::TileGrid::removeUnparentedTilesNow): Removed local
        variable to make code a little tighter.
        * platform/graphics/ca/TileGrid.h: Use OptionSet and HashCountedSet.
        Removed some type names.

        * platform/graphics/ca/cocoa/PlatformCAFiltersCocoa.mm:
        (WebCore::PlatformCAFilters::setFiltersOnLayer): Use auto for
        reuslt of makeString.
        * platform/mock/MockRealtimeVideoSource.cpp:
        (WebCore::MockRealtimeVideoSource::drawText): Ditto.

        * platform/mock/ScrollAnimatorMock.cpp:
        (WebCore::ScrollAnimatorMock::scrollbarPrefix const): Added
        helper function for use below.
        (WebCore::ScrollAnimatorMock::mouseEnteredScrollbar const): Use
        makeString instead of StringBuilder.
        (WebCore::ScrollAnimatorMock::mouseExitedScrollbar const): Ditto.
        (WebCore::ScrollAnimatorMock::mouseIsDownInScrollbar const): Ditto.
        * platform/mock/ScrollAnimatorMock.h: Ditto.

        * platform/network/ProxyServer.cpp:
        (WebCore::appendProxyServerString): Use append instead of appendLiteral.
        (WebCore::toString): Ditto.

        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::sanitizeSuggestedFilename): Get rid
        of local variable with result of maekString in it.

        * platform/playstation/UserAgentPlayStation.cpp:
        (WebCore::platformForUAString): Deleted. No need for a global variable
        to hold the result of something called only once.
        (WebCore::platformVersionForUAString): Ditto.
        (WebCore::buildUserAgentString): Deleted.
        (WebCore::standardUserAgentStatic): Moved the logic from buildUserAgentString
        here, using makeString instead of StringBuilder.

        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::open): Use auto for result of makeString.
        * platform/sql/SQLiteFileSystem.cpp:
        (WebCore::SQLiteFileSystem::deleteDatabaseFile): Ditto.

        * platform/text/DateTimeFormat.cpp:
        (WebCore::DateTimeFormat::quoteAndAppendLiteral): Use append instead
        of appendLiteral and StringView::substring instead of String::substring.

        * platform/win/ClipboardUtilitiesWin.cpp:
        (WebCore::replaceNewlinesWithWindowsStyleNewlines): Use append
        instead of appendLiteral.

        * platform/win/UserAgentWin.cpp:
        (WebCore::standardUserAgent): Use makeString instead of StringBuildeer.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::name const): Ditto.
        (WebCore::RenderLayer::debugDescription const): Ditto.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::logLayerInfo): Use append instead of
        appendLiteral.
        * rendering/RenderTreeAsText.cpp:
        (WebCore::quoteAndEscapeNonPrintables): Ditto.
        (WebCore::nodePosition): Ditto.
        * svg/SVGPathStringBuilder.cpp:
        (WebCore::SVGPathStringBuilder::moveTo): Ditto.
        (WebCore::SVGPathStringBuilder::lineTo): Ditto.
        (WebCore::SVGPathStringBuilder::lineToHorizontal): Ditto.
        (WebCore::SVGPathStringBuilder::lineToVertical): Ditto.
        (WebCore::SVGPathStringBuilder::curveToCubic): Ditto.
        (WebCore::SVGPathStringBuilder::curveToCubicSmooth): Ditto.
        (WebCore::SVGPathStringBuilder::curveToQuadratic): Ditto.
        (WebCore::SVGPathStringBuilder::curveToQuadraticSmooth): Ditto.
        (WebCore::SVGPathStringBuilder::arcTo): Ditto.
        (WebCore::SVGPathStringBuilder::closePath): Ditto.
        * testing/Internals.cpp:
        (WebCore::Internals::dumpMarkerRects): Ditto.
        (WebCore::appendOffsets):
        (WebCore::Internals::scrollSnapOffsets): Ditto.

        * workers/WorkerScriptLoader.cpp:
        (WebCore::WorkerScriptLoader::validateWorkerResponse): Use auto
        for reuslt of makeString.

2021-05-24  Chris Dumez  <cdumez@apple.com>

        Stop using UncheckedLock in ShadowBlur's ScratchBuffer
        https://bugs.webkit.org/show_bug.cgi?id=226183

        Reviewed by Simon Fraser.

        Stop using UncheckedLock in ShadowBlur's ScratchBuffer to benefit from Clang
        Thread Safety Analysis. Note that I had to factor the code a bit differently
        because analysis doesn't support conditionally held locks. I could have also
        used WTF_IGNORES_THREAD_SAFETY_ANALYSIS but I think it is better to factor
        the code so that we do get the validation.

        * platform/graphics/ShadowBlur.cpp:
        (WebCore::ScratchBuffer::WTF_REQUIRES_LOCK):
        (WebCore::ScratchBuffer::WTF_RETURNS_LOCK):
        (WebCore::ShadowBlur::drawRectShadowWithTiling):
        (WebCore::ShadowBlur::drawRectShadowWithTilingWithLayerImageBuffer):
        (WebCore::ShadowBlur::drawInsetShadowWithTiling):
        (WebCore::ShadowBlur::drawInsetShadowWithTilingWithLayerImageBuffer):
        * platform/graphics/ShadowBlur.h:

2021-05-24  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r277940.
        https://bugs.webkit.org/show_bug.cgi?id=226182

        Caused Safari crash under IPC::typeFromCFTypeRef

        Reverted changeset:

        "Convert DestinationColorSpace from an enum to class wrapping
        a platform color space (CGColorSpaceRef for CG ports, etc.)"
        https://bugs.webkit.org/show_bug.cgi?id=226143
        https://trac.webkit.org/changeset/277940

2021-05-24  Chris Dumez  <cdumez@apple.com>

        Drop CheckedLock / CheckedCondition aliases
        https://bugs.webkit.org/show_bug.cgi?id=226176

        Reviewed by Kate Cheney.

        Drop CheckedLock / CheckedCondition aliases now that they are the default.

        * Modules/indexeddb/IDBObjectStore.h:
        * Modules/indexeddb/IDBTransaction.h:
        * Modules/indexeddb/client/IDBConnectionProxy.h:
        * Modules/indexeddb/server/IDBSerializationContext.cpp:
        * Modules/indexeddb/server/IDBServer.cpp:
        * Modules/mediastream/RTCDataChannel.cpp:
        * Modules/mediastream/RTCRtpSFrameTransformer.h:
        * Modules/mediastream/RTCRtpScriptTransform.h:
        * Modules/mediastream/libwebrtc/LibWebRTCDataChannelHandler.h:
        * Modules/mediastream/libwebrtc/LibWebRTCRtpTransformBackend.h:
        * Modules/speech/SpeechRecognitionCaptureSourceImpl.h:
        * Modules/webaudio/AudioParamTimeline.h:
        * Modules/webaudio/MediaElementAudioSourceNode.h:
        * Modules/webdatabase/Database.cpp:
        * Modules/webdatabase/Database.h:
        * Modules/webdatabase/DatabaseManager.h:
        * Modules/webdatabase/DatabaseTask.h:
        * Modules/webdatabase/DatabaseThread.h:
        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::openDatabaseMutex):
        * Modules/webdatabase/DatabaseTracker.h:
        * Modules/webdatabase/OriginLock.cpp:
        * Modules/webdatabase/SQLCallbackWrapper.h:
        * Modules/webdatabase/SQLTransaction.h:
        * Modules/webgpu/WebGPUDevice.cpp:
        (WebCore::WebGPUDevice::instancesLock):
        * Modules/webgpu/WebGPUDevice.h:
        * Modules/webgpu/WebGPUPipeline.cpp:
        (WebCore::WebGPUPipeline::instancesLock):
        * Modules/webgpu/WebGPUPipeline.h:
        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::allActiveWebSocketsLock):
        * Modules/websockets/WebSocket.h:
        * accessibility/isolatedtree/AXIsolatedTree.cpp:
        * accessibility/isolatedtree/AXIsolatedTree.h:
        * bindings/js/JSDOMGlobalObject.h:
        * bridge/objc/WebScriptObject.mm:
        * crypto/CryptoAlgorithmRegistry.h:
        * dom/MessagePort.cpp:
        * dom/Node.cpp:
        * dom/ScriptExecutionContext.cpp:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::createMediaPlayer):
        * html/canvas/CanvasRenderingContext.cpp:
        (WebCore::CanvasRenderingContext::instancesLock):
        * html/canvas/CanvasRenderingContext.h:
        * html/canvas/WebGLContextGroup.cpp:
        (WebCore::WebGLContextGroup::objectGraphLockForAContext):
        * html/canvas/WebGLContextGroup.h:
        * html/canvas/WebGLContextObject.cpp:
        (WebCore::WebGLContextObject::objectGraphLockForContext):
        * html/canvas/WebGLContextObject.h:
        * html/canvas/WebGLObject.h:
        * html/canvas/WebGLProgram.cpp:
        (WebCore::WebGLProgram::instancesLock):
        * html/canvas/WebGLProgram.h:
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::objectGraphLock):
        * html/canvas/WebGLRenderingContextBase.h:
        * html/canvas/WebGLSharedObject.cpp:
        (WebCore::WebGLSharedObject::objectGraphLockForContext):
        * html/canvas/WebGLSharedObject.h:
        * inspector/agents/WebHeapAgent.cpp:
        * page/ResourceUsageThread.h:
        * page/SecurityPolicy.cpp:
        * page/WheelEventTestMonitor.h:
        * page/scrolling/ScrollingTree.h:
        (WebCore::ScrollingTree::WTF_RETURNS_LOCK):
        * page/scrolling/ScrollingTreeLatchingController.h:
        * page/scrolling/ThreadedScrollingTree.h:
        (WebCore::ThreadedScrollingTree::WTF_RETURNS_LOCK):
        * page/scrolling/mac/ScrollingTreeMac.h:
        * platform/AbortableTaskQueue.h:
        * platform/GenericTaskQueue.cpp:
        * platform/GenericTaskQueue.h:
        * platform/LegacySchemeRegistry.cpp:
        * platform/audio/AudioDestination.h:
        * platform/audio/HRTFDatabaseLoader.h:
        * platform/audio/ReverbConvolver.cpp:
        (WebCore::ReverbConvolver::backgroundThreadEntry):
        * platform/audio/cocoa/AudioDestinationCocoa.h:
        * platform/audio/gstreamer/AudioSourceProviderGStreamer.h:
        * platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:
        * platform/audio/mac/FFTFrameMac.cpp:
        * platform/encryptedmedia/CDMProxy.h:
        * platform/graphics/MediaPlayer.cpp:
        * platform/graphics/ShadowBlur.cpp:
        (WebCore::ScratchBuffer::lock):
        (WebCore::ShadowBlur::drawRectShadowWithTiling):
        (WebCore::ShadowBlur::drawInsetShadowWithTiling):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:
        * platform/graphics/cg/IOSurfacePool.h:
        * platform/graphics/cg/SubimageCacheWithTimer.h:
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        * platform/graphics/gstreamer/ImageDecoderGStreamer.h:
        * platform/graphics/gstreamer/MainThreadNotifier.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        * platform/graphics/gstreamer/VideoSinkGStreamer.cpp:
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        * platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.cpp:
        * platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamer.cpp:
        * platform/graphics/texmap/TextureMapperPlatformLayerProxy.h:
        (WebCore::TextureMapperPlatformLayerProxy::WTF_RETURNS_LOCK):
        * platform/image-decoders/ScalableImageDecoder.h:
        * platform/ios/QuickLook.mm:
        * platform/ios/WebSQLiteDatabaseTrackerClient.mm:
        * platform/ios/wak/WebCoreThreadRun.cpp:
        * platform/mediarecorder/MediaRecorderPrivateMock.h:
        * platform/mediarecorder/cocoa/MediaRecorderPrivateWriterCocoa.h:
        * platform/mediastream/RealtimeMediaSource.h:
        * platform/mediastream/RealtimeOutgoingAudioSource.h:
        * platform/mediastream/RealtimeOutgoingVideoSource.h:
        * platform/mediastream/cocoa/AudioMediaStreamTrackRendererUnit.h:
        * platform/mediastream/gstreamer/RealtimeOutgoingAudioSourceLibWebRTC.h:
        * platform/network/cf/LoaderRunLoopCF.cpp:
        (WebCore::loaderRunLoop):
        * platform/network/cocoa/WebCoreNSURLSession.mm:
        * platform/network/mac/UTIUtilities.mm:
        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.h:
        * platform/sql/SQLiteDatabase.cpp:
        * platform/sql/SQLiteDatabase.h:
        * platform/sql/SQLiteDatabaseTracker.cpp:
        * platform/text/TextEncodingRegistry.cpp:
        * storage/StorageQuotaManager.h:
        * workers/WorkerGlobalScope.cpp:
        * workers/WorkerOrWorkletScriptController.h:
        * workers/WorkerOrWorkletThread.cpp:
        (WebCore::WorkerOrWorkletThread::workerOrWorkletThreadsLock):
        * workers/WorkerOrWorkletThread.h:
        * worklets/PaintWorkletGlobalScope.h:

2021-05-24  Alan Bujtas  <zalan@apple.com>

        [LFC] Rename the geometry() helpers to formattingGeometry()
        https://bugs.webkit.org/show_bug.cgi?id=226153

        Reviewed by Antti Koivisto.

        * layout/formattingContexts/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeOutOfFlowHorizontalGeometry):
        (WebCore::Layout::FormattingContext::computeOutOfFlowVerticalGeometry):
        (WebCore::Layout::FormattingContext::computeBorderAndPadding):
        (WebCore::Layout::FormattingContext::layoutOutOfFlowContent):
        (WebCore::Layout::FormattingContext::formattingGeometry const):
        (WebCore::Layout::FormattingContext::geometry const): Deleted.
        * layout/formattingContexts/FormattingContext.h:
        * layout/formattingContexts/FormattingQuirks.cpp:
        (WebCore::Layout::FormattingQuirks::heightValueOfNearestContainingBlockWithFixedHeight const):
        * layout/formattingContexts/block/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::layoutInFlowContent):
        (WebCore::Layout::BlockFormattingContext::placeInFlowPositionedChildren):
        (WebCore::Layout::BlockFormattingContext::computeStaticVerticalPosition):
        (WebCore::Layout::BlockFormattingContext::computeStaticHorizontalPosition):
        (WebCore::Layout::BlockFormattingContext::precomputeVerticalPositionForBoxAndAncestors):
        (WebCore::Layout::BlockFormattingContext::computeWidthAndMargin):
        (WebCore::Layout::BlockFormattingContext::computeHeightAndMargin):
        (WebCore::Layout::BlockFormattingContext::computedIntrinsicWidthConstraints):
        (WebCore::Layout::BlockFormattingContext::formattingGeometry const):
        (WebCore::Layout::BlockFormattingContext::geometry const): Deleted.
        * layout/formattingContexts/block/BlockFormattingContext.h:
        * layout/formattingContexts/block/tablewrapper/TableWrapperBlockFormattingContext.cpp:
        (WebCore::Layout::TableWrapperBlockFormattingContext::layoutTableBox):
        (WebCore::Layout::TableWrapperBlockFormattingContext::computeBorderAndPaddingForTableBox):
        (WebCore::Layout::TableWrapperBlockFormattingContext::computeWidthAndMarginForTableBox):
        (WebCore::Layout::TableWrapperBlockFormattingContext::computeHeightAndMarginForTableBox):
        * layout/formattingContexts/flex/FlexFormattingContext.cpp:
        (WebCore::Layout::FlexFormattingContext::sizeAndPlaceFlexItems):
        (WebCore::Layout::FlexFormattingContext::computeIntrinsicWidthConstraintsForFlexItems):
        (WebCore::Layout::FlexFormattingContext::formattingGeometry const):
        (WebCore::Layout::FlexFormattingContext::geometry const): Deleted.
        * layout/formattingContexts/flex/FlexFormattingContext.h:
        * layout/formattingContexts/inline/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::layoutInFlowContent):
        (WebCore::Layout::InlineFormattingContext::lineLayout):
        (WebCore::Layout::InlineFormattingContext::computedIntrinsicWidthConstraints):
        (WebCore::Layout::InlineFormattingContext::computeIntrinsicWidthForFormattingRoot):
        (WebCore::Layout::InlineFormattingContext::computeHorizontalMargin):
        (WebCore::Layout::InlineFormattingContext::computeWidthAndMargin):
        (WebCore::Layout::InlineFormattingContext::computeHeightAndMargin):
        (WebCore::Layout::InlineFormattingContext::computeGeometryForLineContent):
        (WebCore::Layout::InlineFormattingContext::formattingGeometry const):
        (WebCore::Layout::InlineFormattingContext::geometry const): Deleted.
        * layout/formattingContexts/inline/InlineFormattingContext.h:
        * layout/formattingContexts/table/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::setUsedGeometryForRows):
        (WebCore::Layout::TableFormattingContext::layoutCell):
        (WebCore::Layout::TableFormattingContext::computedPreferredWidthForColumns):
        (WebCore::Layout::TableFormattingContext::computeAndDistributeExtraSpace):
        (WebCore::Layout::TableFormattingContext::formattingGeometry const):
        (WebCore::Layout::TableFormattingContext::geometry const): Deleted.
        * layout/formattingContexts/table/TableFormattingContext.h:
        * layout/formattingContexts/table/TableLayout.cpp:
        (WebCore::Layout::TableFormattingContext::TableLayout::distributedVerticalSpace):

2021-05-24  Alan Bujtas  <zalan@apple.com>

        [LFC] FormattingGeometry functions should all be const
        https://bugs.webkit.org/show_bug.cgi?id=226147

        Reviewed by Simon Fraser.

        While the const_cast is unfortunate, those functions do not mutate *this*.

        * layout/LayoutState.cpp:
        (WebCore::Layout::LayoutState::hasFormattingState const):
        * layout/LayoutState.h:
        * layout/formattingContexts/FormattingGeometry.cpp:
        (WebCore::Layout::FormattingGeometry::computedWidthValue const):
        (WebCore::Layout::FormattingGeometry::computedWidth const):
        (WebCore::Layout::FormattingGeometry::computedMinWidth const):
        (WebCore::Layout::FormattingGeometry::computedMaxWidth const):
        (WebCore::Layout::FormattingGeometry::shrinkToFitWidth const):
        (WebCore::Layout::FormattingGeometry::outOfFlowNonReplacedHorizontalGeometry const):
        (WebCore::Layout::FormattingGeometry::outOfFlowReplacedHorizontalGeometry const):
        (WebCore::Layout::FormattingGeometry::floatingNonReplacedContentWidthAndMargin const):
        (WebCore::Layout::FormattingGeometry::floatingReplacedContentWidthAndMargin const):
        (WebCore::Layout::FormattingGeometry::outOfFlowHorizontalGeometry const):
        (WebCore::Layout::FormattingGeometry::floatingContentWidthAndMargin const):
        (WebCore::Layout::FormattingGeometry::inlineReplacedContentWidthAndMargin const):
        (WebCore::Layout::FormattingGeometry::constraintsForOutOfFlowContent const):
        (WebCore::Layout::FormattingGeometry::computedWidthValue): Deleted.
        (WebCore::Layout::FormattingGeometry::computedWidth): Deleted.
        (WebCore::Layout::FormattingGeometry::computedMinWidth): Deleted.
        (WebCore::Layout::FormattingGeometry::computedMaxWidth): Deleted.
        (WebCore::Layout::FormattingGeometry::shrinkToFitWidth): Deleted.
        (WebCore::Layout::FormattingGeometry::outOfFlowNonReplacedHorizontalGeometry): Deleted.
        (WebCore::Layout::FormattingGeometry::outOfFlowReplacedHorizontalGeometry): Deleted.
        (WebCore::Layout::FormattingGeometry::floatingNonReplacedContentWidthAndMargin): Deleted.
        (WebCore::Layout::FormattingGeometry::floatingReplacedContentWidthAndMargin): Deleted.
        (WebCore::Layout::FormattingGeometry::outOfFlowHorizontalGeometry): Deleted.
        (WebCore::Layout::FormattingGeometry::floatingContentWidthAndMargin): Deleted.
        (WebCore::Layout::FormattingGeometry::inlineReplacedContentWidthAndMargin): Deleted.
        (WebCore::Layout::FormattingGeometry::constraintsForOutOfFlowContent): Deleted.
        * layout/formattingContexts/FormattingGeometry.h:
        (WebCore::Layout::FormattingGeometry::layoutState const):
        (WebCore::Layout::FormattingGeometry::layoutState): Deleted.
        * layout/formattingContexts/block/BlockFormattingGeometry.cpp:
        (WebCore::Layout::BlockFormattingGeometry::inFlowNonReplacedContentHeightAndMargin const):
        (WebCore::Layout::BlockFormattingGeometry::inFlowNonReplacedContentWidthAndMargin const):
        (WebCore::Layout::BlockFormattingGeometry::inFlowReplacedContentWidthAndMargin const):
        (WebCore::Layout::BlockFormattingGeometry::inFlowContentHeightAndMargin const):
        (WebCore::Layout::BlockFormattingGeometry::inFlowContentWidthAndMargin const):
        (WebCore::Layout::BlockFormattingGeometry::computedContentWidthAndMargin const):
        (WebCore::Layout::BlockFormattingGeometry::intrinsicWidthConstraints const):
        (WebCore::Layout::BlockFormattingGeometry::inFlowNonReplacedContentHeightAndMargin): Deleted.
        (WebCore::Layout::BlockFormattingGeometry::inFlowNonReplacedContentWidthAndMargin): Deleted.
        (WebCore::Layout::BlockFormattingGeometry::inFlowReplacedContentWidthAndMargin): Deleted.
        (WebCore::Layout::BlockFormattingGeometry::inFlowContentHeightAndMargin): Deleted.
        (WebCore::Layout::BlockFormattingGeometry::inFlowContentWidthAndMargin): Deleted.
        (WebCore::Layout::BlockFormattingGeometry::computedContentWidthAndMargin): Deleted.
        (WebCore::Layout::BlockFormattingGeometry::intrinsicWidthConstraints): Deleted.
        * layout/formattingContexts/block/BlockFormattingGeometry.h:
        * layout/formattingContexts/flex/FlexFormattingGeometry.cpp:
        (WebCore::Layout::FlexFormattingGeometry::intrinsicWidthConstraints const):
        (WebCore::Layout::FlexFormattingGeometry::intrinsicWidthConstraints): Deleted.
        * layout/formattingContexts/flex/FlexFormattingGeometry.h:
        * layout/formattingContexts/inline/InlineFormattingGeometry.cpp:
        (WebCore::Layout::InlineFormattingGeometry::inlineBlockContentWidthAndMargin const):
        (WebCore::Layout::InlineFormattingGeometry::inlineBlockContentWidthAndMargin): Deleted.
        * layout/formattingContexts/inline/InlineFormattingGeometry.h:
        * layout/formattingContexts/table/TableFormattingGeometry.cpp:
        (WebCore::Layout::TableFormattingGeometry::computedColumnWidth const):
        (WebCore::Layout::TableFormattingGeometry::intrinsicWidthConstraintsForCell const):
        (WebCore::Layout::TableFormattingGeometry::usedBaselineForCell const):
        (WebCore::Layout::TableFormattingGeometry::computedColumnWidth): Deleted.
        (WebCore::Layout::TableFormattingGeometry::intrinsicWidthConstraintsForCell): Deleted.
        (WebCore::Layout::TableFormattingGeometry::usedBaselineForCell): Deleted.
        * layout/formattingContexts/table/TableFormattingGeometry.h:

2021-05-24  Alan Bujtas  <zalan@apple.com>

        [LFC][TFC] Add a helper function to compute the intrinsic vertical paddings for the cell
        https://bugs.webkit.org/show_bug.cgi?id=226130

        Reviewed by Antti Koivisto.

        Add a comment explaining what the intrinsic vertical padding is.

        * layout/formattingContexts/table/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::setUsedGeometryForCells):
        (WebCore::Layout::TableFormattingContext::layoutCell):
        * layout/formattingContexts/table/TableFormattingContext.h:

2021-05-24  Imanol Fernandez  <ifernandez@igalia.com>

        Implement OpenXR input sources
        https://bugs.webkit.org/show_bug.cgi?id=224931

        Reviewed by Sergio Villar Senin.

        * Sources.txt: Add OpenXRInput and OpenXRInputSource files

        * platform/xr/openxr/OpenXRInput.cpp: Entry point to query and sync input in OpenXR.
        (PlatformXR::OpenXRInput::create):
        (PlatformXR::OpenXRInput::OpenXRInput):
        (PlatformXR::OpenXRInput::initialize):
        (PlatformXR::OpenXRInput::getInputSources const):
        (PlatformXR::OpenXRInput::updateInteractionProfile):
        * platform/xr/openxr/OpenXRInput.h: Added.

        * platform/xr/openxr/OpenXRInputMappings.h: Mapping definition for supported input profiles.
        (PlatformXR::buttonTypeToString):
        (PlatformXR::axisTypetoString):

        * platform/xr/openxr/OpenXRInputSource.cpp: Handles tracking and status of a specific input source.
        (PlatformXR::OpenXRInputSource::create):
        (PlatformXR::OpenXRInputSource::~OpenXRInputSource):
        (PlatformXR::OpenXRInputSource::initialize):
        (PlatformXR::OpenXRInputSource::suggestBindings const):
        (PlatformXR::OpenXRInputSource::getInputSource const):
        (PlatformXR::OpenXRInputSource::updateInteractionProfile):
        (PlatformXR::OpenXRInputSource::createSpaceAction const):
        (PlatformXR::OpenXRInputSource::createAction const):
        (PlatformXR::OpenXRInputSource::createButtonActions const):
        (PlatformXR::OpenXRInputSource::createBinding const):
        (PlatformXR::OpenXRInputSource::getPose const):
        (PlatformXR::OpenXRInputSource::getButton const):
        (PlatformXR::OpenXRInputSource::getAxis const):
        (PlatformXR::OpenXRInputSource::getActionState const):
        * platform/xr/openxr/OpenXRInputSource.h: Added.
        (PlatformXR::OpenXRInputSource::OpenXRInputSource):
        (PlatformXR::OpenXRInputSource::actionSet const):

        * platform/xr/openxr/OpenXRUtils.h:
        (PlatformXR::XrPoseIdentity): Creates a identity pose.
        (PlatformXR::handenessToString): Convert from handeness enum to string.

        * platform/xr/openxr/PlatformXROpenXR.cpp: Handle input sources in the OpenXR render loop.
        (PlatformXR::OpenXRDevice::initializeTrackingAndRendering):
        (PlatformXR::OpenXRDevice::requestFrame):
        (PlatformXR::OpenXRDevice::pollEvents):
        (PlatformXR::OpenXRDevice::resetSession):
        (PlatformXR::OpenXRDevice::updateInteractionProfile):
        * platform/xr/openxr/PlatformXROpenXR.h:

2021-05-24  Sihui Liu  <sihui_liu@apple.com>

        REGRESSION(r256715): XSLTProcessor does not parse script when transforming to document
        https://bugs.webkit.org/show_bug.cgi?id=226087

        Reviewed by Darin Adler.

        Allow JavaScript if context document is null to match old behavior before r256715.

        Test: fast/xsl/xslt-transform-script.html

        * dom/Document.cpp:
        (WebCore::Document::allowsContentJavaScript const):

2021-05-24  Tim Nguyen  <ntim@apple.com>

        Clean up handling of `-webkit-inline-flex`/`-webkit-flex` CSS display values
        https://bugs.webkit.org/show_bug.cgi?id=224807

        Reviewed by Antti Koivisto.

        These are now aliased at parse-time, like the two-value CSS display syntax is.

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        * css/CSSValueKeywords.in:
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeDisplay):
        * layout/layouttree/LayoutBox.cpp:
        (WebCore::Layout::Box::isInlineLevelBox const):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::createFor):
        * rendering/style/RenderStyleConstants.cpp:
        (WebCore::operator<<):
        * rendering/style/RenderStyleConstants.h:
        * style/StyleAdjuster.cpp:
        (WebCore::Style::equivalentBlockDisplay):

2021-05-24  Lauro Moura  <lmoura@igalia.com>

        [GStreamer] WebProcess crashes when certain elements are missing
        https://bugs.webkit.org/show_bug.cgi?id=226081
        <rdar://problem/78394687>

        Unreviewed LTS build fix.

        * platform/audio/gstreamer/AudioSourceProviderGStreamer.cpp:

2021-05-24  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] WebProcess crashes when certain elements are missing
        https://bugs.webkit.org/show_bug.cgi?id=226081

        Reviewed by Xabier Rodriguez-Calvar.

        Introducing makeGStreamerElement() and makeGStreamerBin() that should be used when
        requesting non-WebKit and non-core GStreamer elements/bins to be created at runtime. The
        goal is to prevent NULL pointers to be used in case the runtime host has an incomplete
        GStreamer plugins installation.

        * platform/audio/gstreamer/AudioDestinationGStreamer.cpp:
        (WebCore::AudioDestinationGStreamer::AudioDestinationGStreamer):
        * platform/audio/gstreamer/AudioFileReaderGStreamer.cpp:
        (WebCore::AudioFileReader::handleNewDeinterleavePad):
        (WebCore::AudioFileReader::plugDeinterleave):
        (WebCore::AudioFileReader::decodeAudioForBusCreation):
        * platform/audio/gstreamer/AudioSourceProviderGStreamer.cpp:
        (WebCore::AudioSourceProviderGStreamer::configureAudioBin):
        (WebCore::AudioSourceProviderGStreamer::setClient):
        (WebCore::AudioSourceProviderGStreamer::handleNewDeinterleavePad):
        * platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:
        (webKitWebAudioSrcConstructed):
        * platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp:
        (webKitGLVideoSinkConstructed):
        * platform/graphics/gstreamer/GStreamerAudioMixer.cpp:
        (WebCore::GStreamerAudioMixer::GStreamerAudioMixer):
        (WebCore::GStreamerAudioMixer::registerProducer):
        * platform/graphics/gstreamer/GStreamerCommon.cpp:
        (WebCore::createPlatformAudioSink):
        (WebCore::makeGStreamerElement):
        (WebCore::makeGStreamerBin):
        * platform/graphics/gstreamer/GStreamerCommon.h:
        * platform/graphics/gstreamer/ImageDecoderGStreamer.cpp:
        (WebCore::ImageDecoderGStreamer::InnerDecoder::connectDecoderPad):
        (WebCore::ImageDecoderGStreamer::InnerDecoder::preparePipeline):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin):
        (WebCore::MediaPlayerPrivateGStreamer::createHolePunchVideoSink):
        (WebCore::MediaPlayerPrivateGStreamer::createVideoSink):
        * platform/graphics/gstreamer/TextCombinerGStreamer.cpp:
        (webKitTextCombinerHandleCapsEvent):
        * platform/graphics/gstreamer/TextSinkGStreamer.cpp:
        (webkitTextSinkConstructed):
        * platform/graphics/gstreamer/WebKitAudioSinkGStreamer.cpp:
        (webKitAudioSinkConfigure):
        * platform/graphics/gstreamer/mse/AppendPipeline.cpp:
        (WebCore::AppendPipeline::AppendPipeline):
        (WebCore::createOptionalParserForFormat):
        * platform/mediastream/gstreamer/GStreamerAudioCapturer.cpp:
        (WebCore::GStreamerAudioCapturer::createConverter):
        * platform/mediastream/gstreamer/GStreamerCapturer.cpp:
        (WebCore::GStreamerCapturer::makeElement):
        * platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:
        * platform/mediastream/gstreamer/GStreamerVideoCapturer.cpp:
        (WebCore::GStreamerVideoCapturer::createConverter):
        * platform/mediastream/libwebrtc/GStreamerVideoDecoderFactory.cpp:
        (WebCore::GStreamerVideoDecoder::makeElement):
        * platform/mediastream/libwebrtc/GStreamerVideoEncoder.cpp:
        (webrtcVideoEncoderSetEncoder):
        (webrtcVideoEncoderSetFormat):
        * platform/mediastream/libwebrtc/GStreamerVideoEncoderFactory.cpp:
        (WebCore::GStreamerVideoEncoder::makeElement):

2021-05-23  Chris Dumez  <cdumez@apple.com>

        Make CheckedLock the default Lock
        https://bugs.webkit.org/show_bug.cgi?id=226157

        Reviewed by Darin Adler.

        Make CheckedLock the default Lock so that we get more benefits from Clang
        Thread Safety Analysis. Note that CheckedLock 100% relies on the existing
        Lock implementation and merely adds the clang anotations for thread 
        safety.

        That this patch does is:
        1. Rename the Lock class to UncheckedLock
        2. Rename the CheckedLock class to Lock
        3. Rename the Condition class to UncheckedCondition
        4. Rename the CheckedCondition class to Condition
        5. Update the types of certain variables from Lock / Condition to
           UncheckedLock / UncheckedCondition if I got a build failure. Build 
           failures are usually caused by the following facts:
           - Locker<CheckedLock> doesn't subclass AbstractLocker which a lot of
             JSC code passes as argument
           - Locker<CheckedLock> has no move constructor
           - Locker<CheckedLock> cannot be constructed from a lock pointer, only
             a reference

        For now, CheckedLock and CheckedCondition remain as aliases to Lock and 
        Condition, in their respective CheckedLock.h / CheckedCondition.h headers.
        I will drop them in a follow-up to reduce patch size.

        I will also follow-up to try and get rid of as much usage of UncheckedLock
        and UncheckedCondition as possible. I did not try very hard in this patch
        to reduce patch size. 

        * Modules/indexeddb/server/IDBServer.cpp:
        * Modules/webaudio/MediaElementAudioSourceNode.h:
        * Modules/webdatabase/OriginLock.cpp:
        * bindings/js/JSDOMGlobalObject.h:
        * dom/Node.cpp:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::createMediaPlayer):
        * html/canvas/WebGLContextGroup.cpp:
        (WebCore::WebGLContextGroup::objectGraphLockForAContext):
        * html/canvas/WebGLContextGroup.h:
        * html/canvas/WebGLContextObject.cpp:
        (WebCore::WebGLContextObject::objectGraphLockForContext):
        * html/canvas/WebGLContextObject.h:
        * html/canvas/WebGLObject.h:
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::objectGraphLock):
        * html/canvas/WebGLRenderingContextBase.h:
        * html/canvas/WebGLSharedObject.cpp:
        (WebCore::WebGLSharedObject::objectGraphLockForContext):
        * html/canvas/WebGLSharedObject.h:
        * page/scrolling/mac/ScrollingTreeMac.h:
        * platform/audio/ReverbConvolver.cpp:
        (WebCore::ReverbConvolver::backgroundThreadEntry):
        * platform/graphics/ShadowBlur.cpp:
        (WebCore::ScratchBuffer::lock):
        (WebCore::ShadowBlur::drawRectShadowWithTiling):
        (WebCore::ShadowBlur::drawInsetShadowWithTiling):
        * platform/graphics/gstreamer/VideoSinkGStreamer.cpp:
        * platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.cpp:

2021-05-23  Sam Weinig  <weinig@apple.com>

        Convert DestinationColorSpace from an enum to class wrapping a platform color space (CGColorSpaceRef for CG ports, etc.)
        https://bugs.webkit.org/show_bug.cgi?id=226143

        Reviewed by Darin Adler.

        Replace enumeration based DestinationColorSpace with a struct wrapping
        a platform color space (CGColorSpaceRef for CG ports, etc.). For ports
        that don't have a platform level color space type, a builtin PlatformColorSpace
        type is provided that is just the old enum renamed to PlatformColorSpace::Name.

        The goal of this change is to unify the currently bifurcated concept of an
        ImageBuffer's color space, which previosly could either be based on the 
        DestinationColorSpace (and reflected in the colorSpace() member function),
        or (for CG ports) based on a CGColorSpaceRef, with the colorSpace() function
        returning sRGB even if the ImageBuffer was not. 

        * Headers.cmake:
        * Modules/async-clipboard/ClipboardItemBindingsDataSource.cpp:
        (WebCore::ClipboardItemBindingsDataSource::ClipboardItemTypeLoader::sanitizeDataIfNeeded):
        * Modules/mediasession/MediaMetadata.cpp:
        (WebCore::ArtworkImageLoader::notifyFinished):
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::dumpImageBitmap):
        (WebCore::CloneDeserializer::readImageBitmap):
        * css/CSSFilterImageValue.cpp:
        (WebCore::CSSFilterImageValue::image):
        * html/CustomPaintCanvas.cpp:
        (WebCore::CustomPaintCanvas::copiedImage const):
        * html/CustomPaintImage.cpp:
        (WebCore::CustomPaintImage::drawPattern):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::toMediaSample):
        (WebCore::HTMLCanvasElement::createImageBuffer const):
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::createBufferForPainting const):
        * html/HTMLVideoElement.h:
        * html/ImageBitmap.cpp:
        (WebCore::ImageBitmap::createImageBuffer):
        (WebCore::ImageBitmap::createPromise):
        * html/OffscreenCanvas.cpp:
        (WebCore::OffscreenCanvas::commitToPlaceholderCanvas):
        * html/canvas/CanvasRenderingContext.cpp:
        (WebCore::CanvasRenderingContext::colorSpace const):
        * html/canvas/CanvasRenderingContext.h:
        * html/canvas/CanvasRenderingContext2D.cpp:
        * html/canvas/ImageBitmapRenderingContext.cpp:
        (WebCore::ImageBitmapRenderingContext::setOutputBitmap):
        * html/canvas/PredefinedColorSpace.cpp:
        (WebCore::toDestinationColorSpace):
        (WebCore::toPredefinedColorSpace):
        * html/canvas/PredefinedColorSpace.h:
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::LRUImageBufferCache::imageBuffer):
        * html/shadow/MediaControlTextTrackContainerElement.cpp:
        (WebCore::MediaControlTextTrackContainerElement::createTextTrackRepresentationImage):
        * inspector/InspectorCanvas.cpp:
        (WebCore::InspectorCanvas::indexForData):
        (WebCore::InspectorCanvas::buildArrayForCanvasPattern):
        * page/Chrome.cpp:
        (WebCore::Chrome::createImageBuffer const):
        * page/Chrome.h:
        * page/ChromeClient.h:
        (WebCore::ChromeClient::createImageBuffer const):
        * page/FrameSnapshotting.cpp:
        (WebCore::snapshotFrameRectWithClip):
        * page/PageColorSampler.cpp:
        (WebCore::sampleColor):
        * page/PageConsoleClient.cpp:
        (WebCore::PageConsoleClient::screenshot):
        * platform/HostWindow.h:
        * platform/PlatformColorSpace.h: Added.
        (WebCore::PlatformColorSpace::get const):
        * platform/PlatformScreen.h:
        * platform/ScreenProperties.h:
        (WebCore::ScreenProperties::encode const):
        (WebCore::ScreenData::encode const):
        (WebCore::ScreenData::decode):
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::preTransformedNativeImageForCurrentFrame):
        (WebCore::BitmapImage::drawPattern):
        * platform/graphics/Color.cpp:
        (WebCore::Color::toColorComponentsInColorSpace const):
        * platform/graphics/Color.h:
        * platform/graphics/ColorConversion.cpp:
        (WebCore::converColorComponents):
        * platform/graphics/ColorConversion.h:
        * platform/graphics/ColorSpace.cpp:
        * platform/graphics/ColorSpace.h:
        * platform/graphics/ConcreteImageBuffer.h:
        (WebCore::ConcreteImageBuffer::create):
        * platform/graphics/CrossfadeGeneratedImage.cpp:
        (WebCore::CrossfadeGeneratedImage::drawPattern):
        * platform/graphics/DestinationColorSpace.cpp: Added.
        (WebCore::DestinationColorSpace::SRGB):
        (WebCore::DestinationColorSpace::LinearSRGB):
        (WebCore::DestinationColorSpace::DisplayP3):
        (WebCore::DestinationColorSpace::DestinationColorSpace):
        (WebCore::operator==):
        (WebCore::operator!=):
        (WebCore::operator<<):
        * platform/graphics/DestinationColorSpace.h: Added.
        (WebCore::DestinationColorSpace::platformColorSpace const):
        (WebCore::DestinationColorSpace::encode const):
        (WebCore::DestinationColorSpace::decode):
        * platform/graphics/GradientImage.cpp:
        (WebCore::GradientImage::drawPattern):
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::clipToDrawingCommands):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/GraphicsContextImpl.h:
        * platform/graphics/ImageBuffer.cpp:
        (WebCore::ImageBuffer::create):
        (WebCore::ImageBuffer::createCompatibleBuffer):
        (WebCore::ImageBuffer::copyRectToBuffer):
        * platform/graphics/ImageBuffer.h:
        * platform/graphics/ImageBufferBackend.cpp:
        (WebCore::ImageBufferBackend::getPixelBuffer const):
        (WebCore::ImageBufferBackend::putPixelBuffer):
        * platform/graphics/ImageBufferBackend.h:
        (WebCore::ImageBufferBackend::transformColorSpace):
        (WebCore::ImageBufferBackend::colorSpace const):
        * platform/graphics/PixelBuffer.h:
        (WebCore::PixelBuffer::decode):
        * platform/graphics/PixelBufferConversion.cpp:
        (WebCore::makeVImageCGImageFormat):
        * platform/graphics/PixelBufferFormat.h:
        (WebCore::PixelBufferFormat::decode):
        * platform/graphics/RemoteVideoSample.cpp:
        (WebCore::transferBGRAPixelBufferToIOSurface):
        (WebCore::RemoteVideoSample::create):
        (WebCore::RemoteVideoSample::RemoteVideoSample):
        (WebCore::RemoteVideoSample::surface const):
        * platform/graphics/RemoteVideoSample.h:
        * platform/graphics/ShadowBlur.cpp:
        (WebCore::ScratchBuffer::getScratchBuffer):
        (WebCore::ShadowBlur::drawRectShadowWithoutTiling):
        (WebCore::ShadowBlur::drawInsetShadowWithoutTiling):
        (WebCore::ShadowBlur::drawRectShadowWithTiling):
        (WebCore::ShadowBlur::drawInsetShadowWithTiling):
        (WebCore::ShadowBlur::blurShadowBuffer):
        (WebCore::ShadowBlur::drawShadowLayer):
        * platform/graphics/angle/GraphicsContextGLANGLE.cpp:
        (WebCore::GraphicsContextGLOpenGL::readPixelsForPaintResults):
        * platform/graphics/cairo/ImageBufferCairoBackend.cpp:
        (WebCore::ImageBufferCairoBackend::transformColorSpace):
        * platform/graphics/cairo/ImageBufferCairoBackend.h:
        * platform/graphics/cg/ColorCG.cpp:
        (WebCore::convertToCGCompatibleComponents):
        (WebCore::createCGColor):
        (WebCore::platformConvertColorComponents):
        * platform/graphics/cg/ColorSpaceCG.h:
        (WebCore::cachedCGColorSpace): Deleted.
        * platform/graphics/cg/GraphicsContextGLCG.cpp:
        (WebCore::GraphicsContextGLOpenGL::paintToCanvas):
        * platform/graphics/cg/IOSurfacePool.cpp:
        (WebCore::surfaceMatchesParameters):
        (WebCore::IOSurfacePool::takeSurface):
        * platform/graphics/cg/IOSurfacePool.h:
        * platform/graphics/cg/ImageBufferCGBackend.cpp:
        (WebCore::createBitmapImageAfterScalingIfNeeded):
        (WebCore::ImageBufferCGBackend::copyCGImageForEncoding const):
        * platform/graphics/cg/ImageBufferCGBitmapBackend.cpp:
        (WebCore::ImageBufferCGBitmapBackend::create):
        (WebCore::ImageBufferCGBitmapBackend::copyNativeImage const):
        * platform/graphics/cg/ImageBufferCGBitmapBackend.h:
        * platform/graphics/cg/ImageBufferIOSurfaceBackend.cpp:
        (WebCore::ImageBufferIOSurfaceBackend::create):
        * platform/graphics/cg/ImageBufferIOSurfaceBackend.h:
        * platform/graphics/cg/ImageBufferUtilitiesCG.cpp:
        (WebCore::encode):
        * platform/graphics/cg/NativeImageCG.cpp:
        (WebCore::NativeImage::singlePixelSolidColor const):
        * platform/graphics/cocoa/GraphicsContextGLOpenGLCocoa.mm:
        (WebCore::GraphicsContextGLOpenGL::allocateAndBindDisplayBufferBacking):
        * platform/graphics/cocoa/IOSurface.h:
        * platform/graphics/cocoa/IOSurface.mm:
        (WebCore::IOSurface::surfaceFromPool):
        (WebCore::IOSurface::create):
        (WebCore::IOSurface::createFromSendRight):
        (WebCore::IOSurface::createFromSurface):
        (WebCore::IOSurface::createFromImage):
        (WebCore::IOSurface::createFromPixelBuffer):
        (WebCore::IOSurface::IOSurface):
        (WebCore::IOSurface::ensurePlatformContext):
        (WebCore::IOSurface::migrateColorSpaceToProperties):
        * platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:
        (WebCore::FilterEffectRendererCoreImage::renderToImageBuffer):
        * platform/graphics/cv/ImageTransferSessionVT.mm:
        (WebCore::ImageTransferSessionVT::createPixelBuffer):
        * platform/graphics/cv/PixelBufferConformerCV.cpp:
        (WebCore::PixelBufferConformerCV::createImageFromPixelBuffer):
        * platform/graphics/displaylists/DisplayListImageBuffer.h:
        (WebCore::DisplayList::ImageBuffer::create):
        * platform/graphics/displaylists/DisplayListItemBuffer.cpp:
        (WebCore::DisplayList::ItemHandle::destroy):
        * platform/graphics/displaylists/DisplayListItems.h:
        (WebCore::DisplayList::BeginClipToDrawingCommands::BeginClipToDrawingCommands):
        (WebCore::DisplayList::BeginClipToDrawingCommands::colorSpace const):
        (WebCore::DisplayList::BeginClipToDrawingCommands::encode const):
        (WebCore::DisplayList::BeginClipToDrawingCommands::decode):
        (WebCore::DisplayList::GetPixelBuffer::GetPixelBuffer):
        (WebCore::DisplayList::GetPixelBuffer::outputFormat const):
        (WebCore::DisplayList::GetPixelBuffer::encode const):
        (WebCore::DisplayList::GetPixelBuffer::decode):
        * platform/graphics/displaylists/DisplayListRecorder.cpp:
        (WebCore::DisplayList::Recorder::clipToDrawingCommands):
        * platform/graphics/displaylists/DisplayListRecorder.h:
        * platform/graphics/filters/FEDisplacementMap.cpp:
        (WebCore::FEDisplacementMap::setResultColorSpace):
        * platform/graphics/filters/FEDisplacementMap.h:
        * platform/graphics/filters/FEFlood.h:
        * platform/graphics/filters/FETile.cpp:
        (WebCore::FETile::platformApplySoftware):
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::convertPixelBufferToColorSpace):
        (WebCore::FilterEffect::convertImageBufferToColorSpace):
        (WebCore::FilterEffect::copyConvertedImageBufferToDestination):
        (WebCore::FilterEffect::copyConvertedPixelBufferToDestination):
        (WebCore::FilterEffect::requiresPixelBufferColorSpaceConversion):
        (WebCore::FilterEffect::transformResultColorSpace):
        * platform/graphics/filters/FilterEffect.h:
        (WebCore::FilterEffect::operatingColorSpace const):
        (WebCore::FilterEffect::setOperatingColorSpace):
        (WebCore::FilterEffect::resultColorSpace const):
        (WebCore::FilterEffect::setResultColorSpace):
        * platform/graphics/filters/SourceGraphic.h:
        (WebCore::SourceGraphic::SourceGraphic):
        * platform/gtk/PlatformScreenGtk.cpp:
        (WebCore::screenColorSpace):
        * platform/ios/PlatformScreenIOS.mm:
        (WebCore::screenColorSpace):
        (WebCore::collectScreenProperties):
        * platform/mac/PlatformScreenMac.mm:
        (WebCore::collectScreenProperties):
        (WebCore::screenColorSpace):
        * platform/mac/ThemeMac.mm:
        (WebCore::ThemeMac::drawCellOrFocusRingWithViewIntoContext):
        * platform/mediastream/mac/ScreenDisplayCapturerMac.mm:
        (WebCore::ScreenDisplayCapturerMac::createDisplayStream):
        * platform/mock/MockRealtimeVideoSource.cpp:
        (WebCore::MockRealtimeVideoSource::imageBuffer const):
        * platform/playstation/PlatformScreenPlayStation.cpp:
        (WebCore::screenColorSpace):
        * platform/win/PlatformScreenWin.cpp:
        (WebCore::screenColorSpace):
        * platform/wpe/PlatformScreenWPE.cpp:
        (WebCore::screenColorSpace):
        * platform/xr/PlatformXR.h:
        (PlatformXR::Device::FrameData::LayerData::decode):
        * rendering/CSSFilter.cpp:
        (WebCore::CSSFilter::buildReferenceFilter):
        (WebCore::CSSFilter::build):
        (WebCore::CSSFilter::allocateBackingStoreIfNeeded):
        (WebCore::CSSFilter::apply):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::patternForDescription):
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::paintSystemPreviewBadge):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintProgressBar):
        * rendering/shapes/Shape.cpp:
        (WebCore::Shape::createRasterShape):
        * rendering/svg/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::applyClippingToContext):
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::buildPrimitives const):
        (WebCore::RenderSVGResourceFilter::applyResource):
        (WebCore::RenderSVGResourceFilter::postApplyResource):
        * rendering/svg/RenderSVGResourceGradient.cpp:
        (WebCore::createMaskAndSwapContextForTextGradient):
        * rendering/svg/RenderSVGResourceMasker.cpp:
        (WebCore::RenderSVGResourceMasker::applyResource):
        (WebCore::RenderSVGResourceMasker::drawContentIntoMaskImage):
        * rendering/svg/RenderSVGResourceMasker.h:
        * rendering/svg/RenderSVGResourcePattern.cpp:
        (WebCore::RenderSVGResourcePattern::createTileImage const):
        * rendering/svg/SVGRenderingContext.cpp:
        (WebCore::SVGRenderingContext::createImageBuffer):
        (WebCore::SVGRenderingContext::bufferForeground):
        * rendering/svg/SVGRenderingContext.h:
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::nativeImage):
        (WebCore::SVGImage::drawPatternForContainer):
        * svg/graphics/filters/SVGFEImage.cpp:
        (WebCore::FEImage::platformApplySoftware):

2021-05-23  Chris Dumez  <cdumez@apple.com>

        Use CheckedLock in even more places
        https://bugs.webkit.org/show_bug.cgi?id=226152

        Reviewed by Darin Adler.

        Use CheckedLock in even more places to benefit from Clang Thread Safety Analysis.

        * platform/image-decoders/ScalableImageDecoder.cpp:
        (WebCore::ScalableImageDecoder::frameIsCompleteAtIndex const):
        (WebCore::ScalableImageDecoder::frameHasAlphaAtIndex const):
        (WebCore::ScalableImageDecoder::frameBytesAtIndex const):
        (WebCore::ScalableImageDecoder::frameDurationAtIndex const):
        (WebCore::ScalableImageDecoder::createFrameImageAtIndex):
        * platform/image-decoders/ScalableImageDecoder.h:
        * platform/mediarecorder/MediaRecorderPrivateMock.h:
        * platform/mediarecorder/cocoa/MediaRecorderPrivateWriterCocoa.h:
        * platform/mediarecorder/cocoa/MediaRecorderPrivateWriterCocoa.mm:
        * platform/mediastream/RealtimeMediaSource.h:
        * platform/mediastream/RealtimeOutgoingAudioSource.h:
        * platform/mediastream/RealtimeOutgoingVideoSource.h:
        * platform/mediastream/gstreamer/RealtimeOutgoingAudioSourceLibWebRTC.cpp:
        (WebCore::RealtimeOutgoingAudioSourceLibWebRTC::audioSamplesAvailable):
        (WebCore::RealtimeOutgoingAudioSourceLibWebRTC::pullAudioData):
        * platform/mediastream/gstreamer/RealtimeOutgoingAudioSourceLibWebRTC.h:
        * platform/mediastream/libwebrtc/GStreamerVideoEncoderFactory.cpp:
        * platform/mediastream/mac/AVVideoCaptureSource.h:
        * platform/sql/SQLiteDatabase.h:
        * worklets/PaintWorkletGlobalScope.h:

2021-05-23  Chris Dumez  <cdumez@apple.com>

        Drop WTF::tryHoldLock() as it is incompatible with Clang Thread Safety Analysis
        https://bugs.webkit.org/show_bug.cgi?id=226145

        Reviewed by Darin Adler.

        Drop WTF::tryHoldLock() as it is incompatible with Clang Thread Safety Analysis.
        Instead, use the following pattern which is supported:
        ```
        if (lock.tryLock()) {
            Locker locker { AdoptLock, lock };
            // ...
        }
        ```

        * Modules/webaudio/AudioBufferSourceNode.cpp:
        (WebCore::AudioBufferSourceNode::process):
        * Modules/webaudio/AudioWorkletNode.cpp:
        (WebCore::AudioWorkletNode::process):
        * Modules/webaudio/ConvolverNode.cpp:
        (WebCore::ConvolverNode::process):
        * Modules/webaudio/MediaElementAudioSourceNode.cpp:
        (WebCore::MediaElementAudioSourceNode::process):
        * Modules/webaudio/MediaStreamAudioSourceNode.cpp:
        (WebCore::MediaStreamAudioSourceNode::process):
        * Modules/webaudio/OscillatorNode.cpp:
        (WebCore::OscillatorNode::process):
        * Modules/webaudio/PannerNode.cpp:
        (WebCore::PannerNode::process):
        * Modules/webaudio/ScriptProcessorNode.cpp:
        (WebCore::ScriptProcessorNode::process):
        * Modules/webaudio/WaveShaperProcessor.cpp:
        (WebCore::WaveShaperProcessor::process):
        * platform/audio/ReverbConvolver.cpp:
        (WebCore::ReverbConvolver::process):
        * platform/graphics/ShadowBlur.cpp:
        (WebCore::ScratchBuffer::purgeTimerFired):
        (WebCore::ShadowBlur::drawRectShadowWithTiling):
        (WebCore::ShadowBlur::drawInsetShadowWithTiling):
        * platform/graphics/avfoundation/AudioSourceProviderAVFObjC.mm:
        (WebCore::AudioSourceProviderAVFObjC::provideInput):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::enqueueVideoSample):
        * platform/mediastream/mac/WebAudioSourceProviderCocoa.mm:
        (WebCore::WebAudioSourceProviderCocoa::provideInput):
        * workers/WorkerOrWorkletThread.cpp:
        (WebCore::WorkerOrWorkletThread::stop):

2021-05-22  Chris Dumez  <cdumez@apple.com>

        Adopt CheckedLock in more places
        https://bugs.webkit.org/show_bug.cgi?id=226138

        Reviewed by Darin Adler.

        Adopt CheckedLock in more places to benefit from Clang Thread Safety Analysis.

        * Modules/webdatabase/Database.cpp:
        (WebCore::Database::performClose):
        (WebCore::Database::scheduleTransaction):
        (WebCore::Database::inProgressTransactionCompleted):
        (WebCore::Database::hasPendingTransaction):
        (WebCore::Database::runTransaction):
        * Modules/webdatabase/Database.h:
        (WebCore::Database::WTF_GUARDED_BY_LOCK):
        * Modules/webdatabase/DatabaseManager.cpp:
        (WebCore::DatabaseManager::addProposedDatabase):
        (WebCore::DatabaseManager::removeProposedDatabase):
        (WebCore::DatabaseManager::fullPathForDatabase):
        (WebCore::DatabaseManager::detailsForNameAndOrigin):
        * Modules/webdatabase/DatabaseManager.h:
        * Modules/webdatabase/DatabaseThread.cpp:
        (WebCore::DatabaseThread::databaseThread):
        (WebCore::DatabaseThread::recordDatabaseOpen):
        (WebCore::DatabaseThread::recordDatabaseClosed):
        (WebCore::DatabaseThread::hasPendingDatabaseActivity const):
        * Modules/webdatabase/DatabaseThread.h:
        * Modules/webdatabase/SQLCallbackWrapper.h:
        (WebCore::SQLCallbackWrapper::clear):
        (WebCore::SQLCallbackWrapper::unwrap):
        * Modules/webdatabase/SQLTransaction.cpp:
        (WebCore::SQLTransaction::enqueueStatement):
        (WebCore::SQLTransaction::checkAndHandleClosedDatabase):
        (WebCore::SQLTransaction::getNextStatement):
        * Modules/webdatabase/SQLTransaction.h:
        * Modules/webdatabase/SQLTransactionBackend.cpp:
        (WebCore::SQLTransactionBackend::doCleanup):
        * accessibility/isolatedtree/AXIsolatedTree.h:
        (WebCore::AXIsolatedTree::WTF_GUARDED_BY_LOCK):
        * platform/AbortableTaskQueue.h:
        * platform/audio/cocoa/AudioDestinationCocoa.cpp:
        (WebCore::AudioDestinationCocoa::render):
        * platform/audio/cocoa/AudioDestinationCocoa.h:
        * platform/audio/gstreamer/AudioDestinationGStreamer.h:
        * platform/audio/gstreamer/AudioSourceProviderGStreamer.cpp:
        (WebCore::AudioSourceProviderGStreamer::provideInput):
        (WebCore::AudioSourceProviderGStreamer::handleSample):
        (WebCore::AudioSourceProviderGStreamer::clearAdapters):
        * platform/audio/gstreamer/AudioSourceProviderGStreamer.h:
        * platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:
        (webKitWebAudioSrcRenderIteration):
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::AVFWrapper::addToMap):
        (WebCore::AVFWrapper::removeFromMap const):
        (WebCore::AVFWrapper::avfWrapperForCallbackContext):
        (WebCore::AVFWrapper::periodicTimeObserverCallback):
        (WebCore::AVFWrapper::processNotification):
        (WebCore::AVFWrapper::loadPlayableCompletionCallback):
        (WebCore::AVFWrapper::loadMetadataCompletionCallback):
        (WebCore::AVFWrapper::seekCompletedCallback):
        (WebCore::AVFWrapper::processCue):
        (WebCore::AVFWrapper::legibleOutputCallback):
        (WebCore::AVFWrapper::processShouldWaitForLoadingOfResource):
        (WebCore::AVFWrapper::resourceLoaderShouldWaitForLoadingOfRequestedResource):

2021-05-22  Chris Dumez  <cdumez@apple.com>

        Use CheckedLock in SpeechRecognitionCaptureSourceImpl
        https://bugs.webkit.org/show_bug.cgi?id=226131

        Reviewed by Darin Adler.

        Use CheckedLock in SpeechRecognitionCaptureSourceImpl to benefit from Clang Thread
        Safety Analysis. Note that audioSamplesAvailable() does not grab the lock before using
        m_dataSource, only when setting the data member. It is unclear why it is safe so I
        used WTF_IGNORES_THREAD_SAFETY_ANALYSIS and added a FIXME comment.

        * Modules/speech/SpeechRecognitionCaptureSourceImpl.cpp:
        (WebCore::SpeechRecognitionCaptureSourceImpl::updateDataSource):
        (WebCore::SpeechRecognitionCaptureSourceImpl::pullSamplesAndCallDataCallback):
        * Modules/speech/SpeechRecognitionCaptureSourceImpl.h:

2021-05-22  Chris Dumez  <cdumez@apple.com>

        Replace LockHolder with Locker in local variables
        https://bugs.webkit.org/show_bug.cgi?id=226133

        Reviewed by Darin Adler.

        Replace LockHolder with Locker in local variables. It is shorter and it allows switching the lock
        type more easily since the compiler with deduce the lock type T for Locker<T>.

        * Modules/webaudio/AsyncAudioDecoder.cpp:
        (WebCore::AsyncAudioDecoder::AsyncAudioDecoder):
        (WebCore::AsyncAudioDecoder::runLoop):
        * Modules/webdatabase/Database.cpp:
        (WebCore::Database::performClose):
        (WebCore::Database::inProgressTransactionCompleted):
        (WebCore::Database::hasPendingTransaction):
        (WebCore::Database::runTransaction):
        * Modules/webdatabase/DatabaseThread.cpp:
        (WebCore::DatabaseThread::start):
        (WebCore::DatabaseThread::databaseThread):
        (WebCore::DatabaseThread::recordDatabaseOpen):
        (WebCore::DatabaseThread::recordDatabaseClosed):
        (WebCore::DatabaseThread::hasPendingDatabaseActivity const):
        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::canEstablishDatabase):
        (WebCore::DatabaseTracker::retryCanEstablishDatabase):
        (WebCore::DatabaseTracker::maximumSize):
        (WebCore::DatabaseTracker::fullPathForDatabase):
        (WebCore::DatabaseTracker::origins):
        (WebCore::DatabaseTracker::databaseNames):
        (WebCore::DatabaseTracker::detailsForNameAndOrigin):
        (WebCore::DatabaseTracker::setDatabaseDetails):
        (WebCore::DatabaseTracker::doneCreatingDatabase):
        (WebCore::DatabaseTracker::openDatabases):
        (WebCore::DatabaseTracker::addOpenDatabase):
        (WebCore::DatabaseTracker::removeOpenDatabase):
        (WebCore::DatabaseTracker::originLockFor):
        (WebCore::DatabaseTracker::quota):
        (WebCore::DatabaseTracker::setQuota):
        (WebCore::DatabaseTracker::deleteOrigin):
        (WebCore::DatabaseTracker::deleteDatabase):
        (WebCore::DatabaseTracker::deleteDatabaseFile):
        (WebCore::DatabaseTracker::removeDeletedOpenedDatabases):
        * Modules/webdatabase/SQLCallbackWrapper.h:
        (WebCore::SQLCallbackWrapper::clear):
        (WebCore::SQLCallbackWrapper::unwrap):
        * Modules/webdatabase/SQLTransaction.cpp:
        (WebCore::SQLTransaction::enqueueStatement):
        (WebCore::SQLTransaction::checkAndHandleClosedDatabase):
        (WebCore::SQLTransaction::getNextStatement):
        * Modules/webdatabase/SQLTransactionBackend.cpp:
        (WebCore::SQLTransactionBackend::doCleanup):
        * accessibility/isolatedtree/AXIsolatedTree.cpp:
        (WebCore::AXIsolatedTree::clear):
        (WebCore::AXIsolatedTree::generateSubtree):
        (WebCore::AXIsolatedTree::createSubtree):
        (WebCore::AXIsolatedTree::updateNode):
        (WebCore::AXIsolatedTree::updateNodeProperty):
        (WebCore::AXIsolatedTree::updateChildren):
        (WebCore::AXIsolatedTree::focusedNode):
        (WebCore::AXIsolatedTree::rootNode):
        (WebCore::AXIsolatedTree::setFocusedNodeID):
        (WebCore::AXIsolatedTree::removeNode):
        (WebCore::AXIsolatedTree::removeSubtree):
        (WebCore::AXIsolatedTree::applyPendingChanges):
        * page/scrolling/mac/ScrollingTreeMac.mm:
        (ScrollingTreeMac::scrollingNodeForPoint):
        (ScrollingTreeMac::eventListenerRegionTypesForPoint const):
        * platform/AbortableTaskQueue.h:
        * platform/audio/cocoa/CARingBuffer.cpp:
        (WebCore::CARingBufferStorageVector::flush):
        (WebCore::CARingBufferStorageVector::setCurrentFrameBounds):
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::AVFWrapper::addToMap):
        (WebCore::AVFWrapper::removeFromMap const):
        (WebCore::AVFWrapper::periodicTimeObserverCallback):
        (WebCore::AVFWrapper::processNotification):
        (WebCore::AVFWrapper::loadPlayableCompletionCallback):
        (WebCore::AVFWrapper::loadMetadataCompletionCallback):
        (WebCore::AVFWrapper::seekCompletedCallback):
        (WebCore::AVFWrapper::processCue):
        (WebCore::AVFWrapper::legibleOutputCallback):
        (WebCore::AVFWrapper::processShouldWaitForLoadingOfResource):
        (WebCore::AVFWrapper::resourceLoaderShouldWaitForLoadingOfRequestedResource):
        * platform/graphics/avfoundation/objc/ImageDecoderAVFObjC.mm:
        (-[WebCoreSharedBufferResourceLoaderDelegate setExpectedContentSize:]):
        (-[WebCoreSharedBufferResourceLoaderDelegate updateData:complete:]):
        (-[WebCoreSharedBufferResourceLoaderDelegate resourceLoader:shouldWaitForLoadingOfRequestedResource:]):
        (-[WebCoreSharedBufferResourceLoaderDelegate resourceLoader:didCancelLoadingRequest:]):
        (WebCore::ImageDecoderAVFObjC::setTrack):
        (WebCore::ImageDecoderAVFObjC::createFrameImageAtIndex):
        * platform/graphics/gstreamer/ImageDecoderGStreamer.cpp:
        (WebCore::ImageDecoderGStreamer::createFrameImageAtIndex):
        * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.cpp:
        (WebCore::InbandTextTrackPrivateGStreamer::handleSample):
        (WebCore::InbandTextTrackPrivateGStreamer::notifyTrackOfSample):
        * platform/graphics/gstreamer/MainThreadNotifier.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::parseInitDataFromProtectionMessage):
        (WebCore::MediaPlayerPrivateGStreamer::handleProtectionEvent):
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.cpp:
        (WebCore::TrackPrivateBaseGStreamer::tagsChanged):
        (WebCore::TrackPrivateBaseGStreamer::notifyTrackOfTagsChanged):
        * platform/graphics/gstreamer/VideoSinkGStreamer.cpp:
        (VideoRenderRequestScheduler::start):
        (VideoRenderRequestScheduler::stop):
        (VideoRenderRequestScheduler::drain):
        (VideoRenderRequestScheduler::requestRender):
        * platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.cpp:
        (transformInPlace):
        (sinkEventHandler):
        (webKitMediaCommonEncryptionDecryptIsFlushing):
        (setContext):
        * platform/graphics/nicosia/NicosiaBuffer.cpp:
        (Nicosia::Buffer::beginPainting):
        (Nicosia::Buffer::completePainting):
        (Nicosia::Buffer::waitUntilPaintingComplete):
        * platform/graphics/nicosia/NicosiaPlatformLayer.h:
        (Nicosia::PlatformLayer::setSceneIntegration):
        (Nicosia::PlatformLayer::createUpdateScope):
        (Nicosia::CompositionLayer::updateState):
        (Nicosia::CompositionLayer::flushState):
        (Nicosia::CompositionLayer::commitState):
        (Nicosia::CompositionLayer::accessPending):
        (Nicosia::CompositionLayer::accessCommitted):
        * platform/graphics/nicosia/NicosiaScene.h:
        (Nicosia::Scene::accessState):
        * platform/graphics/nicosia/NicosiaSceneIntegration.cpp:
        (Nicosia::SceneIntegration::setClient):
        (Nicosia::SceneIntegration::invalidate):
        (Nicosia::SceneIntegration::requestUpdate):
        * platform/graphics/nicosia/texmap/NicosiaBackingStoreTextureMapperImpl.cpp:
        (Nicosia::BackingStoreTextureMapperImpl::flushUpdate):
        (Nicosia::BackingStoreTextureMapperImpl::takeUpdate):
        * platform/graphics/nicosia/texmap/NicosiaContentLayerTextureMapperImpl.cpp:
        (Nicosia::ContentLayerTextureMapperImpl::~ContentLayerTextureMapperImpl):
        (Nicosia::ContentLayerTextureMapperImpl::invalidateClient):
        (Nicosia::ContentLayerTextureMapperImpl::flushUpdate):
        (Nicosia::ContentLayerTextureMapperImpl::swapBuffersIfNeeded):
        * platform/graphics/nicosia/texmap/NicosiaImageBackingTextureMapperImpl.cpp:
        (Nicosia::ImageBackingTextureMapperImpl::flushUpdate):
        (Nicosia::ImageBackingTextureMapperImpl::takeUpdate):
        * platform/graphics/texmap/TextureMapperGCGLPlatformLayer.cpp:
        (WebCore::TextureMapperGCGLPlatformLayer::swapBuffersIfNeeded):
        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:
        (WebCore::MediaPlayerPrivateMediaFoundation::load):
        (WebCore::MediaPlayerPrivateMediaFoundation::naturalSize const):
        (WebCore::MediaPlayerPrivateMediaFoundation::addListener):
        (WebCore::MediaPlayerPrivateMediaFoundation::removeListener):
        (WebCore::MediaPlayerPrivateMediaFoundation::notifyDeleted):
        (WebCore::MediaPlayerPrivateMediaFoundation::setNaturalSize):
        (WebCore::MediaPlayerPrivateMediaFoundation::AsyncCallback::Invoke):
        (WebCore::MediaPlayerPrivateMediaFoundation::AsyncCallback::onMediaPlayerDeleted):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::OnClockStart):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::OnClockStop):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::OnClockPause):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::OnClockRestart):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::OnClockSetRate):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::ProcessMessage):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::GetCurrentMediaType):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::InitServicePointers):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::ReleaseServicePointers):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::SetVideoWindow):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::GetVideoWindow):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::SetVideoPosition):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::GetVideoPosition):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::RepaintVideo):
        (WebCore::MediaPlayerPrivateMediaFoundation::VideoSamplePool::getSample):
        (WebCore::MediaPlayerPrivateMediaFoundation::VideoSamplePool::returnSample):
        (WebCore::MediaPlayerPrivateMediaFoundation::VideoSamplePool::areSamplesPending):
        (WebCore::MediaPlayerPrivateMediaFoundation::VideoSamplePool::initialize):
        (WebCore::MediaPlayerPrivateMediaFoundation::VideoSamplePool::clear):
        (WebCore::MediaPlayerPrivateMediaFoundation::VideoScheduler::stopScheduler):
        (WebCore::MediaPlayerPrivateMediaFoundation::VideoScheduler::scheduleSample):
        (WebCore::MediaPlayerPrivateMediaFoundation::VideoScheduler::processSamplesInQueue):
        (WebCore::MediaPlayerPrivateMediaFoundation::VideoScheduler::processSample):
        (WebCore::MediaPlayerPrivateMediaFoundation::VideoScheduler::schedulerThreadProcPrivate):
        (WebCore::MediaPlayerPrivateMediaFoundation::Direct3DPresenter::setVideoWindow):
        (WebCore::MediaPlayerPrivateMediaFoundation::Direct3DPresenter::setDestinationRect):
        (WebCore::MediaPlayerPrivateMediaFoundation::Direct3DPresenter::createVideoSamples):
        (WebCore::MediaPlayerPrivateMediaFoundation::Direct3DPresenter::checkDeviceState):
        (WebCore::MediaPlayerPrivateMediaFoundation::Direct3DPresenter::presentSample):
        (WebCore::MediaPlayerPrivateMediaFoundation::Direct3DPresenter::paintCurrentFrame):
        (WebCore::MediaPlayerPrivateMediaFoundation::Direct3DPresenter::createD3DDevice):
        * platform/image-decoders/ScalableImageDecoder.cpp:
        (WebCore::ScalableImageDecoder::frameIsCompleteAtIndex const):
        (WebCore::ScalableImageDecoder::frameHasAlphaAtIndex const):
        (WebCore::ScalableImageDecoder::frameBytesAtIndex const):
        (WebCore::ScalableImageDecoder::frameDurationAtIndex const):
        (WebCore::ScalableImageDecoder::createFrameImageAtIndex):
        * platform/image-decoders/ScalableImageDecoder.h:
        * platform/ios/LegacyTileCache.mm:
        (WebCore::LegacyTileCache::setTilesOpaque):
        (WebCore::LegacyTileCache::doLayoutTiles):
        (WebCore::LegacyTileCache::setCurrentScale):
        (WebCore::LegacyTileCache::commitScaleChange):
        (WebCore::LegacyTileCache::layoutTilesNow):
        (WebCore::LegacyTileCache::layoutTilesNowForRect):
        (WebCore::LegacyTileCache::removeAllNonVisibleTiles):
        (WebCore::LegacyTileCache::removeAllTiles):
        (WebCore::LegacyTileCache::removeForegroundTiles):
        (WebCore::LegacyTileCache::setContentReplacementImage):
        (WebCore::LegacyTileCache::contentReplacementImage const):
        (WebCore::LegacyTileCache::tileCreationTimerFired):
        (WebCore::LegacyTileCache::setNeedsDisplayInRect):
        (WebCore::LegacyTileCache::updateTilingMode):
        (WebCore::LegacyTileCache::setTilingMode):
        (WebCore::LegacyTileCache::doPendingRepaints):
        (WebCore::LegacyTileCache::flushSavedDisplayRects):
        (WebCore::LegacyTileCache::prepareToDraw):
        * platform/ios/LegacyTileLayerPool.mm:
        (WebCore::LegacyTileLayerPool::addLayer):
        (WebCore::LegacyTileLayerPool::takeLayerWithSize):
        (WebCore::LegacyTileLayerPool::setCapacity):
        (WebCore::LegacyTileLayerPool::prune):
        (WebCore::LegacyTileLayerPool::drain):
        * platform/ios/wak/WAKWindow.mm:
        (-[WAKWindow setExposedScrollViewRect:]):
        (-[WAKWindow exposedScrollViewRect]):
        * platform/ios/wak/WebCoreThread.mm:
        (RunWebThread):
        (StartWebThread):
        * platform/mediastream/gstreamer/RealtimeOutgoingAudioSourceLibWebRTC.cpp:
        (WebCore::RealtimeOutgoingAudioSourceLibWebRTC::audioSamplesAvailable):
        (WebCore::RealtimeOutgoingAudioSourceLibWebRTC::pullAudioData):
        * platform/network/cf/FormDataStreamCFNet.cpp:
        (WebCore::openNextStream):
        (WebCore::formFinalize):
        (WebCore::formClose):
        * platform/network/curl/CurlRequest.cpp:
        (WebCore::CurlRequest::setRequestPaused):
        (WebCore::CurlRequest::setCallbackPaused):
        (WebCore::CurlRequest::pausedStatusChanged):
        (WebCore::CurlRequest::enableDownloadToFile):
        (WebCore::CurlRequest::getDownloadedFilePath):
        (WebCore::CurlRequest::writeDataToDownloadFileIfEnabled):
        (WebCore::CurlRequest::closeDownloadFile):
        (WebCore::CurlRequest::cleanupDownloadFile):
        * platform/network/curl/CurlSSLHandle.cpp:
        (WebCore::CurlSSLHandle::allowAnyHTTPSCertificatesForHost):
        (WebCore::CurlSSLHandle::canIgnoreAnyHTTPSCertificatesForHost const):
        (WebCore::CurlSSLHandle::setClientCertificateInfo):
        (WebCore::CurlSSLHandle::getSSLClientCertificate const):
        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::close):
        (WebCore::SQLiteDatabase::maximumSize):
        (WebCore::SQLiteDatabase::setMaximumSize):
        (WebCore::SQLiteDatabase::pageSize):
        (WebCore::SQLiteDatabase::freeSpaceSize):
        (WebCore::SQLiteDatabase::totalSize):
        (WebCore::SQLiteDatabase::runIncrementalVacuumCommand):
        (WebCore::SQLiteDatabase::interrupt):
        (WebCore::SQLiteDatabase::setAuthorizer):
        (WebCore::constructAndPrepareStatement):
        * platform/sql/SQLiteStatement.cpp:
        (WebCore::SQLiteStatement::step):

2021-05-22  Devin Rousso  <drousso@apple.com>

        ASSERTION FAILED: Component at index 1 is 1.000000 and is greater than the allowed maximum 1.000000
        https://bugs.webkit.org/show_bug.cgi?id=226118
        <rdar://problem/78333590>

        Reviewed by Sam Weinig.

        Covered by SampledPageTopColor tests.

        * platform/graphics/cg/ColorCG.cpp:
        (WebCore::roundAndClampToSRGBALossy):
        Use `makeFromComponentsClamping` to actually clamp the component values instead of assuming
        that the `CGColorRef` will be sRGB (though it still assumes an RGB color space/format).

2021-05-22  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r277913.
        https://bugs.webkit.org/show_bug.cgi?id=226140

        Caused multiple layout-test crash on mac debug queues

        Reverted changeset:

        "Replace LockHolder with Locker in local variables"
        https://bugs.webkit.org/show_bug.cgi?id=226133
        https://trac.webkit.org/changeset/277913

2021-05-22  Rob Buis  <rbuis@igalia.com>

        Detect invalid InlinePathData in StrokeInlinePath
        https://bugs.webkit.org/show_bug.cgi?id=225691

        Reviewed by Ryosuke Niwa.

        Detect invalid InlinePathData in StrokeInlinePath.

        * platform/graphics/displaylists/DisplayListItems.h:
        (WebCore::DisplayList::StrokeInlinePath::StrokeInlinePath):
        (WebCore::DisplayList::StrokeInlinePath::path const): Deleted.

2021-05-21  Chris Dumez  <cdumez@apple.com>

        Remove WTF::holdLock() / WTF::holdLockIf()
        https://bugs.webkit.org/show_bug.cgi?id=226135

        Reviewed by Darin Adler.

        Remove WTF::holdLock() / WTF::holdLockIf() because they are not compatible with
        Clang Thread Safety Analysis. All call sites have been converted to use the Locker
        constructor directly.

        * dom/Node.cpp:
        (WebCore::Node::eventTargetDataConcurrently):

2021-05-21  Chris Dumez  <cdumez@apple.com>

        Replace LockHolder with Locker in local variables
        https://bugs.webkit.org/show_bug.cgi?id=226133

        Reviewed by Darin Adler.

        Replace LockHolder with Locker in local variables. It is shorter and it allows switching the lock
        type more easily since the compiler with deduce the lock type T for Locker<T>.

        * Modules/webaudio/AsyncAudioDecoder.cpp:
        (WebCore::AsyncAudioDecoder::AsyncAudioDecoder):
        (WebCore::AsyncAudioDecoder::runLoop):
        * Modules/webdatabase/Database.cpp:
        (WebCore::Database::performClose):
        (WebCore::Database::inProgressTransactionCompleted):
        (WebCore::Database::hasPendingTransaction):
        (WebCore::Database::runTransaction):
        * Modules/webdatabase/DatabaseThread.cpp:
        (WebCore::DatabaseThread::start):
        (WebCore::DatabaseThread::databaseThread):
        (WebCore::DatabaseThread::recordDatabaseOpen):
        (WebCore::DatabaseThread::recordDatabaseClosed):
        (WebCore::DatabaseThread::hasPendingDatabaseActivity const):
        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::canEstablishDatabase):
        (WebCore::DatabaseTracker::retryCanEstablishDatabase):
        (WebCore::DatabaseTracker::maximumSize):
        (WebCore::DatabaseTracker::fullPathForDatabase):
        (WebCore::DatabaseTracker::origins):
        (WebCore::DatabaseTracker::databaseNames):
        (WebCore::DatabaseTracker::detailsForNameAndOrigin):
        (WebCore::DatabaseTracker::setDatabaseDetails):
        (WebCore::DatabaseTracker::doneCreatingDatabase):
        (WebCore::DatabaseTracker::openDatabases):
        (WebCore::DatabaseTracker::addOpenDatabase):
        (WebCore::DatabaseTracker::removeOpenDatabase):
        (WebCore::DatabaseTracker::originLockFor):
        (WebCore::DatabaseTracker::quota):
        (WebCore::DatabaseTracker::setQuota):
        (WebCore::DatabaseTracker::deleteOrigin):
        (WebCore::DatabaseTracker::deleteDatabase):
        (WebCore::DatabaseTracker::deleteDatabaseFile):
        (WebCore::DatabaseTracker::removeDeletedOpenedDatabases):
        * Modules/webdatabase/SQLCallbackWrapper.h:
        (WebCore::SQLCallbackWrapper::clear):
        (WebCore::SQLCallbackWrapper::unwrap):
        * Modules/webdatabase/SQLTransaction.cpp:
        (WebCore::SQLTransaction::enqueueStatement):
        (WebCore::SQLTransaction::checkAndHandleClosedDatabase):
        (WebCore::SQLTransaction::getNextStatement):
        * Modules/webdatabase/SQLTransactionBackend.cpp:
        (WebCore::SQLTransactionBackend::doCleanup):
        * accessibility/isolatedtree/AXIsolatedTree.cpp:
        (WebCore::AXIsolatedTree::clear):
        (WebCore::AXIsolatedTree::generateSubtree):
        (WebCore::AXIsolatedTree::createSubtree):
        (WebCore::AXIsolatedTree::updateNode):
        (WebCore::AXIsolatedTree::updateNodeProperty):
        (WebCore::AXIsolatedTree::updateChildren):
        (WebCore::AXIsolatedTree::focusedNode):
        (WebCore::AXIsolatedTree::rootNode):
        (WebCore::AXIsolatedTree::setFocusedNodeID):
        (WebCore::AXIsolatedTree::removeNode):
        (WebCore::AXIsolatedTree::removeSubtree):
        (WebCore::AXIsolatedTree::applyPendingChanges):
        * page/scrolling/mac/ScrollingTreeMac.mm:
        (ScrollingTreeMac::scrollingNodeForPoint):
        (ScrollingTreeMac::eventListenerRegionTypesForPoint const):
        * platform/AbortableTaskQueue.h:
        * platform/audio/cocoa/CARingBuffer.cpp:
        (WebCore::CARingBufferStorageVector::flush):
        (WebCore::CARingBufferStorageVector::setCurrentFrameBounds):
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::AVFWrapper::addToMap):
        (WebCore::AVFWrapper::removeFromMap const):
        (WebCore::AVFWrapper::periodicTimeObserverCallback):
        (WebCore::AVFWrapper::processNotification):
        (WebCore::AVFWrapper::loadPlayableCompletionCallback):
        (WebCore::AVFWrapper::loadMetadataCompletionCallback):
        (WebCore::AVFWrapper::seekCompletedCallback):
        (WebCore::AVFWrapper::processCue):
        (WebCore::AVFWrapper::legibleOutputCallback):
        (WebCore::AVFWrapper::processShouldWaitForLoadingOfResource):
        (WebCore::AVFWrapper::resourceLoaderShouldWaitForLoadingOfRequestedResource):
        * platform/graphics/avfoundation/objc/ImageDecoderAVFObjC.mm:
        (-[WebCoreSharedBufferResourceLoaderDelegate setExpectedContentSize:]):
        (-[WebCoreSharedBufferResourceLoaderDelegate updateData:complete:]):
        (-[WebCoreSharedBufferResourceLoaderDelegate resourceLoader:shouldWaitForLoadingOfRequestedResource:]):
        (-[WebCoreSharedBufferResourceLoaderDelegate resourceLoader:didCancelLoadingRequest:]):
        (WebCore::ImageDecoderAVFObjC::setTrack):
        (WebCore::ImageDecoderAVFObjC::createFrameImageAtIndex):
        * platform/graphics/gstreamer/ImageDecoderGStreamer.cpp:
        (WebCore::ImageDecoderGStreamer::createFrameImageAtIndex):
        * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.cpp:
        (WebCore::InbandTextTrackPrivateGStreamer::handleSample):
        (WebCore::InbandTextTrackPrivateGStreamer::notifyTrackOfSample):
        * platform/graphics/gstreamer/MainThreadNotifier.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::parseInitDataFromProtectionMessage):
        (WebCore::MediaPlayerPrivateGStreamer::handleProtectionEvent):
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.cpp:
        (WebCore::TrackPrivateBaseGStreamer::tagsChanged):
        (WebCore::TrackPrivateBaseGStreamer::notifyTrackOfTagsChanged):
        * platform/graphics/gstreamer/VideoSinkGStreamer.cpp:
        (VideoRenderRequestScheduler::start):
        (VideoRenderRequestScheduler::stop):
        (VideoRenderRequestScheduler::drain):
        (VideoRenderRequestScheduler::requestRender):
        * platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.cpp:
        (transformInPlace):
        (sinkEventHandler):
        (webKitMediaCommonEncryptionDecryptIsFlushing):
        (setContext):
        * platform/graphics/nicosia/NicosiaBuffer.cpp:
        (Nicosia::Buffer::beginPainting):
        (Nicosia::Buffer::completePainting):
        (Nicosia::Buffer::waitUntilPaintingComplete):
        * platform/graphics/nicosia/NicosiaPlatformLayer.h:
        (Nicosia::PlatformLayer::setSceneIntegration):
        (Nicosia::PlatformLayer::createUpdateScope):
        (Nicosia::CompositionLayer::updateState):
        (Nicosia::CompositionLayer::flushState):
        (Nicosia::CompositionLayer::commitState):
        (Nicosia::CompositionLayer::accessPending):
        (Nicosia::CompositionLayer::accessCommitted):
        * platform/graphics/nicosia/NicosiaScene.h:
        (Nicosia::Scene::accessState):
        * platform/graphics/nicosia/NicosiaSceneIntegration.cpp:
        (Nicosia::SceneIntegration::setClient):
        (Nicosia::SceneIntegration::invalidate):
        (Nicosia::SceneIntegration::requestUpdate):
        * platform/graphics/nicosia/texmap/NicosiaBackingStoreTextureMapperImpl.cpp:
        (Nicosia::BackingStoreTextureMapperImpl::flushUpdate):
        (Nicosia::BackingStoreTextureMapperImpl::takeUpdate):
        * platform/graphics/nicosia/texmap/NicosiaContentLayerTextureMapperImpl.cpp:
        (Nicosia::ContentLayerTextureMapperImpl::~ContentLayerTextureMapperImpl):
        (Nicosia::ContentLayerTextureMapperImpl::invalidateClient):
        (Nicosia::ContentLayerTextureMapperImpl::flushUpdate):
        (Nicosia::ContentLayerTextureMapperImpl::swapBuffersIfNeeded):
        * platform/graphics/nicosia/texmap/NicosiaImageBackingTextureMapperImpl.cpp:
        (Nicosia::ImageBackingTextureMapperImpl::flushUpdate):
        (Nicosia::ImageBackingTextureMapperImpl::takeUpdate):
        * platform/graphics/texmap/TextureMapperGCGLPlatformLayer.cpp:
        (WebCore::TextureMapperGCGLPlatformLayer::swapBuffersIfNeeded):
        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:
        (WebCore::MediaPlayerPrivateMediaFoundation::load):
        (WebCore::MediaPlayerPrivateMediaFoundation::naturalSize const):
        (WebCore::MediaPlayerPrivateMediaFoundation::addListener):
        (WebCore::MediaPlayerPrivateMediaFoundation::removeListener):
        (WebCore::MediaPlayerPrivateMediaFoundation::notifyDeleted):
        (WebCore::MediaPlayerPrivateMediaFoundation::setNaturalSize):
        (WebCore::MediaPlayerPrivateMediaFoundation::AsyncCallback::Invoke):
        (WebCore::MediaPlayerPrivateMediaFoundation::AsyncCallback::onMediaPlayerDeleted):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::OnClockStart):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::OnClockStop):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::OnClockPause):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::OnClockRestart):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::OnClockSetRate):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::ProcessMessage):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::GetCurrentMediaType):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::InitServicePointers):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::ReleaseServicePointers):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::SetVideoWindow):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::GetVideoWindow):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::SetVideoPosition):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::GetVideoPosition):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::RepaintVideo):
        (WebCore::MediaPlayerPrivateMediaFoundation::VideoSamplePool::getSample):
        (WebCore::MediaPlayerPrivateMediaFoundation::VideoSamplePool::returnSample):
        (WebCore::MediaPlayerPrivateMediaFoundation::VideoSamplePool::areSamplesPending):
        (WebCore::MediaPlayerPrivateMediaFoundation::VideoSamplePool::initialize):
        (WebCore::MediaPlayerPrivateMediaFoundation::VideoSamplePool::clear):
        (WebCore::MediaPlayerPrivateMediaFoundation::VideoScheduler::stopScheduler):
        (WebCore::MediaPlayerPrivateMediaFoundation::VideoScheduler::scheduleSample):
        (WebCore::MediaPlayerPrivateMediaFoundation::VideoScheduler::processSamplesInQueue):
        (WebCore::MediaPlayerPrivateMediaFoundation::VideoScheduler::processSample):
        (WebCore::MediaPlayerPrivateMediaFoundation::VideoScheduler::schedulerThreadProcPrivate):
        (WebCore::MediaPlayerPrivateMediaFoundation::Direct3DPresenter::setVideoWindow):
        (WebCore::MediaPlayerPrivateMediaFoundation::Direct3DPresenter::setDestinationRect):
        (WebCore::MediaPlayerPrivateMediaFoundation::Direct3DPresenter::createVideoSamples):
        (WebCore::MediaPlayerPrivateMediaFoundation::Direct3DPresenter::checkDeviceState):
        (WebCore::MediaPlayerPrivateMediaFoundation::Direct3DPresenter::presentSample):
        (WebCore::MediaPlayerPrivateMediaFoundation::Direct3DPresenter::paintCurrentFrame):
        (WebCore::MediaPlayerPrivateMediaFoundation::Direct3DPresenter::createD3DDevice):
        * platform/image-decoders/ScalableImageDecoder.cpp:
        (WebCore::ScalableImageDecoder::frameIsCompleteAtIndex const):
        (WebCore::ScalableImageDecoder::frameHasAlphaAtIndex const):
        (WebCore::ScalableImageDecoder::frameBytesAtIndex const):
        (WebCore::ScalableImageDecoder::frameDurationAtIndex const):
        (WebCore::ScalableImageDecoder::createFrameImageAtIndex):
        * platform/image-decoders/ScalableImageDecoder.h:
        * platform/ios/LegacyTileCache.mm:
        (WebCore::LegacyTileCache::setTilesOpaque):
        (WebCore::LegacyTileCache::doLayoutTiles):
        (WebCore::LegacyTileCache::setCurrentScale):
        (WebCore::LegacyTileCache::commitScaleChange):
        (WebCore::LegacyTileCache::layoutTilesNow):
        (WebCore::LegacyTileCache::layoutTilesNowForRect):
        (WebCore::LegacyTileCache::removeAllNonVisibleTiles):
        (WebCore::LegacyTileCache::removeAllTiles):
        (WebCore::LegacyTileCache::removeForegroundTiles):
        (WebCore::LegacyTileCache::setContentReplacementImage):
        (WebCore::LegacyTileCache::contentReplacementImage const):
        (WebCore::LegacyTileCache::tileCreationTimerFired):
        (WebCore::LegacyTileCache::setNeedsDisplayInRect):
        (WebCore::LegacyTileCache::updateTilingMode):
        (WebCore::LegacyTileCache::setTilingMode):
        (WebCore::LegacyTileCache::doPendingRepaints):
        (WebCore::LegacyTileCache::flushSavedDisplayRects):
        (WebCore::LegacyTileCache::prepareToDraw):
        * platform/ios/LegacyTileLayerPool.mm:
        (WebCore::LegacyTileLayerPool::addLayer):
        (WebCore::LegacyTileLayerPool::takeLayerWithSize):
        (WebCore::LegacyTileLayerPool::setCapacity):
        (WebCore::LegacyTileLayerPool::prune):
        (WebCore::LegacyTileLayerPool::drain):
        * platform/ios/wak/WAKWindow.mm:
        (-[WAKWindow setExposedScrollViewRect:]):
        (-[WAKWindow exposedScrollViewRect]):
        * platform/ios/wak/WebCoreThread.mm:
        (RunWebThread):
        (StartWebThread):
        * platform/mediastream/gstreamer/RealtimeOutgoingAudioSourceLibWebRTC.cpp:
        (WebCore::RealtimeOutgoingAudioSourceLibWebRTC::audioSamplesAvailable):
        (WebCore::RealtimeOutgoingAudioSourceLibWebRTC::pullAudioData):
        * platform/network/cf/FormDataStreamCFNet.cpp:
        (WebCore::openNextStream):
        (WebCore::formFinalize):
        (WebCore::formClose):
        * platform/network/curl/CurlRequest.cpp:
        (WebCore::CurlRequest::setRequestPaused):
        (WebCore::CurlRequest::setCallbackPaused):
        (WebCore::CurlRequest::pausedStatusChanged):
        (WebCore::CurlRequest::enableDownloadToFile):
        (WebCore::CurlRequest::getDownloadedFilePath):
        (WebCore::CurlRequest::writeDataToDownloadFileIfEnabled):
        (WebCore::CurlRequest::closeDownloadFile):
        (WebCore::CurlRequest::cleanupDownloadFile):
        * platform/network/curl/CurlSSLHandle.cpp:
        (WebCore::CurlSSLHandle::allowAnyHTTPSCertificatesForHost):
        (WebCore::CurlSSLHandle::canIgnoreAnyHTTPSCertificatesForHost const):
        (WebCore::CurlSSLHandle::setClientCertificateInfo):
        (WebCore::CurlSSLHandle::getSSLClientCertificate const):
        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::close):
        (WebCore::SQLiteDatabase::maximumSize):
        (WebCore::SQLiteDatabase::setMaximumSize):
        (WebCore::SQLiteDatabase::pageSize):
        (WebCore::SQLiteDatabase::freeSpaceSize):
        (WebCore::SQLiteDatabase::totalSize):
        (WebCore::SQLiteDatabase::runIncrementalVacuumCommand):
        (WebCore::SQLiteDatabase::interrupt):
        (WebCore::SQLiteDatabase::setAuthorizer):
        (WebCore::constructAndPrepareStatement):
        * platform/sql/SQLiteStatement.cpp:
        (WebCore::SQLiteStatement::step):

2021-05-21  Chris Dumez  <cdumez@apple.com>

        Fix locking issue for AudioDestinationCocoa::m_isPlaying
        https://bugs.webkit.org/show_bug.cgi?id=226129

        Reviewed by Jer Noble.

        Fix locking issue for AudioDestinationCocoa::m_isPlaying. The AudioDestinationCocoa::isPlaying()
        getter fails to lock. isPlaying() may get called from the main thread and the audio rendering
        thread. Since we cannot grab a lock on the rendering thread, use std::atomic<bool> type for
        m_isPlaying.

        * platform/audio/cocoa/AudioDestinationCocoa.cpp:
        (WebCore::AudioDestinationCocoa::setIsPlaying):
        (WebCore::AudioDestinationCocoa::renderOnRenderingTheadIfPlaying):
        * platform/audio/cocoa/AudioDestinationCocoa.h:

2021-05-21  Chris Dumez  <cdumez@apple.com>

        Stop using holdLock() in WebCore as it is not compatible with Clang thread safety analysis
        https://bugs.webkit.org/show_bug.cgi?id=226119

        Reviewed by Sam Weinig.

        Stop using holdLock() in WebCore as it is not compatible with Clang thread safety analysis
        (WTF::CheckedLock). Use the Locker constructor directly instead.

        This is a step towards getting rid of holdLock() entirely.

        * Modules/speech/SpeechRecognitionCaptureSourceImpl.cpp:
        (WebCore::SpeechRecognitionCaptureSourceImpl::audioSamplesAvailable):
        * Modules/webaudio/AudioBuffer.cpp:
        (WebCore::AudioBuffer::releaseMemory):
        (WebCore::AudioBuffer::memoryCost const):
        * Modules/webaudio/AudioBufferSourceNode.cpp:
        (WebCore::AudioBufferSourceNode::setBuffer):
        (WebCore::AudioBufferSourceNode::startPlaying):
        * Modules/webaudio/AudioWorkletNode.cpp:
        (WebCore::AudioWorkletNode::~AudioWorkletNode):
        (WebCore::AudioWorkletNode::initializeAudioParameters):
        (WebCore::AudioWorkletNode::setProcessor):
        * Modules/webaudio/ConvolverNode.cpp:
        (WebCore::ConvolverNode::setBuffer):
        * Modules/webaudio/MediaElementAudioSourceNode.cpp:
        (WebCore::MediaElementAudioSourceNode::setFormat):
        * Modules/webaudio/MediaStreamAudioSourceNode.cpp:
        (WebCore::MediaStreamAudioSourceNode::setFormat):
        * Modules/webaudio/OscillatorNode.cpp:
        (WebCore::OscillatorNode::setPeriodicWave):
        * Modules/webaudio/PannerNode.cpp:
        (WebCore::PannerNode::setPanningModel):
        (WebCore::PannerNode::setPosition):
        (WebCore::PannerNode::setOrientation):
        (WebCore::PannerNode::setDistanceModel):
        (WebCore::PannerNode::setRefDistance):
        (WebCore::PannerNode::setMaxDistance):
        (WebCore::PannerNode::setRolloffFactor):
        (WebCore::PannerNode::setConeOuterGain):
        (WebCore::PannerNode::setConeOuterAngle):
        (WebCore::PannerNode::setConeInnerAngle):
        * Modules/webaudio/ScriptProcessorNode.cpp:
        (WebCore::ScriptProcessorNode::uninitialize):
        (WebCore::ScriptProcessorNode::process):
        * Modules/webaudio/WaveShaperProcessor.cpp:
        (WebCore::WaveShaperProcessor::setCurve):
        (WebCore::WaveShaperProcessor::setOversample):
        * Modules/webdatabase/Database.cpp:
        (WebCore::Database::performOpenAndVerify):
        * Modules/webdatabase/DatabaseManager.cpp:
        (WebCore::DatabaseManager::addProposedDatabase):
        (WebCore::DatabaseManager::removeProposedDatabase):
        (WebCore::DatabaseManager::fullPathForDatabase):
        (WebCore::DatabaseManager::detailsForNameAndOrigin):
        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::scheduleNotifyDatabaseChanged):
        (WebCore::DatabaseTracker::notifyDatabasesChanged):
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::visitChildrenImpl):
        * bindings/js/JSPaintWorkletGlobalScopeCustom.cpp:
        (WebCore::JSPaintWorkletGlobalScope::visitAdditionalChildren):
        * css/CSSPaintImageValue.cpp:
        (WebCore::CSSPaintImageValue::image):
        * css/DOMCSSPaintWorklet.cpp:
        (WebCore::PaintWorklet::addModule):
        * dom/EventListenerMap.cpp:
        (WebCore::EventListenerMap::clear):
        (WebCore::EventListenerMap::replace):
        (WebCore::EventListenerMap::add):
        (WebCore::EventListenerMap::remove):
        (WebCore::EventListenerMap::removeFirstEventListenerCreatedFromMarkup):
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::visitJSEventListeners):
        * dom/Node.cpp:
        (WebCore::Node::ensureEventTargetData):
        (WebCore::Node::clearEventTargetData):
        * html/CanvasBase.cpp:
        (WebCore::CanvasBase::memoryCost const):
        (WebCore::CanvasBase::externalMemoryCost const):
        (WebCore::CanvasBase::setImageBuffer const):
        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::invalidateNamedElementCache const):
        * html/HTMLCollection.h:
        (WebCore::HTMLCollection::memoryCost const):
        (WebCore::HTMLCollection::setNamedItemCache const):
        * html/OffscreenCanvas.cpp:
        (WebCore::OffscreenCanvas::pushBufferToPlaceholder):
        (WebCore::OffscreenCanvas::commitToPlaceholderCanvas):
        * html/canvas/OESVertexArrayObject.cpp:
        (WebCore::OESVertexArrayObject::deleteVertexArrayOES):
        (WebCore::OESVertexArrayObject::bindVertexArrayOES):
        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::bindFramebuffer):
        (WebCore::WebGL2RenderingContext::deleteFramebuffer):
        (WebCore::WebGL2RenderingContext::vertexAttribIPointer):
        (WebCore::WebGL2RenderingContext::deleteQuery):
        (WebCore::WebGL2RenderingContext::beginQuery):
        (WebCore::WebGL2RenderingContext::endQuery):
        (WebCore::WebGL2RenderingContext::deleteSampler):
        (WebCore::WebGL2RenderingContext::bindSampler):
        (WebCore::WebGL2RenderingContext::deleteSync):
        (WebCore::WebGL2RenderingContext::deleteTransformFeedback):
        (WebCore::WebGL2RenderingContext::bindTransformFeedback):
        (WebCore::WebGL2RenderingContext::beginTransformFeedback):
        (WebCore::WebGL2RenderingContext::setIndexedBufferBinding):
        (WebCore::WebGL2RenderingContext::deleteVertexArray):
        (WebCore::WebGL2RenderingContext::bindVertexArray):
        (WebCore::WebGL2RenderingContext::addMembersToOpaqueRoots):
        * html/canvas/WebGLContextGroup.cpp:
        (WebCore::WebGLContextGroup::detachAndRemoveAllObjects):
        * html/canvas/WebGLFramebuffer.cpp:
        (WebCore::WebGLFramebuffer::initializeAttachments):
        (WebCore::WebGLFramebuffer::setAttachmentInternal):
        * html/canvas/WebGLObject.cpp:
        (WebCore::WebGLObject::runDestructor):
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::attachShader):
        (WebCore::WebGLRenderingContextBase::bindBuffer):
        (WebCore::WebGLRenderingContextBase::bindFramebuffer):
        (WebCore::WebGLRenderingContextBase::bindRenderbuffer):
        (WebCore::WebGLRenderingContextBase::bindTexture):
        (WebCore::WebGLRenderingContextBase::deleteBuffer):
        (WebCore::WebGLRenderingContextBase::deleteFramebuffer):
        (WebCore::WebGLRenderingContextBase::deleteProgram):
        (WebCore::WebGLRenderingContextBase::deleteRenderbuffer):
        (WebCore::WebGLRenderingContextBase::deleteShader):
        (WebCore::WebGLRenderingContextBase::deleteTexture):
        (WebCore::WebGLRenderingContextBase::detachShader):
        (WebCore::WebGLRenderingContextBase::useProgram):
        (WebCore::WebGLRenderingContextBase::vertexAttribPointer):
        (WebCore::WebGLRenderingContextBase::detachAndRemoveAllObjects):
        (WebCore::WebGLRenderingContextBase::addMembersToOpaqueRoots):
        * platform/audio/ReverbConvolver.cpp:
        (WebCore::ReverbConvolver::~ReverbConvolver):
        * platform/audio/cocoa/AudioDestinationCocoa.cpp:
        (WebCore::AudioDestinationCocoa::start):
        (WebCore::AudioDestinationCocoa::stop):
        (WebCore::AudioDestinationCocoa::setIsPlaying):
        * platform/audio/gstreamer/AudioSourceProviderGStreamer.cpp:
        (WebCore::AudioSourceProviderGStreamer::handleSample):
        (WebCore::AudioSourceProviderGStreamer::clearAdapters):
        * platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:
        (webkitWebAudioSourceSetDispatchToRenderThreadFunction):
        * platform/graphics/DisplayRefreshMonitor.cpp:
        (WebCore::DisplayRefreshMonitor::requestRefreshCallback):
        (WebCore::DisplayRefreshMonitor::displayLinkFired):
        (WebCore::DisplayRefreshMonitor::displayDidRefresh):
        * platform/graphics/FontCache.cpp:
        (WebCore::FontCache::cachedFontPlatformData):
        (WebCore::FontCache::fontForPlatformData):
        (WebCore::FontCache::purgeInactiveFontData):
        (WebCore::FontCache::inactiveFontCount):
        * platform/graphics/avfoundation/AudioSourceProviderAVFObjC.mm:
        (WebCore::AudioSourceProviderAVFObjC::destroyMixIfNeeded):
        (WebCore::AudioSourceProviderAVFObjC::createMixIfNeeded):
        (WebCore::AudioSourceProviderAVFObjC::prepareCallback):
        (WebCore::AudioSourceProviderAVFObjC::unprepareCallback):
        (WebCore::AudioSourceProviderAVFObjC::processCallback):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::destroyLayers):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::rootLayerBoundsDidChange):
        * platform/graphics/cg/ColorCG.cpp:
        (WebCore::cachedCGColor):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::hasFirstVideoSampleReachedSink const):
        (WebCore::MediaPlayerPrivateGStreamer::pushTextureToCompositor):
        (WebCore::MediaPlayerPrivateGStreamer::triggerRepaint):
        (WebCore::MediaPlayerPrivateGStreamer::flushCurrentBuffer):
        (WebCore::MediaPlayerPrivateGStreamer::paint):
        (WebCore::MediaPlayerPrivateGStreamer::copyVideoTextureToPlatformTexture):
        (WebCore::MediaPlayerPrivateGStreamer::waitForCDMAttachment):
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webKitWebSrcConstructed):
        (webKitWebSrcGetProperty):
        (webKitWebSrcSetContext):
        (webKitWebSrcCreate):
        (webKitWebSrcMakeRequest):
        (webKitWebSrcStop):
        (webKitWebSrcGetSize):
        (webKitWebSrcIsSeekable):
        (webKitWebSrcDoSeek):
        (webKitWebSrcQuery):
        (webKitWebSrcUnLock):
        (webKitWebSrcUnLockStop):
        (webKitWebSrcSetMediaPlayer):
        (webKitSrcPassedCORSAccessCheck):
        (CachedResourceStreamingClient::responseReceived):
        (CachedResourceStreamingClient::dataReceived):
        (CachedResourceStreamingClient::accessControlCheckFailed):
        (CachedResourceStreamingClient::loadFailed):
        (CachedResourceStreamingClient::loadFinished):
        (webKitSrcWouldTaintOrigin):
        * platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.cpp:
        (isCDMProxyAvailable):
        (attachCDMProxy):
        * platform/graphics/gstreamer/mse/MediaSourceTrackGStreamer.cpp:
        (WebCore::MediaSourceTrackGStreamer::isReadyForMoreSamples):
        (WebCore::MediaSourceTrackGStreamer::notifyWhenReadyForMoreSamples):
        (WebCore::MediaSourceTrackGStreamer::enqueueObject):
        (WebCore::MediaSourceTrackGStreamer::clearQueue):
        * platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamer.cpp:
        (webKitMediaSrcActivateMode):
        (webKitMediaSrcPadLinked):
        (webKitMediaSrcLoop):
        (webKitMediaSrcStreamFlush):
        * platform/graphics/mac/ColorMac.mm:
        (WebCore::nsColor):
        * platform/graphics/nicosia/NicosiaImageBufferPipe.cpp:
        (Nicosia::NicosiaImageBufferPipeSource::handle):
        * platform/ios/wak/WebCoreThread.mm:
        (HandleDelegateSource):
        (WebThreadAdoptAndRelease):
        (WebCoreObjCDeallocOnWebThreadImpl):
        (WebCoreObjCDeallocWithWebThreadLockImpl):
        (HandleWebThreadReleaseSource):
        * platform/ios/wak/WebCoreThreadRun.cpp:
        * platform/mac/PublicSuffixMac.mm:
        (WebCore::topPrivatelyControlledDomain):
        * platform/mediarecorder/MediaRecorderPrivateMock.cpp:
        (WebCore::MediaRecorderPrivateMock::videoSampleAvailable):
        (WebCore::MediaRecorderPrivateMock::audioSamplesAvailable):
        (WebCore::MediaRecorderPrivateMock::fetchData):
        * platform/mediarecorder/cocoa/MediaRecorderPrivateWriterCocoa.mm:
        (WebCore::MediaRecorderPrivateWriter::appendData):
        (WebCore::MediaRecorderPrivateWriter::takeData):
        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::addAudioSampleObserver):
        (WebCore::RealtimeMediaSource::removeAudioSampleObserver):
        (WebCore::RealtimeMediaSource::addVideoSampleObserver):
        (WebCore::RealtimeMediaSource::removeVideoSampleObserver):
        (WebCore::RealtimeMediaSource::videoSampleAvailable):
        (WebCore::RealtimeMediaSource::audioSamplesAvailable):
        * platform/mediastream/RealtimeOutgoingAudioSource.cpp:
        (WebCore::RealtimeOutgoingAudioSource::~RealtimeOutgoingAudioSource):
        (WebCore::RealtimeOutgoingAudioSource::AddSink):
        (WebCore::RealtimeOutgoingAudioSource::RemoveSink):
        (WebCore::RealtimeOutgoingAudioSource::sendAudioFrames):
        * platform/mediastream/RealtimeOutgoingVideoSource.cpp:
        (WebCore::RealtimeOutgoingVideoSource::~RealtimeOutgoingVideoSource):
        (WebCore::RealtimeOutgoingVideoSource::AddOrUpdateSink):
        (WebCore::RealtimeOutgoingVideoSource::RemoveSink):
        (WebCore::RealtimeOutgoingVideoSource::sendFrame):
        * platform/mediastream/mac/BaseAudioSharedUnit.cpp:
        (WebCore::BaseAudioSharedUnit::addClient):
        (WebCore::BaseAudioSharedUnit::removeClient):
        (WebCore::BaseAudioSharedUnit::forEachClient const):
        (WebCore::BaseAudioSharedUnit::clearClients):
        (WebCore::BaseAudioSharedUnit::audioSamplesAvailable):
        * platform/mediastream/mac/WebAudioSourceProviderCocoa.mm:
        (WebCore::WebAudioSourceProviderCocoa::prepare):
        * platform/network/cf/LoaderRunLoopCF.cpp:
        (WebCore::loaderRunLoop):
        * platform/network/curl/CurlRequest.cpp:
        (WebCore::CurlRequest::cancel):
        (WebCore::CurlRequest::isCancelled):
        (WebCore::CurlRequest::isCompletedOrCancelled):
        (WebCore::CurlRequest::didCompleteTransfer):
        * platform/network/curl/CurlRequestScheduler.cpp:
        (WebCore::CurlRequestScheduler::callOnWorkerThread):
        (WebCore::CurlRequestScheduler::startThreadIfNeeded):
        (WebCore::CurlRequestScheduler::stopThreadIfNoMoreJobRunning):
        (WebCore::CurlRequestScheduler::stopThread):
        (WebCore::CurlRequestScheduler::executeTasks):
        (WebCore::CurlRequestScheduler::workerThread):
        (WebCore::CurlRequestScheduler::startTransfer):
        (WebCore::CurlRequestScheduler::finalizeTransfer):
        * platform/network/curl/CurlStreamScheduler.cpp:
        (WebCore::CurlStreamScheduler::callOnWorkerThread):
        (WebCore::CurlStreamScheduler::startThreadIfNeeded):
        (WebCore::CurlStreamScheduler::stopThreadIfNoMoreJobRunning):
        (WebCore::CurlStreamScheduler::executeTasks):
        * style/StyleBuilder.cpp:
        (WebCore::Style::Builder::applyProperty):
        * workers/WorkerOrWorkletThread.cpp:
        (WebCore::WorkerOrWorkletThread::workerOrWorkletThread):
        (WebCore::WorkerOrWorkletThread::start):
        * worklets/PaintWorkletGlobalScope.cpp:
        (WebCore::PaintWorkletGlobalScope::registerPaint):
        * worklets/PaintWorkletGlobalScope.h:

2021-05-21  Sam Weinig  <weinig@apple.com>

        All Netflix playback fails after r277740
        https://bugs.webkit.org/show_bug.cgi?id=226120
        <rdar://problem/78333782>

        Reviewed by Eric Carlson.

        * platform/graphics/avfoundation/objc/CDMInstanceFairPlayStreamingAVFObjC.mm:
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::updateLicense):
        Add missing !.

2021-05-21  Chris Dumez  <cdumez@apple.com>

        Use CheckedCondition in more places
        https://bugs.webkit.org/show_bug.cgi?id=226113

        Reviewed by Darin Adler.

        Use CheckedCondition in more places to benefit from Clang Thread Safety
        Analysis.

        * Modules/webdatabase/DatabaseTask.cpp:
        (WebCore::DatabaseTaskSynchronizer::waitForTaskCompletion):
        (WebCore::DatabaseTaskSynchronizer::taskCompleted):
        * Modules/webdatabase/DatabaseTask.h:
        (WebCore::DatabaseTaskSynchronizer::WTF_GUARDED_BY_LOCK):
        * platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:
        (webKitWebAudioSrcRenderAndPushFrames):
        (webKitWebAudioSrcRenderIteration):
        (webKitWebAudioSrcChangeState):
        * platform/graphics/gstreamer/ImageDecoderGStreamer.cpp:
        (WebCore::ImageDecoderGStreamer::setHasEOS):
        (WebCore::ImageDecoderGStreamer::notifySample):
        (WebCore::ImageDecoderGStreamer::InnerDecoder::handleMessage):
        (WebCore::ImageDecoderGStreamer::InnerDecoder::preparePipeline):
        (WebCore::ImageDecoderGStreamer::pushEncodedData):
        * platform/graphics/gstreamer/ImageDecoderGStreamer.h:
        * platform/graphics/gstreamer/MainThreadNotifier.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::~MediaPlayerPrivateGStreamer):
        (WebCore::MediaPlayerPrivateGStreamer::pushTextureToCompositor):
        (WebCore::MediaPlayerPrivateGStreamer::repaint):
        (WebCore::MediaPlayerPrivateGStreamer::triggerRepaint):
        (WebCore::MediaPlayerPrivateGStreamer::cancelRepaint):
        (WebCore::MediaPlayerPrivateGStreamer::pushNextHolePunchBuffer):
        (WebCore::MediaPlayerPrivateGStreamer::waitForCDMAttachment):
        (WebCore::MediaPlayerPrivateGStreamer::cdmInstanceAttached):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        (WebCore::MediaPlayerPrivateGStreamer::WTF_GUARDED_BY_LOCK):
        * platform/graphics/holepunch/MediaPlayerPrivateHolePunch.cpp:
        (WebCore::MediaPlayerPrivateHolePunch::pushNextHolePunchBuffer):
        * platform/graphics/nicosia/NicosiaImageBufferPipe.cpp:
        (Nicosia::NicosiaImageBufferPipeSource::handle):
        * platform/graphics/nicosia/texmap/NicosiaGCGLLayer.cpp:
        (Nicosia::GCGLLayer::swapBuffersIfNeeded):
        * platform/graphics/texmap/TextureMapperPlatformLayerProxy.cpp:
        (WebCore::TextureMapperPlatformLayerProxy::~TextureMapperPlatformLayerProxy):
        (WebCore::TextureMapperPlatformLayerProxy::activateOnCompositingThread):
        (WebCore::TextureMapperPlatformLayerProxy::invalidate):
        (WebCore::TextureMapperPlatformLayerProxy::releaseUnusedBuffersTimerFired):
        (WebCore::TextureMapperPlatformLayerProxy::swapBuffer):
        (WebCore::TextureMapperPlatformLayerProxy::dropCurrentBufferWhilePreservingTexture):
        (WebCore::TextureMapperPlatformLayerProxy::scheduleUpdateOnCompositorThread):
        (WebCore::TextureMapperPlatformLayerProxy::compositorThreadUpdateTimerFired):
        * platform/graphics/texmap/TextureMapperPlatformLayerProxy.h:
        (WebCore::TextureMapperPlatformLayerProxy::WTF_RETURNS_LOCK):
        (WebCore::TextureMapperPlatformLayerProxy::WTF_GUARDED_BY_LOCK):

2021-05-21  Diego Pino Garcia  <dpino@igalia.com>

        Set CanvasImageSmoothing.imageSmoothingQuality value to 'low' as default
        https://bugs.webkit.org/show_bug.cgi?id=225952

        Reviewed by Sam Weinig.

        Covered by existing tests:
          - inspector/canvas/recording-2d-frameCount.html
          - inspector/canvas/recording-2d-full.html
          - inspector/canvas/recording-2d-memoryLimit.html
          - inspector/canvas/recording-2d-saves.html
          - inspector/canvas/recording-html-2d.html

        * html/canvas/CanvasRenderingContext2DBase.cpp:

2021-05-21  Chris Dumez  <cdumez@apple.com>

        Adopt CheckedLock in ScrollingTree and fix threading bug
        https://bugs.webkit.org/show_bug.cgi?id=226109

        Reviewed by Darin Adler.

        Adopt CheckedLock in ScrollingTree and fix threading bug found by Clang Thread Safety
        Analysis. In particular, ThreadedScrollingTree::willStartRenderingUpdate() was failing
        to grab the lock before updating m_state. m_state definitely get modified from several
        threads so synchronization is important.

        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::handleWheelEvent):
        (WebCore::ScrollingTree::traverseScrollingTree):
        (WebCore::ScrollingTree::commitTreeState):
        (WebCore::ScrollingTree::applyLayerPositions):
        (WebCore::ScrollingTree::applyLayerPositionsInternal):
        (WebCore::ScrollingTree::scrollBySimulatingWheelEventForTesting):
        * page/scrolling/ScrollingTree.h:
        (WebCore::ScrollingTree::WTF_RETURNS_LOCK):
        (WebCore::ScrollingTree::WTF_REQUIRES_LOCK):
        * page/scrolling/ThreadedScrollingTree.cpp:
        (WebCore::ThreadedScrollingTree::ThreadedScrollingTree):
        (WebCore::ThreadedScrollingTree::handleWheelEventAfterMainThread):
        (WebCore::ThreadedScrollingTree::wheelEventWasProcessedByMainThread):
        (WebCore::ThreadedScrollingTree::willSendEventToMainThread):
        (WebCore::ThreadedScrollingTree::waitForEventToBeProcessedByMainThread):
        (WebCore::ThreadedScrollingTree::invalidate):
        (WebCore::ThreadedScrollingTree::willStartRenderingUpdate):
        (WebCore::ThreadedScrollingTree::waitForRenderingUpdateCompletionOrTimeout):
        (WebCore::ThreadedScrollingTree::didCompleteRenderingUpdate):
        (WebCore::ThreadedScrollingTree::scheduleDelayedRenderingUpdateDetectionTimer):
        (WebCore::ThreadedScrollingTree::delayedRenderingUpdateDetectionTimerFired):
        (WebCore::ThreadedScrollingTree::displayDidRefreshOnScrollingThread):
        * page/scrolling/ThreadedScrollingTree.h:
        (WebCore::ThreadedScrollingTree::WTF_RETURNS_LOCK):
        (WebCore::ThreadedScrollingTree::WTF_GUARDED_BY_LOCK):
        * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.mm:
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::createTimer):

2021-05-21  Chris Dumez  <cdumez@apple.com>

        Adopt CheckedLock in AudioMediaStreamTrackRendererUnit
        https://bugs.webkit.org/show_bug.cgi?id=226095

        Reviewed by Eric Carlson.

        Adopt CheckedLock in AudioMediaStreamTrackRendererUnit to benefit from Clang Thread Safety
        Analysis. Also rename variables for clarity and fixes a bug where we failed to grab the
        lock before checking m_shouldUpdateRenderSources on the render thread (even though the
        variable gets updated on the main thread).

        * platform/mediastream/cocoa/AudioMediaStreamTrackRendererUnit.cpp:
        (WebCore::AudioMediaStreamTrackRendererUnit::addSource):
        (WebCore::AudioMediaStreamTrackRendererUnit::removeSource):
        (WebCore::AudioMediaStreamTrackRendererUnit::updateRenderSourcesIfNecessary):
        (WebCore::AudioMediaStreamTrackRendererUnit::render):
        * platform/mediastream/cocoa/AudioMediaStreamTrackRendererUnit.h:
        (WebCore::AudioMediaStreamTrackRendererUnit::WTF_GUARDED_BY_LOCK):
        (): Deleted.

2021-05-21  Chris Dumez  <cdumez@apple.com>

        Adopt CheckedLock / CheckedCondition in CDMProxy
        https://bugs.webkit.org/show_bug.cgi?id=226103

        Reviewed by Darin Adler.

        Adopt CheckedLock / CheckedCondition in CDMProxy to benefit from Clang Thread Safety
        Analysis.

        * platform/encryptedmedia/CDMProxy.cpp:
        (WebCore::CDMProxy::updateKeyStore):
        (WebCore::CDMProxy::keyHandle const):
        (WebCore::CDMProxy::tryWaitForKeyHandle const):
        (WebCore::CDMProxy::keyAvailable const):
        * platform/encryptedmedia/CDMProxy.h:

2021-05-21  Peng Liu  <peng.liu6@apple.com>

        Video player enters a bad state after trying to enter picture-in-picture on YouTube.com videos
        https://bugs.webkit.org/show_bug.cgi?id=226042

        Reviewed by Daniel Bates.

        The quirk `shouldDisableEndFullscreenEventWhenEnteringPictureInPictureFromFull` was
        always true. This patch fixes that.

        * page/Quirks.cpp:
        (WebCore::Quirks::shouldDisableEndFullscreenEventWhenEnteringPictureInPictureFromFullscreenQuirk const):

2021-05-21  Chris Dumez  <cdumez@apple.com>

        Replace more static Locks with CheckedLocks in WTF / WebCore
        https://bugs.webkit.org/show_bug.cgi?id=226040

        Reviewed by Darin Adler.

        Replace more static Locks with CheckedLocks so that we can benefit from Clang Thread Safety Analysis.

        * Modules/indexeddb/server/IDBSerializationContext.cpp:
        (WebCore::IDBServer::IDBSerializationContext::getOrCreateForCurrentThread):
        (WebCore::IDBServer::IDBSerializationContext::~IDBSerializationContext):
        * Modules/mediastream/RTCDataChannel.cpp:
        (WebCore::WTF_REQUIRES_LOCK):
        (WebCore::RTCDataChannel::detach):
        (WebCore::RTCDataChannel::removeFromDataChannelLocalMapIfNeeded):
        (WebCore::RTCDataChannel::handlerFromIdentifier):
        * Modules/webdatabase/Database.cpp:
        (WebCore::WTF_REQUIRES_LOCK):
        (WebCore::Database::Database):
        (WebCore::Database::performOpenAndVerify):
        (WebCore::Database::closeDatabase):
        (WebCore::Database::getCachedVersion const):
        (WebCore::Database::setCachedVersion):
        * Modules/webgpu/WebGPUDevice.cpp:
        (WebCore::WebGPUDevice::instancesLock):
        (WebCore::WebGPUDevice::~WebGPUDevice):
        * Modules/webgpu/WebGPUDevice.h:
        * Modules/webgpu/WebGPUPipeline.cpp:
        (WebCore::WebGPUPipeline::instancesLock):
        (WebCore::WebGPUPipeline::WebGPUPipeline):
        (WebCore::WebGPUPipeline::~WebGPUPipeline):
        * Modules/webgpu/WebGPUPipeline.h:
        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::WebSocket):
        (WebCore::WebSocket::~WebSocket):
        (WebCore::WebSocket::allActiveWebSocketsLock):
        * Modules/websockets/WebSocket.h:
        * bridge/objc/WebScriptObject.mm:
        (WebCore::getJSWrapper):
        (WebCore::addJSWrapper):
        (WebCore::removeJSWrapper):
        (WebCore::removeJSWrapperIfRetainCountOne):
        * crypto/CryptoAlgorithmRegistry.cpp:
        (WebCore::CryptoAlgorithmRegistry::singleton):
        (WebCore::CryptoAlgorithmRegistry::identifier):
        (WebCore::CryptoAlgorithmRegistry::name):
        (WebCore::CryptoAlgorithmRegistry::create):
        (WebCore::CryptoAlgorithmRegistry::registerAlgorithm):
        * crypto/CryptoAlgorithmRegistry.h:
        * dom/MessagePort.cpp:
        (WebCore::MessagePort::deref const):
        (WebCore::MessagePort::isExistingMessagePortLocallyReachable):
        (WebCore::MessagePort::notifyMessageAvailable):
        (WebCore::MessagePort::MessagePort):
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::contextIdentifier const):
        (WebCore::ScriptExecutionContext::removeFromContextsMap):
        (WebCore::ScriptExecutionContext::~ScriptExecutionContext):
        (WebCore::ScriptExecutionContext::postTaskTo):
        * html/canvas/CanvasRenderingContext.cpp:
        (WebCore::CanvasRenderingContext::instancesLock):
        (WebCore::CanvasRenderingContext::CanvasRenderingContext):
        (WebCore::CanvasRenderingContext::~CanvasRenderingContext):
        * html/canvas/CanvasRenderingContext.h:
        * html/canvas/WebGLProgram.cpp:
        (WebCore::WebGLProgram::instancesLock):
        (WebCore::WebGLProgram::WebGLProgram):
        (WebCore::WebGLProgram::~WebGLProgram):
        * html/canvas/WebGLProgram.h:
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::~WebGLRenderingContextBase):
        * inspector/InspectorCanvas.cpp:
        (WebCore::InspectorCanvas::canvasElement const):
        (WebCore:: const):
        * inspector/agents/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::enable):
        * inspector/agents/InspectorNetworkAgent.cpp:
        (WebCore::InspectorNetworkAgent::enable):
        (WebCore::InspectorNetworkAgent::webSocketForRequestId):
        * inspector/agents/InspectorNetworkAgent.h:
        * inspector/agents/page/PageNetworkAgent.cpp:
        * inspector/agents/page/PageNetworkAgent.h:
        * inspector/agents/worker/WorkerNetworkAgent.cpp:
        * inspector/agents/worker/WorkerNetworkAgent.h:
        * page/SecurityPolicy.cpp:
        (WebCore::WTF_REQUIRES_LOCK):
        (WebCore::SecurityPolicy::isAccessAllowed):
        (WebCore::SecurityPolicy::addOriginAccessAllowlistEntry):
        (WebCore::SecurityPolicy::removeOriginAccessAllowlistEntry):
        (WebCore::SecurityPolicy::resetOriginAccessAllowlists):
        (WebCore::SecurityPolicy::allowAccessTo):
        * page/cocoa/ResourceUsageThreadCocoa.mm:
        (WebCore::ResourceUsageThread::platformCollectCPUData):
        * page/linux/ResourceUsageThreadLinux.cpp:
        (WebCore::ResourceUsageThread::platformCollectCPUData):
        * platform/GenericTaskQueue.cpp:
        (WebCore::TaskDispatcher<Timer>::postTask):
        (WebCore::TaskDispatcher<Timer>::sharedTimerFired):
        (WebCore::TaskDispatcher<Timer>::pendingDispatchers):
        (WebCore::TaskDispatcher<Timer>::dispatchOneTask):
        * platform/GenericTaskQueue.h:
        * platform/LegacySchemeRegistry.cpp:
        (WebCore::allBuiltinSchemes):
        (WebCore::WTF_REQUIRES_LOCK):
        (WebCore::LegacySchemeRegistry::registerURLSchemeAsLocal):
        (WebCore::LegacySchemeRegistry::removeURLSchemeRegisteredAsLocal):
        (WebCore::LegacySchemeRegistry::registerURLSchemeAsHandledBySchemeHandler):
        (WebCore::LegacySchemeRegistry::schemeIsHandledBySchemeHandler):
        (WebCore::LegacySchemeRegistry::shouldTreatURLSchemeAsLocal):
        (WebCore::LegacySchemeRegistry::registerURLSchemeAsNoAccess):
        (WebCore::LegacySchemeRegistry::shouldTreatURLSchemeAsNoAccess):
        (WebCore::LegacySchemeRegistry::registerURLSchemeAsDisplayIsolated):
        (WebCore::LegacySchemeRegistry::shouldTreatURLSchemeAsDisplayIsolated):
        (WebCore::LegacySchemeRegistry::registerURLSchemeAsSecure):
        (WebCore::LegacySchemeRegistry::shouldTreatURLSchemeAsSecure):
        (WebCore::LegacySchemeRegistry::canDisplayOnlyIfCanRequest):
        (WebCore::LegacySchemeRegistry::registerAsCanDisplayOnlyIfCanRequest):
        (WebCore::LegacySchemeRegistry::registerURLSchemeAsBypassingContentSecurityPolicy):
        (WebCore::LegacySchemeRegistry::removeURLSchemeRegisteredAsBypassingContentSecurityPolicy):
        (WebCore::LegacySchemeRegistry::schemeShouldBypassContentSecurityPolicy):
        (WebCore::LegacySchemeRegistry::registerURLSchemeAsCachePartitioned):
        (WebCore::LegacySchemeRegistry::shouldPartitionCacheForURLScheme):
        * platform/audio/mac/FFTFrameMac.cpp:
        (WebCore::WTF_REQUIRES_LOCK):
        (WebCore::FFTFrame::fftSetupForSize):
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::WTF_REQUIRES_LOCK):
        (WebCore::installedMediaEngines):
        (WebCore::MediaPlayer::resetMediaEngines):
        * platform/ios/QuickLook.mm:
        (WebCore::WTF_REQUIRES_LOCK):
        (WebCore::removeQLPreviewConverterForURL):
        (WebCore::addQLPreviewConverterWithFileForURL):
        * platform/ios/WebSQLiteDatabaseTrackerClient.mm:
        (WTF_REQUIRES_LOCK):
        (+[WebDatabaseTransactionBackgroundTaskController startBackgroundTask]):
        (+[WebDatabaseTransactionBackgroundTaskController endBackgroundTask]):
        * platform/network/mac/UTIUtilities.mm:
        (WebCore::WTF_REQUIRES_LOCK):
        (WebCore::UTIFromMIMEType):
        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::WTF_GUARDED_BY_LOCK):
        (WebCore::SQLiteDatabase::setIsDatabaseOpeningForbidden):
        (WebCore::SQLiteDatabase::open):
        * platform/sql/SQLiteDatabaseTracker.cpp:
        (WebCore::SQLiteDatabaseTracker::WTF_GUARDED_BY_LOCK):
        (WebCore::SQLiteDatabaseTracker::setClient):
        (WebCore::SQLiteDatabaseTracker::incrementTransactionInProgressCount):
        (WebCore::SQLiteDatabaseTracker::decrementTransactionInProgressCount):
        (WebCore::SQLiteDatabaseTracker::hasTransactionInProgress):
        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::WTF_REQUIRES_LOCK):
        (WebCore::newTextCodec):
        (WebCore::atomCanonicalTextEncodingName):
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WTF_REQUIRES_LOCK):
        (WebCore::WorkerGlobalScope::WorkerGlobalScope):
        (WebCore::WorkerGlobalScope::~WorkerGlobalScope):
        (WebCore::WorkerGlobalScope::releaseMemoryInWorkers):
        * workers/WorkerOrWorkletThread.cpp:
        (WebCore::WorkerOrWorkletThread::workerOrWorkletThreadsLock):
        (WebCore::WorkerOrWorkletThread::WorkerOrWorkletThread):
        (WebCore::WorkerOrWorkletThread::~WorkerOrWorkletThread):
        (WebCore::WorkerOrWorkletThread::releaseFastMallocFreeMemoryInAllThreads):
        * workers/WorkerOrWorkletThread.h:

2021-05-21  Fujii Hironori  <Hironori.Fujii@sony.com>

        ASSERTION FAILED: m_imageBufferResult->colorSpace() == m_resultColorSpace in FilterEffect::copyPremultipliedResult
        https://bugs.webkit.org/show_bug.cgi?id=225907

        Reviewed by Said Abou-Hallawa.

        FilterEffect::copyPremultipliedResult has the assertion ensuring
        m_imageBufferResult->colorSpace() matches m_resultColorSpace.
        However, it happened to fail in !USE(CG) ports.

        FilterEffect::transformResultColorSpace does nothing if USE(CG),
        but it calls ImageBuffer::transformColorSpace otherwise.

        ImageBuffer::colorSpace() and ImageBufferBackend::colorSpace()
        returned the old color space after ImageBuffer::transformColorSpace.
        They should return the new color space.

        After fixing the above problem, an assertion in
        WebCore::convertImagePixels was going to fail. It asserts no color
        space conversion happens.

        FEColorMatrix, FEDropShadow and
        ImageBufferBackend::convertToLuminanceMask were explicitly
        specifying DestinationColorSpace::SRGB to getPixelBuffer. They
        shouldn't convert the color space.

        * platform/graphics/ConcreteImageBuffer.h:
        * platform/graphics/ImageBufferBackend.cpp:
        (WebCore::ImageBufferBackend::convertToLuminanceMask):
        * platform/graphics/cairo/ImageBufferCairoBackend.cpp:
        (WebCore::ImageBufferCairoBackend::transformColorSpace):
        * platform/graphics/filters/FEColorMatrix.cpp:
        (WebCore::FEColorMatrix::platformApplySoftware):
        * platform/graphics/filters/FEDropShadow.cpp:
        (WebCore::FEDropShadow::platformApplySoftware):

2021-05-21  Eric Carlson  <eric.carlson@apple.com>

        [Cocoa] Update AudioSession buffer size handling
        https://bugs.webkit.org/show_bug.cgi?id=225927
        rdar://76920375

        Reviewed by Jer Noble.

        Previously we only set the audio session buffer size when there was an active
        MediaSession. This meant that when no audio was being played or captured, the buffer
        size would be left at whatever size was appropriate for the last MediaSession
        stopped. This was especially bad when the last MediaSession played WebAudio
        or captured audio because those require a smaller buffer size than the default,
        and was made even worse when using the GPU process because it may live for much
        longer than the last web process that played audio. Fix this by using the low power
        buffer size when playing audio or when there is no MediaSession at all.
        
        Add AudioBufferSize API test.

        * Modules/webaudio/AudioContext.h:
        Make mediaType() return `None` if the context is suspended or stopped so the media
        session manager won't set the buffer size for WebAudio.

        * platform/audio/cocoa/MediaSessionManagerCocoa.h:
        * platform/audio/cocoa/MediaSessionManagerCocoa.mm:
        (WebCore::MediaSessionManagerCocoa::updateSessionState): Always use "low power"
        buffer size when there is no WebAudio or audio capture.
        (WebCore::MediaSessionManagerCocoa::addSession): Cache supported hardware buffer sizes.
        (WebCore::MediaSessionManagerCocoa::audioOutputDeviceChanged): Update cached buffer
        sizes.

        * testing/Internals.cpp:
        (WebCore::Internals::currentAudioBufferSize const): Expose current audio session buffer
        size for testing.
        * testing/Internals.h:
        * testing/Internals.idl:

2021-05-21  Chris Dumez  <cdumez@apple.com>

        Use CheckedLock more in cases where we try-lock
        https://bugs.webkit.org/show_bug.cgi?id=226056

        Reviewed by Alex Christensen.

        Use CheckedLock more in cases where we try-lock to benefit from Clang
        Thread Safety Analysis.

        * Modules/webaudio/AudioParamTimeline.cpp:
        (WebCore::AudioParamTimeline::setValueAtTime):
        (WebCore::AudioParamTimeline::linearRampToValueAtTime):
        (WebCore::AudioParamTimeline::exponentialRampToValueAtTime):
        (WebCore::AudioParamTimeline::setTargetAtTime):
        (WebCore::AudioParamTimeline::setValueCurveAtTime):
        (WebCore::AudioParamTimeline::cancelScheduledValues):
        (WebCore::AudioParamTimeline::cancelAndHoldAtTime):
        (WebCore::AudioParamTimeline::valueForContextTime):
        (WebCore::AudioParamTimeline::valuesForFrameRange):
        (WebCore::AudioParamTimeline::hasValues const):
        * Modules/webaudio/AudioParamTimeline.h:
        * platform/audio/AudioDestination.h:
        (WebCore::AudioDestination::WTF_GUARDED_BY_LOCK):
        (WebCore::AudioDestination::AudioDestination):
        (WebCore::AudioDestination::clearCallback):
        (WebCore::AudioDestination::callRenderCallback):
        * platform/mediastream/cocoa/AudioMediaStreamTrackRendererUnit.cpp:
        (WebCore::AudioMediaStreamTrackRendererUnit::addSource):
        (WebCore::AudioMediaStreamTrackRendererUnit::removeSource):
        (WebCore::AudioMediaStreamTrackRendererUnit::render):
        * platform/mediastream/cocoa/AudioMediaStreamTrackRendererUnit.h:

2021-05-21  Per Arne  <pvollan@apple.com>

        Accessibility caption styles does not always reflect the selection
        https://bugs.webkit.org/show_bug.cgi?id=226084
        <rdar://75426845>

        Reviewed by Chris Fleizach.

        Export a soft linked constant.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/cf/MediaAccessibilitySoftLink.cpp:

2021-05-21  Rob Buis  <rbuis@igalia.com>

        grid track size should reject unitless length
        https://bugs.webkit.org/show_bug.cgi?id=189137

        Reviewed by Sergio Villar Senin.

        Reject unitless length's for grid track sizes in quirks mode.

        Behavior matches Chrome and Firefox.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeGridBreadth):

2021-05-21  Jer Noble  <jer.noble@apple.com>

        [Cocoa] Last few seconds of 'audio/webm; codecs=vorbis' appended to a SampleBuffer are not played
        https://bugs.webkit.org/show_bug.cgi?id=226069
        <rdar://78004793>

        Reviewed by Eric Carlson.

        Test: platform/mac-bigsur/media/media-source/media-vorbis-partial.html

        When parsing samples from a WebM file, the samples emitted by the parser can be very short in
        duration, which is ineffecient both in storage costs in our SampleMap, as well as in decoding
        CPU costs, as each sample must be fed into the decoder separately. So the parser will group
        together these small samples into a larger "meta sample" with a duration no shorter than 2s.

        However, at the end of a file, no more sample data will be appended, up to 2s of audio data
        will not be emitted from the parser.

        At the end of an append, always flush audio track data to ensure that all parsed samples are
        emitted, regardless of their collective duration.

        * platform/graphics/cocoa/SourceBufferParserWebM.cpp:
        (WebCore::SourceBufferParserWebM::appendData):

2021-05-21  Kate Cheney  <katherine_cheney@apple.com>

        FrameLoader::loadURL, FrameLoader::loadPostRequest not attributing requests as app bound
        https://bugs.webkit.org/show_bug.cgi?id=225923
        <rdar://problem/78160933>

        Reviewed by Alex Christensen.

        Tests: http/tests/in-app-browser-privacy/app-bound-attribution-load-url.html
               http/tests/in-app-browser-privacy/app-bound-attribution-ping-load.html
               http/tests/in-app-browser-privacy/app-bound-attribution-post-request.html

        Update FrameLoader::addExtraFieldsToRequest to add the app-bound
        value to a request, like for loadURL, loadPostRequest, or ping loads.
        Change the name to reflect this use case, which updates the request
        but does not add any extra header fields.

        Other cases are already covered in WebLoaderStrategy::loadResource.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadURL):
        (WebCore::FrameLoader::load):
        The main navigation uses the old document loader, so we don't want to
        set the app-bound value based on that. The request should have the
        correct value already from the UIProcess.
        (WebCore::FrameLoader::updateRequestAndAddExtraFields):
        (WebCore::FrameLoader::loadPostRequest):
        (WebCore::FrameLoader::loadResourceSynchronously):
        We can remove setting the app bound value here now that we set the value in
        addExtraFieldsToRequest.
        (WebCore::FrameLoader::loadDifferentDocumentItem):
        (WebCore::FrameLoader::addExtraFieldsToRequest): Deleted.
        * loader/FrameLoader.h:
        * loader/PingLoader.cpp:
        (WebCore::PingLoader::loadImage):
        (WebCore::PingLoader::sendPing):
        (WebCore::PingLoader::sendViolationReport):
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::init):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::load):

2021-05-21  Youenn Fablet  <youenn@apple.com>

        Add some logging for the 'FetchEvent is destroyed' case
        https://bugs.webkit.org/show_bug.cgi?id=226071

        Reviewed by Kate Cheney.

        * workers/service/FetchEvent.cpp:
        (WebCore::FetchEvent::~FetchEvent):

2021-05-21  Imanol Fernandez  <ifernandez@igalia.com>

        Fix use after move bug in WebXRSession
        https://bugs.webkit.org/show_bug.cgi?id=226074

        Reviewed by Sergio Villar Senin.

        This patch fixes FrameData usage after move in WebXRSession, a regression from bug 226074.
        It also removes an unneeded FrameData copy into WebXRFrame.

        Tested by WebXR WPT.

        * Modules/webxr/WebXRFrame.cpp: Use frameData from session instead of holding an extra copy
        (WebCore::WebXRFrame::populatePose):
        (WebCore::WebXRFrame::getViewerPose):
        * Modules/webxr/WebXRFrame.h: Remove setFrameData and m_data.
        (WebCore::WebXRFrame::setTime):
        * Modules/webxr/WebXRSession.cpp: Fix usage after move.
        (WebCore::WebXRSession::onFrame):
        * platform/xr/PlatformXR.h:
        (PlatformXR::Device::FrameData::copy const): Add missing members in the copy function.

2021-05-21  Eleni Maria Stea  <estea@igalia.com>

        Function paintRenderingResultsToCanvas expects a reference, not a
        pointer. Fixed the compile error.
        https://bugs.webkit.org/show_bug.cgi?id=226073

        Reviewed by Adrian Perez de Castro.

        * platform/graphics/nicosia/texmap/NicosiaGCGLLayer.cpp:
        (Nicosia::GCGLLayer::swapBuffersIfNeeded):

2021-05-21  Eleni Maria Stea  <estea@igalia.com>

        Fixed unreached end of function compiler warning in DataURLDecoder.
        https://bugs.webkit.org/show_bug.cgi?id=226079

        Reviewed by Adrian Perez de Castro.

        * platform/network/DataURLDecoder.cpp:
        (WebCore::DataURLDecoder::decodeBase64):

2021-05-21  Adrian Perez de Castro  <aperez@igalia.com>

        Non-unified build fixes, late-ish May 2021 edition
        https://bugs.webkit.org/show_bug.cgi?id=225990

        Unreviewed non-unified build fixes.

        No new tests needed.

        * Modules/indexeddb/server/MemoryObjectStore.cpp: Add missing pal/SessioID.h header.
        * Modules/webaudio/OfflineAudioContext.cpp: Add missing OfflineAudioCompletionEvent.h header.
        * Modules/webaudio/OfflineAudioContext.h: Add missing wtf/UniqueRef.h header.
        * Modules/websockets/WebSocketDeflateFramer.h: Add missing WebSocketExtensionProcessor.h
        header, remove wtf/text/WTFString.h as it is already included by the former.
        * bindings/js/JSDOMConvertEnumeration.h: Add missing JSDOMGlobalObject.h header.
        * contentextensions/DFANode.cpp: Add missing wtf/HashMap.h header.
        * html/HTMLFrameElement.cpp: Add missing HTMLParserIdioms.h header.
        * html/HTMLHRElement.cpp: Ditto.
        * html/HTMLIFrameElement.cpp: Ditto.
        * html/HTMLLIElement.cpp: Ditto.
        * html/HTMLMetaElement.cpp: Add missing HTMLParserIdioms.h, Frame.h, and FrameView.h headers.
        * html/HTMLOutputElement.cpp:
        (WebCore::HTMLOutputElement::parseAttribute): Add missing HTMLNames:: namespace prefix in
        usage of HTMLNames::forAttr.
        (WebCore::HTMLOutputElement::htmlFor): Ditto.
        * html/OffscreenCanvas.cpp: Add missing RuntimeEnabledFeatures.h header.
        * layout/formattingContexts/FormattingGeometry.cpp: Add missing FormattingQuirks.h header.
        * layout/formattingContexts/FormattingQuirks.cpp: Add missing FormattingGeometry.h header.
        * layout/formattingContexts/block/BlockFormattingGeometry.cpp: Add missing
        BlockFormattingContext.h, BlockFormattingQuirks.h, and BlockMarginCollapse.h headers;
        remove unneeded BlockFormattingState.h and FormattingContext.h headers.
        * layout/formattingContexts/block/BlockFormattingGeometry.h: Add missing forward
        declaration for BlockFormattingContext.
        * layout/formattingContexts/block/BlockFormattingQuirks.cpp: Add missing
        BlockFormattingContext.h and BlockMarginCollapse.h headers, remove unneeded
        BlockFormattingState.h header.
        * layout/formattingContexts/block/PrecomputedBlockMarginCollapse.cpp: Add missing
        BlockFormattingContext.h and BlockFormattingQuirks.h headers, remove unneeded
        BlockFormattingState.h header.
        * layout/formattingContexts/block/tablewrapper/TableWrapperBlockFormattingContext.cpp:
        Add missing BlockMarginCollapse.h header.
        * layout/formattingContexts/block/tablewrapper/TableWrapperBlockFormattingQuirks.cpp:
        Add missing TableWrapperBlockFormattingContext.h header.
        * layout/formattingContexts/block/tablewrapper/TableWrapperBlockFormattingQuirks.h:
        Add missing forward declaration for TableWrapperBlockFormattingContext.
        * layout/formattingContexts/flex/FlexFormattingGeometry.cpp: Add missing
        FlexFormattingContext.h header, remove unneeded FlexFormattingState.h and
        FormattingContext.h headers.
        * layout/formattingContexts/flex/FlexFormattingGeometry.h: Add missing forward declaration
        for FlexFormattingContext.
        * layout/formattingContexts/inline/InlineFormattingGeometry.cpp: Add missing
        InlineFormattingContext.h header, remove unneeded InlineLineBox.h header.
        * layout/formattingContexts/inline/InlineFormattingGeometry.h: Add missing InlineLineBox.h
        and InlineLineBuilder.h headers, add missing forward declaration for
        InlineFormattingContext.
        * layout/formattingContexts/inline/InlineFormattingQuirks.cpp: Add missing
        InlineFormattingContext.h header.
        * layout/formattingContexts/inline/InlineFormattingQuirks.h: Add missing InlineLineBox.h
        header, add missing forward declaration for InlineFormattingContext.
        * layout/formattingContexts/inline/InlineLineBuilder.cpp: Add missing
        InlineFormattingQuirks.h header.
        * layout/formattingContexts/table/TableFormattingGeometry.cpp: Add missing
        TableFormattingContext.h header, remove unneeded TableFormattingState.h header.
        * layout/formattingContexts/table/TableFormattingGeometry.h: Add missing TableGrid.h
        header, add missing forward declaration for TableFormattingContext.
        * layout/formattingContexts/table/TableFormattingQuirks.cpp: Add missing
        TableFormattingContext.h header.
        * layout/formattingContexts/table/TableFormattingQuirks.h: Add missing forward declaration
        for TableFormattingContext.
        * layout/formattingContexts/table/TableLayout.cpp: Add missing TableFormattingGeometry.h
        header.
        * page/FrameViewLayoutContext.cpp: Add missing StyleScope.h header.
        * page/ImageOverlayController.h: Add missing LayoutRect.h header.
        * page/PageConfiguration.h: Add missing wtf/HashSet.h header.
        * platform/network/soup/SoupNetworkSession.cpp: Add missing wtf/text/StringHash.h header.
        * style/StyleScopeRuleSets.cpp: Add missing StyleScope.h header.
        * style/Styleable.cpp: Ditto.
        * svg/SVGDocumentExtensions.cpp: Add missing SVGUseElement.h header.
        * svg/SVGDocumentExtensions.h: Add missing wtf/WeakHashSet.h header, add missing
        forward declaration for SVGUseElement.
        * workers/WorkerGlobalScope.cpp: Add missing FontCustomPlatformData.h header.

2021-05-21  Lauro Moura  <lmoura@igalia.com>

        [GLIB] fast/canvas/canvas-conic-gradient-angle.html is failing since added in r277547
        https://bugs.webkit.org/show_bug.cgi?id=225916

        Reviewed by Adrian Perez de Castro.

        Covered by existing tests.

        In some cases, like negative or large enough "from" angles, the angleStart
        variable would fall outside of the 0-360 range, making the center offset
        adjust to always fall in the last quadrant instead of the correct one.

        This commit normalizes the starting angle to fall between 0-360 when
        calculating the quadrant. While it makes the positive "from" angle test
        cases to pass, there are still some issues with negative "from", drawing
        slightly offset/slanted section borders, likely due to precision issues.

        * platform/graphics/cairo/GradientCairo.cpp:
        (WebCore::normalizeAngle): Added helper.
        (WebCore::addConicSector): Check quadrant with a normalized (0-360) angle.

2021-05-21  Alan Bujtas  <zalan@apple.com>

        [LFC][TFC][Quirks] Use box-sizing: border-box when computing cell height
        https://bugs.webkit.org/show_bug.cgi?id=226063

        Reviewed by Simon Fraser.

        Test: fast/layoutformattingcontext/table-simple-quirk-td-height-with-padding.html

        * layout/Verification.cpp:
        (WebCore::Layout::LayoutContext::verifyAndOutputMismatchingLayoutTree):
        * layout/formattingContexts/table/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::layoutCell):
        * layout/formattingContexts/table/TableFormattingGeometry.cpp:
        (WebCore::Layout::TableFormattingGeometry::cellBoxContentHeight const):
        (WebCore::Layout::TableFormattingGeometry::cellHeigh const): Deleted.
        * layout/formattingContexts/table/TableFormattingGeometry.h:

2021-05-21  Chris Lord  <clord@igalia.com>

        [GTK] REGRESSION: Broken scrolling on element.io with async scrolling
        https://bugs.webkit.org/show_bug.cgi?id=222265

        Reviewed by Carlos Garcia Campos.

        Fix transform order for layer clipping in TextureMapperLayer.

        No new tests.

        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::paintSelfAndChildren):

2021-05-21  Rob Buis  <rbuis@igalia.com>

        Detect invalid InlinePathData in FillInlinePath
        https://bugs.webkit.org/show_bug.cgi?id=225693

        Reviewed by Ryosuke Niwa.

        Detect invalid InlinePathData in FillInlinePath.

        * platform/graphics/displaylists/DisplayListItems.h:
        (WebCore::DisplayList::InlinePathDataStorage::InlinePathDataStorage):
        (WebCore::DisplayList::InlinePathDataStorage::isValid const):
        (WebCore::DisplayList::FillInlinePath::FillInlinePath):
        (WebCore::DisplayList::FillInlinePath::path const): Deleted.

2021-05-21  Sam Sneddon  <gsnedders@apple.com>

        Fix Python 3.6+ DeprecationWarnings about unknown escapes
        https://bugs.webkit.org/show_bug.cgi?id=226018

        Reviewed by Jonathan Bedard.

        Fix Python 3.6+ DeprecationWarnings about unknown escapes

        No new tests.

        * Modules/webgpu/WHLSL/WHLSLBuildStandardLibraryFunctionMap.py:

2021-05-21  Youenn Fablet  <youenn@apple.com>

        Implement a remote Internal Unit in GPUProcess for audio MediaStreamTrack rendering
        https://bugs.webkit.org/show_bug.cgi?id=225603
        <rdar://problem/78114391>

        Reviewed by Eric Carlson.

        Fixed the case where we were calling start even though a source was already being played.
        This is more consistent since we are doing those checks for stop.
        Reduce the code where we lock sources to the minimum.

        In case we want to lock the sources copy in audio thread and we fail, continue rendering audio instead of dropping everything.
        Add some main thread assertions in AudioMediaStreamTrackRendererUnit methods.

        Manually tested.

        * platform/mediastream/cocoa/AudioMediaStreamTrackRendererUnit.cpp:
        (WebCore::AudioMediaStreamTrackRendererUnit::addSource):
        (WebCore::AudioMediaStreamTrackRendererUnit::removeSource):
        (WebCore::AudioMediaStreamTrackRendererUnit::render):

2021-05-20  Chris Dumez  <cdumez@apple.com>

        Fix locking in PlatformCALayer
        https://bugs.webkit.org/show_bug.cgi?id=226062

        Reviewed by Tim Horton.

        Fix locking issue in PlatformCALayer found by Clang Thread Safety Analysis.
        We were locking before querying layerToPlatformLayerMap(), but failing to
        do so when adding or removing from layerToPlatformLayerMap().

        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:
        (WebCore::WTF_REQUIRES_LOCK):
        (WebCore::PlatformCALayer::platformCALayerForLayer):
        (WebCore::PlatformCALayerCocoa::commonInit):
        (WebCore::PlatformCALayerCocoa::~PlatformCALayerCocoa):
        (WebCore::layerToPlatformLayerMap): Deleted.

2021-05-20  Chris Dumez  <cdumez@apple.com>

        Add missing lock in AXIsolatedTree::treeForID()
        https://bugs.webkit.org/show_bug.cgi?id=226060
        <rdar://problem/78287227>

        Reviewed by Alex Christensen.

        Add missing lock in AXIsolatedTree::treeForID(). This was found via Clang Thread Safety
        Analysis. This was the only call site that was failing to grab the s_cacheLock before
        calling treeIDCache().

        * accessibility/isolatedtree/AXIsolatedTree.cpp:
        (WebCore::AXIsolatedTree::treeForID):
        (WebCore::AXIsolatedTree::create):
        (WebCore::AXIsolatedTree::removeTreeForPageID):
        (WebCore::AXIsolatedTree::treeForPageID):
        * accessibility/isolatedtree/AXIsolatedTree.h:

2021-05-20  Chris Lord  <clord@igalia.com>

        [WPE] Spatial navigation tests fail with async overflow scrolling enabled
        https://bugs.webkit.org/show_bug.cgi?id=225922

        Reviewed by Simon Fraser.

        Add absoluteClippedOverflowRectForSpatialNavigation for when the
        clipped overflow rect not taking into account composited scrolling is
        necessary.

        No new tests, covered by existing tests.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isOffScreen const):
        * page/SpatialNavigation.cpp:
        (WebCore::hasOffscreenRect):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::absoluteClippedOverflowRectForSpatialNavigation const):
        (WebCore::RenderObject::visibleRectContextForSpatialNavigation):

2021-05-20  Kate Cheney  <katherine_cheney@apple.com>

        Mark ServiceWorkerThreadProxy with a default app-bound value
        https://bugs.webkit.org/show_bug.cgi?id=223201
        <rdar://problem/77664416>

        Reviewed by Youenn Fablet.

        Service worker loads have their own document loader, so they don't
        always get properly marked as app-bound based on the main frame
        navigation. Prior fixes handled some fetch events, synthetic
        responses, and soft updates. But we need to set a default value when
        we install the service worker.

        We had to pick a best-effort heuristic to do this. If any client for
        the worker is app-bound, then all loads with that worker will be
        marked app-bound.

        * testing/ServiceWorkerInternals.cpp:
        (WebCore::ServiceWorkerInternals::lastNavigationWasAppBound):
        * testing/ServiceWorkerInternals.h:
        * testing/ServiceWorkerInternals.idl:
        * workers/WorkerRunLoop.h:
        To test this, I added a new API to ServiceWorkerInternals to get the
        worker's app bound value.

        * workers/service/ServiceWorkerClientData.cpp:
        (WebCore::ServiceWorkerClientData::isolatedCopy const):
        (WebCore::ServiceWorkerClientData::from):
        * workers/service/ServiceWorkerClientData.h:
        (WebCore::ServiceWorkerClientData::encode const):
        (WebCore::ServiceWorkerClientData::decode):
        Store the main navigation app-bound value when we register a client.

        * workers/service/ServiceWorkerContextData.cpp:
        (WebCore::ServiceWorkerContextData::isolatedCopy const):
        * workers/service/ServiceWorkerContextData.h:
        (WebCore::ServiceWorkerContextData::encode const):
        (WebCore::ServiceWorkerContextData::decode):
        * workers/service/context/ServiceWorkerThreadProxy.cpp:
        (WebCore::ServiceWorkerThreadProxy::ServiceWorkerThreadProxy):
        (WebCore::ServiceWorkerThreadProxy::lastNavigationWasAppBound):
        * workers/service/context/ServiceWorkerThreadProxy.h:
        * workers/service/server/RegistrationDatabase.cpp:
        (WebCore::RegistrationDatabase::importRecords):
        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::updateWorker):
        (WebCore::SWServer::clientIsAppBoundForRegistrableDomain):
        Best-effort heuristic to mark a load as app bound if any client for
        that origin was registered as app-bound.

2021-05-20  Sam Weinig  <weinig@apple.com>

        Fix inverted ASSERT in sampleColor.

        Rubber-stamped by Tim Horton.

        * page/PageColorSampler.cpp:
        (WebCore::sampleColor):

2021-05-20  Alexey Shvayka  <shvaikalesh@gmail.com>

        [WebIDL] Remove [ImplicitThis] and [CustomProxyToJSObject] extended attributes
        https://bugs.webkit.org/show_bug.cgi?id=223758

        Reviewed by Sam Weinig.

        This change introduces castThisValue<JSClass>, taking a step towards unification of |this|
        value casting between IDLAttribute and IDLOperation. The helper uses compile-time inheritance
        check to provide implicit |this| value for DOM global objects [1], replacing [ImplicitThis]
        extended attribute, which was removed from the spec [2] a while ago.

        IDLAttribute can't perform toThis() with ECMAMode::strict(), like IDLOperation now does,
        because CustomValue getters are called with |this| value of JSGlobalObject type, which gets
        tainted by JSScope::toThis(). #225397 will remove the need for toThis(), finally making |this|
        value casting consistent between attributes and operations.

        Also, this patch fixes `Object.create(window).location` to throw as per spec [1] by removing
        prototype chain traversal from toJSDOMWindow(), which aligns WebKit with Blink and Gecko.

        As DOM global objects are wrapped in proxies and require special casting, toJSDOMWindow() and
        friends are merged into toJSDOMGlobalObject<JSClass>, which is aware of inheritance / JSProxy.
        It replaces [CustomProxyToJSObject] extended attribute, which could be missed when adding new
        DOM global objects, fixing worklets' global functions not to throw when called on `globalThis`.

        This change reduces WebCore --release binary size by 0.2% (147 KB).

        [1] https://heycam.github.io/webidl/#dfn-attribute-getter (step 1.1.2.3)
        [2] https://github.com/heycam/webidl/pull/155

        Tests: imported/w3c/web-platform-tests/WebIDL/ecmascript-binding/global-object-implicit-this-value.any.js
               imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioworklet-interface/audioworklet-registerprocessor-called-on-globalthis.https.html
               fast/css-custom-paint/registerPaintBindings.html
               http/tests/security/listener/*.html

        * Headers.cmake:
        * Modules/webaudio/AudioWorkletGlobalScope.idl:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMAttribute.h:
        (WebCore::IDLAttribute::set):
        (WebCore::IDLAttribute::setPassingPropertyName):
        (WebCore::IDLAttribute::get):
        (WebCore::IDLAttribute::getPassingPropertyName):
        * bindings/js/JSDOMCastThisValue.h: Added.
        (WebCore::castThisValue):
        * bindings/js/JSDOMCastedThisErrorBehavior.h: Removed.
        * bindings/js/JSDOMGlobalObject.h:
        (WebCore::toJSDOMGlobalObject):
        * bindings/js/JSDOMOperation.h:
        (WebCore::IDLOperation::cast):
        * bindings/js/JSDOMWindowBase.cpp:
        * bindings/js/JSDOMWindowBase.h:
        (WebCore::toJSDOMWindow):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSC_DEFINE_CUSTOM_GETTER):
        (WebCore::IDLOperation<JSDOMWindow>::cast): Deleted.
        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::cachedDocumentWrapper):
        * bindings/js/JSEventTargetCustom.cpp:
        (WebCore::jsEventTargetCast):
        * bindings/js/JSEventTargetCustom.h:
        (WebCore::IDLOperation<JSEventTarget>::call):
        * bindings/js/JSRemoteDOMWindowBase.cpp:
        (WebCore::toJSRemoteDOMWindow): Deleted.
        * bindings/js/JSRemoteDOMWindowBase.h:
        * bindings/js/JSWorkerGlobalScopeBase.cpp:
        (WebCore::toJSDedicatedWorkerGlobalScope): Deleted.
        (WebCore::toJSWorkerGlobalScope): Deleted.
        (WebCore::toJSServiceWorkerGlobalScope): Deleted.
        * bindings/js/JSWorkerGlobalScopeBase.h:
        * bindings/js/JSWorkletGlobalScopeBase.cpp:
        (WebCore::toJSWorkletGlobalScope): Deleted.
        * bindings/js/JSWorkletGlobalScopeBase.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        (ShouldGenerateToJSDeclaration):
        (IsAcceleratedDOMAttribute):
        (GenerateImplementation):
        * bindings/scripts/IDLAttributes.json:
        * bindings/scripts/test/JS/*: Updated.
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::canAccessInspectedScriptState const):
        * page/DOMWindow.idl:
        * page/RemoteDOMWindow.idl:
        * workers/DedicatedWorkerGlobalScope.idl:
        * workers/WorkerGlobalScope.idl:
        * workers/service/ServiceWorkerGlobalScope.idl:
        * worklets/PaintWorkletGlobalScope.idl:
        * worklets/WorkletGlobalScope.idl:

2021-05-20  Alexey Shvayka  <shvaikalesh@gmail.com>

        Align internal methods of WindowProperties object with the spec
        https://bugs.webkit.org/show_bug.cgi?id=222918

        Reviewed by Sam Weinig.

        This patch:

        1. Implements [[PreventExtensions]], [[DefineOwnProperty]], and [[Delete]] methods that always fail [1],
           ensuring [[Set]] with altered receiver is passed through, indexed properties are rejected as well,
           and an exception is thrown if neccessary.

           Adding a put() override would a) slow down global `var` creation and b) require factoring out most of
           JSObject::putInlineSlow(). Instead, we prevent extensions on a structure while defining isExtensible()
           override to cover that up.

        2. Corrects property attributes reported by [[GetOwnProperty]] methods of cross-origin WindowProxy [2]
           and WindowProperties, bringing these objects in compliance with invariants of internal methods [3].

        3. Removes comments on cross-browser differences and priority order from [[GetOwnProperty]] because
           it correctly implements the now detailed spec [4]. Browsing contexts precedence is covered by
           wpt/html/browsers/the-window-object/named-access-on-the-window-object/named-objects.html test.

        4. Asserts that WindowProperties [[Prototype]] is an object, as guaranteed by its [[SetPrototypeOf]].

        This change fully implements the current spec, aligning WebKit with Blink and Gecko.

        [1] https://heycam.github.io/webidl/#named-properties-object-defineownproperty
        [2] https://html.spec.whatwg.org/multipage/window-object.html#windowproxy-getownproperty (step 6.2)
        [3] https://tc39.es/ecma262/#sec-invariants-of-the-essential-internal-methods
        [4] https://html.spec.whatwg.org/multipage/window-object.html#dom-window-nameditem (step 2)

        Tests: imported/w3c/web-platform-tests/WebIDL/ecmascript-binding/window-named-properties-object.html
               imported/w3c/web-platform-tests/html/browsers/origin/cross-origin-objects/cross-origin-objects.html
               imported/w3c/web-platform-tests/html/browsers/the-window-object/named-access-on-the-window-object/window-named-properties.html

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::jsDOMWindowGetOwnPropertySlotRestrictedAccess):
        * bindings/js/JSDOMWindowProperties.cpp:
        (WebCore::jsDOMWindowPropertiesGetOwnPropertySlotNamedItemGetter):
        (WebCore::JSDOMWindowProperties::finishCreation):
        (WebCore::JSDOMWindowProperties::getOwnPropertySlot):
        (WebCore::JSDOMWindowProperties::deleteProperty):
        (WebCore::JSDOMWindowProperties::deletePropertyByIndex):
        (WebCore::JSDOMWindowProperties::preventExtensions):
        (WebCore::JSDOMWindowProperties::isExtensible):
        (WebCore::JSDOMWindowProperties::defineOwnProperty):
        * bindings/js/JSDOMWindowProperties.h:

2021-05-20  Chris Dumez  <cdumez@apple.com>

        WebAudioBufferList::setSampleCount() should early return if computeBufferSizes() fails
        https://bugs.webkit.org/show_bug.cgi?id=226028
        rdar://78222414

        Reviewed by Eric Carlson.

        If computeBufferSizes() fails (returns WTF::nullopt), we now early return on release
        builds, without modifying the WebAudioBufferList's internal state in any way. In
        Debug, we would still hit the assertion.

        * platform/audio/cocoa/WebAudioBufferList.cpp:
        (WebCore::WebAudioBufferList::setSampleCount):

2021-05-20  Antti Koivisto  <antti@apple.com>

        HTML parser should yield more aggressively
        https://bugs.webkit.org/show_bug.cgi?id=224609
        rdar://73458064

        Reviewed by Darin Adler.

        During page loading we may spend substantial amount of time in individual invocations of
        the HTML parser. This can be a problem since it blocks rendering updates and so visual
        page load progression.

        Most of this time is not actually spend parsing, it rather goes into synchronous script
        execution and DOM work triggered by scripts. This patch adds a more effective mechanism
        where we may decide to yield the parser before executing a script.

        * dom/ScriptElement.h:
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::pumpTokenizerLoop):
        * html/parser/HTMLParserScheduler.cpp:
        (WebCore::parserTimeLimit):
        (WebCore::PumpSession::PumpSession):
        (WebCore::HTMLParserScheduler::HTMLParserScheduler):
        (WebCore::HTMLParserScheduler::shouldYieldBeforeExecutingScript):

        Consider yielding before script execution after 16ms has elapsed and at least 256 tokens have been parsed.
        Only yield for synchronous scripts.
        Don't yield on very short inline scripts (this is an imperfect way to try to guess the execution cost).

        * html/parser/HTMLParserScheduler.h:
        (WebCore::HTMLParserScheduler::shouldYieldBeforeToken):
        (WebCore::HTMLParserScheduler::checkForYield):

        Don't reset the token count, instead track the last yield check point.

        * html/parser/HTMLTreeBuilder.h:
        (WebCore::HTMLTreeBuilder::scriptToProcess const):

2021-05-20  Chris Dumez  <cdumez@apple.com>

        [Hardening] Use CheckedArithmetics in WebAudioBufferList constructor
        https://bugs.webkit.org/show_bug.cgi?id=226029
        <rdar://78222665>

        Reviewed by Eric Carlson.

        * platform/audio/cocoa/WebAudioBufferList.cpp:
        (WebCore::WebAudioBufferList::WebAudioBufferList):

2021-05-20  Chris Dumez  <cdumez@apple.com>

        Use CheckedLock more in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=226026

        Reviewed by Geoffrey Garen.

        Use CheckedLock more in WebCore to benefit from Clang Thread Safety Analysis.

        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::createIndex):
        (WebCore::IDBObjectStore::index):
        (WebCore::IDBObjectStore::deleteIndex):
        (WebCore::IDBObjectStore::rollbackForVersionChangeAbort):
        (WebCore::IDBObjectStore::visitReferencedIndexes const):
        (WebCore::IDBObjectStore::renameReferencedIndex):
        * Modules/indexeddb/IDBObjectStore.h:
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::objectStore):
        (WebCore::IDBTransaction::internalAbort):
        (WebCore::IDBTransaction::createObjectStore):
        (WebCore::IDBTransaction::renameObjectStore):
        (WebCore::IDBTransaction::renameIndex):
        (WebCore::IDBTransaction::deleteObjectStore):
        (WebCore::IDBTransaction::visitReferencedObjectStores const):
        * Modules/indexeddb/IDBTransaction.h:
        * Modules/indexeddb/client/IDBConnectionProxy.cpp:
        (WebCore::IDBClient::IDBConnectionProxy::openDatabase):
        (WebCore::IDBClient::IDBConnectionProxy::deleteDatabase):
        (WebCore::IDBClient::IDBConnectionProxy::completeOpenDBRequest):
        (WebCore::IDBClient::IDBConnectionProxy::saveOperation):
        (WebCore::IDBClient::IDBConnectionProxy::completeOperation):
        (WebCore::IDBClient::IDBConnectionProxy::fireVersionChangeEvent):
        (WebCore::IDBClient::IDBConnectionProxy::notifyOpenDBRequestBlocked):
        (WebCore::IDBClient::IDBConnectionProxy::establishTransaction):
        (WebCore::IDBClient::IDBConnectionProxy::didStartTransaction):
        (WebCore::IDBClient::IDBConnectionProxy::commitTransaction):
        (WebCore::IDBClient::IDBConnectionProxy::didCommitTransaction):
        (WebCore::IDBClient::IDBConnectionProxy::abortTransaction):
        (WebCore::IDBClient::IDBConnectionProxy::didAbortTransaction):
        (WebCore::IDBClient::IDBConnectionProxy::didCloseFromServer):
        (WebCore::IDBClient::IDBConnectionProxy::connectionToServerLost):
        (WebCore::IDBClient::IDBConnectionProxy::scheduleMainThreadTasks):
        (WebCore::IDBClient::IDBConnectionProxy::handleMainThreadTasks):
        (WebCore::IDBClient::IDBConnectionProxy::getAllDatabaseNamesAndVersions):
        (WebCore::IDBClient::IDBConnectionProxy::didGetAllDatabaseNamesAndVersions):
        (WebCore::IDBClient::IDBConnectionProxy::registerDatabaseConnection):
        (WebCore::IDBClient::IDBConnectionProxy::unregisterDatabaseConnection):
        (WebCore::IDBClient::IDBConnectionProxy::forgetActiveOperations):
        (WebCore::IDBClient::IDBConnectionProxy::forgetTransaction):
        (WebCore::IDBClient::IDBConnectionProxy::forgetActivityForCurrentThread):
        (WebCore::IDBClient::IDBConnectionProxy::setContextSuspended):
        * Modules/indexeddb/client/IDBConnectionProxy.h:
        * Modules/mediastream/RTCRtpSFrameTransformer.cpp:
        (WebCore::RTCRtpSFrameTransformer::setEncryptionKey):
        (WebCore::RTCRtpSFrameTransformer::decryptFrame):
        (WebCore::RTCRtpSFrameTransformer::encryptFrame):
        * Modules/mediastream/RTCRtpSFrameTransformer.h:
        * Modules/mediastream/RTCRtpScriptTransform.cpp:
        (WebCore::RTCRtpScriptTransform::setTransformer):
        (WebCore::RTCRtpScriptTransform::setupTransformer):
        (WebCore::RTCRtpScriptTransform::clear):
        * Modules/mediastream/RTCRtpScriptTransform.h:
        * Modules/mediastream/libwebrtc/LibWebRTCDataChannelHandler.cpp:
        (WebCore::LibWebRTCDataChannelHandler::setClient):
        (WebCore::LibWebRTCDataChannelHandler::checkState):
        (WebCore::LibWebRTCDataChannelHandler::OnMessage):
        (WebCore::LibWebRTCDataChannelHandler::OnBufferedAmountChange):
        * Modules/mediastream/libwebrtc/LibWebRTCDataChannelHandler.h:
        * Modules/mediastream/libwebrtc/LibWebRTCRtpTransformBackend.cpp:
        (WebCore::LibWebRTCRtpTransformBackend::setInputCallback):
        (WebCore::LibWebRTCRtpTransformBackend::setOutputCallback):
        (WebCore::LibWebRTCRtpTransformBackend::processTransformedFrame):
        (WebCore::LibWebRTCRtpTransformBackend::Transform):
        * Modules/mediastream/libwebrtc/LibWebRTCRtpTransformBackend.h:
        * inspector/agents/WebHeapAgent.cpp:
        (WebCore::SendGarbageCollectionEventsTask::addGarbageCollection):
        (WebCore::SendGarbageCollectionEventsTask::reset):
        (WebCore::SendGarbageCollectionEventsTask::timerFired):
        * page/ResourceUsageThread.cpp:
        (WebCore::ResourceUsageThread::addObserver):
        (WebCore::ResourceUsageThread::removeObserver):
        (WebCore::ResourceUsageThread::waitUntilObservers):
        (WebCore::ResourceUsageThread::notifyObservers):
        * page/ResourceUsageThread.h:
        * page/WheelEventTestMonitor.cpp:
        (WebCore::WheelEventTestMonitor::clearAllTestDeferrals):
        (WebCore::WheelEventTestMonitor::setTestCallbackAndStartMonitoring):
        (WebCore::WheelEventTestMonitor::deferForReason):
        (WebCore::WheelEventTestMonitor::removeDeferralForReason):
        (WebCore::WheelEventTestMonitor::receivedWheelEvent):
        (WebCore::WheelEventTestMonitor::checkShouldFireCallbacks):
        * page/WheelEventTestMonitor.h:
        (WebCore::WheelEventTestMonitor::WTF_GUARDED_BY_LOCK):
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::computeWheelProcessingSteps):
        (WebCore::ScrollingTree::determineWheelEventProcessing):
        (WebCore::ScrollingTree::handleWheelEvent):
        (WebCore::ScrollingTree::commitTreeState):
        (WebCore::ScrollingTree::mainFrameScrollPosition const):
        (WebCore::ScrollingTree::setMainFrameScrollPosition):
        (WebCore::ScrollingTree::setGestureState):
        (WebCore::ScrollingTree::gestureState):
        (WebCore::ScrollingTree::eventTrackingTypeForPoint):
        (WebCore::ScrollingTree::isRubberBandInProgressForNode):
        (WebCore::ScrollingTree::setRubberBandingInProgressForNode):
        (WebCore::ScrollingTree::isUserScrollInProgressForNode):
        (WebCore::ScrollingTree::setUserScrollInProgressForNode):
        (WebCore::ScrollingTree::clearNodesWithUserScrollInProgress):
        (WebCore::ScrollingTree::isScrollSnapInProgressForNode):
        (WebCore::ScrollingTree::setNodeScrollSnapInProgress):
        (WebCore::ScrollingTree::setMainFramePinnedState):
        (WebCore::ScrollingTree::setMainFrameCanRubberBand):
        (WebCore::ScrollingTree::mainFrameCanRubberBandInDirection):
        (WebCore::ScrollingTree::addPendingScrollUpdate):
        (WebCore::ScrollingTree::takePendingScrollUpdates):
        (WebCore::ScrollingTree::setScrollPinningBehavior):
        (WebCore::ScrollingTree::scrollPinningBehavior):
        (WebCore::ScrollingTree::willWheelEventStartSwipeGesture):
        (WebCore::ScrollingTree::windowScreenDidChange):
        (WebCore::ScrollingTree::displayID):
        (WebCore::ScrollingTree::hasProcessedWheelEventsRecently):
        (WebCore::ScrollingTree::willProcessWheelEvent):
        (WebCore::ScrollingTree::nominalFramesPerSecond):
        (WebCore::ScrollingTree::scrollingTreeAsText):
        * page/scrolling/ScrollingTree.h:
        * page/scrolling/ScrollingTreeLatchingController.cpp:
        (WebCore::ScrollingTreeLatchingController::receivedWheelEvent):
        (WebCore::ScrollingTreeLatchingController::latchingDataForEvent const):
        (WebCore::ScrollingTreeLatchingController::latchedNodeID const):
        (WebCore::ScrollingTreeLatchingController::latchedNodeAndSteps const):
        (WebCore::ScrollingTreeLatchingController::nodeDidHandleEvent):
        (WebCore::ScrollingTreeLatchingController::nodeWasRemoved):
        (WebCore::ScrollingTreeLatchingController::clearLatchedNode):
        * page/scrolling/ScrollingTreeLatchingController.h:
        * platform/audio/HRTFDatabaseLoader.cpp:
        (WebCore::HRTFDatabaseLoader::loadAsynchronously):
        (WebCore::HRTFDatabaseLoader::waitForLoaderThreadCompletion):
        * platform/audio/HRTFDatabaseLoader.h:
        * platform/audio/cocoa/AudioDestinationCocoa.cpp:
        (WebCore::AudioDestinationCocoa::hasEnoughFrames const):
        (WebCore::AudioDestinationCocoa::render):
        (WebCore::AudioDestinationCocoa::renderOnRenderingThead):
        * platform/audio/cocoa/AudioDestinationCocoa.h:
        * platform/encryptedmedia/CDMProxy.cpp:
        (WebCore::CDMProxy::instance const):
        (WebCore::CDMProxy::setInstance):
        (WebCore::CDMProxy::startedWaitingForKey const):
        (WebCore::CDMProxy::stoppedWaitingForKey const):
        * platform/encryptedmedia/CDMProxy.h:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::MediaPlayerPrivateAVFoundation):
        (WebCore::MediaPlayerPrivateAVFoundation::setDelayCallbacks const):
        (WebCore::MediaPlayerPrivateAVFoundation::clearMainThreadPendingFlag):
        (WebCore::MediaPlayerPrivateAVFoundation::scheduleMainThreadNotification):
        (WebCore::MediaPlayerPrivateAVFoundation::dispatchNotification):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::processNewVideoSample):
        * platform/graphics/cg/IOSurfacePool.cpp:
        (WebCore::IOSurfacePool::takeSurface):
        (WebCore::IOSurfacePool::addSurface):
        (WebCore::IOSurfacePool::setPoolSize):
        (WebCore::IOSurfacePool::collectionTimerFired):
        (WebCore::IOSurfacePool::discardAllSurfaces):
        * platform/graphics/cg/IOSurfacePool.h:
        (WebCore::IOSurfacePool::WTF_GUARDED_BY_LOCK):
        * platform/graphics/cg/SubimageCacheWithTimer.cpp:
        (WebCore::SubimageCacheWithTimer::pruneCacheTimerFired):
        (WebCore::SubimageCacheWithTimer::subimage):
        (WebCore::SubimageCacheWithTimer::clearImageAndSubimages):
        (WebCore::SubimageCacheWithTimer::clearAll):
        * platform/graphics/cg/SubimageCacheWithTimer.h:
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::FontDatabase::collectionForFamily):
        (WebCore::FontDatabase::clear):
        * platform/network/cocoa/WebCoreNSURLSession.mm:
        (WebCore::WebCoreNSURLSessionDataTaskClient::clearTask):
        (WebCore::WebCoreNSURLSessionDataTaskClient::dataSent):
        (WebCore::WebCoreNSURLSessionDataTaskClient::responseReceived):
        (WebCore::WebCoreNSURLSessionDataTaskClient::shouldCacheResponse):
        (WebCore::WebCoreNSURLSessionDataTaskClient::dataReceived):
        (WebCore::WebCoreNSURLSessionDataTaskClient::redirectReceived):
        (WebCore::WebCoreNSURLSessionDataTaskClient::accessControlCheckFailed):
        (WebCore::WebCoreNSURLSessionDataTaskClient::loadFailed):
        (WebCore::WebCoreNSURLSessionDataTaskClient::loadFinished):
        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.h:
        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm:
        (-[WebCoreResourceHandleAsOperationQueueDelegate detachHandle]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:willSendRequest:redirectResponse:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:canAuthenticateAgainstProtectionSpace:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:willCacheResponse:]):
        * storage/StorageQuotaManager.cpp:
        (WebCore::StorageQuotaManager::requestSpaceOnBackgroundThread):
        (WebCore::StorageQuotaManager::resetQuotaUpdatedBasedOnUsageForTesting):
        (WebCore::StorageQuotaManager::resetQuotaForTesting):
        * storage/StorageQuotaManager.h:
        (WebCore::StorageQuotaManager::WTF_GUARDED_BY_LOCK):
        * workers/WorkerOrWorkletScriptController.cpp:
        (WebCore::WorkerOrWorkletScriptController::scheduleExecutionTermination):
        (WebCore::WorkerOrWorkletScriptController::isTerminatingExecution const):
        * workers/WorkerOrWorkletScriptController.h:
        (WebCore::WorkerOrWorkletScriptController::WTF_GUARDED_BY_LOCK):

2021-05-20  Wenson Hsieh  <wenson_hsieh@apple.com>

        [GPU Process] ItemHandle::safeCopy is not actually safe, does no bounds-checking
        https://bugs.webkit.org/show_bug.cgi?id=226022
        rdar://78181677

        Reviewed by Chris Dumez.

        Currently, it's possible for DisplayList iteration to trigger out-of-bounds access when decoding inline display
        list items; this patch adds hardening to prevent this. See below for more details.

        * platform/graphics/displaylists/DisplayListItemBuffer.cpp:

        Add an `ItemType` argument to `safeCopy`, and use this `ItemType` instead of assuming that the item type of the
        `ItemHandle` we're copying from hasn't changed since we've validated it.

        (WebCore::DisplayList::ItemHandle::safeCopy const):
        * platform/graphics/displaylists/DisplayListItemBuffer.h:
        * platform/graphics/displaylists/DisplayListIterator.cpp:
        (WebCore::DisplayList::DisplayList::Iterator::updateCurrentItem):

        Verify that the remaining item buffer capacity is at least as large as `paddedSizeOfTypeAndItem`, such that we
        won't go out of bounds when attempting to read from the item handle in `safeCopy`.

        * platform/graphics/displaylists/InMemoryDisplayList.cpp:
        (WebCore::DisplayList::InMemoryDisplayList::ReadingClient::decodeItem):

2021-05-20  Chris Lord  <clord@igalia.com>

        Allow passing a VisibleRectContext when calculating the clipped overflow rect
        https://bugs.webkit.org/show_bug.cgi?id=226007

        Reviewed by Simon Fraser.

        Refactor rendering classes to allow specifying a VisibleRectContext
        when calculating the clipped overflow rect.

        No new tests, this is just a small refactor.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isOffScreen const):
        * dom/DocumentMarkerController.cpp:
        (WebCore::DocumentMarkerController::renderedRectsForMarkers):
        * page/SpatialNavigation.cpp:
        (WebCore::hasOffscreenRect):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::clippedOverflowRect const):
        * rendering/RenderBox.h:
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::mayCauseRepaintInsideViewport const):
        (WebCore::RenderElement::isVisibleInDocumentRect const):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::clippedOverflowRect const):
        * rendering/RenderInline.h:
        * rendering/RenderLineBreak.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::pixelSnappedAbsoluteClippedOverflowRect const):
        (WebCore::RenderObject::clippedOverflowRect const):
        (WebCore::RenderObject::computeRect const):
        (WebCore::absoluteRectsForRangeInText):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::absoluteClippedOverflowRectForRepaint const):
        (WebCore::RenderObject::clippedOverflowRectForRepaint const):
        (WebCore::RenderObject::outlineBoundsForRepaint const):
        (WebCore::RenderObject::computeAbsoluteRepaintRect const):
        (WebCore::RenderObject::computeRectForRepaint const):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::clippedOverflowRect const):
        * rendering/RenderReplaced.h:
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::clippedOverflowRect const):
        * rendering/RenderTableCell.h:
        * rendering/RenderTableCol.cpp:
        (WebCore::RenderTableCol::clippedOverflowRect const):
        * rendering/RenderTableCol.h:
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::layout):
        (WebCore::RenderTableRow::clippedOverflowRect const):
        * rendering/RenderTableRow.h:
        * rendering/RenderText.cpp:
        (WebCore::RenderText::clippedOverflowRect const):
        * rendering/RenderText.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::updateVisibleViewportRect):
        * rendering/svg/RenderSVGForeignObject.cpp:
        (WebCore::RenderSVGForeignObject::clippedOverflowRect const):
        * rendering/svg/RenderSVGForeignObject.h:
        * rendering/svg/RenderSVGGradientStop.h:
        * rendering/svg/RenderSVGHiddenContainer.h:
        * rendering/svg/RenderSVGInline.cpp:
        (WebCore::RenderSVGInline::clippedOverflowRect const):
        * rendering/svg/RenderSVGInline.h:
        * rendering/svg/RenderSVGModelObject.cpp:
        (WebCore::RenderSVGModelObject::clippedOverflowRect const):
        * rendering/svg/RenderSVGModelObject.h:
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::clippedOverflowRect const):
        * rendering/svg/RenderSVGRoot.h:
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::clippedOverflowRect const):
        * rendering/svg/RenderSVGText.h:
        * rendering/svg/SVGRenderTreeAsText.cpp:

2021-05-20  Alex Christensen  <achristensen@webkit.org>

        Add null checks in FrameSelection::selectFrameElementInParentIfFullySelected
        https://bugs.webkit.org/show_bug.cgi?id=225973
        <rdar://78200977>

        Reviewed by Katherine Cheney.

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::selectFrameElementInParentIfFullySelected):

2021-05-20  Devin Rousso  <drousso@apple.com>

        [Modern Media Controls] add a suffix based on `TextTrack::Kind` when generating display names for `TrackBase`
        https://bugs.webkit.org/show_bug.cgi?id=225995

        Reviewed by Eric Carlson.

        * page/CaptionUserPreferencesMediaAF.cpp:
        (WebCore::buildDisplayStringForTrackBase):

        * platform/LocalizedStrings.h:
        * platform/LocalizedStrings.cpp:
        (WebCore::captionsTextTrackWithoutLabelMenuItemText): Added.
        (WebCore::descriptionsTextTrackWithoutLabelMenuItemText): Added.
        (WebCore::chaptersTextTrackWithoutLabelMenuItemText): Added.
        (WebCore::metadataTextTrackWithoutLabelMenuItemText): Added.
        * en.lproj/Localizable.strings:

2021-05-20  Devin Rousso  <drousso@apple.com>

        [Modern Media Controls] should not use `codePointCompare` as it doesn't take into account language specific sorting rules
        https://bugs.webkit.org/show_bug.cgi?id=225993

        Reviewed by Eric Carlson.

        * page/CaptionUserPreferences.cpp:
        (WebCore::CaptionUserPreferences::sortedTrackListForMenu):
        * page/CaptionUserPreferencesMediaAF.cpp:
        (WebCore::textTrackCompare):
        (WebCore::CaptionUserPreferencesMediaAF::sortedTrackListForMenu):

2021-05-20  Geoffrey Garen  <ggaren@apple.com>

        GraphicsLayer::setName() causes heap fragmentation
        https://bugs.webkit.org/show_bug.cgi?id=225838

        Reviewed by Simon Fraser.

        Profiling for heap fragmentation shows that GraphicsLayer::setName() is
        a top contributor. Worth about 5MB maximum on GMail.

        Use MAKE_STATIC_STRING_IMPL for our constant layer names so we end up
        with only one copy and no heap allocation in the many cases that are
        compile-time constants.

        * display/compositing/DisplayLayerController.cpp:
        (WebCore::Display::LayerController::setupRootLayerHierarchy):
        * page/PageOverlayController.cpp:
        (WebCore::PageOverlayController::createRootLayersIfNeeded):
        (WebCore::PageOverlayController::installPageOverlay):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::setContentsToSolidColor):
        (WebCore::GraphicsLayerCA::setContentsToModel):
        (WebCore::GraphicsLayerCA::updateBackdropFilters):
        (WebCore::GraphicsLayerCA::updateContentsImage):
        (WebCore::GraphicsLayerCA::updateClippingStrategy):
        (WebCore::GraphicsLayerCA::updateContentsRects):
        * platform/graphics/ca/TileCoverageMap.cpp:
        (WebCore::TileCoverageMap::TileCoverageMap):
        * platform/graphics/ca/win/CACFLayerTreeHost.cpp:
        (WebCore::CACFLayerTreeHost::initialize):
        (WebCore::CACFLayerTreeHost::updateDebugInfoLayer):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::flushCompositingStateForThisLayerOnly):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateLayerForTopOverhangArea):
        (WebCore::RenderLayerCompositor::updateLayerForBottomOverhangArea):
        (WebCore::RenderLayerCompositor::updateLayerForHeader):
        (WebCore::RenderLayerCompositor::updateLayerForFooter):
        (WebCore::RenderLayerCompositor::updateOverflowControlsLayers):
        (WebCore::RenderLayerCompositor::ensureRootLayer):

2021-05-20  Devin Rousso  <drousso@apple.com>

        [Modern Media Controls] should not include `TextTrack` when sorting `TextTrackList` if it doesn't have a desired `TextTrack::Kind` when `CaptionDisplayMode::Manual`
        https://bugs.webkit.org/show_bug.cgi?id=225992

        Reviewed by Eric Carlson.

        * page/CaptionUserPreferencesMediaAF.cpp:
        (WebCore::CaptionUserPreferencesMediaAF::sortedTrackListForMenu):

2021-05-20  Peng Liu  <peng.liu6@apple.com>

        AirPlay icon of the Vimeo.com video player is missing after reloading the page
        https://bugs.webkit.org/show_bug.cgi?id=226005

        Reviewed by Eric Carlson.

        Some sites, e.g., vimeo.com, depends on the "webkitplaybacktargetavailabilitychanged"
        event to setup the player related to AirPlay feature properly. When we reload a
        page including media element(s), the element's media session will be constructed
        with `m_hasPlaybackTargets` be `true`, so no "webkitplaybacktargetavailabilitychanged"
        event will be fired.

        This patch ensures that an `HTMLMediaElement` always fires that event when we
        reload the page.

        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::MediaElementSession):

2021-05-20  Peng Liu  <peng.liu6@apple.com>

        AirPlay icon of the Vimeo.com video player is missing
        https://bugs.webkit.org/show_bug.cgi?id=226004

        Reviewed by Eric Carlson.

        With the optimizations in r276883, an `HTMLMediaElement` will activate its
        `MediaSession` just before creating its `MediaPlayer` inside `prepareForLoad()`
        or `loadNextSourceChild()`, and will deactivate its `MediaSession` after tearing
        down its `MediaPlayer` inside `mediaLoadingFailed()`.

        However, with these changes, when a new `HTMLMediaElement` is created and an
        event handler of "webkitplaybacktargetavailabilitychanged" is added to the element,
        the element's `MediaSession` might be inactive when function
        `MediaSessionManageriOS::configureWireLessTargetMonitoring()` runs, so its
        `MediaSession` won't monitor wireless routes, and no "webkitplaybacktargetavailabilitychanged"
        will be fired thereafter.

        This patch fixes this issue by activating an `HTMLMediaElement`'s `MediaSession`
        when adding the first event handler to "webkitplaybacktargetavailabilitychanged" event.
        It also keeps the `MediaSession` active if there is event handler to
        "webkitplaybacktargetavailabilitychanged" after tearing down the `HTMLMediaElement`'s
        `MediaPlayer` (in `HTMLMediaElement::mediaLoadingFailed()`).

        We can improve the fix by refactoring the way to activate/deactivate
        an `HTMLMediaElement`'s `MediaSession`.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::prepareForLoad):
        (WebCore::HTMLMediaElement::loadNextSourceChild):
        (WebCore::HTMLMediaElement::mediaLoadingFailed):
        (WebCore::HTMLMediaElement::addEventListener):
        (WebCore::HTMLMediaElement::createMediaPlayer):
        Replace two `mediaSession().setActive(true);` in `prepareForLoad()`
        and `loadNextSourceChild()` with one in `createMediaPlayer()`.

2021-05-20  Jer Noble  <jer.noble@apple.com>

        CRASH: Null-pointer deref in MediaSessionManagerCocoa::setNowPlayingInfo()
        https://bugs.webkit.org/show_bug.cgi?id=225999
        <rdar://78232970>

        Reviewed by Eric Carlson.

        Null-check `nowPlayingInfo.artwork->imageData` before dereferencing.

        * platform/audio/cocoa/MediaSessionManagerCocoa.mm:
        (WebCore::MediaSessionManagerCocoa::setNowPlayingInfo):

2021-05-20  Youenn Fablet  <youenn@apple.com>

        <video> rendered inside <template> shows black for webcam stream (Safari 14.0.3 only)
        https://bugs.webkit.org/show_bug.cgi?id=222115
        <rdar://problem/74546659>

        Reviewed by Eric Carlson.

        Update element visibility if changing of document. Add internals API to test this.

        Test: fast/media/template-hidden.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::didMoveToNewDocument):
        * testing/Internals.cpp:
        (WebCore::Internals::isMediaElementHidden):
        * testing/Internals.h:
        * testing/Internals.idl:

2021-05-20  Alan Bujtas  <zalan@apple.com>

        [LFC][TFC] Available space distribution should account for the top and bottom table spacing
        https://bugs.webkit.org/show_bug.cgi?id=226003

        Reviewed by Antti Koivisto.

        The available space for the table content is the table width/height minus the left-right/top-bottom spacing, minus
        the additional spacing between the rows/columns.

        Tests: fast/inline/vertical-top-on-subpixel-makes-inline-box-overflow.html
               fast/layoutformattingcontext/table-simple-row-height.html

        * layout/formattingContexts/table/TableLayout.cpp:
        (WebCore::Layout::distributeAvailableSpace):

2021-05-20  Aditya Keerthi  <akeerthi@apple.com>

        Value of a color input does not update visually when using setAttribute
        https://bugs.webkit.org/show_bug.cgi?id=166930
        <rdar://problem/29983218>

        Reviewed by Simon Fraser.

        Test: fast/forms/color/color-input-set-attribute-value.html

        * html/ColorInputType.cpp:
        (WebCore::ColorInputType::attributeChanged):

        Update the color swatch when the value attribute is changed.

        * html/ColorInputType.h:

2021-05-20  Felipe Erias  <felipeerias@igalia.com>

        [css-flexbox] Wrong height of an empty table inside an orthogonal flex parent
        https://bugs.webkit.org/show_bug.cgi?id=225339

        Reviewed by Sergio Villar Senin.
        
        When setting the height of an empty table, give precedence to the overriding value if it has been set.
        Do not cache the height of that empty table as the intrinsic content height, because doing so may cause
        layout problems (the table is actually empty and may be assigned a different height by its parent).

        Test: imported/w3c/web-platform-tests/css/css-flexbox/table-as-item-specified-height.html
              imported/w3c/web-platform-tests/css/css-flexbox/table-as-item-specified-width-vertical.html

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout):

2021-05-19  Jean-Yves Avenard  <jya@apple.com>

        VP9 powerEfficient detection is broken in STP124
        https://bugs.webkit.org/show_bug.cgi?id=225910
        rdar://78144486

        Reviewed by Darin Adler.

        Change r273564 made an assumption that the first point of entry in the
        media stack is when a PlatformMediaSessionManager is created and move
        the initialization of some video codecs there.
        However, this isn't always the case. Media Capabilities JS API can cause
        queries to be made to the media engine without creating a media element.
        We are unfortunately unable to properly write a test that would prevent
        this regression to happen again as this is hardware dependent.

        * platform/audio/cocoa/MediaSessionManagerCocoa.h:
        * platform/audio/cocoa/MediaSessionManagerCocoa.mm:
        (WebCore::MediaSessionManagerCocoa::MediaSessionManagerCocoa):
        (WebCore::MediaSessionManagerCocoa::EnsureCodecsRegistered): Add method, use C++17 static
        initializer which avoids any ambiguity in regards to thread-safety.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:

2021-05-19  Tomoki Imai  <Tomoki.Imai@sony.com>

        Scrolling must be done after the layout when doing full page zoom
        https://bugs.webkit.org/show_bug.cgi?id=225730

        Reviewed by Simon Fraser.

        Previously, the actual scroll was executed before the layout with the zoomed position.
        It sometimes makes the scroll position exceed the page height, and cannot retain pageYOffset.
        In the user experience perspective, the user may miss what they are looking at after zoom.

        This patch makes the scroll happen after the layout, with the zoomed position.

        Test: LayoutTests\fast\scrolling\page-y-offset-should-not-be-changed-after-zoom.html

        * page/Frame.cpp:
        (WebCore::Frame::setPageAndTextZoomFactors): Makes the scroll happen after the layout.

2021-05-19  Devin Rousso  <drousso@apple.com>

        Add a way to create `"wheel"` events from gesture/touch events
        https://bugs.webkit.org/show_bug.cgi?id=225788
        <rdar://problem/76714308>

        Reviewed by Simon Fraser.

        Test: fast/events/gesture/wheel-from-gesture.html

        Other browsers have taken the approach of dispatching `"wheel"` events with `ctrlKey` and
        `deltaY` when handling multi-touch pinch-to-zoom gestures. Add helper functions to do this.

        * platform/PlatformWheelEvent.h:
        * platform/PlatformWheelEvent.cpp:
        (WebCore::PlatformWheelEvent::createFromGesture): Added.

2021-05-19  Chris Dumez  <cdumez@apple.com>

        Introduce SQLiteStatement::columnBlobView()
        https://bugs.webkit.org/show_bug.cgi?id=225988

        Reviewed by Alex Christensen.

        Introduce SQLiteStatement::columnBlobView() to get a "view" to the blob instead
        of copying the data. This is more efficient for call sites that do not need to
        hold on the the Blob data.

        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
        (WebCore::IDBServer::SQLiteIDBBackingStore::migrateIndexInfoTableForIDUpdate):
        (WebCore::IDBServer::SQLiteIDBBackingStore::migrateIndexRecordsTableForIDUpdate):
        (WebCore::IDBServer::SQLiteIDBBackingStore::addExistingIndex):
        (WebCore::IDBServer::SQLiteIDBBackingStore::extractExistingDatabaseInfo):
        (WebCore::IDBServer::SQLiteIDBBackingStore::deleteRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::getRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::getAllObjectStoreRecords):
        (WebCore::IDBServer::SQLiteIDBBackingStore::uncheckedGetIndexRecordForOneKey):
        * Modules/indexeddb/server/SQLiteIDBCursor.cpp:
        (WebCore::IDBServer::SQLiteIDBCursor::internalFetchNextRecord):
        * platform/sql/SQLiteStatement.cpp:
        (WebCore::SQLiteStatement::columnBlob):
        (WebCore::SQLiteStatement::columnBlobView):
        * platform/sql/SQLiteStatement.h:
        (WebCore::SQLiteStatement::BlobView::BlobView):
        (WebCore::SQLiteStatement::BlobView::data):
        (WebCore::SQLiteStatement::BlobView::size):
        * workers/service/server/RegistrationDatabase.cpp:
        (WebCore::RegistrationDatabase::importRecords):

2021-05-19  Alex Christensen  <achristensen@webkit.org>

        Add support for Navigation Timing Level 2
        https://bugs.webkit.org/show_bug.cgi?id=184363

        Reviewed by Ryosuke Niwa.

        This is basically just a new shape for exposing the same data as window.performance.navigation, but with a shape that fits better into the rest of the
        performance timeline measurements that have been added to the web platform since performance.navigation.

        I noted that exposing transfer size is problematic, and some of the tests for reading transfer size still fail.
        There are still a few relatively minor test failures to fix in future patches.  Each one is annotated in the LayoutTests ChangeLogs.

        Tests: imported/w3c/web-platform-tests/navigation-timing/dom_interactive_image_document.html
               imported/w3c/web-platform-tests/navigation-timing/dom_interactive_media_document.html
               imported/w3c/web-platform-tests/navigation-timing/nav2_test_attributes_exist.html
               imported/w3c/web-platform-tests/navigation-timing/nav2_test_attributes_values.html
               imported/w3c/web-platform-tests/navigation-timing/nav2_test_instance_accessors.html
               imported/w3c/web-platform-tests/navigation-timing/nav2_test_navigate_iframe.html
               imported/w3c/web-platform-tests/navigation-timing/nav2_test_navigation_type_navigate.html
               imported/w3c/web-platform-tests/navigation-timing/nav2_test_redirect_chain_xserver_final_original_origin.html
               imported/w3c/web-platform-tests/navigation-timing/nav2_test_redirect_none.html
               imported/w3c/web-platform-tests/navigation-timing/nav2_test_unique_nav_instances.html
               imported/w3c/web-platform-tests/navigation-timing/po-navigation.html
               imported/w3c/web-platform-tests/navigation-timing/secure-connection-start-reuse.https.html
               imported/w3c/web-platform-tests/navigation-timing/test_document_onload.html
               imported/w3c/web-platform-tests/performance-timeline/get-invalid-entries.html
               imported/w3c/web-platform-tests/performance-timeline/not-clonable.html
               imported/w3c/web-platform-tests/performance-timeline/po-observe.html
               imported/w3c/web-platform-tests/performance-timeline/po-resource.html
               imported/w3c/web-platform-tests/performance-timeline/worker-with-performance-observer.html

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSPerformanceEntryCustom.cpp:
        (WebCore::toJSNewlyCreated):
        * dom/Document.cpp:
        (WebCore::Document::setReadyState):
        Sometimes the ready state jumps right to Complete without hitting Interactive along the way.
        When this happens, we want to mark both m_documentTiming.domComplete and m_documentTiming.domInteractive.
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::notifyFinished):
        Call addNavigationTiming in notifyFinished to create the navigation timing object when we are done navigating
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::didFinishLoading):
        * loader/ResourceLoader.h:
        * loader/ResourceTiming.cpp:
        (WebCore::ResourceTiming::fromLoad):
        Add a URL parameter.  Sometimes we need to use the request's URL and sometimes the response's.  Different specs written at different times.
        (WebCore::ResourceTiming::populateServerTiming const):
        (WebCore::ResourceTiming::populateServerTiming): Deleted.
        * loader/ResourceTiming.h:
        (WebCore::ResourceTiming::url const):
        (WebCore::ResourceTiming::initiator const):
        (WebCore::ResourceTiming::loadTiming const):
        (WebCore::ResourceTiming::networkLoadMetrics const):
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::reportResourceTiming):
        * page/Performance.cpp:
        (WebCore::Performance::getEntries const):
        (WebCore::Performance::getEntriesByType const):
        (WebCore::Performance::getEntriesByName const):
        (WebCore::Performance::appendBufferedEntriesByType const):
        (WebCore::Performance::addNavigationTiming):
        (WebCore::Performance::registerPerformanceObserver):
        (WebCore::Performance::queueEntry):
        (WebCore::Performance::scheduleTaskIfNeeded):
        * page/Performance.h:
        * page/PerformanceEntry.h:
        (WebCore::PerformanceEntry::startTime const):
        (WebCore::PerformanceEntry::duration const):
        (WebCore::PerformanceEntry::isResource const): Deleted.
        (WebCore::PerformanceEntry::isMark const): Deleted.
        (WebCore::PerformanceEntry::isMeasure const): Deleted.
        (WebCore::PerformanceEntry::isPaint const): Deleted.
        * page/PerformanceMark.h:
        (isType): Deleted.
        SPECIALIZE_TYPE_TRAITS_BEGIN/END doesn't work well with PerformanceNavigationTiming which inherits from PerformanceResourceTiming which both have distinct types.
        is<PerformanceResourceTiming> doesn't give us the info we need.  I replaced that with "switch (entry->performanceEntryType())" in the one place it's used, and it works like a charm.
        Also renamed type to performanceEntryType so it doesn't conflict with PerformanceNavigationTiming::type, which is specified in the idl.
        * page/PerformanceMeasure.h:
        (isType): Deleted.
        * page/PerformanceNavigationTiming.cpp: Added.
        (WebCore::toPerformanceNavigationTimingNavigationType):
        (WebCore::PerformanceNavigationTiming::PerformanceNavigationTiming):
        (WebCore::PerformanceNavigationTiming::millisecondsSinceOrigin const):
        (WebCore::PerformanceNavigationTiming::sameOriginCheckFails const):
        (WebCore::PerformanceNavigationTiming::unloadEventStart const):
        (WebCore::PerformanceNavigationTiming::unloadEventEnd const):
        (WebCore::PerformanceNavigationTiming::domInteractive const):
        (WebCore::PerformanceNavigationTiming::domContentLoadedEventStart const):
        (WebCore::PerformanceNavigationTiming::domContentLoadedEventEnd const):
        (WebCore::PerformanceNavigationTiming::domComplete const):
        (WebCore::PerformanceNavigationTiming::loadEventStart const):
        (WebCore::PerformanceNavigationTiming::loadEventEnd const):
        (WebCore::PerformanceNavigationTiming::type const):
        (WebCore::PerformanceNavigationTiming::redirectCount const):
        (WebCore::PerformanceNavigationTiming::startTime const):
        (WebCore::PerformanceNavigationTiming::duration const):
        * page/PerformanceNavigationTiming.h: Added.
        * page/PerformanceNavigationTiming.idl: Copied from Source/WebCore/page/PerformanceObserver.idl.
        * page/PerformanceObserver.cpp:
        (WebCore::PerformanceObserver::takeRecords):
        (WebCore::PerformanceObserver::disconnect):
        (WebCore::PerformanceObserver::deliver):
        (WebCore::PerformanceObserver::supportedEntryTypes):
        * page/PerformanceObserver.h:
        * page/PerformanceObserver.idl:
        * page/PerformanceObserverEntryList.cpp:
        (WebCore::PerformanceObserverEntryList::getEntriesByName const):
        * page/PerformancePaintTiming.h:
        (isType): Deleted.
        * page/PerformanceResourceTiming.cpp:
        (WebCore::PerformanceResourceTiming::PerformanceResourceTiming):
        (WebCore::PerformanceResourceTiming::nextHopProtocol const):
        (WebCore::PerformanceResourceTiming::redirectStart const):
        (WebCore::PerformanceResourceTiming::redirectEnd const):
        (WebCore::PerformanceResourceTiming::fetchStart const):
        (WebCore::PerformanceResourceTiming::domainLookupStart const):
        (WebCore::PerformanceResourceTiming::domainLookupEnd const):
        (WebCore::PerformanceResourceTiming::connectStart const):
        (WebCore::PerformanceResourceTiming::connectEnd const):
        (WebCore::PerformanceResourceTiming::secureConnectionStart const):
        (WebCore::PerformanceResourceTiming::requestStart const):
        (WebCore::PerformanceResourceTiming::responseStart const):
        (WebCore::PerformanceResourceTiming::responseEnd const):
        (WebCore::PerformanceResourceTiming::networkLoadTimeToDOMHighResTimeStamp const):
        * page/PerformanceResourceTiming.h:
        (WebCore::PerformanceResourceTiming::initiatorType const):
        (isType): Deleted.
        * page/PerformanceResourceTiming.idl:
        * platform/network/BlobResourceHandle.cpp:
        (WebCore::doNotifyFinish):
        * platform/network/NetworkLoadMetrics.h:
        * platform/network/ResourceHandleClient.h:
        (WebCore::ResourceHandleClient::didFinishLoading):
        * platform/network/SynchronousLoaderClient.cpp:
        (WebCore::SynchronousLoaderClient::didFinishLoading):
        * platform/network/SynchronousLoaderClient.h:
        * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didFinishLoading):
        Pass metrics including the response end time from NSURLConnection so we don't assert in WebKitLegacy.
        * platform/network/cocoa/NetworkLoadMetrics.mm:
        (WebCore::copyTimingData):
        Use currentRequest instead of passing in the response so we can call it from didFinishLoading, where we don't have a response stored anywhere.
        We're just looking for whether it's http or https, so the currentRequest (which is the request after all the redirects) fits our purpose.
        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::handleDataURL):
        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm:
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:didReceiveResponse:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connectionDidFinishLoading:]):

2021-05-19  Peng Liu  <peng.liu6@apple.com>

        [iOS] Video playback pauses when switching apps (video enters picture-in-picture from fullscreen)
        https://bugs.webkit.org/show_bug.cgi?id=225981

        Reviewed by Jer Noble.

        Similar to Mac, on iOS devices, we should not pause a video playback
        when the video enters picture-in-picture from fullscreen.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::shouldOverrideBackgroundPlaybackRestriction const):

2021-05-19  Sam Weinig  <weinig@apple.com>

        Remove ImageBuffer::toBGRA() and replace its uses with the more general ImageBuffer::getPixelBuffer()
        https://bugs.webkit.org/show_bug.cgi?id=225976

        Reviewed by Said Abou-Hallawa.

        Removes ImageBuffer::toBGRA() and replaces it with the more verbose (but also more clear)
        ImageBuffer::getPixelBuffer(). There were only two users of toBGRA(), MediaSample creation
        from a <canvas> and PageColorSampler. For MediaSample, we likely should not be doing
        readback this way, and should instead try to keep the data in the GPU process / on the GPU
        when possible / necessary.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::toMediaSample):
        Update calls to pass imageBuffer and share call to makeRenderingResultsAvailable().

        * page/PageColorSampler.cpp:
        (WebCore::sampleColor):
        Update ot use getPixelBuffer().

        * platform/graphics/avfoundation/objc/MediaSampleAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaSampleAVFObjC.mm:
        (WebCore::MediaSampleAVFObjC::createImageSample):
        Update MediaSampleAVFObjC to use getPixelBuffer directly().

        * platform/graphics/gstreamer/MediaSampleGStreamer.cpp:
        (WebCore::MediaSampleGStreamer::createImageSample):
        * platform/graphics/gstreamer/MediaSampleGStreamer.h:
        (WebCore::MediaSampleGStreamer::createImageSample):
        * platform/mediastream/gstreamer/MockRealtimeVideoSourceGStreamer.cpp:
        (WebCore::MockRealtimeVideoSourceGStreamer::updateSampleBuffer):
        Update MediaSampleGStreamer to use getPixelBuffer directly().

        * platform/MediaSample.h:
        Use #pragma once.

        * platform/graphics/ConcreteImageBuffer.h:
        * platform/graphics/ImageBuffer.h:
        * platform/graphics/ImageBufferBackend.cpp:
        (WebCore::ImageBufferBackend::toBGRAData const): Deleted.
        * platform/graphics/ImageBufferBackend.h:
        * platform/graphics/cairo/ImageBufferCairoSurfaceBackend.cpp:
        (WebCore::ImageBufferCairoSurfaceBackend::toBGRAData const): Deleted.
        * platform/graphics/cairo/ImageBufferCairoSurfaceBackend.h:
        * platform/graphics/cg/ImageBufferCGBitmapBackend.cpp:
        (WebCore::ImageBufferCGBitmapBackend::toBGRAData const): Deleted.
        * platform/graphics/cg/ImageBufferCGBitmapBackend.h:
        * platform/graphics/cg/ImageBufferIOSurfaceBackend.cpp:
        (WebCore::ImageBufferIOSurfaceBackend::toBGRAData const): Deleted.
        * platform/graphics/cg/ImageBufferIOSurfaceBackend.h:
        * platform/graphics/win/ImageBufferDirect2DBackend.cpp:
        (WebCore::ImageBufferDirect2DBackend::toBGRAData const): Deleted.
        * platform/graphics/win/ImageBufferDirect2DBackend.h:
        Remove toBGRA().

2021-05-19  Cameron McCormack  <heycam@apple.com>

        Remove unused GraphicsContextImpl constructor arguments
        https://bugs.webkit.org/show_bug.cgi?id=225583

        Reviewed by Simon Fraser.

        * platform/graphics/GraphicsContextImpl.cpp:
        (WebCore::GraphicsContextImpl::GraphicsContextImpl):
        * platform/graphics/GraphicsContextImpl.h:
        * platform/graphics/cairo/GraphicsContextImplCairo.cpp:
        (WebCore::GraphicsContextImplCairo::GraphicsContextImplCairo):
        * platform/graphics/displaylists/DisplayListRecorder.cpp:
        (WebCore::DisplayList::Recorder::Recorder):
        * platform/graphics/nicosia/cairo/NicosiaCairoOperationRecorder.cpp:
        (Nicosia::CairoOperationRecorder::CairoOperationRecorder):
        * platform/graphics/win/GraphicsContextImplDirect2D.cpp:
        (WebCore::GraphicsContextImplDirect2D::GraphicsContextImplDirect2D):

2021-05-19  Sam Weinig  <weinig@apple.com>

        HTMLCanvasElement toDataURL and toBlob do unnecessary data copies through a CFDataRef
        https://bugs.webkit.org/show_bug.cgi?id=225853

        Reviewed by Darin Adler.

        When trying to encode either a PixelBuffer or a ImageBuffer to an image for
        blob or dataURL creation, we were using a method that required always first
        creating a CFDataRef and then copying that CFDataRef's data into what we needed.

        Instead, we can use a callback based CGDataConsumer and some passed around
        functors to get the data directly as it is being encoded and process it as
        needed. ScopedLambda is used to avoid unnecessary inlining or allocation that
        a template based functor or WTF::Function would require respectively.

        * platform/graphics/cg/ImageBufferCGBackend.h:
        * platform/graphics/cg/ImageBufferCGBackend.cpp:
        (WebCore::ImageBufferCGBackend::toCFData const): Deleted.
        (WebCore::ImageBufferCGBackend::copyPlatformImageForEncoding const):
        Factor out PlatformImagePtr creation into its own function. This replaces the
        toCFData virtual function, and is used in conjunction with the data/dataURL
        functions in ImageBufferCGBackend to produce the encoded data.

        (WebCore::ImageBufferCGBackend::toData const):
        (WebCore::ImageBufferCGBackend::toDataURL const):
        Rework to use copyPlatformImageForEncoding and data/dataURL in ImageBufferCGBackend
        to produce the encoded data.

        * platform/graphics/cg/ImageBufferIOSurfaceBackend.h:
        * platform/graphics/cg/ImageBufferIOSurfaceBackend.cpp:
        (WebCore::ImageBufferIOSurfaceBackend::copyPlatformImageForEncoding const):
        (WebCore::ImageBufferIOSurfaceBackend::toCFData const): Deleted.
        Like toCFData before it, copyPlatformImageForEncoding is virtual allowing for this
        override in ImageBufferIOSurfaceBackend.

        * platform/graphics/cg/ImageBufferUtilitiesCG.h:
        * platform/graphics/cg/ImageBufferUtilitiesCG.cpp:
        (WebCore::encode):
        (WebCore::encodeToVector):
        (WebCore::encodeToDataURL):
        (WebCore::data):
        (WebCore::dataURL):
        (WebCore::encodeImage): Deleted.
        (WebCore::cfData): Deleted.
        (WebCore::dataVector): Deleted.
        Replace encodeImage(), which filled in a CFMutableDataRef, with overloads of data() and
        dataURL() that now use a callback based CGDataConsumer and some callback functors to 
        allow the encoded data to be consumed as it is being created. Also makes use of new 
        base64Encoded() adapter to base64 encode directly in makeString().

2021-05-19  Chris Dumez  <cdumez@apple.com>

        Drop "get" prefix from SQLiteStatement member functions as well as out-parameters
        https://bugs.webkit.org/show_bug.cgi?id=225971

        Reviewed by Darin Adler.

        Drop "get" prefix from SQLiteStatement member functions as well as out-parameters to
        modernize the code a bit and follow WebKit style.

        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
        (WebCore::IDBServer::createOrMigrateRecordsTableIfNecessary):
        (WebCore::IDBServer::SQLiteIDBBackingStore::ensureValidBlobTables):
        (WebCore::IDBServer::SQLiteIDBBackingStore::ensureValidIndexRecordsTable):
        (WebCore::IDBServer::SQLiteIDBBackingStore::ensureValidIndexRecordsIndex):
        (WebCore::IDBServer::SQLiteIDBBackingStore::ensureValidIndexRecordsRecordIndex):
        (WebCore::IDBServer::SQLiteIDBBackingStore::ensureValidObjectStoreInfoTable):
        (WebCore::IDBServer::SQLiteIDBBackingStore::migrateIndexInfoTableForIDUpdate):
        (WebCore::IDBServer::SQLiteIDBBackingStore::migrateIndexRecordsTableForIDUpdate):
        (WebCore::IDBServer::SQLiteIDBBackingStore::addExistingIndex):
        (WebCore::IDBServer::SQLiteIDBBackingStore::extractExistingDatabaseInfo):
        (WebCore::IDBServer::SQLiteIDBBackingStore::databaseNameAndVersionFromFile):
        (WebCore::IDBServer::SQLiteIDBBackingStore::deleteUnusedBlobFileRecords):
        (WebCore::IDBServer::SQLiteIDBBackingStore::deleteRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::getBlobRecordsForObjectStoreRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::getRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::getAllObjectStoreRecords):
        (WebCore::IDBServer::SQLiteIDBBackingStore::uncheckedGetIndexRecordForOneKey):
        (WebCore::IDBServer::SQLiteIDBBackingStore::getCount):
        (WebCore::IDBServer::SQLiteIDBBackingStore::uncheckedGetKeyGeneratorValue):
        (WebCore::IDBServer::SQLiteIDBBackingStore::deleteBackingStore):
        * Modules/indexeddb/server/SQLiteIDBCursor.cpp:
        (WebCore::IDBServer::SQLiteIDBCursor::internalFetchNextRecord):
        * Modules/webdatabase/Database.cpp:
        (WebCore::retrieveTextResultFromDatabase):
        (WebCore::Database::performGetTableNames):
        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::fullPathForDatabaseNoLock):
        (WebCore::DatabaseTracker::origins):
        (WebCore::DatabaseTracker::databaseNamesNoLock):
        (WebCore::DatabaseTracker::detailsForNameAndOrigin):
        (WebCore::DatabaseTracker::setDatabaseDetails):
        (WebCore::DatabaseTracker::quotaNoLock):
        (WebCore::DatabaseTracker::removeDeletedOpenedDatabases):
        * Modules/webdatabase/SQLStatement.cpp:
        (WebCore::SQLStatement::execute):
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::loadCacheGroup):
        (WebCore::ApplicationCacheStorage::loadManifestHostHashes):
        (WebCore::ApplicationCacheStorage::cacheGroupForURL):
        (WebCore::ApplicationCacheStorage::fallbackCacheGroupForURL):
        (WebCore::ApplicationCacheStorage::calculateQuotaForOrigin):
        (WebCore::ApplicationCacheStorage::calculateUsageForOrigin):
        (WebCore::ApplicationCacheStorage::calculateRemainingSizeForOriginExcludingCache):
        (WebCore::ApplicationCacheStorage::verifySchemaVersion):
        (WebCore::ApplicationCacheStorage::loadCache):
        (WebCore::ApplicationCacheStorage::manifestURLs):
        (WebCore::ApplicationCacheStorage::deleteCacheGroupRecord):
        (WebCore::ApplicationCacheStorage::checkForDeletedResources):
        (WebCore::ApplicationCacheStorage::flatFileAreaSize):
        * platform/network/curl/CookieJarDB.cpp:
        (WebCore::CookieJarDB::verifySchemaVersion):
        (WebCore::CookieJarDB::checkDatabaseValidity):
        (WebCore::CookieJarDB::searchCookies):
        (WebCore::CookieJarDB::getAllCookies):
        (WebCore::CookieJarDB::allDomains):
        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::useWALJournalMode):
        (WebCore::SQLiteDatabase::maximumSize):
        (WebCore::SQLiteDatabase::pageSize):
        (WebCore::SQLiteDatabase::freeSpaceSize):
        (WebCore::SQLiteDatabase::totalSize):
        (WebCore::SQLiteDatabase::clearAllTables):
        (WebCore::SQLiteDatabase::turnOnIncrementalAutoVacuum):
        * platform/sql/SQLiteStatement.cpp:
        (WebCore::SQLiteStatement::columnName):
        (WebCore::SQLiteStatement::columnValue):
        (WebCore::SQLiteStatement::columnText):
        (WebCore::SQLiteStatement::columnDouble):
        (WebCore::SQLiteStatement::columnInt):
        (WebCore::SQLiteStatement::columnInt64):
        (WebCore::SQLiteStatement::columnBlobAsString):
        (WebCore::SQLiteStatement::columnBlob):
        * platform/sql/SQLiteStatement.h:
        * platform/win/SearchPopupMenuDB.cpp:
        (WebCore::SearchPopupMenuDB::loadRecentSearches):
        (WebCore::SearchPopupMenuDB::checkDatabaseValidity):
        (WebCore::SearchPopupMenuDB::verifySchemaVersion):
        * workers/service/server/RegistrationDatabase.cpp:
        (WebCore::RegistrationDatabase::ensureValidRecordsTable):
        (WebCore::RegistrationDatabase::importRecords):

2021-05-19  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] Pull ServicesOverlayController::Highlight out into a separate helper class
        https://bugs.webkit.org/show_bug.cgi?id=225968

        Reviewed by Tim Horton.

        Refactor some code for painting data detector highlights (`DDHighlightRef`), by pulling what is currently
        `ServicesOverlayController::Highlight` out into a separate helper class. In a future patch, I plan on using this
        functionality for the image overlay controller to support rendering data detector highlights there.

        This patch also makes some minor adjustments:

        -   Make `DataDetectorHighlight` capable of being stored in a `WeakPtr`, and have `ServicesOverlayController`
            hold on to a `WeakHashSet<DataDetectorHighlight>` instead of a hash set of raw pointers. This additionally
            makes it unnecessary to add methods for `DataDetectorHighlight` to notify `ServicesOverlayController` upon
            creation or destruction, since we can simply add the newly created highlight to the weak set after creating
            it, and since it's a `WeakPtr`, it will get cleaned up upon destruction.

        -   Make DataDetectorHighlight::Type an enum class, and make `m_dirtyHighlightTypes` an `OptionSet` instead of
            a raw bitmask.

        -   Use `auto` in a few places where the type is apparent (e.g. in some places where we use `adoptCF`).

        -   Make `highlightFadeAnimationDuration` a `WTF::Seconds` instead of a raw floating point value.

        -   Add a FIXME in `DataDetectorHighlight::paintContents` about the need to refactor this painting logic so that
            it does *not* use the platform `CGContextRef` directly.

        No change in behavior.

        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * page/mac/ServicesOverlayController.h:
        (WebCore::ServicesOverlayController::activeHighlight const):
        (WebCore::ServicesOverlayController::Highlight::ddHighlight const): Deleted.
        (WebCore::ServicesOverlayController::Highlight::range const): Deleted.
        (WebCore::ServicesOverlayController::Highlight::layer const): Deleted.
        (WebCore::ServicesOverlayController::Highlight::type const): Deleted.
        * page/mac/ServicesOverlayController.mm:
        (WebCore::ServicesOverlayController::~ServicesOverlayController):
        (WebCore::ServicesOverlayController::selectionRectsDidChange):
        (WebCore::ServicesOverlayController::selectedTelephoneNumberRangesChanged):
        (WebCore::ServicesOverlayController::invalidateHighlightsOfType):
        (WebCore::ServicesOverlayController::buildPotentialHighlightsIfNeeded):
        (WebCore::ServicesOverlayController::mouseIsOverHighlight const):
        (WebCore::ServicesOverlayController::remainingTimeUntilHighlightShouldBeShown const):
        (WebCore::ServicesOverlayController::removeAllPotentialHighlightsOfType):
        (WebCore::ServicesOverlayController::buildPhoneNumberHighlights):
        (WebCore::ServicesOverlayController::buildSelectionHighlight):
        (WebCore::ServicesOverlayController::replaceHighlightsOfTypePreservingEquivalentHighlights):
        (WebCore::ServicesOverlayController::findTelephoneNumberHighlightContainingSelectionHighlight):
        (WebCore::ServicesOverlayController::determineActiveHighlight):
        (WebCore::ServicesOverlayController::mouseEvent):
        (WebCore::ServicesOverlayController::didScrollFrame):
        (WebCore::ServicesOverlayController::handleClick):
        (WebCore::ServicesOverlayController::shouldRemoveHighlightLayerAfterFadingOut const):
        (WebCore::ServicesOverlayController::Highlight::createForSelection): Deleted.
        (WebCore::ServicesOverlayController::Highlight::createForTelephoneNumber): Deleted.
        (WebCore::ServicesOverlayController::Highlight::Highlight): Deleted.
        (WebCore::ServicesOverlayController::Highlight::~Highlight): Deleted.
        (WebCore::ServicesOverlayController::Highlight::setDDHighlight): Deleted.
        (WebCore::ServicesOverlayController::Highlight::invalidate): Deleted.
        (WebCore::ServicesOverlayController::Highlight::notifyFlushRequired): Deleted.
        (WebCore::ServicesOverlayController::Highlight::paintContents): Deleted.
        (WebCore::ServicesOverlayController::Highlight::deviceScaleFactor const): Deleted.
        (WebCore::ServicesOverlayController::Highlight::fadeIn): Deleted.
        (WebCore::ServicesOverlayController::Highlight::fadeOut): Deleted.
        (WebCore::ServicesOverlayController::Highlight::didFinishFadeOutAnimation): Deleted.
        (WebCore::ServicesOverlayController::highlightsAreEquivalent): Deleted.
        (WebCore::ServicesOverlayController::didCreateHighlight): Deleted.
        (WebCore::ServicesOverlayController::willDestroyHighlight): Deleted.
        * platform/mac/DataDetectorHighlight.h: Added.
        (WebCore::DataDetectorHighlightClient::shouldRemoveHighlightLayerAfterFadingOut const):
        (WebCore::DataDetectorHighlight::highlight const):
        (WebCore::DataDetectorHighlight::range const):
        (WebCore::DataDetectorHighlight::layer const):
        (WebCore::DataDetectorHighlight::type const):
        * platform/mac/DataDetectorHighlight.mm: Added.
        (WebCore::DataDetectorHighlight::createForSelection):
        (WebCore::DataDetectorHighlight::createForTelephoneNumber):
        (WebCore::DataDetectorHighlight::DataDetectorHighlight):
        (WebCore::DataDetectorHighlight::setHighlight):
        (WebCore::DataDetectorHighlight::invalidate):
        (WebCore::DataDetectorHighlight::notifyFlushRequired):
        (WebCore::DataDetectorHighlight::paintContents):
        (WebCore::DataDetectorHighlight::deviceScaleFactor const):
        (WebCore::DataDetectorHighlight::fadeIn):
        (WebCore::DataDetectorHighlight::fadeOut):
        (WebCore::DataDetectorHighlight::didFinishFadeOutAnimation):
        (WebCore::areEquivalent):

2021-05-18  Darin Adler  <darin@apple.com>

        Move CFStringRef and NSString support from StringBuilder into StringConcatenateCF
        https://bugs.webkit.org/show_bug.cgi?id=225839

        Reviewed by Sam Weinig.

        * Modules/airplay/WebMediaSessionManager.cpp:
        (WebCore::mediaProducerStateString): Use StringBuilder exclusively instead of
        mixing it with makeString. Also updated for StringBuilder::shrink name.
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::stripTrailingNewline): Updated for StringBuilder::shrink name.

        * page/CaptionUserPreferencesMediaAF.cpp:
        (WebCore::CaptionUserPreferencesMediaAF::captionsTextColor const): Tweaked
        coding style a bit.
        (WebCore::appendCSS): Use variadic StringBuilder::append instead of many
        separate calls.
        (WebCore::CaptionUserPreferencesMediaAF::captionsDefaultFontCSS const):
        Tweaked coding style a bit, and use variadic StrinBuilder::append calls
        to reduce the number of calls and streamline the code.
        (WebCore::CaptionUserPreferencesMediaAF::captionsStyleSheetOverride const):
        Ditto. Also removed unnecessary checks that strings are empty before appending.

        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::synchronousScrollingReasonsAsText):
        Updated for StringBuilder::shrink name.

        * platform/LayoutUnit.h: Updated for saturatedSum/Difference names.

        * platform/network/cocoa/NetworkStorageSessionCocoa.mm:
        (WebCore::NetworkStorageSession::cookiesForSession const): Tweaked codin
        style a bit, and use variadic StrinBuilder::append calls to reduce the
        number of calls and streamline the code.

        * rendering/RenderCounter.cpp:
        (WebCore::planCounter): Updated for saturatedSum name.
        * style/StyleBuilderCustom.h:
        (WebCore::Style::BuilderCustom::applyValueCounter): Ditto.

        * svg/SVGPathStringBuilder.cpp:
        (WebCore::SVGPathStringBuilder::result): Updated for StringBuilder::shrink name.
        * testing/Internals.cpp:
        (WebCore::Internals::pageMediaState): Ditto.
        * xml/XSLTProcessorLibxslt.cpp:
        (WebCore::saveResultToString): Ditto.

2021-05-19  Sam Weinig  <weinig@apple.com>

        Update Base64 encoding/decoding to match more modern WebKit conventions
        https://bugs.webkit.org/show_bug.cgi?id=225920

        Reviewed by Chris Dumez.

        - Updates to use new signatures for base64 encoding/decoding including
          utilizing the string type adaptor and makeString.
        - Replace out parameter based getDefaultWebCryptoMasterKey() with 
          Optional<Vector<uint8_t>> defaultWebCryptoMasterKey().
        - Update synchronous loading code path to use uint8_t* consistently for
          data buffer representation.
        - Replace out parameters in quotedPrintableEncode/quotedPrintableDecode
          with Optional.

        * Modules/encryptedmedia/InitDataRegistry.cpp:
        (WebCore::extractKeyIDsKeyids):
        Update to use new base64URLDecode.

        (WebCore::sanitizeKeyids): 
        Update to use new base64URLEncodeToString()

        * Modules/encryptedmedia/legacy/LegacyCDMSessionClearKey.cpp:
        (WebCore::CDMSessionClearKey::update): 
        Update to use new base64Decode().

        * Modules/plugins/QuickTimePluginReplacement.mm:
        (WebCore::jsValueWithDataInContext):
        (WebCore::jsValueWithAVMetadataItemInContext):
        Update to use new base64EncodeToString(). Replace string concatentation
        using operator+ with makeString().

        * Modules/webauthn/AuthenticatorCoordinator.cpp:
        (WebCore::AuthenticatorCoordinatorInternal::produceClientDataJson):
        Update to use new base64URLEncodeToString().

        * Modules/webauthn/PublicKeyCredential.cpp:
        (WebCore::PublicKeyCredential::PublicKeyCredential):
        Update to use new base64URLEncodeToString().

        * Modules/websockets/WebSocketHandshake.cpp:
        (WebCore::generateSecWebSocketKey):
        (WebCore::WebSocketHandshake::getExpectedWebSocketAccept):
        Update to use new base64URLEncodeToString().

        * crypto/SerializedCryptoKeyWrap.h:
        Change from outparameter based getDefaultWebCryptoMasterKey() to new
        Optional<Vector<uint8_t>> defaultWebCryptoMasterKey().

        * crypto/gcrypt/CryptoKeyECGCrypt.cpp:
        (WebCore::CryptoKeyEC::platformAddFieldElements const):
        Update to use new base64URLEncodeToString().

        * crypto/gcrypt/SerializedCryptoKeyWrapGCrypt.cpp:
        (WebCore::defaultWebCryptoMasterKey):
        (WebCore::getDefaultWebCryptoMasterKey): Deleted.
        Update for new defaultWebCryptoMasterKey() signature.

        * crypto/keys/CryptoKeyAES.cpp:
        (WebCore::CryptoKeyAES::importJwk):
        (WebCore::CryptoKeyAES::exportJwk const):
        Update to use new base64URLDecode / base64URLEncodeToString().
        
        * crypto/keys/CryptoKeyEC.cpp:
        (WebCore::CryptoKeyEC::importJwk):
        Update to use new base64URLDecode.

        * crypto/keys/CryptoKeyHMAC.cpp:
        (WebCore::CryptoKeyHMAC::importJwk):
        (WebCore::CryptoKeyHMAC::exportJwk const):
        Update to use new base64URLDecode / base64URLEncodeToString().

        * crypto/keys/CryptoKeyRSA.cpp:
        (WebCore::CryptoKeyRSA::importJwk):
        (WebCore::CryptoKeyRSA::exportJwk const):
        Update to use new base64URLDecode / base64URLEncodeToString().

        * crypto/mac/CryptoKeyECMac.cpp:
        (WebCore::CryptoKeyEC::platformAddFieldElements const):
        Update to use new base64URLEncodeToString().

        * crypto/mac/SerializedCryptoKeyWrapMac.mm:
        (WebCore::createAndStoreMasterKey):
        (WebCore::findMasterKey):
        (WebCore::defaultWebCryptoMasterKey):
        (WebCore::getDefaultWebCryptoMasterKey): Deleted.
        Update for new defaultWebCryptoMasterKey() signature.

        * crypto/openssl/SerializedCryptoKeyWrapOpenSSL.cpp:
        (WebCore::defaultWebCryptoMasterKey):
        (WebCore::getDefaultWebCryptoMasterKey): Deleted.
        Update for new defaultWebCryptoMasterKey() signature.

        * fileapi/FileReaderLoader.cpp:
        (WebCore::FileReaderLoader::convertToDataURL):
        Update to use new base64EncodeToString().

        * inspector/DOMPatchSupport.cpp:
        (WebCore::DOMPatchSupport::createDigest):
        Update to use new base64EncodeToString().

        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::showCertificate):
        Update to use new base64URLDecode / base64URLEncodeToString().

        * inspector/NetworkResourcesData.cpp:
        (WebCore::NetworkResourcesData::ResourceData::decodeDataToContent):
        Update to use new base64EncodeToString().

        * inspector/agents/InspectorDOMAgent.cpp:
        (WebCore::computeContentSecurityPolicySHA256Hash):
        Update to use new base64Decode / base64EncodeToString().

        * inspector/agents/InspectorNetworkAgent.cpp:
        (WebCore::Inspector::buildWebSocketMessage):
        (WebCore::InspectorNetworkAgent::didReceiveData):
        (WebCore::InspectorNetworkAgent::getSerializedCertificate):
        (WebCore::InspectorNetworkAgent::interceptWithRequest):
        (WebCore::InspectorNetworkAgent::interceptWithResponse):
        (WebCore::InspectorNetworkAgent::interceptRequestWithResponse):
        (WebCore::InspectorNetworkAgent::cachedResourceContent):
        Update to use new base64Decode / base64EncodeToString().

        * inspector/agents/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::dataContent):
        (WebCore::InspectorPageAgent::archive):
        Update to use new base64EncodeToString().

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadResourceSynchronously):
        Switch to using Vector<uint8_t> buffer to match new loadResourceSynchronously
        signature.

        * loader/LoaderStrategy.h:
        Switch to using Vector<uint8_t> for the data buffer.

        * loader/PrivateClickMeasurement.cpp:
        (WebCore::PrivateClickMeasurement::EphemeralSourceNonce::isValid const):
        Update to use new base64URLDecode.

        * loader/ResourceCryptographicDigest.cpp:
        (WebCore::parseCryptographicDigestImpl):
        (WebCore::decodeEncodedResourceCryptographicDigest):
        Update to use new base64Decode.

        * loader/archive/mhtml/MHTMLArchive.cpp:
        (WebCore::MHTMLArchive::generateMHTMLData):
        Switch to using new base64Encode and new quotedPrintableEncode.

        * loader/archive/mhtml/MHTMLParser.cpp:
        (WebCore::MHTMLParser::parseNextPart):
        Switch to using new base64Decode and new quotedPrintableDecode.

        * loader/cocoa/PrivateClickMeasurementCocoa.mm:
        (WebCore::PrivateClickMeasurement::calculateAndUpdateSourceUnlinkableToken):
        (WebCore::PrivateClickMeasurement::calculateAndUpdateSourceSecretToken):
        Update to use new base64URLDecode / base64URLEncodeToString().

        * page/Base64Utilities.cpp:
        (WebCore::Base64Utilities::btoa):
        (WebCore::Base64Utilities::atob):
        Update to use new base64Decode / base64EncodeToString().
    
        * page/Page.cpp:
        (WebCore::Page::userStyleSheetLocationChanged):
        Update to use new base64Decode.

        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::append):
        * platform/SharedBuffer.h:
        Add overload for append which allows passing in a uint8_t*.

        * platform/encryptedmedia/clearkey/CDMClearKey.cpp:
        (WebCore::parseLicenseFormat):
        (WebCore::extractKeyidsFromCencInitData):
        (WebCore::extractKeyIdFromWebMInitData):
        (WebCore::CDMInstanceSessionClearKey::removeSessionData):
        Update to use new base64URLDecode / base64URLEncodeToString().

        * platform/graphics/avfoundation/CDMFairPlayStreaming.cpp:
        (WebCore::extractSinfData):
        Update to use new base64Decode.

        * platform/graphics/avfoundation/objc/CDMInstanceFairPlayStreamingAVFObjC.mm:
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::requestLicense):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::updateLicense):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::didProvideRequests):
        Update to use new base64Decode / base64EncodeToString().

        * platform/graphics/cairo/ImageBufferCairoBackend.cpp:
        (WebCore::ImageBufferCairoBackend::toDataURL const):
        Update to use new base64EncodeToString().

        * platform/graphics/cg/ImageBufferUtilitiesCG.cpp:
        (WebCore::dataURL):
        Update to use new base64EncodeToString().

        * platform/graphics/win/FontCustomPlatformData.cpp:
        (WebCore::createUniqueFontName):
        Update to use new base64EncodeToString().

        * platform/graphics/win/FontCustomPlatformDataCairo.cpp:
        (WebCore::createUniqueFontName):
        Update to use new base64EncodeToString().

        * platform/mac/SSLKeyGeneratorMac.mm:
        (WebCore::signedPublicKeyAndChallengeString):
        Update to use new base64EncodeToString().

        * platform/network/BlobRegistryImpl.cpp:
        (WebCore::loadBlobResourceSynchronously):
        Switch to using Vector<uint8_t> buffer to match new loadResourceSynchronously
        signature.

        * platform/network/BlobResourceHandle.cpp:
        * platform/network/BlobResourceHandle.h:
        (WebCore::BlobResourceHandle::loadResourceSynchronously):
        Switch to using Vector<uint8_t> buffer to match new loadResourceSynchronously
        signature.

        * platform/network/CredentialBase.cpp:
        * platform/network/CredentialBase.h:
        (WebCore::CredentialBase::serializationForBasicAuthorizationHeader const):
        Add helper to construct Basic auth header to replace duplicated logic in
        call sites.

        * platform/network/DataURLDecoder.cpp:
        (WebCore::DataURLDecoder::decodeBase64):
        (WebCore::DataURLDecoder::decodeEscaped):
        (WebCore::DataURLDecoder::decodeSynchronously):
        * platform/network/DataURLDecoder.h:
        Update to use new base64Decode.

        * platform/network/ResourceHandle.cpp:
        * platform/network/ResourceHandle.h:
        Switch to using Vector<uint8_t> for the data buffer in the synchronous load.

        * platform/network/SynchronousLoaderClient.cpp:
        (WebCore::SynchronousLoaderClient::didReceiveData):
        * platform/network/SynchronousLoaderClient.h:
        Switch to using Vector<uint8_t> buffer to match new loadResourceSynchronously
        signature.

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::applyBasicAuthorizationHeader):
        Use new serializationForBasicAuthorizationHeader() helper.

        (WebCore::ResourceHandle::platformLoadResourceSynchronously):
        Switch to using Vector<uint8_t> for the data buffer in the synchronous load.

        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::platformLoadResourceSynchronously):
        (WebCore::ResourceHandle::handleDataURL):
        Switch to using Vector<uint8_t> for the data buffer in the synchronous load.

        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::applyBasicAuthorizationHeader):
        Use new serializationForBasicAuthorizationHeader() helper.

        (WebCore::ResourceHandle::platformLoadResourceSynchronously):
        Switch to using Vector<uint8_t> for the data buffer in the synchronous load.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandle::platformLoadResourceSynchronously):
        Switch to using Vector<uint8_t> for the data buffer in the synchronous load.

        * platform/network/soup/SoupNetworkSession.cpp:
        (WebCore::HostTLSCertificateSet::computeCertificateHash):
        Update to use new base64EncodeToString().

        * platform/text/DecodeEscapeSequences.h:
        (WebCore::decodeURLEscapeSequencesAsData):
        Switch to returning Vector<uint8_t>.

        * platform/text/QuotedPrintable.cpp:
        * platform/text/QuotedPrintable.h:
        (WebCore::lengthOfLineEndingAtIndex):
        (WebCore::quotedPrintableEncode):
        (WebCore::quotedPrintableDecode):
        Replace uses of Vector<char> with Vector<uint8_t> and the out parameters
        with Optional return values.

        * platform/win/SSLKeyGeneratorWin.cpp:
        (WebCore::signedPublicKeyAndChallengeString):
        Update to use new base64EncodeToString().

        * workers/service/server/SWScriptStorage.cpp:
        (WebCore::SWScriptStorage::sha2Hash const):
        Update to use new base64URLEncodeToString().

2021-05-19  Devin Rousso  <drousso@apple.com>

        [Apple Pay] use a `dictionary ApplePayPaymentMethodModeDetails` instead of a raw `JSObject`
        https://bugs.webkit.org/show_bug.cgi?id=225903
        <rdar://problem/78134060>

        Reviewed by Andy Estes.

        No change in functionality.

        * Modules/applepay/ApplePayPaymentMethodModeDetails.idl: Added.
        * Modules/applepay/ApplePayPaymentMethodModeDetails.h: Added.

        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp:
        (WebCore::ApplePayPaymentHandler::didChangePaymentMethodMode):

        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * PlatformMac.cmake:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:

2021-05-19  Alan Bujtas  <zalan@apple.com>

        Calculated width percent loses the floating point and cause line wrap
        https://bugs.webkit.org/show_bug.cgi?id=225962

        Reviewed by Antti Koivisto.

        Length::nonNanCalculatedValue unexpectedly floors non-integral values.

        Test: fast/inline/unexpected-line-wrap-with-calc.html

        * platform/Length.cpp:
        (WebCore::Length::nonNanCalculatedValue const):
        * platform/Length.h:

2021-05-19  Chris Dumez  <cdumez@apple.com>

        [Hardening] CARingBuffer should validate the storage size before adopting it
        https://bugs.webkit.org/show_bug.cgi?id=225928
        <rdar://73575595>

        Reviewed by Jer Noble.

        We use a lot of SharedMemory-backed CARingBuffers. The pattern is that a process creates the
        SharedMemory then sends a SharedMemory::Handle to another process, who adopts it as storage
        for its CARingBuffer. Because the process that sends us the SharedMemory::Handle may not be
        trusted, we need to validate that the size of the storage is sufficient based on the
        CARingBuffer's format & frameCount.

        * platform/audio/cocoa/CARingBuffer.cpp:
        (WebCore::computeCapacityBytes):
        (WebCore::computeSizeForBuffers):
        (WebCore::CARingBuffer::adoptStorage):
        (WebCore::CARingBuffer::initializeAfterAllocation):
        (WebCore::CARingBuffer::allocate):
        (WebCore::CARingBufferStorageVector::allocate):
        * platform/audio/cocoa/CARingBuffer.h:

2021-05-19  Jer Noble  <jer.noble@apple.com>

        [Mac] MSE-based video pauses when put in background; PiP context menu disabled
        https://bugs.webkit.org/show_bug.cgi?id=225958
        <rdar://78130303>

        Reviewed by Eric Carlson.

        Test: media/media-source/media-source-has-audio-video.html

        In r277116, in order to reduce the CPU usage incurred when pushing state changes from
        the GPU process to the WebContent process, state changes to `hasAudio` and `hasVideo`
        were now only updated when the MediaPlayer indicated that its `characteristicsChanged()`.
        However, in SourceBufferPrivateAVFObjC, this call was performed too early, before the
        SourceBuffer in the WebContent process had informed SourceBufferPrivate of newly added
        audio and video tracks. Thus the cached values of `hasAudio` and `hasVideo` inside the
        WebContent process were never updated.

        Call `characteristicsChanged()` from the callback handler of `didReceiveInitializationSegment()`,
        which will be called only after the WebContent process completes its handling of the
        new initialization segment, which includes telling the SourceBufferPrivate in the GPU
        process about newly added audio and video tracks.

        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::didParseInitializationData):

2021-05-19  Antti Koivisto  <antti@apple.com>

        Factor pseudo class invalidation code in Document::updateHoverActiveState into a lambda
        https://bugs.webkit.org/show_bug.cgi?id=225966

        Reviewed by Sam Weinig.

        Cleanup.

        * dom/Document.cpp:
        (WebCore::Document::updateHoverActiveState):

2021-05-19  Chris Dumez  <cdumez@apple.com>

        Fix flaky assertion hit under AudioSummingJunction::removeOutput()
        https://bugs.webkit.org/show_bug.cgi?id=225951

        Reviewed by Eric Carlson.

        Temporarily disable assertion preventing heap allocations on the audio thread
        in AudioSummingJunction::removeOutput() as it is flakily hitting on the bots.

        * Modules/webaudio/AudioSummingJunction.cpp:
        (WebCore::AudioSummingJunction::removeOutput):

2021-05-19  Wenson Hsieh  <wenson_hsieh@apple.com>

        [GPU Process] Add more bounds checking and input validation in DisplayListIterator
        https://bugs.webkit.org/show_bug.cgi?id=225937
        rdar://71848559

        Reviewed by Ryosuke Niwa.

        Harden logic for iterating display list items.

        1.  Check that the item type enum is valid after reading it from the cursor.
        2.  In the case of out-of-line items, verify that the data length of the encoded object is limited to a
            reasonable size (4 GB) and does not exceed the capacity of the current item buffer before attempting to read
            and decode the item.

        Note that in all cases, validation failure results in web process termination via a MESSAGE_CHECK initiated by
        the GPU Process.

        * platform/graphics/displaylists/DisplayListIterator.cpp:
        (WebCore::DisplayList::DisplayList::Iterator::updateCurrentItem):

        Note that this additionally caps the size of any given out-of-line display list item to the (comfortably large)
        numerical limit of `uint32_t`.

2021-05-19  Youenn Fablet  <youenn@apple.com>

        ASSERTION FAILED: unwrapParamsOrException.exception().code() != ExistingExceptionError on http/wpt/preload/change-link-rel-attribute.html
        https://bugs.webkit.org/show_bug.cgi?id=224845
        <rdar://problem/76928843>

        Reviewed by Mark Lam.

        Covered by existing tests.

        * crypto/SubtleCrypto.cpp:
        (WebCore::SubtleCrypto::unwrapKey):
        Remove debug assertion since there are valid cases where it can happen.

2021-05-19  Rob Buis  <rbuis@igalia.com>

        https://bugs.webkit.org/show_bug.cgi?id=225964
        Fix flex-aspect-ratio-002+004.html

        Reviewed by Sergio Villar Senin.

        Flex should not do transferred size suggestion for non-replaced aspect-ratio items:
        https://drafts.csswg.org/css-flexbox-1/#min-size-auto

        Tests: imported/web-platform-tests/css/css-sizing/aspect-ratio/flex-aspect-ratio-002.html
               imported/web-platform-tests/css/css-sizing/aspect-ratio/flex-aspect-ratio-004.html


        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::adjustChildSizeForMinAndMax):

2021-05-18  Cameron McCormack  <heycam@apple.com>

        Record gradient and pattern filled canvas text in the correct coordinate system.
        https://bugs.webkit.org/show_bug.cgi?id=222881
        <rdar://75155310>

        Reviewed by Myles C. Maxfield.

        When we draw canvas text with a gradient or pattern, we use
        GraphicsContext::clipToDrawingCommands to set up a mask, which
        we then draw a filled rectangle with. When GPUP canvas rendering is
        enabled, Recorder::clipToDrawingCommands needs to ensure that the
        commands that draw the text are recorded in a coordinate system that
        matches the one that will be used to draw into the mask ImageBuffer
        during replaying. (And for complete correctness, an otherwise fresh
        GraphicsContext must be used for recording the text drawing commands,
        since it's possible other GraphicsContext state could be
        introspected.)

        So we handle this by setting up a nested display list recorder,
        targeting the same DisplayList but with a fresh GraphicsContext with
        the right initial CTM, to record the nested drawing commands into.

        The refactoring in https://trac.webkit.org/changeset/273291/webkit
        dropped some code that set up the CTM for the nested drawing commands,
        which is restored here.

        * html/canvas/CanvasRenderingContext2DBase.cpp:
        (WebCore::CanvasRenderingContext2DBase::drawTextUnchecked):
        * platform/graphics/displaylists/DisplayListDrawGlyphsRecorder.h:
        (WebCore::DisplayList::DrawGlyphsRecorder::drawGlyphsDeconstruction const):
        * platform/graphics/displaylists/DisplayListRecorder.cpp:
        (WebCore::DisplayList::Recorder::Recorder):
        (WebCore::DisplayList::Recorder::~Recorder):
        (WebCore::DisplayList::Recorder::clipToDrawingCommands):
        * platform/graphics/displaylists/DisplayListRecorder.h:

2021-05-18  Chris Dumez  <cdumez@apple.com>

        Use WTF::Locker for locking BaseAudioContext's graph lock
        https://bugs.webkit.org/show_bug.cgi?id=225935

        Reviewed by Sam Weinig.

        Use WTF::Locker for locking BaseAudioContext's graph lock instead of our own AutoLocker.
        Also use WTF::RecursiveLock instead of duplicating the recursive locking logic inside
        BaseAudioContext. This means we no longer need lock() / tryLock() / unlock() functions
        on BaseAudioContext. We now expose the BaseAudioContext's RecursiveLock via a graphLock()
        getter and the caller sites can just use a Locker.

        * Modules/webaudio/AudioBufferSourceNode.cpp:
        (WebCore::AudioBufferSourceNode::setBuffer):
        * Modules/webaudio/AudioNode.cpp:
        (WebCore::AudioNode::connect):
        (WebCore::AudioNode::disconnect):
        (WebCore::AudioNode::setChannelCount):
        (WebCore::AudioNode::setChannelCountMode):
        (WebCore::AudioNode::setChannelInterpretation):
        (WebCore::AudioNode::enableOutputsIfNecessary):
        (WebCore::AudioNode::decrementConnectionCount):
        (WebCore::AudioNode::deref):
        * Modules/webaudio/AudioWorkletNode.cpp:
        (WebCore::AudioWorkletNode::create):
        * Modules/webaudio/BaseAudioContext.cpp:
        (WebCore::BaseAudioContext::uninitialize):
        (WebCore::BaseAudioContext::refSourceNode):
        (WebCore::BaseAudioContext::addDeferredDecrementConnectionCount):
        (WebCore::BaseAudioContext::handlePreRenderTasks):
        (WebCore::BaseAudioContext::outputPosition):
        (WebCore::BaseAudioContext::handlePostRenderTasks):
        (WebCore::BaseAudioContext::deleteMarkedNodes):
        (WebCore::BaseAudioContext::removeMarkedSummingJunction):
        (WebCore::BaseAudioContext::handleDirtyAudioSummingJunctions):
        (WebCore::BaseAudioContext::handleDirtyAudioNodeOutputs):
        * Modules/webaudio/BaseAudioContext.h:
        (WebCore::BaseAudioContext::graphLock):
        (WebCore::BaseAudioContext::isGraphOwner const):
        * Modules/webaudio/ChannelMergerNode.cpp:
        (WebCore::ChannelMergerNode::ChannelMergerNode):
        * Modules/webaudio/ConvolverNode.cpp:
        (WebCore::ConvolverNode::setBuffer):
        * Modules/webaudio/MediaElementAudioSourceNode.cpp:
        (WebCore::MediaElementAudioSourceNode::setFormat):
        * Modules/webaudio/MediaStreamAudioSourceNode.cpp:
        (WebCore::MediaStreamAudioSourceNode::setFormat):
        * Modules/webaudio/OfflineAudioContext.cpp:
        (WebCore::OfflineAudioContext::suspendRendering):
        (WebCore::OfflineAudioContext::shouldSuspend):
        (WebCore::OfflineAudioContext::didSuspendRendering):
        * Modules/webaudio/OfflineAudioContext.h:
        * Modules/webaudio/WaveShaperNode.cpp:
        (WebCore::WaveShaperNode::setOversample):

2021-05-18  Alan Bujtas  <zalan@apple.com>

        The containing block for a fixed renderer has to be a type of RenderBlock
        https://bugs.webkit.org/show_bug.cgi?id=225924
        <rdar://77968716>

        Reviewed by Simon Fraser.

        While an atomic inline level box with layout containment can certainly be the containing block for fixed (and absolute) boxes,
        the current render tree logic requires a containing block to be the type of RenderBlock.

        * rendering/RenderElement.cpp:
        (WebCore::nearestNonAnonymousContainingBlockIncludingSelf): make this function static so that we can call it from containingBlockForFixedPosition()
        (WebCore::RenderElement::containingBlockForFixedPosition const):
        (WebCore::RenderElement::containingBlockForAbsolutePosition const):

2021-05-18  Simon Fraser  <simon.fraser@apple.com>

        Layer names should not contain object addresses in release builds
        https://bugs.webkit.org/show_bug.cgi?id=225926

        Reviewed by Geoffrey Garen.

        Avoid putting object addresses in layer name strings (which end up on CALayers)
        to reduce string bloat.

        RenderLayer::name() now calls a description() function on RenderObject, which
        in turn calls the same on its Node. These description() functions don't put
        object addresses in the string.

        Alternatives considered: #ifdeffing in the debugDescription() implementations:
        I decided not to because calling a function called debugFoo in release seems
        wrong. It might also be useful to dump the string with addresses when debugging
        in a release build.

        Renaming debugDescription() to description() and passing a behavior enum:
        Seems about as complicated as this change.

        * dom/Element.cpp:
        (WebCore::appendAttributes):
        (WebCore::Element::description const):
        (WebCore::Element::debugDescription const):
        * dom/Element.h:
        * dom/Node.cpp:
        (WebCore::Node::description const):
        * dom/Node.h:
        * dom/Text.cpp:
        (WebCore::appendTextRepresentation):
        (WebCore::Text::description const):
        (WebCore::Text::debugDescription const):
        * dom/Text.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::name const):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::description const):
        * rendering/RenderObject.h:

2021-05-18  Jer Noble  <jer.noble@apple.com>

        [GPUP] RemoteAudioSession calls into AVAudioSession when GPUP is enabled, causing hangs
        https://bugs.webkit.org/show_bug.cgi?id=223564
        <rdar://74750291>

        Reviewed by Eric Carlson.

        Now that AudioSession can have two different implementations at runtime, it should be an
        actual virtual class, whose concrete, per-platform implementations are derivations of the
        base class. Make AudioSessionIOS and AudioSessionMac true subclasses of AudioSession, and
        allow RemoteAudioSession to derive from that same base class (rather than AudioSessionIOS
        or AudioSessionMac).

        Also ensure AudioSessionIOS or AudioSessionMac is not accidentally created when calling
        AudioSession::setSharedSession() by making the NeverDestroyed object holding the session
        an Optional, and only lazily creating the session from AudioSession::sharedSession() if
        one has not been explicitly set already.

        * platform/audio/AudioSession.cpp:
        (WebCore::sharedAudioSession):
        (WebCore::AudioSession::create):
        (WebCore::AudioSession::sharedSession):
        (WebCore::AudioSession::addInterruptionObserver):
        (WebCore::AudioSession::removeInterruptionObserver):
        (WebCore::AudioSession::beginInterruption):
        (WebCore::AudioSession::endInterruption):
        (WebCore::AudioSession::setIsPlayingToBluetoothOverride):
        (WebCore::AudioSession::AudioSession): Deleted.
        * platform/audio/AudioSession.h:
        * platform/audio/ios/AudioSessionIOS.h: Added.
        * platform/audio/ios/AudioSessionIOS.mm:
        (WebCore::AudioSessionIOS::AudioSessionIOS):
        (WebCore::AudioSessionIOS::~AudioSessionIOS):
        (WebCore::AudioSessionIOS::setCategory):
        (WebCore::AudioSessionIOS::category const):
        (WebCore::AudioSessionIOS::routeSharingPolicy const):
        (WebCore::AudioSessionIOS::routingContextUID const):
        (WebCore::AudioSessionIOS::setCategoryOverride):
        (WebCore::AudioSessionIOS::categoryOverride const):
        (WebCore::AudioSessionIOS::sampleRate const):
        (WebCore::AudioSessionIOS::bufferSize const):
        (WebCore::AudioSessionIOS::numberOfOutputChannels const):
        (WebCore::AudioSessionIOS::maximumNumberOfOutputChannels const):
        (WebCore::AudioSessionIOS::tryToSetActiveInternal):
        (WebCore::AudioSessionIOS::preferredBufferSize const):
        (WebCore::AudioSessionIOS::setPreferredBufferSize):
        (WebCore::AudioSessionIOS::isMuted const):
        (WebCore::AudioSessionIOS::handleMutedStateChange):
        (WebCore::AudioSessionIOS::addInterruptionObserver):
        (WebCore::AudioSessionIOS::removeInterruptionObserver):
        (WebCore::AudioSessionIOS::beginInterruption):
        (WebCore::AudioSessionIOS::endInterruption):
        (WebCore::AudioSessionPrivate::AudioSessionPrivate): Deleted.
        (WebCore::AudioSessionPrivate::~AudioSessionPrivate): Deleted.
        (WebCore::AudioSession::AudioSession): Deleted.
        (WebCore::AudioSession::~AudioSession): Deleted.
        (WebCore::AudioSession::setCategory): Deleted.
        (WebCore::AudioSession::category const): Deleted.
        (WebCore::AudioSession::routeSharingPolicy const): Deleted.
        (WebCore::AudioSession::routingContextUID const): Deleted.
        (WebCore::AudioSession::setCategoryOverride): Deleted.
        (WebCore::AudioSession::categoryOverride const): Deleted.
        (WebCore::AudioSession::sampleRate const): Deleted.
        (WebCore::AudioSession::bufferSize const): Deleted.
        (WebCore::AudioSession::numberOfOutputChannels const): Deleted.
        (WebCore::AudioSession::maximumNumberOfOutputChannels const): Deleted.
        (WebCore::AudioSession::tryToSetActiveInternal): Deleted.
        (WebCore::AudioSession::preferredBufferSize const): Deleted.
        (WebCore::AudioSession::setPreferredBufferSize): Deleted.
        (WebCore::AudioSession::isMuted const): Deleted.
        (WebCore::AudioSession::handleMutedStateChange): Deleted.
        (WebCore::AudioSession::addInterruptionObserver): Deleted.
        (WebCore::AudioSession::removeInterruptionObserver): Deleted.
        (WebCore::AudioSession::beginInterruption): Deleted.
        (WebCore::AudioSession::endInterruption): Deleted.
        * platform/audio/mac/AudioSessionMac.h: Added.
        * platform/audio/mac/AudioSessionMac.mm:
        (WebCore::AudioSessionMac::addSampleRateObserverIfNeeded const):
        (WebCore::AudioSessionMac::handleSampleRateChange):
        (WebCore::AudioSessionMac::addBufferSizeObserverIfNeeded const):
        (WebCore::AudioSessionMac::handleBufferSizeChange):
        (WebCore::AudioSessionMac::audioOutputDeviceChanged):
        (WebCore::AudioSessionMac::setIsPlayingToBluetoothOverride):
        (WebCore::AudioSessionMac::setCategory):
        (WebCore::AudioSessionMac::setCategoryOverride):
        (WebCore::AudioSessionMac::sampleRate const):
        (WebCore::AudioSessionMac::bufferSize const):
        (WebCore::AudioSessionMac::numberOfOutputChannels const):
        (WebCore::AudioSessionMac::maximumNumberOfOutputChannels const):
        (WebCore::AudioSessionMac::tryToSetActiveInternal):
        (WebCore::AudioSessionMac::routeSharingPolicy const):
        (WebCore::AudioSessionMac::routingContextUID const):
        (WebCore::AudioSessionMac::preferredBufferSize const):
        (WebCore::AudioSessionMac::setPreferredBufferSize):
        (WebCore::AudioSessionMac::isMuted const):
        (WebCore::AudioSessionMac::handleMutedStateChange):
        (WebCore::AudioSessionMac::addMutedStateObserver):
        (WebCore::AudioSessionMac::removeMutedStateObserver):
        (): Deleted.
        (WebCore::AudioSessionPrivate::addSampleRateObserverIfNeeded): Deleted.
        (WebCore::AudioSessionPrivate::handleSampleRateChange): Deleted.
        (WebCore::AudioSessionPrivate::addBufferSizeObserverIfNeeded): Deleted.
        (WebCore::AudioSessionPrivate::handleBufferSizeChange): Deleted.
        (WebCore::AudioSession::AudioSession): Deleted.
        (WebCore::AudioSession::category const): Deleted.
        (WebCore::AudioSession::audioOutputDeviceChanged): Deleted.
        (WebCore::AudioSession::setIsPlayingToBluetoothOverride): Deleted.
        (WebCore::AudioSession::setCategory): Deleted.
        (WebCore::AudioSession::categoryOverride const): Deleted.
        (WebCore::AudioSession::setCategoryOverride): Deleted.
        (WebCore::AudioSession::sampleRate const): Deleted.
        (WebCore::AudioSession::bufferSize const): Deleted.
        (WebCore::AudioSession::numberOfOutputChannels const): Deleted.
        (WebCore::AudioSession::maximumNumberOfOutputChannels const): Deleted.
        (WebCore::AudioSession::tryToSetActiveInternal): Deleted.
        (WebCore::AudioSession::routeSharingPolicy const): Deleted.
        (WebCore::AudioSession::routingContextUID const): Deleted.
        (WebCore::AudioSession::preferredBufferSize const): Deleted.
        (WebCore::AudioSession::setPreferredBufferSize): Deleted.
        (WebCore::AudioSession::isMuted const): Deleted.
        (WebCore::AudioSession::handleMutedStateChange): Deleted.
        (WebCore::AudioSession::addMutedStateObserver): Deleted.
        (WebCore::AudioSession::removeMutedStateObserver): Deleted.

2021-05-18  Chris Dumez  <cdumez@apple.com>

        Use UTF-8 internally from Strings inside SQLiteStatement
        https://bugs.webkit.org/show_bug.cgi?id=225890

        Reviewed by Darin Adler.

        Use UTF-8 internally from Strings inside SQLiteStatement. Our SQLite databases use UTF-8
        internally for text encoding (since we open the database with sqlite3_open_v2() and not
        sqlite3_open16()).

        Previously, we were providing UTF-16 strings to SQLite, which meant it had to convert it
        internally to UTF-8. Also, whenever we were requesting a string from SQLite, it had to
        convert it from UTF-8 to UTF-16 before returning it to us. Our String constructed from
        returned from SQLiteStatement would also be 16-bit encoded, even if all ASCII so we were
        potentially wasting memory too.

        We now provide UTF-8 to SQLite by using StringView::utf8(). We also request UTF-8 strings
        from SQLite and rely on String::fromUTF8() to convert it to a WTF::String. For all ASCII
        characters, this means we'll end up with a 8-bit String and save memory.

        * platform/sql/SQLiteStatement.cpp:
        (WebCore::SQLiteStatement::bindText):
        (WebCore::SQLiteStatement::getColumnName):
        (WebCore::SQLiteStatement::getColumnText):
        * platform/sql/SQLiteStatement.h:

2021-05-18  Said Abou-Hallawa  <said@apple.com>

        Allow logging minimal info about uploading media files
        https://bugs.webkit.org/show_bug.cgi?id=225636
        <rdar://problem/76639138>

        Reviewed by Alex Christensen.

        Files can be uploaded to a server by many different ways: through a form
        submit, an xhr, a file fetch or through a worker. r275103 handled the
        form submit only. Instead of handling this case by case, we can add the
        logging code in a shared place where all the file uploading goes through.

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::submit):
        Delete the code which was part of r275103.

        * page/Page.cpp:
        (WebCore::Page::logMediaDiagnosticMessage const):
        * page/Page.h:
        Make the Page be responsible for logging the media files info.

        * platform/network/FormData.cpp:
        (WebCore::FormData::imageOrMediaFilesCount const):
        * platform/network/FormData.h:
        Make the FormData count how many images or media files it has.

2021-05-18  Keith Miller  <keith_miller@apple.com>

        Temporarily revert r276592 as it breaks some native apps
        https://bugs.webkit.org/show_bug.cgi?id=225917

        Unreviewed, revert.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::doPutPropertySecurityCheck):
        (WebCore::JSDOMWindow::put):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::JSLocation::doPutPropertySecurityCheck):
        * bindings/js/JSRemoteDOMWindowCustom.cpp:
        (WebCore::JSRemoteDOMWindow::put):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GeneratePut):
        (GenerateHeader):
        * bindings/scripts/test/JS/JSTestDomainSecurity.h:
        * bindings/scripts/test/JS/JSTestIndexedSetterNoIdentifier.cpp:
        (WebCore::JSTestIndexedSetterNoIdentifier::put):
        * bindings/scripts/test/JS/JSTestIndexedSetterNoIdentifier.h:
        * bindings/scripts/test/JS/JSTestIndexedSetterThrowingException.cpp:
        (WebCore::JSTestIndexedSetterThrowingException::put):
        * bindings/scripts/test/JS/JSTestIndexedSetterThrowingException.h:
        * bindings/scripts/test/JS/JSTestIndexedSetterWithIdentifier.cpp:
        (WebCore::JSTestIndexedSetterWithIdentifier::put):
        * bindings/scripts/test/JS/JSTestIndexedSetterWithIdentifier.h:
        * bindings/scripts/test/JS/JSTestInterface.h:
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterNoIdentifier.cpp:
        (WebCore::JSTestNamedAndIndexedSetterNoIdentifier::put):
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterNoIdentifier.h:
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterThrowingException.cpp:
        (WebCore::JSTestNamedAndIndexedSetterThrowingException::put):
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterThrowingException.h:
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterWithIdentifier.cpp:
        (WebCore::JSTestNamedAndIndexedSetterWithIdentifier::put):
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterWithIdentifier.h:
        * bindings/scripts/test/JS/JSTestNamedSetterNoIdentifier.cpp:
        (WebCore::JSTestNamedSetterNoIdentifier::put):
        * bindings/scripts/test/JS/JSTestNamedSetterNoIdentifier.h:
        * bindings/scripts/test/JS/JSTestNamedSetterThrowingException.cpp:
        (WebCore::JSTestNamedSetterThrowingException::put):
        * bindings/scripts/test/JS/JSTestNamedSetterThrowingException.h:
        * bindings/scripts/test/JS/JSTestNamedSetterWithIdentifier.cpp:
        (WebCore::JSTestNamedSetterWithIdentifier::put):
        * bindings/scripts/test/JS/JSTestNamedSetterWithIdentifier.h:
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetter.cpp:
        (WebCore::JSTestNamedSetterWithIndexedGetter::put):
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetter.h:
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetterAndSetter.cpp:
        (WebCore::JSTestNamedSetterWithIndexedGetterAndSetter::put):
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetterAndSetter.h:
        * bindings/scripts/test/JS/JSTestNamedSetterWithLegacyOverrideBuiltIns.cpp:
        (WebCore::JSTestNamedSetterWithLegacyOverrideBuiltIns::put):
        * bindings/scripts/test/JS/JSTestNamedSetterWithLegacyOverrideBuiltIns.h:
        * bindings/scripts/test/JS/JSTestNamedSetterWithLegacyUnforgeableProperties.cpp:
        (WebCore::JSTestNamedSetterWithLegacyUnforgeableProperties::put):
        * bindings/scripts/test/JS/JSTestNamedSetterWithLegacyUnforgeableProperties.h:
        * bindings/scripts/test/JS/JSTestNamedSetterWithLegacyUnforgeablePropertiesAndLegacyOverrideBuiltIns.cpp:
        (WebCore::JSTestNamedSetterWithLegacyUnforgeablePropertiesAndLegacyOverrideBuiltIns::put):
        * bindings/scripts/test/JS/JSTestNamedSetterWithLegacyUnforgeablePropertiesAndLegacyOverrideBuiltIns.h:
        * bindings/scripts/test/JS/JSTestPluginInterface.cpp:
        (WebCore::JSTestPluginInterface::put):
        * bindings/scripts/test/JS/JSTestPluginInterface.h:
        * bridge/objc/objc_runtime.h:
        * bridge/runtime_array.h:
        * bridge/runtime_object.h:

2021-05-18  Yoshiaki Jitsukawa  <yoshiaki.jitsukawa@sony.com>

        [PlayStation] Fix PlayStation port
        https://bugs.webkit.org/show_bug.cgi?id=225913

        Reviewed by Don Olmstead.

        Fix PlayStation port

        * PlatformPlayStation.cmake: Rename
        PLAYSTATION_COPY_SHARED_LIBRARIES to PLAYSTATION_COPY_REQUIREMENTS.
        * accessibility/AccessibilityMenuList.cpp: 
        (WebCore::AccessibilityMenuList::didUpdateActiveOption):
        * platform/graphics/PixelBufferFormat.h: Include wtf/Optional.h.

2021-05-18  Kenneth Russell  <kbr@chromium.org>

        Clean up code distinguishing between webgl/webgl2 contexts
        https://bugs.webkit.org/show_bug.cgi?id=225887

        Reviewed by Darin Adler.

        Address code review feedback on earlier bug.

        Covered by existing WebGL conformance tests.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext):
        (WebCore::HTMLCanvasElement::getContextWebGL):

2021-05-18  Chris Dumez  <cdumez@apple.com>

        Make sure SQLiteStatement objects get destroyed before the database is closed
        https://bugs.webkit.org/show_bug.cgi?id=225881

        Reviewed by Darin Adler.

        Make sure SQLiteStatement objects get destroyed before the database is closed. There are 2 issues
        with destroying a SQLiteStatement after a database is closed:
        1. The underlying call to close the sqlite database will fail if the database still has statements
           and we will leak the database.
        2. SQLiteStatement has a reference to the database so it cannot outlive the SQLiteDatabase.

        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::deleteOrigin):
        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::close):
        (WebCore::SQLiteDatabase::incrementStatementCount):
        (WebCore::SQLiteDatabase::decrementStatementCount):
        * platform/sql/SQLiteDatabase.h:
        * platform/sql/SQLiteStatement.cpp:
        (WebCore::SQLiteStatement::SQLiteStatement):
        (WebCore::SQLiteStatement::~SQLiteStatement):

2021-05-18  Philippe Normand  <pnormand@igalia.com>

        [MediaStream][GStreamer] Flaky fast/mediastream/MediaStream-video-element-video-tracks-disabled.html
        https://bugs.webkit.org/show_bug.cgi?id=225651

        Reviewed by Alicia Boya Garcia.

        Push the black frame as soon as the corresponding track has been disabled. The black frame
        is also now created once only and reused, instead of re-creating it 30 times per second (or
        whatever the frame rate is). The cached frame is updated when the track dimensions change as
        well.

        * platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:

2021-05-18  Alan Bujtas  <zalan@apple.com>

        Difficult to scroll calcalist.co.il webpage, scrolling gets 'stuck'
        https://bugs.webkit.org/show_bug.cgi?id=225905
        <rdar://77692680>

        Reviewed by Simon Fraser.

        The (implicit) integral flooring on the line height may produce short containing block for the inline content.

        Test: fast/inline/vertical-top-on-subpixel-makes-inline-box-overflow.html

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::adjustMaxAscentAndDescent):

2021-05-18  Frederic Wang  <fwang@igalia.com>

        Use RefPtr for local ref counted objects of FrameSelection::setSelectionWithoutUpdatingAppearance
        https://bugs.webkit.org/show_bug.cgi?id=225908

        Reviewed by Ryosuke Niwa.

        A previous patch modified setSelectionWithoutUpdatingAppearance to take into account one
        possible DOM mutation after focus change. This is a follow-up patch applying recommendation
        from https://lists.webkit.org/pipermail/webkit-dev/2020-September/031386.html event if it is
        not obvious whether any of the current uses is dangerous.

        No new tests.

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::selectFrameElementInParentIfFullySelected): Use RefPtr for the
        following variables:
        - parent: used in the non-trivial setFocusedFrame function (where it is however immediately
        stored in a RefPtr).
        - ownerElement: used in the non-trivial function computeNodeIndex (which however only
        performs simple tree navigation).
        - ownerElementParent: used as a this of the non-trivial function hasEditableStyle (which
        however does not update style when computing editability).

2021-05-18  Ryosuke Niwa  <rniwa@webkit.org>

        ASSERTION FAILED: isReactionAllowed() in enqueueDisconnectedCallbackIfNeeded during document teardown
        https://bugs.webkit.org/show_bug.cgi?id=224033

        Reviewed by Maciej Stachowiak.

        Moved the bug assertion to after an early exit for when we're in the middle of destorying the document.

        enqueueDisconnectedCallbackIfNeeded will be called on custom elements in these circumstances
        but there is no correctness issue here since we exit early.


        * dom/CustomElementReactionQueue.cpp:
        (WebCore::CustomElementReactionQueue::enqueueDisconnectedCallbackIfNeeded):

2021-05-18  Frederic Wang  <fwang@igalia.com>

        SHOULD NEVER BE REACHED in FrameSelection::setSelectionWithoutUpdatingAppearance
        https://bugs.webkit.org/show_bug.cgi?id=225219

        Reviewed by Ryosuke Niwa.

        When FrameSelection::selectFrameElementInParentIfFullySelected sets focus on the parent
        frame, that can trigger DOM events, possibly making orphan the newSelection prepared before.
        This patch fixes that issue by clearing the selection on that parent frame in such a
        situation.

        Test: editing/selection/selection-in-iframe-removed-assert.html

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::selectFrameElementInParentIfFullySelected): Check if the
        newSelection became orphan and if so, clear it.

2021-05-17  Chris Dumez  <cdumez@apple.com>

        Drop unused SQLiteStatement::returnsAtLeastOneResult()
        https://bugs.webkit.org/show_bug.cgi?id=225901

        Reviewed by Darin Adler.

        * platform/sql/SQLiteStatement.cpp:
        (WebCore::SQLiteStatement::returnsAtLeastOneResult): Deleted.
        * platform/sql/SQLiteStatement.h:

2021-05-17  Chris Dumez  <cdumez@apple.com>

        Drop SQLiteStatement::return*Results() functions
        https://bugs.webkit.org/show_bug.cgi?id=225899

        Reviewed by Alex Christensen.

        Drop SQLiteStatement::return*Results() functions. All of them are unused
        except for returnTextResults(), which is used only once in SQLiteDatabase.

        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::clearAllTables):
        * platform/sql/SQLiteStatement.cpp:
        (WebCore::SQLiteStatement::returnTextResults): Deleted.
        (WebCore::SQLiteStatement::returnIntResults): Deleted.
        (WebCore::SQLiteStatement::returnInt64Results): Deleted.
        (WebCore::SQLiteStatement::returnDoubleResults): Deleted.
        * platform/sql/SQLiteStatement.h:

2021-05-17  Sihui Liu  <sihui_liu@apple.com>

        Remove SQLiteStatement::isColumnNull and its use
        https://bugs.webkit.org/show_bug.cgi?id=225892

        Reviewed by Chris Dumez.

        SQLiteStatement::isColumnNull is only used in SQLiteIDBBackingStore and it is actually not needed, because 
        SQLiteIDBBackingStore can use getColumnText to evaluate the statement and get the result. So the check is
        redundant.

        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
        (WebCore::IDBServer::SQLiteIDBBackingStore::extractExistingDatabaseInfo):
        * platform/sql/SQLiteStatement.cpp:
        (WebCore::SQLiteStatement::isColumnNull): Deleted.
        * platform/sql/SQLiteStatement.h:

2021-05-17  Wenson Hsieh  <wenson_hsieh@apple.com>

        [GPU Process] Object identifiers with the deleted value should cause MESSAGE_CHECKs
        https://bugs.webkit.org/show_bug.cgi?id=225886
        rdar://78114708

        Reviewed by Chris Dumez.

        Implement some stricter validation around object identifiers in when decoding display list items in the GPU
        Process. Currently, we only check for the empty value (i.e. raw identifier value of 0) when iterating over these
        items, but treat an identifier with the deleted value as valid; instead, we should be treating items with either
        empty or deleted identifiers as invalid.

        To address this, we introduce a new helper method, `ObjectIdentifier::isValid`, and turn existing checks for
        `!!identifier` into `identifier.isValid()`.

        Test: DisplayListTests.InlineItemValidationFailure

        * platform/graphics/displaylists/DisplayListItems.h:
        (WebCore::DisplayList::ClipToImageBuffer::isValid const):
        (WebCore::DisplayList::DrawImageBuffer::isValid const):
        (WebCore::DisplayList::DrawNativeImage::isValid const):
        (WebCore::DisplayList::DrawPattern::isValid const):
        (WebCore::DisplayList::PaintFrameForMedia::isValid const):
        (WebCore::DisplayList::FlushContext::isValid const):
        (WebCore::DisplayList::MetaCommandChangeItemBuffer::isValid const):
        (WebCore::DisplayList::MetaCommandChangeDestinationImageBuffer::isValid const):

2021-05-17  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] Unreviewed debug build fix for r277601.
        https://bugs.webkit.org/show_bug.cgi?id=225855
        <rdar://problem/78116715>

        * platform/network/curl/CookieJarDB.cpp:
        (WebCore::CookieJarDB::executeSQLStatement):
        * platform/win/SearchPopupMenuDB.cpp:
        (WebCore::SearchPopupMenuDB::executeSQLStatement):
        Removed the undefined variables from debug messages.

2021-05-17  Chris Dumez  <cdumez@apple.com>

        Drop unnecessary SQLiteDatabase::updateLastChangesCount()
        https://bugs.webkit.org/show_bug.cgi?id=225885

        Reviewed by Alex Christensen.

        Drop unnecessary SQLiteDatabase::updateLastChangesCount() and have SQLiteDatabase::lastChanges()
        rely on sqlite3_changes() instead of sqlite3_total_changes(). We started using updateLastChangesCount()
        + sqlite3_total_changes() in https://commits.webkit.org/r130891 to address an issue in WebSQL
        SQLResultSet.rowsAffected would not be 0 for SELECT statement. This patch reverts r130891 and instead
        sets SQLResultSet.rowsAffected when the statement is not a read-only statement.

        This is covered by storage/websql/execute-sql-rowsAffected.html which is still passing after
        this change.

        * Modules/webdatabase/SQLStatement.cpp:
        (WebCore::SQLStatement::execute):
        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::lastChanges):
        (WebCore::SQLiteDatabase::updateLastChangesCount): Deleted.
        * platform/sql/SQLiteDatabase.h:
        * platform/sql/SQLiteStatement.cpp:
        (WebCore::SQLiteStatement::step):
        (WebCore::SQLiteStatement::isReadOnly):
        * platform/sql/SQLiteStatement.h:

2021-05-17  Alex Christensen  <achristensen@webkit.org>

        Fix Windows debug build.
        https://bugs.webkit.org/show_bug.cgi?id=225855

        * platform/network/curl/CookieJarDB.cpp:
        (WebCore::CookieJarDB::executeSQLStatement):

2021-05-17  Devin Rousso  <drousso@apple.com>

        [Modern Media Controls] promote submenus items if there is only one
        https://bugs.webkit.org/show_bug.cgi?id=225883

        Reviewed by Eric Carlson.

        As an example, if a `<video>` only has subtitles and not any other languages, the "Subtitles"
        submenu should really be top-level (i.e. have "Subtitles" be the title of the entire
        contextmenu instead of being a submenu of a title-less contextmenu) in the contextmenu shown
        when tapping the tracks button.

        Tests: media/modern-media-controls/tracks-support/auto-text-track.html
               media/modern-media-controls/tracks-support/click-track-in-contextmenu.html
               media/modern-media-controls/tracks-support/hidden-tracks.html
               media/modern-media-controls/tracks-support/off-text-track.html
               media/modern-media-controls/tracks-support/text-track-selected-via-media-api.html

        * Modules/mediacontrols/MediaControlsHost.cpp:
        (WebCore::MediaControlsHost::showMediaControlsContextMenu):

2021-05-17  Alberto Garcia  <berto@igalia.com>

        [GTK] [2.33.1] Fails to build when HAVE_OPENGL_ES_3 is on
        https://bugs.webkit.org/show_bug.cgi?id=225867

        Reviewed by Adrian Perez de Castro.

        Include GLES3/gl3.h if HAVE_OPENGL_ES_3 is set.

        * platform/graphics/opengl/ExtensionsGLOpenGLES.h:

2021-05-17  Alex Christensen  <achristensen@webkit.org>

        Use kAudioObjectPropertyElementMain where available
        https://bugs.webkit.org/show_bug.cgi?id=224635

        Reviewed by Eric Carlson.

        * platform/audio/mac/AudioHardwareListenerMac.cpp:
        (WebCore::isAudioHardwareProcessRunning):
        (WebCore::currentDeviceSupportedBufferSizes):
        (WebCore::processIsRunningPropertyDescriptor):
        (WebCore::outputDevicePropertyDescriptor):
        * platform/audio/mac/AudioSessionMac.mm:
        (WebCore::defaultDevice):
        (WebCore::defaultDeviceTransportIsBluetooth):
        (WebCore::AudioSessionPrivate::addSampleRateObserverIfNeeded):
        (WebCore::AudioSessionPrivate::addBufferSizeObserverIfNeeded):
        (WebCore::AudioSession::sampleRate const):
        (WebCore::AudioSession::bufferSize const):
        (WebCore::AudioSession::maximumNumberOfOutputChannels const):
        (WebCore::AudioSession::setPreferredBufferSize):
        (WebCore::AudioSession::isMuted const):
        (WebCore::AudioSession::addMutedStateObserver):
        (WebCore::AudioSession::removeMutedStateObserver):
        * platform/mediastream/mac/CoreAudioCaptureDevice.cpp:
        (WebCore::getDeviceInfo):
        (WebCore::CoreAudioCaptureDevice::CoreAudioCaptureDevice):
        (WebCore::CoreAudioCaptureDevice::relatedAudioDeviceIDs):
        * platform/mediastream/mac/CoreAudioCaptureDeviceManager.cpp:
        (WebCore::deviceHasInputStreams):
        (WebCore::deviceHasOutputStreams):
        (WebCore::isValidCaptureDevice):
        (WebCore::CoreAudioCaptureDeviceManager::coreAudioCaptureDevices):
        (WebCore::computeAudioDeviceList):
        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
        (WebCore::CoreAudioSharedUnit::defaultOutputDevice):

2021-05-17  Alex Christensen  <achristensen@webkit.org>

        Null check m_resource in SubresourceLoader::didReceiveResponse
        https://bugs.webkit.org/show_bug.cgi?id=225879

        Reviewed by Chris Dumez.

        Add ASSERT_NOT_REACHED and RELEASE_LOG_FAULT if m_resource is null.
        This will help us notice this invalid state in debug builds and diagnose strange loading failures in simulated crash logs.
        On further investigation, the crash fixed in r277594 was likely already fixed by something else, but that made it more robust.

        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didReceiveResponse):

2021-05-17  Wenson Hsieh  <wenson_hsieh@apple.com>

        [GPU Process] Validate DocumentMarkerLineStyle::Mode when decoding DrawDotsForDocumentMarker
        https://bugs.webkit.org/show_bug.cgi?id=225874
        rdar://77885775

        Reviewed by Simon Fraser.

        Add validation around the style mode enum in `DrawDotsForDocumentMarker`'s `DocumentMarkerLineStyle`. To ensure
        that these enum values are safely decoded when deserializing `DrawDotsForDocumentMarker` items from arbitrary
        data, we store and read the style mode as `DocumentMarkerLineStyle::Mode`'s underlying type: a `uint8_t`. Upon
        item validation, we'll then return `false` from `isValid()` in the case where the underlying value is not a
        valid `DocumentMarkerLineStyle::Mode`.

        This is necessary because copying invalid enum class types triggers undefined behavior in C++, so we need to
        avoid copying the enum value as a `DocumentMarkerLineStyle::Mode` prior to validation.

        * platform/graphics/displaylists/DisplayListItems.cpp:
        (WebCore::DisplayList::operator<<):
        (WebCore::DisplayList::DrawDotsForDocumentMarker::isValid const):
        * platform/graphics/displaylists/DisplayListItems.h:

2021-05-17  Chris Dumez  <cdumez@apple.com>

        Avoid more String creations when preparing SQLite statements
        https://bugs.webkit.org/show_bug.cgi?id=225855

        Reviewed by Alex Christensen.

        Avoid more String creations when preparing SQLite statements by using ASCIILiteral. Also rename the
        SQLiteDatabase::prepareStatement() / SQLiteDatabase::executeCommand() overloads that take in a
        String to make sure they are not called by mistake.

        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
        (WebCore::IDBServer::v3RecordsTableSchema):
        (WebCore::IDBServer::v3RecordsTableSchemaAlternate):
        (WebCore::IDBServer::v3IndexRecordsTableSchema):
        (WebCore::IDBServer::v3IndexRecordsTableSchemaAlternate):
        (WebCore::IDBServer::blobRecordsTableSchema):
        (WebCore::IDBServer::blobRecordsTableSchemaAlternate):
        (WebCore::IDBServer::blobFilesTableSchema):
        (WebCore::IDBServer::blobFilesTableSchemaAlternate):
        (WebCore::IDBServer::createOrMigrateRecordsTableIfNecessary):
        (WebCore::IDBServer::SQLiteIDBBackingStore::ensureValidRecordsTable):
        (WebCore::IDBServer::SQLiteIDBBackingStore::ensureValidIndexRecordsTable):
        (WebCore::IDBServer::SQLiteIDBBackingStore::ensureValidIndexRecordsIndex):
        (WebCore::IDBServer::SQLiteIDBBackingStore::createAndPopulateInitialDatabaseInfo):
        (WebCore::IDBServer::SQLiteIDBBackingStore::ensureValidObjectStoreInfoTable):
        (WebCore::IDBServer::SQLiteIDBBackingStore::migrateIndexInfoTableForIDUpdate):
        (WebCore::IDBServer::SQLiteIDBBackingStore::migrateIndexRecordsTableForIDUpdate):
        * Modules/indexeddb/server/SQLiteIDBCursor.cpp:
        (WebCore::IDBServer::SQLiteIDBCursor::createSQLiteStatement):
        (WebCore::IDBServer::SQLiteIDBCursor::resetAndRebindPreIndexStatementIfNecessary):
        * Modules/webdatabase/Database.cpp:
        (WebCore::setTextValueInDatabase):
        (WebCore::retrieveTextResultFromDatabase):
        (WebCore::Database::performOpenAndVerify):
        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::openTrackerDatabase):
        (WebCore::DatabaseTracker::deleteDatabaseFileIfEmpty):
        * Modules/webdatabase/SQLStatement.cpp:
        (WebCore::SQLStatement::execute):
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::executeSQLCommand):
        (WebCore::ApplicationCacheStorage::verifySchemaVersion):
        (WebCore::ApplicationCacheStorage::openDatabase):
        (WebCore::ApplicationCacheStorage::empty):
        (WebCore::ApplicationCacheStorage::checkForDeletedResources):
        * loader/appcache/ApplicationCacheStorage.h:
        * platform/network/curl/CookieJarDB.cpp:
        (WebCore::CookieJarDB::verifySchemaVersion):
        (WebCore::CookieJarDB::createPrepareStatement):
        (WebCore::executeSQLStatement):
        (WebCore::CookieJarDB::executeSqlSlow):
        (WebCore::CookieJarDB::executeSql):
        * platform/network/curl/CookieJarDB.h:
        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::setMaximumSize):
        (WebCore::SQLiteDatabase::setSynchronous):
        (WebCore::SQLiteDatabase::executeCommandSlow):
        (WebCore::SQLiteDatabase::tableExists):
        (WebCore::SQLiteDatabase::clearAllTables):
        (WebCore::SQLiteDatabase::prepareStatementSlow):
        (WebCore::SQLiteDatabase::prepareHeapStatementSlow):
        * platform/sql/SQLiteDatabase.h:
        * platform/sql/SQLiteTransaction.cpp:
        (WebCore::SQLiteTransaction::begin):
        (WebCore::SQLiteTransaction::commit):
        (WebCore::SQLiteTransaction::rollback):
        * platform/win/SearchPopupMenuDB.cpp:
        (WebCore::SearchPopupMenuDB::verifySchemaVersion):
        (WebCore::executeSQLStatement):
        (WebCore::SearchPopupMenuDB::executeSimpleSql):
        * platform/win/SearchPopupMenuDB.h:

2021-05-17  Frederic Wang  <fwang@igalia.com>

        REGRESSION(r277425): Crash in FrameSelection::selectFrameElementInParentIfFullySelected
        https://bugs.webkit.org/show_bug.cgi?id=225795

        Reviewed by Ryosuke Niwa.

        r277425 claimed that in FrameSelection::setSelectionWithoutUpdatingAppearance,
        !m_document->frame() was equivalent to !selectionEndpointsBelongToMultipleDocuments &&
        !selectionIsInAnotherDocument && selectionIsInDetachedDocument, but it misses the case when
        newSelection.document() is null. So this patch adds back this particular case to the
        original "if" block. This patch also adds an ASSERT on m_document->frame().

        No new tests.

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::setSelectionWithoutUpdatingAppearance): Add back the case
        !m_document->frame() && !newSelection.document() to the first sanity check and ASSERT on
        m_document->frame() after the second sanity check.

2021-05-17  Alex Christensen  <achristensen@webkit.org>

        Null check m_resource in SubresourceLoader::didReceiveResponse
        https://bugs.webkit.org/show_bug.cgi?id=225879
        <rdar://78084804>

        Reviewed by Chris Dumez.

        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didReceiveResponse):

2021-05-17  Youenn Fablet  <youenn@apple.com>

        [ BigSur Debug wk2 ARM64 ] imported/w3c/web-platform-tests/webrtc-encoded-transform/sframe-transform-readable.html is flaky crashing
        https://bugs.webkit.org/show_bug.cgi?id=225534
        <rdar://problem/77679466>

        Reviewed by Eric Carlson.

        In case the transform is stopped, the pipeTo operation will propagate the error/closure to the ReadableStream.
        In that case, we need to stop enqueuing or we end up hitting the assert.
        Handle this by adding a boolean which is set to true when SimpleReadableStreamSource::doCancel is called.
        Make close and enqueue as no-op if that boolean is true.
        Covered by test no longer crashing.

        In addition, make sure to skip frames for which the array buffer is null as it might trigger debug asserts in libwebrtc.
        Add a test to cover that case.

        Test: http/wpt/webrtc/video-script-transform-keyframe-only.html

        * Modules/mediastream/RTCRtpScriptTransformer.cpp:
        (WebCore::RTCRtpScriptTransformer::writable):
        * Modules/streams/ReadableStreamSource.cpp:
        (WebCore::SimpleReadableStreamSource::doCancel):
        (WebCore::SimpleReadableStreamSource::close):
        (WebCore::SimpleReadableStreamSource::enqueue):
        * Modules/streams/ReadableStreamSource.h:

2021-05-17  Jer Noble  <jer.noble@apple.com>

        MediaSession action handlers aren't treated as having a user gesture
        https://bugs.webkit.org/show_bug.cgi?id=225875

        Reviewed by Eric Carlson.

        Test: media/media-session/user-gesture-action-handlers.html

        We treat remote control commands as having a user gesture, but not when firing
        a MediaSession action handler; we should treat them the same.

        * Modules/mediasession/MediaSession.cpp:
        (WebCore::MediaSession::callActionHandler):

2021-05-17  Chris Dumez  <cdumez@apple.com>

        Move more logic from AudioDestinationNode to its subclasses
        https://bugs.webkit.org/show_bug.cgi?id=225849

        Reviewed by Sam Weinig.

        Move more logic from AudioDestinationNode to its subclasses. In particular, AudioDestinationNode
        contains a lot of things that are specific to real-time audio rendering and those should go to
        DefaultAudioDestinationNode.

        This allows us to move isPlayingAudioDidChange() from BaseAudioContext to AudioContext also.

        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::isPlayingAudioDidChange):
        * Modules/webaudio/AudioContext.h:
        * Modules/webaudio/AudioDestinationNode.cpp:
        (WebCore::AudioDestinationNode::renderQuantum):
        * Modules/webaudio/AudioDestinationNode.h:
        * Modules/webaudio/BaseAudioContext.cpp:
        * Modules/webaudio/BaseAudioContext.h:
        * Modules/webaudio/DefaultAudioDestinationNode.cpp:
        (WebCore::DefaultAudioDestinationNode::createDestination):
        (WebCore::DefaultAudioDestinationNode::framesPerBuffer const):
        (WebCore::DefaultAudioDestinationNode::render):
        (WebCore::DefaultAudioDestinationNode::setIsSilent):
        (WebCore::DefaultAudioDestinationNode::isPlayingDidChange):
        (WebCore::DefaultAudioDestinationNode::updateIsEffectivelyPlayingAudio):
        * Modules/webaudio/DefaultAudioDestinationNode.h:
        * Modules/webaudio/OfflineAudioDestinationNode.cpp:
        (WebCore::OfflineAudioDestinationNode::OfflineAudioDestinationNode):
        (WebCore::OfflineAudioDestinationNode::startRendering):
        (WebCore::OfflineAudioDestinationNode::renderOnAudioThread):
        * Modules/webaudio/OfflineAudioDestinationNode.h:

2021-05-17  Peng Liu  <peng.liu6@apple.com>

        [GPUP] WebContent process should not pull audio session category from the GPU Process
        https://bugs.webkit.org/show_bug.cgi?id=225826

        Reviewed by Darin Adler.

        Change AudioSession::Category to be an enum class.

        * platform/audio/AudioSession.cpp:
        (WebCore::AudioSession::categoryOverride const):
        (WebCore::AudioSession::category const):
        * platform/audio/AudioSession.h:
        * platform/audio/cocoa/MediaSessionManagerCocoa.mm:
        (WebCore::MediaSessionManagerCocoa::updateSessionState):
        * platform/audio/ios/AudioSessionIOS.mm:
        (WebCore::AudioSessionPrivate::AudioSessionPrivate):
        (WebCore::AudioSession::setCategory):
        (WebCore::AudioSession::category const):
        * platform/audio/mac/AudioSessionMac.mm:
        (WebCore::AudioSession::setCategory):
        * platform/audio/mac/SharedRoutingArbitrator.h:
        * platform/audio/mac/SharedRoutingArbitrator.mm:
        (WebCore::SharedRoutingArbitrator::beginRoutingArbitrationForToken):
        * platform/mediastream/mac/BaseAudioSharedUnit.cpp:
        (WebCore::BaseAudioSharedUnit::startUnit):
        * platform/mock/MockRealtimeAudioSource.cpp:
        (WebCore::MockRealtimeAudioSource::startProducingData):
        * testing/Internals.cpp:
        (WebCore::Internals::audioSessionCategory const):

2021-05-17  Rob Buis  <rbuis@igalia.com>

        will-change: contain should create a containing block
        https://bugs.webkit.org/show_bug.cgi?id=225442

        Reviewed by Antti Koivisto.

        Make will-change: contain cause the element to be a containing block for both
        position: fixed and position: absolute cases as well as create a CSS stacking
        context for the element.

        Tests: imported/w3c/web-platform-tests/css/css-contain/contain-paint-stacking-context-001b.html
               imported/w3c/web-platform-tests/css/css-will-change/will-change-fixpos-cb-contain-1.html

        * rendering/style/WillChangeData.cpp:
        (WebCore::WillChangeData::createsContainingBlockForOutOfFlowPositioned const):
        (WebCore::WillChangeData::propertyCreatesStackingContext):
        * style/StyleBuilderCustom.h:
        (WebCore::Style::BuilderCustom::applyValueWillChange):

2021-05-17  Tim Nguyen  <ntim@apple.com>

        will-change: position should not create a containing block for position: fixed elements
        https://bugs.webkit.org/show_bug.cgi?id=225443

        Reviewed by Antti Koivisto.

        This partially undoes r276627 which made will-change: position create a CB for all out-of-flow elements:

        - Removed CSSPropertyPosition from createsContainingBlockForOutOfFlowPositioned() to not create a containing block
        for position: fixed; children.
        - Added createsContainingBlockForAbsolutelyPositioned() with CSSPropertyPosition to still create a containing block
        for position: absolute; children.

        Enabled WPT (which covers both cases): css/css-will-change/will-change-fixpos-cb-position-1.html

        * rendering/RenderElement.h:
        (WebCore::RenderElement::canContainAbsolutelyPositionedObjects const):
        * rendering/style/WillChangeData.cpp:
        (WebCore::WillChangeData::createsContainingBlockForAbsolutelyPositioned const):
        (WebCore::WillChangeData::createsContainingBlockForOutOfFlowPositioned const):
        * rendering/style/WillChangeData.h:

2021-05-17  Zan Dobersek  <zdobersek@igalia.com>

        REGRESSION(r277560): conditional attribute typos in IDLs for OffscreenCanvas, OffscreenCanvasRenderingContext2D
        https://bugs.webkit.org/show_bug.cgi?id=225858

        Unreviewed. Tweaking the for-worker conditional attribute values for the
        OffscreenCanvas and OffscreenCanvasRenderingContext2D interfaces after
        the r277560 refactoring. The mismatch in the conditional values left the
        two interfaces outside any worker global space.

        * html/OffscreenCanvas.idl:
        * html/canvas/OffscreenCanvasRenderingContext2D.idl:

2021-05-16  Sam Weinig  <weinig@apple.com>

        Support serializing ImageData object colorSpace property in SerializedScriptValue
        https://bugs.webkit.org/show_bug.cgi?id=225854

        Reviewed by Chris Dumez.

        Test: storage/indexeddb/structured-clone-image-data-display-p3.html

        Update SerializedScriptValue schema to version 8 and add serialization
        of the colorSpace property.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::PredefinedColorSpaceTag):
        Add copy of the PredefinedColorSpace values that are guaranteed to
        stay consistent forever.

        (WebCore::CloneSerializer::dumpIfTerminal):
        Add encoding of the colorSpace when serializing ImageData.

        (WebCore::CloneSerializer::write):
        (WebCore::CloneDeserializer::read):
        Add coders for PredefinedColorSpaceTag.

        (WebCore::CloneDeserializer::getJSValue):
        Replace multiple overloads with one perfect forwarding overload which does
        what we want and works with r-values.

        (WebCore::CloneDeserializer::readImageBitmap):
        Use auto in two places.

        (WebCore::CloneDeserializer::readTerminal):
        Add decoding of the colorSpace when deserializing ImageData. For prior versions,
        the colorSpace defaults to sRGB, which was the only color space supported.

2021-05-14  Jer Noble  <jer.noble@apple.com>

        MediaSessionCoordinator survives page reload/navigation
        https://bugs.webkit.org/show_bug.cgi?id=225822

        Reviewed by Eric Carlson.

        Because the MediaSessionCoordinator is created and owned by Page, it will survive
        a reload (as Page is not re-created), and the same MediaSessionCoordinator object
        will be added to MediaSession when the new Navigator is created.

        Rather than have Page own the coordinator itself, it can instead own the
        MediaSessionCoordinatorPrivate used to create the coordinator. When the MediaSession
        is created, it will query the Page to ask for a MediaSessionCoordinatorPrivate to
        use to create the coordinator, guaranteeing a new object is created.

        The session itself should be left when the document is put into Back/Forward
        Cache, or closed when the document is stopped entirely.

        A few drive-by fixes:

        The direction of coordinatorStateChanged() is now reversed; it flows down from the
        UIProcess to update the state of the MediaSessionCoordinator. This allows the coordinator
        to react when it's private implementation changes state.

        Add a new upward notification when the trackIdentifier in MediaMetadata changes.

        * Modules/mediasession/MediaSession.cpp:
        (WebCore::MediaSession::MediaSession):
        (WebCore::MediaSession::suspend):
        (WebCore::MediaSession::stop):
        (WebCore::MediaSession::createCoordinator):
        (WebCore::MediaSession::setCoordinator): Deleted.
        * Modules/mediasession/MediaSession.h:
        * Modules/mediasession/MediaSessionCoordinator.cpp:
        (WebCore::MediaSessionCoordinator::join):
        (WebCore::MediaSessionCoordinator::leave):
        (WebCore::MediaSessionCoordinator::close):
        (WebCore::MediaSessionCoordinator::metadataChanged):
        (WebCore::MediaSessionCoordinator::positionStateChanged):
        (WebCore::MediaSessionCoordinator::playbackStateChanged):
        (WebCore::MediaSessionCoordinator::readyStateChanged):
        (WebCore::MediaSessionCoordinator::seekSessionToTime):
        (WebCore::MediaSessionCoordinator::pauseSession):
        (WebCore::MediaSessionCoordinator::coordinatorStateChanged):
        * Modules/mediasession/MediaSessionCoordinator.h:
        * Modules/mediasession/MediaSessionCoordinatorPrivate.h:
        (WebCore::MediaSessionCoordinatorClient::coordinatorStateChanged):
        * page/Page.cpp:
        (WebCore::Page::setMediaSessionCoordinator):
        (WebCore::Page::invalidateMediaSessionCoordinator):
        * page/Page.h:
        (WebCore::Page::mediaSessionCoordinator):
        * testing/Internals.cpp:
        (WebCore::Internals::registerMockMediaSessionCoordinator):
        * testing/Internals.h:
        * testing/MockMediaSessionCoordinator.cpp:
        (WebCore::MockMediaSessionCoordinator::trackIdentifierChanged):
        (WebCore::MockMediaSessionCoordinator::coordinatorStateChanged): Deleted.
        * testing/MockMediaSessionCoordinator.h:

2021-05-16  Chris Dumez  <cdumez@apple.com>

        Modernize / Optimize SQLiteStatement creation and preparation
        https://bugs.webkit.org/show_bug.cgi?id=225791

        Reviewed by Sam Weinig.

        Modernize / Optimize SQLiteStatement creation and preparation:
        - The SQLiteStatement constructor is now private so that we never have a
          SQLiteStatement that has not been "prepared". Only the SQLiteDatabase
          can now construct SQLiteStatement objects. We already needed to pass
          a SQLiteDatabase reference when constructing the SQLiteStatement anyway.
        - The construct AND prepare a SQLiteStatement, we now call
          SQLiteDatabase::prepareStatement() to get a stack object or
          SQLiteDatabase::prepareHeapStatement() to get a heap one. These functions
          return an Expected<> type so they will either return a "prepared"
          SQLiteStatement or an unexpected SQLite error code.
        - The prepare*Statement() functions now avoid String allocations in most
          cases thanks to overloads taking in the query as an ASCIILiteral.
        - Drop finalize() function on SQLiteStatement so SQLiteStatement objects
          are always valid. It simplifies the implementation of SQLiteStatement
          member functions. The SQLiteStatement destructor "finalizes" the statement
          so users can simply destroy the SQLiteStatement if they need the object
          to be finalize at a certain point (e.g. before closing a database).
        - Drop the prepare() & prepareAndStep() SQLiteStatement member functions now
          that SQLiteStatement are always prepared.
        - Stop storing the SQL query as a String data member in SQLiteStatement class.
          This is no longer needed now that they is no separe prepare step after the
          construction. This makes the SQLiteStatement a bit smaller.

        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
        (WebCore::IDBServer::createOrMigrateRecordsTableIfNecessary):
        (WebCore::IDBServer::SQLiteIDBBackingStore::ensureValidBlobTables):
        (WebCore::IDBServer::SQLiteIDBBackingStore::ensureValidIndexRecordsTable):
        (WebCore::IDBServer::SQLiteIDBBackingStore::ensureValidIndexRecordsIndex):
        (WebCore::IDBServer::SQLiteIDBBackingStore::ensureValidIndexRecordsRecordIndex):
        (WebCore::IDBServer::SQLiteIDBBackingStore::createAndPopulateInitialDatabaseInfo):
        (WebCore::IDBServer::SQLiteIDBBackingStore::ensureValidObjectStoreInfoTable):
        (WebCore::IDBServer::SQLiteIDBBackingStore::migrateIndexInfoTableForIDUpdate):
        (WebCore::IDBServer::SQLiteIDBBackingStore::migrateIndexRecordsTableForIDUpdate):
        (WebCore::IDBServer::SQLiteIDBBackingStore::extractExistingDatabaseInfo):
        (WebCore::IDBServer::SQLiteIDBBackingStore::databaseNameAndVersionFromFile):
        (WebCore::IDBServer::SQLiteIDBBackingStore::beginTransaction):
        (WebCore::IDBServer::SQLiteIDBBackingStore::deleteBackingStore):
        (WebCore::IDBServer::SQLiteIDBBackingStore::cachedStatement):
        * Modules/indexeddb/server/SQLiteIDBCursor.cpp:
        (WebCore::IDBServer::SQLiteIDBCursor::createSQLiteStatement):
        (WebCore::IDBServer::SQLiteIDBCursor::resetAndRebindPreIndexStatementIfNecessary):
        (WebCore::IDBServer::SQLiteIDBCursor::internalFetchNextRecord):
        * Modules/webdatabase/Database.cpp:
        (WebCore::setTextValueInDatabase):
        (WebCore::retrieveTextResultFromDatabase):
        (WebCore::Database::performGetTableNames):
        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::hasEntryForOriginNoLock):
        (WebCore::DatabaseTracker::hasEntryForDatabase):
        (WebCore::DatabaseTracker::fullPathForDatabaseNoLock):
        (WebCore::DatabaseTracker::origins):
        (WebCore::DatabaseTracker::databaseNamesNoLock):
        (WebCore::DatabaseTracker::detailsForNameAndOrigin):
        (WebCore::DatabaseTracker::setDatabaseDetails):
        (WebCore::DatabaseTracker::quotaNoLock):
        (WebCore::DatabaseTracker::setQuota):
        (WebCore::DatabaseTracker::addDatabase):
        (WebCore::DatabaseTracker::deleteOrigin):
        (WebCore::DatabaseTracker::deleteDatabase):
        (WebCore::DatabaseTracker::removeDeletedOpenedDatabases):
        (WebCore::DatabaseTracker::deleteDatabaseFileIfEmpty):
        * Modules/webdatabase/SQLStatement.cpp:
        (WebCore::SQLStatement::execute):
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::loadCacheGroup):
        (WebCore::ApplicationCacheStorage::loadManifestHostHashes):
        (WebCore::ApplicationCacheStorage::cacheGroupForURL):
        (WebCore::ApplicationCacheStorage::fallbackCacheGroupForURL):
        (WebCore::ApplicationCacheStorage::calculateQuotaForOrigin):
        (WebCore::ApplicationCacheStorage::calculateUsageForOrigin):
        (WebCore::ApplicationCacheStorage::calculateRemainingSizeForOriginExcludingCache):
        (WebCore::ApplicationCacheStorage::storeUpdatedQuotaForOrigin):
        (WebCore::ApplicationCacheStorage::verifySchemaVersion):
        (WebCore::ApplicationCacheStorage::executeStatement):
        (WebCore::ApplicationCacheStorage::store):
        (WebCore::ApplicationCacheStorage::storeUpdatedType):
        (WebCore::ApplicationCacheStorage::ensureOriginRecord):
        (WebCore::ApplicationCacheStorage::storeNewestCache):
        (WebCore::ApplicationCacheStorage::loadCache):
        (WebCore::ApplicationCacheStorage::remove):
        (WebCore::ApplicationCacheStorage::manifestURLs):
        (WebCore::ApplicationCacheStorage::deleteCacheGroupRecord):
        (WebCore::ApplicationCacheStorage::checkForDeletedResources):
        (WebCore::ApplicationCacheStorage::flatFileAreaSize):
        * platform/network/curl/CookieJarDB.cpp:
        (WebCore::CookieJarDB::verifySchemaVersion):
        (WebCore::CookieJarDB::checkDatabaseValidity):
        (WebCore::CookieJarDB::searchCookies):
        (WebCore::CookieJarDB::getAllCookies):
        (WebCore::CookieJarDB::allDomains):
        (WebCore::CookieJarDB::createPrepareStatement):
        (WebCore::CookieJarDB::executeSql):
        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::open):
        (WebCore::SQLiteDatabase::useWALJournalMode):
        (WebCore::SQLiteDatabase::maximumSize):
        (WebCore::SQLiteDatabase::setMaximumSize):
        (WebCore::SQLiteDatabase::pageSize):
        (WebCore::SQLiteDatabase::freeSpaceSize):
        (WebCore::SQLiteDatabase::totalSize):
        (WebCore::SQLiteDatabase::executeCommand):
        (WebCore::SQLiteDatabase::returnsAtLeastOneResult):
        (WebCore::SQLiteDatabase::tableExists):
        (WebCore::SQLiteDatabase::clearAllTables):
        (WebCore::SQLiteDatabase::turnOnIncrementalAutoVacuum):
        (WebCore::constructAndPrepareStatement):
        (WebCore::SQLiteDatabase::prepareStatement):
        (WebCore::SQLiteDatabase::prepareHeapStatement):
        * platform/sql/SQLiteDatabase.h:
        * platform/sql/SQLiteStatement.cpp:
        (WebCore::SQLiteStatement::SQLiteStatement):
        (WebCore::SQLiteStatement::~SQLiteStatement):
        (WebCore::SQLiteStatement::step):
        (WebCore::SQLiteStatement::reset):
        (WebCore::SQLiteStatement::executeCommand):
        (WebCore::SQLiteStatement::returnsAtLeastOneResult):
        (WebCore::SQLiteStatement::bindBlob):
        (WebCore::SQLiteStatement::bindText):
        (WebCore::SQLiteStatement::bindInt):
        (WebCore::SQLiteStatement::bindInt64):
        (WebCore::SQLiteStatement::bindDouble):
        (WebCore::SQLiteStatement::bindNull):
        (WebCore::SQLiteStatement::bindParameterCount const):
        (WebCore::SQLiteStatement::columnCount):
        (WebCore::SQLiteStatement::isColumnNull):
        (WebCore::SQLiteStatement::isColumnDeclaredAsBlob):
        (WebCore::SQLiteStatement::getColumnName):
        (WebCore::SQLiteStatement::getColumnValue):
        (WebCore::SQLiteStatement::getColumnText):
        (WebCore::SQLiteStatement::getColumnDouble):
        (WebCore::SQLiteStatement::getColumnInt):
        (WebCore::SQLiteStatement::getColumnInt64):
        (WebCore::SQLiteStatement::getColumnBlobAsString):
        (WebCore::SQLiteStatement::getColumnBlobAsVector):
        (WebCore::SQLiteStatement::returnTextResults):
        (WebCore::SQLiteStatement::returnIntResults):
        (WebCore::SQLiteStatement::returnInt64Results):
        (WebCore::SQLiteStatement::returnDoubleResults):
        * platform/sql/SQLiteStatement.h:
        * platform/win/SearchPopupMenuDB.cpp:
        (WebCore::SearchPopupMenuDB::checkDatabaseValidity):
        (WebCore::SearchPopupMenuDB::verifySchemaVersion):
        (WebCore::SearchPopupMenuDB::executeSimpleSql):
        (WebCore::SearchPopupMenuDB::createPreparedStatement):
        * workers/service/server/RegistrationDatabase.cpp:
        (WebCore::RegistrationDatabase::ensureValidRecordsTable):
        (WebCore::RegistrationDatabase::doPushChanges):
        (WebCore::RegistrationDatabase::importRecords):

2021-05-16  Alan Bujtas  <zalan@apple.com>

        [LFC] Cleanup FormattingContext class
        https://bugs.webkit.org/show_bug.cgi?id=225744

        Reviewed by Antti Koivisto.

        This final patch makes the FormattingContext interface uncluttered.

        * WebCore.xcodeproj/project.pbxproj:
        * layout/FormattingState.h:
        (WebCore::Layout::FormattingState::setIntrinsicWidthConstraints):
        (WebCore::Layout::FormattingState::intrinsicWidthConstraints const):
        (WebCore::Layout::FormattingState::setIntrinsicWidthConstraintsForBox):
        (WebCore::Layout::FormattingState::intrinsicWidthConstraintsForBox const):
        * layout/LayoutContext.cpp:
        (WebCore::Layout::LayoutContext::layoutFormattingContextSubtree):
        * layout/LayoutUnits.h:
        (WebCore::Layout::IntrinsicWidthConstraints::expand):
        (WebCore::Layout::IntrinsicWidthConstraints::operator+=):
        (WebCore::Layout::IntrinsicWidthConstraints::operator-=):
        * layout/formattingContexts/FormattingContext.cpp:
        * layout/formattingContexts/FormattingContext.h:
        (WebCore::Layout::FormattingContext::root const):
        (WebCore::Layout::FormattingContext::formattingState const):
        (WebCore::Layout::FormattingContext::isBlockFormattingContext const):
        (WebCore::Layout::FormattingContext::isInlineFormattingContext const):
        (WebCore::Layout::FormattingContext::isTableFormattingContext const):
        (WebCore::Layout::FormattingContext::isTableWrapperBlockFormattingContext const):
        (WebCore::Layout::FormattingContext::isFlexFormattingContext const):
        (WebCore::Layout::FormattingContext::IntrinsicWidthConstraints::expand): Deleted.
        (WebCore::Layout::FormattingContext::IntrinsicWidthConstraints::operator+=): Deleted.
        (WebCore::Layout::FormattingContext::IntrinsicWidthConstraints::operator-=): Deleted.
        * layout/formattingContexts/FormattingGeometry.cpp:
        (WebCore::Layout::FormattingGeometry::computedWidthValue):
        (WebCore::Layout::FormattingGeometry::shrinkToFitWidth):
        (WebCore::Layout::FormattingGeometry::constrainByMinMaxWidth const):
        (WebCore::Layout::FormattingGeometry::constraintsForOutOfFlowContent):
        (WebCore::Layout::FormattingGeometry::constraintsForInFlowContent const):
        * layout/formattingContexts/FormattingGeometry.h:
        * layout/formattingContexts/block/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::computedIntrinsicWidthConstraints):
        * layout/formattingContexts/block/BlockFormattingGeometry.cpp:
        (WebCore::Layout::BlockFormattingGeometry::intrinsicWidthConstraints):
        * layout/formattingContexts/block/BlockFormattingGeometry.h:
        * layout/formattingContexts/block/BlockMarginCollapse.cpp:
        * layout/formattingContexts/flex/FlexFormattingContext.cpp:
        (WebCore::Layout::FlexFormattingContext::computedIntrinsicWidthConstraints):
        * layout/formattingContexts/flex/FlexFormattingGeometry.cpp:
        (WebCore::Layout::FlexFormattingGeometry::intrinsicWidthConstraints):
        * layout/formattingContexts/flex/FlexFormattingGeometry.h:
        * layout/formattingContexts/inline/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::computedIntrinsicWidthConstraints):
        * layout/formattingContexts/table/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::computedIntrinsicWidthConstraints):
        (WebCore::Layout::TableFormattingContext::computedPreferredWidthForColumns):
        * layout/formattingContexts/table/TableFormattingGeometry.cpp:
        (WebCore::Layout::TableFormattingGeometry::intrinsicWidthConstraintsForCell):
        * layout/formattingContexts/table/TableFormattingGeometry.h:
        * layout/formattingContexts/table/TableGrid.h:
        (WebCore::Layout::TableGrid::setWidthConstraints):
        (WebCore::Layout::TableGrid::widthConstraints const):
        (WebCore::Layout::TableGrid::Slot::widthConstraints const):
        (WebCore::Layout::TableGrid::Slot::setWidthConstraints):

2021-05-16  Sam Weinig  <weinig@apple.com>

        Add support for creating/accessing/setting non-sRGB ImageData via canvas
        https://bugs.webkit.org/show_bug.cgi?id=225841

        Reviewed by Darin Adler.

        Test: fast/canvas/canvas-color-space-display-p3-ImageData.html

        Add support for accessing non-sRGB (only DisplayP3 for now due
        to the specification, but the support is general) pixel data in
        HTML canvas.

        Updates ImageData constructors and CanvasImageData operations to 
        take optional ImageDataSettings dictionaries, which contain an 
        optional color space (otherwise defaulting back to sRGB). 

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * html/ImageDataSettings.h: Added.
        * html/ImageDataSettings.idl: Added.
        Add new ImageDataSettings.idl and related files.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneDeserializer::readImageBitmap):
        Fixes FIXME and uses PixelBuffer directly rather than allocating
        an unnecessary ImageData. This was done now since the relevent
        ImageData constructor has gone away.

        * html/ImageData.cpp:
        (WebCore::computeDataSize):
        (WebCore::ImageData::computeColorSpace):
        (WebCore::ImageData::create):
        (WebCore::ImageData::createUninitialized):
        (WebCore::ImageData::ImageData):
        (WebCore::ImageData::pixelBuffer const):
        (WebCore::ImageData::dataSize): Deleted.
        (WebCore::ImageData::deepClone const): Deleted.
        * html/ImageData.h:
        (WebCore::ImageData::size const):
        (WebCore::ImageData::width const):
        (WebCore::ImageData::height const):
        (WebCore::ImageData::data const):
        (WebCore::ImageData::colorSpace const):
        (WebCore::ImageData::pixelBuffer const): Deleted.

        - Reworked ImageData to no longer store a PixelBuffer, which has
          extraneous information in it, but rather to store just what it
          needs IntSize, Ref<JSC::Uint8ClampedArray>, and now PredefinedColorSpace.
        - Updates create functions for new optional ImageDataSettings.
        - Adds createUninitialized which follows spec language for ImageData creation
          and is used by CanvasRenderingContext2D to create ImageData objects of with
          the right color spaces, allowing for fallback to the canvas' own color space
          when no ImageDataSettings color space is provided. It is uninitialized and
          therefore requires the client to initialize the data to allow for support for
          no alpha support in the future, which requires a non-zero initialization pattern.

        * html/ImageData.idl:
        Add optional ImageDataSettings parameters and the new colorSpace attribute.

        * html/canvas/CanvasImageData.idl:
        Add optional ImageDataSettings parameters.

        * html/canvas/CanvasRenderingContext2DBase.h:
        * html/canvas/CanvasRenderingContext2DBase.cpp:
        (WebCore::initializeEmptyImageData):
        Add helper to initialize the ImageData buffer. Right now it always calls
        zeroFill(), but in the future it will need to do more.
        
        (WebCore::CanvasRenderingContext2DBase::createImageData const):
        Update to account for this function being able to throw an exception (when 
        out of memory) and use the new createUninitialized/initializeEmptyImageData
        to create a correctly color spaced ImageData.

        (WebCore::CanvasRenderingContext2DBase::createImageData const):
        Update for new optional ImageDataSettings and use the new createUninitialized
        initializeEmptyImageData to create a correctly color spaced ImageData.

        (WebCore::CanvasRenderingContext2DBase::getImageData const):
        Moves parameter checks to the begining to match the spec, and uses new 
        createUninitialized/initializeEmptyImageData to create a correctly color 
        spaced ImageData. Also, use the ImageData's color space when getting
        the pixel buffer to actually return the right data!

        * html/canvas/PredefinedColorSpace.cpp:
        (WebCore::toPredefinedColorSpace):
        * html/canvas/PredefinedColorSpace.h:
        Add conversion function from DestinationColorSpace to PredefinedColorSpace.
        Since DestinationColorSpace is a superset of PredefinedColorSpace, this can
        fail, so this conversion returns an Optional.

        * inspector/InspectorCanvas.cpp:
        * inspector/InspectorCanvasCallTracer.cpp:
        * inspector/InspectorCanvasCallTracer.h:
        Stub out inspector support for ImageDataSettings.

        * platform/graphics/ImageBufferBackend.cpp:
        (WebCore::ImageBufferBackend::getPixelBuffer const):
        Use the ImageBuffer's actual color space as the source color space
        rather than hard coding sRGB. This allows the color space conversion
        to take place. Also remove some unnecessary temporary variables.

        (WebCore::ImageBufferBackend::putPixelBuffer):
        Use the ImageBuffer's actual color space as the destination color space
        rather than hard coding sRGB. This allows the color space conversion
        to take place. Also remove some unnecessary temporary variables.

        * platform/graphics/PixelBuffer.cpp:
        (WebCore::PixelBuffer::tryCreate):
        (WebCore::PixelBuffer::PixelBuffer):
        * platform/graphics/PixelBuffer.h:
        (WebCore::PixelBuffer::takeData):
        Add a few helpers to allow creationg to/from PixelBuffer
        a bit easier.

        * platform/graphics/PixelBufferConversion.cpp:
        (WebCore::convertImagePixelsAccelerated):
        Fix incorrect assertion. We want to assert that there is no error, not that
        there is one.

        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::convertImageBufferToColorSpace):
        (WebCore::FilterEffect::copyUnmultipliedResult):
        (WebCore::FilterEffect::copyPremultipliedResult):
        (WebCore::FilterEffect::createUnmultipliedImageResult):
        (WebCore::FilterEffect::createPremultipliedImageResult):
        Stop hard coding SRGB for PixelBuffer color spaces and use the appropriate
        color space for the task. We still do color space conversion through ImageBuffer
        so we should come back and simplify code here to not always require that.

        * testing/Internals.cpp:
        (WebCore::Internals::videoSampleAvailable):
        (WebCore::Internals::loadArtworkImage):
        Update to specify a color space to maintain existing behavior.

2021-05-16  Alan Bujtas  <zalan@apple.com>

        [LFC] Cleanup margin collapsing class
        https://bugs.webkit.org/show_bug.cgi?id=225745

        Reviewed by Antti Koivisto.

        BlockMarginCollapse needs LayoutState and BlockFormattingState only.

        * layout/MarginTypes.h:
        * layout/formattingContexts/FormattingGeometry.cpp:
        (WebCore::Layout::FormattingGeometry::constraintsForInFlowContent const):
        (WebCore::Layout::FormattingGeometry::constraintsForInFlowContent): Deleted.
        * layout/formattingContexts/FormattingGeometry.h:
        * layout/formattingContexts/block/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::precomputeVerticalPositionForBoxAndAncestors):
        (WebCore::Layout::BlockFormattingContext::geometry const):
        (WebCore::Layout::BlockFormattingContext::marginCollapse const):
        * layout/formattingContexts/block/BlockFormattingGeometry.cpp:
        (WebCore::Layout::BlockFormattingGeometry::inFlowNonReplacedContentHeightAndMargin):
        * layout/formattingContexts/block/BlockFormattingQuirks.cpp:
        (WebCore::Layout::BlockFormattingQuirks::stretchedInFlowHeightIfApplicable const):
        * layout/formattingContexts/block/BlockFormattingQuirks.h:
        * layout/formattingContexts/block/BlockMarginCollapse.cpp:
        (WebCore::Layout::BlockMarginCollapse::BlockMarginCollapse):
        (WebCore::Layout::BlockMarginCollapse::hasClearance const):
        (WebCore::Layout::BlockMarginCollapse::marginBeforeCollapsesWithParentMarginBefore const):
        (WebCore::Layout::BlockMarginCollapse::marginAfterCollapsesWithParentMarginAfter const):
        (WebCore::Layout::BlockMarginCollapse::marginAfterCollapsesWithLastInFlowChildMarginAfter const):
        (WebCore::Layout::BlockMarginCollapse::positiveNegativeValues const):
        (WebCore::Layout::BlockMarginCollapse::positiveNegativeMarginBefore const):
        * layout/formattingContexts/block/BlockMarginCollapse.h:
        (WebCore::Layout::BlockMarginCollapse::inQuirksMode const):
        (WebCore::Layout::BlockMarginCollapse::layoutState const):
        (WebCore::Layout::BlockMarginCollapse::formattingState const):
        (WebCore::Layout::BlockMarginCollapse::layoutState): Deleted.
        (WebCore::Layout::BlockMarginCollapse::formattingContext const): Deleted.
        * layout/formattingContexts/block/PrecomputedBlockMarginCollapse.cpp:
        (WebCore::Layout::BlockMarginCollapse::precomputedPositiveNegativeValues const):
        (WebCore::Layout::BlockMarginCollapse::precomputedPositiveNegativeMarginBefore const):
        (WebCore::Layout::BlockMarginCollapse::precomputedMarginBefore):

2021-05-16  Alan Bujtas  <zalan@apple.com>

        [LFC] Cleanup FormattingQuirk classes
        https://bugs.webkit.org/show_bug.cgi?id=225746

        Reviewed by Antti Koivisto.

        Quirk functions should only be called when not in standards mode.

        * layout/formattingContexts/FormattingQuirks.cpp:
        (WebCore::Layout::FormattingQuirks::heightValueOfNearestContainingBlockWithFixedHeight const):
        (WebCore::Layout::FormattingQuirks::heightValueOfNearestContainingBlockWithFixedHeight): Deleted.
        * layout/formattingContexts/FormattingQuirks.h:
        (WebCore::Layout::FormattingQuirks::layoutState const):
        (WebCore::Layout::FormattingQuirks::layoutState): Deleted.
        * layout/formattingContexts/block/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::quirks const): Deleted.
        * layout/formattingContexts/block/BlockFormattingContext.h:
        * layout/formattingContexts/block/BlockFormattingGeometry.cpp:
        (WebCore::Layout::BlockFormattingGeometry::inFlowContentHeightAndMargin):
        * layout/formattingContexts/block/BlockFormattingQuirks.cpp:
        (WebCore::Layout::BlockFormattingQuirks::BlockFormattingQuirks):
        (WebCore::Layout::needsStretching):
        (WebCore::Layout::BlockFormattingQuirks::stretchedInFlowHeightIfApplicable const):
        (WebCore::Layout::BlockFormattingQuirks::shouldIgnoreCollapsedQuirkMargin):
        (WebCore::Layout::BlockFormattingQuirks::shouldCollapseMarginBeforeWithParentMarginBefore):
        (WebCore::Layout::BlockFormattingQuirks::shouldCollapseMarginAfterWithParentMarginAfter):
        (WebCore::Layout::BlockFormattingQuirks::needsStretching const): Deleted.
        (WebCore::Layout::BlockFormattingQuirks::stretchedInFlowHeight): Deleted.
        (WebCore::Layout::BlockFormattingQuirks::shouldIgnoreCollapsedQuirkMargin const): Deleted.
        (WebCore::Layout::BlockFormattingQuirks::shouldCollapseMarginBeforeWithParentMarginBefore const): Deleted.
        (WebCore::Layout::BlockFormattingQuirks::shouldCollapseMarginAfterWithParentMarginAfter const): Deleted.
        * layout/formattingContexts/block/BlockFormattingQuirks.h:
        (WebCore::Layout::BlockFormattingQuirks::formattingContext const): Deleted.
        * layout/formattingContexts/block/BlockMarginCollapse.cpp:
        (WebCore::Layout::BlockMarginCollapse::marginBeforeCollapsesWithParentMarginBefore const):
        (WebCore::Layout::BlockMarginCollapse::marginAfterCollapsesWithParentMarginAfter const):
        (WebCore::Layout::BlockMarginCollapse::marginAfterCollapsesWithLastInFlowChildMarginAfter const):
        (WebCore::Layout::BlockMarginCollapse::positiveNegativeMarginBefore const):
        (WebCore::Layout::BlockMarginCollapse::quirks const): Deleted.
        * layout/formattingContexts/block/BlockMarginCollapse.h:
        * layout/formattingContexts/block/PrecomputedBlockMarginCollapse.cpp:
        (WebCore::Layout::BlockMarginCollapse::precomputedPositiveNegativeMarginBefore const):
        * layout/formattingContexts/block/tablewrapper/TableWrapperBlockFormattingContext.cpp:
        (WebCore::Layout::TableWrapperBlockFormattingContext::computeHeightAndMarginForTableBox):
        (WebCore::Layout::TableWrapperBlockFormattingContext::quirks const): Deleted.
        * layout/formattingContexts/block/tablewrapper/TableWrapperBlockFormattingContext.h:
        * layout/formattingContexts/block/tablewrapper/TableWrapperBlockFormattingQuirks.cpp:
        (WebCore::Layout::TableWrapperQuirks::TableWrapperQuirks):
        (WebCore::Layout::TableWrapperQuirks::overriddenTableHeight const):
        * layout/formattingContexts/block/tablewrapper/TableWrapperBlockFormattingQuirks.h:
        * layout/formattingContexts/inline/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::lineLayout):
        (WebCore::Layout::InlineFormattingContext::quirks const): Deleted.
        * layout/formattingContexts/inline/InlineFormattingContext.h:
        * layout/formattingContexts/inline/InlineFormattingGeometry.cpp:
        (WebCore::Layout::InlineFormattingGeometry::inlineLevelBoxAffectsLineBox const):
        * layout/formattingContexts/inline/InlineFormattingGeometry.h:
        * layout/formattingContexts/inline/InlineFormattingQuirks.cpp:
        (WebCore::Layout::InlineFormattingQuirks::initialLineHeight const):
        (WebCore::Layout::InlineFormattingQuirks::inlineLevelBoxAffectsLineBox const):
        * layout/formattingContexts/inline/InlineFormattingQuirks.h:
        (WebCore::Layout::InlineFormattingQuirks::formattingContext const): Deleted.
        * layout/formattingContexts/table/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::quirks const): Deleted.
        * layout/formattingContexts/table/TableFormattingContext.h:
        * layout/formattingContexts/table/TableFormattingGeometry.cpp:
        (WebCore::Layout::TableFormattingGeometry::cellHeigh const):
        * layout/formattingContexts/table/TableFormattingQuirks.cpp:
        (WebCore::Layout::TableFormattingQuirks::TableFormattingQuirks):
        (WebCore::Layout::TableFormattingQuirks::shouldIgnoreChildContentVerticalMargin):
        (WebCore::Layout::TableFormattingQuirks::shouldIgnoreChildContentVerticalMargin const): Deleted.
        * layout/formattingContexts/table/TableFormattingQuirks.h:
        (WebCore::Layout::TableFormattingQuirks::formattingContext const): Deleted.
        * layout/integration/LayoutIntegrationInlineContentBuilder.cpp:
        (WebCore::LayoutIntegration::InlineContentBuilder::createDisplayNonRootInlineBoxes const):

2021-05-16  Tim Nguyen  <ntim@apple.com>

        Make will-change: transform-style create a containing block
        https://bugs.webkit.org/show_bug.cgi?id=225441

        Reviewed by Simon Fraser.

        Marked relevant WPT as pass.

        * rendering/style/WillChangeData.cpp:
        (WebCore::WillChangeData::createsContainingBlockForOutOfFlowPositioned const):

2021-05-15  Ryosuke Niwa  <rniwa@webkit.org>

        Delete WebSQL code from WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=225739

        Reviewed by Sihui Liu.

        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setWebSQLEnabled): Replaced setWebSQLDisabled.

2021-05-15  Alan Bujtas  <zalan@apple.com>

        [LFC] Make redundant public helpers private in FormattingContext
        https://bugs.webkit.org/show_bug.cgi?id=225747

        Reviewed by Antti Koivisto.

        * layout/formattingContexts/FormattingContext.h:
        * layout/formattingContexts/FormattingGeometry.cpp:
        (WebCore::Layout::FormattingGeometry::computedHeightValue const):
        * layout/formattingContexts/FormattingQuirks.cpp:
        (WebCore::Layout::FormattingQuirks::heightValueOfNearestContainingBlockWithFixedHeight):

2021-05-15  Alan Bujtas  <zalan@apple.com>

        [LFC] Make redundant public helpers private in TableFormattingContext
        https://bugs.webkit.org/show_bug.cgi?id=225748

        Reviewed by Antti Koivisto.

        * layout/formattingContexts/table/TableFormattingContext.h:
        * layout/formattingContexts/table/TableFormattingGeometry.cpp:
        (WebCore::Layout::TableFormattingGeometry::cellHeigh const):
        * layout/formattingContexts/table/TableFormattingQuirks.h:
        (WebCore::Layout::TableFormattingQuirks::formattingContext const):
        (WebCore::Layout::TableFormattingQuirks::geometry const): Deleted.

2021-05-15  Sam Weinig  <weinig@apple.com>

        Allow conditionally enabling OffscreenCanvas only for non-worker contexts
        https://bugs.webkit.org/show_bug.cgi?id=225845

        Reviewed by Darin Adler.

        Enable both compile time and runtime conditional enablement of just the
        non-worker OffscreenCanvas code path.

        To make this work a new IDL extended attribute was needed, ConditionalForWorker=FOO,
        which allows specifying an additional macro to check for whether the constructor
        should be exposed on workers. Ideally this would be generic for any context type,
        but at the moment, the limited syntax of extended attributes makes that hard. If
        generalization is needed (or a similar syntax is needed for something else) this can
        be revisited.

        To support runtime conditional exposure, the existing EnabledForContext, which calls
        a static function on the implementation class passing the ScriptExecutationContext
        is used. If conditional per context type ever becomes a common thing, we should add
        another extended attribute (and add syntax to support like above) that allows specifying
        both the context type and the setting name.

        Other than that, uses of ENABLE_OFFSCREEN_CANVAS that guarded worker specific functionality
        were replaced by ENABLE_OFFSCREEN_CANVAS_IN_WORKERS.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::serialize):
        (WebCore::CloneSerializer::CloneSerializer):
        (WebCore::CloneSerializer::dumpIfTerminal):
        (WebCore::CloneDeserializer::deserialize):
        (WebCore::CloneDeserializer::CloneDeserializer):
        (WebCore::CloneDeserializer::readTerminal):
        (WebCore::SerializedScriptValue::SerializedScriptValue):
        (WebCore::SerializedScriptValue::computeMemoryCost const):
        (WebCore::SerializedScriptValue::create):
        (WebCore::SerializedScriptValue::deserialize):
        * bindings/js/SerializedScriptValue.h:
        (WebCore::SerializedScriptValue::SerializedScriptValue):
        * bindings/scripts/IDLAttributes.json:
        * bindings/scripts/preprocess-idls.pl:
        (GenerateConstructorAttributes):
        * html/HTMLCanvasElement.idl:
        * html/OffscreenCanvas.cpp:
        (WebCore::OffscreenCanvas::enabledForContext):
        * html/OffscreenCanvas.h:
        * html/OffscreenCanvas.idl:
        * html/canvas/OffscreenCanvasRenderingContext2D.cpp:
        (WebCore::OffscreenCanvasRenderingContext2D::enabledForContext):
        * html/canvas/OffscreenCanvasRenderingContext2D.h:
        * html/canvas/OffscreenCanvasRenderingContext2D.idl:
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setOffscreenCanvasInWorkersEnabled):
        (WebCore::RuntimeEnabledFeatures::offscreenCanvasInWorkersEnabled const):
        * workers/DedicatedWorkerGlobalScope.h:
        * workers/DedicatedWorkerGlobalScope.idl:
        * workers/WorkerAnimationController.cpp:
        * workers/WorkerAnimationController.h:

2021-05-15  Alan Bujtas  <zalan@apple.com>

        [LFC] Make redundant public helpers private in InlineFormattingContext
        https://bugs.webkit.org/show_bug.cgi?id=225749

        Reviewed by Antti Koivisto.

        * layout/formattingContexts/inline/InlineFormattingContext.h:
        * layout/formattingContexts/inline/InlineFormattingGeometry.cpp:
        (WebCore::Layout::LineBoxBuilder::computeLineBoxHeightAndAlignInlineLevelBoxesVertically):
        * layout/formattingContexts/inline/InlineLineBuilder.cpp:
        (WebCore::Layout::isAtSoftWrapOpportunity):
        * layout/integration/LayoutIntegrationInlineContentBuilder.cpp:
        (WebCore::LayoutIntegration::InlineContentBuilder::createDisplayNonRootInlineBoxes const):

2021-05-15  Alan Bujtas  <zalan@apple.com>

        [LFC] Make redundant public helpers private in BlockFormattingContext
        https://bugs.webkit.org/show_bug.cgi?id=225750

        Reviewed by Antti Koivisto.

        * layout/formattingContexts/block/BlockFormattingContext.h:
        * layout/formattingContexts/block/BlockFormattingGeometry.cpp:
        (WebCore::Layout::BlockFormattingGeometry::inFlowNonReplacedContentHeightAndMargin):
        (WebCore::Layout::BlockFormattingGeometry::inFlowContentHeightAndMargin):
        * layout/formattingContexts/block/BlockFormattingQuirks.cpp:
        (WebCore::Layout::BlockFormattingQuirks::stretchedInFlowHeight):
        * layout/formattingContexts/block/BlockMarginCollapse.cpp:
        (WebCore::Layout::BlockMarginCollapse::quirks const):
        (WebCore::Layout::BlockMarginCollapse::marginBeforeCollapsesWithParentMarginBefore const):
        (WebCore::Layout::BlockMarginCollapse::marginAfterCollapsesWithParentMarginAfter const):
        (WebCore::Layout::BlockMarginCollapse::marginAfterCollapsesWithLastInFlowChildMarginAfter const):
        (WebCore::Layout::BlockMarginCollapse::positiveNegativeMarginBefore const):
        * layout/formattingContexts/block/BlockMarginCollapse.h:
        * layout/formattingContexts/block/PrecomputedBlockMarginCollapse.cpp:
        (WebCore::Layout::BlockMarginCollapse::precomputedPositiveNegativeValues const):
        (WebCore::Layout::BlockMarginCollapse::precomputedPositiveNegativeMarginBefore const):
        * layout/formattingContexts/block/tablewrapper/TableWrapperBlockFormattingQuirks.cpp:
        (WebCore::Layout::TableWrapperQuirks::overriddenTableHeight const):

2021-05-15  Alan Bujtas  <zalan@apple.com>

        [LFC] Make FormattingGeometry c'tors public
        https://bugs.webkit.org/show_bug.cgi?id=225751

        Reviewed by Antti Koivisto.

        Remove unnecessary class friending.

        * layout/formattingContexts/FormattingGeometry.h:
        * layout/formattingContexts/block/BlockFormattingGeometry.h:
        * layout/formattingContexts/inline/InlineFormattingGeometry.h:
        * layout/formattingContexts/inline/InlineFormattingQuirks.h:
        * layout/formattingContexts/table/TableFormattingGeometry.h:

2021-05-15  Alan Bujtas  <zalan@apple.com>

        [LFC] Move base formatting geometry to its own class
        https://bugs.webkit.org/show_bug.cgi?id=225752

        Reviewed by Antti Koivisto.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * layout/formattingContexts/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::geometry const):
        * layout/formattingContexts/FormattingContext.h:
        (WebCore::Layout::FormattingContext::Geometry::layoutState const): Deleted.
        (WebCore::Layout::FormattingContext::Geometry::layoutState): Deleted.
        (WebCore::Layout::FormattingContext::Geometry::formattingContext const): Deleted.
        (WebCore::Layout::FormattingContext::geometry const): Deleted.
        (WebCore::Layout::FormattingContext::Geometry::Geometry): Deleted.
        * layout/formattingContexts/FormattingContextGeometry.cpp: Removed.
        * layout/formattingContexts/block/BlockFormattingGeometry.cpp:
        (WebCore::Layout::BlockFormattingGeometry::BlockFormattingGeometry):
        (WebCore::Layout::BlockFormattingGeometry::inFlowNonReplacedContentHeightAndMargin):
        (WebCore::Layout::BlockFormattingGeometry::inFlowNonReplacedContentWidthAndMargin):
        * layout/formattingContexts/block/BlockFormattingGeometry.h:
        (WebCore::Layout::BlockFormattingGeometry::formattingContext const):
        * layout/formattingContexts/flex/FlexFormattingGeometry.cpp:
        (WebCore::Layout::FlexFormattingGeometry::FlexFormattingGeometry):
        * layout/formattingContexts/flex/FlexFormattingGeometry.h:
        (WebCore::Layout::FlexFormattingGeometry::formattingContext const):
        * layout/formattingContexts/inline/InlineFormattingGeometry.cpp:
        (WebCore::Layout::InlineFormattingGeometry::InlineFormattingGeometry):
        (WebCore::Layout::InlineFormattingGeometry::inlineBlockContentWidthAndMargin):
        * layout/formattingContexts/inline/InlineFormattingGeometry.h:
        (WebCore::Layout::InlineFormattingGeometry::formattingContext const):
        * layout/formattingContexts/table/TableFormattingGeometry.cpp:
        (WebCore::Layout::TableFormattingGeometry::TableFormattingGeometry):
        * layout/formattingContexts/table/TableFormattingGeometry.h:
        (WebCore::Layout::TableFormattingGeometry::formattingContext const):
        * layout/formattingContexts/table/TableFormattingQuirks.h:
        (WebCore::Layout::TableFormattingQuirks::geometry const):

2021-05-15  Alan Bujtas  <zalan@apple.com>

        [LFC] Move table formatting geometry to its own class
        https://bugs.webkit.org/show_bug.cgi?id=225753

        Reviewed by Antti Koivisto.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * layout/formattingContexts/table/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::geometry const):
        * layout/formattingContexts/table/TableFormattingContext.h:
        (WebCore::Layout::TableFormattingContext::Geometry::Geometry): Deleted.
        * layout/formattingContexts/table/TableFormattingContextGeometry.cpp: Removed.

2021-05-15  Chris Dumez  <cdumez@apple.com>

        Clean up BaseAudioContext now that legacy/prefixed WebAudio is gone
        https://bugs.webkit.org/show_bug.cgi?id=225843

        Reviewed by Darin Adler.

        The BaseAudioContext class hierarchy used to be a bit complicated when
        we supposed legacy WebAudio because OfflineAudioContext would subclass
        BaseAudioContext directly, while WebKitOfflineAudioContext would
        subclass BaseAudioContext via AudioContext. The class hierarchy is now
        a lot simpler, BaseAudioContext is the base class and it has exactly
        2 subclasses: OfflineAudioContext and AudioContext (for real-time
        rendering). Now that the legacy WebAudio code is gone, this patch
        cleans up BaseAudioContext and moves as much code as possible to its
        subclasses (OfflineAudioContext & AudioContext).

        * Modules/webaudio/AudioBuffer.cpp:
        (WebCore::AudioBuffer::create):
        * Modules/webaudio/AudioBufferSourceNode.cpp:
        (WebCore::AudioBufferSourceNode::setBuffer):
        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::create):
        (WebCore::AudioContext::AudioContext):
        (WebCore::AudioContext::uninitialize):
        (WebCore::AudioContext::lazyInitialize):
        (WebCore::AudioContext::activeDOMObjectName const):
        * Modules/webaudio/AudioContext.h:
        (isType):
        * Modules/webaudio/AudioContextState.h:
        * Modules/webaudio/AudioNode.cpp:
        (WebCore::AudioNode::setChannelCount):
        * Modules/webaudio/AudioNodeOutput.cpp:
        (WebCore::AudioNodeOutput::AudioNodeOutput):
        (WebCore::AudioNodeOutput::setNumberOfChannels):
        * Modules/webaudio/AudioWorkletNode.cpp:
        (WebCore::AudioWorkletNode::create):
        * Modules/webaudio/BaseAudioContext.cpp:
        (WebCore::generateContextID):
        (WebCore::BaseAudioContext::BaseAudioContext):
        (WebCore::BaseAudioContext::lazyInitialize):
        (WebCore::BaseAudioContext::uninitialize):
        (WebCore::BaseAudioContext::stop):
        (WebCore::BaseAudioContext::createScriptProcessor):
        (WebCore::BaseAudioContext::derefFinishedSourceNodes):
        (WebCore::BaseAudioContext::lockInternal):
        (WebCore::BaseAudioContext::tryLock):
        (WebCore::BaseAudioContext::unlock):
        (WebCore::BaseAudioContext::handlePostRenderTasks):
        (WebCore::BaseAudioContext::deleteMarkedNodes):
        (WebCore::BaseAudioContext::updateAutomaticPullNodes):
        (WebCore::BaseAudioContext::postTask):
        (WebCore::BaseAudioContext::workletIsReady):
        * Modules/webaudio/BaseAudioContext.h:
        (WebCore::BaseAudioContext::isInitialized const):
        (WebCore::BaseAudioContext::currentSampleFrame const):
        (WebCore::BaseAudioContext::currentTime const):
        (WebCore::BaseAudioContext::sampleRate const):
        (WebCore::BaseAudioContext::listener):
        (WebCore::BaseAudioContext::incrementConnectionCount):
        (WebCore::BaseAudioContext::isAudioThread const):
        (WebCore::BaseAudioContext::isAudioThreadFinished const):
        (WebCore::BaseAudioContext::isGraphOwner const):
        * Modules/webaudio/ChannelMergerNode.cpp:
        (WebCore::ChannelMergerNode::create):
        * Modules/webaudio/ChannelSplitterNode.cpp:
        (WebCore::ChannelSplitterNode::create):
        * Modules/webaudio/DefaultAudioDestinationNode.cpp:
        (WebCore::DefaultAudioDestinationNode::DefaultAudioDestinationNode):
        (WebCore::DefaultAudioDestinationNode::context):
        (WebCore::DefaultAudioDestinationNode::context const):
        * Modules/webaudio/DefaultAudioDestinationNode.h:
        * Modules/webaudio/MediaElementAudioSourceNode.cpp:
        (WebCore::MediaElementAudioSourceNode::setFormat):
        * Modules/webaudio/MediaStreamAudioSourceNode.cpp:
        (WebCore::MediaStreamAudioSourceNode::setFormat):
        * Modules/webaudio/OfflineAudioContext.cpp:
        (WebCore::OfflineAudioContext::OfflineAudioContext):
        (WebCore::OfflineAudioContext::create):
        (WebCore::OfflineAudioContext::uninitialize):
        (WebCore::OfflineAudioContext::activeDOMObjectName const):
        (WebCore::OfflineAudioContext::startRendering):
        (WebCore::OfflineAudioContext::suspendRendering):
        (WebCore::OfflineAudioContext::resumeRendering):
        (WebCore::OfflineAudioContext::didSuspendRendering):
        (WebCore::OfflineAudioContext::finishedRendering):
        (WebCore::OfflineAudioContext::settleRenderingPromise):
        (WebCore::OfflineAudioContext::dispatchEvent):
        * Modules/webaudio/OfflineAudioContext.h:
        (isType):
        * Modules/webaudio/OfflineAudioContext.idl:
        * Modules/webaudio/OfflineAudioDestinationNode.cpp:
        (WebCore::OfflineAudioDestinationNode::OfflineAudioDestinationNode):
        (WebCore::OfflineAudioDestinationNode::context):
        (WebCore::OfflineAudioDestinationNode::context const):
        * Modules/webaudio/OfflineAudioDestinationNode.h:
        * Modules/webaudio/ScriptProcessorNode.cpp:
        (WebCore::ScriptProcessorNode::ScriptProcessorNode):

2021-05-15  Alan Bujtas  <zalan@apple.com>

        [LFC] Move inline formatting geometry to its own class
        https://bugs.webkit.org/show_bug.cgi?id=225754

        Reviewed by Antti Koivisto.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * layout/formattingContexts/inline/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::geometry const):
        * layout/formattingContexts/inline/InlineFormattingContext.h:
        (WebCore::Layout::InlineFormattingContext::Geometry::Geometry): Deleted.
        * layout/formattingContexts/inline/InlineFormattingContextGeometry.cpp: Removed.

2021-05-15  Alan Bujtas  <zalan@apple.com>

        [LFC] Move flex formatting geometry to its own class
        https://bugs.webkit.org/show_bug.cgi?id=225755

        Reviewed by Antti Koivisto.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * layout/formattingContexts/flex/FlexFormattingContext.cpp:
        (WebCore::Layout::FlexFormattingContext::geometry const):
        * layout/formattingContexts/flex/FlexFormattingContext.h:
        (WebCore::Layout::FlexFormattingContext::Geometry::Geometry): Deleted.
        * layout/formattingContexts/flex/FlexFormattingContextGeometry.cpp: Removed.

2021-05-15  Alan Bujtas  <zalan@apple.com>

        [LFC] Move block formatting geometry to its own class
        https://bugs.webkit.org/show_bug.cgi?id=225756

        Reviewed by Antti Koivisto.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * layout/formattingContexts/block/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::geometry const):
        * layout/formattingContexts/block/BlockFormattingContext.h:
        (WebCore::Layout::BlockFormattingContext::Geometry::formattingContext const): Deleted.
        (WebCore::Layout::BlockFormattingContext::geometry const): Deleted.
        (WebCore::Layout::BlockFormattingContext::Geometry::Geometry): Deleted.
        * layout/formattingContexts/block/BlockFormattingContextGeometry.cpp: Removed.
        * layout/formattingContexts/block/BlockFormattingQuirks.cpp:
        (WebCore::Layout::BlockFormattingQuirks::stretchedInFlowHeight):
        * layout/formattingContexts/block/BlockFormattingQuirks.h:
        (WebCore::Layout::BlockFormattingQuirks::formattingContext const):
        (WebCore::Layout::BlockFormattingQuirks::geometry const): Deleted.
        * layout/formattingContexts/block/PrecomputedBlockMarginCollapse.cpp:
        * layout/formattingContexts/block/tablewrapper/TableWrapperBlockFormattingContext.cpp:
        * layout/formattingContexts/block/tablewrapper/TableWrapperBlockFormattingQuirks.cpp:
        (WebCore::Layout::TableWrapperQuirks::overriddenTableHeight const):

2021-05-15  Alan Bujtas  <zalan@apple.com>

        [LFC] Move base formatting quirks to its own class
        https://bugs.webkit.org/show_bug.cgi?id=225757

        Reviewed by Antti Koivisto.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * layout/formattingContexts/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::quirks const):
        * layout/formattingContexts/FormattingContext.h:
        (WebCore::Layout::FormattingContext::formattingState):
        (WebCore::Layout::FormattingContext::Quirks::layoutState const): Deleted.
        (WebCore::Layout::FormattingContext::Quirks::layoutState): Deleted.
        (WebCore::Layout::FormattingContext::Quirks::formattingContext const): Deleted.
        (WebCore::Layout::FormattingContext::quirks const): Deleted.
        (WebCore::Layout::FormattingContext::Quirks::Quirks): Deleted.
        * layout/formattingContexts/FormattingContextQuirks.cpp: Removed.
        * layout/formattingContexts/block/BlockFormattingQuirks.cpp:
        (WebCore::Layout::BlockFormattingQuirks::BlockFormattingQuirks):
        * layout/formattingContexts/block/BlockFormattingQuirks.h:
        (WebCore::Layout::BlockFormattingQuirks::formattingContext const):
        * layout/formattingContexts/inline/InlineFormattingQuirks.cpp:
        (WebCore::Layout::InlineFormattingQuirks::InlineFormattingQuirks):
        * layout/formattingContexts/inline/InlineFormattingQuirks.h:
        (WebCore::Layout::InlineFormattingQuirks::formattingContext const):
        * layout/formattingContexts/table/TableFormattingQuirks.cpp:
        (WebCore::Layout::TableFormattingQuirks::TableFormattingQuirks):
        * layout/formattingContexts/table/TableFormattingQuirks.h:
        (WebCore::Layout::TableFormattingQuirks::formattingContext const):

2021-05-15  Said Abou-Hallawa  <said@apple.com>

        Implement CanvasRenderingContext2D.createConicGradient
        https://bugs.webkit.org/show_bug.cgi?id=225539

        Reviewed by Sam Weinig.

        Proposal document:
            https://github.com/fserb/canvas2D/blob/master/spec/conic-gradient.md

        MDN documentation:
            https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/createConicGradient

        Tests: fast/canvas/canvas-conic-gradient-angle.html
               fast/canvas/canvas-conic-gradient-center.html
               fast/canvas/conicGradient-infinite-values.html

        * html/canvas/CanvasFillStrokeStyles.idl:
        * html/canvas/CanvasGradient.cpp:
        (WebCore::CanvasGradient::CanvasGradient):
        (WebCore::m_canvas):
        (WebCore::CanvasGradient::create):
        * html/canvas/CanvasGradient.h:
        * html/canvas/CanvasRenderingContext2DBase.cpp:
        (WebCore::CanvasRenderingContext2DBase::createConicGradient):
        * html/canvas/CanvasRenderingContext2DBase.h:

2021-05-15  Alan Bujtas  <zalan@apple.com>

        [LFC] Move table formatting quirks to its own class
        https://bugs.webkit.org/show_bug.cgi?id=225758

        Reviewed by Antti Koivisto.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * layout/formattingContexts/table/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::quirks const):
        * layout/formattingContexts/table/TableFormattingContext.h:
        (WebCore::Layout::TableFormattingContext::Quirks::Quirks): Deleted.
        * layout/formattingContexts/table/TableFormattingContextQuirks.cpp: Removed.

2021-05-15  Alan Bujtas  <zalan@apple.com>

        [LFC] Move inline formatting quirks to its own class
        https://bugs.webkit.org/show_bug.cgi?id=225759

        Reviewed by Antti Koivisto.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * layout/formattingContexts/inline/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::quirks const):
        * layout/formattingContexts/inline/InlineFormattingContext.h:
        (WebCore::Layout::InlineFormattingContext::Quirks::Quirks): Deleted.
        * layout/formattingContexts/inline/InlineFormattingContextQuirks.cpp: Removed.
        * layout/integration/LayoutIntegrationInlineContentBuilder.cpp:

2021-05-15  Alan Bujtas  <zalan@apple.com>

        [LFC] Move table wrapper quirks to its own class
        https://bugs.webkit.org/show_bug.cgi?id=225760

        Reviewed by Antti Koivisto.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * layout/formattingContexts/block/tablewrapper/TableWrapperBlockFormattingContext.cpp:
        (WebCore::Layout::TableWrapperBlockFormattingContext::quirks const):
        * layout/formattingContexts/block/tablewrapper/TableWrapperBlockFormattingContext.h:
        (WebCore::Layout::TableWrapperBlockFormattingContext::Quirks::Quirks): Deleted.
        * layout/formattingContexts/block/tablewrapper/TableWrapperBlockFormattingContextQuirks.cpp: Removed.

2021-05-15  Sam Weinig  <weinig@apple.com>

        Move CanvasRenderingContext2DSettings down to CanvasRenderingContext2DBase so it can be used there (and to support OffscreenCanvas)
        https://bugs.webkit.org/show_bug.cgi?id=225836

        Reviewed by Simon Fraser.

        In subsequent changes, it will be useful to have CanvasRenderingContext2DSettings accessible
        in CanvasRenderingContext2DBase for implementing color space support in ImageData. 

        While doing this, I noticed it was trivial to add support for passing the settings
        to OffscreenCanvasRenderingContext2D, so I add that as well.

        * html/OffscreenCanvas.cpp:
        (WebCore::OffscreenCanvas::getContext):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::CanvasRenderingContext2D):
        (WebCore::CanvasRenderingContext2D::pixelFormat const): Deleted.
        (WebCore::CanvasRenderingContext2D::colorSpace const): Deleted.
        * html/canvas/CanvasRenderingContext2D.h:
        * html/canvas/CanvasRenderingContext2DBase.cpp:
        (WebCore::CanvasRenderingContext2DBase::CanvasRenderingContext2DBase):
        (WebCore::CanvasRenderingContext2DBase::pixelFormat const):
        (WebCore::CanvasRenderingContext2DBase::colorSpace const):
        * html/canvas/CanvasRenderingContext2DBase.h:
        (WebCore::CanvasRenderingContext2DBase::getContextAttributes const):
        * html/canvas/OffscreenCanvasRenderingContext2D.cpp:
        (WebCore::OffscreenCanvasRenderingContext2D::OffscreenCanvasRenderingContext2D):
        * html/canvas/OffscreenCanvasRenderingContext2D.h:
        * html/canvas/PaintRenderingContext2D.cpp:
        (WebCore::PaintRenderingContext2D::PaintRenderingContext2D):

2021-05-15  Alan Bujtas  <zalan@apple.com>

        [LFC] Move block formatting quirks to its own class
        https://bugs.webkit.org/show_bug.cgi?id=225761

        Reviewed by Antti Koivisto.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * layout/formattingContexts/FormattingContext.h:
        (WebCore::Layout::FormattingContext::Quirks::layoutState const):
        (WebCore::Layout::FormattingContext::Quirks::layoutState):
        (WebCore::Layout::FormattingContext::Quirks::formattingContext const):
        (WebCore::Layout::FormattingContext::quirks const):
        * layout/formattingContexts/block/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::quirks const):
        * layout/formattingContexts/block/BlockFormattingContext.h:
        (WebCore::Layout::BlockFormattingContext::Quirks::formattingContext const): Deleted.
        (WebCore::Layout::BlockFormattingContext::Quirks::geometry const): Deleted.
        (WebCore::Layout::BlockFormattingContext::quirks const): Deleted.
        (WebCore::Layout::BlockFormattingContext::Quirks::Quirks): Deleted.
        * layout/formattingContexts/block/BlockFormattingContextQuirks.cpp: Removed.
        * layout/formattingContexts/block/BlockMarginCollapse.cpp:
        * layout/formattingContexts/block/tablewrapper/TableWrapperBlockFormattingContext.h:
        (WebCore::Layout::TableWrapperBlockFormattingContext::Quirks::Quirks):

2021-05-15  Alan Bujtas  <zalan@apple.com>

        [LFC] Move BlockMarginCollapse to its own class
        https://bugs.webkit.org/show_bug.cgi?id=225762

        Reviewed by Antti Koivisto.

        * WebCore.xcodeproj/project.pbxproj:
        * layout/formattingContexts/FormattingContext.h:
        (WebCore::Layout::FormattingContext::formattingState const):
        * layout/formattingContexts/block/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::computeHeightAndMargin):
        (WebCore::Layout::BlockFormattingContext::updateMarginAfterForPreviousSibling):
        (WebCore::Layout::BlockFormattingContext::marginCollapse const):
        * layout/formattingContexts/block/BlockFormattingContext.h:
        (WebCore::Layout::BlockFormattingContext::formattingState const):
        (WebCore::Layout::BlockFormattingContext::Quirks::formattingContext const):
        (WebCore::Layout::BlockFormattingContext::Quirks::geometry const):
        (WebCore::Layout::BlockFormattingContext::quirks const):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::layoutState): Deleted.
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::layoutState const): Deleted.
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::formattingContext const): Deleted.
        (WebCore::Layout::BlockFormattingContext::marginCollapse const): Deleted.
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::MarginCollapse): Deleted.
        * layout/formattingContexts/block/BlockMarginCollapse.cpp:
        (WebCore::Layout::BlockMarginCollapse::BlockMarginCollapse):
        (WebCore::Layout::BlockMarginCollapse::hasClearance const):
        (WebCore::Layout::BlockMarginCollapse::marginBeforeCollapsesWithParentMarginAfter const):
        (WebCore::Layout::BlockMarginCollapse::marginBeforeCollapsesWithParentMarginBefore const):
        (WebCore::Layout::BlockMarginCollapse::marginBeforeCollapsesWithPreviousSiblingMarginAfter const):
        (WebCore::Layout::BlockMarginCollapse::marginBeforeCollapsesWithFirstInFlowChildMarginBefore const):
        (WebCore::Layout::BlockMarginCollapse::marginAfterCollapsesWithSiblingMarginBeforeWithClearance const):
        (WebCore::Layout::BlockMarginCollapse::marginAfterCollapsesWithParentMarginBefore const):
        (WebCore::Layout::BlockMarginCollapse::marginAfterCollapsesWithParentMarginAfter const):
        (WebCore::Layout::BlockMarginCollapse::marginAfterCollapsesWithLastInFlowChildMarginAfter const):
        (WebCore::Layout::BlockMarginCollapse::marginAfterCollapsesWithNextSiblingMarginBefore const):
        (WebCore::Layout::BlockMarginCollapse::marginsCollapseThrough const):
        (WebCore::Layout::BlockMarginCollapse::computedPositiveAndNegativeMargin const):
        (WebCore::Layout::BlockMarginCollapse::marginValue const):
        (WebCore::Layout::BlockMarginCollapse::positiveNegativeValues const):
        (WebCore::Layout::BlockMarginCollapse::positiveNegativeMarginBefore const):
        (WebCore::Layout::BlockMarginCollapse::positiveNegativeMarginAfter const):
        (WebCore::Layout::BlockMarginCollapse::marginBeforeIgnoringCollapsingThrough):
        (WebCore::Layout::BlockMarginCollapse::collapsedVerticalValues):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::hasClearance const): Deleted.
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginBeforeCollapsesWithParentMarginAfter const): Deleted.
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginBeforeCollapsesWithParentMarginBefore const): Deleted.
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginBeforeCollapsesWithPreviousSiblingMarginAfter const): Deleted.
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginBeforeCollapsesWithFirstInFlowChildMarginBefore const): Deleted.
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginAfterCollapsesWithSiblingMarginBeforeWithClearance const): Deleted.
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginAfterCollapsesWithParentMarginBefore const): Deleted.
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginAfterCollapsesWithParentMarginAfter const): Deleted.
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginAfterCollapsesWithLastInFlowChildMarginAfter const): Deleted.
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginAfterCollapsesWithNextSiblingMarginBefore const): Deleted.
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginsCollapseThrough const): Deleted.
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::computedPositiveAndNegativeMargin const): Deleted.
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginValue const): Deleted.
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::updateMarginAfterForPreviousSibling): Deleted.
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::positiveNegativeValues const): Deleted.
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::positiveNegativeMarginBefore const): Deleted.
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::positiveNegativeMarginAfter const): Deleted.
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginBeforeIgnoringCollapsingThrough): Deleted.
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::collapsedVerticalValues): Deleted.
        * layout/formattingContexts/block/PrecomputedBlockMarginCollapse.cpp:
        (WebCore::Layout::BlockMarginCollapse::precomputedPositiveNegativeValues const):
        (WebCore::Layout::BlockMarginCollapse::precomputedPositiveNegativeMarginBefore const):
        (WebCore::Layout::BlockMarginCollapse::precomputedMarginBefore):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::precomputedPositiveNegativeValues const): Deleted.
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::precomputedPositiveNegativeMarginBefore const): Deleted.
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::precomputedMarginBefore): Deleted.
        * layout/formattingContexts/block/tablewrapper/TableWrapperBlockFormattingContext.cpp:
        (WebCore::Layout::TableWrapperBlockFormattingContext::computeHeightAndMarginForTableBox):

2021-05-15  Alexander Mikhaylenko  <alexm@gnome.org>

        [GTK] REGRESSION: Kinetic scrolling on touchpad doesn't work with async scrolling off
        https://bugs.webkit.org/show_bug.cgi?id=224182

        Reviewed by Michael Catanzaro.

        Don't clear the scroll history every time we scroll, that defeats the whole point of having
        the scroll history.

        * platform/generic/ScrollAnimatorGeneric.cpp:
        (WebCore::ScrollAnimatorGeneric::scrollToPositionWithoutAnimation):

2021-05-15  Antti Koivisto  <antti@apple.com>

        Don't allow :visited link style in subtrees that use mix-blend-mode
        https://bugs.webkit.org/show_bug.cgi?id=225446
        rdar://65686091

        Reviewed by Darin Adler.
        
        Test: fast/css/visited-link-mix-blend-mode.html

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::visitedDependentColor const):
        
        Return unvisited style in substrees that use mix-blend-mode.

        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::setBlendMode):
        (WebCore::RenderStyle::isInSubtreeWithBlendMode const):
        
        Add an inherited fake property for tracking this.
        
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::operator== const):
        * rendering/style/StyleRareInheritedData.h:

2021-05-14  Chris Dumez  <cdumez@apple.com>

        Drop FileSystem::fileMetadata() / fileMetadataFollowingSymlinks()
        https://bugs.webkit.org/show_bug.cgi?id=225820

        Reviewed by Darin Adler.

        Update our code base because of the FileSystem API changes.

        * Modules/entriesapi/DOMFileSystem.cpp:
        (WebCore::listDirectoryWithMetadata):
        (WebCore::toFileSystemEntries):
        (WebCore::fileTypeIgnoringHiddenFiles):
        (WebCore::validatePathIsExpectedType):
        (WebCore::DOMFileSystem::getParent):
        (WebCore::DOMFileSystem::getEntry):
        (WebCore::DOMFileSystem::getFile):
        * editing/cocoa/WebContentReaderCocoa.mm:
        (WebCore::attachmentForFilePath):
        * fileapi/File.cpp:
        (WebCore::File::isDirectory const):
        * html/DirectoryFileListCreator.cpp:
        (WebCore::appendDirectoryFiles):
        (WebCore::gatherFileInformation):
        * platform/graphics/avfoundation/objc/CDMInstanceFairPlayStreamingAVFObjC.mm:
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::setStorageDirectory):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::ensureAssetCacheExistsForPath):
        * platform/network/BlobDataFileReference.cpp:
        (WebCore::BlobDataFileReference::startTrackingModifications):
        * platform/network/BlobRegistryImpl.cpp:
        * platform/network/FormData.cpp:
        (WebCore::FormData::prepareForUpload):
        * platform/network/mac/BlobDataFileReferenceMac.mm:
        (WebCore::BlobDataFileReference::generateReplacementFile):

2021-05-14  John Wilander  <wilander@apple.com>

        Javascript can't access a SameSite=Strict cookie after page is loaded after a redirect from a third party site
        https://bugs.webkit.org/show_bug.cgi?id=208049
        <rdar://problem/59701889>

        Reviewed by Chris Dumez.

        The HTTP WG has decided that SameSite=strict cookies should be returned in document.cookie
        even in cases where they are not sent in the HTTP request for the page. Chromium and Gecko
        now work according to those rules and the spec is being updated.

        See:
        - https://github.com/httpwg/http-extensions/issues/769
        - https://github.com/httpwg/http-extensions/pull/1428/files.

        Here's an excerpt from the spec change:
            'If a user agent does return cookies for a given call to a "non-HTTP" API with
            an associated Document, then the user agent MUST compute the cookie-string
            following the algorithm defined in {{retrieval-algorithm}}, indicating that the
            retrieval is from a "non-HTTP" API. The retrieval-uri is the associated
            Document's cookie URL {{COOKIE-URL}}, and the retrieval is same-site if the
            Document's "site for cookies" is same-site with the top-level origin as defined
            in {{document-requests}}.'

        Existing layout tests changed and rebased.

        * loader/CookieJar.cpp:
        (WebCore::CookieJar::sameSiteInfo):
            Now takes a IsCookieAccessForDOM parameter and forwards it to SameSiteInfo::create().
        (WebCore::CookieJar::cookies const):
            Now sends IsCookieAccessForDOM::Yes to CookieJar::sameSiteInfo().
        (WebCore::CookieJar::setCookies):
            Now sends IsCookieAccessForDOM::Yes to CookieJar::sameSiteInfo().
        * loader/CookieJar.h:
        * platform/network/SameSiteInfo.cpp:
        (WebCore::SameSiteInfo::create):
            Now takes a IsForDOMCookieAccess parameter and if it's IsForDOMCookieAccess::Yes and
            the site is top site, sets isSameSite.
        * platform/network/SameSiteInfo.h:
            Now has an enum IsForDOMCookieAccess.

2021-05-14  Rob Buis  <rbuis@igalia.com>

        Provide custom SetInlineFillGradient copy ctor
        https://bugs.webkit.org/show_bug.cgi?id=225688

        Reviewed by Wenson Hsieh.

        Provide custom SetInlineFillGradient copy ctor
        to deal with invalid SetInlineFillGradient source.

        * platform/graphics/displaylists/DisplayListItems.cpp:
        (WebCore::DisplayList::SetInlineFillGradient::SetInlineFillGradient):
        * platform/graphics/displaylists/DisplayListItems.h:
        (WebCore::DisplayList::SetInlineFillGradient::isValid const):

2021-05-14  Chris Dumez  <cdumez@apple.com>

        Drop legacy / prefixed WebAudio implementation
        https://bugs.webkit.org/show_bug.cgi?id=225832

        Reviewed by Darin Adler.

        Drop legacy / prefixed WebAudio implementation now that it is no longer
        present in shipping and we have received any reports of issues.

        This drops all the legacy code but she should be able to clean up the
        code further in follow-ups. In particular, I believe some code can
        now be moved from BaseAudioContext to OfflineAudioContext.

        * CMakeLists.txt:
        * DerivedSources.make:
        * Modules/webaudio/AudioBufferSourceNode.cpp:
        (WebCore::AudioBufferSourceNode::~AudioBufferSourceNode):
        (WebCore::AudioBufferSourceNode::totalPitchRate):
        * Modules/webaudio/AudioBufferSourceNode.h:
        * Modules/webaudio/AudioBufferSourceNode.idl:
        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::create):
        (WebCore::AudioContext::AudioContext):
        * Modules/webaudio/AudioContext.h:
        * Modules/webaudio/AudioListener.h:
        * Modules/webaudio/AudioListener.idl:
        * Modules/webaudio/AudioNode.cpp:
        * Modules/webaudio/AudioNode.h:
        * Modules/webaudio/AudioNode.idl:
        * Modules/webaudio/AudioParam.h:
        * Modules/webaudio/BaseAudioContext.cpp:
        (WebCore::BaseAudioContext::BaseAudioContext):
        * Modules/webaudio/BaseAudioContext.h:
        (WebCore::BaseAudioContext::isOfflineContext const):
        (WebCore::BaseAudioContext::BaseAudioContext):
        * Modules/webaudio/DynamicsCompressorNode.cpp:
        * Modules/webaudio/DynamicsCompressorNode.h:
        * Modules/webaudio/OfflineAudioContext.cpp:
        (WebCore::OfflineAudioContext::OfflineAudioContext):
        * Modules/webaudio/OscillatorNode.h:
        * Modules/webaudio/OscillatorNode.idl:
        * Modules/webaudio/WebKitAudioBufferSourceNode.h: Removed.
        * Modules/webaudio/WebKitAudioBufferSourceNode.idl: Removed.
        * Modules/webaudio/WebKitAudioContext.cpp: Removed.
        * Modules/webaudio/WebKitAudioContext.h: Removed.
        * Modules/webaudio/WebKitAudioContext.idl: Removed.
        * Modules/webaudio/WebKitAudioListener.h: Removed.
        * Modules/webaudio/WebKitAudioListener.idl: Removed.
        * Modules/webaudio/WebKitAudioPannerNode.cpp: Removed.
        * Modules/webaudio/WebKitAudioPannerNode.h: Removed.
        * Modules/webaudio/WebKitAudioPannerNode.idl: Removed.
        * Modules/webaudio/WebKitDynamicsCompressorNode.h: Removed.
        * Modules/webaudio/WebKitDynamicsCompressorNode.idl: Removed.
        * Modules/webaudio/WebKitOfflineAudioContext.cpp: Removed.
        * Modules/webaudio/WebKitOfflineAudioContext.h: Removed.
        * Modules/webaudio/WebKitOfflineAudioContext.idl: Removed.
        * Modules/webaudio/WebKitOscillatorNode.h: Removed.
        * Modules/webaudio/WebKitOscillatorNode.idl: Removed.
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * testing/Internals.cpp:
        (WebCore::Internals::setAudioContextRestrictions):
        * testing/Internals.h:
        * testing/Internals.idl:

2021-05-14  Sam Weinig  <weinig@apple.com>

        CustomPaintImage being in platform/graphics is a layering violation
        https://bugs.webkit.org/show_bug.cgi?id=225356

        Reviewed by Darin Adler.

        It is layering violation for a file in platform/ to reference classes
        like RenderElement or PaintWorkletGlobalScope. This fixes this by moving
        CustomPaintImage out of platform/graphics to html/, next to the existing
        CustomPaintCanvas class.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * html/CustomPaintImage.cpp: Copied from Source/WebCore/platform/graphics/CustomPaintImage.cpp.
        * html/CustomPaintImage.h: Copied from Source/WebCore/platform/graphics/CustomPaintImage.h.
        * platform/graphics/CustomPaintImage.cpp: Removed.
        * platform/graphics/CustomPaintImage.h: Removed.

2021-05-14  Darin Adler  <darin@apple.com>

        output element doesn't react properly to node tree mutations
        https://bugs.webkit.org/show_bug.cgi?id=196532

        Reviewed by Ryosuke Niwa.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::replaceAll): Refactored most of the functions
        replaceAllChildren and replaceAllChildrenWithNewText into this new one,
        and named it based on the name of the operation in the HTML specification.
        The function is incomplete, but preserves existing behavior.
        (WebCore::ContainerNode::stringReplaceAll): Refactored the rest of the
        replaceAllChildrenWithNewText function and renamed to the name from the
        HTML specification.
        * dom/ContainerNode.h: Updated for the above changes.

        * dom/Node.cpp:
        (WebCore::Node::setTextContent): Updated for name change above.
        * dom/Range.cpp:
        (WebCore::Range::surroundContents): Ditto.
        * editing/ios/EditorIOS.mm:
        (WebCore::Editor::setTextAsChildOfElement): Ditto.
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::setInnerText): Ditto.

        * html/HTMLOutputElement.cpp:
        (WebCore::HTMLOutputElement::HTMLOutputElement): Moved data member
        initialization into the class definition.
        (WebCore::HTMLOutputElement::create): Added an overload that takes just
        a document, for use when invoked from as a constructor.
        (WebCore::HTMLOutputElement::parseAttribute): Tightened the logic for the
        for attribute. I decided it's better to call through to the base class, even
        though we often don't do that for attributes that don't expect the base
        class to pay attention to.
        (WebCore::HTMLOutputElement::childrenChanged): Deleted. No need for this in
        the improved HTML specification version of this element's algorithms.
        (WebCore::HTMLOutputElement::reset): Updated based on the HTML specification,
        using the default value algorithm rather than the default value mode flag we
        were using before.
        (WebCore::HTMLOutputElement::setValue): Updated based on the HTML specification,
        always setting the default value override based on the current default value,
        and using stringReplaceAll. There's no need for the old setTextContentInternal,
        since that was all due to the need to avoid infinite recursion in childrenChanged.
        (WebCore::HTMLOutputElement::defaultValue const): Updated based on the HTML
        specification, deriving the default value from the default value override and
        the descendant text content.
        (WebCore::HTMLOutputElement::setDefaultValue): Updated based on the HTML
        specification, doing a string replace all with the value if the default
        value override is null, and updating the default value override otherwise.
        (WebCore::HTMLOutputElement::htmlFor): Updated to rename m_tokens to m_forTokens.
        (WebCore::HTMLOutputElement::setTextContentInternal): Deleted.

        * html/HTMLOutputElement.h: Moved DOMTokenList to be a forward declaration
        instead of an include. Adde a constructor that takes only a document to be used
        from JavaScript. Made the canContainRangeEndPoint override be private like the
        other overrides. Removed the childrenChange override and the
        setTextContentInternal function. Removed m_isDefaultValueMode,
        m_isSetTextContentInProgress, and m_defaultValue. Added m_defaultValueOverride.
        Renamed m_tokens to m_forTokens.

        * html/HTMLOutputElement.idl: Updated to match the HTML specification. This
        involved adding a constructor, adding SameObject for the htmlFor attribute,
        making the form attribute nullable, and removing [LegacyNullToEmptyString]
        from the defaultValue and value attributes.

2021-05-14  Sam Weinig  <weinig@apple.com>

        Use PixelBufferFormat to specify ImageBuffer::getPixelData destination format allowing for more control over data conversion
        https://bugs.webkit.org/show_bug.cgi?id=225813

        Reviewed by Darin Adler.

        The reprevious signature of ImageBuffer::getPixelBuffer:

            ImageBuffer::getPixelBuffer(AlphaPremultiplication, const IntRect&);
        
        only allowed specifying the type of alpha premultiplication wanted, and hard coded
        a pixel format of RGBA8 and color space of SRGB. To support accurate and efficient
        access to pixel buffers with different pixel formats and color spaces we need to be
        able to tell getPixelBuffer what we want up front, so that if the ImageBuffer already
        has a DisplayP3 buffer, and we want DisplayP3 pixels, we don't first convert to SRGB
        and then convert back to DisplayP3 (which would be slow and lose any out of gamut
        data). The new signature allows us to specify the entire format triple:
        
            ImageBuffer::getPixelBuffer(const PixelBufferFormat&, const IntRect&);

        Additionally, ImageBuffer::putPixelBuffer() no longer needs to provide the source
        AlphaPremultiplication either, as the PixelBuffer itself also contains that information.

        Now that we are passing color space information, we need to support color space conversion,
        so PixelBufferConversion was updated to support color space conversion on CG platforms
        using vImageConvert_AnyToAny. This is not currently excersised, but will be in a subsequent
        change where canvas ImageData gains a color space setting, at which point it can be tested.

        We also don't currently support color space conversion on non-CG platforms. This won't
        be a problem in the short term, as only CG platforms support DisplayP3, the only other
        color space that can be specified currently, but as cleanup, we should add support for
        color space conversion using the ColorConversion and ColorTransferFunction infrastructure
        for other ports, moving the existing support for SRGB to/from LinearSRGB conversions from
        ImageBufferCairoBackend and ImageBufferCairoImageSurfaceBackend.

        * html/ImageBitmap.cpp:
        (WebCore::ImageBitmap::createPromise):
        * html/canvas/CanvasRenderingContext2DBase.cpp:
        (WebCore::CanvasRenderingContext2DBase::getImageData const):
        (WebCore::CanvasRenderingContext2DBase::putImageData):
        * page/PageConsoleClient.cpp:
        (WebCore::PageConsoleClient::screenshot):
        * platform/graphics/ConcreteImageBuffer.h:
        (WebCore::ConcreteImageBuffer::putPixelBuffer):
        * platform/graphics/ImageBuffer.h:
        (WebCore::ImageBuffer::putPixelBuffer):
        * platform/graphics/ImageBufferBackend.cpp:
        (WebCore::ImageBufferBackend::convertToLuminanceMask):
        (WebCore::ImageBufferBackend::getPixelBuffer const):
        (WebCore::ImageBufferBackend::putPixelBuffer):
        * platform/graphics/ImageBufferBackend.h:
        * platform/graphics/PixelBufferConversion.cpp:
        (WebCore::makeVImageCGImageFormat):
        (WebCore::makeVImageBuffer):
        (WebCore::convertImagePixelsAccelerated):
        (WebCore::convertImagePixels):
        * platform/graphics/ShadowBlur.cpp:
        (WebCore::ShadowBlur::blurShadowBuffer):
        * platform/graphics/cairo/ImageBufferCairoSurfaceBackend.cpp:
        (WebCore::ImageBufferCairoSurfaceBackend::getPixelBuffer const):
        (WebCore::ImageBufferCairoSurfaceBackend::putPixelBuffer):
        * platform/graphics/cairo/ImageBufferCairoSurfaceBackend.h:
        * platform/graphics/cg/ImageBufferCGBackend.cpp:
        (WebCore::ImageBufferCGBackend::toCFData const):
        * platform/graphics/cg/ImageBufferCGBitmapBackend.cpp:
        (WebCore::ImageBufferCGBitmapBackend::getPixelBuffer const):
        (WebCore::ImageBufferCGBitmapBackend::putPixelBuffer):
        * platform/graphics/cg/ImageBufferCGBitmapBackend.h:
        * platform/graphics/cg/ImageBufferIOSurfaceBackend.cpp:
        (WebCore::ImageBufferIOSurfaceBackend::getPixelBuffer const):
        (WebCore::ImageBufferIOSurfaceBackend::putPixelBuffer):
        * platform/graphics/cg/ImageBufferIOSurfaceBackend.h:
        * platform/graphics/displaylists/DisplayListItems.cpp:
        (WebCore::DisplayList::PutPixelBuffer::PutPixelBuffer):
        (WebCore::DisplayList::PutPixelBuffer::swap):
        (WebCore::DisplayList::operator<<):
        * platform/graphics/displaylists/DisplayListItems.h:
        (WebCore::DisplayList::GetPixelBuffer::GetPixelBuffer):
        (WebCore::DisplayList::GetPixelBuffer::outputFormat const):
        (WebCore::DisplayList::PutPixelBuffer::encode const):
        (WebCore::DisplayList::PutPixelBuffer::decode):
        (WebCore::DisplayList::PutPixelBuffer::inputFormat const): Deleted.
        * platform/graphics/displaylists/DisplayListRecorder.cpp:
        (WebCore::DisplayList::Recorder::getPixelBuffer):
        (WebCore::DisplayList::Recorder::putPixelBuffer):
        * platform/graphics/displaylists/DisplayListRecorder.h:
        * platform/graphics/filters/FEColorMatrix.cpp:
        (WebCore::FEColorMatrix::platformApplySoftware):
        * platform/graphics/filters/FEDropShadow.cpp:
        (WebCore::FEDropShadow::platformApplySoftware):
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::imageBufferResult):
        (WebCore::FilterEffect::convertPixelBufferToColorSpace):
        (WebCore::FilterEffect::convertImageBufferToColorSpace):
        (WebCore::FilterEffect::copyConvertedPixelBufferToDestination):
        (WebCore::FilterEffect::copyUnmultipliedResult):
        (WebCore::FilterEffect::copyPremultipliedResult):
        * platform/graphics/filters/FilterEffect.h:
        * platform/graphics/win/ImageBufferDirect2DBackend.cpp:
        (WebCore::ImageBufferDirect2DBackend::getPixelBuffer const):
        (WebCore::ImageBufferDirect2DBackend::putPixelBuffer):
        * platform/graphics/win/ImageBufferDirect2DBackend.h:
        * rendering/shapes/Shape.cpp:
        (WebCore::Shape::createRasterShape):

2021-05-14  Devin Rousso  <drousso@apple.com>

        Sampled Page Top Color: move logic out of `Document`
        https://bugs.webkit.org/show_bug.cgi?id=225480
        <rdar://problem/77984539>

        Reviewed by Tim Horton.

        Having `determineSampledPageTopColor` be called in `enqueuePaintTimingEntryIfNeeded` as what
        is basically a side effect is not great. The only reason it was there in the first place was
        to take advantage of the logic that decided "is this the first contentful paint", but that
        logic can be replicated elsewhere. Since the sampled page top color deals more with the page
        as a whole instead of an individual `Document` (which includes subframes), it makes more
        sense to have this logic be on a utility `PageColorSampler` that's used in `Page` instead.

        Test: SampledPageTopColor.MainDocumentChange

        * page/PageColorSampler.h: Added.
        * page/PageColorSampler.cpp: Added.
        (WebCore::isValidSampleLocation):
        (WebCore::sampleColor):
        (WebCore::colorDifference):
        (WebCore::averageColor):
        (WebCore::PageColorSampler::sampleTop):
        * page/Page.h:
        * page/Page.cpp:
        (WebCore::Page::doAfterUpdateRendering):
        (WebCore::Page::sampledPageTopColor const):
        (WebCore::Page::didChangeMainDocument):

        * dom/Document.h:
        (WebCore::Document::sampledPageTopColor const): Deleted.
        * dom/Document.cpp:
        (WebCore::Document::enqueuePaintTimingEntryIfNeeded):
        (WebCore::isValidPageSampleLocation): Deleted.
        (WebCore::samplePageColor): Deleted.
        (WebCore::colorDifference): Deleted.
        (WebCore::averageColor): Deleted.
        (WebCore::Document::determineSampledPageTopColor): Deleted.

        * page/FrameView.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::hasContentfulDescendants const): Added.
        (WebCore::FrameView::hasContenfulDescendants const): Deleted.
        Drive-by: Fix incorrect spelling.

        * Source/WebCore/Headers.cmake:
        * Source/WebCore/Sources.txt:
        * Source/WebCore/WebCore.xcodeproj/project.pbxproj:

2021-05-14  Eric Carlson  <eric.carlson@apple.com>

        [GPUP] a media element with a data url and "crossorigin='anonymous'" doesn't load
        https://bugs.webkit.org/show_bug.cgi?id=225786
        <rdar://77625185>

        Reviewed by Jer Noble.

        Test: media/data-url-cross-origin.html

        * loader/MediaResourceLoader.cpp:
        (WebCore::MediaResourceLoader::requestResource): Set loader options `sameOriginDataURLFlag`
        to `SameOriginDataURLFlag::Set` so data: urls are treated as same origin.

2021-05-14  Peng Liu  <peng.liu6@apple.com>

        REGRESSION: [ Mac WK2 ] fast/mediastream/audio-track-enabled.html is flaky failing
        https://bugs.webkit.org/show_bug.cgi?id=221985

        Reviewed by Eric Carlson.

        When `MediaSessionManagerCocoa::updateSessionState()` goes through all sessions, it
        counts all WebAudio sessions regardless their states, and it may set the shared audio
        session's category to be `AudioSession::AmbientSound` if the count of WebAudio sessions
        is not zero.

        However, when we close a page with WebAudio, we should not count the WebAudio session
        here because the corresponding AudioContext is suspended and will be destroyed soon.
        Without this patch, the shared audio session's category might be `AudioSession::AmbientSound`
        after we close the WebAudio page.

        * Modules/webaudio/AudioContext.h:

2021-05-14  Alan Bujtas  <zalan@apple.com>

        [showRenderTree] Do not integral floor the overflow values
        https://bugs.webkit.org/show_bug.cgi?id=225825

        Reviewed by Simon Fraser.

        Integral flooring may hide fractional values caused by rounding bugs.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::outputRenderObject const):

2021-05-14  Chris Dumez  <cdumez@apple.com>

        Drop "get" prefix from WTF::FileSystem's getFileModificationTime() / getFileCreationTime()
        https://bugs.webkit.org/show_bug.cgi?id=225812

        Reviewed by Darin Adler.

        Update code base due to WTF API change.

        * Modules/indexeddb/server/IDBServer.cpp:
        (WebCore::IDBServer::removeAllDatabasesForFullOriginPath):
        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::deleteDatabasesModifiedSince):
        * fileapi/File.cpp:
        (WebCore::File::lastModified const):
        * page/Page.cpp:
        (WebCore::Page::userStyleSheet const):
        * platform/FileStream.cpp:
        (WebCore::FileStream::getSize):
        * platform/network/FormData.cpp:
        (WebCore::FormDataElement::EncodedFileData::fileModificationTimeMatchesExpectation const):
        * platform/network/curl/CurlCacheEntry.cpp:
        (WebCore::CurlCacheEntry::parseResponseHeaders):
        * platform/sql/SQLiteFileSystem.cpp:
        (WebCore::SQLiteFileSystem::databaseCreationTime):
        (WebCore::SQLiteFileSystem::databaseModificationTime):

2021-05-14  Alan Bujtas  <zalan@apple.com>

        [LFC] Add enclosing line top/bottom to showInlineTreeAndRuns
        https://bugs.webkit.org/show_bug.cgi?id=225821

        Reviewed by Simon Fraser.

        * layout/layouttree/LayoutTreeBuilder.cpp:
        (WebCore::Layout::showInlineTreeAndRuns):
        * page/FrameViewLayoutContext.cpp:
        (WebCore::FrameViewLayoutContext::layout):

2021-05-14  Ryosuke Niwa  <rniwa@webkit.org>

        Add ScriptDisallowedScope to MediaPlayerPrivateAVFoundation
        https://bugs.webkit.org/show_bug.cgi?id=225797

        Reviewed by Eric Carlson.

        Deployed ScriptDisallowedScope to a bunch of functions in MediaPlayerPrivateAVFoundation.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::updateStates):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (-[WebCoreAVFMovieObserver observeValueForKeyPath:ofObject:change:context:]):
        (-[WebCoreAVFMovieObserver legibleOutput:didOutputAttributedStrings:nativeSampleBuffers:forItemTime:]):
        (-[WebCoreAVFMovieObserver metadataOutput:didOutputTimedMetadataGroups:fromPlayerItemTrack:]):
        (-[WebCoreAVFLoaderDelegate resourceLoader:didCancelLoadingRequest:]):

2021-05-14  Jean-Yves Avenard  <jya@apple.com>

        Bad media session artwork URL results in blue "broken image" icon being shown in Now Playing
        https://bugs.webkit.org/show_bug.cgi?id=225799
        rdar://77990886

        Reviewed by Eric Carlson.

        By default, when the image's URL doesn't point to an image the CachedImage
        will return a default image consistent of a blue interrogation mark.
        We need to explicitely check that an error occurred. The naming used in the
        method didn't make this need obvious.

        * Modules/mediasession/MediaMetadata.cpp:
        (WebCore::ArtworkImageLoader::notifyFinished): Check for a status error.
        * testing/Internals.cpp:
        (WebCore::Internals::loadArtworkImage): Fix spelling

2021-05-14  Devin Rousso  <drousso@apple.com>

        Promote `-[WKWebView _pageExtendedBackgroundColor]` SPI to `-[WKWebView underPageBackgroundColor]` API
        https://bugs.webkit.org/show_bug.cgi?id=225615
        <rdar://problem/76568094>

        Reviewed by Wenson Hsieh.

        `underPageBackgroundColor` is a `null_resettable` property that will return (in order of validity)
         - the most recent non-null value provided
         - the CSS `background-color` of the `<body>` and/or `<html>` (this is the current value of `_pageExtendedBackgroundColor`)
         - the underlying platform view's background color
        Modifications to this property will not have any effect until control is returned to the runloop.

        Tests: WKWebViewUnderPageBackgroundColor.OnLoad
               WKWebViewUnderPageBackgroundColor.SingleSolidColor
               WKWebViewUnderPageBackgroundColor.SingleBlendedColor
               WKWebViewUnderPageBackgroundColor.MultipleSolidColors
               WKWebViewUnderPageBackgroundColor.MultipleBlendedColors
               WKWebViewUnderPageBackgroundColor.KVO
               WKWebViewUnderPageBackgroundColor.MatchesScrollView

        * page/Page.h:
        (WebCore::Page::underPageBackgroundColorOverride const): Added.
        * page/Page.cpp:
        (WebCore::Page::setUnderPageBackgroundColorOverride): Added.
        Hold the client-overriden value for `underPageBackgroundColor` so that it can be used when
        drawing the overscroll layer.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateLayerForOverhangAreasBackgroundColor):
        Remove the experimental settings `UseSampledPageTopColorForScrollAreaBackgroundColor` and
        `UseThemeColorForScrollAreaBackgroundColor` now that clients can override the default
        overscroll area background color using `-[WKWebView setUnderPageBackgroundColor:]`.

        * dom/Document.cpp:
        (WebCore::Document::themeColorChanged):
        It's no longer necessary to force the overscroll area to redraw since that'll be handled by
        a client calling `-[WKWebView setUnderPageBackgroundColor:]` (possibly in response to a
        `-[WKWebView themeColor]` KVO notification).

2021-05-14  Alex Christensen  <achristensen@webkit.org>

        Fix a build after r277493

        * editing/cocoa/AttributedString.h:
        I removed an unneeded NSDictionary declaration that was being used here.

2021-05-14  Ziran Sun  <zsun@igalia.com>

        Wrong static position for out-of-flow positioned element with different writing-mode than its containing block
        https://bugs.webkit.org/show_bug.cgi?id=189513

        Reviewed by Sergio Villar Senin.

        The static distance computations (computeBlockStaticDistance & computeInlineStaticDistance) in RenderBox have
        not been patched for mixed writing modes. This CL adds support for the case that child is orthogonal to its
        container block when container block's text direction is LTR. It aims at fixing failures in 
        orthogonal-positioned-grid-descendants*.html tests. It is noted that this CL only covers specific case when child's
        writing mode is vlr and parent is horizontal tb rather than all cases of mixed writing modes in the static distance
        computations.
        
        * rendering/RenderBox.cpp:
        (WebCore::computeInlineStaticDistance):
        (WebCore::computeBlockStaticDistance):

2021-05-14  Alex Christensen  <achristensen@webkit.org>

        Resource Timing: secureConnectionStart == 0 when a connection is re-used
        https://bugs.webkit.org/show_bug.cgi?id=225733

        Reviewed by Chris Dumez.

        Covered by a newly-passing web platform test, which was already passed by Chrome and Firefox.

        * page/PerformanceResourceTiming.cpp:
        (WebCore::PerformanceResourceTiming::secureConnectionStart const):
        * platform/network/NetworkLoadMetrics.h:
        I use a sentinel value to distinguish no secure connection from a reused secure connection.
        * platform/network/ResourceHandle.h:
        * platform/network/cocoa/NetworkLoadMetrics.mm:
        (WebCore::packageTimingData):
        (WebCore::copyTimingData):
        Introduce a way to get timing data from CFNetwork using a more modern API.
        (WebCore::timingValue): Deleted.
        * platform/network/cocoa/WebCoreNSURLSession.mm:
        (-[WebCoreNSURLSessionDataTask _timingData]):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::getConnectionTimingData): Deleted.
        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm:
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:didReceiveResponse:]):

2021-05-14  Chris Dumez  <cdumez@apple.com>

        Rename FileSystem::getFileSize() to FileSystem::fileSize()
        https://bugs.webkit.org/show_bug.cgi?id=225798

        Reviewed by Alex Christensen.

        Update code path to due to the API change.

        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
        (WebCore::IDBServer::SQLiteIDBBackingStore::databasesSizeForDirectory):
        * Modules/webdatabase/DatabaseDetails.h:
        (WebCore::DatabaseDetails::DatabaseDetails):
        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::hasAdequateQuotaForOrigin):
        (WebCore::DatabaseTracker::canEstablishDatabase):
        (WebCore::DatabaseTracker::retryCanEstablishDatabase):
        (WebCore::DatabaseTracker::maximumSize):
        (WebCore::DatabaseTracker::detailsForNameAndOrigin):
        (WebCore::DatabaseTracker::setDatabaseDetails):
        (WebCore::DatabaseTracker::usage):
        (WebCore::DatabaseTracker::quotaNoLock):
        (WebCore::DatabaseTracker::quota):
        (WebCore::DatabaseTracker::setQuota):
        (WebCore::isZeroByteFile):
        * Modules/webdatabase/DatabaseTracker.h:
        * editing/cocoa/WebContentReaderCocoa.mm:
        (WebCore::attachmentForFilePath):
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::spaceNeeded):
        (WebCore::ApplicationCacheStorage::loadCache):
        (WebCore::ApplicationCacheStorage::flatFileAreaSize):
        * platform/FileStream.cpp:
        (WebCore::FileStream::getSize):
        * platform/network/FormData.cpp:
        (WebCore::FormDataElement::lengthInBytes const):
        * platform/network/curl/CurlCacheEntry.cpp:
        (WebCore::CurlCacheEntry::loadFileToBuffer):
        * platform/network/curl/CurlCacheManager.cpp:
        (WebCore::CurlCacheManager::loadIndex):
        * platform/sql/SQLiteFileSystem.cpp:
        (WebCore::SQLiteFileSystem::databaseFileSize):
        * platform/sql/SQLiteFileSystem.h:
        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::stringWithContentsOfFile):
        * workers/service/server/SWScriptStorage.cpp:
        (WebCore::shouldUseFileMapping):
        (WebCore::SWScriptStorage::retrieve):

2021-05-14  Chris Dumez  <cdumez@apple.com>

        Rename FileSystem::pathGetFileName() to FileSystem::pathFileName()
        https://bugs.webkit.org/show_bug.cgi?id=225806

        Reviewed by Alex Christensen.

        Rename FileSystem::pathGetFileName() to FileSystem::pathFileName(), as we avoid "get" prefixes in WebKit.

        * Modules/entriesapi/FileSystemEntry.cpp:
        (WebCore::FileSystemEntry::FileSystemEntry):
        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::removeDeletedOpenedDatabases):
        * editing/cocoa/WebContentReaderCocoa.mm:
        (WebCore::attachmentForFilePath):
        * fileapi/File.cpp:
        (WebCore::File::computeNameAndContentType):
        * fileapi/FileCocoa.mm:
        (WebCore::File::computeNameAndContentTypeForReplacedFile):
        * html/DirectoryFileListCreator.cpp:
        (WebCore::gatherFileInformation):
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::store):
        * platform/graphics/avfoundation/objc/CDMInstanceFairPlayStreamingAVFObjC.mm:
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::setStorageDirectory):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::purgeOldDownloadFiles):

2021-05-13  Rob Buis  <rbuis@igalia.com>

        Check for null element in paintSearchFieldResultsButton
        https://bugs.webkit.org/show_bug.cgi?id=225232

        Reviewed by Ryosuke Niwa.

        Check for null element in paintSearchFieldResultsButton.

        Test: fast/css/searchfield-results-button-crash.html

        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintSearchFieldResultsButton):

2021-05-13  Michael Catanzaro  <mcatanzaro@gnome.org>

        Misc GCC warning cleanup
        https://bugs.webkit.org/show_bug.cgi?id=225777

        Reviewed by Carlos Garcia Campos.

        * bindings/js/JSAudioNodeCustom.cpp:
        (WebCore::toJSNewlyCreated): Add missing RELEASE_ASSERT_NOT_REACHED().
        * svg/SVGToOTFFontConversion.cpp:
        (WebCore::SVGToOTFFontConverter::SVGToOTFFontConverter): Remove redundant condition.

2021-05-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Wrong smooth animation sometimes with non-async scrolling
        https://bugs.webkit.org/show_bug.cgi?id=225764

        Reviewed by Adrian Perez de Castro.

        This is happening because sometimes when the scrollbars are added to the scroll view, the contents size hasn't
        been updated yet, so that values saved by ScrollAnimationSmooth::updateVisibleLengths() are 0x0. After that the
        updateVisibleLengths() is not called again when the contents size is updated, so scroll happens with the wrong
        visible lengths. This doesn't happen with async scrolling because updateVisibleLengths()  is called every time
        layers are repositioned. For non-async scrolling it should be enough to update visible lengths when he contents
        size changes.

        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::contentsResized const):
        * platform/ScrollAnimator.h:
        (WebCore::ScrollAnimator::ScrollAnimator::contentsResized const):

2021-05-13  Devin Rousso  <drousso@apple.com>

        [Modern Media Controls] REGRESSION(r268308) AirPlay briefly disappears and then reappears when hovering over controls
        https://bugs.webkit.org/show_bug.cgi?id=225780
        <rdar://problem/77984683>

        Reviewed by Eric Carlson.

        r268308 adjusted `AVRoutePickerViewTargetPicker::isAvailable`, which is used to control
        whether `AVRoutePickerViewTargetPicker` (which uses the `AVRouteDetectorMultipleRoutesDetectedDidChange`
        notification and actually stops listening for it in `stopMonitoringPlaybackTargets`) or
        `AVOutputDeviceMenuControllerTargetPicker` (which uses ObjC KVO and doesn't actually do
        anything in `stopMonitoringPlaybackTargets` when the last JS `"webkitplaybacktargetavailabilitychanged"`
        event listener is removed, meaning that WebKit never senda a new value to the WebProcess) is
        used. When using `AVRoutePickerViewTargetPicker`, WebKit calls `-[AVRouteDetector setRouteDetectionEnabled:]`
        whenever the first JS `"webkitplaybacktargetavailabilitychanged"` event listener is added
        (with the argument `YES`) and the last JS `"webkitplaybacktargetavailabilitychanged"` event
        listener is removed (with the argument `NO`). In the latter scenario (which is the case with
        builtin media controls), `-[AVRouteDetector setRouteDetectionEnabled:]` will dispatch a
        `AVRouteDetectorMultipleRoutesDetectedDidChange` notification and mark itself as not having
        multiple routes (`-[AVRouteDetector multipleRoutesDetected]`). This work is done in the
        UIProcess and the result is sent to the WebProcess, meaning that even though there are no
        more JS event listeners WebKit still updates the cached state of whether multiple routes
        exist. This means that the next time a JS event listener is added, WebKit will ask the
        UIProcess to update (which will re-enable route detection, which will dispatch a `AVRouteDetectorMultipleRoutesDetectedDidChange`
        notification) but then immediately dispatch a JS `"webkitplaybacktargetavailabilitychanged"`
        event using the cached state. Once the request from the UIProcess comes back, WebKit will
        then dispatch *another* JS "webkitplaybacktargetavailabilitychanged" event with the new
        non-cached value.

        * platform/graphics/avfoundation/objc/AVRoutePickerViewTargetPicker.h:
        * platform/graphics/avfoundation/objc/AVRoutePickerViewTargetPicker.mm:
        (WebCore::AVRoutePickerViewTargetPicker::startingMonitoringPlaybackTargets):
        (WebCore::AVRoutePickerViewTargetPicker::stopMonitoringPlaybackTargets):
        (WebCore::AVRoutePickerViewTargetPicker::availableDevicesDidChange):
        Add a flag that ignores the next `AVRouteDetectorMultipleRoutesDetectedDidChange`
        notification since it's guaranteed to be `false` after `setRouteDetectionEnabled:NO`.

2021-05-13  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Cocoa] Plumb data detector results through some platform objects
        https://bugs.webkit.org/show_bug.cgi?id=225775
        Work towards rdar://75504956

        Reviewed by Tim Horton and Devin Rousso.

        Introduce a new struct to hold data detection results, and add it to the existing results object when
        `ENABLE(DATA_DETECTION)` is defined.

        No change in behavior.

        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * editing/cocoa/DataDetection.mm:
        (WebCore::DataDetection::canBePresentedByDataDetectors):
        (WebCore::DataDetection::canPresentDataDetectorsUIForElement):
        (WebCore::resultIsURL):
        (WebCore::constructURLStringForResult):
        (WebCore::buildQuery):
        (WebCore::DataDetection::detectContentInRange):

        Add a `PAL` namespace to each of these DataDetectorsCore softlinking call sites, since the soft link header now
        exists in PAL.

        * platform/ImageExtractionResult.h:
        (WebCore::ImageExtractionDataDetectorInfo::ImageExtractionDataDetectorInfo):
        (WebCore::ImageExtractionResult::isEmpty const):
        (WebCore::ImageExtractionResult::encode const):
        (WebCore::ImageExtractionResult::decode):
        * platform/cocoa/DataDetectorsCoreSoftLink.h: Removed.
        * platform/cocoa/DataDetectorsCoreSoftLink.mm: Removed.

        Additionally, move `DataDetectorsCoreSoftLink.{h|mm}` out of `WebCore/platform` and into PAL as softlinking
        headers, so that they can be imported in WebKit as well as WebCore.

2021-05-13  Devin Rousso  <drousso@apple.com>

        [iOS] REGRESSION(r271216) pointerevents/ios/pointer-events-no-mousedown-when-prevent-default-called-on-pointerdown.html is consistently failing
        https://bugs.webkit.org/show_bug.cgi?id=225734
        <rdar://problem/77070765>

        Reviewed by Tim Horton.

        r271216 made it so that `touchWithIdentifierWasRemoved` is eagerly called when dispatching
        `"pointerup"` for a touch event. This is problematic because (compatibility) mouse events
        are dispatched after both pointer and touch events, meaning that if the `CapturingData` for
        the touch event is removed, there's no way of knowing if the pointer event `preventDefault`.

        Instead of fully removing the `CapturingData` entirely, change its state such that it's
        marked as `CapturingData::State::Finished` and check for that instead.

        * page/PointerCaptureController.h:
        * page/PointerCaptureController.cpp:
        (WebCore::PointerCaptureController::hasCancelledPointerEventForIdentifier const):
        (WebCore::PointerCaptureController::dispatchEventForTouchAtIndex):
        (WebCore::PointerCaptureController::pointerEventForMouseEvent):
        (WebCore::PointerCaptureController::cancelPointer):

2021-05-13  Cameron McCormack  <heycam@apple.com>

        Ensure scrollable transformed elements that are themselves within scrollable elements don't ignore border-radius
        https://bugs.webkit.org/show_bug.cgi?id=216978
        <rdar://69660229>

        Reviewed by Darin Adler.

        We use ShouldRespectOverflowClip to prevent clips from ancestors
        from being used when we paint a scrollable layer (when
        PaintLayerFlag::PaintingOverflowContents is set). We only look
        at the ShouldRespectOverflowClip value when we're painting a layer
        we're considering to be a clip rect root layer, and we unconditionally
        apply ancestor clips for layers that aren't clip rect roots.

        A non-root layer with a transform is handled by applying the transform
        and painting the layer as a root layer (since we don't want to handle
        computing the effect of ancestor clip rects past the transform). When
        the transformed layer also has a border-radius, we incorrectly skip
        marking its clip rect as being affected by radius, since we currently
        do this at the same time as applying ancestor clip rects.

        This patch splits out the setAffectedByRadius call so that it happens
        even for transformed non-root layers.

        Test: fast/layers/overflow-scroll-transform-border-radius.html

        * rendering/RenderLayer.cpp:
        (WebCore::ClipRects::setOverflowClipRectAffectedByRadius):
        (WebCore::RenderLayer::calculateClipRects const):

2021-05-13  Devin Rousso  <drousso@apple.com>

        [macOS] experimental "Use theme color for scroll area background" isn't working
        https://bugs.webkit.org/show_bug.cgi?id=225726
        <rdar://problem/77933000>

        Reviewed by Tim Horton.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateLayerForOverhangAreasBackgroundColor):
        (WebCore::RenderLayerCompositor::updateOverflowControlsLayers):
        Fix last remaining `m_layerForOverhangAreas->setBackgroundColor` to use the helper function
        `RenderLayerCompositor::updateLayerForOverhangAreasBackgroundColor` instead so that all
        paths that update the overscroll area color check the experimental settings too.

2021-05-13  Megan Gardner  <megan_gardner@apple.com>

        Add textIndicator bounce for AppHighlights on scroll.
        https://bugs.webkit.org/show_bug.cgi?id=225727

        Reviewed by Tim Horton.

        * Modules/highlight/AppHighlightStorage.cpp:
        (WebCore::AppHighlightStorage::attemptToRestoreHighlightAndScroll):
        * loader/EmptyClients.cpp:
        (WebCore::EmptyChromeClient::setTextIndicator const):
        * loader/EmptyClients.h:
        * page/ChromeClient.h:
        * page/TextIndicator.h:
        * page/cocoa/WebTextIndicatorLayer.h:
        * page/cocoa/WebTextIndicatorLayer.mm:
        (-[WebTextIndicatorLayer initWithFrame:textIndicator:margin:offset:]):
        (createBounceAnimation):
        (-[WebTextIndicatorLayer _animationDuration]):
        * page/mac/TextIndicatorWindow.h:
        * page/mac/TextIndicatorWindow.mm:
        (WebCore::TextIndicatorWindow::~TextIndicatorWindow):
        (WebCore::TextIndicatorWindow::clearTextIndicator):
        (WebCore::TextIndicatorWindow::setTextIndicator):

2021-05-13  Aditya Keerthi  <akeerthi@apple.com>

        REGRESSION (r276945): [iOS] Focus rings are too large
        https://bugs.webkit.org/show_bug.cgi?id=225778
        <rdar://problem/77858341>

        Reviewed by Tim Horton.

        r276945 updated scaling logic to ensure that the scale of the base CTM
        matches the device scale factor. The change itself makes our base CTM
        more correct, but exposed a longstanding bug with our focus ring
        implementation.

        Focus rings are drawn using CoreGraphics, using CGFocusRingStyle. On
        macOS, the style is initialized using NSInitializeCGFocusRingStyleForTime.
        However, on iOS, we initialize the style ourselves, using UIKit constants.
        Currently, the focus ring's style's radius is set to
        +[UIFocusRingStyle cornerRadius], a constant of 8. This is the longstanding
        issue. CGFocusRingStyle's radius is not a corner radius, but is the
        width of the focus ring. In UIKit, this width is represented by
        +[UIFocusRingStyle borderThickness], a constant of 3. WebKit has always
        intended to match this width, as evidenced by the default outline-width
        of 3px in the UA style sheet.

        Considering the large disparity between the existing and expected radius
        value, it may be surprising that this mistake has gone unnoticed since
        2019, when focus rings were first introduced on iOS. This is where r276945
        comes into play. Prior to r276945, the scale of the base CTM did not match
        the device scale factor. This meant that CG scaled down the constant of 8
        to 4 CSS pixels (1 (base CTM) / 2 (device scale factor)). After r276945,
        the two scales are equal and the focus ring is drawn as 8 CSS pixels, much
        larger than the expected 3px.

        Test: fast/forms/ios/focus-ring-size.html

        * platform/graphics/cocoa/GraphicsContextCocoa.mm:
        (WebCore::drawFocusRingAtTime):

        To fix, use the correct SPI to get the focus ring width,
        +[UIFocusRingStyle borderThickness]. This ensures that focus rings have
        the right width, following r276945.

        The change also fixes focus ring repaint issues that arose from the
        fact that the outline-width was 3px, but the painted width was 4px.

2021-05-13  Sam Weinig  <weinig@apple.com>

        Split pixel buffer format data out into a new PixelBufferFormat struct
        https://bugs.webkit.org/show_bug.cgi?id=225707

        Reviewed by Darin Adler.

        Splits out PixelBufferFormat into a new struct and adopts it by PixelBufferConversionView,
        ConstPixelBufferConversionView and PixelBuffer. This also means that PixelBuffer now
        tracks the alpha format of the underlying buffer which will come in handy.

        * Headers.cmake:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        Add new files.

        * platform/graphics/AlphaPremultiplication.cpp: Added.
        (WebCore::operator<<):
        Add AlphaPremultiplication.cpp and move TextStream support
        here from GraphicsTypes.cpp.

        * platform/graphics/GraphicsTypes.cpp:
        Move AlphaPremultiplication TextStream to the more appropriate
        AlphaPremultiplication.cpp.

        * html/ImageData.cpp:
        (WebCore::ImageData::create):
        * html/ImageData.h:
        (WebCore::ImageData::colorSpace const): Deleted.
        (WebCore::ImageData::format const): Deleted.
        * platform/graphics/ImageBufferBackend.cpp:
        (WebCore::ImageBufferBackend::toBGRAData const):
        (WebCore::ImageBufferBackend::getPixelBuffer const):
        (WebCore::ImageBufferBackend::putPixelBuffer):
        * platform/graphics/ImageBufferBackend.h:
        * platform/graphics/PixelBuffer.cpp:
        (WebCore::PixelBuffer::computeBufferSize):
        (WebCore::PixelBuffer::tryCreateForDecoding):
        (WebCore::PixelBuffer::tryCreate):
        (WebCore::PixelBuffer::PixelBuffer):
        (WebCore::PixelBuffer::deepClone const):
        (WebCore::operator<<):
        * platform/graphics/PixelBuffer.h:
        (WebCore::PixelBuffer::format const):
        (WebCore::PixelBuffer::encode const):
        (WebCore::PixelBuffer::decode):
        (WebCore::PixelBuffer::colorSpace const): Deleted.
        * platform/graphics/PixelBufferConversion.cpp:
        (WebCore::convertImagePixelsAccelerated):
        (WebCore::convertImagePixels):
        * platform/graphics/PixelBufferConversion.h:
        * platform/graphics/PixelBufferFormat.cpp: Added.
        (WebCore::operator<<):
        * platform/graphics/PixelBufferFormat.h: Added.
        (WebCore::PixelBufferFormat::encode const):
        (WebCore::PixelBufferFormat::decode):
        * platform/graphics/PixelFormat.cpp: Added.
        (WebCore::operator<<):
        * platform/graphics/PixelFormat.h:
        * platform/graphics/angle/GraphicsContextGLANGLE.cpp:
        (WebCore::GraphicsContextGLOpenGL::readPixelsForPaintResults):
        * platform/graphics/cg/GraphicsContextGLCG.cpp:
        (WebCore::GraphicsContextGLOpenGL::paintToCanvas):
        * platform/graphics/cg/ImageBufferCGBackend.cpp:
        (WebCore::ImageBufferCGBackend::toCFData const):
        * platform/graphics/cg/ImageBufferUtilitiesCG.cpp:
        (WebCore::cfData):
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::copyUnmultipliedResult):
        (WebCore::FilterEffect::copyPremultipliedResult):
        (WebCore::FilterEffect::createUnmultipliedImageResult):
        (WebCore::FilterEffect::createPremultipliedImageResult):
        Adopt PixelBufferFormat.

2021-05-13  Chris Dumez  <cdumez@apple.com>

        Rename FileSystem::directoryName() to FileSystem::parentPath()
        https://bugs.webkit.org/show_bug.cgi?id=225768

        Reviewed by Darin Adler.

        Rename FileSystem::directoryName() to FileSystem::parentPath() for clarity and
        consistency with std::filesystem::parent_path() which is used internally.

        * Modules/entriesapi/DOMFileSystem.cpp:
        (WebCore::DOMFileSystem::DOMFileSystem):
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::writeDataToUniqueFileInDirectory):
        (WebCore::ApplicationCacheStorage::checkForDeletedResources):
        * platform/graphics/avfoundation/objc/CDMSessionAVContentKeySession.mm:
        (WebCore::CDMSessionAVContentKeySession::contentKeySession):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::purgeOldDownloadFiles):
        * platform/network/curl/CookieJarDB.cpp:
        (WebCore::CookieJarDB::openDatabase):
        * platform/sql/SQLiteFileSystem.cpp:
        (WebCore::SQLiteFileSystem::ensureDatabaseFileExists):
        * platform/win/SearchPopupMenuDB.cpp:
        (WebCore::SearchPopupMenuDB::openDatabase):
        * workers/service/server/SWScriptStorage.cpp:
        (WebCore::SWScriptStorage::store):

2021-05-13  Chris Dumez  <cdumez@apple.com>

        Rename FileSystem::fileIsDirectory(path, followSymlinks) to isDirectory(path) / isDirectoryFollowingSymlinks(path)
        https://bugs.webkit.org/show_bug.cgi?id=225772

        Reviewed by Darin Adler.

        Update code base due to API naming change.

        * Modules/entriesapi/DOMFileSystem.cpp:
        (WebCore::listDirectoryWithMetadata):
        * editing/cocoa/WebContentReaderCocoa.mm:
        (WebCore::attachmentForFilePath):
        * fileapi/File.cpp:
        (WebCore::File::isDirectory const):
        * html/DirectoryFileListCreator.cpp:
        (WebCore::gatherFileInformation):
        * platform/graphics/avfoundation/objc/CDMInstanceFairPlayStreamingAVFObjC.mm:
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::setStorageDirectory):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::ensureAssetCacheExistsForPath):
        * platform/network/FormData.cpp:
        (WebCore::FormData::prepareForUpload):

2021-05-13  Jer Noble  <jer.noble@apple.com>

        [ macOS Wk2 ] media/media-fragments/TC0051.html is flakey crashing
        https://bugs.webkit.org/show_bug.cgi?id=222277
        <rdar://problem/74600790>

        Reviewed by Eric Carlson.

        In r274734, a workaround was added to detect a bug in the Photos.framework that would cause
        an exception to be thrown if the URL provided to AVURLAsset had a malformed fragment identifier.
        However, in an effort to reduce the runtime cost of this check, it was only done once, the first
        time an AVURLAsset is created. This failed to account for the Photos.framework being dynamically
        loaded and changing the behavior of AVURLAsset after the check had been performed.

        Instead, fall back to a much simpler check: wrap the creation of the AVURLAsset in a @try/@catch
        block, and if an exception was thrown, re-attempt to create the AVURLAsset with a manually
        conformed URL.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::conformFragmentIdentifierForURL):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVAssetForURL):
        (WebCore::hasBrokenFragmentSupport): Deleted.

2021-05-13  Alicia Boya García  <aboya@igalia.com>

        [WTF] Add holdLock() overload for WTF::DataMutex
        https://bugs.webkit.org/show_bug.cgi?id=225652

        Reviewed by Xabier Rodriguez-Calvar.

        All instantiations of DataMutex::LockedWrapper have been replaced by
        holdLock(), for equivalent but more concise code.

        This patch introduces no behavior changes.

        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webKitWebSrcConstructed):
        (webKitWebSrcGetProperty):
        (webKitWebSrcSetContext):
        (webKitWebSrcCreate):
        (webKitWebSrcMakeRequest):
        (webKitWebSrcStop):
        (webKitWebSrcGetSize):
        (webKitWebSrcIsSeekable):
        (webKitWebSrcDoSeek):
        (webKitWebSrcQuery):
        (webKitWebSrcUnLock):
        (webKitWebSrcUnLockStop):
        (webKitWebSrcSetMediaPlayer):
        (webKitSrcPassedCORSAccessCheck):
        (CachedResourceStreamingClient::responseReceived):
        (CachedResourceStreamingClient::dataReceived):
        (CachedResourceStreamingClient::accessControlCheckFailed):
        (CachedResourceStreamingClient::loadFailed):
        (CachedResourceStreamingClient::loadFinished):
        (webKitSrcWouldTaintOrigin):
        * platform/graphics/gstreamer/mse/MediaSourceTrackGStreamer.cpp:
        (WebCore::MediaSourceTrackGStreamer::isReadyForMoreSamples):
        (WebCore::MediaSourceTrackGStreamer::notifyWhenReadyForMoreSamples):
        (WebCore::MediaSourceTrackGStreamer::enqueueObject):
        (WebCore::MediaSourceTrackGStreamer::clearQueue):
        * platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamer.cpp:
        (webKitMediaSrcActivateMode):
        (webKitMediaSrcPadLinked):
        (webKitMediaSrcLoop):
        (webKitMediaSrcStreamFlush):

2021-05-13  Darin Adler  <darin@apple.com>

        Remove StringBuilder::appendNumber
        https://bugs.webkit.org/show_bug.cgi?id=225732

        Reviewed by Sam Weinig.

        * Modules/indexeddb/server/IndexValueStore.cpp:
        (WebCore::IDBServer::IndexValueStore::loggingString const):
        Use append instead of appendNumber.

        * Modules/websockets/WebSocketHandshake.cpp:
        (WebCore::hostName): Use makeString instead of StringBuilder.

        * contentextensions/CombinedURLFilters.cpp:
        (WebCore::ContentExtensions::prefixTreeVertexToString):
        Use append instead of appendNumber.
        * contentextensions/Term.h:
        (WebCore::ContentExtensions::Term::toString const): Ditto.
        * css/CSSFontFeatureValue.cpp:
        (WebCore::CSSFontFeatureValue::customCSSText const): Ditto.
        * css/CSSTimingFunctionValue.cpp:
        (WebCore::CSSStepsTimingFunctionValue::customCSSText const): Ditto.

        * dom/Document.cpp:
        (WebCore::Document::downgradeReferrerToRegistrableDomain): Use
        makeString instead of StringBuilder.
        * editing/MarkupAccumulator.cpp:
        (WebCore::MarkupAccumulator::generateUniquePrefix): Ditto.

        * editing/cocoa/DataDetection.mm:
        (WebCore::dataDetectorStringForPath): Use append instead of appendNumber.
        * html/HTMLAnchorElement.cpp:
        (WebCore::appendServerMapMousePosition): Ditto.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::createContext2d): Use makeString
        instead of StringBuilder.
        (WebCore::HTMLCanvasElement::createImageBuffer const): Ditto.

        * loader/ResourceLoadStatistics.cpp:
        (WebCore::ResourceLoadStatistics::toString const): Use append instead
        of appendNumber.

        * loader/SubresourceIntegrity.cpp:
        (WebCore::integrityMismatchDescription): Use makeString instead of
        StringBuilder.

        * page/IntersectionObserver.cpp:
        (WebCore::IntersectionObserver::rootMargin const): Use append instead
        of appendNumber.

        * page/SecurityOriginData.cpp:
        (WebCore::SecurityOriginData::databaseIdentifier const): Use makeString
        instead of StringBuilder.

        * platform/Decimal.cpp:
        (WebCore::Decimal::toString const): Use append instead of appendNumber.

        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::animationNameForTransition): Use makeString
        instead of StringBuilder.
        * platform/graphics/ca/TileController.cpp:
        (WebCore::TileController::createTileLayer): Ditto.

        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        (printTransform): Use single append instead of a run of them.
        (printLayer): Ditto, and use append instead of apppendNumber.
        (PlatformCALayerWin::layerTreeAsString const): Ditto.

        * platform/mediarecorder/MediaRecorderPrivateMock.cpp:
        (WebCore::MediaRecorderPrivateMock::generateMockCounterString):
        Use append instead of appendNumber.
        * platform/network/ProxyServer.cpp:
        (WebCore::appendProxyServerString): Ditto.
        * rendering/RenderTreeAsText.cpp:
        (WebCore::nodePosition): Ditto.
        * svg/SVGPathUtilities.cpp:
        (WebCore::buildStringFromPath): Ditto.

        * testing/Internals.cpp:
        (WebCore::Internals::parserMetaData): Use makeString instead of
        StringBuilder.
        (WebCore::appendOffsets): Use append instead of appendNumber.

        * testing/MockPageOverlayClient.cpp:
        (WebCore::MockPageOverlayClient::drawRect): Use makeString instead
        of StringBuilder.
        (WebCore::MockPageOverlayClient::mouseEvent): Ditto.

        * xml/XMLErrors.cpp:
        (WebCore::XMLErrors::appendErrorMessage): Use append instead of
        appendNumber.

2021-05-13  Zalan Bujtas  <zalan@apple.com>

        [css-flexbox] Flex item construction may affect sibling flex item height computation
        https://bugs.webkit.org/show_bug.cgi?id=225489

        Reviewed by Sergio Villar Senin.

        Flex item construction triggers layout both on the flex item and on its descendants (see constructFlexItem).
        During this layout a percent height descendant may indirectly set an incorrect value on the flex container's 
        m_hasDefiniteHeight (this is due to the odd way we choose to resolve percent height values on the ancestor chain, 
        see setOverridingContainingBlockContentLogicalHeight(WTF::nullopt)).
        Now this incorrect m_hasDefiniteHeight value (Indefinite) causes the next sibling's (also) percent height
        resolve fail as it tells the flex item that the flex container can't help with resolving the percent height value.
        As the result we end up with an incorrect, 0px height value for this sibling.
        e.g.
        <div style="height: 100px; display: flex; flex-direction: column;">
          <div id=flexItemA style="height: 50px;"><div style="height: 100%;"></div></div>
          <div id=flexItemB style="height: 50%;"></div>
        </div>
        By the time we get to the construction of flexItemB, the RenderFlexibleBox's (flex container) m_hasDefiniteHeight
        is already (and incorrectly) set to Indefinite as the result of us trying to resolve flexItemA's descendant height percentage.
        This Indefinite value makes the flexItemB's height resolution fail as we believe that the flex container has indefinite height
        e.g "height: auto", while it is clearly resolvable (50% of 100px).
        Now if we flip the order and flexItemB comes first, the test case passes fine.
        It is very unfortunate that some descendant height resolving process can trigger a state change on the ancestor RenderFlexibleBox, but
        fixing it would certainly require some substantial architectural change.
        In this patch, we just reset the m_hasDefiniteHeight flag inside the loop to ensure that each flex item
        starts with a fresh height percent resolve state. 

        Test: fast/flexbox/flex-column-with-percent-height-descendants.html

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutFlexItems):

2021-05-13  Chris Fleizach  <cfleizach@apple.com>

        AX: Crash at WebCore::Document::updateLayout
        https://bugs.webkit.org/show_bug.cgi?id=225677

        Reviewed by Alan Bujtas.

        Handling notifications while during layout is risky because we can call back into an update method.
        We have handled many other cases like this by deferring the notification, as we do here.
        Special note: this test can't be made to crash because actual crash requires the accessibility
        runtime to be initialized and posting real notifications to the system. But, we can verify that the
        notification is still sent correctly under conditions that could lead to a crash.

        Test: accessibility/mac/menu-selection-notification-crash.html

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::deferMenuListValueChange):
        (WebCore::AXObjectCache::performDeferredCacheUpdate):
        * accessibility/AXObjectCache.h:
        * accessibility/AccessibilityMenuList.cpp:
        (WebCore::AccessibilityMenuList::didUpdateActiveOption):

2021-05-13  Enrique Ocaña González  <eocanha@igalia.com>

        [GStreamer] media/track/in-band/track-in-band-srt-mkv-kind.html is a flaky crash
        https://bugs.webkit.org/show_bug.cgi?id=225697

        This is a tentative fix for the flaky crash (I can't reproduce it locally after 10000
        repetitions). It makes sure that mediaPlayerPrivate and any parameter passed to
        handleTextSample() can either survive or detected to be invalid when the lambda is ran in
        the main thread.

        Reviewed by Alicia Boya Garcia.

        Covered by existing tests.

        * platform/graphics/gstreamer/TextSinkGStreamer.cpp:
        (webkitTextSinkHandleSample): Protect mediaPlayerPrivate and streadId and check if the mediaPlayerPrivate WeakRef is still alive.

2021-05-12  Frederic Wang  <fwang@igalia.com>

        RELEASE_ASSERT(m_selection->isNone()) fails in Document::removedLastRef
        https://bugs.webkit.org/show_bug.cgi?id=225434

        Reviewed by Ryosuke Niwa.

        Document::removedLastRef asserts that the document's selection is not set. However, setting
        that selection is possible in FrameSelection::setSelectionWithoutUpdatingAppearance when the
        document has not been destroyed yet but is already detached from its frame. This patch
        instead clears the selection in that case.

        No new tests.

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::setSelectionWithoutUpdatingAppearance): Clears the selection when
        newSelection is in a detached document. Given the other conditions, this is actually
        checking equivalent to !m_document->frame().

2021-05-12  Peng Liu  <peng.liu6@apple.com>

        [iPad] SourceBufferPrivateAVFObjC should not report an error to the web page when the video playback is interrupted
        https://bugs.webkit.org/show_bug.cgi?id=225620

        Reviewed by Jer Noble.

        If `SourceBufferPrivateAVFObjC` reports an error to a web page when
        `AVSampleBufferDisplayLayer` reports `AVErrorOperationInterrupted` (the playback
        was interrupted), the web page will likely destroy the video player (and teardown
        the video element). That behavior will lead to an empty picture-in-picture window
        if the video was playing in picture-in-picture.

        With this patch, `SourceBufferPrivateAVFObjC` will not report an error to the
        web page in case of playback interruption. Instead, it takes a note that
        the playback was interrupted, so that when we try to resume the playback later,
        it will flush the `AVSampleBufferDisplayLayer` to recover the playback state.

        In addition, we need to enqueue an IDR frame first before we enqueue more
        samples after flushing the `AVSampleBufferDisplayLayer`. That is guaranteed
        by `SourceBufferPrivate::reenqueSamples()`.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::playInternal):
        * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.mm:
        (WebCore::MediaSourcePrivateAVFObjC::flushActiveSourceBuffersIfNeeded):
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::flushIfNeeded):
        (WebCore::SourceBufferPrivateAVFObjC::layerDidReceiveError):
        (WebCore::SourceBufferPrivateAVFObjC::isReadyForMoreSamples):

2021-05-12  Chris Dumez  <cdumez@apple.com>

        Notification.requestPermission() should return a Promise
        https://bugs.webkit.org/show_bug.cgi?id=225712

        Reviewed by Darin Adler.

        Notification.requestPermission() should return a Promise as per the specification:
        - https://notifications.spec.whatwg.org/#notification

        Both Firefox and Chrome already support this.

        Test: http/tests/notifications/request-with-promise.html

        * Modules/notifications/Notification.cpp:
        (WebCore::Notification::requestPermission):
        * Modules/notifications/Notification.h:
        * Modules/notifications/Notification.idl:
        * Modules/notifications/NotificationClient.h:

2021-05-12  Fujii Hironori  <Hironori.Fujii@sony.com>

        Some webgl/2.0.0/conformance/textures/image_bitmap_from_image_data tests are failing after r277369 if !USE(ACCELERATE)
        https://bugs.webkit.org/show_bug.cgi?id=225725

        Reviewed by Sam Weinig.

        * platform/graphics/PixelBufferConversion.cpp:
        (WebCore::convertImagePixels): Fixed the wrong condition of destination.alphaFormat.

2021-05-12  Chris Dumez  <cdumez@apple.com>

        ASSERTION FAILED: actualVTablePointer == expectedVTablePointer in toJSNewlyCreated(JSC::JSGlobalObject *, WebCore::JSDOMGlobalObject *, Ref<WebCore::AudioNode> &&)
        https://bugs.webkit.org/show_bug.cgi?id=225719
        <rdar://77828031>

        Reviewed by Geoffrey Garen.

        AudioNode has (a lot of) subclasses that are exposed to JS (for which we call toJS() for).
        As a result, AudioNode needs a custom toJS() implementation which returns the correct subclass
        wrapper, instead of a generic JSAudioNode.

        Test: webaudio/event-relatedTarget-audionode.html

        * Modules/webaudio/AudioNode.idl:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSAudioNodeCustom.cpp: Added.
        (WebCore::toJSNewlyCreated):
        (WebCore::toJS):

2021-05-12  Ziran Sun  <zsun@igalia.com>

        Wrong position for orthogonal positioned element with writing-mode: vertical-rl
        https://bugs.webkit.org/show_bug.cgi?id=180633

        Reviewed by Javier Fernandez.

        When calculating offset position for orthogonal positioned element with writing mode vertical-rl,
        we also need to take into account of borders and paddings. This change corrects computations
        for both topOffset and leftOffset.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computePositionedLogicalWidthUsing const):
        (WebCore::RenderBox::computePositionedLogicalHeightUsing const):

2021-05-12  Jer Noble  <jer.noble@apple.com>

        TapStorage::lock freed while locked in AudioSourceProviderAVFObjC::destroyMixIfNeeded()
        https://bugs.webkit.org/show_bug.cgi?id=225706
        <rdar://77719381>

        Reviewed by Ryosuke Niwa.

        In r275933, an update was made to protect access to TapStorage during destruction by
        locking its lock inside destroyMixIfNeeded(), but if TapStorage has a refCount==1
        during that teardown, the lock itself is destroyed while it is still held. Add an
        explicit scoping to the lock holder, and only deref the TapStorage outside that
        locking scope.

        * platform/graphics/avfoundation/AudioSourceProviderAVFObjC.mm:
        (WebCore::AudioSourceProviderAVFObjC::destroyMixIfNeeded):

2021-05-12  Said Abou-Hallawa  <said@apple.com>

        Removing the transform CSS property from the SVG element does not cause invalidation
        https://bugs.webkit.org/show_bug.cgi?id=225366

        Reviewed by Simon Fraser.

        If the new or the old RenderStyle includes a transform, the renderer of
        the SVG element needs to be repainted.

        Test: svg/css/svg-css-transform-dynamic-remove.html

        * rendering/svg/RenderSVGModelObject.cpp:
        (WebCore::RenderSVGModelObject::styleDidChange):

2021-05-12  Sam Weinig  <weinig@apple.com>

        Remove inline annoatations for static functions in PixelBufferConversion
        https://bugs.webkit.org/show_bug.cgi?id=225708

        Reviewed by Darin Adler.

        Remove inline annoatations for static functions in PixelBufferConversion
        as suggested by Darin. The theory here is that outside of a header, the
        use of 'inline' serves no purpose as the compiler is perfectly allowed 
        and capable of inlining these functions.

        * platform/graphics/PixelBufferConversion.cpp:
        (WebCore::makeVImageBuffer):
        (WebCore::convertImagePixelsAccelerated):
        (WebCore::convertSinglePixelPremultipliedToPremultiplied):
        (WebCore::convertSinglePixelPremultipliedToUnpremultiplied):
        (WebCore::convertSinglePixelUnpremultipliedToPremultiplied):
        (WebCore::convertSinglePixelUnpremultipliedToUnpremultiplied):
        (WebCore::convertFunctor):

2021-05-12  Alex Christensen  <achristensen@webkit.org>

        Use HashSet<RefPtr<Node>> instead of HashSet<Node*>
        https://bugs.webkit.org/show_bug.cgi?id=220464

        Reviewed by Chris Dumez and Ryosuke Niwa.

        This makes us more resistent to lifetime bugs.

        liveNodeSet() and ignoreSet() need to be WeakHashSet, and they are only used in debug builds so that's fine.

        MutationObserver::observedNodes() is not called on the main thread, but it's called during garbage collection.
        I replaced it with MutationObserver::isReachableFromOpaqueRoots which eliminates the HashSet allocation and hashing,
        and it can return true early if it finds a contained opaque root, resulting in less work in several ways.
        This should only increase our performance slightly while getting the same behavior.

        * accessibility/AXObjectCache.cpp:
        (WebCore::conditionallyAddNodeToFilterList):
        (WebCore::filterVectorPairForRemoval):
        (WebCore::filterMapForRemoval):
        (WebCore::filterListForRemoval):
        (WebCore::AXObjectCache::prepareForDocumentDestruction):
        * bindings/js/JSMutationObserverCustom.cpp:
        (WebCore::JSMutationObserverOwner::isReachableFromOpaqueRoots):
        * dom/MutationObserver.cpp:
        (WebCore::MutationObserver::isReachableFromOpaqueRoots const):
        (WebCore:: const): Deleted.
        * dom/MutationObserver.h:
        * dom/MutationObserverRegistration.cpp:
        (WebCore::MutationObserverRegistration::isReachableFromOpaqueRoots const):
        (WebCore::MutationObserverRegistration::addRegistrationNodesToSet const): Deleted.
        * dom/MutationObserverRegistration.h:
        * dom/Node.cpp:
        (WebCore::liveNodeSet):
        (WebCore::stringForRareDataUseType):
        (WebCore::Node::dumpStatistics):
        (WebCore::ignoreSet):
        (WebCore::Node::trackForDebugging):
        (WebCore::Node::~Node):
        * editing/AppendNodeCommand.cpp:
        (WebCore::AppendNodeCommand::getNodesInCommand):
        * editing/AppendNodeCommand.h:
        * editing/CompositeEditCommand.cpp:
        (WebCore::EditCommandComposition::getNodesInCommand):
        * editing/CompositeEditCommand.h:
        * editing/DeleteFromTextNodeCommand.cpp:
        (WebCore::DeleteFromTextNodeCommand::getNodesInCommand):
        * editing/DeleteFromTextNodeCommand.h:
        * editing/EditCommand.cpp:
        (WebCore::SimpleEditCommand::addNodeAndDescendants):
        * editing/EditCommand.h:
        * editing/InsertIntoTextNodeCommand.cpp:
        (WebCore::InsertIntoTextNodeCommand::getNodesInCommand):
        * editing/InsertIntoTextNodeCommand.h:
        * editing/InsertNodeBeforeCommand.cpp:
        (WebCore::InsertNodeBeforeCommand::getNodesInCommand):
        * editing/InsertNodeBeforeCommand.h:
        * editing/MergeIdenticalElementsCommand.cpp:
        (WebCore::MergeIdenticalElementsCommand::getNodesInCommand):
        * editing/MergeIdenticalElementsCommand.h:
        * editing/RemoveNodeCommand.cpp:
        (WebCore::RemoveNodeCommand::getNodesInCommand):
        * editing/RemoveNodeCommand.h:
        * editing/ReplaceNodeWithSpanCommand.cpp:
        (WebCore::ReplaceNodeWithSpanCommand::getNodesInCommand):
        * editing/ReplaceNodeWithSpanCommand.h:
        * editing/SetNodeAttributeCommand.cpp:
        (WebCore::SetNodeAttributeCommand::getNodesInCommand):
        * editing/SetNodeAttributeCommand.h:
        * editing/SetSelectionCommand.h:
        * editing/SpellingCorrectionCommand.cpp:
        * editing/SplitElementCommand.cpp:
        (WebCore::SplitElementCommand::getNodesInCommand):
        * editing/SplitElementCommand.h:
        * editing/SplitTextNodeCommand.cpp:
        (WebCore::SplitTextNodeCommand::getNodesInCommand):
        * editing/SplitTextNodeCommand.h:
        * editing/WrapContentsInDummySpanCommand.cpp:
        (WebCore::WrapContentsInDummySpanCommand::getNodesInCommand):
        * editing/WrapContentsInDummySpanCommand.h:
        * editing/cocoa/HTMLConverter.mm:
        (HTMLConverterCaches::cacheAncestorsOfStartToBeConverted):
        * inspector/agents/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::highlightSelector):
        * xml/XPathFunctions.cpp:
        (WebCore::XPath::FunId::evaluate const):
        * xml/XPathNodeSet.cpp:
        (WebCore::XPath::sortBlock):
        (WebCore::XPath::NodeSet::traversalSort const):
        * xml/XPathPath.cpp:
        (WebCore::XPath::LocationPath::evaluate const):
        * xml/XPathPredicate.cpp:
        (WebCore::XPath::Union::evaluate const):

2021-05-12  Jer Noble  <jer.noble@apple.com>

        HTMLMediaElement::mediaLoadingFailedFatally() does direct dispatch of events; should enqueue
        https://bugs.webkit.org/show_bug.cgi?id=225700
        <rdar://75576322>

        Reviewed by Eric Carlson.

        In r274559, an update was made to mediaLoadingFailedFatally to adopt recent spec changes, and as
        part of that change, an "error" event was changed from being enqueued to being directly dispatched.
        However, directly dispatching events exposes the element to JS and has the potential to cause the
        element to be garbage collected, deleting the object and potentially other objects in the backtrace.
        Events should always be enqueued, rather than directy dispatched, for this reason.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaLoadingFailedFatally):

2021-05-12  Sergio Villar Senin  <svillar@igalia.com>

        ASSERTION FAILED: m_clients.contains(&client) in CSSFontFace::removeClient via CSSSegmentedFontFace::~CSSSegmentedFontFace()
        https://bugs.webkit.org/show_bug.cgi?id=223790

        Reviewed by Ryosuke Niwa.

        CSSFontFace does not support adding the same client twice as it uses a HashSet to track them. This means that
        it's a mistake to call removeClient() more than once. This could happen when specifying the same font
        family more than once in a <font-face> element inside a svg container.

        Test: fast/css/svg-font-face-duplicate-crash.html

        * css/CSSFontFaceSet.cpp:
        (WebCore::CSSFontFaceSet::fontFace): Skip duplicate CSSFontFace's when before calling appendFontFace().

2021-05-12  Chris Dumez  <cdumez@apple.com>

        Queue notification permission requests for the same origin on WebKit side
        https://bugs.webkit.org/show_bug.cgi?id=225701
        <rdar://76804977>

        Reviewed by Geoffrey Garen.

        Remove some dead code.

        * Modules/notifications/NotificationClient.h:

2021-05-12  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION: Release assert in SlotAssignment::assignedNodesForSlot via ComposedTreeIterator::traverseNextInShadowTree
        in Element::insertedIntoAncestor
        https://bugs.webkit.org/show_bug.cgi?id=225684

        Reviewed by Darin Adler.

        The release assertion failure was caused by RenderTreeUpdater::tearDownRenderers end up traversing the parts of the DOM
        for which Element::insertedIntoAncestor had not been called yet. Since HTMLSlotElement::insertedIntoAncestor is where
        SlotAssignment::Slot is updated for a newly inserted slot, SlotAssignment::Slot may not contain this slot element.

        Fixed the bug by returning early in SlotAssignment::assignedNodesForSlot when this condition holds, which is when
        the shadow root is connected to a document but HTMLSlotElement isn't since its connected flag has not been updated yet.

        Test: fast/shadow-dom/insert-host-child-with-slot-renderer-teardown-crash.html

        * dom/SlotAssignment.cpp:
        (WebCore::SlotAssignment::assignedNodesForSlot):

2021-05-12  Peng Liu  <peng.liu6@apple.com>

        Implement TextTrackPrivateRemote::inBandMetadataTrackDispatchType()
        https://bugs.webkit.org/show_bug.cgi?id=225674

        Reviewed by Eric Carlson.

        Remove an unused function in `InbandTextTrackPrivate`.

        * platform/graphics/InbandTextTrackPrivate.h:
        (WebCore::InbandTextTrackPrivate::textTrackIndex const): Deleted.

2021-05-12  Sergio Villar Senin  <svillar@igalia.com>

        [css-flexbox] Do not use margins when computing aspect ratio cross sizes
        https://bugs.webkit.org/show_bug.cgi?id=221210

        Reviewed by Javier Fernandez.

        In r270578 we implemented section 9.8.1 of the flexbox specs which allowed us to compute child's
        indefinite cross sizes as definite when the flexbox container had a definite cross size and a couple
        of other conditions. However we did not take into account that the child might have some margins in
        in the cross direction. Aspect ratio computations must use the content box and thus, we need to
        substract the margin extent before trying to compute a cross size based on an aspect ratio.

        Note that when computeMainSizeFromAspectRatioUsing() is called the child might not have been ever
        laid out. This means that the margins wouldn't have been computed and thus marginXXX() would always
        return 0. That's why crossAxisMarginExtentForChild() was also modified so that it actually computes
        the margins in case the child needs to be laid out.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::crossAxisMarginExtentForChild const):
        (WebCore::RenderFlexibleBox::computeMainSizeFromAspectRatioUsing const):

2021-05-12  Sam Weinig  <weinig@apple.com>

        Factor copyImagePixels pixel conversion code into its own file
        https://bugs.webkit.org/show_bug.cgi?id=225673

        Reviewed by Darin Adler.

        Removes virtual ImageBufferBackend::copyImagePixels() function and
        moves functionality to new PixelBufferConversion.h/cpp.

        Merge USE(ACCELERATE) code from ImageBufferCGBackend into the same
        file and do some light cleanup. 
        
        - Function renamed to covert convertImagePixels to convey that it is
          doing more than copying.
        - Add PixelBufferConversionView/ConstPixelBufferConversionView structs
          to hold parameters for the conversions, including a ColorSpace member
          that is not yet used but will be shortly.
        - Uses constexpr conditionals in unaccelerated cases to hoist branch
          checking for pixel format conversion requirements outside the main
          loop.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        Add new files.

        * platform/graphics/PixelBufferConversion.cpp: Added.
        (WebCore::makeVImageBuffer):
        (WebCore::convertImagePixelsAccelerated):
        (WebCore::convertSinglePixelPremultipliedToPremultiplied):
        (WebCore::convertSinglePixelPremultipliedToUnpremultiplied):
        (WebCore::convertSinglePixelUnpremultipliedToPremultiplied):
        (WebCore::convertSinglePixelUnpremultipliedToUnpremultiplied):
        (WebCore::convertFunctor):
        (WebCore::convertImagePixels):
        * platform/graphics/PixelBufferConversion.h: Added.
        Move existing copyImagePixels implementations here.

        * platform/graphics/ImageBufferBackend.cpp:
        (WebCore::ImageBufferBackend::toBGRAData const):
        (WebCore::ImageBufferBackend::getPixelBuffer const):
        (WebCore::ImageBufferBackend::putPixelBuffer):
        (WebCore::copyPremultipliedToPremultiplied): Deleted.
        (WebCore::copyPremultipliedToUnpremultiplied): Deleted.
        (WebCore::copyUnpremultipliedToPremultiplied): Deleted.
        (WebCore::copyUnpremultipliedToUnpremultiplied): Deleted.
        (WebCore::copyFunctor): Deleted.
        (WebCore::ImageBufferBackend::copyImagePixels const): Deleted.
        * platform/graphics/ImageBufferBackend.h:
        * platform/graphics/cg/ImageBufferCGBackend.cpp:
        (WebCore::makeVImageBuffer): Deleted.
        (WebCore::copyImagePixelsAccelerated): Deleted.
        (WebCore::ImageBufferCGBackend::copyImagePixels const): Deleted.
        * platform/graphics/cg/ImageBufferCGBackend.h:
        Remove existing copyImagePixels() implementation and call new
        convertImagePixels() instead.
        
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::copyUnmultipliedResult):
        (WebCore::FilterEffect::copyPremultipliedResult):
        (WebCore::FilterEffect::createUnmultipliedImageResult):
        (WebCore::FilterEffect::createPremultipliedImageResult):
        Fix pixel format for the PixelBuffers to match existing behaviors.
        These are not being used at the moment but will in the future
        and new assert in putPixelBuffer caught these being incorrect.

2021-05-12  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r277320 and r277329.
        https://bugs.webkit.org/show_bug.cgi?id=225698

        Added broken test fast/css/visited-link-mix-blend-mode.html

        Reverted changesets:

        "Don't allow :visited link style in subtrees that use mix-
        blend-mode"
        https://bugs.webkit.org/show_bug.cgi?id=225446
        https://trac.webkit.org/changeset/277320

        "Don't allow :visited link style in subtrees that use mix-
        blend-mode"
        https://bugs.webkit.org/show_bug.cgi?id=225446
        https://trac.webkit.org/changeset/277329

2021-05-12  Jean-Yves Avenard  <jya@apple.com>

        Adopt CoreMedia SPI to identify audio-only playback for MSE clients
        https://bugs.webkit.org/show_bug.cgi?id=225647
        rdar://76138365

        Reviewed by Youenn Fablet.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
          tells whether the AVSBAR is attached to an <audio> or <video> element.

2021-05-12  Youenn Fablet  <youenn@apple.com>

        Introduce an internal unit to render audio MediaStreamTrack(s)
        https://bugs.webkit.org/show_bug.cgi?id=225601

        Reviewed by Eric Carlson.

        Move files from platform/mediastream/mac to platform/mediastream/cocoa since they are used in both iOS and macOS.
        Move Audio Unit functionality out of AudioMediaStreamTrackRendererUnit.
        AudioMediaStreamTrackRendererUnit is responsible to manage sources and do the mixing.
        To actually render audio, it will use an InternalUnit, which is currently done in process.

        A future work will add support for a remote InternalUnit, that would run on GPUProcess.
        To prepare for that, a callback allows customizing the Internal Unit creation.
        We also change renderer start to be asynchronous, since it requires fetching the audio description from GPUProcess.

        No change of behavior, covered by existing tests.

        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/audio/cocoa/AudioSampleBufferList.h:
        * platform/mediastream/AudioMediaStreamTrackRenderer.h:
        * platform/mediastream/AudioTrackPrivateMediaStream.cpp:
        (WebCore::AudioTrackPrivateMediaStream::startRenderer):
        * platform/mediastream/cocoa/AudioMediaStreamTrackRendererCocoa.cpp: Renamed from Source/WebCore/platform/mediastream/mac/AudioMediaStreamTrackRendererCocoa.cpp.
        (WebCore::AudioMediaStreamTrackRendererCocoa::start):
        * platform/mediastream/cocoa/AudioMediaStreamTrackRendererCocoa.h: Copied from Source/WebCore/platform/mediastream/mac/AudioMediaStreamTrackRendererCocoa.h.
        * platform/mediastream/cocoa/AudioMediaStreamTrackRendererInternalUnit.cpp: Renamed from Source/WebCore/platform/mediastream/mac/AudioMediaStreamTrackRendererUnit.cpp.
        (WebCore::AudioMediaStreamTrackRendererInternalUnit::createLocalInternalUnit):
        (WebCore::LocalAudioMediaStreamTrackRendererInternalUnit::LocalAudioMediaStreamTrackRendererInternalUnit):
        (WebCore::LocalAudioMediaStreamTrackRendererInternalUnit::retrieveFormatDescription):
        (WebCore::LocalAudioMediaStreamTrackRendererInternalUnit::setAudioOutputDevice):
        (WebCore::LocalAudioMediaStreamTrackRendererInternalUnit::start):
        (WebCore::LocalAudioMediaStreamTrackRendererInternalUnit::stop):
        (WebCore::LocalAudioMediaStreamTrackRendererInternalUnit::createAudioUnitIfNeeded):
        (WebCore::LocalAudioMediaStreamTrackRendererInternalUnit::renderingCallback):
        * platform/mediastream/cocoa/AudioMediaStreamTrackRendererInternalUnit.h: Renamed from Source/WebCore/platform/mediastream/mac/AudioMediaStreamTrackRendererCocoa.h.
        * platform/mediastream/cocoa/AudioMediaStreamTrackRendererUnit.cpp: Added.
        (WebCore::getCreateInternalUnitFunction):
        (WebCore::AudioMediaStreamTrackRendererUnit::setCreateInternalUnitFunction):
        (WebCore::createInternalUnit):
        (WebCore::AudioMediaStreamTrackRendererUnit::singleton):
        (WebCore::AudioMediaStreamTrackRendererUnit::AudioMediaStreamTrackRendererUnit):
        (WebCore::AudioMediaStreamTrackRendererUnit::~AudioMediaStreamTrackRendererUnit):
        (WebCore::AudioMediaStreamTrackRendererUnit::setAudioOutputDevice):
        (WebCore::AudioMediaStreamTrackRendererUnit::addSource):
        (WebCore::AudioMediaStreamTrackRendererUnit::removeSource):
        (WebCore::AudioMediaStreamTrackRendererUnit::start):
        (WebCore::AudioMediaStreamTrackRendererUnit::stop):
        (WebCore::AudioMediaStreamTrackRendererUnit::retrieveFormatDescription):
        (WebCore::AudioMediaStreamTrackRendererUnit::render):
        * platform/mediastream/cocoa/AudioMediaStreamTrackRendererUnit.h: Renamed from Source/WebCore/platform/mediastream/mac/AudioMediaStreamTrackRendererUnit.h.

2021-05-12  Youenn Fablet  <youenn@apple.com>

        Enumerate AVCaptureDevice list in a background thread
        https://bugs.webkit.org/show_bug.cgi?id=225643
        <rdar://problem/77820002>

        Reviewed by Eric Carlson.

        Enumerate AVCaptureDevice in a background queue asynchronously.
        Delay getUserMedia and enumerateDevices until this is completed.

        Update RealtimeMediaSourceCenter accordingly and introduce RealtimeMediaSourceCenter::enumerateDevices for that purpose.
        Replace getCaptureDevices by computeCaptureDevices to do the async computation.
        Continue using captureDevices() getters.

        Manually tested.

        * platform/mediastream/CaptureDevice.h:
        (WebCore::CaptureDevice::CaptureDevice):
        (WebCore::CaptureDevice::isolatedCopy):
        * platform/mediastream/CaptureDeviceManager.h:
        * platform/mediastream/RealtimeMediaSourceCenter.cpp:
        (WebCore::RealtimeMediaSourceCenter::getMediaStreamDevices):
        (WebCore::RealtimeMediaSourceCenter::enumerateDevices):
        (WebCore::RealtimeMediaSourceCenter::validateRequestConstraints):
        (WebCore::RealtimeMediaSourceCenter::validateRequestConstraintsAfterEnumeration):
        * platform/mediastream/RealtimeMediaSourceCenter.h:
        * platform/mediastream/RealtimeMediaSourceFactory.h:
        (WebCore::AudioCaptureFactory::computeSpeakerDevices const):
        * platform/mediastream/ios/AVAudioSessionCaptureDevice.mm:
        (WebCore::AVAudioSessionCaptureDevice::AVAudioSessionCaptureDevice):
        * platform/mediastream/ios/AVAudioSessionCaptureDeviceManager.h:
        * platform/mediastream/ios/AVAudioSessionCaptureDeviceManager.mm:
        (WebCore::AVAudioSessionCaptureDeviceManager::scheduleUpdateCaptureDevices):
        (WebCore::AVAudioSessionCaptureDeviceManager::computeCaptureDevices):
        * platform/mediastream/mac/AVCaptureDeviceManager.h:
        * platform/mediastream/mac/AVCaptureDeviceManager.mm:
        (WebCore::AVCaptureDeviceManager::computeCaptureDevices):
        (WebCore::AVCaptureDeviceManager::captureDevices):
        (WebCore::AVCaptureDeviceManager::updateCachedAVCaptureDevices):
        (WebCore::AVCaptureDeviceManager::retrieveCaptureDevices):
        (WebCore::AVCaptureDeviceManager::refreshCaptureDevices):
        (WebCore::AVCaptureDeviceManager::AVCaptureDeviceManager):

2021-05-11  Cameron McCormack  <heycam@apple.com>

        Include reasons for compositing in showLayerTree output
        https://bugs.webkit.org/show_bug.cgi?id=225640

        Reviewed by Simon Fraser.

        Since it seems useful to know why a layer is composited.

        The logging code was only including one reason, rather than the
        whole set of reasons, and that's unchanged (except for the function
        name to make that clearer), although we could also just make that
        include all of the reasons too.

        There were two reason strings missing, which are also added --
        OverflowScrollPositioning and WillChange -- which the use of a
        switch should help catch in the future.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::logLayerInfo):
        (WebCore::compositingReasonToString):
        (WebCore::RenderLayerCompositor::logReasonsForCompositing):
        (WebCore::operator<<):
        * rendering/RenderLayerCompositor.h:
        * rendering/RenderTreeAsText.cpp:

2021-05-11  Chris Dumez  <cdumez@apple.com>

        Port WTF::FileSystem::listDirectory to std::filesystem
        https://bugs.webkit.org/show_bug.cgi?id=225633

        Reviewed by Darin Adler.

        Update FileSystem::listDirectory() call sites to deal with the fact that:
        - The function now returns file names instead of full file paths
        - The callers now have to do filtering by themselves if they need it

        * Modules/entriesapi/DOMFileSystem.cpp:
        (WebCore::listDirectoryWithMetadata):
        * Modules/indexeddb/server/IDBServer.cpp:
        (WebCore::IDBServer::IDBServer::getAllDatabaseNamesAndVersions):
        (WebCore::IDBServer::collectOriginsForVersion):
        (WebCore::IDBServer::removeAllDatabasesForFullOriginPath):
        (WebCore::IDBServer::removeAllDatabasesForOriginPath):
        (WebCore::IDBServer::IDBServer::removeDatabasesModifiedSinceForVersion):
        (WebCore::IDBServer::IDBServer::removeDatabasesWithOriginsForVersion):
        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
        (WebCore::IDBServer::SQLiteIDBBackingStore::fullDatabaseDirectoryWithUpgrade):
        (WebCore::IDBServer::SQLiteIDBBackingStore::databasesSizeForDirectory):
        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::usage):
        (WebCore::DatabaseTracker::deleteOrigin):
        * html/DirectoryFileListCreator.cpp:
        (WebCore::appendDirectoryFiles):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::uriDecodeBinElementAddedCallback):
        (WebCore::MediaPlayerPrivateGStreamer::purgeOldDownloadFiles):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        * platform/text/hyphen/HyphenationLibHyphen.cpp:
        (WebCore::extractLocaleFromDictionaryFileName):
        (WebCore::scanDirectoryForDictionaries):

2021-05-11  Chris Dumez  <cdumez@apple.com>

        Add SPI to suspend / resume a WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=225333
        <rdar://77462543>

        Reviewed by Geoff Garen.

        Add new function to BackForwardCache to suspend a page and return a CachedPage
        instead of requiring a HistoryItem and storing the CachedPage on that history
        item. This is useful when we want to suspend the page in-place and do not want
        to require a history item (or a navigation).

        * Headers.cmake:
        * history/BackForwardCache.cpp:
        (WebCore::BackForwardCache::trySuspendPage):
        (WebCore::BackForwardCache::addIfCacheable):
        (WebCore::BackForwardCache::suspendPage):
        * history/BackForwardCache.h:
        * history/CachedPage.h:

2021-05-11  Darin Adler  <darin@apple.com>

        Remove the String::toInt family of functions
        https://bugs.webkit.org/show_bug.cgi?id=225599

        Reviewed by Anders Carlsson.

        * platform/graphics/GLContext.cpp:
        (WebCore::GLContext::version): Use
        parseIntegerAllowingTrailingJunk<unsigned> instead of String::toUInt.

        * platform/graphics/GlyphBuffer.h:
        (WebCore::GlyphBuffer::checkedStringOffsetAt const): Fix code that was
        assuming GlyphBufferStringOffset was signed to compile without a warning
        regardless of whether it's signed or unsigned. This was making GTK
        builds have tons and tons of warnings, which was distracting while
        working on the other fixes here.

        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (CachedResourceStreamingClient::responseReceived): Use
        parseIntegerAllowingTrailingJunk<uint64_t> instead of String::toUInt64.

2021-05-11  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r277341.
        https://bugs.webkit.org/show_bug.cgi?id=225685

        Caused WK2 layout tests to exit with an exception

        Reverted changeset:

        "Add SPI to suspend / resume a WKWebView"
        https://bugs.webkit.org/show_bug.cgi?id=225333
        https://trac.webkit.org/changeset/277341

2021-05-11  Simon Fraser  <simon.fraser@apple.com>

        Display-frequency animations in ScrollController should be externally driven
        https://bugs.webkit.org/show_bug.cgi?id=225663

        Reviewed by Tim Horton.

        Display-frequency animations (i.e. those driven by 1/60_s timers) should ultimately
        be driven by Page::updateRendering(), since their output should be synchronized with
        rendering updates.

        As the first step, remove m_snapRubberbandTimer and m_scrollSnapTimer from
        ScrollController and have it expose functions that tell its client to start and stop
        the animation, and a per-frame callback. Give ScrollAnimator a 1/60_s timer
        to drive this, temporarily.

        * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.h:
        * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.mm:
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::startAnimationCallback):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::stopAnimationCallback):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::scrollControllerAnimationTimerFired):
        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::ScrollAnimator):
        (WebCore::ScrollAnimator::startAnimationCallback):
        (WebCore::ScrollAnimator::stopAnimationCallback):
        (WebCore::ScrollAnimator::scrollControllerAnimationTimerFired):
        * platform/ScrollAnimator.h:
        * platform/ScrollController.cpp:
        (WebCore::ScrollController::animationCallback):
        (WebCore::ScrollController::startOrStopAnimationCallbacks):
        (WebCore::ScrollController::setIsAnimatingRubberBand):
        (WebCore::ScrollController::setIsAnimatingScrollSnap):
        (WebCore::ScrollController::updateScrollSnapAnimatingState):
        (WebCore::ScrollController::updateRubberBandAnimatingState):
        * platform/ScrollController.h:
        * platform/ScrollSnapAnimatorState.cpp:
        (WebCore::ScrollSnapAnimatorState::currentAnimatedScrollOffset const):
        * platform/ScrollSnapAnimatorState.h:
        * platform/mac/ScrollController.mm:
        (WebCore::ScrollController::stopAllTimers):
        (WebCore::ScrollController::handleWheelEvent):
        (WebCore::ScrollController::updateRubberBandAnimatingState):
        (WebCore::ScrollController::isScrollSnapInProgress const):
        (WebCore::ScrollController::stopRubberbanding):
        (WebCore::ScrollController::startRubberbandAnimation):
        (WebCore::ScrollController::stopSnapRubberbandAnimation):
        (WebCore::ScrollController::snapRubberBand):
        (WebCore::ScrollController::isRubberBandInProgressInternal const):
        (WebCore::ScrollController::scheduleStatelessScrollSnap):
        (WebCore::ScrollController::statelessSnapTransitionTimerFired):
        (WebCore::ScrollController::processWheelEventForScrollSnap):
        (WebCore::ScrollController::startScrollSnapAnimation):
        (WebCore::ScrollController::stopScrollSnapAnimation):
        (WebCore::ScrollController::updateScrollSnapAnimatingState):
        (WebCore::ScrollController::snapRubberBandTimerFired): Deleted.
        (WebCore::ScrollController::startSnapRubberbandTimer): Deleted.
        (WebCore::ScrollController::stopSnapRubberbandTimer): Deleted.
        (WebCore::ScrollController::startScrollSnapTimer): Deleted.
        (WebCore::ScrollController::stopScrollSnapTimer): Deleted.
        (WebCore::ScrollController::scrollSnapTimerFired): Deleted.

2021-05-11  Geoffrey Garen  <ggaren@apple.com>

        Function.prototype.toString triggers page demand on Speedometer
        https://bugs.webkit.org/show_bug.cgi?id=225678

        Reviewed by Mark Lam.

        Some JS libraries -- e.g. jQuery, Ember-Debug, Angular -- like to
        toString() JS functions in order to enforce return type, argument type,
        or deprecation invariants. This triggers pathological page demand if
        we keep throwing away the underlying script string.

        * loader/cache/CachedResource.cpp:
        (WebCore::deadDecodedDataDeletionIntervalForResourceType): Let's try 5s.

2021-05-11  Toshio Ogasawara  <toshio.ogasawara@access-company.com>

        [MSE] QuotaExceededError Exception not thrown even if the sum of totalTrackBufferSize and appendBuffer size exceeds maximumBufferSize.
        https://bugs.webkit.org/show_bug.cgi?id=225630

        Reviewed by Eric Carlson.

        Test: media/media-source/media-source-append-buffer-full-quota-exceeded-error.html

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::appendBufferInternal):
        * platform/graphics/SourceBufferPrivate.cpp:
        (WebCore::SourceBufferPrivate::evictCodedFrames):
        * platform/graphics/SourceBufferPrivate.h:

2021-05-11  Sihui Liu  <sihui_liu@apple.com>

        Use one VM per thread for IDB serialization work
        https://bugs.webkit.org/show_bug.cgi?id=225658

        Reviewed by Chris Dumez.

        The vm map in IDBSerializationContext uses sessionID as key instead of thread identifier. Normally IDB has one 
        thread per session (see WebIDBServer and CrossThreadTaskHandler), so we are using one vm per thread. With 
        r275799, we remove WebIDBServer more aggressively (when no web process is not using IDB) to make sure its thread
        does not stay around, and WebIDBServer will be destroyed after it finishes scheduled tasks on the background 
        thread. Then, it's possible that while a WebIDBServer for some session is removed and finishing last tasks, 
        a new IDB request for the same session comes in and we create a new WebIDBServer for the session. In this case,
        two threads ends up using the same VM.

        VM is generally not designed to be used on multiple threads, otherwise we need to acquire lock for each 
        WTF::String operation to get correct AtomStringTable. So let's just make sure we are using one VM per thread by
        making the map in IDBSerializationContext keyed by thread pointer.

        New API test: IndexedDB.OneVMPerThread

        * Modules/indexeddb/server/IDBSerializationContext.cpp:
        (WebCore::IDBServer::IDBSerializationContext::getOrCreateIDBSerializationContext):
        (WebCore::IDBServer::IDBSerializationContext::~IDBSerializationContext):
        (WebCore::IDBServer::IDBSerializationContext::vm):
        (WebCore::IDBServer::IDBSerializationContext::globalObject):
        (WebCore::IDBServer::IDBSerializationContext::IDBSerializationContext):
        * Modules/indexeddb/server/IDBSerializationContext.h:
        * Modules/indexeddb/server/MemoryIDBBackingStore.cpp:
        (WebCore::IDBServer::MemoryIDBBackingStore::MemoryIDBBackingStore):
        * Modules/indexeddb/server/MemoryObjectStore.cpp:
        (WebCore::IDBServer::MemoryObjectStore::MemoryObjectStore):
        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
        (WebCore::IDBServer::SQLiteIDBBackingStore::SQLiteIDBBackingStore):

2021-05-11  Chris Dumez  <cdumez@apple.com>

        Add SPI to suspend / resume a WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=225333
        <rdar://77462543>

        Reviewed by Geoffrey Garen.

        Add new function to BackForwardCache to suspend a page and return a CachedPage
        instead of requiring a HistoryItem and storing the CachedPage on that history
        item. This is useful when we want to suspend the page in-place and do not want
        to require a history item (or a navigation).

        * Headers.cmake:
        * history/BackForwardCache.cpp:
        (WebCore::BackForwardCache::trySuspendPage):
        (WebCore::BackForwardCache::addIfCacheable):
        (WebCore::BackForwardCache::suspendPage):
        * history/BackForwardCache.h:
        * history/CachedPage.h:

2021-05-11  Alex Christensen  <achristensen@webkit.org>

        Add SPI to restrict networking to a set of hosts
        https://bugs.webkit.org/show_bug.cgi?id=225426
        <rdar://77571521>

        Reviewed by Tim Horton.

        In r259392 I added SPI to turn network access on and off, but a client needs finer grained control.
        This uses the same infrastructure to add a set of hosts to allow.  Setting it to nil (the default) allows all hosts,
        but setting it to an empty set allows no network access.  This accomplishes the same ability as the old SPI, so I'm deprecating it
        with this as a replacement.  The new ability to specify a finite number of hosts to allow creates a limited WKWebView.

        * Modules/websockets/ThreadableWebSocketChannel.cpp:
        (WebCore::ThreadableWebSocketChannel::validateURL):
        * loader/ResourceLoadNotifier.cpp:
        (WebCore::ResourceLoadNotifier::dispatchWillSendRequest):
        * page/Page.cpp:
        (WebCore::Page::allowsLoadFromURL const):
        * page/Page.h:
        (WebCore::Page::loadsFromNetwork const): Deleted.
        * page/PageConfiguration.h:

2021-05-11  Megan Gardner  <megan_gardner@apple.com>

        Factor out find bounce layer
        https://bugs.webkit.org/show_bug.cgi?id=225557

        Reviewed by Tim Horton.

        Factor out the text indicator bounce layer in preparation of making this 
        compatable with iOS. 

        No behavior change. 

        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * page/mac/TextIndicatorWindow.h:
        * page/mac/TextIndicatorWindow.mm:
        (WebCore::TextIndicatorWindow::setAnimationProgress):
        (WebCore::TextIndicatorWindow::clearTextIndicator):
        (WebCore::TextIndicatorWindow::setTextIndicator):
        (WebCore::TextIndicatorWindow::closeWindow):
        (WebCore::TextIndicatorWindow::startFadeOut):
        (indicatorWantsBounce): Deleted.
        (indicatorWantsContentCrossfade): Deleted.
        (indicatorWantsFadeIn): Deleted.
        (indicatorWantsManualAnimation): Deleted.
        (-[WebTextIndicatorView initWithFrame:textIndicator:margin:offset:]): Deleted.
        (createBounceAnimation): Deleted.
        (createContentCrossfadeAnimation): Deleted.
        (createShadowFadeAnimation): Deleted.
        (createFadeInAnimation): Deleted.
        (-[WebTextIndicatorView _animationDuration]): Deleted.
        (-[WebTextIndicatorView hasCompletedAnimation]): Deleted.
        (-[WebTextIndicatorView present]): Deleted.
        (-[WebTextIndicatorView hideWithCompletionHandler:]): Deleted.
        (-[WebTextIndicatorView setAnimationProgress:]): Deleted.
        (-[WebTextIndicatorView isFlipped]): Deleted.
        
2021-05-11  Antti Koivisto  <antti@apple.com>

        Don't allow :visited link style in subtrees that use mix-blend-mode
        https://bugs.webkit.org/show_bug.cgi?id=225446
        rdar://65686091

        Unreviewed build fix.

        * rendering/style/RenderStyle.h:

2021-05-11  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r277322.
        https://bugs.webkit.org/show_bug.cgi?id=225657

        Causing build failure

        Reverted changeset:

        "Adopt CoreMedia SPI to identify audio-only playback for MSE
        clients"
        https://bugs.webkit.org/show_bug.cgi?id=225647
        https://trac.webkit.org/changeset/277322

2021-05-11  Zalan Bujtas  <zalan@apple.com>

        REGRESSION(r275515): wpt/quirks/blocks-ignore-line-height.html
        https://bugs.webkit.org/show_bug.cgi?id=225591
        <rdar://problem/77766308>

        Reviewed by Antti Koivisto.

        Replace the generic line height quirk with a list-item specific one.
        The original quirk was added to cover fast/lists/list-item-line-height.html but it looks like
        it only needs a list-item specific quirk. This is copied from legacy line layout (see InlineFlowBox c'tor).

        Test: fast/inline/line-height-in-non-standards-mode.html

        * layout/formattingContexts/inline/InlineFormattingContextQuirks.cpp:
        (WebCore::Layout::InlineFormattingContext::Quirks::inlineLevelBoxAffectsLineBox const):
        * layout/integration/LayoutIntegrationBoxTree.cpp:
        (WebCore::LayoutIntegration::rootBoxStyle):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::isOriginalDisplayListItemType const):
        (WebCore::RenderStyle::isDisplayListItemType):

2021-05-11  Zalan Bujtas  <zalan@apple.com>

        [LFC][Integration] Disable IFC when inline level box has box shadow
        https://bugs.webkit.org/show_bug.cgi?id=225634

        Reviewed by Darin Adler.

        Needs painting support.

        * layout/integration/LayoutIntegrationCoverage.cpp:
        (WebCore::LayoutIntegration::canUseForChild):

2021-05-11  Jean-Yves Avenard  <jya@apple.com>

        Adopt CoreMedia SPI to identify audio-only playback for MSE clients
        https://bugs.webkit.org/show_bug.cgi?id=225647
        rdar://76138365

        Reviewed by Youenn Fablet.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
          tells whether the AVSBAR is attached to an <audio> or <video> element.

2021-05-11  Cathie Chen  <cathiechen@igalia.com>

        [CSS contain] Support contain:size
        https://bugs.webkit.org/show_bug.cgi?id=223570

        Reviewed by Alan Bujtas.

        This patch brings initial support of CSS contain:size according to [1].
        It adds shouldApplySizeContainment() to indicate whether the object is a size containment box.
        The intrinsic sizes of size containment box are determined as if it had no content.
        So the implementation need to cooperate with the layout steps:
          - Computing logical width: Size containment boxes skip handling children while computing minLogicalWidth
          and maxLogicalWidth in computeIntrinsicLogicalWidths. So the logical width is not affected by children.
          - Layout children: The logical height is changed after layout all children.
          - Computing logical height: At the beginning, size containment boxes need to reset logical height to the empty content height
          if it is not renderGrid. So the logical height is not affected by children.
        We also need to calculate the sizes according to the layout algorithms.
        - Grid layout:
          To calculate the minLogicalWidth and maxLogicalWidth for indefinite size RenderGrid.
          The widths are calculated by GridTrackSizingAlgorithm: m_minContentSize and m_maxContentSize which are the sum of
          m_baseSize/m_growthLimit of all GridTracks. The size containment RenderGrid skips handling content in resolveIntrinsicTrackSizes
          and the m_maxContentSize will be the sum of m_baseSize. The logical height is same to width, but after calculating
          RenderGrid's logical height, it needs to calculate the track sizes again, to make sure that they are distributed properly.
          We use computeTrackSizesForDefiniteSize(ForRows, trackBasedLogicalHeight) to recalculate it.
        - MultiColumn layout:
          According to the specification, size containment boxes should be monolithic, so we need to extend column height
          for overflow and positioned size containment boxes. m_spaceShortageForSizeContainment is added to indicate the shortage space
          that need to balance the column heights. adjustSizeContainmentChildForPagination() will calculate the shortage.

        [1] https://www.w3.org/TR/css-contain-1/#containment-size

        * rendering/GridTrackSizingAlgorithm.cpp: Add isComputingSizeContainment to indicate if it is calculating sizes
          for indefinite size RenderGrid which is size containment.
        (WebCore::GridTrackSizingAlgorithm::gridAreaBreadthForChild const):
        (WebCore::GridTrackSizingAlgorithm::computeGridContainerIntrinsicSizes):
          It skips resolveIntrinsicTrackSizes if isComputingSizeContainment, so growthLimit might be undefined,
          if so, use track.baseSize() instead.
        (WebCore::GridTrackSizingAlgorithm::resolveIntrinsicTrackSizes): Skip resolve the content if isComputingSizeContainment().
        (WebCore::GridTrackSizingAlgorithm::advanceNextState): Added RowSizingExtraIterationForSizeContainment.
        (WebCore::GridTrackSizingAlgorithm::isValidTransition const):
        (WebCore::GridTrackSizingAlgorithm::run): Do not stretch the track sizes if isComputingSizeContainment().
        * rendering/GridTrackSizingAlgorithm.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutPositionedObject): Calculate m_spaceShortageForSizeContainment for positioned size containment.
        (WebCore::RenderBlock::computeIntrinsicLogicalWidths const): Skip computeBlockPreferredLogicalWidths if shouldApplySizeContainment.
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::computeIntrinsicLogicalWidths const): Skip handling the children for size containment box.
        (WebCore::RenderBlockFlow::adjustBlockChildForPagination): Calculate m_spaceShortageForSizeContainment for child.
        (WebCore::RenderBlockFlow::adjustSizeContainmentChildForPagination): m_spaceShortageForSizeContainment = childOverflowHeight - remainingLogicalHeight.
        * rendering/RenderBlockFlow.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::updateLogicalHeight): Reset the logical height to empty content height for size containment box.
        (WebCore::RenderBox::isUnsplittableForPagination const): Size containment box is unsplittable.
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::RenderDeprecatedFlexibleBox::computeIntrinsicLogicalWidths const): Ditto.
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::computeIntrinsicLogicalWidths const): Ditto.
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::computeIntrinsicLogicalWidths const): Ditto.
        * rendering/RenderFragmentedFlow.h:
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::layoutBlock): If it is size containment with infiniteSize, using trackBasedLogicalHeight
        to compute track sizes again to make sure the height is distributed properly.
        (WebCore::RenderGrid::computeEmptyTracksForAutoRepeat const): Collapse if shouldApplySizeContainment.
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::computeIntrinsicRatioInformation const): This is handled in RenderReplaced::computeIntrinsicRatioInformation instead.
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::computeIntrinsicLogicalWidths const): The widths of size containment boxes are optionsSpacingHorizontal.
        * rendering/RenderMenuList.cpp:
        (RenderMenuList::computeIntrinsicLogicalWidths const): The widths of size containment box are theme.minimumMenuListSize.
        * rendering/RenderMultiColumnFlow.cpp:
        (WebCore::RenderMultiColumnFlow::updateSpaceShortageForSizeContainment): Set m_spaceShortageForSizeContainment.
        * rendering/RenderMultiColumnFlow.h:
        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::RenderMultiColumnSet):
        (WebCore::RenderMultiColumnSet::calculateBalancedHeight const): Add m_spaceShortageForSizeContainment to the column height.
        (WebCore::RenderMultiColumnSet::prepareForLayout): Reset m_spaceShortageForSizeContainment.
        * rendering/RenderMultiColumnSet.h:
        * rendering/RenderObject.cpp:
        (WebCore::shouldApplySizeContainment): Check if the object is a size containment box.
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isAtomicInlineLevelBox const):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::computeAspectRatioInformationForRenderBox const):
        (WebCore::RenderReplaced::computeIntrinsicRatioInformation const): Use the empty intrinsicSize.
        * rendering/RenderReplaced.h: The intrinsicSize of size containment is (0, 0).
        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::computeIntrinsicLogicalWidths const): Ditto.
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::computeIntrinsicLogicalWidths const): Ditto.
        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::calculateIntrinsicSize): Ditto.
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::containsSize const):
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::computeIntrinsicRatioInformation const): Handled in RenderReplaced::computeIntrinsicRatioInformation instead.

2021-05-11  Antti Koivisto  <antti@apple.com>

        Don't allow :visited link style in subtrees that use mix-blend-mode
        https://bugs.webkit.org/show_bug.cgi?id=225446
        rdar://65686091

        Reviewed by Darin Adler.
        
        Test: fast/css/visited-link-mix-blend-mode.html

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::visitedDependentColor const):
        
        Return unvisited style in substrees that use mix-blend-mode.

        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::setBlendMode):
        (WebCore::RenderStyle::isInSubtreeWithBlendMode const):
        
        Add an inherited fake property for tracking this.
        
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::operator== const):
        * rendering/style/StyleRareInheritedData.h:

2021-05-10  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] Allow immediate action gestures to begin when force clicking text inside image overlays
        https://bugs.webkit.org/show_bug.cgi?id=225600
        <rdar://problem/77792365>

        Reviewed by Tim Horton.

        Allow immediate action hit-testing to descend into image overlay content. Currently, this uses the
        `DisallowsUserAgentShadowContent` hit-testing option, causing us to ignore image overlays (which exist inside
        the UA shadow root). To fix this, we introduce a `DisallowsUserAgentShadowContentExceptForImageOverlays` option
        that behaves like the existing `DisallowsUserAgentShadowContent` option, with the exception that we allow hit-
        testing to pierce the UA shadow root to find nodes inside image overlays.

        Tests:  ImmediateActionTests.ImmediateActionOverText
                ImmediateActionTests.ImmediateActionOverBody
                ImmediateActionTests.ImmediateActionOverImageOverlay

        * page/EventHandler.cpp:
        (WebCore::EventHandler::hitTestResultAtPoint const):
        * rendering/HitTestRequest.h:

        Add support for the new hit-test option, which allows hit-testing to descend into image overlays (and is
        intended to be mutually exclusive with the existing `DisallowsUserAgentShadowContent` option). Specifying both
        options will lead to an assertion on debug builds, and `DisallowsUserAgentShadowContent` takes precedence on
        release builds.

        (WebCore::HitTestRequest::disallowsUserAgentShadowContentExceptForImageOverlays const):
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::addNodeToListBasedTestResultCommon):

2021-05-10  Sam Weinig  <weinig@apple.com>

        Use PixelBuffer rather than ImageData in platform/ code to fix layering violation
        https://bugs.webkit.org/show_bug.cgi?id=225584

        Reviewed by Darin Adler.

        Replace use of the DOM layer & ref-counted ImageData class with the new 
        platform layer PixelBuffer class, which ImageData now uses internally.

        Since PixelBuffer is not-reference counted or heap-allocated in most cases,
        many uses of RefPtr<ImageData> to indicate a potentially null ImageData have
        been replaced with Optional<PixelBuffer>. Generally, this allows us to remove
        an unnecessary allocation that was only needed for the DOM object.

        Additionally, to many functions with ImageData in their name now have
        PixelBuffer in their name instead, e.g. ImageBuffer::getImageData is now
        ImageBuffer::getPixelBuffer (though I think changing this in the future to 
        ImageBuffer::copyPixelBuffer is a good idea).

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::dumpImageBitmap):
        (WebCore::CloneDeserializer::readImageBitmap):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::toDataURL):
        (WebCore::HTMLCanvasElement::toBlob):
        (WebCore::HTMLCanvasElement::getImageData):
        * html/ImageBitmap.cpp:
        (WebCore::ImageBitmap::createPromise):
        * html/ImageData.cpp:
        (WebCore::ImageData::create):
        * html/ImageData.h:
        (WebCore::ImageData::pixelBuffer const):
        * html/canvas/CanvasRenderingContext2DBase.cpp:
        (WebCore::CanvasRenderingContext2DBase::getImageData const):
        (WebCore::CanvasRenderingContext2DBase::putImageData):
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::paintRenderingResultsToPixelBuffer):
        (WebCore::WebGLRenderingContextBase::texImageSourceHelper):
        (WebCore::WebGLRenderingContextBase::paintRenderingResultsToImageData): Deleted.
        * html/canvas/WebGLRenderingContextBase.h:
        * page/PageConsoleClient.cpp:
        (WebCore::PageConsoleClient::screenshot):
        * platform/graphics/ConcreteImageBuffer.h:
        (WebCore::ConcreteImageBuffer::putPixelBuffer):
        (WebCore::ConcreteImageBuffer::putImageData): Deleted.
        * platform/graphics/GraphicsContextGL.cpp:
        (WebCore::GraphicsContextGL::extractPixelBuffer):
        (WebCore::GraphicsContextGL::extractImageData): Deleted.
        * platform/graphics/GraphicsContextGL.h:
        * platform/graphics/ImageBuffer.cpp:
        * platform/graphics/ImageBuffer.h:
        (WebCore::ImageBuffer::putPixelBuffer):
        (WebCore::ImageBuffer::putImageData): Deleted.
        * platform/graphics/ImageBufferBackend.cpp:
        (WebCore::ImageBufferBackend::drawConsuming):
        (WebCore::ImageBufferBackend::convertToLuminanceMask):
        (WebCore::ImageBufferBackend::toBGRAData const):
        (WebCore::copyPremultipliedToPremultiplied):
        (WebCore::copyPremultipliedToUnpremultiplied):
        (WebCore::copyUnpremultipliedToPremultiplied):
        (WebCore::copyUnpremultipliedToUnpremultiplied):
        (WebCore::copyFunctor):
        (WebCore::ImageBufferBackend::copyImagePixels const):
        (WebCore::ImageBufferBackend::getPixelBuffer const):
        (WebCore::ImageBufferBackend::putPixelBuffer):
        (WebCore::ImageBufferBackend::getImageData const): Deleted.
        (WebCore::ImageBufferBackend::putImageData): Deleted.
        * platform/graphics/ImageBufferBackend.h:
        * platform/graphics/PixelBuffer.cpp:
        (WebCore::computeBufferSize):
        (WebCore::PixelBuffer::tryCreateForDecoding):
        (WebCore::PixelBuffer::tryCreate):
        (WebCore::operator<<):
        * platform/graphics/PixelBuffer.h:
        (WebCore::PixelBuffer::encode const):
        (WebCore::PixelBuffer::decode):
        * platform/graphics/ShadowBlur.cpp:
        (WebCore::ShadowBlur::blurShadowBuffer):
        * platform/graphics/angle/GraphicsContextGLANGLE.cpp:
        (WebCore::GraphicsContextGLOpenGL::readPixelsForPaintResults):
        (WebCore::GraphicsContextGLOpenGL::readRenderingResults):
        * platform/graphics/cairo/GraphicsContextGLCairo.cpp:
        (WebCore::GraphicsContextGLOpenGL::paintToCanvas):
        * platform/graphics/cairo/ImageBufferCairoSurfaceBackend.cpp:
        (WebCore::ImageBufferCairoSurfaceBackend::getPixelBuffer const):
        (WebCore::ImageBufferCairoSurfaceBackend::putPixelBuffer):
        (WebCore::ImageBufferCairoSurfaceBackend::getImageData const): Deleted.
        (WebCore::ImageBufferCairoSurfaceBackend::putImageData): Deleted.
        * platform/graphics/cairo/ImageBufferCairoSurfaceBackend.h:
        * platform/graphics/cg/GraphicsContextGLCG.cpp:
        (WebCore::GraphicsContextGLOpenGL::paintToCanvas):
        * platform/graphics/cg/ImageBufferCGBackend.cpp:
        (WebCore::ImageBufferCGBackend::toCFData const):
        * platform/graphics/cg/ImageBufferCGBitmapBackend.cpp:
        (WebCore::ImageBufferCGBitmapBackend::getPixelBuffer const):
        (WebCore::ImageBufferCGBitmapBackend::putPixelBuffer):
        (WebCore::ImageBufferCGBitmapBackend::getImageData const): Deleted.
        (WebCore::ImageBufferCGBitmapBackend::putImageData): Deleted.
        * platform/graphics/cg/ImageBufferCGBitmapBackend.h:
        * platform/graphics/cg/ImageBufferIOSurfaceBackend.cpp:
        (WebCore::ImageBufferIOSurfaceBackend::toCFData const):
        (WebCore::ImageBufferIOSurfaceBackend::getPixelBuffer const):
        (WebCore::ImageBufferIOSurfaceBackend::putPixelBuffer):
        (WebCore::ImageBufferIOSurfaceBackend::getImageData const): Deleted.
        (WebCore::ImageBufferIOSurfaceBackend::putImageData): Deleted.
        * platform/graphics/cg/ImageBufferIOSurfaceBackend.h:
        * platform/graphics/cg/ImageBufferUtilitiesCG.cpp:
        (WebCore::cfData):
        (WebCore::dataURL):
        (WebCore::data):
        * platform/graphics/cg/ImageBufferUtilitiesCG.h:
        * platform/graphics/cocoa/GraphicsContextGLOpenGLCocoa.mm:
        (WebCore::GraphicsContextGLOpenGL::readCompositedResults):
        * platform/graphics/cpu/arm/filters/FEBlendNEON.h:
        (WebCore::FEBlend::platformApplySoftware):
        * platform/graphics/displaylists/DisplayList.cpp:
        (WebCore::DisplayList::DisplayList::append):
        * platform/graphics/displaylists/DisplayListItemBuffer.cpp:
        (WebCore::DisplayList::ItemHandle::apply):
        (WebCore::DisplayList::ItemHandle::destroy):
        (WebCore::DisplayList::ItemHandle::safeCopy const):
        * platform/graphics/displaylists/DisplayListItemType.cpp:
        (WebCore::DisplayList::sizeOfItemInBytes):
        (WebCore::DisplayList::isDrawingItem):
        (WebCore::DisplayList::isInlineItem):
        * platform/graphics/displaylists/DisplayListItemType.h:
        * platform/graphics/displaylists/DisplayListItems.cpp:
        (WebCore::DisplayList::operator<<):
        (WebCore::DisplayList::PutPixelBuffer::PutPixelBuffer):
        (WebCore::DisplayList::PutImageData::PutImageData): Deleted.
        * platform/graphics/displaylists/DisplayListItems.h:
        (WebCore::DisplayList::GetPixelBuffer::GetPixelBuffer):
        (WebCore::DisplayList::PutPixelBuffer::pixelBuffer const):
        (WebCore::DisplayList::PutPixelBuffer::encode const):
        (WebCore::DisplayList::PutPixelBuffer::decode):
        (WebCore::DisplayList::GetImageData::GetImageData): Deleted.
        (WebCore::DisplayList::GetImageData::outputFormat const): Deleted.
        (WebCore::DisplayList::GetImageData::srcRect const): Deleted.
        (WebCore::DisplayList::PutImageData::inputFormat const): Deleted.
        (WebCore::DisplayList::PutImageData::imageData const): Deleted.
        (WebCore::DisplayList::PutImageData::srcRect const): Deleted.
        (WebCore::DisplayList::PutImageData::destPoint const): Deleted.
        (WebCore::DisplayList::PutImageData::destFormat const): Deleted.
        (WebCore::DisplayList::PutImageData::localBounds const): Deleted.
        (WebCore::DisplayList::PutImageData::globalBounds const): Deleted.
        (WebCore::DisplayList::PutImageData::encode const): Deleted.
        (WebCore::DisplayList::PutImageData::decode): Deleted.
        * platform/graphics/displaylists/DisplayListRecorder.cpp:
        (WebCore::DisplayList::Recorder::getPixelBuffer):
        (WebCore::DisplayList::Recorder::putPixelBuffer):
        (WebCore::DisplayList::Recorder::getImageData): Deleted.
        (WebCore::DisplayList::Recorder::putImageData): Deleted.
        * platform/graphics/displaylists/DisplayListRecorder.h:
        * platform/graphics/displaylists/DisplayListReplayer.h:
        * platform/graphics/filters/FEColorMatrix.cpp:
        (WebCore::FEColorMatrix::platformApplySoftware):
        * platform/graphics/filters/FEComponentTransfer.cpp:
        (WebCore::FEComponentTransfer::platformApplySoftware):
        * platform/graphics/filters/FEComposite.cpp:
        (WebCore::FEComposite::platformApplySoftware):
        * platform/graphics/filters/FEConvolveMatrix.cpp:
        (WebCore::FEConvolveMatrix::platformApplySoftware):
        * platform/graphics/filters/FEDisplacementMap.cpp:
        (WebCore::FEDisplacementMap::platformApplySoftware):
        * platform/graphics/filters/FEDropShadow.cpp:
        (WebCore::FEDropShadow::platformApplySoftware):
        * platform/graphics/filters/FEGaussianBlur.cpp:
        (WebCore::FEGaussianBlur::platformApplySoftware):
        * platform/graphics/filters/FELighting.cpp:
        (WebCore::FELighting::platformApplySoftware):
        * platform/graphics/filters/FEMorphology.cpp:
        (WebCore::FEMorphology::platformApplySoftware):
        * platform/graphics/filters/FETurbulence.cpp:
        (WebCore::FETurbulence::platformApplySoftware):
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::requestedRegionOfInputPixelBuffer const):
        (WebCore::FilterEffect::clearResult):
        (WebCore::FilterEffect::imageBufferResult):
        (WebCore::FilterEffect::unmultipliedResult):
        (WebCore::FilterEffect::premultipliedResult):
        (WebCore::FilterEffect::convertPixelBufferToColorSpace):
        (WebCore::FilterEffect::convertImageBufferToColorSpace):
        (WebCore::FilterEffect::copyConvertedImageBufferToDestination):
        (WebCore::FilterEffect::copyConvertedPixelBufferToDestination):
        (WebCore::FilterEffect::copyUnmultipliedResult):
        (WebCore::FilterEffect::copyPremultipliedResult):
        (WebCore::FilterEffect::createUnmultipliedImageResult):
        (WebCore::FilterEffect::createPremultipliedImageResult):
        (WebCore::FilterEffect::requiresPixelBufferColorSpaceConversion):
        (WebCore::FilterEffect::transformResultColorSpace):
        (WebCore::FilterEffect::requestedRegionOfInputImageData const): Deleted.
        (WebCore::FilterEffect::convertImageDataToColorSpace): Deleted.
        (WebCore::FilterEffect::copyConvertedImageDataToDestination): Deleted.
        (WebCore::FilterEffect::requiresImageDataColorSpaceConversion): Deleted.
        * platform/graphics/filters/FilterEffect.h:
        * platform/graphics/opengl/GraphicsContextGLOpenGL.cpp:
        (WebCore::GraphicsContextGLOpenGL::paintRenderingResultsToCanvas):
        (WebCore::GraphicsContextGLOpenGL::paintCompositedResultsToCanvas):
        (WebCore::GraphicsContextGLOpenGL::paintRenderingResultsToPixelBuffer):
        (WebCore::GraphicsContextGLOpenGL::readRenderingResultsForPainting):
        (WebCore::GraphicsContextGLOpenGL::readCompositedResultsForPainting):
        (WebCore::GraphicsContextGLOpenGL::readCompositedResults):
        (WebCore::GraphicsContextGLOpenGL::paintRenderingResultsToImageData): Deleted.
        * platform/graphics/opengl/GraphicsContextGLOpenGL.h:
        * platform/graphics/opengl/GraphicsContextGLOpenGLBase.cpp:
        (WebCore::GraphicsContextGLOpenGL::readPixelsForPaintResults):
        * platform/graphics/opengl/GraphicsContextGLOpenGLCommon.cpp:
        (WebCore::GraphicsContextGLOpenGL::readRenderingResults):
        * platform/graphics/opengl/GraphicsContextGLOpenGLES.cpp:
        (WebCore::GraphicsContextGLOpenGL::readnPixels):
        (WebCore::GraphicsContextGLOpenGL::readPixelsForPaintResults):
        * platform/graphics/win/ImageBufferDirect2DBackend.cpp:
        (WebCore::ImageBufferDirect2DBackend::getPixelBuffer const):
        (WebCore::ImageBufferDirect2DBackend::putPixelBuffer):
        (WebCore::ImageBufferDirect2DBackend::getImageData const): Deleted.
        (WebCore::ImageBufferDirect2DBackend::putImageData): Deleted.
        * platform/graphics/win/ImageBufferDirect2DBackend.h:
        * rendering/CSSFilter.cpp:
        (WebCore::CSSFilter::outputRect const):
        * rendering/shapes/Shape.cpp:
        (WebCore::Shape::createRasterShape):

2021-05-10  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r277281.
        https://bugs.webkit.org/show_bug.cgi?id=225622

        Broke multiple debug tests

        Reverted changeset:

        "Use HashSet<RefPtr<Node>> instead of HashSet<Node*>"
        https://bugs.webkit.org/show_bug.cgi?id=220464
        https://trac.webkit.org/changeset/277281

2021-05-10  Mark Lam  <mark.lam@apple.com>

        Add support to collect stats on cumulative LinkBuffer linked sizes based on profiles.
        https://bugs.webkit.org/show_bug.cgi?id=225617

        Reviewed by Saam Barati.

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorCodeGenerator::compile):

2021-05-10  Kate Cheney  <katherine_cheney@apple.com>

        Preflight requests not properly attributed as app-bound
        https://bugs.webkit.org/show_bug.cgi?id=225596
        <rdar://problem/77664272>

        Reviewed by Brent Fulgham.

        Tests: http/tests/in-app-browser-privacy/app-bound-attribution-preflight-async.html
               http/tests/in-app-browser-privacy/app-bound-attribution-preflight-sync.html

        A preflight request initiated by a main navigation that was app-bound
        should also be app-bound. Testing sync preflight requests revealed
        that we also need to mark this when loading a synchronous resource.

        * loader/CrossOriginAccessControl.cpp:
        (WebCore::createAccessControlPreflightRequest):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadResourceSynchronously):

2021-05-10  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r277222.
        https://bugs.webkit.org/show_bug.cgi?id=225618

        WebContent process crashes while visiting
        <http://ign.com|ign.com> (RenderFlexibleBox::layoutFlexItems)

        Reverted changeset:

        "[css-flexbox] Flex item construction may affect sibling flex
        item height computation"
        https://bugs.webkit.org/show_bug.cgi?id=225489
        https://trac.webkit.org/changeset/277222

2021-05-10  Wenson Hsieh  <wenson_hsieh@apple.com>

        Make WebCore::HitTestRequest::RequestType an enum class
        https://bugs.webkit.org/show_bug.cgi?id=225597

        Reviewed by Sam Weinig.

        Rename `HitTestRequest::RequestType` to `HitTestRequest::Type`, and make it an enum class. I also noticed that
        the first request type, `ReadOnly`, starts at a value of 2 (`1 << 1`) instead of 1 (which seems to have been an
        unintentional change in <https://trac.webkit.org/r60761>).

        No change in behavior.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::press):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::visiblePositionForPoint const):
        (WebCore::AccessibilityRenderObject::accessibilityHitTest const):
        * dom/Document.cpp:
        (WebCore::isValidPageSampleLocation):
        * dom/TreeScope.cpp:
        (WebCore::TreeScope::elementsFromPoint):
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::isReplacementObscured):
        * html/MediaElementSession.cpp:
        (WebCore::isElementMainContentForPurposesOfAutoplay):
        * page/AutoscrollController.cpp:
        (WebCore::AutoscrollController::updateAutoscrollRenderer):
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::handleContextMenuEvent):
        (WebCore::ContextMenuController::showContextMenu):
        (WebCore::ContextMenuController::maybeCreateContextMenu):
        * page/ContextMenuController.h:
        * page/DragController.cpp:
        (WebCore::DragController::canProcessDrag):
        (WebCore::DragController::hitTestResultForDragStart const):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::eventMayStartDrag const):
        (WebCore::EventHandler::updateSelectionForMouseDrag):
        (WebCore::EventHandler::hitTestResultAtPoint const):
        (WebCore::EventHandler::updateCursor):
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::EventHandler::handleMouseDoubleClickEvent):
        (WebCore::EventHandler::handleMouseMoveEvent):
        (WebCore::EventHandler::handleMouseReleaseEvent):
        (WebCore::EventHandler::handleMouseForceEvent):
        (WebCore::EventHandler::updateDragAndDrop):
        (WebCore::EventHandler::isInsideScrollbar const):
        (WebCore::EventHandler::sendContextMenuEvent):
        (WebCore::EventHandler::sendContextMenuEventForKey):
        (WebCore::EventHandler::hoverTimerFired):
        (WebCore::EventHandler::dragSourceEndedAt):
        (WebCore::EventHandler::handleDrag):
        (WebCore::hitTestResultInFrame):
        (WebCore::EventHandler::handleTouchEvent):
        (WebCore::EventHandler::dispatchSyntheticTouchEventIfEnabled):
        * page/EventHandler.h:
        * page/FocusController.cpp:
        (WebCore::updateFocusCandidateIfNeeded):
        * page/Frame.cpp:
        (WebCore::Frame::visiblePositionForPoint const):
        (WebCore::Frame::documentAtPoint):
        * page/Page.cpp:
        (WebCore::Page::editableElementsInRect const):
        * page/PointerCaptureController.cpp:
        (WebCore::PointerCaptureController::cancelPointer):
        * page/ios/EventHandlerIOS.mm:
        (WebCore::EventHandler::tryToBeginDragAtPoint):
        * page/ios/FrameIOS.mm:
        (WebCore::Frame::renderRectForPoint const):
        (WebCore::Frame::betterApproximateNode):
        (WebCore::Frame::hitTestResultAtViewportLocation):
        (WebCore::Frame::qualifyingNodeAtViewportLocation):
        * rendering/HitTestRequest.h:
        (WebCore::HitTestRequest::HitTestRequest):
        (WebCore::HitTestRequest::readOnly const):
        (WebCore::HitTestRequest::active const):
        (WebCore::HitTestRequest::move const):
        (WebCore::HitTestRequest::release const):
        (WebCore::HitTestRequest::ignoreCSSPointerEventsProperty const):
        (WebCore::HitTestRequest::ignoreClipping const):
        (WebCore::HitTestRequest::svgClipContent const):
        (WebCore::HitTestRequest::touchEvent const):
        (WebCore::HitTestRequest::disallowsUserAgentShadowContent const):
        (WebCore::HitTestRequest::allowsFrameScrollbars const):
        (WebCore::HitTestRequest::allowsChildFrameContent const):
        (WebCore::HitTestRequest::allowsVisibleChildFrameContent const):
        (WebCore::HitTestRequest::isChildFrameHitTest const):
        (WebCore::HitTestRequest::resultIsElementList const):
        (WebCore::HitTestRequest::includesAllElementsUnderPoint const):
        (WebCore::HitTestRequest::type const):
        (): Deleted.
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::nodeAtPoint):
        * rendering/svg/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::nodeAtFloatPoint):
        * rendering/svg/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::hitTestClipContent):
        * testing/Internals.cpp:
        (WebCore::Internals::nodesFromRect const):
        * testing/Internals.mm:
        (WebCore::Internals::rangeForDictionaryLookupAtLocation):

2021-05-10  Alex Christensen  <achristensen@webkit.org>

        Add null check in CachedResource::clearLoader
        https://bugs.webkit.org/show_bug.cgi?id=225605
        <rdar://69912354>

        Reviewed by Geoffrey Garen.

        As much as we would like it not to be the case, we have records that m_loader can be null.
        If it's null, let's not crash.

        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::clearLoader):

2021-05-10  Andres Gonzalez  <andresg_22@apple.com>

        Fix for assert crash in AXObjectCache::visiblePositionForTextMarkerData.
        https://bugs.webkit.org/show_bug.cgi?id=225303
        <rdar://problem/77453921>

        Reviewed by Chris Fleizach.

        Test: accessibility/mac/pseudo-element-text-markers.html

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::visiblePositionForTextMarkerData):
        Added check for Node::isPseudoElement to avoid hitting the assertion during the creation of a Position.

2021-05-10  Alex Christensen  <achristensen@webkit.org>

        Use HashSet<RefPtr<Node>> instead of HashSet<Node*>
        https://bugs.webkit.org/show_bug.cgi?id=220464

        Reviewed by Chris Dumez.

        This makes us more resistent to lifetime bugs.

        * accessibility/AXObjectCache.cpp:
        (WebCore::conditionallyAddNodeToFilterList):
        (WebCore::filterVectorPairForRemoval):
        (WebCore::filterMapForRemoval):
        (WebCore::filterListForRemoval):
        (WebCore::AXObjectCache::prepareForDocumentDestruction):
        * bindings/js/JSMutationObserverCustom.cpp:
        (WebCore::JSMutationObserverOwner::isReachableFromOpaqueRoots):
        * dom/MutationObserver.cpp:
        (WebCore::MutationObserver::observedNodes const):
        (WebCore:: const): Deleted.
        * dom/MutationObserver.h:
        * dom/MutationObserverRegistration.cpp:
        (WebCore::MutationObserverRegistration::addRegistrationNodesToSet const):
        * dom/MutationObserverRegistration.h:
        * dom/Node.cpp:
        (WebCore::liveNodeSet):
        (WebCore::ignoreSet):
        * editing/AppendNodeCommand.cpp:
        (WebCore::AppendNodeCommand::getNodesInCommand):
        * editing/AppendNodeCommand.h:
        * editing/CompositeEditCommand.cpp:
        (WebCore::EditCommandComposition::getNodesInCommand):
        * editing/CompositeEditCommand.h:
        * editing/DeleteFromTextNodeCommand.cpp:
        (WebCore::DeleteFromTextNodeCommand::getNodesInCommand):
        * editing/DeleteFromTextNodeCommand.h:
        * editing/EditCommand.cpp:
        (WebCore::SimpleEditCommand::addNodeAndDescendants):
        * editing/EditCommand.h:
        * editing/InsertIntoTextNodeCommand.cpp:
        (WebCore::InsertIntoTextNodeCommand::getNodesInCommand):
        * editing/InsertIntoTextNodeCommand.h:
        * editing/InsertNodeBeforeCommand.cpp:
        (WebCore::InsertNodeBeforeCommand::getNodesInCommand):
        * editing/InsertNodeBeforeCommand.h:
        * editing/MergeIdenticalElementsCommand.cpp:
        (WebCore::MergeIdenticalElementsCommand::getNodesInCommand):
        * editing/MergeIdenticalElementsCommand.h:
        * editing/RemoveNodeCommand.cpp:
        (WebCore::RemoveNodeCommand::getNodesInCommand):
        * editing/RemoveNodeCommand.h:
        * editing/ReplaceNodeWithSpanCommand.cpp:
        (WebCore::ReplaceNodeWithSpanCommand::getNodesInCommand):
        * editing/ReplaceNodeWithSpanCommand.h:
        * editing/SetNodeAttributeCommand.cpp:
        (WebCore::SetNodeAttributeCommand::getNodesInCommand):
        * editing/SetNodeAttributeCommand.h:
        * editing/SetSelectionCommand.h:
        * editing/SpellingCorrectionCommand.cpp:
        * editing/SplitElementCommand.cpp:
        (WebCore::SplitElementCommand::getNodesInCommand):
        * editing/SplitElementCommand.h:
        * editing/SplitTextNodeCommand.cpp:
        (WebCore::SplitTextNodeCommand::getNodesInCommand):
        * editing/SplitTextNodeCommand.h:
        * editing/WrapContentsInDummySpanCommand.cpp:
        (WebCore::WrapContentsInDummySpanCommand::getNodesInCommand):
        * editing/WrapContentsInDummySpanCommand.h:
        * editing/cocoa/HTMLConverter.mm:
        (HTMLConverterCaches::cacheAncestorsOfStartToBeConverted):
        * inspector/agents/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::highlightSelector):
        * xml/XPathFunctions.cpp:
        (WebCore::XPath::FunId::evaluate const):
        * xml/XPathNodeSet.cpp:
        (WebCore::XPath::sortBlock):
        (WebCore::XPath::NodeSet::traversalSort const):
        * xml/XPathPath.cpp:
        (WebCore::XPath::LocationPath::evaluate const):
        * xml/XPathPredicate.cpp:
        (WebCore::XPath::Union::evaluate const):

2021-05-10  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] ImageOverlayController should paint selection quads instead of bounding rects
        https://bugs.webkit.org/show_bug.cgi?id=225585
        <rdar://problem/77725745>

        Reviewed by Tim Horton.

        Teach `SelectionRectGatherer` (now renamed to `SelectionGeometryGatherer`) to emit quads, rather than bounding
        rects around each quad. We use these quads in `ImageOverlayController` to render selection quads via page
        overlay (i.e., in the case where the image containing the overlay is transparent).

        Test: fast/images/image-extraction/mac/select-rotated-transparent-image-overlay.html

        * Headers.cmake:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * editing/SelectionGeometryGatherer.cpp: Renamed from Source/WebCore/editing/SelectionRectGatherer.cpp.

        Rename `SelectionRectGatherer` to `SelectionGeometryGatherer`, to reflect the fact that this helper class now
        aggregates both selection quads and gap rects.

        (WebCore::SelectionGeometryGatherer::SelectionGeometryGatherer):
        (WebCore::SelectionGeometryGatherer::addQuad):

        Rename `addRect` to `addQuad`, and make it take a `FloatQuad` instead.

        (WebCore::SelectionGeometryGatherer::addGapRects):
        (WebCore::SelectionGeometryGatherer::Notifier::Notifier):
        (WebCore::SelectionGeometryGatherer::Notifier::~Notifier):
        (WebCore::SelectionGeometryGatherer::boundingRects const):
        (WebCore::SelectionGeometryGatherer::clearAndCreateNotifier):
        * editing/SelectionGeometryGatherer.h: Renamed from Source/WebCore/editing/SelectionRectGatherer.h.
        (WebCore::SelectionGeometryGatherer::setTextOnly):
        (WebCore::SelectionGeometryGatherer::isTextOnly const):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::updateWithImageExtractionResult):

        Minor tweak - don't add any margin around the word when the line only contains a single word.

        * page/ImageOverlayController.cpp:
        (WebCore::ImageOverlayController::selectionQuadsDidChange):

        Rename `selectionRectsDidChange` to `selectionQuadsDidChange`, and take a `FloatQuad` in absolute coordinates
        instead of a `LayoutRect`. Store these quads in `m_overlaySelectionQuads` (also renamed from
        `m_overlaySelectionRects`).

        (WebCore::ImageOverlayController::uninstallPageOverlayIfNeeded):
        (WebCore::ImageOverlayController::drawRect):

        Make a few changes when painting selections using the `ImageOverlayController`:

        1.  Instead of painting with `fillRect()`, coalesce all of the collected selection quads into a single `Path`
            object, and pass that `Path` into `fillPath()`. This allows us to render each piece of selected content as a
            quad instead of a bounding rect, and additionally prevents us from rendering overlapping selections
            when using `ImageOverlayController`.

        2.  Clip selections to the absolute bounds of the image overlay host element's renderer, which prevents the new
            selection quads from spilling out of the host element.

        (WebCore::ImageOverlayController::selectionRectsDidChange): Deleted.
        * page/ImageOverlayController.h:
        * rendering/RenderSelectionInfo.cpp:
        (WebCore::RenderSelectionInfo::RenderSelectionInfo):
        * rendering/RenderSelectionInfo.h:
        (WebCore::RenderSelectionInfo::collectedSelectionQuads const):
        (WebCore::RenderSelectionInfo::collectedSelectionRects const): Deleted.

        More minor refactoring: rename `collectedSelectionRects` to `collectedSelectionQuads`, and make it take the
        original `FloatQuad` instead of the quad's bounding box.

        * rendering/RenderText.cpp:
        (WebCore::RenderText::collectSelectionGeometriesForLineBoxes):
        * rendering/RenderText.h:
        * rendering/SelectionRangeData.cpp:
        (WebCore::SelectionRangeData::SelectionRangeData):
        (WebCore::SelectionRangeData::set):
        (WebCore::SelectionRangeData::apply):
        * rendering/SelectionRangeData.h:

2021-05-10  Eric Carlson  <eric.carlson@apple.com>

        [GPUP-MSE] Implement time changed callback
        https://bugs.webkit.org/show_bug.cgi?id=225485
        <rdar://problem/77625992>

        Reviewed by Jer Noble.

        Implement MediaPlayerPrivateMediaSourceAVFObjC::setCurrentTimeDidChangeCallback so
        the GPU process doesn't have to poll currentTime.

        No change in functionality.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::MediaPlayerPrivateMediaSourceAVFObjC):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::~MediaPlayerPrivateMediaSourceAVFObjC):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setCurrentTimeDidChangeCallback):

2021-05-10  Devin Rousso  <drousso@apple.com>

        Add support for a `media` attribute on `<meta name="theme-color" content="...">`
        https://bugs.webkit.org/show_bug.cgi?id=224389
        <rdar://problem/74991621>

        Reviewed by Ryosuke Niwa.

        Tests: WKWebViewThemeColor.MetaElementValidNameAndColorAndMedia
               WKWebViewThemeColor.MetaElementInvalidName
               WKWebViewThemeColor.MetaElementInvalidColor
               WKWebViewThemeColor.MetaElementInvalidMedia
               WKWebViewThemeColor.MetaElementMultipleValid
               WKWebViewThemeColor.MetaElementValidSubframe
               WKWebViewThemeColor.KVO

        * html/HTMLMetaElement.idl:
        * html/HTMLMetaElement.h:
        * html/HTMLMetaElement.cpp:
        (WebCore::parseMedia): Added.
        (WebCore::mediaMatches): Added.
        (WebCore::HTMLMetaElement::mediaAttributeMatches): Added.
        (WebCore::HTMLMetaElement::contentColor): Added.
        (WebCore::HTMLMetaElement::attributeChanged):
        (WebCore::HTMLMetaElement::parseAttribute):
        (WebCore::HTMLMetaElement::removedFromAncestor):
        (WebCore::HTMLMetaElement::process):
        Add support for a reflected `media` attribute. Cache the most recently parsed `media` (which
        becomes a `Ref<MediaQuerySet>`) and `content` (which can become a `Color`) to avoid doing
        repeated work when determining the active theme color after media state changes. Notify the
        `Document` whenever the `name` or `content` or `media` attribute changes if the new or old
        value will be or would have been related to calculating the theme color.

        * dom/Document.h:
        (WebCore::Document::themeColor const): Deleted.
        * dom/Document.cpp:
        (WebCore::Document::themeColor): Added.
        (WebCore::Document::metaElementThemeColorChanged): Added.
        (WebCore::Document::determineActiveThemeColorMetaElement): Added.
        (WebCore::Document::themeColorChanged):
        (WebCore::Document::updateElementsAffectedByMediaQueries):
        (WebCore::Document::processMetaElementThemeColor): Deleted.
        Make calculating the theme color into a two stage process:
         1. find all `<meta name="theme-color">` that have a valid CSS color `content` in tree order
         2. return the `HTMLMetaElement::contentColor` of the first item from step 1 that `HTMLMetaElement::mediaAttributeMatches`
        This is done so that `Document::updateElementsAffectedByMediaQueries` doesn't have to repeat
        step 1 each time it's run (which can be often) and instead only needs to iterate a (likely
        very small) list in step 2. The actions/situations listed above would clear the cached data
        from both steps, meaning that the next `Document::themeColor` will do a full recalculation.
        Notify the UIProcess of a change in theme color if the result of step 2 is different from a
        previously cached result (if set).

2021-05-09  Darin Adler  <darin@apple.com>

        Remove all remaining uses of the String::toInt family of functions
        https://bugs.webkit.org/show_bug.cgi?id=225580

        Reviewed by Sam Weinig.

        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
        (WebCore::IDBServer::SQLiteIDBBackingStore::extractExistingDatabaseInfo):
        Use parseInteger<uint64_t> instead of String::toUInt64Strict.
        (WebCore::IDBServer::SQLiteIDBBackingStore::databaseNameAndVersionFromFile):
        Ditto.

        * Modules/websockets/WebSocketDeflateFramer.cpp:
        (WebCore::WebSocketExtensionDeflateFrame::WebSocketExtensionDeflateFrame):
        Use a reference instead of a pointer.
        (WebCore::WebSocketExtensionDeflateFrame::processResponse): Use
        ASCIILiteral. Use parseIntegerAllowingTrailingJunk<int> instead of
        String::toInt. Use auto. Use references instead of pointers.
        (WebCore::DeflateResultHolder::DeflateResultHolder): Use a reference.
        (WebCore::DeflateResultHolder::~DeflateResultHolder): Ditto.
        (WebCore::InflateResultHolder::InflateResultHolder): Ditto.
        (WebCore::InflateResultHolder::~InflateResultHolder): Ditto.
        (WebCore::WebSocketDeflateFramer::WebSocketDeflateFramer): Deleted.
        (WebCore::WebSocketDeflateFramer::createExtensionProcessor): Pass a reference.
        (WebCore::WebSocketDeflateFramer::deflate): Ditto.
        (WebCore::WebSocketDeflateFramer::inflate): Ditto.

        * Modules/websockets/WebSocketDeflateFramer.h: Use forward declarations
        instead of includes, references instead of pointers, initialize data members
        in the class definition, and remove an unnecessary explicit default constructor.

        * Modules/websockets/WebSocketHandshake.cpp:
        (WebCore::headerHasValidHTTPVersion): Use parseInteger<int> instead of
        StringView::toIntStrict.
        (WebCore::WebSocketHandshake::readStatusLine): Ditto.

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::headingLevel const): Use
        getIntegralAttribute instead of AtomString::toInt.
        (WebCore::AccessibilityNodeObject::hierarchicalLevel const): Ditto.
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::getIntegralAttribute const): Added.
        Since AccessibilityObject has its own getAttribute function, we need to
        re-implement Element::getIntegralAttribute here.
        (WebCore::AccessibilityObject::setSize const): Use getIntegralAttribute
        instead of AtomString::toInt.
        (WebCore::AccessibilityObject::posInSet const): Ditto.

        * accessibility/AccessibilityObject.h: Added getIntegralAttribute.

        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::isDataTable const):Use getIntegralAttribute
        instead of AtomString::toInt.
        (WebCore::AccessibilityTable::axColumnCount const): Ditto.
        (WebCore::AccessibilityTable::axRowCount const): Ditto.
        * accessibility/AccessibilityTableCell.cpp:
        (WebCore::AccessibilityTableCell::axColumnIndex const): Ditto.
        (WebCore::AccessibilityTableCell::axRowIndex const): Ditto.
        (WebCore::AccessibilityTableCell::axColumnSpan const): Ditto.
        (WebCore::AccessibilityTableCell::axRowSpan const): Ditto.
        * accessibility/AccessibilityTableRow.cpp:
        (WebCore::AccessibilityTableRow::axColumnIndex const): Ditto.
        (WebCore::AccessibilityTableRow::axRowIndex const): Ditto.

        * css/parser/CSSSelectorParser.cpp:
        (WebCore::consumeANPlusB): Use parseInteger<int> instead of String::toIntStrict
        * css/parser/CSSTokenizer.cpp:
        (WebCore::CSSTokenizer::consumeEscape): Use parseInteger<uint32_t> instead of
        String::toUIntStrict.

        * editing/cocoa/DataDetection.mm:
        (WebCore::DataDetection::canPresentDataDetectorsUIForElement):
        Use parseIntegerAllowingTrailingJunk<int> instead of String::toInt.
        Also use StringView instead of String.
        (WebCore::dataDetectorStringForPath): Use makeString instead of StringBuilder.

        * editing/cocoa/HTMLConverter.mm:
        (HTMLConverter::computedAttributesForElement): Use
        parseIntegerAllowingTrailingJunk<int> instead of String::toInt.

        * html/HTMLFrameElement.cpp:
        (WebCore::HTMLFrameElement::parseAttribute): Use parseHTMLInteger instead
        of parseIntegerAllowingTrailingJunk<int>.
        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::parseAttribute): Ditto.
        * html/HTMLHRElement.cpp:
        (WebCore::HTMLHRElement::collectStyleForPresentationAttribute): Ditto.
        * html/HTMLIFrameElement.cpp:
        (WebCore::HTMLIFrameElement::collectStyleForPresentationAttribute): Ditto.
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::parseAttribute): Ditto.
        * html/HTMLLIElement.cpp:
        (WebCore::HTMLLIElement::parseValue): Ditto.
        * html/HTMLMarqueeElement.cpp:
        (WebCore::HTMLMarqueeElement::loop const): Use getIntegralAttribute
        instead of parseIntegerAllowingTrailingJunk<int>.
        * html/HTMLTableCellElement.cpp:
        (WebCore::HTMLTableCellElement::collectStyleForPresentationAttribute):
        Use parseHTMLInteger instead of parseIntegerAllowingTrailingJunk<int>.
        * html/HTMLTableColElement.cpp:
        (WebCore::HTMLTableColElement::parseAttribute): Ditto.
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::parseAttribute): Ditto.

        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::restoreAttachedWindowHeight):
        Use parseIntegerAllowingTrailingJunk<unsigned> instead of
        String::toUInt.

        * inspector/agents/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::nodeForPath): Use
        parseIntegerAllowingTrailingJunk<unsigned> instead of String::toUInt.

        * layout/layouttree/LayoutTreeBuilder.cpp:
        (WebCore::Layout::TreeBuilder::createLayoutBox): Use parseHTMLInteger
        instead of AtomString::toInt.

        * loader/CrossOriginPreflightResultCache.cpp:
        (WebCore::parseAccessControlMaxAge): Use parseInteger<uint64_t> instead
        of String::toUIntStrict.

        * loader/FTPDirectoryParser.cpp:
        (WebCore::parseOneFTPLine): Use parseIntegerAllowingTrailingJunk<unsigned>
        instead of String::toUInt.

        * loader/PrivateClickMeasurement.cpp:
        (WebCore::PrivateClickMeasurement::parseAttributionRequest): Use
        parseInteger<uint64_t> instead of String::toUInt64Strict.

        * mathml/MathMLSelectElement.cpp:
        (WebCore::MathMLSelectElement::getSelectedActionChildAndIndex):
        Use getIntegralAttribute instead of parseIntegerAllowingTrailingJunk<int>.

        * page/EventSource.cpp:
        (WebCore::EventSource::parseEventStreamLine): Use
        parseIntegerAllowingTrailingJunk<uint64_t> instead of charactersToUInt64.

        * page/Location.cpp:
        (WebCore::Location::setPort): Use parseInteger<uint16_t> instead of parseUInt16.

        * page/SecurityOriginData.cpp:
        (WebCore::SecurityOriginData::fromDatabaseIdentifier): Use
        parseIntegerAllowingTrailingJunk<uint16_t> instead of String::toInt, which
        allows us to remove some range checking and type conversion.

        * page/WindowFeatures.cpp:
        (WebCore::setWindowFeature): Use parseIntegerAllowingTrailingJunk<int>
        instead of StringView::toInt.

        * page/csp/ContentSecurityPolicySourceList.cpp:
        (WebCore::ContentSecurityPolicySourceList::parsePort): Use
        parseInteger<uint16_t> instead of charactersToIntStrict.

        * page/linux/ResourceUsageThreadLinux.cpp:
        (WebCore::collectCPUUsage): Use parseInteger<pid_t> instead of
        String::toIntStrict. Also removed unneeded special cases for "." and
        ".." since both will fail to parse as an integer, and this no longer
        need to put d_name into a WTF::String.

        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (CachedResourceStreamingClient::responseReceived): Use
        parseIntegerAllowingTrailingJunk<int> instead of String::toInt.

        * platform/graphics/gstreamer/eme/CDMThunder.cpp:
        (WebCore::ParsedResponseMessage::ParsedResponseMessage): Use
        parseInteger<int> instead of String::toInt to parse a single-digit.
        Probably should write this another way.

        * platform/network/curl/CookieUtil.cpp:
        (WebCore::CookieUtil::parseCookieAttributes): Use
        parseIntegerAllowingTrailingJunk<int64_t> instead of String::toInt64.

        * platform/network/curl/CurlCacheEntry.cpp:
        (WebCore::CurlCacheEntry::setResponseFromCachedHeaders): Use
        parseIntegerAllowingTrailingJunk<long long> instead of String::toInt64.

        * svg/SVGToOTFFontConversion.cpp:
        (WebCore::SVGToOTFFontConverter::appendOS2Table): Use parseHTMLInteger
        instead of parseIntegerAllowingTrailingJunk<int>. Might be even better
        to refactor to use getIntegralAttribute later.
        (WebCore::SVGToOTFFontConverter::appendVORGTable): Ditto.

        * testing/Internals.cpp:
        (WebCore::Internals::setSFrameCounter): Use parseInteger<uint64_t>
        instead of StringView::toUInt64Strict.

2021-05-10  Alex Christensen  <achristensen@webkit.org>

        css-display-none actions from WKContentRuleList should apply to pages loaded with loadData and loadHTMLString
        https://bugs.webkit.org/show_bug.cgi?id=225493
        <rdar://77331789>

        Reviewed by Darin Adler.

        Blocking and https upgrade don't really make sense on the url from loadData and loadHTMLString because blocking would be
        incompatible with existing apps and because you're not really connecting to a server, you're just pretending you did.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::handleSubstituteDataLoadNow):

2021-05-10  Alicia Boya García  <aboya@igalia.com>

        [MSE][GStreamer] Remove stale PlaybackPipeline.cpp
        https://bugs.webkit.org/show_bug.cgi?id=225595

        Reviewed by Adrian Perez de Castro.

        The WebKitMediaSrc v2 patch removed PlaybackPipeline but accidentally
        the .cpp file survived the rebases.

        This patch introduces no behavior changes, the file was not being
        compiled anymore.

        * platform/graphics/gstreamer/mse/PlaybackPipeline.cpp: Removed.

2021-05-10  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] fast/mediastream/MediaStream-video-element-video-tracks-disabled.html fails
        https://bugs.webkit.org/show_bug.cgi?id=225518

        Reviewed by Xabier Rodriguez-Calvar.

        * platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp: Fix out-of-bounds memset().

2021-05-10  Rob Buis  <rbuis@igalia.com>

        Implement <form>.requestSubmit()
        https://bugs.webkit.org/show_bug.cgi?id=197958

        Reviewed by Darin Adler.

        Implement the requestSubmit method as defined here [1].

        Behavior matches Chrome and Firefox.

        [1] https://html.spec.whatwg.org/multipage/forms.html#dom-form-requestsubmit

        Tests: imported/w3c/web-platform-tests/html/semantics/forms/the-form-element/form-requestsubmit.html
               imported/w3c/web-platform-tests/html/semantics/forms/form-submission-0/request-submit-activation.html
               imported/w3c/web-platform-tests/html/semantics/forms/the-form-element/form-requestsubmit-autofocus.html

        * html/HTMLButtonElement.cpp:
        (WebCore::HTMLButtonElement::defaultEventHandler):
        (WebCore::HTMLButtonElement::isSubmitButton const):
        * html/HTMLButtonElement.h:
        * html/HTMLFormControlElement.h:
        (WebCore::HTMLFormControlElement::isSubmitButton const):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::submitImplicitly):
        (WebCore::HTMLFormElement::submitIfPossible):
        (WebCore::HTMLFormElement::requestSubmit):
        (WebCore::HTMLFormElement::findSubmitButton):
        (WebCore::HTMLFormElement::submit):
        (WebCore::HTMLFormElement::effectiveTarget const):
        (WebCore::HTMLFormElement::findSubmitter const):
        (WebCore::HTMLFormElement::reportValidity):
        (WebCore::HTMLFormElement::prepareForSubmission): Deleted.
        (WebCore::HTMLFormElement::findSubmitButton const): Deleted.
        * html/HTMLFormElement.h:
        * html/HTMLFormElement.idl:
        * html/HTMLInputElement.h:
        * html/ImageInputType.cpp:
        (WebCore::ImageInputType::handleDOMActivateEvent):
        * html/ImageInputType.h:
        * html/InputType.h:
        (WebCore::InputType::isSubmitButton const):
        * html/SubmitInputType.cpp:
        (WebCore::SubmitInputType::handleDOMActivateEvent):
        * loader/FormSubmission.cpp:
        (WebCore::FormSubmission::create):
        * loader/FormSubmission.h:

2021-05-09  Sam Weinig  <weinig@apple.com>

        Add back protection of the pixel buffer in ImageBufferCGBackend::toCFData removed in r277237
        https://bugs.webkit.org/show_bug.cgi?id=225574

        Reviewed by Darin Adler.

        In r277237, I accidentally removed a `RefPtr<Uint8ClampedArray> protectedPixelArray`
        in ImageBufferCGBackend::toCFData that was needed to avoided crashing in some cases
        when running fast/canvas/canvas-toDataURL-jpeg-crash.html.

        Since it wasn't super clear what it was doing, this switches to using the more idiomatic
        method of keeping the data alive in a CGDataProviderRef by passing the leaked image data
        as the context and derefing in the callback lambda.

        Just to be consistent, I went to other callers of CGDataProviderCreateWithData and
        updated them to be idiomatically consistent.

        * platform/graphics/cg/GraphicsContextGLCG.cpp:
        (WebCore::GraphicsContextGLOpenGL::paintToCanvas):
        (WebCore::releaseImageData): Deleted.
        * platform/graphics/cg/ImageBufferCGBackend.cpp:
        (WebCore::ImageBufferCGBackend::toCFData const):
        * platform/graphics/cg/ImageBufferCGBitmapBackend.cpp:
        (WebCore::ImageBufferCGBitmapBackend::create):

2021-05-09  Lauro Moura  <lmoura@igalia.com>

        [WebXR] Remove reference cycle in WebXRSession
        https://bugs.webkit.org/show_bug.cgi?id=225025
        <rdar://problem/77111217>

        Unreviewed WPE build fix.

        * Modules/webxr/WebXRInputSourceArray.h: Add missing namespace.

2021-05-09  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo][Clang] lld-link: error: undefined symbol: public: static class GenericTypedArrayView<>::tryCreate() in CryptoKeyRSAOpenSSL.cpp
        https://bugs.webkit.org/show_bug.cgi?id=225581

        Unreviewed build for r277142.

        * crypto/openssl/CryptoKeyRSAOpenSSL.cpp: Include <JavaScriptCore/TypedArrayInlines.h>.

2021-05-09  Dean Jackson  <dino@apple.com>

        [WebXR] Remove reference cycle in WebXRSession
        https://bugs.webkit.org/show_bug.cgi?id=225025
        <rdar://problem/77111217>

        Reviewed by Sam Weinig.

        Patch by Sam Weinig, who took my bad patch and made it better.

        WebXRSession was attempting to create an WebXRInputSourceArray in
        its constructor, which itself was trying to hold a strong reference
        back to WebXRSession - causing a crash.

        * Modules/webxr/WebXRBoundedReferenceSpace.h: Fix small typo.

        * Modules/webxr/WebXRFrame.cpp: Use reference in constructor, since we
        know the session exists.
        (WebCore::WebXRFrame::create):
        (WebCore::WebXRFrame::WebXRFrame):
        * Modules/webxr/WebXRFrame.h:

        * Modules/webxr/WebXRInputSource.cpp: Use a WeakPtr as a reference back
        to the WebXRSession.
        (WebCore::WebXRInputSource::create):
        (WebCore::WebXRInputSource::WebXRInputSource):
        (WebCore::WebXRInputSource::session): Add this getter.
        (WebCore::WebXRInputSource::update): Check for null.
        (WebCore::WebXRInputSource::pollEvents):
        (WebCore::WebXRInputSource::createEvent): Deleted - moved to lambda.
        * Modules/webxr/WebXRInputSource.h:
        * Modules/webxr/WebXRInputSource.idl:

        * Modules/webxr/WebXRInputSourceArray.cpp: Add GenerateIsReachable.
        (WebCore::WebXRInputSourceArray::create):
        (WebCore::WebXRInputSourceArray::WebXRInputSourceArray):
        (WebCore::WebXRInputSourceArray::ref):
        (WebCore::WebXRInputSourceArray::deref):
        (WebCore::WebXRInputSourceArray::update):
        (WebCore::WebXRInputSourceArray::handleAddedOrUpdatedInputSources):
        * Modules/webxr/WebXRInputSourceArray.h:
        * Modules/webxr/WebXRInputSourceArray.idl:

        * Modules/webxr/WebXRInputSpace.cpp: Use reference in constructor.
        (WebCore::WebXRInputSpace::create):
        (WebCore::WebXRInputSpace::WebXRInputSpace):
        * Modules/webxr/WebXRInputSpace.h:

        * Modules/webxr/WebXRSession.cpp: Use a UniqueRef for input source array.
        (WebCore::WebXRSession::onFrame):
        * Modules/webxr/WebXRSession.h:

        * bindings/scripts/CodeGeneratorJS.pm: Add ImplWebXRSessionRoot to GenerateIsReachable.
        (GenerateImplementation):

2021-05-09  Darin Adler  <darin@apple.com>

        Remove uses of the String::toInt family of functions from the WebCore/platform directory
        https://bugs.webkit.org/show_bug.cgi?id=225575

        Second half.

        Reviewed by Sam Weinig.

        * platform/mediastream/mac/ScreenDisplayCapturerMac.mm:
        (WebCore::ScreenDisplayCapturerMac::create): Use parseInteger<uint32_t>
        instead of String::toUIntStrict.
        (WebCore::ScreenDisplayCapturerMac::screenCaptureDeviceWithPersistentID): Ditto.
        * platform/mediastream/mac/WindowDisplayCapturerMac.mm:
        (WebCore::WindowDisplayCapturerMac::create): Ditto.
        (WebCore::WindowDisplayCapturerMac::windowCaptureDeviceWithPersistentID): Ditto.

        * platform/network/HTTPParsers.cpp:
        (WebCore::parseRange): Use parseInteger<long long> instead of
        String::toInt64Strict. Also use StringView so we don't allocate substrings on
        the heap just to parse integers within an existing string. And removed unneeded
        call to stripWhiteSpace in one place since parseInteger already allows leading
        and trailing spaces, and in another case where we need to strip because of an
        empty string check, used stripLeadingAndTrailingHTTPSpaces instead.

        * platform/network/ParsedContentRange.cpp:
        (WebCore::parseContentRange): Use parseInteger<int64_t> instead of
        StringView::toInt64Strict.

        * platform/network/ParsedRequestRange.cpp:
        (WebCore::ParsedRequestRange::parse): Use parseInteger<uint64_t> instead of
        StringView::toUInt64Strict.

2021-05-09  Darin Adler  <darin@apple.com>

        Follow-up to: Remove uses of the String::toInt family of functions from the WebCore/platform directory
        https://bugs.webkit.org/show_bug.cgi?id=225575

        Reviewed by Sam Weinig.

        * html/FTPDirectoryDocument.cpp:
        (WebCore::processFilesizeString): Change format to "1000.0" as we discussed.

2021-05-09  Darin Adler  <darin@apple.com>

        Remove uses of the String::toInt family of functions from the WebCore/platform directory
        https://bugs.webkit.org/show_bug.cgi?id=225575

        Accidentally committed only half of it.

        Reviewed by Sam Weinig.

        * platform/DateComponents.cpp: Tweak a comment on the local parseInt function here
        that should likely be consolidated with parseInteger at some point.

        * platform/Length.cpp:
        (WebCore::parseLength): Use parseInteger<int> instead of charactersToIntStrict.

        * platform/encryptedmedia/clearkey/CDMClearKey.cpp:
        (WebCore::CDMPrivateClearKey::sanitizeSessionId const): Use parseInteger<uint32_t>
        instead of String::toUIntStrict.

        * platform/graphics/HEVCUtilities.cpp:
        (WebCore::parseHEVCCodecParameters): Use parseInteger<uint8/32_t> instead of
        toIntegralType<uint8/32_t>.
        (WebCore::parseDoViCodecParameters): Ditto.
        * platform/graphics/VP9Utilities.cpp:
        (WebCore::parseVPCodecParameters): Ditto.

        * platform/graphics/avfoundation/CDMPrivateMediaSourceAVFObjC.mm:
        (WebCore::CDMPrivateMediaSourceAVFObjC::parseKeySystem): Use parseInteger<int>
        instead of String::toInt. There's no need for the "allow trailing junk" here
        because a regular expression is used to check format before we call parseInteger.
        Also removed an unnecessary empty string check, since the regular expression
        match check will fail on an empty string.

        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::trackDidChangeSelected): Use
        parseIntegerAllowingTrailingJunk<uint64_t> instead ot toUInt64.
        (WebCore::SourceBufferPrivateAVFObjC::trackDidChangeEnabled): Ditto.
        (WebCore::SourceBufferPrivateAVFObjC::flush): Ditto.
        (WebCore::SourceBufferPrivateAVFObjC::enqueueSample): Ditto.
        (WebCore::SourceBufferPrivateAVFObjC::isReadyForMoreSamples): Ditto.
        (WebCore::SourceBufferPrivateAVFObjC::notifyClientWhenReadyForMoreSamples): Ditto.
        (WebCore::SourceBufferPrivateAVFObjC::canSetMinimumUpcomingPresentationTime const): Ditto.

        * platform/graphics/cocoa/HEVCUtilitiesCocoa.mm:
        (WebCore::parseStringArrayFromDictionaryToUInt16Vector): Use
        parseInteger<uint16_t> instead of toIntegralType<uint16_t>. We could also
        consider using -[NSString intValue] here with some range checking instead
        of converting to WTF::String.
        
2021-05-09  Darin Adler  <darin@apple.com>

        Remove uses of the String::toInt family of functions from WebCore/html and similar directories
        https://bugs.webkit.org/show_bug.cgi?id=225577

        Reviewed by Sam Weinig.

        * dom/Document.cpp:
        (WebCore::Document::createEvent): Fix spelling error.

        * html/FTPDirectoryDocument.cpp:
        (WebCore::processFilesizeString): Use parseIntegerAllowingTrailingJunk<uint64_t>
        instead of String::toUInt64.

        * html/FormController.cpp:
        (WebCore::deserializeFormControlState): Use parseIntegerAllowingTrailingJunk<size_t>
        instead of String::toUInt.
        (WebCore::SavedFormState::deserialize): Ditto.

        * html/HTMLFontElement.cpp:
        (WebCore::parseFontSize): Use parseInteger<int> instead of
        charactersToIntStrict.
        * html/HTMLFrameElement.cpp:
        (WebCore::HTMLFrameElement::parseAttribute): Use parseIntegerAllowingTrailingJunk<int>
        instead of String::toInt.
        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::parseAttribute): Ditto.
        * html/HTMLHRElement.cpp:
        (WebCore::HTMLHRElement::collectStyleForPresentationAttribute): Ditto.
        * html/HTMLIFrameElement.cpp:
        (WebCore::HTMLIFrameElement::collectStyleForPresentationAttribute): Ditto.
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::parseAttribute): Ditto.
        * html/HTMLLIElement.cpp:
        (WebCore::HTMLLIElement::parseValue): Ditto.
        * html/HTMLMarqueeElement.cpp:
        (WebCore::HTMLMarqueeElement::loop const): Ditto.
        * html/HTMLTableCellElement.cpp:
        (WebCore::HTMLTableCellElement::collectStyleForPresentationAttribute): Ditto.
        * html/HTMLTableColElement.cpp:
        (WebCore::HTMLTableColElement::parseAttribute): Ditto.
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::parseAttribute): Ditto.

        * html/LinkIconCollector.cpp:
        (WebCore::LinkIconCollector::iconsOfTypes): Use parseIntegerAllowingTrailingJunk<unsigned>
        instead of String::toUInt. Also removed unneeded call to stripWhiteSpace since the
        integer parsing function already skips leading and trailing spaces.

        * html/MediaFragmentURIParser.cpp:
        (WebCore::MediaFragmentURIParser::parseNPTTime): Use parseInteger<int> instead of
        String::toInt. The strings passsed in are fixed size and all digits.

        * html/TypeAhead.cpp:
        (WebCore::TypeAhead::handleEvent): Use parseIntegerAllowingTrailingJunk<int>
        instead of String::toInt.

        * html/URLDecomposition.cpp:
        (WebCore::URLDecomposition::setHost): Use parseInteger<uint16_t> instead of parseUInt16.
        (WebCore::parsePort): Ditto.

        * html/shadow/DateTimeNumericFieldElement.cpp:
        (WebCore::DateTimeNumericFieldElement::handleKeyboardEvent): Use
        parseIntegerAllowingTrailingJunk<int> instead of String::toInt.

        * html/track/VTTScanner.cpp:
        (WebCore::VTTScanner::scanDigits): Use parseInteger<int> instead of
        charactersToIntStrict.

        * mathml/MathMLSelectElement.cpp:
        (WebCore::MathMLSelectElement::getSelectedActionChildAndIndex): Use
        parseIntegerAllowingTrailingJunk<int> instead of AtomString::toInt.

2021-05-09  Darin Adler  <darin@apple.com>

        Remove uses of the String::toInt family of functions from the WebCore/svg and WebCore/workers directories
        https://bugs.webkit.org/show_bug.cgi?id=225573

        Reviewed by Sam Weinig.

        Both SVG and service workers had code that should be moved from headers
        into implementation files. This allowed us to use the new parseInteger
        function templates without including the header in headers, which may help
        keep compile times from getting out of hand.

        * Sources.txt: Added the new source files.
        * WebCore.xcodeproj/project.pbxproj: Ditto.

        * svg/SVGFEConvolveMatrixElement.cpp:
        (WebCore::SVGFEConvolveMatrixElement::parseAttribute): Use parseInteger<unsigned>
        instead of String::toUIntStrict.
        * svg/SVGFETurbulenceElement.cpp:
        (WebCore::SVGFETurbulenceElement::parseAttribute): Ditto.

        * svg/SVGToOTFFontConversion.cpp:
        (WebCore::SVGToOTFFontConverter::appendOS2Table): Use
        parseIntegerAllowingTrailingJunk<int> instead of String::toInt. Use
        parseIntegerAllowingTrailingJunk<uint8_t> instead of String::toInt,
        allowing us to remove range checking to reject values that are out of range.
        (WebCore::SVGToOTFFontConverter::appendVORGTable): Ditto.
        (WebCore::SVGToOTFFontConverter::SVGToOTFFontConverter): Ditto.

        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::parseClockValue): Use parseInteger<uint8_t>
        instead of String::toUIntStrict. These are all 2-character numeric
        strings. Also simplified the logic and used StringView so we don't have to
        allocate memory for the substrings.
        (WebCore::SVGSMILElement::parseCondition): Use parseInteger<unsigned>
        instead of String::toUIntStrict. Also used StringView.
        * svg/properties/SVGAnimationAdditiveValueFunctionImpl.cpp:
        (WebCore::SVGAnimationIntegerFunction::calculateDistance const): Moved
        this file here from the header, and used parseInteger<int> rather than
        String::toIntStrict.

        * svg/properties/SVGAnimationAdditiveValueFunctionImpl.h: Moved
        SVGAnimationIntegerFunction::calculateDistance out of the header.
        Also marked the class and member functions final. (Could do that for
        a lot more of the classes in this file.)

        * svg/properties/SVGPropertyTraits.cpp: Added.
        (WebCore::SVGPropertyTraits<int>::fromString): Moved this here from the
        header and use parseInteger<int> instead of String::toIntStrict.
        * svg/properties/SVGPropertyTraits.h: Updated for the above.

        * workers/service/ServiceWorkerClientIdentifier.cpp: Added.
        (WebCore::ServiceWorkerClientIdentifier::fromString): Moved this here
        from the header and use parseInteger<uint64_t> instead of
        StringView::toUInt64Strict.
        * workers/service/ServiceWorkerClientIdentifier.h: Updated for the above.
        Also moved ServiceWorkerClientIdentifierHash from the WTF namespace
        to the WebCore namespace.

        * workers/service/ServiceWorkerRegistrationKey.cpp:
        (WebCore::ServiceWorkerRegistrationKey::fromDatabaseKey): Use
        parseInteger<uint16_t> instead of charactersToUIntStrict, allowing us
        to remove range checking. Also use StringView::substring instead of
        writing out special cases for 8-bit and 16-bit characters.

2021-05-09  Myles C. Maxfield  <mmaxfield@apple.com>

        [GPU Process] Simplify DisplayList::Iterator part 6: Migrate ItemBufferWritingClient from ItemHandle to a const Variant&
        https://bugs.webkit.org/show_bug.cgi?id=224270

        Reviewed by Wenson Hsieh.

        This patch adds a new Variant that contains all the DisplayList item types, named DisplayListItem. It also migrates
        ItemBufferWritingClient from ItemHandle to this new Variant.

        There are two benefits to this:
        1. The templated overload of ItemBuffer::append() is way simpler now. Previously, we used to allocate a byte buffer
               on the stack and run a placement new of the display list item type into it. Now, we can just run the DisplayListItem
               constructor instead. Using the Variant does require more stack space, but we only will ever have one of these objects
               on the stack at a time.
        2. The big table inside RemoteImageBufferProxy::encodeItemOutOfLine() is gone, and is replaced with just 7 lines. This is
               one fewer place where we'll have to make sure the DisplayListItem types match a function in an entirely different
               framework.

        No new tests, because there is no behavior change.

        * platform/graphics/displaylists/DisplayListItemBuffer.cpp:
        (WebCore::DisplayList::copyInto):
        (WebCore::DisplayList::safeCopyHelper):
        (WebCore::DisplayList::safeCopy):
        (WebCore::DisplayList::ItemBuffer::append):
        * platform/graphics/displaylists/DisplayListItemBuffer.h:
        (WebCore::DisplayList::ItemBufferWritingClient::requiredSizeForItem const):
        (WebCore::DisplayList::ItemBufferWritingClient::encodeItemOutOfLine const):
        (WebCore::DisplayList::ItemBufferWritingClient::encodeItemInline const):
        (WebCore::DisplayList::ItemBuffer::append):
        * platform/graphics/displaylists/DisplayListItemType.cpp:
        (WebCore::DisplayList::paddedSizeOfTypeAndItemInBytes):
        (WebCore::DisplayList::displayListItemType):
        * platform/graphics/displaylists/DisplayListItems.h:
        * platform/graphics/displaylists/InMemoryDisplayList.cpp:
        (WebCore::DisplayList::InMemoryDisplayList::WritingClient::requiredSizeForItem const):
        (WebCore::DisplayList::InMemoryDisplayList::WritingClient::encodeItemInline const):
        * platform/graphics/displaylists/InMemoryDisplayList.h:

2021-05-09  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Unify last resort fallback font between all Cocoa ports
        https://bugs.webkit.org/show_bug.cgi?id=225569

        Reviewed by Darin Adler.

        Just remove an unnecessary #if.

        Covered by existing tests.

        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::FontCache::lastResortFallbackFont):

2021-05-08  Peng Liu  <peng.liu6@apple.com>

        [GPUP] A small video element enters fullscreen with strange animations
        https://bugs.webkit.org/show_bug.cgi?id=225548

        Reviewed by Eric Carlson.

        Use `FloatRect` instead of `IntRect` to exchange video element location/size
        information between WebContent processes and the UI process to avoid information
        mismatch due to floating-point rounding.

        Manually tested.

        * platform/ios/VideoFullscreenInterfaceAVKit.h:
        * platform/ios/VideoFullscreenInterfaceAVKit.mm:
        (VideoFullscreenInterfaceAVKit::setupFullscreen):
        (VideoFullscreenInterfaceAVKit::exitFullscreen):
        (VideoFullscreenInterfaceAVKit::preparedToReturnToInline):
        (VideoFullscreenInterfaceAVKit::setInlineRect):

2021-05-08  Sam Weinig  <weinig@apple.com>

        Factor out pixel buffer from DOM specific ImageData class
        https://bugs.webkit.org/show_bug.cgi?id=225554

        Reviewed by Darin Adler.

        Prepare to fix layering violating use of DOM level ImageData being
        used by platform code by factoring out the pixel storage into a new
        PixelBuffer class. Since it will be a little more general that 
        ImageData is now (though ImageData will need to gain these soon)
        PixelBuffer also captures the pixel format and color space the pixel
        data represents.

        While here, update ImageData::data() to return a reference rather than
        a pointer to indicate it is never null and update all the callers.

        * Headers.cmake:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSImageDataCustom.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::dumpImageBitmap):
        (WebCore::CloneSerializer::dumpIfTerminal):
        (WebCore::CloneDeserializer::readTerminal):
        * html/ImageBitmap.cpp:
        (WebCore::ImageBitmap::createPromise):
        * html/ImageData.cpp:
        (WebCore::ImageData::create):
        (WebCore::ImageData::ImageData):
        (WebCore::ImageData::deepClone const):
        (WebCore::operator<<):
        * html/ImageData.h:
        (WebCore::ImageData::size const):
        (WebCore::ImageData::width const):
        (WebCore::ImageData::height const):
        (WebCore::ImageData::data const):
        (WebCore::ImageData::colorSpace const):
        (WebCore::ImageData::format const):
        * html/canvas/CanvasRenderingContext2DBase.cpp:
        (WebCore::createEmptyImageData):
        (WebCore::CanvasRenderingContext2DBase::putImageData):
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::texImageSourceHelper):
        * inspector/InspectorCanvas.cpp:
        (WebCore::InspectorCanvas::buildArrayForImageData):
        * platform/graphics/GraphicsContextGL.cpp:
        (WebCore::GraphicsContextGL::extractImageData):
        * platform/graphics/ImageBufferBackend.cpp:
        (WebCore::ImageBufferBackend::convertToLuminanceMask):
        (WebCore::ImageBufferBackend::getImageData const):
        (WebCore::ImageBufferBackend::putImageData):
        * platform/graphics/PixelBuffer.cpp: Added.
        (WebCore::PixelBuffer::PixelBuffer):
        (WebCore::PixelBuffer::deepClone const):
        * platform/graphics/PixelBuffer.h: Added.
        (WebCore::PixelBuffer::colorSpace const):
        (WebCore::PixelBuffer::format const):
        (WebCore::PixelBuffer::size const):
        (WebCore::PixelBuffer::data const):
        * platform/graphics/ShadowBlur.cpp:
        (WebCore::ShadowBlur::blurShadowBuffer):
        * platform/graphics/angle/GraphicsContextGLANGLE.cpp:
        (WebCore::GraphicsContextGLOpenGL::readPixelsForPaintResults):
        * platform/graphics/cg/GraphicsContextGLCG.cpp:
        (WebCore::GraphicsContextGLOpenGL::paintToCanvas):
        * platform/graphics/cg/ImageBufferCGBackend.cpp:
        (WebCore::ImageBufferCGBackend::toCFData const):
        * platform/graphics/cg/ImageBufferUtilitiesCG.cpp:
        (WebCore::cfData):
        * platform/graphics/filters/FEColorMatrix.cpp:
        (WebCore::FEColorMatrix::platformApplySoftware):
        * platform/graphics/filters/FEComponentTransfer.cpp:
        (WebCore::FEComponentTransfer::platformApplySoftware):
        * platform/graphics/filters/FEComposite.cpp:
        (WebCore::FEComposite::platformApplySoftware):
        * platform/graphics/filters/FEConvolveMatrix.cpp:
        (WebCore::FEConvolveMatrix::platformApplySoftware):
        * platform/graphics/filters/FEDisplacementMap.cpp:
        (WebCore::FEDisplacementMap::platformApplySoftware):
        * platform/graphics/filters/FEDropShadow.cpp:
        (WebCore::FEDropShadow::platformApplySoftware):
        * platform/graphics/filters/FEGaussianBlur.cpp:
        (WebCore::FEGaussianBlur::platformApplySoftware):
        * platform/graphics/filters/FELighting.cpp:
        (WebCore::FELighting::platformApplySoftware):
        * platform/graphics/filters/FEMorphology.cpp:
        (WebCore::FEMorphology::platformApplySoftware):
        * platform/graphics/filters/FETurbulence.cpp:
        (WebCore::FETurbulence::platformApplySoftware):
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::forceValidPreMultipliedPixels):
        (WebCore::FilterEffect::copyConvertedImageBufferToDestination):
        (WebCore::FilterEffect::copyConvertedImageDataToDestination):
        (WebCore::FilterEffect::copyUnmultipliedResult):
        (WebCore::FilterEffect::copyPremultipliedResult):
        * rendering/shapes/Shape.cpp:
        (WebCore::Shape::createRasterShape):

2021-05-08  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Unify font collection handling between all Cocoa ports
        https://bugs.webkit.org/show_bug.cgi?id=225566

        Reviewed by Darin Adler.

        Just remove an unnecessary #if.

        Covered by existing tests.

        * platform/graphics/mac/FontCustomPlatformData.cpp:
        (WebCore::createFontCustomPlatformData):

2021-05-08  Myles C. Maxfield  <mmaxfield@apple.com>

        Add bounds checks around calls to GlyphBuffer::stringOffsetAt()
        https://bugs.webkit.org/show_bug.cgi?id=225335
        <rdar://problem/75663608>

        Reviewed by Simon Fraser and Geoff Garen.

        We're getting crash reports that look like they're from string offsets being out-of-bounds.
        These string offsets round-trip through Core Text, which is allowed to modify them, which
        can end up making them out-of-bounds.

        No new tests because I don't have a reproducible test case; just crash reports.

        * platform/graphics/FontCascade.cpp:
        (WebCore::computeUnderlineType):
        * platform/graphics/GlyphBuffer.h:
        (WebCore::GlyphBuffer::uncheckedStringOffsetAt const):
        (WebCore::GlyphBuffer::checkedStringOffsetAt const):
        (WebCore::GlyphBuffer::stringOffsetAt const): Deleted.
        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::applyFontTransforms):
        (WebCore::WidthIterator::applyExtraSpacingAfterShaping):

2021-05-08  Ricky Mondello  <rmondello@apple.com>

        Fix a typo
        https://bugs.webkit.org/show_bug.cgi?id=225502

        Reviewed by Chris Dumez.

        * loader/LinkLoader.cpp:
        (WebCore::LinkLoader::preconnectIfNeeded):

2021-05-08  Megan Gardner  <megan_gardner@apple.com>

        Increase stored AppHighlight character limit to 500
        https://bugs.webkit.org/show_bug.cgi?id=225558

        Reviewed by Tim Horton.

        * Modules/highlight/AppHighlightStorage.cpp:

2021-05-07  Zalan Bujtas  <zalan@apple.com>

        [css-flexbox] Flex item construction may affect sibling flex item height computation
        https://bugs.webkit.org/show_bug.cgi?id=225489

        Reviewed by Sergio Villar Senin.

        Flex item construction triggers layout both on the flex item and on its descendants (see constructFlexItem).
        During this layout a percent height descendant may indirectly set an incorrect value on the flex container's 
        m_hasDefiniteHeight (this is due to the odd way we choose to resolve percent height values on the ancestor chain, 
        see setOverridingContainingBlockContentLogicalHeight(WTF::nullopt)).
        Now this incorrect m_hasDefiniteHeight value (Indefinite) causes the next sibling's (also) percent height
        resolve fail as it tells the flex item that the flex container can't help with resolving the percent height value.
        As the result we end up with an incorrect, 0px height value for this sibling.
        e.g.
        <div style="height: 100px; display: flex; flex-direction: column;">
          <div id=flexItemA style="height: 50px;"><div style="height: 100%;"></div></div>
          <div id=flexItemB style="height: 50%;"></div>
        </div>
        By the time we get to the construction of flexItemB, the RenderFlexibleBox's (flex container) m_hasDefiniteHeight
        is already (and incorrectly) set to Indefinite as the result of us trying to resolve flexItemA's descendant height percentage.
        This Indefinite value makes the flexItemB's height resolution fail as we believe that the flex container has indefinite height
        e.g "height: auto", while it is clearly resolvable (50% of 100px).
        Now if we flip the order and flexItemB comes first, the test case passes fine.
        It is very unfortunate that some descendant height resolving process can trigger a state change on the ancestor RenderFlexibleBox, but
        fixing it would certainly require some substantial architectural change (e.g. pushing down the constraints to the geometry functions instead of
        walking the containing block chain).
        In this patch, we just scope m_hasDefiniteHeight so that the RenderFlexibleBox's state is not effected by the flex item construction. 

        Test: fast/flexbox/flex-column-with-percent-height-descendants.html

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutFlexItems):

2021-05-07  Devin Rousso  <drousso@apple.com>

        [iOS] fix inconsistency around the meaning of `rate` and `defaultPlaybackRate` between WebKit and AVKit
        https://bugs.webkit.org/show_bug.cgi?id=225532
        <rdar://problem/77629276>

        Reviewed by Eric Carlson.

        In AVKit, the `defaultPlaybackRate` is used when playback starts, such as resuming after
        pausing. In WebKit, however, `defaultPlaybackRate` is only used when first loading and after
        ending scanning, with the `playbackRate` being used in all other cases, including when
        resuming after pausing. As such, WebKit should return the `playbackRate` instead of the
        `defaultPlaybackRate` in these cases when communicating with AVKit.

        * platform/ios/WebAVPlayerController.mm:
        (-[WebAVPlayerController setRate:]):
        Also `setDefaultPlaybackRate:` if not paused (i.e. `rate != 0`) since WebKit's definition of
        `playbackRate` does not change when paused.

        * platform/ios/PlaybackSessionInterfaceAVKit.mm:
        (WebCore::PlaybackSessionInterfaceAVKit::rateChanged):
        Make sure to `setDefaultPlaybackRate:` before `setRate:` as the latter can affect the former.

2021-05-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        Do not try to remove and already removed node while deleting selection
        https://bugs.webkit.org/show_bug.cgi?id=224893

        Reviewed by Ryosuke Niwa.

        Test: editing/inserting/insert-text-force-repaint-on-load-crash.html

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::removeNode): Return early if the given node doesn't have a parent anymore.

2021-05-07  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] Set the -isSourceEditable property when presenting webpage translation popup
        https://bugs.webkit.org/show_bug.cgi?id=225515
        <rdar://problem/77658040>

        Reviewed by Tim Horton.

        Set `-[LTUITranslationViewController isSourceEditable]` to `YES` when showing the context menu for editable
        content. Instead of plumbing another boolean flag through `ContextMenuClient` and into the client layers through
        `handleTranslation()`, we roll all of the webpage translation context menu parameters into a single object
        (`TranslationContextMenuInfo`), including a new flag indicating whether or not the translation controller should
        be shown in "editable" mode.

        * Headers.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/EmptyClients.cpp:
        * page/ContextMenuClient.h:
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected):
        * page/TranslationContextMenuInfo.h: Added.

        Pull the translated text string, selection bounds, menu location, and the new mode flag into a separate struct.

        (WebCore::TranslationContextMenuInfo::encode const):
        (WebCore::TranslationContextMenuInfo::decode):

2021-05-07  Chris Dumez  <cdumez@apple.com>

        AudioWorkletProcessor which does not extend base class crashes Safari
        https://bugs.webkit.org/show_bug.cgi?id=225449
        <rdar://problem/77624792>

        Reviewed by Sam Weinig.

        Update AudioWorkletGlobalScope::createProcessor() to validate the type of the processor
        after constructing it.

        * Modules/webaudio/AudioWorkletGlobalScope.cpp:
        (WebCore::AudioWorkletGlobalScope::createProcessor):

2021-05-07  Philippe Normand  <pnormand@igalia.com>

        [GStreamer][MediaStream] Emit black frames for disabled video tracks
        https://bugs.webkit.org/show_bug.cgi?id=225511

        Reviewed by Xabier Rodriguez-Calvar.

        In case the video track is disabled, emit a black I420 frame. For disabled audio tracks we
        might need to silence the corresponding audio frames, this will be investigated in a
        follow-up patch.

        * platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:

2021-05-07  Frédéric Wang  <fwang@igalia.com>

        Crash in ApplyStyleCommand::applyRelativeFontStyleChange
        https://bugs.webkit.org/show_bug.cgi?id=225235

        Reviewed by Ryosuke Niwa.

        Test: editing/execCommand/font-size-delta-same-node-for-start-and-end-crash.html

        In ApplyStyleCommand::applyRelativeFontStyleChange, when the selection start and end have the
        same anchor node, the start node of the loop is obtained by calling Position::upstream on the
        selection start while end node of the loop is obtained by calling NodeTraversal::next on the
        anchor node. This can result in the former being after the latter. This patch fixes this by
        moving the end of the loop after the anchor node (similar to what is already done when the
        start anchor node is a strict descendant of the end anchor node).

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyRelativeFontStyleChange): Also include the case where
        end.deprecatedNode() == start.deprecatedNode() in the conditional.

2021-05-07  Carlos Garnacho  <carlosg@gnome.org>

        [GTK4] Rewrite GTK gesture support to work for both 3.x and 4.x.
        https://bugs.webkit.org/show_bug.cgi?id=212324

        Reviewed by Carlos Garcia Campos.

        * platform/gtk/GtkVersioning.h:
        (gtk_event_controller_get_current_event_state):
        (gtk_event_controller_get_current_event_time): New GTK4 portability
        helper methods.

2021-05-07  Youenn Fablet  <youenn@apple.com>

        Add WebRTC logging control in GPUProcess
        https://bugs.webkit.org/show_bug.cgi?id=225346

        Reviewed by Eric Carlson.

        Migrate setEnableLogging to setLoggingLevel as a virtual method so that it can be implemented by WebKit to send logging level to GPUProcess.
        Simplify WebCore::LibWebRTCProvider::setLoggingLevel to not differentiate debug from non debug builds.
        Manually tested.

        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::create):
        * page/Page.cpp:
        (WebCore::Page::configureLoggingChannel):
        * platform/mediastream/libwebrtc/LibWebRTCProvider.cpp:
        (WebCore::computeLogLevel):
        (WebCore::LibWebRTCProvider::setRTCLogging):
        (WebCore::LibWebRTCProvider::setLoggingLevel):
        (WebCore::setLogging): Deleted.
        (WebCore::LibWebRTCProvider::setEnableLogging): Deleted.
        * platform/mediastream/libwebrtc/LibWebRTCProvider.h:

2021-05-07  Frédéric Wang  <fwang@igalia.com>

        Crash in InsertTextCommand::positionInsideTextNode
        https://bugs.webkit.org/show_bug.cgi?id=223753

        Reviewed by Ryosuke Niwa.

        Test: editing/deleting/selection-on-empty-table-row.html

        This is a follow-up of bug 213514, where removePreviouslySelectedEmptyTableRows was
        modified to ensure the selection is properly updated after deleting the last row. This
        patch does the same for other rows.

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::removePreviouslySelectedEmptyTableRows): Update comment
        about calling raw removeNode and move it to the top of the function. Replace all the calls
        to CompositeEditCommand::removeNode with CompositeEditCommand::removeNodeUpdatingStates so
        that the selection is adjusted.

2021-05-07  Said Abou-Hallawa  <said@apple.com>

        [GPU Process] Closing the GPU Process should clear all the back pointers from ItemBuffer to RemoteRenderingBackendProxy
        https://bugs.webkit.org/show_bug.cgi?id=224744
        <rdar://74592639>

        Reviewed by Ryosuke Niwa.

        RemoteRenderingBackendProxy::gpuProcessConnectionDidClose() clears the
        the backends of all its RemoteImageBufferProxys. It also clears all the
        SharedMemory which are referenced by the ItemBufferHandles.

        So DisplayList::ImageBuffer::clearBackend() should clear all the
        ItemBufferHandles of its DisplayList.

        * platform/graphics/displaylists/DisplayListImageBuffer.h:

2021-05-06  Jean-Yves Avenard  <jya@apple.com>

        ArtworkImageLoader can call callback with null value.
        https://bugs.webkit.org/show_bug.cgi?id=225496
        rdar://problem/77631799

        Reviewed by Eric Carlson.

        The ArtworkImageLoader can call the callback with null to indicate an error.

        * Modules/mediasession/MediaMetadata.cpp:
        (WebCore::MediaMetadata::refreshArtworkImage): Add null check

2021-05-06  Yoshiaki Jitsukawa  <yoshiaki.jitsukawa@sony.com>

        [OpenSSL] Implement CryptoAlgorithmRSA*
        https://bugs.webkit.org/show_bug.cgi?id=225294

        Reviewed by Don Olmstead.

        Implement RSA for OpenSSL.

        Implement CryptoAlgorithmRSA_OAEP, CryptoAlgorithmRSA_PSS,
        CryptoAlgorithmRSAES_PKCS1_v1_5, CryptoAlgorithmRSASA_PKCS1_v1_5,
        and CryptoKeyRSA for OpenSSL.

        Note that if such OpenSSL version that does not support RSA_OAEP or
        RSA_PSS, the WebCrypto API for those algorithm will return a
        NotSupportedError.

        Also note that OpenSSL accepts RSA_PSS salt length longer than the hash
        length. This makes the
        crypto/subtle/rsa-pss-import-key-sign-large-salt.html test fail.

        Test: Existing crypto/subtle tests

        * crypto/keys/CryptoKeyRSA.h: Use the EVP_PKEY struct for the platform
        key.
        * crypto/openssl/CryptoAlgorithmHMACOpenSSL.cpp: Move HMACAlgorithm()
        to OpenSSLUtilities as DigestAlgorithm().
        * crypto/openssl/CryptoAlgorithmRSAES_PKCS1_v1_5OpenSSL.cpp:
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::platformEncrypt):
        Implemented.
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::platformDecrypt):
        Implemented.
        * crypto/openssl/CryptoAlgorithmRSASSA_PKCS1_v1_5OpenSSL.cpp:
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::platformSign):
        Implemented.
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::platformVerify):
        Implemented.
        * crypto/openssl/CryptoAlgorithmRSA_OAEPOpenSSL.cpp:
        (WebCore::CryptoAlgorithmRSA_OAEP::platformEncrypt): Implemented.
        (WebCore::CryptoAlgorithmRSA_OAEP::platformDecrypt): Implemented.
        * crypto/openssl/CryptoAlgorithmRSA_PSSOpenSSL.cpp:
        (WebCore::CryptoAlgorithmRSA_PSS::platformSign): Implemented.
        (WebCore::CryptoAlgorithmRSA_PSS::platformVerify): Implemented.
        * crypto/openssl/CryptoAlgorithmRegistryOpenSSL.cpp:
        (WebCore::CryptoAlgorithmRegistry::platformRegisterAlgorithms):
        Registered RSAES_PKCS1_v_1_5, RSASSA_PKCS1_v1_5, RSA_OAEP, and RSA_PSS.
        * crypto/openssl/CryptoKeyRSAOpenSSL.cpp:
        (WebCore::getRSAModulusLength):
        (WebCore::convertToBytes):
        (WebCore::convertToBigNumber):
        (WebCore::CryptoKeyRSA::create):
        (WebCore::CryptoKeyRSA::CryptoKeyRSA):
        (WebCore::CryptoKeyRSA::isRestrictedToHash const):
        (WebCore::CryptoKeyRSA::keySizeInBits const):
        (WebCore::exponentVectorToUInt32):
        (WebCore::CryptoKeyRSA::generatePair):
        (WebCore::CryptoKeyRSA::importSpki):
        (WebCore::CryptoKeyRSA::importPkcs8):
        (WebCore::CryptoKeyRSA::exportSpki const):
        (WebCore::CryptoKeyRSA::exportPkcs8 const):
        (WebCore::CryptoKeyRSA::algorithm const):
        (WebCore::CryptoKeyRSA::exportData const):
        * crypto/openssl/OpenSSLCryptoUniquePtr.h:
        (WebCore::OpenSSLCryptoPtrDeleter<EVP_PKEY_CTX>::operator() const):
        Added.
        (WebCore::OpenSSLCryptoPtrDeleter<RSA>::operator() const): Added.
        (WebCore::OpenSSLCryptoPtrDeleter<PKCS8_PRIV_KEY_INFO>::operator() const): Added.
        (WebCore::OpenSSLCryptoPtrDeleter<BIGNUM>::operator() const): Added.
        (WebCore::OpenSSLCryptoPtrDeleter<BN_CTX>::operator() const): Added.
        * crypto/openssl/OpenSSLUtilities.cpp:
        (WebCore::digestAlgorithm): Added.
        (WebCore::calculateDigest): Added.
        * crypto/openssl/OpenSSLUtilities.h: 
        * platform/OpenSSL.cmake:

2021-05-06  Eric Carlson  <eric.carlson@apple.com>

        r277122 caused a crash in GPU Process
        https://bugs.webkit.org/show_bug.cgi?id=225492
        <rdar://problem/77630141>

        Reviewed by Jer Noble.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayer): Have the time observer
        call back on the main queue.

2021-05-06  Devin Rousso  <drousso@apple.com>

        Sampled Page Top Color: make hit tests consider elements with `pointer-events: none`
        https://bugs.webkit.org/show_bug.cgi?id=225419

        Reviewed by Tim Horton.

        Test: SampledPageTopColor.HitTestCSSPointerEventsNone

        * rendering/HitTestRequest.h:
        (WebCore::HitTestRequest::ignoreCSSPointerEventsProperty const): Added.
        * rendering/InlineBox.h:
        (WebCore::InlineBox::visibleToHitTesting const):
        * rendering/RenderElement.h:
        (WebCore::RenderElement::visibleToHitTesting const):
        Add `RequestType::IgnoreCSSPointerEventsProperty` that's used inside `visibleToHitTesting`
        to control whether `style().pointerEvents() == PointerEvents::None` is checked.

        * dom/Document.cpp:
        (WebCore::isValidPageSampleLocation):
        Include the new `RequestType::IgnoreCSSPointerEventsProperty` since we're not hit testing
        for interaction, rather we're hit testing in an attempt to see what will be painted.

        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::nodeAtPoint):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::nodeAtPoint):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::nodeAtPoint):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::nodeAtPoint):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::nodeAtPoint):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::hitTestCulledInline):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::nodeAtPoint):
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::nodeAtPoint):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::nodeAtPoint):
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::nodeAtPoint):
        Pass the `HitTestRequest` to `visibleToHitTesting`.

2021-05-06  Devin Rousso  <drousso@apple.com>

        Sampled Page Top Color: don't snapshot if the hit test location is a canvas
        https://bugs.webkit.org/show_bug.cgi?id=225418

        Reviewed by Tim Horton.

        Tests: SampledPageTopColor.HitTestHTMLCanvasWithoutRenderingContext
               SampledPageTopColor.HitTestHTMLCanvasWithRenderingContext

        * dom/Document.cpp:
        (WebCore::isValidPageSampleLocation):

2021-05-06  Jer Noble  <jer.noble@apple.com>

        REGRESSION (r276870): ASSERTION FAILED: !m_impl || !m_shouldEnableAssertions || m_impl->wasConstructedOnMainThread() == isMainThread() under WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayer
        https://bugs.webkit.org/show_bug.cgi?id=225371
        <rdar://problem/77531907>

        Reviewed by Eric Carlson.

        In WebKitLegacy, the weakPtr created by createAVPlayer() is constructed on the WebThread, and
        dereferenced on the main thread. However, the reason we use a WeakPtr for this call is a long-
        since fixed bug in AVFoundation. We can just remove the WeakPtr and rely on AVFoundation to
        not call our block after the observer has been removed in the destructor.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayer):

2021-05-06  Eric Carlson  <eric.carlson@apple.com>

        [GPUP] Reduce MediaPlayer polling frequency when possible
        https://bugs.webkit.org/show_bug.cgi?id=225396
        <rdar://problem/77562643>

        Reviewed by Jer Noble.

        Add a currentTime changed callback to MediaPlayerPrivateInterface so a client
        doens't have to poll for time changes.

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::setCurrentTimeDidChangeCallback):
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::setCurrentTimeDidChangeCallback):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setCurrentTimeDidChangeCallback):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::currentMediaTimeDidChange const):

2021-05-06  Antoine Quint  <graouts@webkit.org>

        CSS custom properties on pseudo elements background gradients causes infinite layout and high CPU load
        https://bugs.webkit.org/show_bug.cgi?id=194332
        <rdar://problem/47873895>

        Reviewed by Simon Fraser.

        When a background-image uses a CSS custom property the resulting StyleGeneratedImage may not be the same
        object as during prior style updates. This caused transitions to be triggered for all style updates for
        such background-image values. To fix this, we modify the == operator for StyleGeneratedImage to use
        arePointingToEqualData() with the CSSImageGeneratorValue member and added an == operator for the
        CSSImageGeneratorValue class to call into the existing equals() methods. These equals() methods
        are now overrides of the virtual CSSImageGeneratorValue method.

        This change in behavior required a change in RenderElement::updateFillImages() to not only check whether
        the images were identical, but to also check whether the renderer was registered as a client on the new
        images. To do this, we add a new virtual hasClient() method on StyleImage.

        Test: webanimations/css-transition-element-with-gradient-background-image-and-css-custom-property.html

        * css/CSSImageGeneratorValue.cpp:
        (WebCore::CSSImageGeneratorValue::operator== const):
        * css/CSSImageGeneratorValue.h:
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::updateFillImages):
        * rendering/style/FillLayer.cpp:
        (WebCore::FillLayer::imagesIdentical): Deleted.
        * rendering/style/FillLayer.h:
        * rendering/style/StyleCachedImage.cpp:
        (WebCore::StyleCachedImage::hasClient const):
        * rendering/style/StyleCachedImage.h:
        * rendering/style/StyleGeneratedImage.cpp:
        (WebCore::StyleGeneratedImage::operator== const):
        (WebCore::StyleGeneratedImage::hasClient const):
        * rendering/style/StyleGeneratedImage.h:
        * rendering/style/StyleImage.h:
        * rendering/style/StyleMultiImage.cpp:
        (WebCore::StyleMultiImage::hasClient const):
        * rendering/style/StyleMultiImage.h:

2021-05-06  Philippe Normand  <pnormand@igalia.com>

        [WebAudio][GStreamer] socketpair leaks
        https://bugs.webkit.org/show_bug.cgi?id=225463

        Reviewed by Žan Doberšek.

        * platform/audio/gstreamer/AudioSourceProviderGStreamer.cpp:
        (WebCore::AudioSourceProviderGStreamer::~AudioSourceProviderGStreamer): Properly dispose of
        the GStreamer pipeline and the resources it has hold on.
        * platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:
        (webKitWebAudioSrcChangeState): The ref returned by gst_buffer_pool_new() is transfer-full,
        so we need to adopt it here.

2021-05-06  Dean Jackson  <dino@apple.com>

        [WebXR] Add IOSurface to FrameData::LayerData
        https://bugs.webkit.org/show_bug.cgi?id=225428
        <rdar://problem/77586270>

        Reviewed by Tim Horton.

        Original patch by Ada Chan.

        Cocoa platforms will use IOSurfaces on FrameData::LayerData.
        Add this member, allow it to be encoded and decoded, and fix up
        some places where we were copying a FrameData unnecessarily, or
        where we have to explicitly copy.

        * Modules/webxr/WebXRSession.cpp:
        (WebCore::WebXRSession::onFrame): Use WTFMove instead of copying.
        * platform/graphics/cocoa/IOSurface.h: Export createFromSurface.
        * platform/xr/PlatformXR.h:
        (PlatformXR::Device::FrameData::LayerData::encode const):
        (PlatformXR::Device::FrameData::LayerData::decode):
        (PlatformXR::Device::FrameData::decode):
        (PlatformXR::Device::FrameData::copy const):
        * testing/WebFakeXRDevice.cpp:
        (WebCore::SimulatedXRDevice::frameTimerFired):

2021-05-06  Alicia Boya García  <aboya@igalia.com>

        [MSE][GStreamer] Remove webKitMediaSrcFinalize
        https://bugs.webkit.org/show_bug.cgi?id=225458

        Reviewed by Philippe Normand.

        webKitMediaSrcFinalize was no longer necessary after moving to
        WEBKIT_DEFINE_TYPE as requested by the reviewers. This patch cleans
        that up.

        * platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamer.cpp:
        (webkit_media_src_class_init):
        (webKitMediaSrcFinalize): Deleted.

2021-05-06  Mark Lam  <mark.lam@apple.com>

        Forbid further execution in jsc shell if execution is terminated.
        https://bugs.webkit.org/show_bug.cgi?id=225410
        rdar://77548608

        Reviewed by Michael Saboff.

        Re-implement WorkerOrWorkletScriptController::forbidExecution() and
        isExecutionForbidden() using the VM's notion of the flag

        * workers/WorkerOrWorkletScriptController.cpp:
        (WebCore::WorkerOrWorkletScriptController::forbidExecution):
        (WebCore::WorkerOrWorkletScriptController::isExecutionForbidden const):
        * workers/WorkerOrWorkletScriptController.h:

2021-05-06  Darin Adler  <darin@apple.com>

        Streamline codec parsing, replacing uses of HashMap with SortedArrayMap
        https://bugs.webkit.org/show_bug.cgi?id=225368

        Reviewed by Sam Weinig.

        * platform/ContentType.cpp:
        (WebCore::ContentType::parameter const): Use early return instead of nesting.
        Strip HTML spaces, not all whitespace, and do it only once rather than twice.
        Fixed a small bug where we search for the second quotation mark in a way that
        could find the same quotation mark twice if there is a space before the first
        one. Added FIXME comments about a few obvious problems in the parsing algorithm.
        Improved efficiency by using StringView, saving the allocation of one temporary
        StringImpl in the case where we have some HTML spaces to strip.
        (WebCore::ContentType::containerType const): Simplified the implemementation
        by taking advantage of the fact that our notFound value is designed to be used
        as an argument to functions like String::left, telling them to return the
        entire string. Strip HTML spaces, not all whitespace.

        * platform/graphics/HEVCUtilities.cpp:
        (WebCore::parseHEVCCodecParameters): Take a StringView instead of a String
        for greater flexibility and efficiency. Don't store codecName, which is
        never used after verifying that it is a legal value here. Don't store the
        generalTierFlag, which is never used after verifying that it is a legal
        value here. Don't store the constraint flags, which are never used after
        verifying that they are legal values here.
        (WebCore::makeOptionalFromPointer): Added to make code below cleaner.
        (WebCore::parseDoViCodecType): Renamed from codecStringForDoViCodecType
        since it now returns an enumeration value instead of a string. Also
        take a StringView instead of a String for greater flexibility and efficiency.
        Also use a SortedArrayMap instead of a MemoryCompactLookupOnlyRobinHoodHashMap.
        (WebCore::profileIDForAlphabeticDoViProfile): Take a StringView instead of
        a String for greater flexibility and efficiency. Use a SortedArrayMap instead
        of a MemoryCompactLookupOnlyRobinHoodHashMap.
        (WebCore::isValidProfileIDForCodec): Take a codec enumeration value parameter
        instead of a string.
        (WebCore::parseDoViCodecParameters): Take a StringView instead of a String
        for greater flexibility and efficiency. Store the codec as an enumeration
        instead of a String. Don't create a temporary String just so we can call the
        profileIDForAlphabeticDoViProfile function.

        * platform/graphics/HEVCUtilities.h: Renamed HEVCParameterSet and
        DoViParameterSet to HEVCParameters and DoViParameters. The word "set" is not
        helpful in these names. Removed codecName, generalTierFlag, and constraintFlags
        from HEVCParameterSet. Changed the parse functions to take StringView instead
        of String. Replaced the string codecName in DoViParameterSet with an enumeration
        since there are only a few valid values.

        * platform/graphics/cocoa/HEVCUtilitiesCocoa.h: Use Optional return value
        instead of a bool and an out argument.

        * platform/graphics/cocoa/HEVCUtilitiesCocoa.mm:
        (WebCore::validateHEVCParameters): Updated to return Optional.
        (WebCore::codecType): Updated to take an enumeration value and no longer
        need to return an optional. Also renamed from codecTypeForDoViCodecString
        since the type now makes this clear without a long function name.
        (WebCore::parseStringArrayFromDictionaryToUInt16Vector): Renamed from
        CFStringArrayToNumberVector, and moved the dictionary lookup in here.
        The old name was a little vague; "NumberVector" doesn't say 16-bit unsigned.
        Simplified code by using an Objective-C for loop instead of a block and
        enumeration. This cut the size of the function down quite a bit.
        (WebCore::validateDoViParameters): Updated to return Optional. Also
        refactored to use the imrpoved helper functions above.

        * platform/graphics/cocoa/MediaEngineConfigurationFactoryCocoa.cpp:
        (WebCore::videoCodecTypeFromRFC4281Type): Take a StringView instead of a String
        for greater flexibility and efficiency.
        (WebCore::computeMediaCapabilitiesInfo): Factored out this helper function
        so we don't have such complicated callback logic. Refactored to use the new
        versions of validateHEVCParameters, validateDoViParameters, and
        validateVPParameters.
        (WebCore::createMediaPlayerDecodingConfigurationCocoa): Moved most of the
        code into computeMediaCapabilitiesInfo; this mostly deals with the callback.

        * platform/graphics/cocoa/VP9UtilitiesCocoa.h: Removed extraneous use of extern.
        Added const for input-only reference arguments. Changed validateVPParameters to
        return Optional instead of a bool with an out argument.

        * platform/graphics/cocoa/VP9UtilitiesCocoa.mm:
        (WebCore::isVP9CodecConfigurationRecordSupported): Added const.
        (WebCore::isVP8CodecConfigurationRecordSupported): Ditto.
        (WebCore::isVPCodecConfigurationRecordSupported): Ditto.
        (WebCore::validateVPParameters): Refactored to return Optional.

        * platform/network/HTTPHeaderMap.h: Removed unneeded includes.

        * platform/text/LocaleToScriptMapping.cpp: Moved PackedASCIILowerCodes from
        here into the SortedArrayMap.h header.

        * testing/Internals.cpp:
        (WebCore::Internals::parseHEVCCodecParameters): Tweaked since HEVCParameterSet
        is now only the correct name here in the Internals class.
        (WebCore::Internals::parseDoViCodecParameters): Ditto. Also added code to
        expose the codec enumeration as a string. This is now a testing-only thing.
        (WebCore::Internals::parseVPCodecParameters): Ditto.

        * testing/Internals.h: Tweaked the ParameterSet types since they now don't
        exactly match the structures used in the real code.

        * testing/Internals.idl: Removed codecName, generalTierFlag, and
        constraintFlags from HEVCParameterSet. Neither codecName nor constraintFlags
        was used in any test. And the generalTierFlag test was something we can
        do without; the parsed value isn't actually used in any WebKit code.

2021-05-06  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Fallback to texture mapper video orientation handling when glvideoflip is not available
        https://bugs.webkit.org/show_bug.cgi?id=225454

        Reviewed by Xabier Rodriguez-Calvar.

        r275412 introduced a new runtime dependency on gst-plugins-good's glvideoflip element, which
        is not desirable for the 2.32 branch. This patch let's the player handle rotation tags if
        the glvideoflip element wasn't found at runtime. Ideally we should probably not rely on
        glvideoflip in the first place as it might induce a performance impact, to be handled in a
        follow-up patch.

        * platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp:
        (webKitGLVideoSinkConstructed):
        (webKitGLVideoSinkGetProperty):
        (webkit_gl_video_sink_class_init):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::createVideoSinkGL):

2021-05-06  Chris Dumez  <cdumez@apple.com>

        imported/w3c/web-platform-tests/eventsource/format-utf-8.htm is failing on some platforms
        https://bugs.webkit.org/show_bug.cgi?id=225416
        <rdar://77529801>

        Reviewed by Youenn Fablet.

        The HTML specification [1] states that EventSource streams should always be decoded as UTF-8.
        However, we had logic in WebKit that was checking the charset of the response and aborting
        when the charset is not UTF-8. It looks like we were lucky until now that we would fail to
        determine the charset of the response and proceed anyway. However, due to underlying system
        changes, in the context of this test, we are now properly detecting the response charset as
        "windows-1252" and (incorrectly) aborting. To address the issue, I no longer abort the
        connection if the charset is not "utf-8". We do still log a console warning but we proceed
        decoding the stream as UTF-8 no matter the response's charset, as per the specification.

        [1] https://html.spec.whatwg.org/multipage/server-sent-events.html#event-stream-interpretation

        No new tests, covered by existing test that is failing on some platforms.

        * page/EventSource.cpp:
        (WebCore::EventSource::responseIsValid const):

2021-05-06  Martin Robinson  <mrobinson@webkit.org>

        [css-scroll-snap] Compute proximity information while snapping
        https://bugs.webkit.org/show_bug.cgi?id=224326

        Reviewed by Simon Fraser.

        Have ScrollSnapOffsetsInfo carry snap area rectangles instead of scroll offset
        ranges. This allows proximity information to be handled during snap point selection.
        The geometry will be used in a future patch to follow spec behavior for snap
        areas that overflow the snapport and when handling masonry layouts.

        No new tests. This is just a refactor. It should not change behavior at all.

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::setStateScrollingNodeSnapOffsetsAsFloat): Pass in the new template argument.
        * page/scrolling/ScrollSnapOffsetsInfo.cpp:
        (WebCore::isNearEnoughToOffsetForProximity): Added.
        (WebCore::closestSnapOffsetWithInfoAndAxis): Modified to take in the ScrollSnapOffsetsInfo data
        structure and axis along with the viewport size. This function now explicitly determines if a
        snap point is too far away to affect scrolling due to scroll-snap proximity.
        (WebCore::updateSnapOffsetsForScrollableArea): Add snap areas and snap area indices to SnapOffset.
        (WebCore::convertOffsetInfo): Instead of converting scroll offset ranges, convert the snap
        area rectangles.
        (WebCore::FloatScrollSnapOffsetsInfo::convertUnits const): Ditto.
        (WebCore::LayoutScrollSnapOffsetsInfo::convertUnits const): Ditto.
        (WebCore::LayoutScrollSnapOffsetsInfo::closestSnapOffset const): Updated to reflect new
        internal function.
        (WebCore::FloatScrollSnapOffsetsInfo::closestSnapOffset const): Ditto.
        * page/scrolling/ScrollSnapOffsetsInfo.h:
        (WebCore::ScrollSnapOffsetsInfo::isEqual const): Update to reflect new mem ers.
        (WebCore::ScrollSnapOffsetsInfo::offsetsForAxis const): Changed template parameter name.
        * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.mm:
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::updateFromStateNode): ::convertUnits
        takes a new template parameter.
        * page/scrolling/nicosia/ScrollingTreeScrollingNodeDelegateNicosia.cpp:
        (WebCore::ScrollingTreeScrollingNodeDelegateNicosia::handleWheelEvent): Pass in viewport size.
        * platform/ScrollController.cpp:
        (WebCore::ScrollController::setNearestScrollSnapIndexForAxisAndOffset): Ditto.
        (WebCore::ScrollController::adjustScrollDestination): Ditto.
        * platform/ScrollSnapAnimatorState.cpp:
        (WebCore::ScrollSnapAnimatorState::setupAnimationForState): Ditto.
        (WebCore::ScrollSnapAnimatorState::targetOffsetForStartOffset const): Ditto.
        (WebCore::operator<<): No longer print snap offset ranges.
        * platform/ScrollSnapAnimatorState.h: Remove references to snap offset ranges.

2021-05-06  Philippe Normand  <pnormand@igalia.com>

        REGRESSION(r271341): media/media-fullscreen-inline.html times out on GTK
        https://bugs.webkit.org/show_bug.cgi?id=220540

        Reviewed by Xabier Rodriguez-Calvar.

        When the GStreamer player client is an <audio> tag it won't render any video, but setting no
        explicit video sink on playbin will not prevent video rendering per-se. In that situation
        playbin will use autovideosink which will end-up creating a standalone window through
        glimagesink or whatever has the highest rank. For now with playbin2 we can use fakevideosink
        for such situation. For the playbin3 case we might be able to entirely deactivate video
        rendering through stream selection.

        Internals::isChangingPresentationMode was enabled for ports not implementing
        VIDEO_PRESENTATION_MODE yet, because this test makes use of it.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin):
        (WebCore::MediaPlayerPrivateGStreamer::createVideoSink):
        * testing/Internals.cpp:
        (WebCore::Internals::isChangingPresentationMode const):
        * testing/Internals.h:
        * testing/Internals.idl:

2021-05-06  Ryosuke Niwa  <rniwa@webkit.org>

        Replace raw pointers in SVGElementRareData and SVGDocumentExtensions with WeakHashMap and WeakPtr
        https://bugs.webkit.org/show_bug.cgi?id=225440

        Reviewed by Antti Koivisto.

        Replaced the remaining use of raw pointers to Element in SVGElementRareData and SVGDocumentExtensions
        with WeakHashSet and WeakPtr.

        This patch also replaces SVGDocumentExtensions::m_elementDependencies with a new WeakHashMap
        in SVGElementRareData for clarify & simplicity with a new terminology. When a SVG element A refers
        to another element B via href, A's SVGElementRareData::m_referenceTarget is set to B, and A is added
        to B's SVGElementRareData::m_referencingElements.

        No new tests since there should be no observable behavior differences.

        * rendering/svg/RenderSVGResource.cpp:
        (WebCore::removeFromCacheAndInvalidateDependencies):
        * rendering/svg/RenderSVGResourceContainer.cpp:
        (WebCore::RenderSVGResourceContainer::registerResource):
        * svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::applyResultsToTarget):
        * svg/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::addPendingResource):
        (WebCore::SVGDocumentExtensions::isElementWithPendingResources const):
        (WebCore::SVGDocumentExtensions::isPendingResource const): Directly check the existence of
        the id in m_pendingResources instead of calling isIdOfPendingResource.
        (WebCore::SVGDocumentExtensions::removeElementFromPendingResources):
        (WebCore::SVGDocumentExtensions::removePendingResource): Moved to the header to be inlined.
        (WebCore::SVGDocumentExtensions::removePendingResourceForRemoval): Deleted. The code is
        inlined in removeElementFromPendingResources instead.
        (WebCore::SVGDocumentExtensions::markPendingResourcesForRemoval):
        (WebCore::SVGDocumentExtensions::takeElementFromPendingResourcesForRemovalMap): Renamed
        from removeElementFromPendingResourcesForRemovalMap.
        (WebCore::SVGDocumentExtensions::addElementToRebuild): Added.
        (WebCore::SVGDocumentExtensions::removeElementToRebuild): Added.
        (WebCore::SVGDocumentExtensions::setOfElementsReferencingTarget): Deleted.
        (WebCore::SVGDocumentExtensions::addElementReferencingTarget): Deleted.
        (WebCore::SVGDocumentExtensions::removeAllTargetReferencesForElement): Deleted.
        (WebCore::SVGDocumentExtensions::clearTargetDependencies):
        (WebCore::SVGDocumentExtensions::rebuildAllElementReferencesForTarget):
        (WebCore::SVGDocumentExtensions::removeAllElementReferencesForTarget): Deleted.
        * svg/SVGDocumentExtensions.h:
        (WebCore::SVGDocumentExtensions::removePendingResource):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::~SVGElement):
        (WebCore::SVGElement::removedFromAncestor): Moved the most of logic in SVGDocumentExtensions's
        clearTargetDependencies and removeAllElementReferencesForTarget here.
        (WebCore::SVGElement::instances const):
        (WebCore::SVGElement::referencingElements const): Added.
        (WebCore::SVGElement::addReferencingElement): Added.
        (WebCore::SVGElement::removeReferencingElement): Added.
        (WebCore::SVGElement::removeElementReference): Added.
        (WebCore::SVGElement::setCorrespondingElement):
        (WebCore::SVGElement::addEventListener):
        (WebCore::SVGElement::removeEventListener):
        (WebCore::SVGElement::createAnimator):
        (WebCore::SVGElement::buildPendingResourcesIfNeeded):
        (WebCore::SVGElement::updateRelativeLengthsInformation):
        (WebCore::SVGElement::invalidateInstances):
        (WebCore:: const): Deleted.
        * svg/SVGElement.h:
        (WebCore::SVGElement::hasRelativeLengths const):
        (WebCore::SVGElement::updateRelativeLengthsInformation):
        * svg/SVGElementRareData.h:
        (WebCore::SVGElementRareData::addInstance):
        (WebCore::SVGElementRareData::removeInstance):
        (WebCore::SVGElementRareData::instances const):
        (WebCore::SVGElementRareData::addReferencingElement):
        (WebCore::SVGElementRareData::removeReferencingElement):
        (WebCore::SVGElementRareData::referencingElements const):
        (WebCore::SVGElementRareData::takeReferencingElements):
        (WebCore::SVGElementRareData::referenceTarget const):
        (WebCore::SVGElementRareData::setReferenceTarget):
        (WebCore::SVGElementRareData::correspondingElement):
        (WebCore::SVGElementRareData::setCorrespondingElement):
        (): Deleted.
        (WebCore::SVGElementRareData:: const): Deleted.
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::clearResourceReferences):
        (WebCore::SVGFEImageElement::buildPendingResource):
        * svg/SVGMPathElement.cpp:
        (WebCore::SVGMPathElement::buildPendingResource):
        (WebCore::SVGMPathElement::clearResourceReferences):
        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::invalidateMPathDependencies):
        * svg/SVGTextPathElement.cpp:
        (WebCore::SVGTextPathElement::clearResourceReferences):
        (WebCore::SVGTextPathElement::buildPendingResource):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::invalidateDependentShadowTrees):
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::clearResourceReferences):
        (WebCore::SVGSMILElement::buildPendingResource):
        * svg/properties/SVGAttributeAnimator.cpp:
        (WebCore::SVGAttributeAnimator::applyAnimatedStylePropertyChange):
        (WebCore::SVGAttributeAnimator::removeAnimatedStyleProperty):
        (WebCore::SVGAttributeAnimator::applyAnimatedPropertyChange):

2021-05-06  Cameron McCormack  <heycam@apple.com>

        Split context state change item appending out of DisplayList::Recorder::canAppendItemOfType.
        https://bugs.webkit.org/show_bug.cgi?id=225424

        Reviewed by Simon Fraser.

        It's non-obvious from the name that canAppendItemOfType can also end
        up appending an item.  So let's split out the context state change
        item out into a separate function.

        * platform/graphics/displaylists/DisplayListRecorder.cpp:
        (WebCore::DisplayList::Recorder::canAppendItemOfType):
        (WebCore::DisplayList::Recorder::appendStateChangeItemIfNecessary):
        Added.
        * platform/graphics/displaylists/DisplayListRecorder.h:
        (WebCore::DisplayList::Recorder::append):
        (WebCore::DisplayList::Recorder::itemNeedsState): Added this as a
        constexpr helper function, to ensure we make a decision about needing
        to call appendStateChangeItemIfNecessary at compile time.

2021-05-06  Cameron McCormack  <heycam@apple.com>

        Make DisplayList::dump print out the display list contents
        https://bugs.webkit.org/show_bug.cgi?id=225431

        Reviewed by Simon Fraser.

        * platform/graphics/displaylists/DisplayList.cpp:
        (WebCore::DisplayList::DisplayList::description const):
        (WebCore::DisplayList::operator<<): This needs to move so that
        argument-dependent lookup for the operator<< call in description()
        works.
        * platform/graphics/displaylists/DisplayList.h:

2021-05-06  Tim Nguyen  <ntim@apple.com>

        [mediaqueries] Remove "on-demand" value for any-hover/hover & "forced" value for prefers-contrast
        https://bugs.webkit.org/show_bug.cgi?id=225400

        Reviewed by Antti Koivisto.

        These were both removed from the spec and currently never evaluate to true. They also won't eval to true after this change.
        Only change is serialization, since the values will become invalid.

        Also:
        - Re-synced css/mediaqueries WPTs
        - Adjusted any-hover/hover parsing tests accordingly.

        * css/CSSValueKeywords.in:
        * css/MediaQueryEvaluator.cpp:
        (WebCore::prefersContrastEvaluate):
        * css/MediaQueryExpression.cpp:
        (WebCore::isValidValueForIdentMediaFeature):

2021-05-05  Megan Gardner  <megan_gardner@apple.com>

        AppHighlight scrolls should be smooth
        https://bugs.webkit.org/show_bug.cgi?id=225395

        Reviewed by Simon Fraser.

        Leverage smooth scrolling experimental feature to allow AppHighlight scrolls
        to be smooth.

        * Modules/highlight/AppHighlightStorage.cpp:
        (WebCore::AppHighlightStorage::attemptToRestoreHighlightAndScroll):
        * editing/Editor.cpp:
        (WebCore::TemporarySelectionChange::setSelection):
        * editing/Editor.h:
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::setSelection):
        (WebCore::FrameSelection::updateAndRevealSelection):
        (WebCore::FrameSelection::revealSelection):
        * editing/FrameSelection.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::scrollTo const):
        * page/ScrollBehavior.cpp:
        (WebCore::useSmoothScrolling):
        * platform/ScrollTypes.h:

2021-05-05  Mark Lam  <mark.lam@apple.com>

        Introduce VM::hasPendingTerminationException() to make code a little more terse.
        https://bugs.webkit.org/show_bug.cgi?id=225412

        Reviewed by Michael Saboff.

        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::handleResponseOnStreamingAction):
        * bindings/js/JSDOMPromise.cpp:
        (WebCore::DOMPromise::whenPromiseIsSettled):
        * bindings/js/JSDOMPromiseDeferred.cpp:
        (WebCore::DeferredPromise::reject):
        * bindings/js/ReadableStream.cpp:
        (WebCore::invokeReadableStreamFunction):
        (WebCore::ReadableStream::lock):
        (WebCore::checkReadableStream):
        * bindings/js/ReadableStreamDefaultController.cpp:
        (WebCore::invokeReadableStreamDefaultControllerFunction):
        (WebCore::ReadableStreamDefaultController::error):
        (WebCore::ReadableStreamDefaultController::enqueue):

2021-05-05  Aditya Keerthi  <akeerthi@apple.com>

        [macOS] Use system colors for ActiveButtonText
        https://bugs.webkit.org/show_bug.cgi?id=225375
        <rdar://problem/75863443>

        Reviewed by Tim Horton.

        Currently, the ActiveButtonText color keyword returns a hardcoded value
        on macOS. This behavior is problematic since AppKit can make changes to
        the button style, leaving us with illegible text when a button is
        pressed.

        To fix, return a system color for ActiveButtonText, so that our pressed
        buttons are consistent with the rest of the system.

        * rendering/RenderThemeMac.mm:
        (WebCore::activeButtonTextColor):

        AppKit determines the pressed (active) text color using the cell's
        interiorBackgroundStyle. There is not a single system color exposed for
        the pressed text color, so it must be determined dynamically.

        Unfortunately, this requires us to create an NSButtonCell to determine
        the appropriate color. However, this logic is relatively inexpensive,
        since we cache exposed system colors.

        (WebCore::RenderThemeMac::systemColor const):

        Remove the hardcoded value.

2021-05-05  Cameron McCormack  <heycam@apple.com>

        Remove unused DisplayList::Recorder::ContextState::wasUsedForDrawing
        https://bugs.webkit.org/show_bug.cgi?id=225381

        Reviewed by Simon Fraser.

        * platform/graphics/displaylists/DisplayListRecorder.cpp:
        (WebCore::DisplayList::Recorder::canAppendItemOfType):
        (WebCore::DisplayList::Recorder::restore):
        * platform/graphics/displaylists/DisplayListRecorder.h:

2021-05-05  Cameron McCormack  <heycam@apple.com>

        Rename DisplayList::Recorder::appendDrawGraphsItemWithCachedFont.
        https://bugs.webkit.org/show_bug.cgi?id=225382

        Reviewed by Simon Fraser.

        It appends a DrawGlyphsItem, not a DrawGraphsItem.

        * platform/graphics/displaylists/DisplayListDrawGlyphsRecorderCoreText.cpp:
        (WebCore::DisplayList::DrawGlyphsRecorder::recordDrawGlyphs):
        (WebCore::DisplayList::DrawGlyphsRecorder::drawGlyphs):
        * platform/graphics/displaylists/DisplayListDrawGlyphsRecorderHarfBuzz.cpp:
        (WebCore::DisplayList::DrawGlyphsRecorder::drawGlyphs):
        * platform/graphics/displaylists/DisplayListDrawGlyphsRecorderWin.cpp:
        (WebCore::DisplayList::DrawGlyphsRecorder::drawGlyphs):
        * platform/graphics/displaylists/DisplayListRecorder.cpp:
        (WebCore::DisplayList::Recorder::appendDrawGlyphsItemWithCachedFont):
        * platform/graphics/displaylists/DisplayListRecorder.h:

2021-05-05  Cameron McCormack  <heycam@apple.com>

        Fix copy paste error in Recorder::canAppendItemOfType.
        https://bugs.webkit.org/show_bug.cgi?id=225380

        Reviewed by Simon Fraser.

        * platform/graphics/displaylists/DisplayListRecorder.cpp:
        (WebCore::DisplayList::Recorder::canAppendItemOfType):

2021-05-05  Devin Rousso  <drousso@apple.com>

        Sampled Page Top Color: tie into existing TCADA/RLTT systems so that the value is kept in sync with painting
        https://bugs.webkit.org/show_bug.cgi?id=225405

        Reviewed by Tim Horton.

        Instead of sending an IPC to the UIProcess whenever the logic to determine the sampled page
        top color finishes, wait to dispatch the IPC until we're about to render (just like theme
        color and page extended background color). On macOS, this means the IPC is dispatched inside
        `TiledCoreAnimationDrawingArea::updateRendering`. On iOS, the `Color` is included as part of
        the `RemoteLayerTreeTransaction`.

        * dom/Document.cpp:
        (WebCore::Document::determineSampledPageTopColor):

        * page/ChromeClient.h:
        (WebCore::ChromeClient::sampledPageTopColorChanged const): Renamed from `didSamplePageTopColor`.

2021-05-05  Devin Rousso  <drousso@apple.com>

        Sampled Page Top Color: don't snapshot if the hit test location is an image or has an animation
        https://bugs.webkit.org/show_bug.cgi?id=225338

        Reviewed by Tim Horton.

        Tests: SampledPageTopColor.HitTestHTMLImage
               SampledPageTopColor.HitTestCSSBackgroundImage
               SampledPageTopColor.HitTestCSSAnimation

        * dom/Document.h:
        * dom/Document.cpp:
        (WebCore::isValidPageSampleLocation): Added.
        (WebCore::samplePageColor): Added.
        (WebCore::Document::determineSampledPageTopColor):
        (WebCore::Document::isHitTestLocationThirdPartyFrame): Deleted.
        Refactor `isHitTestLocationThirdPartyFrame` (and the `pixelColor` lambda) into `static`
        functions that are right above `Document::determineSampledPageTopColor` for clarity and to
        allow for more flexibility. In order to check if the hit test node is an image (including
        having a CSS `background-image`) or has a CSS animation (or CSS transition), it's necessary
        to continue to hit test beyond one node as the image and/or node with the CSS animation may
        be an ancestor (or unrelated `position: absolute` node) to the `HitTestResult::innerNode`.
        ```
            <div style="background-image: url(...)">
                <button>Lorum ipsum ... </button>
            </div>
        ```

2021-05-05  Tim Nguyen  <ntim@apple.com>

        Invalid media query keyword values should not be parsable
        https://bugs.webkit.org/show_bug.cgi?id=225282

        Reviewed by Dean Jackson.

        Updated WPT expectations.

        * css/MediaQueryExpression.cpp:
        (WebCore::isValidValueForIdentMediaFeature):
        (WebCore::featureWithValidIdent):

2021-05-05  Alex Christensen  <achristensen@webkit.org>

        Add WebKitAdditions stubs for new NetworkLoadMetrics
        https://bugs.webkit.org/show_bug.cgi?id=225406
        <rdar://77563372>

        Reviewed by Jer Noble.

        I also removed some dead code and added static asserts that do what the dead code was intended to do.

        * platform/network/NetworkLoadMetrics.h:
        (WebCore::NetworkLoadMetrics::isolatedCopy const):
        (WebCore::NetworkLoadMetrics::operator== const):
        (WebCore::NetworkLoadMetrics::encode const):
        (WebCore::NetworkLoadMetrics::decode):
        (WTF::Persistence::Coder<Optional<WebCore::NetworkLoadPriority>>::encode): Deleted.
        (WTF::Persistence::Coder<Optional<WebCore::NetworkLoadPriority>>::decode): Deleted.
        * platform/network/cocoa/WebCoreNSURLSession.mm:

2021-05-05  Alicia Boya García  <aboya@igalia.com>

        [MSE][GStreamer] WebKitMediaSrc rework v2
        https://bugs.webkit.org/show_bug.cgi?id=225192

        Reviewed by Xabier Rodriguez-Calvar.

        This patch (re)introduces a new source element for the MSE playback
        pipeline. This is an iteration on the previous work on r249205 that
        had to be reverted in r251365 because of flaky playbin3 bugs.

        This new version avoids these pitfalls by avoiding flushes in
        situations where they are avoidable and known to expose bugs.

        This re-land shares many of the advantages that motivated the first
        patch: seeks massively oversimplified and greater control by no longer
        relying on appsrc. It can handle flushes of individual streams
        natively.

        Work has also gone into decoupling the state of the frame queue from
        the state of WebKitMediaSrc so that the backend can survive
        transitions from PAUSED to READY and back which
        MediaPlayerPrivateGStreamer creates when playback ends. This latter
        effort is not complete, and instead this version adds a special case
        to inhibit downwards and back upwards transitions, avoiding any
        issues.

        It is expected that at this point this new backend is at least as
        stable as the previous one. No LayoutTest has got worsened
        expectations from adding this backend and some have improved.

        * platform/GStreamer.cmake:
        * platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp:
        (webKitGLVideoSinkFinalize):
        (webKitGLVideoSinkSetMediaPlayerPrivate):
        * platform/graphics/gstreamer/GRefPtrGStreamer.cpp:
        (WTF::adoptGRef):
        (WTF::refGPtr<GstMiniObject>):
        (WTF::derefGPtr<GstMiniObject>):
        * platform/graphics/gstreamer/GRefPtrGStreamer.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::doSeek):
        (WebCore::MediaPlayerPrivateGStreamer::updateTracks):
        (WebCore::MediaPlayerPrivateGStreamer::handleStreamCollectionMessage):
        (WebCore::MediaPlayerPrivateGStreamer::handleMessage):
        (WebCore::MediaPlayerPrivateGStreamer::didEnd):
        (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        (WebCore::MediaPlayerPrivateGStreamer::invalidateCachedPosition):
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.h:
        (WebCore::TrackPrivateBaseGStreamer::setInitialCaps):
        (WebCore::TrackPrivateBaseGStreamer::initialCaps):
        * platform/graphics/gstreamer/mse/AppendPipeline.cpp:
        (WebCore::AppendPipeline::parseDemuxerSrcPadCaps):
        (WebCore::AppendPipeline::appsinkCapsChanged):
        (WebCore::AppendPipeline::connectDemuxerSrcPadToAppsinkFromStreamingThread):
        (WebCore::AppendPipeline::connectDemuxerSrcPadToAppsink):
        * platform/graphics/gstreamer/mse/AppendPipeline.h:
        (WebCore::AppendPipeline::demuxerSrcPadCaps):
        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:
        (WebCore::MediaPlayerPrivateGStreamerMSE::~MediaPlayerPrivateGStreamerMSE):
        (WebCore::MediaPlayerPrivateGStreamerMSE::load):
        (WebCore::MediaPlayerPrivateGStreamerMSE::play):
        (WebCore::MediaPlayerPrivateGStreamerMSE::pause):
        (WebCore::MediaPlayerPrivateGStreamerMSE::seek):
        (WebCore::MediaPlayerPrivateGStreamerMSE::doSeek):
        (WebCore::MediaPlayerPrivateGStreamerMSE::setReadyState):
        (WebCore::MediaPlayerPrivateGStreamerMSE::propagateReadyStateToPlayer):
        (WebCore::MediaPlayerPrivateGStreamerMSE::asyncStateChangeDone):
        (WebCore::MediaPlayerPrivateGStreamerMSE::sourceSetup):
        (WebCore::MediaPlayerPrivateGStreamerMSE::updateStates):
        (WebCore::MediaPlayerPrivateGStreamerMSE::unblockDurationChanges):
        (WebCore::MediaPlayerPrivateGStreamerMSE::durationChanged):
        (WebCore::MediaPlayerPrivateGStreamerMSE::trackDetected):
        (WebCore::MediaPlayerPrivateGStreamerMSE::startSource):
        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.h:
        (WebCore::MediaPlayerPrivateGStreamerMSE::hasAllTracks const):
        (WebCore::MediaPlayerPrivateGStreamerMSE::webKitMediaSrc):
        * platform/graphics/gstreamer/mse/MediaSourcePrivateGStreamer.cpp:
        (WebCore::MediaSourcePrivateGStreamer::addSourceBuffer):
        (WebCore::MediaSourcePrivateGStreamer::markEndOfStream):
        (WebCore::MediaSourcePrivateGStreamer::unmarkEndOfStream):
        (WebCore::MediaSourcePrivateGStreamer::waitForSeekCompleted):
        (WebCore::MediaSourcePrivateGStreamer::seekCompleted):
        (WebCore::MediaSourcePrivateGStreamer::startPlaybackIfHasAllTracks):
        * platform/graphics/gstreamer/mse/MediaSourcePrivateGStreamer.h:
        * platform/graphics/gstreamer/mse/MediaSourceTrackGStreamer.cpp: Added.
        (WebCore::MediaSourceTrackGStreamer::MediaSourceTrackGStreamer):
        (WebCore::MediaSourceTrackGStreamer::~MediaSourceTrackGStreamer):
        (WebCore::MediaSourceTrackGStreamer::create):
        (WebCore::MediaSourceTrackGStreamer::isReadyForMoreSamples):
        (WebCore::MediaSourceTrackGStreamer::notifyWhenReadyForMoreSamples):
        (WebCore::MediaSourceTrackGStreamer::enqueueObject):
        (WebCore::MediaSourceTrackGStreamer::clearQueue):
        (WebCore::MediaSourceTrackGStreamer::remove):
        * platform/graphics/gstreamer/mse/MediaSourceTrackGStreamer.h: Added.
        * platform/graphics/gstreamer/mse/PlaybackPipeline.h: Removed.
        * platform/graphics/gstreamer/mse/SourceBufferPrivateGStreamer.cpp:
        (WebCore::SourceBufferPrivateGStreamer::removedFromMediaSource):
        (WebCore::SourceBufferPrivateGStreamer::flush):
        (WebCore::SourceBufferPrivateGStreamer::enqueueSample):
        (WebCore::SourceBufferPrivateGStreamer::isReadyForMoreSamples):
        (WebCore::SourceBufferPrivateGStreamer::notifyClientWhenReadyForMoreSamples):
        (WebCore::SourceBufferPrivateGStreamer::allSamplesInTrackEnqueued):
        (WebCore::SourceBufferPrivateGStreamer::didReceiveInitializationSegment):
        * platform/graphics/gstreamer/mse/SourceBufferPrivateGStreamer.h:
        * platform/graphics/gstreamer/mse/TrackQueue.cpp: Added.
        (WebCore::TrackQueue::TrackQueue):
        (WebCore::TrackQueue::enqueueObject):
        (WebCore::TrackQueue::clear):
        (WebCore::TrackQueue::flush):
        (WebCore::TrackQueue::notifyWhenLowLevel):
        (WebCore::TrackQueue::pop):
        (WebCore::TrackQueue::notifyWhenNotEmpty):
        (WebCore::TrackQueue::resetNotEmptyHandler):
        (WebCore::TrackQueue::checkLowLevel):
        (WebCore::TrackQueue::durationEnqueued const):
        * platform/graphics/gstreamer/mse/TrackQueue.h: Added.
        (WebCore::TrackQueue::isFull const):
        (WebCore::TrackQueue::isEmpty const):
        (WebCore::TrackQueue::hasNotEmptyHandler const):
        * platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamer.cpp:
        (WebKitMediaSrcPrivate::streamByName):
        (WebKitMediaSrcPrivate::isStarted):
        (WTF::adoptGRef):
        (WTF::refGPtr<WebKitMediaSrcPad>):
        (WTF::derefGPtr<WebKitMediaSrcPad>):
        (webkit_media_src_pad_class_init):
        (Stream::Stream):
        (Stream::StreamingMembers::StreamingMembers):
        (findPipeline):
        (gstStreamType):
        (streamTypeToString):
        (webkit_media_src_class_init):
        (webkit_media_src_init):
        (webKitMediaSrcFinalize):
        (webKitMediaSrcEmitStreams):
        (webKitMediaSrcTearDownStream):
        (webKitMediaSrcActivateMode):
        (webKitMediaSrcPadLinked):
        (webKitMediaSrcLoop):
        (webKitMediaSrcStreamFlush):
        (webKitMediaSrcFlush):
        (webKitMediaSrcSeek):
        (countStreamsOfType):
        (webKitMediaSrcGetProperty):
        (webKitMediaSrcChangeState):
        (webKitMediaSrcSendEvent):
        (webKitMediaSrcUriGetType):
        (webKitMediaSrcGetProtocols):
        (webKitMediaSrcGetUri):
        (webKitMediaSrcSetUri):
        (webKitMediaSrcUriHandlerInit):
        * platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamer.h:
        * platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamerPrivate.h: Removed.

2021-05-05  Devin Rousso  <drousso@apple.com>

        Sampled Page Top Color: take additional snapshots further down the page to see if the sampled top color is more than just a tiny strip
        https://bugs.webkit.org/show_bug.cgi?id=225323

        Reviewed by Beth Dakin.

        Add a `SampledPageTopColorMinHeight` setting that controls how far down the sampled page top
        color needs to extend in order for us to not bail. If the value > 0, we take an additional
        snapshot at (0, SampledPageTopColorMinHeight) and (width, SampledPageTopColorMinHeight),
        comparing each to the snapshot directly above (e.g. (0, SampledPageTopColorMinHeight) is
        compared to (0, 0)) using the `SampledPageTopColorMaxDifference`. Depending on the value, if
        the color across the top of the page is only a small strip, these extra snapshot comparisons
        will prevent a resulting color from being derived.

        Tests: SampledPageTopColor.VerticalGradientBelowMaxDifference
               SampledPageTopColor.VerticalGradientAboveMaxDifference

        * dom/Document.cpp:
        (WebCore::Document::determineSampledPageTopColor):

2021-05-05  Youenn Fablet  <youenn@apple.com>

        No need to error a fetch body stream if its request or response is stopped
        https://bugs.webkit.org/show_bug.cgi?id=225347

        Reviewed by Geoffrey Garen.

        Test: http/wpt/fetch/fetch-response-body-stop-in-worker.html

        * Modules/fetch/FetchBodyOwner.cpp:
        (WebCore::FetchBodyOwner::stop):
        Nullify the source before we error it.

2021-05-05  Sam Weinig  <weinig@apple.com>

        Add preliminary support for specifying a color space for 2D canvas
        https://bugs.webkit.org/show_bug.cgi?id=225286

        Reviewed by Dean Jackson.

        Tests: fast/canvas/CanvasRenderingContext2DSettings-colorSpace-disabled.html
               fast/canvas/CanvasRenderingContext2DSettings-colorSpace-enabled.html
               fast/canvas/canvas-color-space-display-p3.html

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        Add new files.

        * html/canvas/CanvasRenderingContext2DSettings.idl:
        * html/canvas/CanvasRenderingContext2DSettings.h:
        Add a new setting blocked member to the CanvasRenderingContext2DSettings
        dictionary for specifying a color space. 

        * html/canvas/PredefinedColorSpace.cpp: Added.
        * html/canvas/PredefinedColorSpace.h: Added.
        * html/canvas/PredefinedColorSpace.idl: Added.
        Add a new IDL enumeration to represent the possible color spaces supported.
        For ports that don't support DisplayP3, trying to use it will result in 
        type error from JS.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::reset):
        Add checks for color space and pixel format to 2d context reset optimation.
        This can happen if the image buffer is allocated prior to the context being
        requested (such as via canvas.toDataURL() or canvas.toBlob()).

        (WebCore::HTMLCanvasElement::createImageBuffer const):
        Pass the correct color space and pixel format (though
        the later is always BGRA8 at the moment) to the ImageBuffer
        create function to make a backing store in the right format.

        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::createBufferForPainting const):
        * html/HTMLVideoElement.h:
        Pass color space and pixel format through to ensure the helper
        buffer matches the correct color space.

        * html/ImageBitmap.cpp:
        (WebCore::ImageBitmap::createPromise):
        Pass the existing defaults to HTMLVideoElement::createBufferForPainting.
        In the future, ImageBitmap will also gain color space and pixel
        format specificity and this will be updated.

        * html/canvas/CanvasRenderingContext.cpp:
        (WebCore::CanvasRenderingContext::pixelFormat const):
        (WebCore::CanvasRenderingContext::colorSpace const):
        * html/canvas/CanvasRenderingContext.h:
        Add virtual base implementations of colorSpace and pixelFormat
        which CanvasRenderingContext2D can override to return the
        values specified in the CanvasRenderingContext2DSettings.

        * html/canvas/CanvasRenderingContext2D.h:
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::fontProxy const):
        Fix incorrect formatting.

        (WebCore::CanvasRenderingContext2D::pixelFormat const):
        (WebCore::CanvasRenderingContext2D::colorSpace const):
        Add overrides, return m_settings.colorSpace for colorSpace.

        * html/canvas/CanvasRenderingContext2DBase.cpp:
        (WebCore::CanvasRenderingContext2DBase::drawImage):
        (WebCore::CanvasRenderingContext2DBase::createCompositingBuffer):
        (WebCore::CanvasRenderingContext2DBase::createPattern):
        (WebCore::CanvasRenderingContext2DBase::drawTextUnchecked):
        Pass along the colorSpace and pixelFormat when creating buffers.

        * html/shadow/DateTimeSymbolicFieldElement.cpp:
        Add missing includes that are now needed.

2021-05-05  Philippe Normand  <pnormand@igalia.com>

        [GStreamer][WebRTC] Wrap incoming audio buffers, complying with fastMalloc restrictions
        https://bugs.webkit.org/show_bug.cgi?id=225351

        Reviewed by Xabier Rodriguez-Calvar.

        The audio thread should avoid calling fastMalloc for performance reasons, so audio buffers
        are now wrapped in GStreamer buffers and passed as read-only memories to the observers.

        * platform/mediastream/gstreamer/RealtimeIncomingAudioSourceLibWebRTC.cpp:
        (WebCore::RealtimeIncomingAudioSourceLibWebRTC::OnData):

2021-05-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Wrong cookie timestamp in case of long expire time
        https://bugs.webkit.org/show_bug.cgi?id=225389

        Reviewed by Adrian Perez de Castro.

        There's an overflow when converting the dates in both libsoup2 and libsoup3, but for two different reasons. In
        the case of libsoup2 we are using an int for the conversion of milliseconds to seconds which is not enough. In
        the case of libsoup3 we are passing the value in milliseconds to g_date_time_new_from_unix_utc() that expects
        seconds.

        * platform/network/soup/CookieSoup.cpp:
        (WebCore::msToSoupDate): Use int64_t instead of int for the cast.
        (WebCore::Cookie::toSoupCookie const): Convert the value to seconds.

2021-05-05  Ryosuke Niwa  <rniwa@webkit.org>

        Use WeakHashSet instead of HashSet of raw pointes in Document and SVGDocumentExtensions
        https://bugs.webkit.org/show_bug.cgi?id=225390

        Reviewed by Antti Koivisto.

        Replaced Document's m_documentSuspensionCallbackElements and m_articleElements as well as
        SVGDocumentExtensions's m_timeContainers and m_svgFontFaceElements with WeakHashSet.

        Also moved m_svgUseElements from Document to SVGDocumentExtensions as a WeakHashSet.

        This patch also deletes Document::m_mediaStreamStateChangeElements which was never used,
        m_mainArticleElement a WeakPtr instead of a raw pointer, replaces SVGDocumentExtensions's
        m_rebuildElements, which is a temporary Vector used during tree mutations, with a Vector
        of Refs instead of raw pointers.

        No new tests since there should be no observable behavior differences.

        * dom/Document.cpp:
        (WebCore::Document::~Document): The release assert is moved to ~SVGDocumentExtensions.
        (WebCore::Document::resolveStyle):
        (WebCore::Document::suspend):
        (WebCore::Document::resume):
        (WebCore::Document::registerForDocumentSuspensionCallbacks):
        (WebCore::Document::unregisterForDocumentSuspensionCallbacks):
        (WebCore::Document::addSVGUseElement): Moved to SVGDocumentExtensions.
        (WebCore::Document::removeSVGUseElement): Ditto.
        (WebCore::Document::registerArticleElement):
        (WebCore::Document::unregisterArticleElement):
        (WebCore::Document::updateMainArticleElementAfterLayout):
        (WebCore::Document::prepareCanvasesForDisplayIfNeeded):
        (WebCore::Document::clearCanvasPreparation):
        (WebCore::Document::canvasChanged):
        (WebCore::Document::canvasDestroyed):
        * dom/Document.h:
        (WebCore::Document:: const const): Deleted.
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::~HTMLCanvasElement):
        (WebCore::HTMLCanvasElement::didMoveToNewDocument):
        (WebCore::HTMLCanvasElement::removedFromAncestor):
        * style/StyleResolver.cpp:
        (WebCore::Style::Resolver::addCurrentSVGFontFaceRules):
        * svg/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::~SVGDocumentExtensions): Moved the release assertion
        from ~Document.
        (WebCore::SVGDocumentExtensions::addTimeContainer):
        (WebCore::SVGDocumentExtensions::removeTimeContainer):
        (WebCore::SVGDocumentExtensions::addUseElementWithPendingShadowTreeUpdate): Moved here
        Document::addSVGUseElement.
        (WebCore::SVGDocumentExtensions::removeUseElementWithPendingShadowTreeUpdate): Ditto.
        (WebCore::SVGDocumentExtensions::startAnimations):
        (WebCore::SVGDocumentExtensions::pauseAnimations):
        (WebCore::SVGDocumentExtensions::unpauseAnimations):
        (WebCore::SVGDocumentExtensions::dispatchLoadEventToOutermostSVGElements):
        (WebCore::SVGDocumentExtensions::rebuildElements):
        (WebCore::SVGDocumentExtensions::clearTargetDependencies):
        (WebCore::SVGDocumentExtensions::removeAllElementReferencesForTarget):
        (WebCore::SVGDocumentExtensions::registerSVGFontFaceElement):
        (WebCore::SVGDocumentExtensions::unregisterSVGFontFaceElement):
        * svg/SVGDocumentExtensions.h:
        (WebCore::SVGDocumentExtensions::useElementsWithPendingShadowTreeUpdate const): Added.
        (WebCore::SVGDocumentExtensions::svgFontFaceElements const):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::insertedIntoAncestor):
        (WebCore::SVGUseElement::removedFromAncestor):
        (WebCore::SVGUseElement::updateShadowTree):
        (WebCore::SVGUseElement::invalidateShadowTree):

2021-05-05  Chris Lord  <clord@igalia.com>

        OffscreenCanvas should preserve context transform after transferToImageBitmap
        https://bugs.webkit.org/show_bug.cgi?id=225304

        Reviewed by Darin Adler.

        transferToImageBitmap should not affect the state of the canvas
        context. Instead of returning the actual canvas buffer, to which the
        drawing context is tightly bound, return a copy and clear the
        original.

        No new tests, rebaselined existing tests.

        * html/OffscreenCanvas.cpp:
        (WebCore::OffscreenCanvas::transferToImageBitmap):
        (WebCore::OffscreenCanvas::takeImageBuffer const):
        * html/canvas/CanvasRenderingContext2DBase.h:

2021-05-04  Peng Liu  <peng.liu6@apple.com>

        [GPUP] Implement SourceBufferPrivateRemote::bufferFull()
        https://bugs.webkit.org/show_bug.cgi?id=224139

        Reviewed by Jer Noble.

        * platform/graphics/SourceBufferPrivate.h:
        (WebCore::SourceBufferPrivate::setBufferFull): This function will be used
        by `SourceBufferPrivateRemote::evictCodedFrames()` and `SourceBufferPrivateRemote::reenqueueMediaIfNeeded()`.

2021-05-04  Antti Koivisto  <antti@apple.com>

        REGRESSION(iOS 14): Author shadow DOM invalidated unnecessarily on pseudo element change
        https://bugs.webkit.org/show_bug.cgi?id=222187
        <rdar://problem/74801314>

        Reviewed by Ryosuke Niwa.
        
        Hovering the element causes us to invalidate the entire author shadow tree style.

        The invalidation is triggered by the user agent stylesheet having some :hover rules targeting pseudo
        elements. This should not require invalidation except for those specific elements and only for
        UA shadow trees.
        
        This patch optimizes the case and avoids unnecessary invalidations.

        Test: fast/shadow-dom/shadow-style-invalidation-pseudo-element.html
        
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::handleFocusEvent):
        (WebCore::HTMLInputElement::handleBlurEvent):
        (WebCore::HTMLInputElement::invalidateStyleOnFocusChangeIfNeeded):
        
        Input elements with 'text-overflow:ellipsis' (which is affected by focus) were relying
        on spurious invalidations that we now optimize away. Invalidate properly.
        
        * html/HTMLInputElement.h:
        * style/ElementRuleCollector.cpp:
        (WebCore::Style::ElementRuleCollector::collectMatchingShadowPseudoElementRules):
        * style/RuleSet.cpp:
        (WebCore::Style::RuleSet::evaluateDynamicMediaQueryRules):
        (WebCore::Style::RuleSet::hasShadowPseudoElementRules const): Deleted.
        
        Handle ::cue separately.
        
        * style/RuleSet.h:
        (WebCore::Style::RuleSet::cuePseudoRules const):
        (WebCore::Style::RuleSet::hasShadowPseudoElementRules const):
        * style/StyleInvalidationFunctions.h:
        (WebCore::Style::traverseRuleFeatures):
        * style/StyleInvalidator.cpp:
        (WebCore::Style::Invalidator::collectRuleInformation):
        (WebCore::Style::Invalidator::invalidateShadowPseudoElements):
        
        Narrowly invalidate user agent shadow tree pseudo elements.
        
        (WebCore::Style::Invalidator::invalidateInShadowTreeIfNeeded):
        * style/StyleInvalidator.h:

2021-05-04  Kenneth Russell  <kbr@chromium.org>

        WebKit must treat 'webgl' and 'webgl2' as distinct context types
        https://bugs.webkit.org/show_bug.cgi?id=222758

        Reviewed by Dean Jackson.

        Update both the regular getContext and CSS context code paths with
        checks distinguishing WebGL 1.0 and 2.0 contexts.

        Covered by existing WebGL 2.0 conformance tests.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext):
        (WebCore::HTMLCanvasElement::getContextWebGL):

2021-05-04  Jer Noble  <jer.noble@apple.com>

        [Media in GPU Process] Move AudioSessionRoutingArbitratorProxy to the GPU process
        https://bugs.webkit.org/show_bug.cgi?id=217535
        <rdar://problem/70152548>

        Reviewed by Eric Carlson.

        Add a new shared object, SharedRoutingArbitrator, to be used both in the UIProcess (when media
        in the GPU process is not enabled) and the GPUProcess (when it is).

        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/audio/AudioSession.h:
        * platform/audio/mac/SharedRoutingArbitrator.h: Added.
        * platform/audio/mac/SharedRoutingArbitrator.mm: Added.
        (WebCore::SharedRoutingArbitrator::Token::create):
        (WebCore::SharedRoutingArbitrator::sharedInstance):
        (WebCore::SharedRoutingArbitrator::isInRoutingArbitrationForToken):
        (WebCore::SharedRoutingArbitrator::beginRoutingArbitrationForToken):
        (WebCore::SharedRoutingArbitrator::endRoutingArbitrationForToken):

2021-05-04  Chris Dumez  <cdumez@apple.com>

        Blob contentType with charset renders html as plain text
        https://bugs.webkit.org/show_bug.cgi?id=225226

        Reviewed by Alex Christensen.

        Our code would use the Blob's Content-Type (media type) as a MIME type internally. As a result, if the Blob's
        media type would contain anything besides the MIME type (e.g. a charget), then it would lead to failures.

        Test: fast/files/blob-with-charget-as-main-resource.html

        * platform/network/BlobResourceHandle.cpp:
        (WebCore::BlobResourceHandle::notifyResponseOnSuccess):
        * platform/network/HTTPParsers.h:

2021-05-04  Cameron McCormack  <heycam@apple.com>

        Handle clamping of heights for images affected by background-size and EXIF orientation correctly
        https://bugs.webkit.org/show_bug.cgi?id=221005
        <rdar://problem/73692426>

        Reviewed by Simon Fraser.

        GraphicsContext::drawPlatformImage handles requests with source rects
        whose heights are greater than the image (which can happen due to
        rounding issues) by clamping the source rect.  This clamping incorrectly
        looks at the CGImage's height, which for an image rotated 90deg due to
        EXIF orientation metadata, is the wrong dimension.

        Test: fast/images/image-orientation-background-size-bug.html

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawPlatformImage):

2021-05-04  Jer Noble  <jer.noble@apple.com>

        [Cocoa] Cache the value of MediaPlayerPrivateAVFoundationObjC::assetStatus()
        https://bugs.webkit.org/show_bug.cgi?id=225262

        Reviewed by Eric Carlson.

        Calling into assetStatus() requires querying the load state and value of nine different
        AVAsset properties, which adds up if assetStatus() is called often. Once the assetStatus()
        value reaches the Loaded state, cache that property, and that of the AVAsset.playable
        property, so subsequent queries are just an ivar lookup.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::assetStatus const):

2021-05-04  Jer Noble  <jer.noble@apple.com>

        REGRESSION (r276883): [Debug] ASSERTION FAILED: index != notFound in WebCore::PlatformMediaSessionManager::setCurrentSession()
        https://bugs.webkit.org/show_bug.cgi?id=225332
        <rdar://problem/77476145>

        Reviewed by Eric Carlson.

        PlatformMediaSessionManager will throw an assert if the session being set as "current" via
        sessionWillBeginPlayback() isn't active; we activate the session immediately after this line
        inside lazyInitialize(), but this looks to be too late. A similar problem may occur in
        HTMLMediaElement::playInternal(), so activate the session there too.

        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::lazyInitialize):
        (WebCore::AudioContext::willBeginPlayback):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::playInternal):

2021-05-04  Sergio Villar Senin  <svillar@igalia.com>

        ASSERTION FAILED: contentSize >= 0 in WebCore::RenderFlexibleBox::adjustChildSizeForMinAndMax
        https://bugs.webkit.org/show_bug.cgi?id=222711
        <rdar://problem/75022692>

        Reviewed by Alan Bujtas.

        Flexbox code was computing negative content sizes for FrameSet children because RenderFrameSet lacked
        a implementation of computePreferredLogicalWidths(). Added basic preferred width computation
        to RenderBox so that FrameSet and any other potential new RenderBox child could benefit from it.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computePreferredLogicalWidths): Added a basic implementation that calls
        computePreferredLogicalWidths(minWidth,maxWidth,borderAndPadding) and clears the flag.
        * rendering/RenderBox.h:
        (WebCore::RenderBox::computePreferredLogicalWidths): Deleted default implementation.

2021-05-04  Antoine Quint  <graouts@webkit.org>

        REGRESSION (r260360): animation-wide timing function does not apply to 2-keyframe transform Web Animation
        https://bugs.webkit.org/show_bug.cgi?id=225301
        <rdar://problem/77452933>

        Reviewed by Dean Jackson.

        Core Animation has a limitation where an animation-wide cubic timing function with y values outside of the [0-1]
        range are not applied correctly since those values are clipped. This is not the case with similar timing functions
        applied to a keyframe interval. This is known issue covered by bug 215918.

        We worked around this limitation for CSS Transitions in bug 215826. Indeed, in this case we know that the animation
        has a single interval and no keyframe-specific timing function, so GraphicsLayerCA would check whether the Animation
        object originated from a CSS Transition and set the animation-wide timing function on the generated AnimationValue. 
        
        With this patch we generalize this approach to any animation, no matter its origin, that has a single keyframe
        interval with no timing function or a timing function that has a linear effect. To do this, we first check in
        GraphicsLayerCA::addAnimation*() whether we are dealing with an animation that has an animation-wide cubic timing
        function outside of the [0-1] range. If that is not the case, we return early and indicate that this animation
        cannot be run accelerated.

        If instead that is the case, we pass a new boolean flag down through the call stack to setupAnimation() and
        timingFunctionForAnimationValue() where we choose to use the animation-wide timing function on the first keyframe
        rather than the animation itself.

        Test: webanimations/accelerated-web-animation-with-single-interval-and-easing-y-axis-above-1.html

        * animation/KeyframeEffect.cpp:
        (WebCore::KeyframeEffect::backingAnimationForCompositedRenderer const):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::timingFunctionIsCubicTimingFunctionWithYValueOutOfRange):
        (WebCore::keyframeValueListHasSingleIntervalWithLinearOrEquivalentTimingFunction):
        (WebCore::GraphicsLayerCA::addAnimation):
        (WebCore::GraphicsLayerCA::createAnimationFromKeyframes):
        (WebCore::GraphicsLayerCA::appendToUncommittedAnimations):
        (WebCore::GraphicsLayerCA::createTransformAnimationsFromKeyframes):
        (WebCore::GraphicsLayerCA::createFilterAnimationsFromKeyframes):
        (WebCore::GraphicsLayerCA::createBasicAnimation):
        (WebCore::GraphicsLayerCA::createKeyframeAnimation):
        (WebCore::GraphicsLayerCA::createSpringAnimation):
        (WebCore::GraphicsLayerCA::setupAnimation):
        (WebCore::GraphicsLayerCA::timingFunctionForAnimationValue):
        (WebCore::GraphicsLayerCA::setAnimationKeyframes):
        (WebCore::GraphicsLayerCA::setTransformAnimationKeyframes):
        (WebCore::GraphicsLayerCA::setFilterAnimationKeyframes):
        * platform/graphics/ca/GraphicsLayerCA.h:

2021-05-04  Dean Jackson  <dino@apple.com>

        [WebXR] Move WebXROpaqueFramebuffer to its own file
        https://bugs.webkit.org/show_bug.cgi?id=225334

        Reviewed by Sam Weinig.

        Move WebXROpaqueFramebuffer out of WebXRWebGLLayer.

        * Modules/webxr/WebXROpaqueFramebuffer.cpp: Copied from Source/WebCore/Modules/webxr/WebXRWebGLLayer.cpp.
        (WebCore::WebXROpaqueFramebuffer::create):
        (WebCore::WebXROpaqueFramebuffer::WebXROpaqueFramebuffer):
        (WebCore::WebXROpaqueFramebuffer::~WebXROpaqueFramebuffer):
        (WebCore::WebXROpaqueFramebuffer::startFrame):
        (WebCore::WebXROpaqueFramebuffer::endFrame):
        (WebCore::WebXROpaqueFramebuffer::setupFramebuffer):
        * Modules/webxr/WebXROpaqueFramebuffer.h: Copied from Source/WebCore/Modules/webxr/WebXRWebGLLayer.h.
        (WebCore::WebXROpaqueFramebuffer::handle const):
        (WebCore::WebXROpaqueFramebuffer::framebuffer const):
        (WebCore::WebXROpaqueFramebuffer::width const):
        (WebCore::WebXROpaqueFramebuffer::height const):
        * Modules/webxr/WebXRWebGLLayer.cpp:
        (WebCore::WebXROpaqueFramebuffer::create): Deleted.
        (WebCore::WebXROpaqueFramebuffer::WebXROpaqueFramebuffer): Deleted.
        (WebCore::WebXROpaqueFramebuffer::~WebXROpaqueFramebuffer): Deleted.
        (WebCore::WebXROpaqueFramebuffer::startFrame): Deleted.
        (WebCore::WebXROpaqueFramebuffer::endFrame): Deleted.
        (WebCore::WebXROpaqueFramebuffer::setupFramebuffer): Deleted.
        * Modules/webxr/WebXRWebGLLayer.h:
        (WebCore::WebXROpaqueFramebuffer::handle const): Deleted.
        (WebCore::WebXROpaqueFramebuffer::framebuffer const): Deleted.
        (WebCore::WebXROpaqueFramebuffer::width const): Deleted.
        (WebCore::WebXROpaqueFramebuffer::height const): Deleted.
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

2021-05-04  Dean Jackson  <dino@apple.com>

        [WebXR] Remove renamed IDL files in Xcode project
        https://bugs.webkit.org/show_bug.cgi?id=225331

        Reviewed by Sam Weinig.

        The Xcode project had a bunch of references to files that were
        renamed a while ago.

        * WebCore.xcodeproj/project.pbxproj:

2021-05-04  Philippe Normand  <pnormand@igalia.com>

        [WebRTC][GStreamer] fast/mediastream/resize-trim.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=192888

        Reviewed by Xabier Rodriguez-Calvar.

        The test was failing because the GStreamer mock video source was producing garbled frames
        and the pixel test in the canvas was failing to detect gray. The frame was garbled because
        the test asked "exact" video width that was inferior to the capture video width and we were
        not taking this into account when creating a MediaSample from the video frame.

        MediaSampleGStreamer::createImageSample() can now optionally resize the video frame
        according to the destinationSize, if it was specified.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::toMediaSample):
        * platform/graphics/gstreamer/MediaSampleGStreamer.cpp:
        (WebCore::MediaSampleGStreamer::createImageSample):
        * platform/graphics/gstreamer/MediaSampleGStreamer.h:
        (WebCore::MediaSampleGStreamer::createImageSample):
        * platform/mediastream/gstreamer/MockRealtimeVideoSourceGStreamer.cpp:
        (WebCore::MockRealtimeVideoSourceGStreamer::updateSampleBuffer):
        * platform/mock/MockRealtimeVideoSource.h:

2021-05-04  Youenn Fablet  <youenn@apple.com>

        Use OptionSet for MediaProducer::MediaStateFlags
        https://bugs.webkit.org/show_bug.cgi?id=225227

        Reviewed by Eric Carlson.

        Update code to use a safer MediaProducer::MediaStateFlags type.

        No change of behavior, this is a refactoring.

        * Modules/airplay/WebMediaSessionManager.cpp:
        (WebCore::flagsAreSet):
        (WebCore::mediaProducerStateString):
        (WebCore::WebMediaSessionManager::showPlaybackTargetPicker):
        (WebCore::WebMediaSessionManager::clientStateDidChange):
        (WebCore::WebMediaSessionManager::configurePlaybackTargetClients):
        (WebCore::WebMediaSessionManager::configurePlaybackTargetMonitoring):
        (WebCore::WebMediaSessionManager::configureWatchdogTimer):
        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::mediaState const):
        * Modules/mediastream/MediaStream.h:
        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::sourceCaptureState):
        (WebCore::MediaStreamTrack::captureState):
        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::mediaState const):
        (WebCore::AudioContext::visibilityStateChanged):
        * dom/Document.cpp:
        (WebCore::Document::willBeRemovedFromFrame):
        (WebCore::Document::updateIsPlayingMedia):
        * dom/Document.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::shouldOverrideBackgroundPlaybackRestriction const):
        (WebCore::HTMLMediaElement::mediaState const):
        * html/HTMLMediaElement.h:
        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::playbackStateChangePermitted const):
        * page/MediaProducer.h:
        (WebCore::MediaProducer::isCapturing):
        * page/Page.cpp:
        (WebCore::Page::updateIsPlayingMedia):
        * page/Page.h:
        * testing/Internals.cpp:
        (WebCore::Internals::pageMediaState):

2021-05-04  Diego Pino Garcia  <dpino@igalia.com>

        Unreviewed, fix GTK and WPE builds after r276947

        * Headers.cmake: Add missing header 'Modules/highlight/HighlightVisibility.h'. 

2021-05-04  Philippe Normand  <pnormand@igalia.com>

        [GStreamer][Debug] Allow fastMallocs in audio threads
        https://bugs.webkit.org/show_bug.cgi?id=225306

        Reviewed by Adrian Perez de Castro.

        For the time being the GStreamer ports need to allocate audio buffers for WebRTC. This
        deserves deeper investigation to avoid the allocations but for now the bots need to be fixed
        ASAP.

        * platform/mediastream/gstreamer/RealtimeIncomingAudioSourceLibWebRTC.cpp:
        (WebCore::RealtimeIncomingAudioSourceLibWebRTC::OnData):
        * platform/mediastream/libwebrtc/LibWebRTCAudioModule.cpp:
        (WebCore::LibWebRTCAudioModule::pollAudioData):

2021-05-03  Frédéric Wang  <fwang@igalia.com>

        ASSERTION FAILED: !m_needExceptionCheck while converting IDLSequence<T>
        https://bugs.webkit.org/show_bug.cgi?id=223789

        Reviewed by Mark Lam.

        Add RETURN_IF_EXCEPTION after various toJS<T> calls since they can throw exception
        for some types T.

        * bindings/js/JSDOMConvertSequences.h:
        (WebCore::JSConverter<IDLSequence<T>>::convert): Add RETURN_IF_EXCEPTION before appending
        the result of toJS<T>.
        (WebCore::JSConverter<IDLFrozenArray<T>>::convert): Ditto.
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateDictionaryImplementationContent): Add a throw scope and add RETURN_IF_EXCEPTION
        before setting a dictionary value. Change the potentially unused variable.
        (GenerateDefaultToJSONOperationDefinition): Add a RETURN_IF_EXCEPTION before setting a
        value of the JSON object.
        (NativeToJSValueMayThrow): Add "IDLDictionaryMember" as a possible context for which
        exception may be thrown.
        * bindings/scripts/test/JS/JSExposedToWorkerAndWindow.cpp:
        (WebCore::convertDictionaryToJS): Update expectation.
        * bindings/scripts/test/JS/JSTestDefaultToJSON.cpp:
        (WebCore::jsTestDefaultToJSONPrototypeFunction_toJSONBody): Ditto.
        * bindings/scripts/test/JS/JSTestDefaultToJSONFilteredByExposed.cpp:
        (WebCore::jsTestDefaultToJSONFilteredByExposedPrototypeFunction_toJSONBody): Ditto.
        * bindings/scripts/test/JS/JSTestDefaultToJSONInherit.cpp:
        (WebCore::jsTestDefaultToJSONInheritPrototypeFunction_toJSONBody): Ditto.
        * bindings/scripts/test/JS/JSTestDefaultToJSONInheritFinal.cpp:
        (WebCore::jsTestDefaultToJSONInheritFinalPrototypeFunction_toJSONBody): Ditto.
        * bindings/scripts/test/JS/JSTestDerivedDictionary.cpp:
        (WebCore::convertDictionaryToJS): Ditto.
        * bindings/scripts/test/JS/JSTestDerivedDictionary2.cpp:
        (WebCore::convertDictionaryToJS): Ditto.
        * bindings/scripts/test/JS/JSTestDictionaryWithOnlyConditionalMembers.cpp:
        (WebCore::convertDictionaryToJS): Ditto.
        * bindings/scripts/test/JS/JSTestEmptyDictionary.cpp:
        (WebCore::convertDictionaryToJS): Ditto.
        * bindings/scripts/test/JS/JSTestInheritedDictionary.cpp:
        (WebCore::convertDictionaryToJS): Ditto.
        * bindings/scripts/test/JS/JSTestInheritedDictionary2.cpp:
        (WebCore::convertDictionaryToJS): Ditto.
        * bindings/scripts/test/JS/JSTestNode.cpp:
        (WebCore::jsTestNodePrototypeFunction_toJSONBody): Ditto.
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::convertDictionaryToJS): Ditto.
        * bindings/scripts/test/JS/JSTestStandaloneDictionary.cpp:
        (WebCore::convertDictionaryToJS): Ditto.

2021-05-03  Megan Gardner  <megan_gardner@apple.com>

        Allow AppHighlight visibility to be toggled
        https://bugs.webkit.org/show_bug.cgi?id=225276

        Reviewed by Wenson Hsieh.

        Add supporting infrastructure to allow highlights to be turned on and off. 
        This is done with a simple state and a forced repaint on the areas that have highlights.

        * Modules/highlight/Highlight.cpp:
        (WebCore::Highlight::forceRepaint):
        * Modules/highlight/Highlight.h:
        * Modules/highlight/HighlightRegister.cpp:
        (WebCore::HighlightRegister::setActive):
        * Modules/highlight/HighlightRegister.h:
        (WebCore::HighlightRegister::isActive):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::collectMarkedTextsForHighlights const):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::calculateHighlightColor const):

2021-05-03  Peng Liu  <peng.liu6@apple.com>

        Remove the quirk to disable "return to element fullscreen from picture-in-picture" for wowhead.com
        https://bugs.webkit.org/show_bug.cgi?id=225322

        Reviewed by Sam Weinig.

        The quirk can be removed since wowhead.com has fixed the issue on the page.

        Manually tested.

        * page/Quirks.cpp:
        (WebCore::Quirks::blocksReturnToFullscreenFromPictureInPictureQuirk const):

2021-05-03  Peng Liu  <peng.liu6@apple.com>

        Small cleanups in MediaPlayerPrivateMediaSourceAVFObjC and MediaPlayerPrivateAVFoundationObjC
        https://bugs.webkit.org/show_bug.cgi?id=225330

        Reviewed by Eric Carlson.

        Since we have removed `MediaPlayerPrivate::copyVideoTextureToPlatformTexture()` in r273213,
        some headers in `MediaPlayerPrivateAVFoundationObjC` and `MediaPlayerPrivateMediaSourceAVFObjC`
        can be removed as well. This patch also has some small cleanups.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        * platform/graphics/cocoa/WebCoreDecompressionSession.h:

2021-05-03  Julian Gonzalez  <julian_a_gonzalez@apple.com>

        Crash in WebCore::nextBoundary()
        https://bugs.webkit.org/show_bug.cgi?id=225326

        Reviewed by Ryosuke Niwa.

        nextBoundary() creates a CharacterIterator and calls range() on it
        without first checking if atEnd() has been reached, which can lead
        to a null pointer dereference.

        * editing/VisibleUnits.cpp:
        (WebCore::nextBoundary):

2021-05-03  Alex Christensen  <achristensen@webkit.org>

        WKWebView: WKURLSchemeHandler request don't have Range headers for custom scheme videos
        https://bugs.webkit.org/show_bug.cgi?id=203302
        <rdar://63750321>

        Reviewed by Jer Noble and Geoff Garen.

        * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.mm:
        (WebCore::WebCoreAVFResourceLoader::startLoading):

2021-05-03  Aditya Keerthi  <akeerthi@apple.com>

        [iOS][FCR] Missing fill color on slider ticks
        https://bugs.webkit.org/show_bug.cgi?id=225318
        <rdar://problem/77100313>

        Reviewed by Wenson Hsieh.

        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::paintSliderTicks):

        Slider ticks should fill in blue as the knob passes them.

2021-05-03  Sihui Liu  <sihui_liu@apple.com>

        Unreviewed, reverting r276913.

        Commit can cause double release

        Reverted changeset:

        "Transfer ownership to ARC in
        speechSynthesisGetDefaultVoiceIdentifierForLocale"
        https://bugs.webkit.org/show_bug.cgi?id=225312
        https://commits.webkit.org/r276913

2021-05-03  Devin Rousso  <drousso@apple.com>

        [macCatalyst] "Enter Full Screen" button in media controls disappears
        https://bugs.webkit.org/show_bug.cgi?id=225210
        <rdar://problem/77010150>

        Reviewed by Eric Carlson.

        In order for the "Enter Full Screen" media controls button to stay visible the `<video>`
        must return `true` for `HTMLMediaElement::webkitSupportsFullscreen`, which calls into
       `MediaPlayerPrivate::supportsFullscreen`. On macOS and iOS, this will always return `true`
        because of `ENABLE(FULLSCREEN_API)`, but on macCatalyst that's not enabled, so we instead
        use `DeprecatedGlobalSettings::avKitEnabled`, but this is only set in the WebProcess (and
        WK1). With the GPUProcess enabled, this value is not set, so the `RemoteMediaPlayerProxy`
        will instead get `false`.

        This patch removes `DeprecatedGlobalSettings::avKitEnabled` since it's enabled on WK1 and
        non-GPUProcess WK2, and the related iOS-only SPI appears to not be used anywhere internally,
        instead having callsites just check `HAVE(AVKIT)`.

        * page/DeprecatedGlobalSettings.h:
        (WebCore::DeprecatedGlobalSettings::setAVKitEnabled): Deleted.
        (WebCore::DeprecatedGlobalSettings::avKitEnabled): Deleted.
        * page/DeprecatedGlobalSettings.cpp:

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::supportsFullscreen const):

2021-05-03  Philippe Normand  <pnormand@igalia.com>

        [GTK] Build with VIDEO=OFF fails
        https://bugs.webkit.org/show_bug.cgi?id=225316

        Reviewed by Adrian Perez de Castro.

        * platform/audio/PlatformMediaSession.cpp:
        (WebCore::isPlayingAudio): Guard against invalid media types, when video is disabled we can
        safely return false here as well.
        * platform/graphics/opengl/GraphicsContextGLOpenGL.h: Include what we use (UniqueRef).

2021-05-03  Sihui Liu  <sihui_liu@apple.com>

        Transfer ownership to ARC in speechSynthesisGetDefaultVoiceIdentifierForLocale
        https://bugs.webkit.org/show_bug.cgi?id=225312
        <rdar://problem/77458746>

        Reviewed by Chris Fleizach.

        To fix memory leak of defaultVoiceURI.

        * platform/mac/PlatformSpeechSynthesizerMac.mm:
        (WebCore::speechSynthesisGetDefaultVoiceIdentifierForLocale):

2021-05-03  Tim Nguyen  <ntim@apple.com>

        Remove "no-preference" value for prefers-color-scheme media query
        https://bugs.webkit.org/show_bug.cgi?id=212952

        Reviewed by Antti Koivisto.

        WPT parsing tests still fail due to: https://bugs.webkit.org/show_bug.cgi?id=225282
        Updated evaluation tests to use `not (prefers-color-scheme)` instead.

        * css/MediaQueryEvaluator.cpp:
        (WebCore::prefersColorSchemeEvaluate):

2021-05-03  Antti Koivisto  <antti@apple.com>

        Move Style::ScopeOrdinal to a header of its own
        https://bugs.webkit.org/show_bug.cgi?id=225302

        Reviewed by Alan Bujtas.

        Se we don't need to include StyleScope.h everywhere via Animation.h.

        * WebCore.xcodeproj/project.pbxproj:
        * animation/KeyframeEffect.cpp:
        * css/DOMCSSRegisterCustomProperty.cpp:
        * platform/animation/Animation.h:
        * style/ElementRuleCollector.h:
        * style/StyleScope.h:
        (WebCore::Style::operator++): Deleted.
        * style/StyleScopeOrdinal.h: Added.
        (WebCore::Style::operator++):

2021-05-03  Zalan Bujtas  <zalan@apple.com>

        [Multi-column] Remove spanner placeholder when the spanner becomes nested
        https://bugs.webkit.org/show_bug.cgi?id=225248
        <rdar://77326189>

        Reviewed by Antti Koivisto.

        Columns spanners (and their subtrees) are moved out of the RenderMultiColumnFlow subtree next to their RenderMultiColumnSet renderers.
        Placeholder renderers are inserted at the original position e.g.

        <div id=A style="column-count: 2;"><div id=B><div id=C style="column-span: all;"></div></div></div>

        RenderBlockFlow (A) (<div column-count: 2>)
          RenderMultiColumnFlow
            RenderBlockFlow (B) (<div>)
              RenderBlockFlow (C) (<div>)
                RenderMultiColumnSpannerPlaceholder (placeholder for D)
          RenderBlockFlow (D) (<div column-span: all>)
          RenderMultiColumnSet

        Now if (C) becomes a column spanner, we need to move the descendant spanner (D) back to its original position and move the subtree out starting from the outermost spanner (C).
        RenderTreeUdpater normally solves this by tearing down the new spanner (and its subtree) when the 'column-spanner' property changes.
        However this spanner property is essentially ignored for floats and out-of-flow boxes (we don't make them spanning the columns) and changing "float" and/or "position" makes
        spanners active.

        Test: fast/multicol/span/float-becomes-spanner-crash.html

        * style/StyleChange.cpp:
        (WebCore::Style::determineChange):

2021-05-03  Sam Weinig  <weinig@apple.com>

        Remove default parameter values for color space and pixel format from ImageBuffer::create to make it clear everwhere we are explicitly requesting SRGB/BGRA8 buffers
        https://bugs.webkit.org/show_bug.cgi?id=225288

        Reviewed by Anders Carlsson.

        To make it super clear exactly what type of ImageBuffers we are creating, this
        removes the default parameters for the scale, color space and pixel format from
        the ImageBuffer::create() functions.

        This allows us to easily see exactly where we are creating 8-bit sRGB buffers
        and potentially losing non-sRGB and wide (> 8-bit) source data. In practice, many
        of these sites are wrong and should be updated to use a color space and pixel
        format matching the source they are going to be copying/buffering.

        I did not update the ImageBuffer::createCompatibleBuffer, as it is less clear what
        to do about them, or what exactly is meant by "compatible", as it seems to be
        inconsistent from one to the other.

        Ultimately, if we want to make it easy to create an ImageBuffer that has the same
        underlying characteristics of whatever a GraphicsContext is drawing to, we will need
        to update GraphicsContext to be able to provide scale, color space and pixel format
        information directly. This will probably require some new mechanism for representing
        color space that can either be a DestinationColorSpace or a platform specific color
        space object (e.g. CGColorSpaceRef).

        * Modules/async-clipboard/ClipboardItemBindingsDataSource.cpp:
        (WebCore::ClipboardItemBindingsDataSource::ClipboardItemTypeLoader::sanitizeDataIfNeeded):
        * Modules/mediasession/MediaMetadata.cpp:
        (WebCore::ArtworkImageLoader::notifyFinished):
        * css/CSSFilterImageValue.cpp:
        (WebCore::CSSFilterImageValue::image):
        * html/ImageBitmap.cpp:
        (WebCore::ImageBitmap::createImageBuffer):
        * html/canvas/CanvasRenderingContext2DBase.cpp:
        (WebCore::CanvasRenderingContext2DBase::createCompositingBuffer):
        * html/canvas/ImageBitmapRenderingContext.cpp:
        (WebCore::ImageBitmapRenderingContext::setOutputBitmap):
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::LRUImageBufferCache::imageBuffer):
        * html/shadow/MediaControlTextTrackContainerElement.cpp:
        (WebCore::MediaControlTextTrackContainerElement::createTextTrackRepresentationImage):
        * inspector/InspectorCanvas.cpp:
        (WebCore::InspectorCanvas::indexForData):
        (WebCore::InspectorCanvas::buildArrayForCanvasPattern):
        * page/FrameSnapshotting.cpp:
        (WebCore::snapshotFrameRectWithClip):
        * page/PageConsoleClient.cpp:
        (WebCore::PageConsoleClient::screenshot):
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::preTransformedNativeImageForCurrentFrame):
        * platform/graphics/CrossfadeGeneratedImage.cpp:
        (WebCore::CrossfadeGeneratedImage::drawPattern):
        * platform/graphics/ImageBuffer.cpp:
        (WebCore::ImageBuffer::createCompatibleBuffer):
        * platform/graphics/ImageBuffer.h:
        * platform/graphics/ShadowBlur.cpp:
        (WebCore::ScratchBuffer::getScratchBuffer):
        (WebCore::ShadowBlur::drawRectShadowWithoutTiling):
        (WebCore::ShadowBlur::drawInsetShadowWithoutTiling):
        (WebCore::ShadowBlur::drawRectShadowWithTiling):
        (WebCore::ShadowBlur::drawInsetShadowWithTiling):
        (WebCore::ShadowBlur::drawShadowLayer):
        * platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:
        (WebCore::FilterEffectRendererCoreImage::renderToImageBuffer):
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::imageBufferResult):
        (WebCore::FilterEffect::convertImageDataToColorSpace):
        (WebCore::FilterEffect::convertImageBufferToColorSpace):
        (WebCore::FilterEffect::createImageBufferResult):
        * platform/graphics/nicosia/texmap/NicosiaGCGLLayer.cpp:
        (Nicosia::GCGLLayer::swapBuffersIfNeeded):
        * platform/graphics/texmap/BitmapTexture.cpp:
        (WebCore::BitmapTexture::updateContents):
        * platform/mock/MockRealtimeVideoSource.cpp:
        (WebCore::MockRealtimeVideoSource::imageBuffer const):
        * rendering/CSSFilter.cpp:
        (WebCore::CSSFilter::allocateBackingStoreIfNeeded):
        * rendering/shapes/Shape.cpp:
        (WebCore::Shape::createRasterShape):
        * rendering/svg/SVGRenderingContext.cpp:
        (WebCore::SVGRenderingContext::createImageBuffer):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::nativeImage):

2021-05-03  Chris Lord  <clord@igalia.com>

        Decoding an SVG off the main thread causes a crash
        https://bugs.webkit.org/show_bug.cgi?id=206055

        Reviewed by Darin Adler.

        Use BitmapImage::create instead of Image::create in ImageBitmap. This
        bypasses use of SVGImage and PDFDocumentImage, which are not safe to
        use off the main thread.

        No new tests, rebaselined existing tests.

        * html/ImageBitmap.cpp:
        (WebCore::ImageBitmap::createFromBuffer):
          Use BitmapImage instead of Image.

        * platform/graphics/Image.cpp:
        (WebCore::Image::create):
          Add main-thread assert on Image creation.

2021-05-03  Rob Buis  <rbuis@igalia.com>

        getPropertyValue for url path doesn't return the "#" character
        https://bugs.webkit.org/show_bug.cgi?id=215409

        Reviewed by Youenn Fablet.

        Address post review comments.

        * css/SVGCSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::svgPropertyValue):

2021-05-03  Youenn Fablet  <youenn@apple.com>

        REGRESSION (r276633): fast/mediastream/media-stream-track-interrupted.html is consistently timing out
        https://bugs.webkit.org/show_bug.cgi?id=225204
        <rdar://problem/77338070>

        Reviewed by Eric Carlson.

        Reverting to RecursiveLock since resuming a unit will make it notify to unmute sources.
        Sources will want to restart audio, thus restarting the unit synchronously.
        This triggers the unit to tell its clients that it is restarting, which creates a dead lock.
        We should probably update the code to change this, but as a short term fix, we revert to a RecursiveLock.

        Covered by fast/mediastream/media-stream-track-interrupted.html no longer timing out.

        * platform/mediastream/mac/BaseAudioSharedUnit.cpp:
        (WebCore::BaseAudioSharedUnit::audioSamplesAvailable):
        * platform/mediastream/mac/BaseAudioSharedUnit.h:

2021-05-03  Youenn Fablet  <youenn@apple.com>

        Use OptionSet for MediaProducer::MutedStateFlags
        https://bugs.webkit.org/show_bug.cgi?id=224550
        <rdar://problem/76960294>

        Reviewed by Eric Carlson.

        Refactoring to improve type safety.
        No change of behavior.

        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::updateCaptureAccordingToMutedState):
        (WebCore::MediaStreamTrack::updateToPageMutedState):
        * page/MediaProducer.h:
        * page/Page.h:
        (WebCore::Page::isAudioMuted const):
        (WebCore::Page::isMediaCaptureMuted const):
        * testing/Internals.cpp:
        (WebCore::Internals::setPageMuted):

2021-05-02  Rob Buis  <rbuis@igalia.com>

        getPropertyValue for url path doesn't return the "#" character
        https://bugs.webkit.org/show_bug.cgi?id=215409

        Reviewed by Sam Weinig.

        Adapt url serializing in SVG to match Firefox and Chrome.

        Test: svg/css/computed-style-url-serializing.html

        * css/SVGCSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::svgPropertyValue):

2021-05-02  Sam Weinig  <weinig@apple.com>

        Add support for DestinationColorSpace::DisplayP3 in preparation for DisplayP3 canvas
        https://bugs.webkit.org/show_bug.cgi?id=225280

        Reviewed by Anders Carlsson.

        Add new ENABLE_DESTINATION_COLOR_SPACE_DISPLAY_P3 macro to declare which ports
        support P3 backing stores. Currently, only the Apple/Cocoa ports support it.

        When ENABLE(DESTINATION_COLOR_SPACE_DISPLAY_P3), also define ColorSpaceDestination::DisplayP3.
        This is not currently used, but will be in subsequent changes.

        * platform/graphics/ColorConversion.cpp:
        (WebCore::converColorComponents):
        * platform/graphics/ColorSpace.cpp:
        (WebCore::operator<<):
        * platform/graphics/ColorSpace.h:
        (WebCore::callWithColorType):
        * platform/graphics/cg/ColorSpaceCG.h:
        (WebCore::cachedCGColorSpace):

2021-05-02  Zalan Bujtas  <zalan@apple.com>

        [LFC] Rename block(inline/table/flex)formattingContext directories to block(inline/table/flex)
        https://bugs.webkit.org/show_bug.cgi?id=225275

        Reviewed by Antti Koivisto.

        The formattingContext postfix is redundant as they are all under the /formattingContexts directory.

        * CMakeLists.txt:
        * Headers.cmake:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

2021-05-02  Jer Noble  <jer.noble@apple.com>

        [Perf] Creation of many video elements slows over time
        https://bugs.webkit.org/show_bug.cgi?id=225273

        Reviewed by Eric Carlson.

        In PerformanceTests/Media/VideoElementCreation.html, 1000 video elements are created
        per test, and the test reports how long each batch of 1000 element took to create. A
        typical run shows the amount of time to run each batch slows over time. The underlying
        cause appears to be the cost it takes to iterate over each MediaElementSession inside
        PlatformMediaSessionManager and subclasses.

        Before a HTMLMediaElement has a src (or after it's emptied) there's no reason for its
        MediaElementSession to be tracked by the PlatformMediaSessionManager. It can't play,
        pause, be interrupted, or accept remote control commands. So PlatformMediaSession will
        be changed so that it does not add itself to the list of its manager's sessions at
        creation time; instead a new method, setActive(bool), is added and will be called at
        an appropriate time by its clients, HTMLMediaElement and AudioContext.

        HTMLMediaElement will activate its mediaSession just before creating its MediaPlayer
        inside prepareForLoad() or loadNextSourceChild(), and will deactivate after tearing
        down its MediaPlayer inside mediaLoadingFailed().

        AudioContext will activate its mediaSession during its own initialization, and deactivate
        inside close().

        Before this change, on this machine, VideoElementCreation.html showed an incresing time
        to video element creation, levelling out at ~400ms per 1000 elements.  After this change,
        VideoElelementCreation.html shows a constant time to video element creation, averaging
        between 4ms and 7ms per 1000 elements.

        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::close):
        (WebCore::AudioContext::lazyInitialize):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::prepareForLoad):
        (WebCore::HTMLMediaElement::mediaLoadingFailed):
        * platform/audio/PlatformMediaSession.cpp:
        (WebCore::PlatformMediaSession::PlatformMediaSession):
        (WebCore::PlatformMediaSession::~PlatformMediaSession):
        (WebCore::PlatformMediaSession::setActive):
        * platform/audio/PlatformMediaSession.h:

2021-05-01  Antti Koivisto  <antti@apple.com>

        Share style resolvers between author shadow trees with identical style
        https://bugs.webkit.org/show_bug.cgi?id=225187
        <rdar://problem/77317178>

        Reviewed by Sam Weinig.

        Style resolvers own style resolution and invalidation rule sets, matched declarations cache, and other things.
        With complex stylesheets that can be lot of data. We currently create a style resolver for each author
        shadow tree. With web components it is common for a page to have large number of instances of the same
        component, and so shadow trees with identical style.

        We already deduplicate shadow tree stylesheets (including inline stylesheets based on string equality).
        With this patch we'll use these stylesheets as keys for sharing the full style resolvers as well.

        * style/StyleScope.cpp:
        (WebCore::Style::Scope::createOrFindSharedShadowTreeResolver):

        Expand the existing support for sharing between user agent shadow trees and author shadow trees with
        empty style. Look up shareable resolvers from a map.

        (WebCore::Style::Scope::unshareShadowTreeResolverBeforeMutation):
        (WebCore::Style::Scope::makeResolverSharingKey):

        Make a key from the active stylesheets and a bit indicating the shadow tree type.

        (WebCore::Style::Scope::releaseMemory):
        (WebCore::Style::Scope::didChangeStyleSheetEnvironment):
        * style/StyleScope.h:

2021-05-01  Sam Weinig  <weinig@apple.com>

        Move PixelFormat into its own file
        https://bugs.webkit.org/show_bug.cgi?id=225272

        Reviewed by Darin Adler.

        PixelFormat is going to be useful for non-ImageBuffer specific reasons
        soon, so let's move it to its own header.

        * Headers.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/ImageBufferBackend.h:
        * platform/graphics/PixelFormat.h: Added.

2021-04-30  Darin Adler  <darin@apple.com>

        Use SortedArrayMap in a few more places
        https://bugs.webkit.org/show_bug.cgi?id=225251

        Reviewed by Sam Weinig.

        * Modules/encryptedmedia/CDM.h: Removed unneeded includes.
        * Modules/indexeddb/server/IDBServer.h: Ditto.
        * contentextensions/ContentExtensionActions.h: Ditto.
        * css/CSSVariableData.h: Ditto.
        * dom/FullscreenManager.h: Ditto.

        * dom/ScriptElement.cpp:
        (WebCore::isLegacySupportedJavaScriptLanguage): Use SortedArraySet.
        (WebCore::ScriptElement::executeClassicScript): Fixed typo.
        (WebCore::ScriptElement::executeModuleScript): Ditto.

        * inspector/InspectorAuditResourcesObject.cpp: Removed unneeded includes.
        * inspector/agents/InspectorNetworkAgent.cpp: Ditto.
        * loader/appcache/ApplicationCacheGroup.cpp: Ditto.
        * page/UserContentProvider.h: Ditto.
        * page/ios/DOMTimerHoldingTank.cpp: Ditto.
        * page/scrolling/ScrollingCoordinator.h: Ditto.

        * page/scrolling/ScrollingTreeNode.h: Added forward declaration
        that used to be inherited from another file where it's not needed.

        * platform/gamepad/cocoa/GameControllerGamepadProvider.mm:
        (WebCore::GameControllerGamepadProvider::willHandleVendorAndProduct):
        Use a switch statement.

        * platform/gamepad/mac/HIDGamepadElement.h: Removed unneeded includes.
        * platform/graphics/FontPlatformData.cpp: Ditto.
        * platform/graphics/HEVCUtilities.cpp: Ditto.
        * platform/graphics/IntRectHash.h: Ditto.

        * platform/graphics/MIMETypeCache.cpp:
        (WebCore::MIMETypeCache::isStaticContainerType): Renamed; this replaces
        the old staticContainerTypeList function and just returns false.

        * platform/graphics/MIMETypeCache.h: Replaced the staticContainerTypeList
        fucntion with an isStaticContainerType function. Also made it, and one
        other function, private.

        * platform/graphics/avfoundation/objc/AVAssetMIMETypeCache.h: Updated
        for the change to MIMETypeCache.

        * platform/graphics/avfoundation/objc/AVAssetMIMETypeCache.mm:
        (WebCore::AVAssetMIMETypeCache::isStaticContainerType): Use SortedArraySet.

        * platform/graphics/avfoundation/objc/CDMInstanceFairPlayStreamingAVFObjC.h:
        Removed unneeded includes.
        * platform/graphics/coreimage/FilterEffectRendererCoreImage.h: Ditto.
        * platform/mediastream/RealtimeMediaSourceSupportedConstraints.cpp: Ditto.
        * platform/mediastream/ios/AVAudioSessionCaptureDeviceManager.h: Ditto.
        * platform/mediastream/mac/CoreAudioCaptureDeviceManager.h: Ditto.
        * platform/mediastream/mac/CoreAudioCaptureSource.h: Ditto.
        * platform/network/cf/FormDataStreamCFNet.cpp: Ditto.

        * platform/network/mac/UTIUtilities.mm:
        (WebCore::UTIFromUnknownMIMEType): Use SortedArrayMap. Also fixed a regression
        from r271533 where we accidentally deleted the MIME type model/vnd.reality.

        * rendering/ComplexLineLayout.cpp:
        (WebCore::setLogicalWidthForTextRun): Use a range-based for loop.

        * rendering/updating/RenderTreeUpdater.h: Removed unneeded includes.
        * storage/StorageNamespaceProvider.h: Ditto.
        * storage/StorageQuotaManager.h: Ditto.
        * style/StyleUpdate.h: Ditto.
        * svg/SVGFitToViewBox.h: Ditto.

        * svg/SVGTests.cpp:
        (WebCore::SVGTests::isValid const): Use SortedArraySet.
        (WebCore::SVGTests::hasFeatureForLegacyBindings): Ditto.

2021-05-01  Sam Weinig  <weinig@apple.com>

        Update operations in CanvasImageData.idl to use long rather than float as per spec
        https://bugs.webkit.org/show_bug.cgi?id=225263

        Reviewed by Simon Fraser.

        Use `[EnforceRange] long` to match the current HTML spec.

        * html/canvas/CanvasImageData.idl:
        * html/canvas/CanvasRenderingContext2DBase.cpp:
        (WebCore::CanvasRenderingContext2DBase::createImageData const):
        (WebCore::CanvasRenderingContext2DBase::getImageData const):
        (WebCore::CanvasRenderingContext2DBase::putImageData):
        * html/canvas/CanvasRenderingContext2DBase.h:

2021-05-01  Zalan Bujtas  <zalan@apple.com>

        [LFC] Move formatting contexts to layout/formattingContexts directory
        https://bugs.webkit.org/show_bug.cgi?id=225270

        Reviewed by Antti Koivisto.

        * CMakeLists.txt:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

2021-05-01  Sam Weinig  <weinig@apple.com>

        Make destination color space enumeration match supported destination color spaces for the port
        https://bugs.webkit.org/show_bug.cgi?id=225237

        Reviewed by Simon Fraser.

        Add ENABLE_DESTINATION_COLOR_SPACE_LINEAR_SRGB and enabled it for all ports
        except the Apple Windows port, which is the only one doesn't have any support
        for it.

        Removes existing behavior of returning SRGB when LinearSRGB was requested in
        the Apple Windows port. Now, the callers are responisble for dealing with a
        ports lack of support of LinearSRGB, making it very clear at those call sites
        that something is different and wrong.

        * platform/graphics/Color.cpp:
        * platform/graphics/Color.h:
        * platform/graphics/ColorConversion.cpp:
        * platform/graphics/ColorConversion.h:
        Add new functions to perform color conversion to and from an color space
        denoted by the ColorSpace or DestinationColorSpace enum. Previously, we
        only had convient ways to convert if the color was strongly typed (and this
        is implemented using that mechanism). This is useful when converting for
        final ouput, such in as the caller in FELighting::drawLighting.

        * platform/graphics/cg/ColorSpaceCG.h:
        * platform/graphics/ColorSpace.cpp:
        * platform/graphics/ColorSpace.h:
        * platform/graphics/filters/FELighting.cpp:
        * platform/graphics/filters/FilterEffect.h:
        * rendering/CSSFilter.cpp:
        * rendering/svg/RenderSVGResourceFilter.cpp:
        * rendering/svg/RenderSVGResourceMasker.cpp:
        Wrap uses of DestinationColorSpace::LinearSRGB in ENABLE(DESTINATION_COLOR_SPACE_LINEAR_SRGB).

2021-05-01  Sam Weinig  <weinig@apple.com>

        Generated JS bindings for JSValue -> IDL dictionary don't take into account runtime settings
        https://bugs.webkit.org/show_bug.cgi?id=225271

        Reviewed by Alexey Shvayka.

        While we did account for Settings/RuntimeEnabledFeatures/etc when converting from a
        dictionary to a JSValue, we forgot to add code to skip trying to read the properties
        in on ingestion.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateDictionaryImplementationContent):
        Match convertDictionaryToJS and add guard + indent if the property has a runtime flag.

        * bindings/scripts/test/JS/JSTestDerivedDictionary.cpp:
        (WebCore::convertDictionary<TestDerivedDictionary>):
        * bindings/scripts/test/JS/JSTestDerivedDictionary2.cpp:
        (WebCore::convertDictionary<TestDerivedDictionary2::Dictionary>):
        * bindings/scripts/test/JS/JSTestInheritedDictionary.cpp:
        (WebCore::convertDictionary<TestInheritedDictionary>):
        * bindings/scripts/test/JS/JSTestStandaloneDictionary.cpp:
        (WebCore::convertDictionary<DictionaryImplName>):
        Update test results.

2021-05-01  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] Reset the "children inline" state when merging anonymous table boxes
        https://bugs.webkit.org/show_bug.cgi?id=225266
        <rdar://77327951>

        Reviewed by Simon Fraser.

        This patch fixes the case when we end up moving block level boxes to an anonymous table box (cell, row) which previously
        had inline level boxes only (it happens when the destination ("to") table box has no in-flow children).

        Test: fast/table/merge-anonymous-table-cells-with-block-children.html

        * rendering/updating/RenderTreeBuilderTable.cpp:
        (WebCore::RenderTreeBuilder::Table::collapseAndDetachAnonymousNextSibling):

2021-04-30  Wenson Hsieh  <wenson_hsieh@apple.com>

        App highlight UI should be disabled when selecting text in image overlays
        https://bugs.webkit.org/show_bug.cgi?id=225260
        rdar://77359313

        Reviewed by Tim Horton.

        When both app highlights and image extraction are enabled, parts of the app highlights feature don't play well
        with highlights created for text selections inside an image overlay. For the time being, address this by
        disabling app highlights in image overlays.

        These changes are exercised by a new API test on iOS, and a new layout test for macOS.

        Tests:  WebKit.AppHighlightsInImageOverlays
                fast/images/image-extraction/mac/image-overlay-text-disables-app-highlight-menu-items.html

        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::populate):

        Don't add app highlight menu items in the case where we've selected text in an image overlay.

        * testing/Internals.cpp:
        (WebCore::Internals::appHighlightContextMenuItemTitles const):

        Add an internal testing hook to expose the localized names of the app highlight menu items to layout tests.

        * testing/Internals.h:
        * testing/Internals.idl:

2021-04-30  Jer Noble  <jer.noble@apple.com>

        [Cocoa] Calling into -[AVPlayerItem currentTime] is very expensive
        https://bugs.webkit.org/show_bug.cgi?id=225254

        Reviewed by Eric Carlson.

        Calling into -currentTime is an expensive operation that synchronously calls a shared
        background thread, and so can block for potentially long periods of time. Instead,
        AVPlayerItem offers an API which will push currentTime changes on a specified dispatch
        queue. We can use that API to occasionally update a cached view of the item's currentTime
        and combine that cached value with other cached states to accurately calculate an
        approximation of the currentTime during playback.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::cancelLoad):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::currentMediaTime const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::currentMediaTimeDidChange):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setRateDouble):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setPlayerRate):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::timeControlStatusDidChange):

2021-04-30  Cameron McCormack  <heycam@apple.com>

        Defend further against a PlatformCALayer's owner becoming null in PlatformCALayerCocoa::drawLayerContents.
        https://bugs.webkit.org/show_bug.cgi?id=225250
        <rdar://37608882>

        Reviewed by Simon Fraser.

        At the end of PlatformCALayer::drawLayerContents, we null check
        layerContents for the platformCALayerShowRepaintCounter call but not
        the platformCALayerIncrementRepaintCount call.

        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:
        (WebCore::PlatformCALayer::drawLayerContents):

2021-04-30  Cameron McCormack  <heycam@apple.com>

        Avoid a crash in PlatformCALayer::drawLayerContents when called with a display list recording GraphicsContext.
        https://bugs.webkit.org/show_bug.cgi?id=225224
        <rdar://76359027>

        Reviewed by Simon Fraser.

        setIsCALayerContext and setIsAcceleratedContext both assume (and assert)
        that the GraphicsContext has a platform context directly in m_data,
        but m_data is null when the GraphicsContext a display list recording
        context (which is the case when GPUP DOM rendering is enabled).  These
        calls are unnecessary when not working with a CG-backed GraphicsContext,
        so just skip them in this case.

        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:
        (WebCore::PlatformCALayer::drawLayerContents):

2021-04-30  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Add a heuristic to determine whether a synthetic click triggered any meaningful changes
        https://bugs.webkit.org/show_bug.cgi?id=225240
        rdar://77221196

        Reviewed by Tim Horton.

        Add plumbing for a `ChromeClient` hook that's called when a mousedown or mouseup event is either prevented by
        the page, or handled with a default event handler on the element (e.g. when clicking a link).

        Test: fast/events/ios/did-not-handle-meaningful-click.html

        * page/ChromeClient.h:
        (WebCore::ChromeClient::didHandleOrPreventMouseDownOrMouseUpEvent):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::EventHandler::handleMouseDoubleClickEvent):
        (WebCore::EventHandler::handleMouseReleaseEvent):

2021-04-30  Youenn Fablet  <youenn@apple.com>

        REGRESSION (iOS 14.5): PWA's / Home Screen Apps with Service Workers intermittenly fail to open offline
        https://bugs.webkit.org/show_bug.cgi?id=225083
        <rdar://problem/77232062>

        Reviewed by Alex Christensen.

        Manually tested.

        * workers/service/server/SWServerWorker.h:
        Initialize m_shouldSkipHandleFetch to false by default.
        Otherwise, m_shouldSkipHandleFetch might be used uninitialized during a small amount of time.

2021-04-30  Chris Dumez  <cdumez@apple.com>

        Simplify shouldInvalidateNodeListCachesForAttr() template function
        https://bugs.webkit.org/show_bug.cgi?id=225236

        Reviewed by Geoffrey Garen.

        Simplify shouldInvalidateNodeListCachesForAttr() template function by using if constexpr.

        * dom/Node.cpp:
        (WebCore::shouldInvalidateNodeListCachesForAttr):
        (WebCore::shouldInvalidateNodeListCachesForAttr<numNodeListInvalidationTypes>): Deleted.

2021-04-30  Rob Buis  <rbuis@igalia.com>

        Move ShouldAllowCrossOriginScrolling to RenderLayer
        https://bugs.webkit.org/show_bug.cgi?id=225231

        Reviewed by Simon Fraser.

        Move ShouldAllowCrossOriginScrolling to RenderLayer.

        * rendering/RenderLayer.h:
        * rendering/RenderObject.h:

2021-04-30  Youenn Fablet  <youenn@apple.com>

        REGRESSION (r276633): ASSERTION FAILED: !forbidMallocUseScopeCount || disableMallocRestrictionScopeCount under WebCore::AudioSampleDataSource::create()
        https://bugs.webkit.org/show_bug.cgi?id=225196
        <rdar://problem/77329071>

        Reviewed by Eric Carlson.

        Covered by API test no longer crashing.

        * Modules/speech/SpeechRecognitionCaptureSourceImpl.cpp:
        (WebCore::SpeechRecognitionCaptureSourceImpl::audioSamplesAvailable):
        Disabling check here until we figure out a better way of doing things.

2021-04-30  Oriol Brufau  <obrufau@igalia.com>

        [css-logical] Fix logical shorthands with var()
        https://bugs.webkit.org/show_bug.cgi?id=224594

        Reviewed by Manuel Rego Casasnovas.

        Logical shorthands with var() were not working because when resolving
        the pending-substitution value of the equivalent physical longhand,
        parseValueWithVariableReferences would parse the logical shorthand into
        the logical longhands, which would be different properties than the
        physical longhand being resolved.

        So this patch compares with the equivalent physical property instead.

        Test: imported/w3c/web-platform-tests/css/css-logical/logicalprops-with-variables.html

        * css/parser/CSSParser.cpp:
        (WebCore::CSSParser::parseValueWithVariableReferences):

2021-04-30  Antti Koivisto  <antti@apple.com>

        Share style resolvers between author shadow trees without style sheets
        https://bugs.webkit.org/show_bug.cgi?id=225102

        Reviewed by Sam Weinig.

        Prepare for sharing style resolvers (and all the related data) between shadow trees beyond
        the currently supported user agent shadow trees. This patch refactors the sharing code
        and adds support for sharing resolvers for author shadow trees without style sheets.
        
        Test: fast/shadow-dom/style-resolver-sharing.html

        * dom/Document.cpp:
        (WebCore::Document::userAgentShadowTreeStyleResolver): Deleted.
        (WebCore::Document::didClearStyleResolver): Deleted.
        
        Move the shared UA resolver to Style::Scope.
        
        * dom/Document.h:
        * style/StyleResolver.h:
        (WebCore::Style::Resolver::wasShared const):
        (WebCore::Style::Resolver::setWasShared):
        
        Add a bit indicating if a resolver has been shared between shadow trees.

        * style/StyleScope.cpp:
        (WebCore::Style::Scope::resolver):
        (WebCore::Style::Scope::createDocumentResolver):
        (WebCore::Style::Scope::createOrFindSharedShadowTreeResolver):
        
        Factor into a function.
        Share user agent shadow tree resolver (as before) and also resolver for empty author shadow trees.

        (WebCore::Style::Scope::unshareShadowTreeResolverBeforeMutation):
        
        If we mutate an existing resolver we need to make it unavailable for sharing.
        
        (WebCore::Style::Scope::clearResolver):
        (WebCore::Style::Scope::releaseMemory):
        (WebCore::Style::Scope::analyzeStyleSheetChange):
        
        If we are about to mutate already shared resolver we need to create a new one.
        
        (WebCore::Style::Scope::updateActiveStyleSheets):
        
        If style sheets change and the resolver is shared always look it up again (since it can't be mutated).

        (WebCore::Style::Scope::updateResolver):
        (WebCore::Style::Scope::scheduleUpdate):
        (WebCore::Style::Scope::insertedInDocument):
        (WebCore::Style::Scope::didChangeStyleSheetEnvironment):
        (WebCore::Style::Scope::documentScope):
        (WebCore::Style::Scope::isForUserAgentShadowTree const):
        (WebCore::Style::Scope::shouldUseSharedUserAgentShadowTreeStyleResolver const): Deleted.
        (WebCore::Style::Scope::resolverIfExists): Deleted.
        * style/StyleScope.h:
        (WebCore::Style::Scope::resolverIfExists):
        * style/StyleScopeRuleSets.h:
        (WebCore::Style::ScopeRuleSets::setIsForShadowScope): Deleted.
        (WebCore::Internals::dumpStyleResolvers):
        * testing/Internals.h:
        * testing/Internals.idl:
        
        Testing support.

2021-04-30  Sergio Villar Senin  <svillar@igalia.com>

        Nullopt in RenderFlexibleBox::layoutFlexItems in RenderFlexibleBox::layoutBlock via RenderMultiColumnFlow::layout
        https://bugs.webkit.org/show_bug.cgi?id=223369

        Reviewed by Alan Bujtas.

        When computing the main axis extent of a flex item being the main axis also the child's inline axis and the
        inline size of the child is auto, we can directly use the min/maxPreferredLogicalWidths instead of having
        to call computeLogicalWidthInFragmentUsing(). However we cannot use it straigth away without checking
        needsPreferredWidthsRecalculation() first, otherwise the cached preferred width might be no longer valid.
        The cached preferred width includes both border and padding. If any of those are percentages, and thus
        depend on the size of the containing block, we could end up using obsolete values.

        This was making us hit an assertion because the content size suggestion was negative. That's because in order
        to compute the content size we were substracting the current borderAndPadding() to the value returned by
        minPreferredLogicalWidth(). But the current borderAndPadding() might be larger than the one used to compute the
        preferred width before (they must be the same to properly extract the content size) so the content size ended
        up being negative.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::computeMainAxisExtentForChild):
        (WebCore::RenderFlexibleBox::adjustChildSizeForMinAndMax): Constness adjustments.
        (WebCore::RenderFlexibleBox::resolveFlexibleLengths): Ditto.
        * rendering/RenderFlexibleBox.h:

2021-04-30  Youenn Fablet  <youenn@apple.com>

        MediaPlayerPrivateMediaStreamAVFObjC::ensureLayers lambda should check its player is alive
        https://bugs.webkit.org/show_bug.cgi?id=225186
        <rdar://77267681>

        Reviewed by Eric Carlson.

        Make sure to check weakThis.
        Move the meat of the lambda in a method as a small improvement refactoring.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::ensureLayers):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::layersAreInitialized):

2021-04-29  Jean-Yves Avenard  <jya@apple.com>

        Adopt AVSampleBufferAudioRendererWasFlushedAutomaticallyNotification
        https://bugs.webkit.org/show_bug.cgi?id=225170
        rdar://77086915

        Reviewed by Eric Carlson.

        When the AVSampleBufferAudioRendererWasFlushedAutomaticallyNotification is received, the SourceBuffer will now
        re-enqueue all audio frames from currentTime.
        The handling of AVSampleBufferAudioRendererWasFlushedAutomaticallyNotification is currently broken in AVFoundation.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm: Add missing #include
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (-[WebAVSampleBufferErrorListener beginObservingRenderer:]): Add listener
        (-[WebAVSampleBufferErrorListener stopObservingRenderer:]): Remove listener
        (-[WebAVSampleBufferErrorListener audioRendererWasAutomaticallyFlushed:]):
        (WebCore::SourceBufferPrivateAVFObjC::rendererWasAutomaticallyFlushed):

2021-04-29  Jean-Yves Avenard  <jya@apple.com>
        https://bugs.webkit.org/show_bug.cgi?id=225183
        rdar://77251937

        Reviewed by Eric Carlson.

        Under some circumstances, the decoded image may end up being empty. We need to handle this case.

        * Modules/mediasession/MediaMetadata.cpp:
        (WebCore::MediaMetadata::refreshArtworkImage): Exit early if image is empty.
        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::nowPlayingInfo const): Add assert to clarify code

2021-04-29  Zalan Bujtas  <zalan@apple.com>

        Floating object are not removed from the initial containing block
        https://bugs.webkit.org/show_bug.cgi?id=225198
        <rdar://77236776>

        Reviewed by Antti Koivisto.

        outermostBlockContainingFloatingObject is supposed to find the top most ancestor for an intruding float. Now when the <html> is float positioned,
        the initial containing block (RenderView) is the outermost containing block that has reference to this float (see FloatingObject).
        removeFloatingOrPositionedChildFromBlockLists() calls outermostBlockContainingFloatingObject() to get the top most renderer where the float cleanup
        is supposed to be initiated at. We call this function during style and tree mutation.
        These float lists are getting invalidated during layout as well, with a simple call to m_floatingObjects->clear(). It unconditionally takes care of all the floats including
        the ones on the initial containing block.
        The bug only shows when we try to access the floating list between the style/tree mutation and the subsequent layout.

        Test: fast/block/fail-to-remove-float-from-initial-containing-block.html

        * rendering/RenderBox.cpp:
        (WebCore::outermostBlockContainingFloatingObject):

2021-04-29  Michael Catanzaro  <mcatanzaro@gnome.org>

        -Wpessimizing-move warnings in LocaleICU.cpp
        https://bugs.webkit.org/show_bug.cgi?id=225205

        Reviewed by Sam Weinig.

        * platform/text/LocaleICU.cpp:
        (WebCore::LocaleICU::createLabelVector):
        (WebCore::createFallbackMonthLabels):
        (WebCore::createFallbackAMPMLabels):

2021-04-29  Alexey Shvayka  <shvaikalesh@gmail.com>

        [WebIDL] Remove [Reflect] support for constants
        https://bugs.webkit.org/show_bug.cgi?id=225119

        Reviewed by Sam Weinig.

        While reflection of content attributes [1] is a well-known concept, using [Reflect] for
        constants doesn't make much sense (as there is no HTML attribute involved) and introduces
        conflicting semantics for its value: C++ enum identifier vs. HTML attribute name.

        [ImplementedAs] extended attribute is a perfect fit for customizing C++ identifier;
        this change expands it to constants. Using ERROR as enum identifier still breaks
        Windows build due to #define conflict.

        No new tests, no behavior change.

        [1] https://html.spec.whatwg.org/multipage/common-dom-interfaces.html#reflecting-content-attributes-in-idl-attributes

        * bindings/scripts/CodeGenerator.pm:
        (GenerateCompileTimeCheckForEnumsIfNeeded):
        * bindings/scripts/IDLAttributes.json:
        * bindings/scripts/test/*: Updated.
        * html/HTMLTrackElement.idl:

2021-04-29  Aditya Keerthi  <akeerthi@apple.com>

        REGRESSION (r275431): [iOS] fast/events/touch/ios/mouse-events-dispatch-with-touch.html is timing out
        https://bugs.webkit.org/show_bug.cgi?id=225208
        <rdar://problem/77042369>

        Reviewed by Devin Rousso.

        * page/Quirks.cpp:
        (WebCore::Quirks::simulatedMouseEventTypeForTarget const):

        Remove the `!needsQuirks()` check added in r275431 to restore the
        original test behavior.

        Note that the test overrides `MouseEventsSimulationEnabled`, which
        forces `Quirks::shouldDispatchSimulatedMouseEvents` to return true
        regardless of `!needsQuirks()`. Furthermore, `NeedsSiteSpecificQuirks`
        defaults to false in WebCore.

        This change is safe, since `shouldDispatchSimulatedMouseEvents` still
        checks `!needsQuirks()` when `MouseEventsSimulationEnabled` is false.

2021-04-29  Devin Rousso  <drousso@apple.com>

        Unreviewed, fix crashloop after r276744
        <rdar://problem/77333886>

        * dom/Document.cpp:
        (WebCore::Document::determineSampledPageTopColor):
        Don't attempt to get the value from the `Optional<Lab<float>>` unless we know for sure that
        it's valid. This amounts to always making sure we either `continue` (or `return` if that
        snapshot is not an outlier) instead of only doing it if the snapshot is an outlier.

2021-04-29  Darin Adler  <darin@apple.com>

        Extend SortedArrayMap further to work on case-folded strings, use in MIMETypeRegistry
        https://bugs.webkit.org/show_bug.cgi?id=224968

        Reviewed by Sam Weinig.

        Using fewer HashSet in MIMETypeRegistry saves code size and reduces memory use.

        * platform/MIMETypeRegistry.cpp:
        (WebCore::MIMETypeRegistry::supportedImageMIMETypes): Deleted. Replaced
        this function with a constexpr array, eliminating the use of HashSet.
        (WebCore::makeFixedVector): Added. Helper function used below for the repeated patttern
        of converting a constexpr array into a FixedVector<const char*>.
        (WebCore::supportedJavaScriptMIMETypes): Deleted.
        (WebCore::MIMETypeRegistry::supportedNonImageMIMETypes): Update since
        supportedJavaScriptMIMETypeArray is now an array, not a HashSet.
        (WebCore::MIMETypeRegistry::pdfMIMETypes): Rewrote to return a FixedVector<const char*>
        instead of a HashSet. The only caller makes an NSArray<NSString *>, so there is no need
        to involve a hash table or a WTF::String.
        (WebCore::MIMETypeRegistry::unsupportedTextMIMETypes): Ditto.
        (WebCore::commonMediaTypes): Deleted, merging into the function below.
        (WebCore::commonMimeTypesMap): Moved the commonMediaTypes data in here
        and use a constexpr array instead of an initializer_list.
        (WebCore::MIMETypeRegistry::isSupportedImageMIMEType): Use SortedArraySet
        instead of a HashSet for the core supported images types. Moved the code
        that checks this against defaultSupportedImageTypes here.
        (WebCore::MIMETypeRegistry::isSupportedJavaScriptMIMEType): Use SortedArraySet.
        (WebCore::MIMETypeRegistry::isUnsupportedTextMIMEType): Ditto.
        (WebCore::MIMETypeRegistry::isPDFMIMEType): Ditto.
        (WebCore::MIMETypeRegistry::isPostScriptMIMEType): Use equalLettersIgnoringASCIICase.
        For some reason this was the single case-sensitive function in this whole class!
        (WebCore::MIMETypeRegistry::isSystemPreviewMIMEType): Use SortedArraySet.
        (WebCore::MIMETypeRegistry::systemPreviewMIMETypes): Return a FixedVector.
        (WebCore::normalizedImageMIMEType): Renamed this from its old name,
        MIMETypeRegistry::normalizedMIMEType, to better reflect that it's only used in
        one place. Also added comments to clarify that it's CURL-only and suggest it be
        removed eventually.

        * platform/MIMETypeRegistry.h: Changed supportedImageMIMETypes, pdfMIMETypes,
        unsupportedTextMIMETypes, and systemPreviewMIMETypes to return FixedVector instead
        of HashSet. Also removed normalizedMIMEType.

        * svg/SVGTransformValue.h: Removed unneeded include of HashMap.h.
        * testing/TypeConversions.h: Ditto.

2021-04-29  Sam Weinig  <weinig@apple.com>

        Add support for CanvasRenderingContext2DSettings
        https://bugs.webkit.org/show_bug.cgi?id=225173

        Reviewed by Chris Dumez.

        Plumb infrastructure for passing a CanvasRenderingContext2DSettings to CanvasRenderingContext2D.

        This change only adds the 'desynchronized' flag, which is only a hint, so ignoring
        it is an exceptable implementation. 

            "When a CanvasRenderingContext2D object's desynchronized is true, then the user
             agent may optimize the rendering of the canvas to reduce the latency."
            - https://html.spec.whatwg.org/multipage/canvas.html#concept-canvas-desynchronized

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        Add new files.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext):
        (WebCore::HTMLCanvasElement::createContext2d):
        (WebCore::HTMLCanvasElement::getContext2d):
        Pipe CanvasRenderingContext2DSettings to CanvasRenderingContext2D.
        * html/HTMLCanvasElement.h:
        Forward declare ImageBitmapRenderingContextSettings and remove default values
        from functions taking a ImageBitmapRenderingContextSettings. There are few
        callers and this allows us to remove an include.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::create):
        (WebCore::CanvasRenderingContext2D::CanvasRenderingContext2D):
        * html/canvas/CanvasRenderingContext2D.h:
        Store settings. It is not currently used for anything but returning
        itself but will have other state in the future.

        * html/canvas/CanvasRenderingContext2D.idl:
        Add getContextAttributes() operation from https://html.spec.whatwg.org/multipage/canvas.html#canvasrenderingcontext2d

        * html/canvas/CanvasRenderingContext2DSettings.h: Added.
        * html/canvas/CanvasRenderingContext2DSettings.idl: Added.

2021-04-29  Chris Dumez  <cdumez@apple.com>

        Improve local storage size estimation for quota limitation
        https://bugs.webkit.org/show_bug.cgi?id=225123
        <rdar://problem/77248111>

        Reviewed by Alex Christensen.

        Improve local storage size estimation for quota limitation:
        - Rely on String::sizeInBytes() to compute the String size, instead of using
          String::length() * sizeof(UChar)
        - Make estimation consistent between StorageMap & LocalStorageDatabase

        * storage/StorageMap.cpp:
        (WebCore::StorageMap::setItem):
        (WebCore::StorageMap::setItemIgnoringQuota):
        (WebCore::StorageMap::removeItem):
        (WebCore::StorageMap::clear):
        (WebCore::StorageMap::importItems):
        (WebCore::StorageMap::Impl::copy const):
        * storage/StorageMap.h:

2021-04-29  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r276689, r276736, and r276737.
        https://bugs.webkit.org/show_bug.cgi?id=225188

        Broke platform/ios/ios/storage/domstorage/5mb-quota.html

        Reverted changesets:

        "Improve local storage size estimation for quota limitation"
        https://bugs.webkit.org/show_bug.cgi?id=225123
        https://trac.webkit.org/changeset/276689

        "REGRESSION(r276689): [ iOS wk2 ]
        platform/ios/ios/storage/domstorage/5mb-quota.html is a
        constant text failure"
        https://bugs.webkit.org/show_bug.cgi?id=225160
        https://trac.webkit.org/changeset/276736

        "Make sure we invalidate the iterator in StorageMap::clear()"
        https://bugs.webkit.org/show_bug.cgi?id=225164
        https://trac.webkit.org/changeset/276737

2021-04-29  Antoine Quint  <graouts@webkit.org>

        Rotation axis parallel to the z axis should not serialize using the "z" keyword for the rotate property
        https://bugs.webkit.org/show_bug.cgi?id=225101

        Reviewed by Antti Koivisto.

        The CSS spec has changed to drop the "z" keyword or any other axis parallel to the z axis when parsing the
        rotate property in https://github.com/w3c/csswg-drafts/pull/6147.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::computedRotate):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeRotate):

2021-04-29  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Incorrect middle alignment for inline boxes when line-height is present
        https://bugs.webkit.org/show_bug.cgi?id=225166
        <rdar://77272112>

        Reviewed by Simon Fraser.

        Let's use the layout bounds instead of the baseline when computing the inline box's baseline offset from the root inline box's baseline.
        The difference here is that the layout bounds (per spec) is adjusted with the line-height value.
        These two values (layout bounds's ascent and the inline box's baseline) resolve to the same value as long as the line-height property is not set.

        Tests: fast/inline/incorrect-middle-alignment-with-line-height.html
               fast/inline/incorrect-middle-baseline-alignment-with-line-height.html

        * layout/inlineformatting/InlineFormattingContextGeometry.cpp:
        (WebCore::Layout::LineBoxBuilder::computeLineBoxHeightAndAlignInlineLevelBoxesVertically):

2021-04-29  Said Abou-Hallawa  <said@apple.com>

        [GPU Process] REGRESSION(r272888): Don't assert the validity of the dataURL mimeType inside GPU Process
        https://bugs.webkit.org/show_bug.cgi?id=225175
        <rdar://76286963>

        Reviewed by Simon Fraser.

        * platform/MIMETypeRegistry.h:
        Export isSupportedImageMIMETypeForEncoding() so it can be called in WebKit.

        * platform/graphics/cg/ImageBufferCGBackend.cpp:
        (WebCore::ImageBufferCGBackend::toCFData const):
        Do not assert if we are inside the GPU Process.

2021-04-28  Ryosuke Niwa  <rniwa@webkit.org>

        Use a WeakHashSet for Document::m_mediaElements
        https://bugs.webkit.org/show_bug.cgi?id=225082

        Unreviewed. Address the review comments by Chris & Darin.

        * dom/Document.cpp:
        (WebCore::Document::forEachMediaElement):

2021-04-28  Chris Dumez  <cdumez@apple.com>

        Crash under WebCore::AudioNodeOutput::pull(WebCore::AudioBus*, unsigned long)
        https://bugs.webkit.org/show_bug.cgi?id=225174
        <rdar://77270701>

        Unreviewed, revert r274767 as it introduced this crash.

        * Modules/webaudio/AudioNodeInput.cpp:
        (WebCore::AudioNodeInput::connect):
        (WebCore::AudioNodeInput::disconnect):
        (WebCore::AudioNodeInput::disable):
        (WebCore::AudioNodeInput::enable):
        (WebCore::AudioNodeInput::bus):
        (WebCore::AudioNodeInput::sumAllConnections):
        (WebCore::AudioNodeInput::pull):
        * Modules/webaudio/AudioNodeInput.h:
        * Modules/webaudio/AudioNodeOutput.cpp:
        (WebCore::AudioNodeOutput::disable):
        (WebCore::AudioNodeOutput::enable):
        * Modules/webaudio/AudioParam.cpp:
        (WebCore::AudioParam::calculateFinalValues):
        * Modules/webaudio/AudioSummingJunction.cpp:
        (WebCore::AudioSummingJunction::addOutput):
        (WebCore::AudioSummingJunction::removeOutput):
        (WebCore::AudioSummingJunction::updateRenderingState):
        (WebCore::AudioSummingJunction::maximumNumberOfChannels const):
        * Modules/webaudio/AudioSummingJunction.h:
        (WebCore::AudioSummingJunction::renderingOutput):
        (WebCore::AudioSummingJunction::renderingOutput const):
        (WebCore::AudioSummingJunction::isConnected const):
        (WebCore::AudioSummingJunction::numberOfConnections const):
        * Modules/webaudio/WebKitAudioPannerNode.cpp:
        (WebCore::WebKitAudioPannerNode::notifyAudioSourcesConnectedToNode):

2021-04-28  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Coalesce adjacent selection geometries when rendering individual selection quads
        https://bugs.webkit.org/show_bug.cgi?id=225054

        Reviewed by Tim Horton.

        Add a heuristic to coalesce adjacent selection geometries when `SelectionRenderingBehavior::UseIndividualQuads`
        is active. Currently, we pass them directly through to the list of coalesced geometries inside
        `RenderObject::collectSelectionGeometries`, but this can lead to almost perfectly adjacent selection quads
        showing a narrow gap in between their selection views.

        Instead, we can detect this case where neighboring quads can be united into a single quad without significantly
        changing the geometry. Rather than append the new selection geometry in this case, we simply adjust the last
        selection geometry's quad so that it encompasses the new selection geometry as well, by extending the top right
        and bottom right extent points of the last selection quad to the new selection quad's extent points.

        See below for more details.

        Test: fast/images/image-extraction/ios/coalesce-selection-rects-in-image-overlay.html

        * html/HTMLElement.h: `WEBCORE_EXPORT` a couple of helper methods.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::collectSelectionGeometriesInternal):

        Avoid sorting selection geometries by bounding rect `logicalLeft` in the case where we're not coalescing
        bounding rects (and also update the preceding comment accordingly).

        (WebCore::coalesceSelectionGeometryWithAdjacentQuadsIfPossible):

        Add a new helper to unite neighboring quads if: (1) the top right and bottom right of the current quad are very
        close to the top left and bottom left of the next quad (respectively), and (2) the angle of rotation of the
        bounding rect of the current quad is very close to that of the next quad.

        (WebCore::RenderObject::collectSelectionGeometries):

        Use the above helper method to either coalesce or append selection geometries to the final vector of coalesced
        geometries.

2021-04-28  Rob Buis  <rbuis@igalia.com>

        [aspect-ratio] Treat border/padding correctly for box-sizing: border-box
        https://bugs.webkit.org/show_bug.cgi?id=225015

        Reviewed by Darin Adler.

        When computing logical height in aspect-ratio case, to compute the automatic
        minimum size [1] for min-height: auto, the padding was always subtracted,
        however it should only be subtracted in the box-sizing: content-box case.

        Test: imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/block-aspect-ratio-035.html

        [1] https://www.w3.org/TR/css-sizing-4/#aspect-ratio-minimum

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeLogicalHeight const):

2021-04-28  Devin Rousso  <drousso@apple.com>

        experiment with averaging sampling colors across the top of the page as the scroll area background
        https://bugs.webkit.org/show_bug.cgi?id=224987
        <rdar://problem/76251889>

        Reviewed by Darin Adler.

        Tests: SampledPageTopColor.ZeroMaxDifference
               SampledPageTopColor.NegativeMaxDifference
               SampledPageTopColor.SolidColor
               SampledPageTopColor.DifferentColorsWithoutOutlierBelowMaxDifference
               SampledPageTopColor.DifferentColorsWithLeftOutlierAboveMaxDifference
               SampledPageTopColor.DifferentColorsWithMiddleOutlierAboveMaxDifference
               SampledPageTopColor.DifferentColorsWithRightOutlierAboveMaxDifference
               SampledPageTopColor.DifferentColorsIndividuallyAboveMaxDifference
               SampledPageTopColor.DifferentColorsCumulativelyAboveMaxDifference
               SampledPageTopColor.DisplayP3
               SampledPageTopColor.ExperimentalUseSampledPageTopColorForScrollAreaBackgroundColor

        * dom/Document.h:
        (WebCore::Document::sampledPageTopColor const): Added.
        * dom/Document.cpp:
        (WebCore::Document::enqueuePaintTimingEntryIfNeeded):
        (WebCore::colorDifference): Added.
        (WebCore::averageColor): Added.
        (WebCore::Document::determineSampledPageTopColor): Added.
        Wait until the first contentful paint before sampling. Don't sample if that location would
        fall into a 3rd-party `<iframe>`. Currently use 5 snapshots across the top of the page,
        allowing for one of either the first or last snapshot to be an outlier, which is not
        included in the average of the other snapshots that's used as the final color value. If the
        Lab color difference between any two snapshots (unless it's the first or last snapshot as
        described above) or across all the (non-outlier) snapshots is too large, bail. Only enabled
        if the `SampledPageTopColorMaxDifference` setting is greater than 0.

        * page/Page.h:
        * page/Page.cpp:
        (WebCore::Page::sampledPageTopColor const): Added.
        * page/ChromeClient.h:
        (WebCore::ChromeClient::didSamplePageTopColor const): Added.
        Pass along the `sampledPageTopColor` to the UIProcess after it's determined or if the above
        logic bails (so that the `WKWebView` can adjust `_sampledPageTopColor` to `nil`).

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::rootBackgroundColorOrTransparencyChanged):
        Use the `sampledPageTopColor` if the `UseSampledPageTopColorForScrollAreaBackgroundColor`
        internal preference is enabled instead of the CSS `background-color` of the `<html>`/`<body>`.

2021-04-28  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Web content process occasionally crashes under VisibleSelection::adjustPositionForEnd
        https://bugs.webkit.org/show_bug.cgi?id=225072
        rdar://77159489

        Reviewed by Darin Adler.

        Remove a helper method that was added in r276688, which we no longer need.

        * dom/Position.h:
        (WebCore::Position::isInTreeScope const): Deleted.

2021-04-28  Cameron McCormack  <heycam@apple.com>

        Don't create custom scrollbars for fullscreen placeholders.
        https://bugs.webkit.org/show_bug.cgi?id=225141
        <rdar://64800098>

        Reviewed by Darin Adler.

        We can end up calling RenderScrollbar::createCustomScrollbar with
        `element = nullptr` from RenderLayerScrollableArea::createScrollbar,
        when the renderer is a RenderFullscreenPlaceholder.

        We don't need to bother with scrollbars for the placeholder, so check to
        make sure we have a valid element before creating custom scollbars.

        Test: fullscreen/full-screen-crash-custom-scrollbars.html

        * rendering/RenderLayerScrollableArea.cpp:
        (WebCore::RenderLayerScrollableArea::createScrollbar):

2021-04-28  Chris Dumez  <cdumez@apple.com>

        Make sure we invalidate the iterator in StorageMap::clear()
        https://bugs.webkit.org/show_bug.cgi?id=225164

        Reviewed by Alex Christensen.

        I recently introduced StorageMap::clear() but failed to call invalidateIterator()
        like we do in other StorageMap functions that modify the internal HashMap. Since
        we cleared the HashMap, we don't want to be keeping a HashMap iterator around.
        Looking at the code, I do not think this can cause crashes because the
        `index >= length()` check would fail in StorageMap::key(unsigned). That said, it
        is best not to keep a bad iterator around.

        * storage/StorageMap.cpp:
        (WebCore::StorageMap::clear):

2021-04-28  Wenson Hsieh  <wenson_hsieh@apple.com>

        Fine-tune some more selection behaviors in image overlays
        https://bugs.webkit.org/show_bug.cgi?id=225121

        Reviewed by Tim Horton.

        Make some additional minor refinements to selection behaviors in image overlays.

        Test:   fast/images/image-extraction/mac/select-image-overlay-with-mouse-drag-2.html
                DragAndDropTests.DragSelectedTextInImageOverlay

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::updateWithImageExtractionResult):

        Unless `-webkit-user-select: none;` is explicitly set, make each of the text containers under each line have
        `-webkit-user-select: all;`, so that text selection snaps to the boundaries of each piece of text.

        * page/DragController.cpp:
        (WebCore::DragController::startDrag):

        Drive-by fix: avoid dragging image overlay text out as rich text.

        * page/EventHandler.cpp:
        (WebCore::nodeToSelectOnMouseDownForNode):

        Make an exception for image overlay text, such that we don't select text upon handling a "mousedown" event, even
        though the text has `-webkit-user-select: all;`. Also, deploy `RefPtr` in a few places while I'm here.

        (WebCore::expandSelectionToRespectSelectOnMouseDown):

        Drive-by fix: deploy `RefPtr` in a few places.

2021-04-28  Alex Christensen  <achristensen@webkit.org>

        Add SPI to query whether a URL would be upgraded to HTTPS
        https://bugs.webkit.org/show_bug.cgi?id=225154
        <rdar://77269904>

        Reviewed by Geoff Garen.

        Covered by API tests.

        * contentextensions/ContentExtensionsBackend.cpp:
        (WebCore::ContentExtensions::ContentExtensionsBackend::shouldBeMadeSecure):
        * contentextensions/ContentExtensionsBackend.h:

2021-04-28  Basuke Suzuki  <basuke.suzuki@sony.com>

        [clang] Remove implicit cast related warnings
        https://bugs.webkit.org/show_bug.cgi?id=225139

        Reviewed by Darin Adler.

        Added explicit cast to suppress warning.
        Behavior is not changed from implicit cast.

        No new tests because there's no behavior change.

        * layout/inlineformatting/InlineLine.cpp:
        (WebCore::Layout::Line::Run::removeTrailingLetterSpacing):

2021-04-28  Mark Lam  <mark.lam@apple.com>

        Fix exception assertions in light of the TerminationException.
        https://bugs.webkit.org/show_bug.cgi?id=225128
        rdar://76694909

        Reviewed by Robin Morisset.

        A few changes plus rebasing bindings test results.

        * Modules/plugins/QuickTimePluginReplacement.mm:
        (WebCore::QuickTimePluginReplacement::installReplacement):
        * bindings/js/JSDOMExceptionHandling.cpp:
        (WebCore::propagateExceptionSlowPath):
        (WebCore::throwNotSupportedError):
        (WebCore::throwInvalidStateError):
        (WebCore::throwSecurityError):
        (WebCore::throwDOMSyntaxError):
        (WebCore::throwDataCloneError):
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSC_DEFINE_HOST_FUNCTION):
        * bindings/js/JSDOMGlobalObjectTask.cpp:
        * bindings/js/JSDOMMapLike.cpp:
        (WebCore::getBackingMap):
        * bindings/js/JSDOMSetLike.cpp:
        (WebCore::getBackingSet):
        * bindings/js/JSMicrotaskCallback.h:
        (WebCore::JSMicrotaskCallback::call):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneDeserializer::readTerminal):
        * bindings/js/WritableStream.cpp:
        (WebCore::WritableStreamInternal::callFunction):
        (WebCore::WritableStream::lock):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GeneratePut):
        (GeneratePutByIndex):
        (GenerateDefineOwnProperty):

        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterNoIdentifier.cpp:
        (WebCore::JSTestNamedAndIndexedSetterNoIdentifier::put):
        (WebCore::JSTestNamedAndIndexedSetterNoIdentifier::putByIndex):
        (WebCore::JSTestNamedAndIndexedSetterNoIdentifier::defineOwnProperty):
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterThrowingException.cpp:
        (WebCore::JSTestNamedAndIndexedSetterThrowingException::put):
        (WebCore::JSTestNamedAndIndexedSetterThrowingException::putByIndex):
        (WebCore::JSTestNamedAndIndexedSetterThrowingException::defineOwnProperty):
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterWithIdentifier.cpp:
        (WebCore::JSTestNamedAndIndexedSetterWithIdentifier::put):
        (WebCore::JSTestNamedAndIndexedSetterWithIdentifier::putByIndex):
        (WebCore::JSTestNamedAndIndexedSetterWithIdentifier::defineOwnProperty):
        * bindings/scripts/test/JS/JSTestNamedSetterNoIdentifier.cpp:
        (WebCore::JSTestNamedSetterNoIdentifier::put):
        (WebCore::JSTestNamedSetterNoIdentifier::putByIndex):
        (WebCore::JSTestNamedSetterNoIdentifier::defineOwnProperty):
        * bindings/scripts/test/JS/JSTestNamedSetterThrowingException.cpp:
        (WebCore::JSTestNamedSetterThrowingException::put):
        (WebCore::JSTestNamedSetterThrowingException::putByIndex):
        (WebCore::JSTestNamedSetterThrowingException::defineOwnProperty):
        * bindings/scripts/test/JS/JSTestNamedSetterWithIdentifier.cpp:
        (WebCore::JSTestNamedSetterWithIdentifier::put):
        (WebCore::JSTestNamedSetterWithIdentifier::putByIndex):
        (WebCore::JSTestNamedSetterWithIdentifier::defineOwnProperty):
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetter.cpp:
        (WebCore::JSTestNamedSetterWithIndexedGetter::put):
        (WebCore::JSTestNamedSetterWithIndexedGetter::putByIndex):
        (WebCore::JSTestNamedSetterWithIndexedGetter::defineOwnProperty):
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetterAndSetter.cpp:
        (WebCore::JSTestNamedSetterWithIndexedGetterAndSetter::put):
        (WebCore::JSTestNamedSetterWithIndexedGetterAndSetter::putByIndex):
        (WebCore::JSTestNamedSetterWithIndexedGetterAndSetter::defineOwnProperty):
        * bindings/scripts/test/JS/JSTestNamedSetterWithLegacyUnforgeableProperties.cpp:
        (WebCore::JSTestNamedSetterWithLegacyUnforgeableProperties::put):
        (WebCore::JSTestNamedSetterWithLegacyUnforgeableProperties::putByIndex):
        (WebCore::JSTestNamedSetterWithLegacyUnforgeableProperties::defineOwnProperty):

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::didAddUserAgentShadowRoot):
        (WebCore::HTMLMediaElement::updateMediaControlsAfterPresentationModeChange):
        (WebCore::HTMLMediaElement::getCurrentMediaControlsStatus):

2021-04-28  Zalan Bujtas  <zalan@apple.com>

        Remove redundant RenderObject::isInFlowRenderFragmentedFlow
        https://bugs.webkit.org/show_bug.cgi?id=225152

        Reviewed by Antti Koivisto.

        Now that RenderObject::isOutOfFlowRenderFragmentedFlow() is gone (r276707), isInFlowRenderFragmentedFlow() is really just a isRenderFragmentedFlow() check.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::selectionGaps):
        (WebCore::isChildHitTestCandidate):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::updateStylesForColumnChildren):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::skipContainingBlockForPercentHeightCalculation const):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::canHaveOutsideFragmentRange const):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::shouldBeNormalFlowOnly const):
        (WebCore::RenderLayer::updateLayerPositions):
        (WebCore::RenderLayer::updatePagination):
        (WebCore::RenderLayer::calculateClipRects const):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isRenderGrid const):
        (WebCore::RenderObject::isInFlowRenderFragmentedFlow const): Deleted.
        * rendering/updating/RenderTreeBuilderMultiColumn.cpp:
        (WebCore::RenderTreeBuilder::MultiColumn::multiColumnDescendantInserted):

2021-04-28  Youenn Fablet  <youenn@apple.com>

        Set audio transceiver nMax to 1
        https://bugs.webkit.org/show_bug.cgi?id=225149
        <rdar://75956639>

        Reviewed by Alex Christensen.

        Implement step 8.4 of https://w3c.github.io/webrtc-pc/#dom-rtcpeerconnection-addtransceiver and set nMax for audio to 1.

        Test: webrtc/audio-addTransceiver.html

        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::createTransceiverBackends):
        (WebCore::LibWebRTCMediaEndpoint::addTransceiver):
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h:
        * Modules/mediastream/libwebrtc/LibWebRTCUtils.cpp:
        (WebCore::fromRtpTransceiverInit):
        * Modules/mediastream/libwebrtc/LibWebRTCUtils.h:

2021-04-28  Chris Dumez  <cdumez@apple.com>

        Drop ModernUnprefixedWebAudio & AudioWorklet experimental feature flags
        https://bugs.webkit.org/show_bug.cgi?id=225130

        Reviewed by Eric Carlson.

        Drop ModernUnprefixedWebAudio & AudioWorklet experimental feature flags now that
        these features have shipped. It also doesn't make sense to disable them given
        that the prefixed WebAudio API is no longer exposed and there is no feature flag
        to turn the legacy prefixed API back on.

        * Modules/webaudio/AnalyserNode.idl:
        * Modules/webaudio/AudioBuffer.idl:
        * Modules/webaudio/AudioBufferSourceNode.idl:
        * Modules/webaudio/AudioContext.idl:
        * Modules/webaudio/AudioParamMap.idl:
        * Modules/webaudio/AudioProcessingEvent.idl:
        * Modules/webaudio/AudioWorklet.idl:
        * Modules/webaudio/AudioWorkletNode.idl:
        * Modules/webaudio/AudioWorkletNodeOptions.idl:
        * Modules/webaudio/BaseAudioContext.idl:
        * Modules/webaudio/BiquadFilterNode.idl:
        * Modules/webaudio/ChannelMergerNode.idl:
        * Modules/webaudio/ChannelSplitterNode.idl:
        * Modules/webaudio/ConstantSourceNode.idl:
        * Modules/webaudio/ConstantSourceOptions.idl:
        * Modules/webaudio/ConvolverNode.idl:
        * Modules/webaudio/DelayNode.idl:
        * Modules/webaudio/DynamicsCompressorNode.idl:
        * Modules/webaudio/GainNode.idl:
        * Modules/webaudio/IIRFilterNode.idl:
        * Modules/webaudio/MediaElementAudioSourceNode.idl:
        * Modules/webaudio/MediaStreamAudioDestinationNode.idl:
        * Modules/webaudio/MediaStreamAudioSourceNode.idl:
        * Modules/webaudio/OfflineAudioContext.idl:
        * Modules/webaudio/OscillatorNode.idl:
        * Modules/webaudio/PannerNode.idl:
        * Modules/webaudio/PeriodicWave.idl:
        * Modules/webaudio/StereoPannerNode.idl:
        * Modules/webaudio/WaveShaperNode.idl:

2021-04-28  Zalan Bujtas  <zalan@apple.com>

        Remove unused RenderObject::isOutOfFlowRenderFragmentedFlow
        https://bugs.webkit.org/show_bug.cgi?id=225133

        Reviewed by Simon Fraser.

        Out-of-flow fragmented flows were originally added for CSS regions (r91760) to provide
        an anonymous container for the region content. This is not to be confused with a multi-column box with
        "position: absolute/fixed" (such content would still generate an in-flow fragment container).

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeVisibleRectInContainer const):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::mapAbsoluteToLocalPoint const):
        * rendering/RenderElement.h:
        (WebCore::RenderElement::canContainFixedPositionObjects const):
        * rendering/RenderLayer.cpp:
        (WebCore::accumulateOffsetTowardsAncestor):
        (WebCore::RenderLayer::hitTestContents const):
        (WebCore::RenderLayer::calculateClipRects const):
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::isRenderFragmentedFlow const):
        (WebCore::RenderLayer::isOutOfFlowRenderFragmentedFlow const): Deleted.
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isInFlowRenderFragmentedFlow const):
        (WebCore::RenderObject::isOutOfFlowRenderFragmentedFlow const): Deleted.

2021-04-28  Miguel Gomez  <magomez@igalia.com>

        Unreviewed, fixing GTK and WPE build with external holepunch enabled after r269907.

        * platform/graphics/holepunch/MediaPlayerPrivateHolePunch.h: update signature of load method.

2021-04-28  Manuel Rego Casasnovas  <rego@igalia.com>

        [selectors] Using a modifier key on an element makes it stop matching :focus-visible
        https://bugs.webkit.org/show_bug.cgi?id=225075

        Reviewed by Ryosuke Niwa.

        When we used a modifier key on a element that was matching :focus-visible, we stopped matching :focus-visible.
        That was wrong, we shouldn't just start matching :focus-visible when a modifier key is used but not the other way around.

        This patches fixed that without doing any work if the element is already matching :focus-visible when the user type a key.

        Test: imported/w3c/web-platform-tests/css/selectors/focus-visible-021.html

        * dom/Element.cpp:
        (WebCore::shouldAlwaysHaveFocusVisibleWhenFocused): Helper method for inputs and content editable elements.
        (WebCore::Element::setFocus): Use the new helper method.
        (WebCore::Element::setHasFocusVisible): Add asserts to avoid setting/unsetting :focus-visible flag wrongly.
        * dom/Node.cpp:
        (WebCore::Node::isContentEditable const): Just mark as const.
        (WebCore::Node::isContentRichlyEditable const): Ditto.
        * dom/Node.h: Ditto.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::internalKeyEvent): Don't do anything regarding :focus-visible flag if the element already matches :focus-visible.

2021-04-28  Cameron McCormack  <heycam@apple.com>

        Make img elements perform source selection even when not in the document.
        https://bugs.webkit.org/show_bug.cgi?id=222801

        Reviewed by Ryosuke Niwa.

        The rules for image source selection in the HTML spec do not prevent
        them from running when an <img> is not in the document.  So we update
        HTMLImageElement to call selectImageSource() when inserted into and
        removed from a <picture> without checking whether it's in a document.

        Test: imported/w3c/web-platform-tests/html/semantics/embedded-content/the-img-element/source-media-outside-doc.html

        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::~HTMLImageElement): Remove useless call to
        setPictureElement, since all it does is clear a weak pointer.
        (WebCore::HTMLImageElement::insertedIntoAncestor):
        (WebCore::HTMLImageElement::removedFromAncestor):

2021-04-28  Ian Gilbert  <iang@apple.com>

        Use a WeakHashSet for Document::m_mediaElements
        https://bugs.webkit.org/show_bug.cgi?id=225082

        Reviewed by Ryosuke Niwa.

        Refactoring to use weak pointer instead of raw pointer.
        No observable change of behavior.

        * dom/Document.cpp:
        (WebCore::Document::registerMediaElement):
        (WebCore::Document::unregisterMediaElement):
        (WebCore::Document::forEachMediaElement):
        * dom/Document.h:

2021-04-27  Basuke Suzuki  <basuke.suzuki@sony.com>

        [PlayStation] Suppress warnings for %llu format specifier for uint64_t.
        https://bugs.webkit.org/show_bug.cgi?id=225138

        Reviewed by Darin Adler.

        PRIu64 from <cstdint> should be use to format uint64_t value in printf.

        No new tests because there's no behavior change.

        * workers/service/server/SWServerWorker.cpp:
        (WebCore::SWServerWorker::startTermination):

2021-04-27  Chris Dumez  <cdumez@apple.com>

        Improve local storage size estimation for quota limitation
        https://bugs.webkit.org/show_bug.cgi?id=225123

        Reviewed by Alex Christensen.

        Improve local storage size estimation for quota limitation:
        - Rely on String::sizeInBytes() to compute the String size, instead of using
          String::length() * sizeof(UChar)
        - Make estimation consistent between StorageMap & LocalStorageDatabase

        * storage/StorageMap.cpp:
        (WebCore::StorageMap::setItem):
        (WebCore::StorageMap::setItemIgnoringQuota):
        (WebCore::StorageMap::removeItem):
        (WebCore::StorageMap::clear):
        (WebCore::StorageMap::importItems):
        (WebCore::StorageMap::Impl::copy const):
        * storage/StorageMap.h:

2021-04-27  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Web content process occasionally crashes under VisibleSelection::adjustPositionForEnd
        https://bugs.webkit.org/show_bug.cgi?id=225072
        rdar://77159489

        Reviewed by Darin Adler.

        Add a helper method to check whether or not the given `Position` is in a tree scope. See WebKit/ChangeLog for
        more details.

        Test: editing/selection/ios/clear-selection-while-moving-selection-handles.html

        * dom/Position.h:
        (WebCore::Position::isInTreeScope const):

2021-04-27  Cameron McCormack  <heycam@apple.com>

        Associate a picture element with an img only if the img is a direct child.
        https://bugs.webkit.org/show_bug.cgi?id=225044

        Reviewed by Ryosuke Niwa.

        Test: imported/w3c/web-platform-tests/html/semantics/embedded-content/the-img-element/img-picture-ancestor.html

        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::insertedIntoAncestor):
        (WebCore::HTMLImageElement::removedFromAncestor):
        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::createHTMLElementOrFindCustomElementInterface):

2021-04-27  Chris Dumez  <cdumez@apple.com>

        IPC::decoder::decode() should mark decoder as invalid when failing
        https://bugs.webkit.org/show_bug.cgi?id=225117

        Reviewed by Darin Adler.

        IPC::decoder::decode() should mark decoder as invalid when failing, instead of relying
        on individual type decoders to do so. This makes type decoders a bit simpler and less
        error-prone.

        * Modules/highlight/AppHighlight.h:
        (WebCore::AppHighlight::decode):

2021-04-27  Alex Christensen  <achristensen@webkit.org>

        charset in contentType used in Blob.prototype.slice(start, end, contentType) is lost
        https://bugs.webkit.org/show_bug.cgi?id=225057

        Reviewed by Chris Dumez.

        When calling Blob.slice, use the content type from the call, not from the sliced-from blob.
        This matches Chrome and Firefox.

        When no content type is given, browsers disagree on what happens, so keep existing behavior in that case.

        Test: fast/files/blob-content-type.html

        * fileapi/Blob.cpp:
        (WebCore::Blob::Blob):
        * fileapi/ThreadableBlobRegistry.cpp:
        (WebCore::ThreadableBlobRegistry::registerBlobURLForSlice):
        * fileapi/ThreadableBlobRegistry.h:
        * platform/network/BlobRegistry.h:
        * platform/network/BlobRegistryImpl.cpp:
        (WebCore::BlobRegistryImpl::registerBlobURLForSlice):
        * platform/network/BlobRegistryImpl.h:

2021-04-27  Alexey Shvayka  <shvaikalesh@gmail.com>

        [JSC] Remove defaultValue() from the method table
        https://bugs.webkit.org/show_bug.cgi?id=225032

        Reviewed by Darin Adler.

        Test: platform/mac/fast/dom/objc-wrapper-toprimitive.html

        * bindings/js/JSPluginElementFunctions.cpp:
        (WebCore::pluginElementCustomGetOwnPropertySlot):
        * bridge/objc/objc_runtime.h:
        * bridge/objc/objc_runtime.mm:
        (JSC::Bindings::ObjcFallbackObjectImp::finishCreation):
        (JSC::Bindings::ObjcFallbackObjectImp::getOwnPropertySlot):
        (JSC::Bindings::JSC_DEFINE_HOST_FUNCTION):
        (JSC::Bindings::ObjcFallbackObjectImp::defaultValue): Deleted.
        * bridge/runtime_object.cpp:
        (JSC::Bindings::RuntimeObject::finishCreation):
        (JSC::Bindings::RuntimeObject::getOwnPropertySlot):
        (JSC::Bindings::JSC_DEFINE_HOST_FUNCTION):
        (JSC::Bindings::RuntimeObject::defaultValue): Deleted.
        * bridge/runtime_object.h:

2021-04-27  Chris Dumez  <cdumez@apple.com>

        Copy-on-write semantics should be an internal implementation detail of StorageMap
        https://bugs.webkit.org/show_bug.cgi?id=225108

        Reviewed by Alex Christensen.

        Instead of making the StorageMap RefCounted and requiring the client to potentially
        replace its StorageMap whenever it calls functions that modify the StorageMap, the
        copy-on-write semantics in now an internal implementation detail of StorageMap.

        To achieve this, the following changes were made:
        - StorageMap is no longer RefCounted. Instead, it has an internal Impl data member
          that is RefCounted.
        - The internal Impl data member is the one that gets copied on write.
        - Functions that modify the StorageMap no longer need to return a StorageMap.
        - Add a clear() function for convenience.

        * storage/StorageMap.cpp:
        (WebCore::StorageMap::StorageMap):
        (WebCore::StorageMap::invalidateIterator):
        (WebCore::StorageMap::setIteratorToIndex):
        (WebCore::StorageMap::length const):
        (WebCore::StorageMap::key):
        (WebCore::StorageMap::getItem const):
        (WebCore::StorageMap::setItem):
        (WebCore::StorageMap::setItemIgnoringQuota):
        (WebCore::StorageMap::removeItem):
        (WebCore::StorageMap::clear):
        (WebCore::StorageMap::contains const):
        (WebCore::StorageMap::importItems):
        (WebCore::StorageMap::Impl::copy const):
        * storage/StorageMap.h:
        (WebCore::StorageMap::items const):
        (WebCore::StorageMap::Impl::create):

2021-04-27  Aditya Keerthi  <akeerthi@apple.com>

        [iOS][FCR] Add borders for better control visibility
        https://bugs.webkit.org/show_bug.cgi?id=225058
        <rdar://problem/77161616>

        Reviewed by Sam Weinig.

        The solid gray backgrounds of new form controls have poor visibility on
        site's that have gray-ish backgrounds or draw the controls on top of
        a gray area. To fix this, borders are added to all controls to ensure
        visibility no matter the background.

        The border color is the system background color. This means the border
        is invisible on white backgrounds in light mode, and dark backgrounds
        in dark mode, ensuring the controls match UIKit styles on backgrounds
        where they are guaranteed to be visible. However, these borders are
        visible when the page/area background has a similar color to the control
        background, improving control visibility.

        To paint the borders, a mix of UA stylesheet changes and custom painting
        changes are used. This approach is taken to maintain our existing level
        of stylability. UA stylesheet changes were applied to controls that
        specified a "1px solid black" border in the old design. The border is
        now brought back, but with a different color. For controls that have
        always had completely custom painting (independent of styles), the
        border is painted by the theme.

        * css/html.css:

        Specify a "1px solid -webkit-control-background" border on controls
        that previously (pre-redesign) specified a border in the UA stylesheet.

        * css/legacyFormControlsIOS.css:
        (select:focus):

        Move the <select> focus style into the legacy stylesheet, since it
        should not apply to the new design.

        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::paintCheckbox):

        Paint the checkbox border inside the painting rect, and inset the
        actual checkbox by the border. This is necessary, checkboxes use
        "box-sizing: border-box", and we do not want to increase the overall
        size of checkboxes for compatibility reasons.

        (WebCore::RenderThemeIOS::paintRadio):

        Painted in a similar manner as checkboxes.

        (WebCore::RenderThemeIOS::paintProgressBarWithFormControlRefresh):
        (WebCore::RenderThemeIOS::paintMeter):
        (WebCore::RenderThemeIOS::paintSliderTrackWithFormControlRefresh):

        Slider tracks are already inset by the border size, so we can just
        draw a border in the available area.

2021-04-27  Alexey Shvayka  <shvaikalesh@gmail.com>

        [WebIDL] `window.CSS` should be non-callable object with correct Symbol.toStringTag
        https://bugs.webkit.org/show_bug.cgi?id=220855

        Reviewed by Sam Weinig.

        Although `window.CSS` is the only namespace object currently handled by code generator,
        it's being extended by multiple Houdini specs [1], so keeping it generated is important.

        This patch brings spec compliance [2] and web interop while striking a balance between
        reducing generated code, avoiding indirection in the generator, and a small code diff.

        Feature-wise, a namespace object is a subset of an interface; so instead of creating a
        separate harness for it, like for callback interfaces, namespace objects are converted
        to interfaces before being handed over to code generator, with a flag on.

        While we can reduce the generated code even further, namely around subspaceForImpl(),
        this change rather aligns namespace objects with [JSBuiltin] interfaces to avoid making
        generator more complicated and introducing an interface with distinct set of methods.

        Web-facing changes for `window.CSS` are:

          1. Removed [[Call]] and [[Construct]] methods, making `typeof CSS` return "object",
             which is used for feature detection (thus important for web interop).
          2. Removed "length" / "name" / "prototype" properties.
          3. Changed [[Prototype]] value to %Object.prototype%.
          4. Added Symbol.toStringTag property with correct descriptor.

        All of the above were proven web-compatible by Blink and Gecko.

        Also, this patch limits the usage of NeedsConstructorProperty only to
        %Interface%.prototype.constructor, as its name suggests.

        [1] https://ishoudinireadyyet.com
        [2] https://heycam.github.io/webidl/#namespace-object

        Tests: imported/w3c/web-platform-tests/css/cssom/idlharness.html
               imported/w3c/web-platform-tests/css/cssom/CSS-namespace-object-class-string.html

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMConstructorNotCallable.h: Added.
        (WebCore::JSDOMConstructorNotCallable::subspaceFor):
        (WebCore::JSDOMConstructorNotCallable::JSDOMConstructorNotCallable):
        (WebCore::JSDOMConstructorNotCallable::initializeProperties):
        (WebCore::JSDOMConstructorNotCallable<JSClass>::create):
        (WebCore::JSDOMConstructorNotCallable<JSClass>::createStructure):
        (WebCore::JSDOMConstructorNotCallable<JSClass>::finishCreation):
        * bindings/scripts/CodeGeneratorJS.pm:
        (NeedsImplementationClass):
        (GenerateHeader):
        (GenerateImplementation):
        (GeneratePrototypeDeclaration):
        (GetConstructorTemplateClassName):
        (GenerateConstructorHelperMethods):
        (NeedsConstructorProperty):
        * bindings/scripts/IDLAttributes.json:
        * bindings/scripts/IDLParser.pm:
        (convertNamespaceToInterface):
        (Parse):
        (parseNamespace):
        * bindings/scripts/preprocess-idls.pl:
        (containsInterfaceOrCallbackInterfaceFromIDL):
        (getInterfaceExtendedAttributesFromIDL):
        * bindings/scripts/test/JS/*: Updated.
        * css/DOMCSSNamespace+CSSPainting.idl:
        * css/DOMCSSNamespace+CSSPropertiesandValues.idl:
        * css/DOMCSSNamespace.idl:

2021-04-27  Chris Dumez  <cdumez@apple.com>

        Don't keep local storage data in memory in the NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=225065

        Reviewed by Alex Christensen.

        * platform/sql/SQLiteDatabase.h:
        * platform/sql/SQLiteFileSystem.h:
        Export a couple more symbols.

        * storage/StorageMap.cpp:
        (WebCore::StorageMap::clear):
        * storage/StorageMap.h:
        Add a clear() function to StorageMap so that StorageArea doesn't reconstruct a
        new StorageMap object unnecessarily when:
        - The StorageMap is not shared
        - The StorageMap is empty (and clear() is a no-op)

2021-04-27  Youenn Fablet  <youenn@apple.com>

        SWContextManager::postMessageToServiceWorker should check for valid service worker
        https://bugs.webkit.org/show_bug.cgi?id=225096
        <rdar://76718162>

        Reviewed by Chris Dumez.

        There is no guarantee that serviceWorker is not null.
        For instance UIProcess may ask WebProcess to terminate all service workers in parallel to network process sending a message to it.

        * workers/service/context/SWContextManager.cpp:
        (WebCore::SWContextManager::postMessageToServiceWorker):

2021-04-27  Chris Dumez  <cdumez@apple.com>

        Ask LocalStorage database to free as much memory as possible on memory pressure
        https://bugs.webkit.org/show_bug.cgi?id=225109

        Reviewed by Geoffrey Garen.

        Add releaseMemory() function to SQLiteDatabase that calls sqlite3_db_release_memory()
        to free as much memory as possible.

        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::releaseMemory):
        * platform/sql/SQLiteDatabase.h:

2021-04-27  Brent Fulgham  <bfulgham@apple.com>

        [iOS] [GPU] The UI process should issue the mach sandbox extension to 'com.apple.AGXCompilerService' 
        https://bugs.webkit.org/show_bug.cgi?id=225004
        <rdar://problem/68362930>

        Reviewed by Darin Adler.

        In Bug 203915 and Bug 210616 we did work to only extend access to AGX-related graphics facilities on relevant hardware. This was
        lost in the transition to the GPU Process and should be added back.

        This change moves the definition of the AGX-related services and IOKit classes to the AGXCompilerService compilation unit so that
        it can be shared by the WebContent and GPUProcess code paths.

        Tested by existing graphics tests.

        * platform/cocoa/AGXCompilerService.cpp:
        (WebCore::agxCompilerServices):
        (WebCore::agxCompilerClasses):
        * platform/cocoa/AGXCompilerService.h:

2021-04-27  Antoine Quint  <graouts@webkit.org>

        Correctly interpolate stroke-dasharray in the discrete case
        https://bugs.webkit.org/show_bug.cgi?id=225105

        Reviewed by Antti Koivisto.

        * animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFunc):

2021-04-27  Antoine Quint  <graouts@webkit.org>

        Fix animation of the visibility CSS property between "hidden" and "collapse"
        https://bugs.webkit.org/show_bug.cgi?id=225103

        Reviewed by Antti Koivisto.

        The Web Animations spec details the special behavior when animating the visibility property
        in https://drafts.csswg.org/web-animations-1/#animating-visibility. There it says that when
        interpolating between non-visible values, we should use discrete interpolation formula.

        * animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFunc):

2021-04-27  Antoine Quint  <graouts@webkit.org>

        Correctly specify interpolation of page-break-* properties
        https://bugs.webkit.org/show_bug.cgi?id=225098

        Reviewed by Antti Koivisto.

        As it turns out the page-break-* properties are shorthands of the break-* properties.

        * animation/CSSPropertyAnimation.cpp:
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):

2021-04-27  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] ASSERTION FAILED: ancestor->style().columnSpan() != ColumnSpan::All || !isValidColumnSpanner(fragmentedFlow, *ancestor) in WebCore::isValidColumnSpanner
        https://bugs.webkit.org/show_bug.cgi?id=225078
        <rdar://76127681>

        Reviewed by Antti Koivisto.

        MultiColumnBuilder::multiColumnDescendantInserted() expects up-to-date fragmentedFlowState on the newly inserted renderer.

        Test: fast/multicol/nested-spanner-assert.html

        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::normalizeTreeAfterStyleChange):
        (WebCore::RenderTreeBuilder::childFlowStateChangesAndAffectsParentBlock):

2021-04-21  Sergio Villar Senin  <svillar@igalia.com>

        [css-flexbox] percent children don't resolve against the flex basis on a fully inflexible item with fixed flex-basis
        https://bugs.webkit.org/show_bug.cgi?id=210478

        Reviewed by Darin Adler.

        Flexbox spec defines some additional cases where sizes could be considered definite despite they are
        actually indefinite. One of those cases is whenever we have a fully inflexible item with a definite
        flex-basis. In that case we should allow desdendants of flex item to resolve against the post-flexing
        size of the flex item which is basically the value of the definite flex-basis. Note that in the majority
        of cases those percentages are resolved before flexing the item and not recomputed after that.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::useChildOverridingMainSizeForPercentageResolution): let descendants of
        fully inflexible flex items with definite flex-basis to resolve against the post-flexing size. Also added
        some documentation because that part of the code is far from obvious for the casual reader.

2021-04-27  Youenn Fablet  <youenn@apple.com>

        Add memory allocation checks in more realtime audio capture/rendering places
        https://bugs.webkit.org/show_bug.cgi?id=224750

        Reviewed by Eric Carlson.

        Add FastMalloc macros to catch memory allocation in audio sensitive threads.
        Update LibWebRTCAudioModule and RealtimeIncomingAudioSourceCocoa to not rely on Function creation but rely on Timer for large audio gap logging.
        Update BaseAudioSharedUnit to not allocate a vector each time an audio sample is captured.

        Covered by existing tests.

        * platform/mediastream/RealtimeIncomingAudioSource.h:
        * platform/mediastream/libwebrtc/LibWebRTCAudioModule.cpp:
        (WebCore::LibWebRTCAudioModule::LibWebRTCAudioModule):
        (WebCore::LibWebRTCAudioModule::StartPlayout):
        (WebCore::LibWebRTCAudioModule::StopPlayout):
        (WebCore::LibWebRTCAudioModule::logTimerFired):
        (WebCore::LibWebRTCAudioModule::computeDelayUntilNextPolling):
        (WebCore::LibWebRTCAudioModule::pollAudioData):
        * platform/mediastream/libwebrtc/LibWebRTCAudioModule.h:
        * platform/mediastream/mac/AudioMediaStreamTrackRendererCocoa.cpp:
        (WebCore::AudioMediaStreamTrackRendererCocoa::pushSamples):
        * platform/mediastream/mac/BaseAudioSharedUnit.cpp:
        (WebCore::BaseAudioSharedUnit::addClient):
        (WebCore::BaseAudioSharedUnit::removeClient):
        (WebCore::BaseAudioSharedUnit::audioSamplesAvailable):
        * platform/mediastream/mac/BaseAudioSharedUnit.h:
        * platform/mediastream/mac/RealtimeIncomingAudioSourceCocoa.cpp:
        (WebCore::RealtimeIncomingAudioSourceCocoa::RealtimeIncomingAudioSourceCocoa):
        (WebCore::RealtimeIncomingAudioSourceCocoa::startProducingData):
        (WebCore::RealtimeIncomingAudioSourceCocoa::stopProducingData):
        (WebCore::RealtimeIncomingAudioSourceCocoa::logTimerFired):
        (WebCore::RealtimeIncomingAudioSourceCocoa::OnData):
        * platform/mediastream/mac/RealtimeIncomingAudioSourceCocoa.h:

2021-04-27  Rob Buis  <rbuis@igalia.com>

        Check globalObject for null
        https://bugs.webkit.org/show_bug.cgi?id=223793

        Reviewed by Youenn Fablet.

        Check globalObject for null in RTCRtpSFrameTransform::createStreams
        before deferencing.

        Test: http/tests/webrtc/sframe-transform-write.html

        * Modules/mediastream/RTCRtpSFrameTransform.cpp:
        (WebCore::RTCRtpSFrameTransform::createStreams):

2021-04-27  Frédéric Wang  <fwang@igalia.com>

        [MathML] Assertion failure in RenderTreeNeedsLayoutChecker
        https://bugs.webkit.org/show_bug.cgi?id=224903

        Reviewed by Alan Bujtas.

        After r226180, RenderMathMLRow no longer performs layout of its "embellished operator"
        children only its core <mo> descendant, which is causing dirty layout.

        Test: mathml/vertical-embellished-op-dirty-layout.html

        * rendering/mathml/RenderMathMLRow.cpp:
        (WebCore::RenderMathMLRow::stretchVerticalOperatorsAndLayoutChildren): always layout the
        "embellished operator" child, after its core <mo>.

2021-04-26  Rob Buis  <rbuis@igalia.com>

        Remove rounding logic in RenderGeometryMap::mapContainer
        https://bugs.webkit.org/show_bug.cgi?id=218577

        Reviewed by Simon Fraser.

        Remove rounding logic in RenderGeometryMap::mapContainer and
        add the LayoutSize to FloatPoint using FloatPoint::move() to
        match what is done in TransformState::translateMappedCoordinates.

        Test: fast/layers/geometry-map-accumulated-offset-assert.html

        * platform/graphics/transforms/TransformState.cpp:
        (WebCore::TransformState::translateMappedCoordinates):
        * rendering/RenderGeometryMap.cpp:
        (WebCore::RenderGeometryMap::mapToContainer const):

2021-04-26  Manuel Rego Casasnovas  <rego@igalia.com>

        REGRESSION (r276264): Reproducible crash in WebCore::UserActionElementSet::clearFlags
        https://bugs.webkit.org/show_bug.cgi?id=224957

        Reviewed by Ryosuke Niwa.

        The crash was due to a problem with the focus and focus-visible flags getting out of sync.
        The problem was related to how we deal we script focus in Element::focus(),
        we were setting the focus-visible flag before doing focus,
        and if the element was moved to a different document in that process,
        we were resetting the flag for the same element, but pointing to the new document.
        So the old document still kept information about the element and the flag, and it shouldn't.

        This patch is based on a patch by Ryosuke Niwa <rniwa@webkit.org>.
        The approach to solve the issue is to consolidate the timing for both focus and focus-visible flags
        so they don't get out of sync.
        For that we add a new FocusVisibility enum to FocusOptions, and we pass it to Element::setFocus()
        and use it to pass a different value to Element::setHasFocusVisible().

        Test: fast/selectors/focus-visible-crash.html

        * dom/Document.cpp:
        (WebCore::Document::setFocusedElement):
        * dom/Element.cpp:
        (WebCore::Element::setFocus):
        (WebCore::Element::focus):
        * dom/Element.h:
        * dom/FocusOptions.h:
        * html/HTMLAreaElement.cpp:
        (WebCore::HTMLAreaElement::setFocus):
        * html/HTMLAreaElement.h:
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::setFocus):
        * html/HTMLFrameElementBase.h:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::internalKeyEvent):
        * page/FocusController.cpp:
        (WebCore::FocusController::advanceFocusInDocumentOrder):
        * page/FrameView.cpp:
        (WebCore::FrameView::scrollToFragmentInternal):

2021-04-26  Tim Nguyen  <ntim@apple.com>

        Create a containing block when relevant properties are set in the current element will-change
        https://bugs.webkit.org/show_bug.cgi?id=167868

        Reviewed by Alan Bujtas.

        Per spec, any CSS property that is susceptible to create a containing block should create one when put on the
        current element's will-change.

        Relevant WPT are enabled.

        Test: fast/css/will-change/will-change-creates-containing-block.html

        * rendering/RenderElement.h:
        (WebCore::RenderElement::canContainFixedPositionObjects const):
        (WebCore::RenderElement::canContainAbsolutelyPositionedObjects const):
        * rendering/style/WillChangeData.cpp:
        (WebCore::WillChangeData::createsContainingBlockForOutOfFlowPositioned const):
        * rendering/style/WillChangeData.h:

2021-04-26  Wenson Hsieh  <wenson_hsieh@apple.com>

        Subdivide image overlay text into one or more elements per line
        https://bugs.webkit.org/show_bug.cgi?id=225038
        rdar://75505043

        Reviewed by Tim Horton and Devin Rousso.

        Refactor some image extraction and image overlay code to allow for multiple elements containing text per line.
        See comments below for more details.

        Changes covered by augmenting existing layout tests.

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::updateWithImageExtractionResult):

        The crux of this change is in this method. Currently, an image overlay has one or more `div` elements underneath
        the root container element, each of which represents a single line (i.e. contains a text node and a line break).
        Instead, we make each of these line container `div`s contain one or more `div` elements that represent further
        subdivided text within each line.

        See the corresponding additions patch for more details.

        * html/shadow/imageOverlay.css:
        (div#image-overlay):
        (div.image-overlay-line, .image-overlay-text):
        (.image-overlay-text::selection):

        Adjust UA stylesheet to account for the changes in `updateWithImageExtractionResult`.

        (div.image-overlay-text): Deleted.
        (div.image-overlay-text::selection): Deleted.
        * platform/ImageExtractionResult.h:
        (WebCore::ImageExtractionTextData::ImageExtractionTextData):
        (WebCore::ImageExtractionLineData::ImageExtractionLineData):
        (WebCore::ImageExtractionLineData::encode const):
        (WebCore::ImageExtractionLineData::decode):

        Refactor this data structure, by splitting it into `ImageExtractionLineData` and `ImageExtractionTextData`.

        (WebCore::ImageExtractionResult::isEmpty const):
        (WebCore::ImageExtractionResult::encode const):
        (WebCore::ImageExtractionResult::decode):
        * platform/graphics/FloatPoint.h:
        (WebCore::FloatPoint::rotate):

        Add a helper method to rotate a 2D `FloatPoint` by a given angle, about a given point.

        * platform/graphics/GeometryUtilities.cpp:
        (WebCore::rotatedBoundingRectWithMinimumAngleOfRotation):
        (WebCore::rotatedBoundingRect): Deleted.
        * platform/graphics/GeometryUtilities.h:
        * testing/Internals.cpp:
        (WebCore::getQuad):
        (WebCore::makeDataForLine):
        (WebCore::Internals::installImageOverlay):
        * testing/Internals.h:
        * testing/Internals.idl:

        Adjust this internal testing hook to accept a list of `ImageOverlayLine` dictionaries, each of which contains a
        list of `ImageOverlayText` dictionaries.

2021-04-26  Alex Christensen  <achristensen@webkit.org>

        Consistently include headers with <Framework/Header.h>
        https://bugs.webkit.org/show_bug.cgi?id=225067

        Reviewed by Alexey Proskuryakov.

        When building with CMake, if a header is included as <Framework/Header.h> in some files
        and "Header.h" in others, when compiling a cpp file in the same directory as Header.h, 
        there doesn't seem to be a way to tell it to include from the Framework directory before
        searching the same directory as the cpp file.  To solve this, we use consistent include style
        for each header.

        * editing/cocoa/DictionaryLookup.mm:
        * platform/graphics/avfoundation/objc/AVOutputDeviceMenuControllerTargetPicker.mm:
        * platform/graphics/avfoundation/objc/AVRoutePickerViewTargetPicker.mm:
        * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        * platform/graphics/cocoa/GraphicsContextGLOpenGLCocoa.mm:
        * platform/graphics/cocoa/IOSurface.mm:
        * platform/mac/PlatformScreenMac.mm:
        * testing/Internals.cpp:

2021-04-26  Alex Christensen  <achristensen@webkit.org>

        Update Mac-specific CMake files
        https://bugs.webkit.org/show_bug.cgi?id=225064

        Rubber-stamped by Tim Horton.

        * PlatformMac.cmake:

2021-04-26  Said Abou-Hallawa  <said@apple.com>

        Remove redundant frameDetached() from the SVGImage destructor
        https://bugs.webkit.org/show_bug.cgi?id=221616
        <rdar://problem/74149106>

        Reviewed by Chris Dumez.

        SVGImage was originally written such that it has two separate objects:
        a page and a frame; see https://trac.webkit.org/r18470. So it made sense
        at that time to clean up the page and the frame separately. The Frame 
        was cleaned up by telling the frame's loader that the frameDetached().

        This code is not necessary right now since the page owns the main frame.
        And its destructor recursively detaches itself from all the frames.

        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::~SVGImage):

2021-04-26  Fujii Hironori  <Hironori.Fujii@sony.com>

        REGRESSION(r272379) [Win] Some emojis are painted with a blank square on the right side of it
        https://bugs.webkit.org/show_bug.cgi?id=225047

        Reviewed by Don Olmstead.

        imported/w3c/web-platform-tests/mathml/relations/css-styling tests cover this change.

        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::advanceInternal): Don't add the 0 glyphs for Windows too.

2021-04-26  Alexey Shvayka  <shvaikalesh@gmail.com>

        [WebIDL] Remove [CallNamedSetterOnlyForSupportedProperties] extended attribute
        https://bugs.webkit.org/show_bug.cgi?id=225049

        Reviewed by Sam Weinig.

        It was part of the old CSSStyleDeclaration named getter implementation,
        which was removed in r275808.

        No new tests, no behavior change.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateInvokeNamedPropertySetter):
        (GeneratePut):
        (GeneratePutByIndex):
        (GenerateDefineOwnProperty):
        * bindings/scripts/IDLAttributes.json:

2021-04-26  Alexey Shvayka  <shvaikalesh@gmail.com>

        [JSC] OrdinarySet should invoke custom [[Set]] methods
        https://bugs.webkit.org/show_bug.cgi?id=217916

        Reviewed by Yusuke Suzuki.

        Fixes:
          1. Legacy platform object's [[Set]] now guards against altered receiver [1].
             (aligns with Blink).
          2. Direct [[Set]] to window.%Interface% constructor now preserves DontEnum attribute [2].
             (aligns with Blink and Gecko).
          3. Cross-origin non-index put() now throws SecurityError instead of silently failing [3].
             (aligns with Blink and Gecko).

        Refactors:
          1. Simplifies cross-origin JSDOMWindow::put(), aligning it with JSLocation::put().
          2. Replaces lookupPut() with direct setter call in JSRemoteDOMWindow::put().
          3. Removes now unused doPutPropertySecurityCheck() methods.

        Tests: js/dom/script-tests/reflect-set-onto-dom.js
               imported/w3c/web-platform-tests/WebIDL/ecmascript-binding/interface-object-set-receiver.html
               http/tests/security/cross-frame-access-object-getPrototypeOf-in-put.html

        [1] https://heycam.github.io/webidl/#legacy-platform-object-set (step 1)
        [2] https://heycam.github.io/webidl/#define-the-global-property-references (step 3.1.3)
        [3] https://html.spec.whatwg.org/multipage/browsers.html#crossoriginset-(-o,-p,-v,-receiver-) (step 4)

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::put):
        (WebCore::JSDOMWindow::doPutPropertySecurityCheck): Deleted.
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::JSLocation::doPutPropertySecurityCheck): Deleted.
        * bindings/js/JSRemoteDOMWindowCustom.cpp:
        (WebCore::JSRemoteDOMWindow::put):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GeneratePut):
        (GenerateHeader):
        * bindings/scripts/test/JS/*: Updated.
        * bridge/objc/objc_runtime.h:
        * bridge/runtime_array.h:
        * bridge/runtime_object.h:

2021-04-26  Don Olmstead  <don.olmstead@sony.com>

        ANGLE X11 build fixes
        https://bugs.webkit.org/show_bug.cgi?id=225003

        Reviewed by Kenneth Russell.

        X11 headers define a bunch of macros with common terms, interfering with WebCore and WTF
        enum values. As a workaround, we explicitly undef them.

        This is the same fix as the one to GLContext.h in r274869 but applied to the ANGLE headers
        that are including X11.

        * platform/graphics/angle/ANGLEHeaders.h:

2021-04-26  Antti Koivisto  <antti@apple.com>

        Refcount Style::Resolver
        https://bugs.webkit.org/show_bug.cgi?id=225048

        Reviewed by Ryosuke Niwa.

        For safety, and to allow more sharing in the future.

        * css/DOMCSSRegisterCustomProperty.cpp:
        (WebCore::DOMCSSRegisterCustomProperty::registerProperty):
        * dom/Document.cpp:
        (WebCore::Document::userAgentShadowTreeStyleResolver):
        * dom/Document.h:
        * style/StyleResolver.cpp:
        
        Also make the Resolver ISO-allocated.
        
        (WebCore::Style::Resolver::create):
        * style/StyleResolver.h:
        * style/StyleScope.cpp:
        (WebCore::Style::Scope::resolver):
        * style/StyleScope.h:
        * style/StyleTreeResolver.cpp:
        (WebCore::Style::TreeResolver::Scope::Scope):
        (WebCore::Style::TreeResolver::Scope::~Scope):
        (WebCore::Style::TreeResolver::styleForStyleable):
        (WebCore::Style::TreeResolver::resolveElement):
        (WebCore::Style::TreeResolver::resolvePseudoStyle):
        (WebCore::Style::TreeResolver::resolve):
        * style/StyleTreeResolver.h:

2021-04-26  Enrique Ocaña González  <eocanha@igalia.com>

        [GStreamer] media/track/in-band/ layout tests introduced in r154908 are failing
        https://bugs.webkit.org/show_bug.cgi?id=120665

        Reviewed by Philippe Normand.

        Solved a deadlock when processing samples from a text track while the main thread is starting to play.
        In those circumstances, the text sink is set by Playbin as non-async, so the main thread calling
        MediaPlayerPrivateGStreamer::play() is blocked waiting for the preroll to finish. While prerolling,
        a text sample is detected in a non-main thread and sent to the main thread for processing. The current
        code waits in the non-main thread for the processing to finish, but that won't ever happen because
        the main thread is busy in play() waiting for the preroll to complete. Since the non-main thread
        doesn't need any result from the main thread, a simple change to avoid the wait is enough to solve the
        deadlock.

        There was also a bug preventing all the languages of the text tracks being detected on time. Sometimes
        the tag event specifying the track language emitted by the demuxer arrives too late to the
        webkittextcombiner sink pad (up to several seconds since sent!) and the language remains unset when
        the test checks for it. As a result, the test fails because the second track isn't reported to be in
        French language ("fr"). The solution to this is to find an earlier (more upstream) pad and listen
        there for the (sticky) tag events. There can be multiple tag events, so all of them are checked until
        one having the GST_TAG_LANGUAGE_CODE tag is found.

        Covered by existing tests (now unskipped).

        * platform/graphics/gstreamer/TextSinkGStreamer.cpp:
        (webkitTextSinkHandleSample): Don't wait for handleTextSample() to be completed in the main thread. This avoids the deadlock.
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.cpp:
        (WebCore::findBestUpstreamPad): Find a pad more upstream than the current one.
        (WebCore::TrackPrivateBaseGStreamer::TrackPrivateBaseGStreamer): Call setPad() instead of setting it by hand here.
        (WebCore::TrackPrivateBaseGStreamer::setPad): Also manage m_bestUpstreamPad in parallel to m_pad. Add a probe to listen to the tag events instead of checking the "tags" property (the property wasn't present in the best upstream pad).
        (WebCore::TrackPrivateBaseGStreamer::disconnect): Remove the probe from m_bestUpstreamPad, instead of removing the old notify::tags listener from m_pad.
        (WebCore::TrackPrivateBaseGStreamer::tagsChanged): Check the sticky tag events until the language one is found (or the last event if no language event is available).
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.h: Added m_bestUpstreamPad and m_eventProbe. Moved setPad() implementation to the cpp file.

2021-04-26  Ryosuke Niwa  <rniwa@webkit.org>

        Implement ShadowRoot.prototype.delegatesFocus attribute
        https://bugs.webkit.org/show_bug.cgi?id=224805

        Reviewed by Antti Koivisto.

        Added the IDL attribute. Chrome had supported this IDL attribute for ages.

        Test: imported/w3c/web-platform-tests/shadow-dom/focus/ShadowRoot-delegatesFocus.html

        * dom/ShadowRoot.idl:

2021-04-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        embed element with the src attribute set prevents WebKitTestRunner from exiting
        https://bugs.webkit.org/show_bug.cgi?id=223791

        Reviewed by Ryosuke Niwa.

        The problem is that the load never finishes, so WTR keeps waiting for the final message from injected bundle
        that happens when the page is loaded. When the src attribute is changed,
        HTMLPlugInImageElement::updateImageLoaderWithNewURLSoon() is called. That calls
        HTMLPlugInImageElement::scheduleUpdateForAfterStyleResolution() that increases the document load event delay
        count and queues a style post resolution callback. The document load event delay count is decreased in
        HTMLPlugInImageElement::updateAfterStyleResolution(), called by the style post resolution callback. But the
        callback is never called because the embed element is not in tree, and it's never added, keeping the document
        load event delay unbalanced. We should not call scheduleUpdateForAfterStyleResolution() when the element
        is not in render tree, since we know Node::invalidateStyle() will return early and style post resolution
        callbacks will not be called. If the element is added to the tree eventually,
        scheduleUpdateForAfterStyleResolution() will be called by didRecalcStyle, so the image will be loaded.

        Test: fast/images/embed-image-onload-src-change.html

        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::updateImageLoaderWithNewURLSoon):

2021-04-25  ChangSeok Oh  <changseok@webkit.org>

        Fix a crash caused by AVIF decoding failure
        https://bugs.webkit.org/show_bug.cgi?id=223843
        <rdar://problem/76205084>

        Reviewed by Philippe Normand.

        A crash happens when the image count is accessed in AVIFImageDecoder::tryDecodeSize.
        This is because an instance of AVIFImageReader is destroyed by setFailed()
        in AVIFImageReader::parseHeader. Deciding a failure was hasty because
        parsing can fail when necessary data is not received yet. To fix this,
        we call setFailed in AVIFImageReader::parseHeader only when all data is received.

        Test: http/tests/images/avif-partial-load-crash.html

        * platform/image-decoders/avif/AVIFImageDecoder.cpp:
        (WebCore::AVIFImageDecoder::tryDecodeSize):
        * platform/image-decoders/avif/AVIFImageReader.cpp:
        (WebCore::AVIFImageReader::parseHeader):
        (WebCore::AVIFImageReader::repetitionCount const):
        * platform/image-decoders/avif/AVIFImageReader.h:

2021-04-25  Darin Adler  <darin@apple.com>

        Fix handling of overflow of /= and *= operators with double over Checked<uint64_t> and other 64-bit types.
        https://bugs.webkit.org/show_bug.cgi?id=224835

        Reviewed by Chris Dumez.

        * platform/graphics/gpu/cocoa/GPUBindGroupAllocatorMetal.mm:
        (WebCore::GPUBindGroupAllocator::reallocate): Use integer math instead of floating point math to increase
        the size by 25% each time through the loop, staying within the capabilities of our checked integer class.

2021-04-25  Cameron McCormack  <heycam@apple.com>

        Remove templated operator<<(TextStream&, T*) that interferes with raw pointer formatting.
        https://bugs.webkit.org/show_bug.cgi?id=224962

        Reviewed by Darin Adler.

        We can end up calling into this one (which unhelpfully casts its
        argument to intptr_t) instead of the `const void*` one in
        TextStream.h.

        Removing this means we can drop static_cast<const void*>(...) in
        various places in debugging output code.

        * rendering/RenderLayer.cpp:
        (WebCore::outputPaintOrderTreeRecursive):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::RenderTreeAsText::writeRenderObject):
        * rendering/svg/SVGRenderTreeAsText.cpp:
        (WebCore::writeStandardPrefix):
        * rendering/svg/SVGRenderTreeAsText.h:

2021-04-25  Ryosuke Niwa  <rniwa@webkit.org>

        Make more IndexedDB objects iso-heap'ed
        https://bugs.webkit.org/show_bug.cgi?id=225029

        Reviewed by Darin Adler.

        Deployed IsoHeap on more IndexedDB objects.

        * Modules/indexeddb/IDBFactory.cpp:
        * Modules/indexeddb/IDBFactory.h:
        * Modules/indexeddb/IDBGetAllResult.cpp:
        * Modules/indexeddb/IDBGetAllResult.h:
        * Modules/indexeddb/IDBGetResult.cpp:
        * Modules/indexeddb/IDBGetResult.h:
        * Modules/indexeddb/IDBIndex.cpp:
        * Modules/indexeddb/IDBIndex.h:
        * Modules/indexeddb/IDBKey.cpp:
        * Modules/indexeddb/IDBKey.h:
        * Modules/indexeddb/IDBObjectStore.cpp:
        * Modules/indexeddb/IDBObjectStore.h:
        * Modules/indexeddb/IDBRecordIdentifier.h: Removed since it's not used anywhere.
        * Modules/indexeddb/IDBRequest.cpp:
        * Modules/indexeddb/IDBRequest.h:
        * Modules/indexeddb/client/IDBConnectionProxy.cpp:
        * Modules/indexeddb/client/IDBConnectionProxy.h:
        * Modules/indexeddb/client/IDBConnectionToServer.cpp:
        * Modules/indexeddb/client/IDBConnectionToServer.h:
        * Modules/indexeddb/client/TransactionOperation.cpp:
        * Modules/indexeddb/client/TransactionOperation.h:
        * Modules/indexeddb/shared/IDBDatabaseInfo.cpp:
        * Modules/indexeddb/shared/IDBDatabaseInfo.h:
        * WebCore.xcodeproj/project.pbxproj:

2021-04-25  Devin Rousso  <drousso@apple.com>

        Add `ALWAYS_LOG_WITH_STREAM` macro for easier development/debugging
        https://bugs.webkit.org/show_bug.cgi?id=224959

        Reviewed by Darin Adler.

        It's often very helpful to use existing `operator<<` defined on objects, but annoying to
        have to copypaste the boilerplate code that creates a `WTF::TextStream` and uses it in a
        `WTFLogAlways` or wait for a debug build to enable existing `LOG_WITH_STREAM`.

        * platform/Logging.h:
        Move contents of `pal/LogMacros.h` to `wtf/Assertions.h`.

2021-04-25  Felipe Erias  <felipeerias@igalia.com>

        [css-flexbox] Table layout disregards overriding width
        https://bugs.webkit.org/show_bug.cgi?id=224934

        Reviewed by Darin Adler.

        If a table's parent has set an overriding width on it, that value will get preference over the one from
        the table's "width" property. This fixes several tests where the width assigned by the flexbox algorithm
        did not match the width of the table after layout.
        
        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::applyPreferredLogicalWidthQuirks const): Give precedence to the element's
        overriding width if it has been set.
        
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::updateLogicalWidth): Give precedence to the element's overriding width if it
        has been set, instead of discarding it if it is smaller than the style width.
        (WebCore::RenderTable::computePreferredLogicalWidths): Take the overriding width into account when
        computing the preferred min/max values for the element.

2021-04-25  Tyler Wilcock  <twilco.o@protonmail.com>

        css-contain category missing from CSSProperties.json
        https://bugs.webkit.org/show_bug.cgi?id=224990

        Reviewed by Darin Adler.

        * css/CSSProperties.json:
        Add missing css-contain category to avoid style lint errors.  Example
        error:

        ERROR: Source/WebCore/css/CSSProperties.json:0:  property "contain" has category "css-contain" which is not in the set of categories.  [json/syntax] [5]

2021-04-24  Ryosuke Niwa  <rniwa@webkit.org>

        Deploy Ref/RefPtr in DeleteSelectionCommand
        https://bugs.webkit.org/show_bug.cgi?id=225028

        Reviewed by Wenson Hsieh.

        Deployed smart pointers in DeleteSelectionCommand.

        Also deployed ScriptDisallowedScope around the code which accesses the render tree.

        No new tests since there should be no observable behavioral differences.

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::isTableRowEmpty):
        (WebCore::isSpecialHTMLElement): Moved from Editing.cpp.
        (WebCore::firstInSpecialElement): Ditto.
        (WebCore::lastInSpecialElement): Ditto.
        (WebCore::positionBeforeContainingSpecialElement): Ditto. Now returns a pair instead of returning
        Position and "returning" the special element via an out argument.
        (WebCore::positionAfterContainingSpecialElement): Ditto.
        (WebCore::DeleteSelectionCommand::initializeStartEnd):
        (WebCore::DeleteSelectionCommand::initializePositionData):
        (WebCore::DeleteSelectionCommand::handleSpecialCaseBRDelete):
        (WebCore::firstEditablePositionInNode):
        (WebCore::DeleteSelectionCommand::insertBlockPlaceholderForTableCellIfNeeded):
        (WebCore::DeleteSelectionCommand::removeNode):
        (WebCore::DeleteSelectionCommand::handleGeneralDelete):
        (WebCore::DeleteSelectionCommand::mergeParagraphs):
        (WebCore::DeleteSelectionCommand::removePreviouslySelectedEmptyTableRows):
        (WebCore::DeleteSelectionCommand::originalStringForAutocorrectionAtBeginningOfSelection):
        (WebCore::DeleteSelectionCommand::doApply):
        * editing/Editing.cpp:
        (WebCore::isRenderedTable): Return false when the node is not a HTMLElement for consistency.
        (WebCore::isSpecialHTMLElement): Moved to DeleteSelectionCommand.cpp.
        (WebCore::firstInSpecialElement): Ditto.
        (WebCore::lastInSpecialElement): Ditto.
        (WebCore::positionBeforeContainingSpecialElement): Ditto.
        (WebCore::positionAfterContainingSpecialElement): Ditto.
        * editing/Editing.h:

2021-04-24  Tim Horton  <timothy_horton@apple.com>

        Changing the source of a model element with clipping applied does not update the model
        https://bugs.webkit.org/show_bug.cgi?id=224917

        Reviewed by Simon Fraser.

        Tests: model-element/model-element-contents-layer-updates-with-clipping.html
               model-element/model-element-contents-layer-updates.html

        Previously, a <model> with a contents clipping layer (e.g. border-radius)
        would not reparent its contents layer in the right place when setContentsToModel
        was called again (because the source changed), leaving the old model
        contents layer in place.
        
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::updateSublayerList):
        Ensure that updateSublayerList always parents contentsLayer in one of its two homes:
        under contentsClippingLayer, if it exists; otherwise, directly under the primary layer.

        (WebCore::GraphicsLayerCA::setContentsToModel):
        Drive-by fix a bug revealed by the tests for this patch: when swapping out the
        contents layer in setContentsToModel, we also need to mark ContentsRectsChanged,
        or the new contents layer will not get its bounds set during the subsequent flush.

        (WebCore::GraphicsLayerCA::setContentsToPlatformLayer):
        Remove special-case code that was added to fix this bug just for setContentsToPlatformLayer;
        this case is now correctly handled for all contents layers by updateSublayerList.

        (WebCore::GraphicsLayerCA::dumpInnerLayer const):
        * platform/graphics/GraphicsLayerClient.h:
        * platform/graphics/ca/PlatformCALayer.cpp:
        (WebCore::PlatformCALayer::dumpAdditionalProperties):
        * platform/graphics/ca/PlatformCALayer.h:
        * testing/Internals.cpp:
        (WebCore::toPlatformLayerTreeFlags):
        * testing/Internals.h:
        * testing/Internals.idl:
        Add a bit to platformLayerTreeAsText() that makes PlatformCALayerRemoteModelHosting
        dump the size of the model that it is hosting, which is used in the test for this bug.

        Remove the IncludeOpacity bit since we can just always log opacity if it's not the default.

2021-04-24  Julian Gonzalez  <julian_a_gonzalez@apple.com>

        Crash in BreakBlockquoteCommand::doApply()
        https://bugs.webkit.org/show_bug.cgi?id=224941

        Reviewed by Ryosuke Niwa.

        Despite assertions to the contrary, it is possible for there not to be any node
        to move into the new blockquote in BreakBlockquoteCommand::doApply() as a result
        of layout updates, so remove the assertions and handle this case.

        Test: editing/pasteboard/paste-as-quotation-then-paste-crash.html

        * editing/BreakBlockquoteCommand.cpp:
        (WebCore::BreakBlockquoteCommand::doApply):

2021-04-24  Antoine Quint  <graouts@webkit.org>

        Improve parsing and computed style of the rotate CSS property
        https://bugs.webkit.org/show_bug.cgi?id=225019

        Reviewed by Dean Jackson.

        There were a few issues with how we parsed the rotate CSS property and how we dealt with it
        when resolving the computed style.

        When parsing, we required individual vector coordinates to be 1 when others were 0 for a vector
        to be considered parallel with the x, y or z axis. We now support any positive value. Then, as
        we create the TransformOperation from the CSSValue, we must set the type to ROTATE_3D instead
        of ROTATE_Z if the z axis was specified through the CSS value. Indeed, ROTATE_Z is equivalent
        to ROTATE and without setting this type to ROTATE_3D, TransformOperation::is3DOperation() would
        return false.

        This is important because when figuring out the computed style, we should only return an angle
        without a rotation vector if TransformOperation::is3DOperation() is false. For the case where
        the operation was specified in 3D, we now use the same rule used when parsing to determine
        whether the rotation vector is parallel with the x, y or z axis to use the matching keywords.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::computedRotate):
        * css/TransformFunctions.cpp:
        (WebCore::rotateForValue):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeRotate):

2021-04-24  Antoine Quint  <graouts@webkit.org>

        Support interpolation of the background-repeat shorthand
        https://bugs.webkit.org/show_bug.cgi?id=225016

        Reviewed by Dean Jackson.

        * animation/CSSPropertyAnimation.cpp:
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):

2021-04-24  Antoine Quint  <graouts@webkit.org>

        Fix interpolation of the clip CSS property
        https://bugs.webkit.org/show_bug.cgi?id=225017

        Reviewed by Dean Jackson.

        While we interpolated the clip value correctly, we wouldn't set the RenderStyle bit that
        indicates that there is a non-auto value in the first place. With a new dedicated wrapper,
        we can ensure we set the bit correctly as we blend, and that we use discrete interpolation
        if both the from and to values aren't auto. 

        * animation/CSSPropertyAnimation.cpp:
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):

2021-04-24  Antoine Quint  <graouts@webkit.org>

        Computed style for the translate CSS property should use px for the z value
        https://bugs.webkit.org/show_bug.cgi?id=225018

        Reviewed by Dean Jackson.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::computedTranslate):

2021-04-24  Tyler Wilcock  <twilco.o@protonmail.com>

        Refactor ValueRange from enum to enum class
        https://bugs.webkit.org/show_bug.cgi?id=224981

        Reviewed by Sam Weinig.

        Refactor ValueRange from:

        enum ValueRange {
            ValueRangeAll,
            ValueRangeNonNegative
        }

        to:

        enum ValueRange : uint8_t {
            All,
            NonNegative
        }

        making it smaller (one byte versus four) and harder to misuse (no
        auto-coercion to number types).

        * animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFunc):
        Refactor ValueRangeAll and ValueRangeNonNegative to ValueRange::All
        and ValueRange::NonNegative.

        * css/CSSCalculationValue.cpp:
        (WebCore::CSSCalcValue::create):
        Refactor ValueRangeAll and ValueRangeNonNegative to ValueRange::All
        and ValueRange::NonNegative.

        * css/CSSCalculationValue.h:
        (WebCore::CSSCalcValue::createCalculationValue const):
        (WebCore::CSSCalcValue::setPermittedValueRange):
        Refactor ValueRangeAll and ValueRangeNonNegative to ValueRange::All
        and ValueRange::NonNegative.

        * css/MediaQueryExpression.cpp:
        (WebCore::consumeFirstValue):
        Refactor ValueRangeAll and ValueRangeNonNegative to ValueRange::All
        and ValueRange::NonNegative.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::consumeTransformOrigin):
        (WebCore::consumeLetterSpacing):
        (WebCore::consumeWordSpacing):
        (WebCore::consumeTabSize):
        (WebCore::consumeTextSizeAdjust):
        (WebCore::consumeFontSize):
        (WebCore::consumeLineHeight):
        (WebCore::consumeSize):
        (WebCore::consumeTextIndent):
        (WebCore::consumeScrollPadding):
        (WebCore::consumeMaxWidthOrHeight):
        (WebCore::consumeWidthOrHeight):
        (WebCore::consumeMarginOrOffset):
        (WebCore::consumeClipComponent):
        (WebCore::consumeLineClamp):
        (WebCore::consumeHyphenateLimit):
        (WebCore::consumeColumnWidth):
        (WebCore::consumeGapLength):
        (WebCore::consumeZoom):
        (WebCore::consumeAnimationIterationCount):
        (WebCore::consumeAnimationValue):
        (WebCore::consumeLineWidth):
        (WebCore::consumeTranslate3d):
        (WebCore::consumeNumbers):
        (WebCore::consumePerspective):
        (WebCore::consumeTransformValue):
        (WebCore::consumeTranslate):
        (WebCore::consumeScale):
        (WebCore::consumeRotate):
        (WebCore::consumePositionLonghand):
        (WebCore::consumeFlexBasis):
        (WebCore::consumeKerning):
        (WebCore::consumeStrokeDasharray):
        (WebCore::consumeBaselineShift):
        (WebCore::consumeRxOrRy):
        (WebCore::consumeBorderRadiusCorner):
        (WebCore::consumeTextUnderlineOffset):
        (WebCore::consumeTextDecorationThickness):
        (WebCore::consumeVerticalAlign):
        (WebCore::consumeShapeRadius):
        (WebCore::consumeBasicShapePolygon):
        (WebCore::consumeRadii):
        (WebCore::consumeBasicShapeInset):
        (WebCore::consumeBorderImageSlice):
        (WebCore::consumeBorderImageOutset):
        (WebCore::consumeBorderImageWidth):
        (WebCore::consumeReflect):
        (WebCore::consumeBackgroundSize):
        (WebCore::consumeFitContent):
        (WebCore::consumeGridBreadth):
        (WebCore::consumeInitialLetter):
        (WebCore::consumeWebkitMarqueeIncrement):
        (WebCore::consumeWebkitMarqueeRepetition):
        (WebCore::consumeWebkitMarqueeSpeed):
        (WebCore::consumeAspectRatio):
        (WebCore::CSSPropertyParser::parseSingleValue):
        (WebCore::CSSPropertyParser::consumeBorderSpacing):
        (WebCore::CSSPropertyParser::consumeFlex):
        Refactor ValueRangeAll and ValueRangeNonNegative to ValueRange::All
        and ValueRange::NonNegative.

        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::consumeNumberOrPercentDividedBy100Raw):
        (WebCore::CSSPropertyParserHelpers::CalcParser::CalcParser):
        (WebCore::CSSPropertyParserHelpers::consumeNumberRaw):
        (WebCore::CSSPropertyParserHelpers::consumeFontWeightNumberRaw):
        (WebCore::CSSPropertyParserHelpers::consumeLengthRaw):
        (WebCore::CSSPropertyParserHelpers::consumePercentRaw):
        (WebCore::CSSPropertyParserHelpers::consumeAngleRaw):
        (WebCore::CSSPropertyParserHelpers::consumeAngleWorkerSafe):
        (WebCore::CSSPropertyParserHelpers::consumeTime):
        (WebCore::CSSPropertyParserHelpers::consumePositionComponent):
        (WebCore::CSSPropertyParserHelpers::consumeDeprecatedGradientPoint):
        (WebCore::CSSPropertyParserHelpers::consumeDeprecatedGradient):
        (WebCore::CSSPropertyParserHelpers::consumeGradientColorStops):
        (WebCore::CSSPropertyParserHelpers::consumeDeprecatedRadialGradient):
        (WebCore::CSSPropertyParserHelpers::consumeRadialGradient):
        (WebCore::CSSPropertyParserHelpers::consumeFilterFunction):
        (WebCore::CSSPropertyParserHelpers::consumeSingleShadow):
        (WebCore::CSSPropertyParserHelpers::consumeFontSizeRaw):
        (WebCore::CSSPropertyParserHelpers::consumeLineHeightRaw):
        Refactor ValueRangeAll and ValueRangeNonNegative to ValueRange::All
        and ValueRange::NonNegative.

        * css/parser/CSSPropertyParserHelpers.h:
        Refactor ValueRangeAll and ValueRangeNonNegative to ValueRange::All
        and ValueRange::NonNegative.

        * css/parser/CSSPropertyParserWorkerSafe.cpp:
        (WebCore::CSSPropertyParserHelpersWorkerSafe::consumeFontStretch):
        (WebCore::CSSPropertyParserHelpersWorkerSafe::consumeFontStretchRange):
        Refactor ValueRangeAll and ValueRangeNonNegative to ValueRange::All
        and ValueRange::NonNegative.

        * page/IntersectionObserver.cpp:
        (WebCore::parseRootMargin):
        Refactor ValueRangeAll and ValueRangeNonNegative to ValueRange::All
        and ValueRange::NonNegative.

        * platform/CalculationValue.h:
        (WebCore::CalculationValue::CalculationValue):
        Refactor ValueRangeAll and ValueRangeNonNegative to ValueRange::All
        and ValueRange::NonNegative.

        * platform/Length.cpp:
        (WebCore::convertTo100PercentMinusLength):
        (WebCore::blendMixedTypes):
        (WebCore::blend):
        Refactor ValueRangeAll and ValueRangeNonNegative to ValueRange::All
        and ValueRange::NonNegative.

        * platform/Length.h:
        Refactor enum ValueRange to enum class ValueRange.

        * style/StyleBuilderConverter.h:
        (WebCore::Style::BuilderConverter::convertTo100PercentMinusLength):
        Refactor ValueRangeAll and ValueRangeNonNegative to ValueRange::All
        and ValueRange::NonNegative.


2021-04-24  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] Subtree moving should clear the floats on all the descendants
        https://bugs.webkit.org/show_bug.cgi?id=224996
        <rdar://76837320>

        Reviewed by Antti Koivisto.

        While moving a subtree, we invalidate the floating object list so that we don't end up with incorrectly placed floats (they'll get regenerated during the subsequent layout).
        A float can be "assigned" to more than one RenderBlockFlow (e.g intruding floats). It's very common that a set of descendant RenderBlockFlow
        renderers "see" the same set of floats (each RenderBlockFlow has its own list of floating objects).
        Now the invalidation is based on ancestor-to-descendant direction starting with finding the outer most containing block for a particular float (see outermostBlockContainingFloatingObject)
        The invalidation logic also expects no gaps in the ancestor chain e.g.

           RenderBlockFlow (A) -> float X
             RenderBlockFlow (B) -> float X
               RenderBlockFlow (C) -> float X
           if float X is assigned to both A and C, then it must be assigned to B as well.

        RenderBlockFlow::removeFloatingObjects() simply removes the float from the renderer. It does not invalidate the ancestor/descendant chain.
        e.g. calling B.removeFloatingObjects() would just remove float X from RenderBlockFlow (B)

           RenderBlockFlow (A) -> float X
             RenderBlockFlow (B)
               RenderBlockFlow (C) -> float X

        and any subsequent invalidation attempt would fail to clear up A or C (depending on whether it is initiated on A or C).

        Test: fast/multicol/floating-boxes-moved-under-multi-column.html

        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::moveChildren):

2021-04-24  Zalan Bujtas  <zalan@apple.com>

        [LFC] Ignore content height and width when 'contain: size' is present
        https://bugs.webkit.org/show_bug.cgi?id=225013

        Reviewed by Antti Koivisto.

        Enable size containment for "shrink to fit width" and for "height: auto" formatting context roots.    
        https://www.w3.org/TR/css-contain-2/#size-containment.

        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::contentHeightForFormattingContextRoot const):
        (WebCore::Layout::FormattingContext::Geometry::shrinkToFitWidth):

2021-04-24  Rob Buis  <rbuis@igalia.com>

        Move selectedOptions cache invalidation timing
        https://bugs.webkit.org/show_bug.cgi?id=224894

        Reviewed by Ryosuke Niwa.

        Move selectedOptions cache invalidation timing out
        of setSelectedState, having it in setSelectedState
        can cause selectedOptions cache invalidation while
        determining the cache.

        Test: fast/dom/HTMLSelectElement/selected-options-item-crash.html

        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::setSelectedState):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::updateListBoxSelection):
        (WebCore::HTMLSelectElement::selectOption):
        (WebCore::HTMLSelectElement::deselectItemsWithoutValidation):
        (WebCore::HTMLSelectElement::restoreFormControlState):
        (WebCore::HTMLSelectElement::reset):
        (WebCore::HTMLSelectElement::updateSelectedState):

2021-04-23  Ian Gilbert  <iang@apple.com>

        Crash in IndentOutdentCommand::outdentParagraph attempting to move a paragraph
        https://bugs.webkit.org/show_bug.cgi?id=224909

        Reviewed by Ryosuke Niwa.

        Added check inside IndentOutdentCommand::outdentParagraph to ensure that inserting a 
        HTMLBRElement was successful before attempting to move a paragraph to that node.

        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::outdentParagraph):

2021-04-23  Ryosuke Niwa  <rniwa@webkit.org>

        Crash in constructCustomElementSynchronously
        https://bugs.webkit.org/show_bug.cgi?id=224992
        <rdar://66988026>

        Reviewed by Tadeu Zagallo.

        Exit early when the global object is nullptr although this shouldn't happen.

        No new tests since we have no reproductions.

        * bindings/js/JSCustomElementInterface.cpp:
        (WebCore::JSCustomElementInterface::tryToConstructCustomElement): Added a null check.

2021-04-23  Don Olmstead  <don.olmstead@sony.com>

        Add additional guards around USE_ANGLE
        https://bugs.webkit.org/show_bug.cgi?id=225001

        Reviewed by Fujii Hironori.

        When USE(ANGLE) initializeOpenGLShims isn't used or available.

        When USE(ANGLE) the ANGLE shader compiler isn't needed.

        * platform/graphics/GLContext.cpp:
        (WebCore::initializeOpenGLShimsIfNeeded):
        * platform/graphics/texmap/GraphicsContextGLTextureMapper.cpp:

2021-04-23  Cathie Chen  <cathiechen@igalia.com>

        Not computing image aspect ratios from width and height attributes for lazy loaded images
        https://bugs.webkit.org/show_bug.cgi?id=224197

        Reviewed by Darin Adler.

        This patch supports error images and lazy loaded images (without src attribute) to compute
        implicit aspect ratios from width and height attributes. Refactor the code a bit. Added
        intrinsicAspectRatioFromWidthHeight() to compute aspect ratio from width and height attributes when
        the object is allowed to which is decided by canMapWidthHeightToAspectRatio().
        Remove `!downcast<RenderImage>(*this).cachedImage()` constraint, so that images without src attributes
        is allowed. As to error images, compute the aspect ratio when the image shouldDisplayBrokenImageIcon().

        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::canMapWidthHeightToAspectRatio const): To indicate that the object is allowed
        to compute aspect ratio from width and height attributes.
        (WebCore::RenderImage::computeIntrinsicRatioInformation const): When shouldDisplayBrokenImageIcon(),
        try to compute the aspect ratio from attributes width and height.
        * rendering/RenderImage.h:
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::intrinsicAspectRatioFromWidthHeight const): Compute the aspect ratio from attributes width and height.
        (WebCore::RenderReplaced::computeIntrinsicRatioInformation const):
        * rendering/RenderReplaced.h:
        (WebCore::RenderReplaced::canMapWidthHeightToAspectRatio const): Ditto.

2021-04-23  Michael Catanzaro  <mcatanzaro@igalia.com>

        Remove virtual function calls in GraphicsLayer destructors
        https://bugs.webkit.org/show_bug.cgi?id=180232

        Reviewed by Adrian Perez de Castro.

        I notice that ~CoordinatedGraphicsLayer makes a virtual function call to
        GraphicsLayer::willBeDestroyed, which makes a virtual function call to
        CoordinatedGraphicsLayer::removeFromParent. I think that the functions are being called as
        intended, because ~CoordinatedGraphicsLayer has not yet been fully destroyed. However, I'm
        reminded of Effective C++ item #9: Never call virtual functions during construction or
        destruction ("because such calls will never go to a more derived class than that of the
        currently executing constructor or destructor"). This code is almost certain to break if
        anyone tries in the future to subclass any of the existing subclasses of GraphicsLayer, so
        let's refactor it a bit. This doesn't fix anything, but my hope is that it will make the
        code a bit harder to break, and not the opposite.

        The main risk here is that some reordering of operations is necessary. The derived class
        portion of removeFromParent must now be executed before willBeDestroyed. It can't happen
        after, because parent would already be unset by that point. It's hard to be certain that
        this won't break anything, but I think it should be fine.

        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::willBeDestroyed):
        (WebCore::GraphicsLayer::removeFromParentInternal):
        (WebCore::GraphicsLayer::removeFromParent):
        * platform/graphics/GraphicsLayer.h:
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::~GraphicsLayerCA):
        (WebCore::GraphicsLayerCA::willBeDestroyed): Deleted.
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::~CoordinatedGraphicsLayer):

2021-04-23  Darin Adler  <darin@apple.com>

        Remove decoder memory allocations based on untrusted data (sizes) in the stream; related changes
        https://bugs.webkit.org/show_bug.cgi?id=224984

        Reviewed by Sam Weinig.

        * platform/network/cf/CertificateInfoCFNet.cpp:
        (WTF::Persistence::decodeCFData): Removed unneeded check for zero size. Removed code that
        locally allocates a vector before bufferIsLargeEnoughToContain is called. Instead use
        bufferPointerForDirectRead, which makes does the buffer size check, and pass the pointer
        directly to CFDataCreate.

2021-04-23  Chris Dumez  <cdumez@apple.com>

        Improve our constructDeletedValue() template specializations
        https://bugs.webkit.org/show_bug.cgi?id=224889

        Reviewed by Darin Adler.

        Improve our constructDeletedValue() template specializations and make them more consistent:
        - Use placement-new instead of object assignment since we don't want/need to destroy the
          existing object (since it is uninitialized).
        - Do as little initialization as possible for performance reasons.

        * Modules/indexeddb/IDBKeyData.cpp:
        (WebCore::IDBKeyData::deletedValue): Deleted.
        * Modules/indexeddb/IDBKeyData.h:
        (WebCore::IDBKeyDataHashTraits::constructDeletedValue):
        (WebCore::IDBKeyDataHashTraits::isDeletedValue):
        (WebCore::IDBKeyData::isDeletedValue const): Deleted.
        * Modules/indexeddb/shared/IDBResourceIdentifier.cpp:
        (WebCore::IDBResourceIdentifier::deletedValue): Deleted.
        (WebCore::IDBResourceIdentifier::isHashTableDeletedValue const): Deleted.
        * Modules/indexeddb/shared/IDBResourceIdentifier.h:
        (WebCore::IDBResourceIdentifierHashTraits::constructDeletedValue):
        (WebCore::IDBResourceIdentifierHashTraits::isDeletedValue):
        * dom/MessagePortIdentifier.h:
        (WTF::HashTraits<WebCore::MessagePortIdentifier>::constructDeletedValue):
        (WTF::HashTraits<WebCore::MessagePortIdentifier>::isDeletedValue):
        * history/BackForwardItemIdentifier.h:
        (WTF::HashTraits<WebCore::BackForwardItemIdentifier>::constructDeletedValue):
        (WTF::HashTraits<WebCore::BackForwardItemIdentifier>::isDeletedValue):
        * layout/LayoutUnits.h:
        (WTF::HashTraits<WebCore::Layout::SlotPosition>::constructDeletedValue):
        (WTF::HashTraits<WebCore::Layout::SlotPosition>::isDeletedValue):
        * loader/PrivateClickMeasurement.h:
        (WebCore::PrivateClickMeasurement::AttributionDestinationSite::matches const):
        (WTF::HashTraits<WebCore::PrivateClickMeasurement::SourceSite>::constructDeletedValue):
        (WTF::HashTraits<WebCore::PrivateClickMeasurement::SourceSite>::isDeletedValue):
        (WTF::HashTraits<WebCore::PrivateClickMeasurement::AttributionDestinationSite>::constructDeletedValue):
        (WTF::HashTraits<WebCore::PrivateClickMeasurement::AttributionDestinationSite>::isDeletedValue):
        (WebCore::PrivateClickMeasurement::SourceSite::isHashTableDeletedValue const): Deleted.
        (WebCore::PrivateClickMeasurement::SourceSite::deletedValue): Deleted.
        (WebCore::PrivateClickMeasurement::SourceSite::constructDeletedValue): Deleted.
        (WebCore::PrivateClickMeasurement::SourceSite::deleteValue): Deleted.
        (WebCore::PrivateClickMeasurement::SourceSite::isDeletedValue const): Deleted.
        (WebCore::PrivateClickMeasurement::AttributionDestinationSite::isHashTableDeletedValue const): Deleted.
        (WebCore::PrivateClickMeasurement::AttributionDestinationSite::deletedValue): Deleted.
        (WebCore::PrivateClickMeasurement::AttributionDestinationSite::constructDeletedValue): Deleted.
        (WebCore::PrivateClickMeasurement::AttributionDestinationSite::deleteValue): Deleted.
        (WebCore::PrivateClickMeasurement::AttributionDestinationSite::isDeletedValue const): Deleted.
        * page/ClientOrigin.h:
        (WTF::HashTraits<WebCore::ClientOrigin>::constructDeletedValue):
        * page/GlobalWindowIdentifier.h:
        (WTF::HashTraits<WebCore::GlobalWindowIdentifier>::constructDeletedValue):
        (WTF::HashTraits<WebCore::GlobalWindowIdentifier>::isDeletedValue):
        * platform/Cookie.h:
        (WTF::HashTraits<WebCore::Cookie>::constructDeletedValue):
        (WebCore::Cookie::Cookie): Deleted.
        * platform/graphics/FontCache.cpp:
        (WebCore::FontPlatformDataCacheKeyHashTraits::constructDeletedValue):
        * platform/graphics/FontCache.h:
        (WebCore::FontCascadeCacheKeyHashTraits::constructDeletedValue):
        * platform/graphics/IntPointHash.h:
        (WTF::HashTraits<WebCore::IntPoint>::constructDeletedValue):
        (WTF::HashTraits<WebCore::IntPoint>::isDeletedValue):
        * rendering/CSSValueKey.h:
        (WTF::HashTraits<WebCore::CSSValueKey>::constructDeletedValue):
        * workers/service/ServiceWorkerClientIdentifier.h:
        (WTF::HashTraits<WebCore::ServiceWorkerClientIdentifier>::constructDeletedValue):
        (WTF::HashTraits<WebCore::ServiceWorkerClientIdentifier>::isDeletedValue):

2021-04-23  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GStreamer][EME] cbcs fixes
        https://bugs.webkit.org/show_bug.cgi?id=224976

        Reviewed by Philippe Normand.

        In cbcs you can get from qtdemux buffers without an iv_size
        because it had constant_iv_size. We need to check that.

        When decryption bails out because of the buffer being unencrypted,
        we should TRACE so.

        cbcs buffers could not include the subsample_count, we consider 0
        as default.

        * platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.cpp:
        (transformInPlace):

2021-04-23  Michael Catanzaro  <mcatanzaro@gnome.org>

        Improve HashTableDeletedValue of ServiceWorkerRegistrationKey
        https://bugs.webkit.org/show_bug.cgi?id=224975

        Reviewed by Chris Dumez.

        We construct only the SecurityOriginData, no need to construct a full
        ServiceWorkerRegistrationKey or URL. No behavior changes.

        * workers/service/ServiceWorkerRegistrationKey.h:
        (WTF::HashTraits<WebCore::ServiceWorkerRegistrationKey>::constructDeletedValue):
        (WTF::HashTraits<WebCore::ServiceWorkerRegistrationKey>::isDeletedValue):
        (WebCore::ServiceWorkerRegistrationKey::isHashTableDeletedValue const): Deleted.
        (WebCore::ServiceWorkerRegistrationKey::ServiceWorkerRegistrationKey): Deleted.

2021-04-23  Youenn Fablet  <youenn@apple.com>

        Handle rotation correctly in WebRTC GPUProcess rendering pipeline
        https://bugs.webkit.org/show_bug.cgi?id=224927
        <rdar://76915991>

        Reviewed by Eric Carlson.

        Add a routine to update the affine transformn of the root layer.
        Manually tested.

        * platform/graphics/avfoundation/objc/LocalSampleBufferDisplayLayer.h:
        * platform/graphics/avfoundation/objc/LocalSampleBufferDisplayLayer.mm:
        (WebCore::LocalSampleBufferDisplayLayer::updateRootLayerAffineTransform):

2021-04-23  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, GStreamer follow-up after r276493

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin): Remove spurious adoptGRef call, as
        this is not transfer-full.

2021-04-23  Philippe Normand  <pnormand@igalia.com>

        [Media] Allow access to MediaElement id from MediaPlayerPrivate
        https://bugs.webkit.org/show_bug.cgi?id=224818

        Reviewed by Xabier Rodriguez-Calvar.

        A new method is added in the MediaPlayer allowing to query the client media element for its
        identifier. That could be useful for accurate naming of the internal player/pipeline in the
        MediaPlayerPrivate. If no specific id was set on the media element then the id is empty
        string and the MediaPlayerPrivate needs to handle that by forging a unique id.

        This also lead me to simplify pipeline-related code in the GStreamer player. The player can
        handle only one pipeline in its entire life-time so the code handling pipeline "re-loading"
        was actually never hit.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):
        * html/HTMLMediaElement.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::elementId const):
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayerClient::mediaPlayerElementId const):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::load):
        (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin):
        (WebCore::MediaPlayerPrivateGStreamer::loadFull): Deleted.
        (WebCore::MediaPlayerPrivateGStreamer::setPipeline): Deleted.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:

2021-04-22  Sergio Villar Senin  <svillar@igalia.com>

        Do not set synchronous scrolling for layers without relevant scrolling scopes
        https://bugs.webkit.org/show_bug.cgi?id=221383

        Reviewed by Simon Fraser.

        Fixed backgrounds could force the layer compositor to set synchronous scrolling because they're slow
        to repaint. However that cannot be done if the layer's boxScrollingScope hasn't been previously updated
        in RenderLayer::updateLayerPosition.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateSynchronousScrollingNodes): Do not call
        setSynchronousScrollingReasons() if there is no scrollingScope.

2021-04-23  Philippe Normand  <pnormand@igalia.com>

        [LibWebRTC][WPE][GTK] Enable vp9 and NO_MAIN_THREAD_WRAPPING
        https://bugs.webkit.org/show_bug.cgi?id=222795

        Reviewed by Xabier Rodriguez-Calvar.

        Add VP9 encoding and decoding support in the WPE/GTK LibWebRTC backend. The underlying
        encoding support is based on LibWebRTC's internal VP9 support. The GStreamer VPx encoders
        lack simulcast and high profile support, so can't really be used anyway. The
        GStreamerVP8Encoder was removed for this reason as well.

        * platform/mediastream/libwebrtc/GStreamerVideoDecoderFactory.cpp:
        (WebCore::VP9Decoder::VP9Decoder):
        (WebCore::VP9Decoder::Create):
        (WebCore::GStreamerVideoDecoderFactory::CreateVideoDecoder):
        (WebCore::GStreamerVideoDecoderFactory::GStreamerVideoDecoderFactory):
        (WebCore::GStreamerVideoDecoderFactory::GetSupportedFormats const):
        * platform/mediastream/libwebrtc/GStreamerVideoDecoderFactory.h:
        * platform/mediastream/libwebrtc/GStreamerVideoEncoder.cpp:
        * platform/mediastream/libwebrtc/GStreamerVideoEncoderFactory.cpp:
        (WebCore::GStreamerVideoEncoder::makeElement):
        (WebCore::GStreamerVideoEncoder::createEncoder):
        (WebCore::GStreamerVideoEncoder::SetRestrictionCaps):
        (WebCore::GStreamerVideoEncoderFactory::CreateVideoEncoder):
        (WebCore::GStreamerVideoEncoderFactory::GStreamerVideoEncoderFactory):
        (WebCore::GStreamerVideoEncoderFactory::GetSupportedFormats const):
        * platform/mediastream/libwebrtc/GStreamerVideoEncoderFactory.h:
        * platform/mediastream/libwebrtc/LibWebRTCProviderGStreamer.cpp:
        (WebCore::LibWebRTCProviderGStreamer::createDecoderFactory):
        (WebCore::LibWebRTCProviderGStreamer::createEncoderFactory):

2021-04-22  Tyler Wilcock  <twilco.o@protonmail.com>

        [css-counter-styles] Parse @counter-style descriptors
        https://bugs.webkit.org/show_bug.cgi?id=224718

        Reviewed by Darin Adler.

        Implement parsing and CSSCounterStyleRule IDL interface for @counter-style descriptors.
        See spec for full details on all descriptors:

        https://drafts.csswg.org/css-counter-styles-3/#the-counter-style-rule

        Test: webexposed/counter-style-image-symbols-not-exposed.html and WPTs

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::valueForPropertyInStyle):
        Return `nullptr` for new @counter-style descriptor properties.

        * css/CSSCounterStyleRule.cpp:
        (WebCore::toCounterStyleSystemEnum):
        (WebCore::symbolsValidForSystem):
        (WebCore::StyleRuleCounterStyle::newValueInvalidOrEqual const):
        (WebCore::CSSCounterStyleRule::cssText const):
        (WebCore::CSSCounterStyleRule::setName):
        (WebCore::CSSCounterStyleRule::setterInternal):
        (WebCore::CSSCounterStyleRule::setSystem):
        (WebCore::CSSCounterStyleRule::setNegative):
        (WebCore::CSSCounterStyleRule::setPrefix):
        (WebCore::CSSCounterStyleRule::setSuffix):
        (WebCore::CSSCounterStyleRule::setRange):
        (WebCore::CSSCounterStyleRule::setPad):
        (WebCore::CSSCounterStyleRule::setFallback):
        (WebCore::CSSCounterStyleRule::setSymbols):
        (WebCore::CSSCounterStyleRule::setAdditiveSymbols):
        (WebCore::CSSCounterStyleRule::setSpeakAs):
        Implement setters and tangential functionality required by setters.

        * css/CSSCounterStyleRule.h:
        Replace FIXME with actual descriptor getter and setter
        implementations.

        * css/CSSProperties.json:
        Add @counter-style descriptor properties.

        * css/CSSValueKeywords.in:
        Add new values required for `system` and `speak-as` 
        @counter-style descriptor properties.

        * css/parser/CSSParserContext.cpp:
        (WebCore::CSSParserContext::isPropertyRuntimeDisabled const):
        Ensure new @counter-style descriptors are disabled at runtime based
        on CSSParserContext state.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeCounterStyleSystem):
        (WebCore::consumeCounterStyleSymbol):
        (WebCore::consumeCounterStyleNegative):
        (WebCore::consumeCounterStyleRangeBound):
        (WebCore::consumeCounterStyleRange):
        (WebCore::consumeCounterStylePad):
        (WebCore::consumeCounterStyleSymbols):
        (WebCore::consumeCounterStyleAdditiveSymbols):
        (WebCore::consumeCounterStyleSpeakAs):
        (WebCore::CSSPropertyParser::parseCounterStyleDescriptor):
        Parse @counter-style descriptors.

2021-04-22  Megan Gardner  <megan_gardner@apple.com>

        Sometimes appHighlights are not painted when created.
        https://bugs.webkit.org/show_bug.cgi?id=224904

        Reviewed by Antti Koivisto.

        In order for highlights to be painted correctly, we need to not use the new line layout code,
        so we need to opt out when we are repainting due to a highlight being added or removed.

        Test: http/wpt/css/css-highlight-api/highlight-text-dynamic.html

        * Modules/highlight/Highlight.cpp:
        (WebCore::repaintRange):

2021-04-22  Jean-Yves Avenard  <jya@apple.com>

        Fix color gamut in WebRTC when using VPx software decoder.
        https://bugs.webkit.org/show_bug.cgi?id=220972
        <rdar://problem/73616455>

        Reviewed by Youenn Fablet.

        By default, and how libwebrtc is configuring its encoders and decoder, video range levels are used
        (16-235). Video range was assumed to use full range instead (0-255), causing blacks to look grey and
        whites to appear washed-out.
        It is theoretically possible, when using VP9 that full-range level are used. While the information
        related to video levels is available at the VP9 codec level; only the color space information is
        being made available in libwebrtc's public image data structure, color range isn't.
        For now we can assume the default is sufficient, and a follow-up change will be submitted to libwebrtc
        later on.

        In memory of Dr. Alex. May he rest in peace.
        Test: webrtc/video-vp8-videorange.html

        * platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.mm:
        (WebCore::RealtimeIncomingVideoSourceCocoa::pixelBufferPool):

2021-04-22  Michael Catanzaro  <mcatanzaro@gnome.org>

        [SOUP] Null pointer dereference in ResourceLoader::didReceiveAuthenticationChallenge
        https://bugs.webkit.org/show_bug.cgi?id=224838

        Reviewed by Adrian Perez de Castro.

        Add a RELEASE_ASSERT_NOT_REACHED() to avoid this warning.

        * platform/network/soup/AuthenticationChallenge.h:

2021-04-22  Patrick Griffis  <pgriffis@igalia.com>

        [SOUP] Show more connection information in the inspector
        https://bugs.webkit.org/show_bug.cgi?id=224873

        Handle SOUP_HTTP_2_0.

        Reviewed by Adrian Perez de Castro.

        * platform/network/soup/ResourceResponseSoup.cpp:
        (WebCore::ResourceResponse::ResourceResponse):

2021-04-22  Antoine Quint  <graouts@webkit.org>

        Add discrete animation support for border-image-repeat
        https://bugs.webkit.org/show_bug.cgi?id=224923

        Reviewed by Antti Koivisto.

        * animation/CSSPropertyAnimation.cpp:
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):
        * rendering/style/NinePieceImage.cpp:
        (WebCore::operator<<):
        * rendering/style/NinePieceImage.h:
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::setBorderImageHorizontalRule):
        (WebCore::RenderStyle::setBorderImageVerticalRule):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::borderImageHorizontalRule const):
        (WebCore::RenderStyle::borderImageVerticalRule const):

2021-04-22  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] Multi-column spanners are not part of the enclosing multi-column renderer's subtree
        https://bugs.webkit.org/show_bug.cgi?id=224914
        <rdar://76846946>

        Reviewed by Simon Fraser.

        This patch handles the case when the newly inserted renderer is a column spanner and checking enclosingFragmentedFlow()
        on the spanner's new parent returns the incorrect enclosing multi-column renderer.
        This can result in having the spanner in multiple multi-column flows.

        (Note that the spanners are directly attached to the RenderBlockFlow that establishes the multi-column context, while non-spanner
        renderers are part of the RenderMultiColumnFlow subtree. e.g

          RenderBlockFlow <- spanner's parent.
            RenderMultiColumnFlow
              Non-spanner renderer
            spanner renderer

          calling enclosingFragmentedFlow() on a spanner's parent (RenderBlockFlow) returns the parent multi-column flow -and
          not the one it establishes. e.g.

          RenderMultiColumnFlow <- parent multi-column flow -in case of nested columns.
            RenderBlockFlow <- spanner's parent.
              RenderMultiColumnFlow
                Non-spanner renderer
              spanner renderer
        )

        Test: fast/multicol/spanner-inserted-to-multiple-multicolumns.html

        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::childFlowStateChangesAndAffectsParentBlock):

2021-04-22  Dean Jackson  <dino@apple.com>

        [WebXR] Optional button test is incorrect
        https://bugs.webkit.org/show_bug.cgi?id=224945

        Reviewed by Tim Horton.

        Fix a conditional test that was always true.

        * testing/WebFakeXRInputController.cpp:
        (WebCore::WebFakeXRInputController::getButtonOrPlaceholder const):
        (A != B || A != C) -> (A != B && A != C)

2021-04-22  Dean Jackson  <dino@apple.com>

        [WebXR] Closure is capturing this unnecessarily
        https://bugs.webkit.org/show_bug.cgi?id=224946

        Reviewed by Tim Horton.

        Remove the "this" capture.

        * Modules/webxr/WebXRInputSourceArray.cpp:
        (WebCore::WebXRInputSourceArray::handleRemovedInputSources):

2021-04-22  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r271644.
        https://bugs.webkit.org/show_bug.cgi?id=224908

        Caused regression
        <http://webkit.org/b/221962|webkit.org/b/221962>

        Reverted changeset:

        "[css-multicol] OOM with 1px height columns"
        https://bugs.webkit.org/show_bug.cgi?id=220490
        https://trac.webkit.org/changeset/271644

2021-04-22  Chris Lord  <clord@igalia.com>

        Implement FontFace in Workers for OffscreenCanvas
        https://bugs.webkit.org/show_bug.cgi?id=224178
        <rdar://problem/76529024>

        Reviewed by Darin Adler.

        To comply with spec and complete the OffscreenCanvas implementation,
        FontFace needs to be made available on WorkerGlobalScope. This patch
        makes it available and fixes crashes using it due to accessing
        main-thread only singletons.

        No new tests, rebaselined existing tests.

        * Headers.cmake:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
          Add new files WorkerFontLoadRequest.cpp, WorkerFontLoadRequest.h

        * css/CSSFontFace.cpp:
        (WebCore::CSSFontFace::fontCacheFallingBackToSingleton):
        (WebCore::CSSFontFace::font):
        * css/CSSFontFace.h:
          Use the ScriptExecutionContext's FontCache if possible when loading fonts.

        * css/CSSFontFaceSet.cpp:
        (WebCore::CSSFontFaceSet::ensureLocalFontFacesForFamilyRegistered):
        (WebCore::CSSFontFaceSet::matchingFacesExcludingPreinstalledFonts):
          Use the correct CSSValuePool and FontCache in
          ensureLocalFontFacesForFamilyRegistered. Also clarify a vaguely-named
          variable.

        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::CSSFontFaceSource):
          Use FontLoadRequest::isPending instead of making assumptions about the
          request state on construction.

        * css/FontFace.cpp:
        (WebCore::FontFace::create):
        (WebCore::FontFace::display const):
        * css/FontFace.h:
        * css/FontFace.idl:
          Construct with a ScriptExecutionContext instead of a Document and
          make available for Workers.

        * css/FontFaceSet.idl:
          Expose to Workers.

        * loader/FontLoadRequest.h:
        (WebCore::FontLoadRequest::isWorkerFontLoadRequest const):
          Add isPending function and new type WorkerFontLoadRequest.

        * loader/cache/CachedFont.cpp:
        (WebCore::CachedFont::createCustomFontData):
          Use convertWOFFToSfntIfNecessary().

        * loader/cache/CachedFontLoadRequest.h:
          Implement FontLoadRequest::isPending.

        * platform/graphics/Font.cpp:
        (WebCore::Font::create):
        (WebCore::Font::Font):
        (WebCore::Font::systemFallbackFontForCharacter const):
        * platform/graphics/Font.h:
          Add an optional FontCache parameter for use with vertical font data
          retrieval and add a FontCache parameter to
          systemFallbackFontForCharacter instead of using the singleton.

        * platform/graphics/FontCache.cpp:
        (WebCore::FontCache::fontForPlatformData):
          Pass FontCache parameter when creating fonts.

        * platform/graphics/FontCache.h:
        (WebCore::FontCache::fontCacheFallingBackToSingleton):
        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::update const):
        * platform/graphics/cairo/FontCairoHarfbuzzNG.cpp:
        (WebCore::FontCascade::fontForCombiningCharacterSequence const):
          Rename fontCacheFallbackToSingleton -> fontCacheFallingBackToSingleton

        * platform/graphics/FontCascadeFonts.cpp:
        (WebCore::FontCascadeFonts::realizeFallbackRangesAt):
        (WebCore::FontCascadeFonts::glyphDataForSystemFallback):
          Use familyNamesData instead of familyNames and pass the FontCache
          parameter when calling glyphDataForSystemFallback to make this safe
          to use in a Worker.

        * platform/graphics/FontTaggedSettings.h:
          Add missing wtf/Hasher.h include.

        * platform/graphics/WOFFFileFormat.cpp:
        (WebCore::convertWOFFToSfntIfNecessary):
        * platform/graphics/WOFFFileFormat.h:
          Add utility function to convert WOFF fonts on non-Cocoa platforms.

        * workers/WorkerFontLoadRequest.cpp: Added.
        (WebCore::WorkerFontLoadRequest::WorkerFontLoadRequest):
        (WebCore::WorkerFontLoadRequest::load):
        (WebCore::WorkerFontLoadRequest::ensureCustomFontData):
        (WebCore::WorkerFontLoadRequest::createFont):
        (WebCore::WorkerFontLoadRequest::setClient):
        (WebCore::WorkerFontLoadRequest::didReceiveResponse):
        (WebCore::WorkerFontLoadRequest::didReceiveData):
        (WebCore::WorkerFontLoadRequest::didFinishLoading):
        (WebCore::WorkerFontLoadRequest::didFail):
        * workers/WorkerFontLoadRequest.h: Added.
          Implement FontLoadRequest for Workers.

        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::fonts):
        (WebCore::WorkerGlobalScope::fontLoadRequest):
        (WebCore::WorkerGlobalScope::beginLoadingFontSoon):
        * workers/WorkerGlobalScope.h:
          Implement ScriptExecutionContext font-loading related functions.

        * workers/WorkerGlobalScope.idl:
          Include FontFaceSource.

2021-04-22  Martin Robinson  <mrobinson@webkit.org>

        [GTK] Turn on editable <input type=date> and <input type=time> fields
        https://bugs.webkit.org/show_bug.cgi?id=224921

        Reviewed by Carlos Garcia Campos.

        Turn on editable date and time inputs for GTK.

        No new tests. This is covered by enabling existing <input type=date>
        and <input type=time> tests.

        * Headers.cmake: Add headers to the list.
        * loader/EmptyClients.cpp: Add missing header include.

2021-04-22  Ziran Sun  <zsun@igalia.com>

        [css-grid] WPT Tests css/css-grid/grid-items/grid-item-percentage-sizes-*.html fail
        https://bugs.webkit.org/show_bug.cgi?id=209650

        Reviewed by Sergio Villar Senin.

        We need to check child's writing mode in order to pick the correct dimension to resolve
        percentage height against. Overriding containing block size should also be chosen in favour
        of special code for orthogonal writing mode.
 
        This change is an import of Chromium CL at
        https://chromium-review.googlesource.com/c/chromium/src/+/1348055.
 
        Three tests that failed are now passing.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computePercentageLogicalHeight const):

2021-04-22  Imanol Fernandez  <ifernandez@igalia.com>

        Implement WebXR Input Sources
        https://bugs.webkit.org/show_bug.cgi?id=223257

        Reviewed by Youenn Fablet.

        This patch implements the platform data definition and the DOM bits required to support WebXR Input Sources, the input mechanism used in WebXR.
        Example XR input sources include, but are not limited to, handheld controllers, optically tracked hands, and gaze-based input methods.

        More info about the API in:
        - https://immersive-web.github.io/webxr/#input
        - https://immersive-web.github.io/webxr-gamepads-module/#webxr-device-api-integration

        Tested by WebXR WPT.

        * Modules/gamepad/Gamepad.h: Add setConnected method.

        * Modules/webxr/WebXRGamepad.cpp: Bridge between WebXRInputSource and Gamepad
        (WebCore::WebXRGamepad::WebXRGamepad):
        * Modules/webxr/WebXRGamepad.h:

        * Modules/webxr/WebXRInputSpace.cpp: Instance of WebXRSpace used for WebXRInputSource spaces.
        (WebCore::WebXRInputSpace::create):
        (WebCore::WebXRInputSpace::WebXRInputSpace):
        (WebCore::WebXRInputSpace::nativeOrigin const):
        * Modules/webxr/WebXRInputSpace.h:

        * Modules/webxr/WebXRFrame.cpp:
        (WebCore::WebXRFrame::populatePose): set emulatedPosition based on the spaces.

        * Modules/webxr/WebXRInputSource.cpp: Complete WebXRInputSource implementation.
        (WebCore::WebXRInputSpace::create):
        (WebCore::WebXRInputSpace::WebXRInputSpace):
        (WebCore::WebXRInputSpace::nativeOrigin const):
        (WebCore::WebXRInputSource::create):
        (WebCore::WebXRInputSource::WebXRInputSource):
        (WebCore::WebXRInputSource::update):
        (WebCore::WebXRInputSource::requiresInputSourceChange):
        (WebCore::WebXRInputSource::disconnect):
        (WebCore::WebXRInputSource::pollEvents):
        (WebCore::WebXRInputSource::createEvent):
        * Modules/webxr/WebXRInputSource.h:
        (WebCore::WebXRInputSource::handle const):
        (WebCore::WebXRInputSource::handedness const):
        (WebCore::WebXRInputSource::targetRayMode const):
        (WebCore::WebXRInputSource::targetRaySpace const):
        (WebCore::WebXRInputSource::gripSpace const):
        (WebCore::WebXRInputSource::profiles const):
        (WebCore::WebXRInputSource::gamepad const):

        * Modules/webxr/WebXRInputSource.idl: Add gamepad attribute.

        * Modules/webxr/WebXRInputSourceArray.cpp: Implement input source updates and event dispatching.
        (WebCore::WebXRInputSourceArray::create):
        (WebCore::WebXRInputSourceArray::WebXRInputSourceArray):
        (WebCore::WebXRInputSourceArray::length const):
        (WebCore::WebXRInputSourceArray::item const):
        (WebCore::WebXRInputSourceArray::clear):
        (WebCore::WebXRInputSourceArray::update):
        (WebCore::WebXRInputSourceArray::handleRemovedInputSources):
        (WebCore::WebXRInputSourceArray::handleAddedOrUpdatedInputSources):
        * Modules/webxr/WebXRInputSourceArray.h:

        * Modules/webxr/WebXRSession.cpp:
        (WebCore::WebXRSession::WebXRSession): Set tracking delegate before initializing tracking and rendering.
        (WebCore::WebXRSession::isPositionEmulated const): Add helper method.
        (WebCore::WebXRSession::shutdown): Clear WebXRInputSourceArray instance.
        (WebCore::WebXRSession::sessionDidInitializeInputSources): Dispatch initial InputSource discovery event.
        (WebCore::WebXRSession::onFrame): Update WebXRInputSourceArray instance.
        * Modules/webxr/WebXRSession.h:

        * Modules/webxr/WebXRSpace.cpp: Add virtual class isPositionEmulated to be used in WebXRFrame.
        (WebCore::WebXRSpace::isPositionEmulated const):
        * Modules/webxr/WebXRSpace.h:

        * Modules/webxr/WebXRSystem.cpp:
        (WebCore::WebXRSystem::requestSession): update FIXME comment.

        * Modules/webxr/XRHandedness.h: Reuse PlatformXR enum.

        * Modules/webxr/XRInputSourceEvent.cpp:
        (WebCore::XRInputSourceEvent::XRInputSourceEvent):
        (WebCore::XRInputSourceEvent::setFrameActive):
        * Modules/webxr/XRInputSourceEvent.h:

        * Modules/webxr/XRInputSourcesChangeEvent.h:

        * Modules/webxr/XRTargetRayMode.h: Reuse PlatformXR enum.

        * platform/gamepad/GamepadConstants.cpp:
        (WebCore::xrStandardGamepadMappingString): Add xr-standard gamepad mapping name.
        * platform/gamepad/GamepadConstants.h:

        * platform/xr/PlatformXR.h: Add Input Source frame data.

        * testing/WebFakeXRDevice.cpp: Implement required changes to run and pass WebXR Input Source tests.
        (WebCore::SimulatedXRDevice::initializeTrackingAndRendering):
        (WebCore::SimulatedXRDevice::frameTimerFired):
        (WebCore::WebFakeXRDevice::simulateResetPose):
        (WebCore::WebFakeXRDevice::simulateInputSourceConnection):
        * testing/WebFakeXRDevice.h:
        * testing/WebFakeXRInputController.cpp:
        (WebCore::WebFakeXRInputController::create):
        (WebCore::WebFakeXRInputController::WebFakeXRInputController):
        (WebCore::WebFakeXRInputController::setGripOrigin):
        (WebCore::WebFakeXRInputController::setPointerOrigin):
        (WebCore::WebFakeXRInputController::disconnect):
        (WebCore::WebFakeXRInputController::reconnect):
        (WebCore::WebFakeXRInputController::setSupportedButtons):
        (WebCore::WebFakeXRInputController::updateButtonState):
        (WebCore::WebFakeXRInputController::getFrameData):
        (WebCore::WebFakeXRInputController::getButtonOrPlaceholder const):
        * testing/WebFakeXRInputController.h:

2021-04-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Bump libsoup3 version to 2.99.4
        https://bugs.webkit.org/show_bug.cgi?id=224925

        Reviewed by Philippe Normand.

        Update to use the new API.

        * platform/network/soup/ResourceResponseSoup.cpp:
        (WebCore::ResourceResponse::ResourceResponse):
        * platform/network/soup/SoupVersioning.h:
        (soup_message_get_tls_peer_certificate):
        (soup_message_get_tls_peer_certificate_errors):
        (soup_message_get_tls_certificate): Deleted.
        (soup_message_get_tls_certificate_errors): Deleted.

2021-04-22  Myles C. Maxfield  <mmaxfield@apple.com>

        [iOS] Web processes recreated after crashing are not created with the right contentSizeCategory
        https://bugs.webkit.org/show_bug.cgi?id=224916

        Reviewed by Tim Horton.

        The constructor of WKWebView sets the contentSizeCategory for the first page.
        But if the web process crashes, the new one won't have it set.

        This patch simply adds the contentSizeCategory to the WebProcessCreationParameters.

        Tests: TextStyleFontSize.Startup
               TextStyleFontSize.AfterCrash

        * rendering/RenderThemeCocoa.h:

2021-04-22  Alejandro G. Castro  <alex@igalia.com>

        REGRESSION(r275790) [GTK][WPE] Scrolling rendering fails after the second page
        https://bugs.webkit.org/show_bug.cgi?id=224824

        Reviewed by Simon Fraser.

        We are making the implementation more similar to the Apple
        scrolling coordinator. Now we reimplement willStartRenderingUpdate
        to be able to synchronize the state there. That way we can avoid
        the timer and just schedule a rendering update when we want to
        commit the tree state.

        Test: Fixes the timeout of the overflow-scrollable-after-back.html,
        added in the regression.

        * page/scrolling/nicosia/ScrollingCoordinatorNicosia.cpp:
        (WebCore::ScrollingCoordinatorNicosia::ScrollingCoordinatorNicosia):
        (WebCore::ScrollingCoordinatorNicosia::pageDestroyed):
        (WebCore::ScrollingCoordinatorNicosia::commitTreeStateIfNeeded):
        (WebCore::ScrollingCoordinatorNicosia::scheduleTreeStateCommit):
        (WebCore::ScrollingCoordinatorNicosia::willStartRenderingUpdate):
        (WebCore::ScrollingCoordinatorNicosia::commitTreeState): Deleted.
        * page/scrolling/nicosia/ScrollingCoordinatorNicosia.h:

2021-04-22  Kimmo Kinnunen  <kkinnunen@apple.com>

        GraphicsContextGLOpenGLCocoa should check that ANGLE is loaded in WK1 releaseCurrentContext
        https://bugs.webkit.org/show_bug.cgi?id=224532
        <rdar://problem/76632149>

        Reviewed by Kenneth Russell.

        Avoid crashing in case WK1 is used but ANGLE library is not present.
        There are some cases where ANGLE could be omitted for size savings.

        * platform/graphics/cocoa/GraphicsContextGLOpenGLCocoa.mm:
        (WebCore::GraphicsContextGLOpenGL::releaseCurrentContext):

2021-04-21  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] GetDoubleClickTime() returns 0 in the non-interactive window station on Windows 10 version 2004
        https://bugs.webkit.org/show_bug.cgi?id=224793

        Reviewed by Don Olmstead.

        Some editing and events tests using double click were failing on
        Windows 10 version 2004 and 20H2. DumpRenderTree.exe creates a
        non-interactive window station if it is running as admin. However,
        GetDoubleClickTime() returns 0 in the window station on the latest
        Windows 10.

        * platform/win/GDIUtilities.h:
        (WebCore::getDoubleClickTime): Added.

2021-04-21  Zalan Bujtas  <zalan@apple.com>

        Ignore column spanner property for the inner part of a text control.
        https://bugs.webkit.org/show_bug.cgi?id=224757
        <rdar://problem/76844224>

        Reviewed by Antti Koivisto.

        Let's not try to span columns with the _inner_ part of a text control. Such subtrees should be opaque to multi-column layout.
        (we already do this for <legend>)

        Test: fast/multicol/spanner-inside-text-control.html

        * rendering/updating/RenderTreeBuilderMultiColumn.cpp:
        (WebCore::isValidColumnSpanner):

2021-04-21  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r276380 and r276386.
        https://bugs.webkit.org/show_bug.cgi?id=224912

        Caused WPT css/css-counter-styles/cssom test crashes on macOS
        WK1 with ASan

        Reverted changesets:

        "[css-counter-styles] Parse @counter-style descriptors"
        https://bugs.webkit.org/show_bug.cgi?id=224718
        https://trac.webkit.org/changeset/276380

        "CSSComputedStyleDeclaration.cpp should use C++ style
        comments"
        https://bugs.webkit.org/show_bug.cgi?id=224875
        https://trac.webkit.org/changeset/276386

2021-04-21  Peng Liu  <peng.liu6@apple.com>

        [GPUP] Refactor SourceBuffer::enqueuedSamplesForTrackID() for testing purposes
        https://bugs.webkit.org/show_bug.cgi?id=224891

        Reviewed by Eric Carlson.

        This patch is a preparation to run `MockMediaPlayerMediaSource` in the GPU Process.

        `SourceBuffer::enqueuedSamplesForTrackID()` is a synchronous function used for testing
        purposes. It works fine when "Media in GPU process" is disabled. However, when
        "Media in GPU process" is enabled, we have to use a synchronous IPC message to
        implement it. This patch changes it to be a function with a completion handler
        parameter, so that we can implement it with an asynchronous IPC message when
        we run `MockMediaPlayerMediaSource` in the GPU process.

        There is no behavior change when "Media in GPU Process" is disabled.

        Covered by existing tests.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::enqueuedSamplesForTrackID):
        * Modules/mediasource/SourceBuffer.h:
        * platform/graphics/SourceBufferPrivate.cpp:
        (WebCore::SourceBufferPrivate::enqueuedSamplesForTrackID):
        * platform/graphics/SourceBufferPrivate.h:
        (WebCore::SourceBufferPrivate::enqueuedSamplesForTrackID): Deleted.
        * platform/mock/mediasource/MockSourceBufferPrivate.cpp:
        (WebCore::MockSourceBufferPrivate::enqueuedSamplesForTrackID):
        * platform/mock/mediasource/MockSourceBufferPrivate.h:

        * testing/Internals.cpp:
        (WebCore::Internals::enqueuedSamplesForTrackID):
        * testing/Internals.h:
        * testing/Internals.idl:

2021-04-21  Chris Dumez  <cdumez@apple.com>

        Crash under RegistrationDatabase::openSQLiteDatabase()
        https://bugs.webkit.org/show_bug.cgi?id=224895
        <rdar://64574013>

        Reviewed by Geoffrey Garen.

        This was a thread-safety issue. The static string in recordsTableSchema() was being used
        from several threads without synchronization. The reason is that there can be several
        RegistrationDatabase that co-exist (one per SWServer, meaning one per sessionID) and each
        RegistrationDatabase was using its own WorkQueue.

        To address the issue, all RegistrationDatabase objects now share the same WorkQueue.

        * workers/service/server/RegistrationDatabase.cpp:
        (WebCore::registrationDatabaseWorkQueue):
        (WebCore::RegistrationDatabase::RegistrationDatabase):

2021-04-21  Wenson Hsieh  <wenson_hsieh@apple.com>

        Introduce helper methods to map FloatQuads to and from content and root view coordinates
        https://bugs.webkit.org/show_bug.cgi?id=224883

        Reviewed by Tim Horton.

        Add new helper methods to transform FloatQuads from content coordinates to root view coordinates, and vice
        versa; use these methods in several places throughout WebKit to avoid code duplication.

        No change in behavior.

        * inspector/agents/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::didPaint):
        (WebCore::InspectorTimelineAgent::localToPageQuad): Deleted.
        * inspector/agents/InspectorTimelineAgent.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::rootViewToContents const):
        (WebCore::ScrollView::contentsToRootView const):
        * platform/ScrollView.h:

2021-04-21  Julian Gonzalez  <julian_a_gonzalez@apple.com>

        Crash in StyledMarkupAccumulator::traverseNodesForSerialization()
        https://bugs.webkit.org/show_bug.cgi?id=224836

        Reviewed by Ryosuke Niwa.

        In traverseNodesForSerialization(), make sure we check if the current node
        is a descendant of the pastEnd node even if we not entering the current node.

        Test: editing/execCommand/selectAll-copy-crash.html

        * editing/markup.cpp:
        (WebCore::StyledMarkupAccumulator::traverseNodesForSerialization):

2021-04-21  Chris Dumez  <cdumez@apple.com>

        GPUProcess launches unnecessarily when loading the amazon front page
        https://bugs.webkit.org/show_bug.cgi?id=224843

        Reviewed by Eric Carlson.

        Amazon.com was going media-related feature detection like so:
        ```
        !!h.createElement("audio").canPlayType
        !!h.createElement("video").canPlayType
        ```

        Constructing an HTMLAudioElement / HTMLVideoElement would initialize a MediaSession
        object, which would launch the GPUProcess. Running such code should really not require
        launching the GPUProcess though.

        To address this, I made the MediaSession initialization lazy. Instead of doing it when
        constructing an HTMLMediaElement, we now do it as soon as we actually need a MediaSession
        in the mediaSession() getter. This will at the very least happen in prepareForLoad() after
        setting the 'src' attribute. However, in cases where the HTMLMediaElement is not used for
        anyway meaningful (e.g no 'src' attribute is ever set), then we avoid launching the
        GPUProcess.

        I have verified on an iPad that visiting the amazon.com front page and searching for
        something no longer launches the GPUProcess after this change. This changes also seems to
        be a ~3.6% PLUM progression on iPhone and potentially higher on iPad.

        * html/HTMLAudioElement.cpp:
        (WebCore::HTMLAudioElement::create):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        (WebCore::HTMLMediaElement::initializeMediaSession):
        (WebCore::HTMLMediaElement::~HTMLMediaElement):
        (WebCore::HTMLMediaElement::registerWithDocument):
        (WebCore::HTMLMediaElement::unregisterWithDocument):
        (WebCore::HTMLMediaElement::prepareForDocumentSuspension):
        (WebCore::HTMLMediaElement::resumeFromDocumentSuspension):
        (WebCore::HTMLMediaElement::parseAttribute):
        (WebCore::HTMLMediaElement::didFinishInsertingNode):
        (WebCore::HTMLMediaElement::prepareForLoad):
        (WebCore::HTMLMediaElement::selectMediaResource):
        (WebCore::HTMLMediaElement::loadResource):
        (WebCore::HTMLMediaElement::mediaLoadingFailed):
        (WebCore::HTMLMediaElement::setReadyState):
        (WebCore::HTMLMediaElement::seekWithTolerance):
        (WebCore::HTMLMediaElement::play):
        (WebCore::HTMLMediaElement::playInternal):
        (WebCore::HTMLMediaElement::pause):
        (WebCore::HTMLMediaElement::pauseInternal):
        (WebCore::HTMLMediaElement::setVolume):
        (WebCore::HTMLMediaElement::setMuted):
        (WebCore::HTMLMediaElement::beginScrubbing):
        (WebCore::HTMLMediaElement::mediaPlayerDidAddAudioTrack):
        (WebCore::HTMLMediaElement::sourceWasAdded):
        (WebCore::HTMLMediaElement::mediaPlayerTimeChanged):
        (WebCore::HTMLMediaElement::addBehaviorRestrictionsOnEndIfNecessary):
        (WebCore::HTMLMediaElement::seekToPlaybackPositionEndedTimerFired):
        (WebCore::HTMLMediaElement::mediaEngineWasUpdated):
        (WebCore::HTMLMediaElement::mediaPlayerCharacteristicChanged):
        (WebCore::HTMLMediaElement::pausedForUserInteraction const):
        (WebCore::HTMLMediaElement::updatePlayState):
        (WebCore::HTMLMediaElement::checkForAudioAndVideo):
        (WebCore::HTMLMediaElement::clearMediaPlayer):
        (WebCore::HTMLMediaElement::stopWithoutDestroyingMediaPlayer):
        (WebCore::HTMLMediaElement::stop):
        (WebCore::HTMLMediaElement::suspend):
        (WebCore::HTMLMediaElement::resume):
        (WebCore::HTMLMediaElement::visibilityStateChanged):
        (WebCore::HTMLMediaElement::webkitShowPlaybackTargetPicker):
        (WebCore::HTMLMediaElement::wirelessRoutesAvailableDidChange):
        (WebCore::HTMLMediaElement::setIsPlayingToWirelessTarget):
        (WebCore::HTMLMediaElement::addEventListener):
        (WebCore::HTMLMediaElement::removeEventListener):
        (WebCore::HTMLMediaElement::enqueuePlaybackTargetAvailabilityChangedEvent):
        (WebCore::HTMLMediaElement::remoteHasAvailabilityCallbacksChanged):
        (WebCore::HTMLMediaElement::exitFullscreen):
        (WebCore::HTMLMediaElement::shouldForceControlsDisplay const):
        (WebCore::HTMLMediaElement::configureMediaControls):
        (WebCore::HTMLMediaElement::createMediaPlayer):
        (WebCore::HTMLMediaElement::mediaPlayerIsFullscreenPermitted const):
        (WebCore::HTMLMediaElement::removeBehaviorRestrictionsAfterFirstUserGesture):
        (WebCore::HTMLMediaElement::updateRateChangeRestrictions):
        (WebCore::HTMLMediaElement::maximumSourceBufferSize const):
        (WebCore::HTMLMediaElement::updateMediaState):
        (WebCore::HTMLMediaElement::mediaState const):
        (WebCore::HTMLMediaElement::purgeBufferedDataIfPossible):
        (WebCore::HTMLMediaElement::allowsMediaDocumentInlinePlaybackChanged):
        (WebCore::HTMLMediaElement::isVisibleInViewportChanged):
        (WebCore::HTMLMediaElement::updateShouldAutoplay):
        (WebCore::HTMLMediaElement::updateShouldPlay):
        (WebCore::HTMLMediaElement::playbackControlsManagerBehaviorRestrictionsTimerFired):
        (WebCore::HTMLMediaElement::setInActiveDocument):
        (WebCore::HTMLMediaElement::mediaSession const):
        * html/HTMLMediaElement.h:
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::create):

2021-04-21  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Text selection in image overlays should not be limited to rectilinear quads
        https://bugs.webkit.org/show_bug.cgi?id=224837
        <rdar://76829981>

        Reviewed by Tim Horton.

        Refactor the iOS-specific `WebCore::SelectionGeometry` such that it is backed by a `FloatQuad` instead of an
        `IntRect`, and additionally support a flag to indicate that the selection geometry should render as individual
        quads, instead of allowing adjacent rects to be coalesced based on each rects' enclosing bounds.

        See comments below for more information.

        Test: fast/images/image-extraction/ios/selection-rects-in-image-overlay.html

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::selectionRenderingBehavior):
        * html/HTMLElement.h:
        * platform/ios/SelectionGeometry.cpp:
        (WebCore::SelectionGeometry::SelectionGeometry):

        Change these constructors to take `FloatQuad` instead of an enclosing bounding box of a quad. Refer to call
        sites below.

        (WebCore::SelectionGeometry::setLogicalLeft):
        (WebCore::SelectionGeometry::setLogicalWidth):
        (WebCore::SelectionGeometry::setLogicalTop):
        (WebCore::SelectionGeometry::setLogicalHeight):

        Adjust these four setters so that they automatically inflate the selection quad to the quad's enclosing bounds
        before changing any of the dimensions of the rect. Note that in practice, these methods are only used by code
        that attempts to coalesce adjacent selection geometries, in which case we shouldn't be rendering non-rectilinear
        quads anyways.

        (WebCore::SelectionGeometry::rect const):

        This method now computes the enclosing bounding rect of the selection quad. Since this can be called many times
        for a single selection geometry, we cache the enclosing bounds in `m_cachedEnclosingRect` to avoid repeated
        bounding box computation.

        (WebCore::SelectionGeometry::setQuad):

        Set the selection quad, and invalidate the enclosing bounding rect.

        (WebCore::SelectionGeometry::setRect):

        Since we're already setting the quad from an `IntRect`, we can go ahead and set the cached enclosing rect at the
        same time to avoid computing it again in the future.

        (WebCore::operator<<):
        * platform/ios/SelectionGeometry.h:

        Add a few new members to `SelectionGeometry`. Instead of maintaining an `IntRect`, store a `FloatRect` in
        `m_quad`. Additionally, add a new enum describing how the `SelectionGeometry` should behave. This enum only has
        two values: `CoalesceBoundingRects`, indicating that adjacent selection geometries should be coalesced based on
        the enclosing bounding rects of their quads, and `UseIndividualQuads`, indicating that each quad should be
        rendered individually.

        (WebCore::SelectionGeometry::quad const):
        (WebCore::SelectionGeometry::logicalLeft const):
        (WebCore::SelectionGeometry::logicalWidth const):
        (WebCore::SelectionGeometry::logicalTop const):
        (WebCore::SelectionGeometry::logicalHeight const):
        (WebCore::SelectionGeometry::behavior const):
        (WebCore::SelectionGeometry::setBehavior):
        (WebCore::SelectionGeometry::rect const): Deleted.
        (WebCore::SelectionGeometry::setRect): Deleted.
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::collectSelectionGeometries):
        * rendering/RenderLineBreak.cpp:
        (WebCore::RenderLineBreak::collectSelectionGeometries):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::collectSelectionGeometries):
        (WebCore::adjustLineHeightOfSelectionGeometries):

        When collecting selection geometry from renderers, avoid coalescing selection geometry when the
        `SelectionGeometry` has `SelectionRenderingBehavior::UseIndividualQuads`.

        (WebCore::coalesceSelectionGeometries):
        (WebCore::RenderObject::collectSelectionGeometriesInternal):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::collectSelectionGeometries):

2021-04-21  Tyler Wilcock  <twilco.o@protonmail.com>

        CSSComputedStyleDeclaration.cpp should use C++ style comments
        https://bugs.webkit.org/show_bug.cgi?id=224875

        Reviewed by Darin Adler.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::valueForPropertyInStyle):
        Use // instead of /* */ for comments, as this is suggested WebKit
        coding style.

2021-04-21  Aditya Keerthi  <akeerthi@apple.com>

        [iOS][FCR] Adjust border radius for large buttons and <select>
        https://bugs.webkit.org/show_bug.cgi?id=224825
        <rdar://problem/76912116>

        Reviewed by Wenson Hsieh.

        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::adjustRoundBorderRadius):

        Larger UIKit buttons do not have a pill-shaped appearance. Match their
        appearance for buttons and <select> elements that are natively styled
        (ones that do not set "-webkit-appearance: none").

2021-04-21  Adrian Perez de Castro  <aperez@igalia.com>

        Non-unified build fixes, mid April 2021 edition
        https://bugs.webkit.org/show_bug.cgi?id=222652
        <rdar://problem/75262285>

        Unreviewed non-unified build fixes.

        No new tests needed.

        * bindings/js/JSWebXRRigidTransformCustom.cpp: Add missing JSDOMConvertBufferSource.h
        include.
        * bindings/js/JSWebXRSpaceCustom.cpp: Add missing JSWebXRReferenceSpace.h include.
        * bindings/js/JSWebXRViewCustom.cpp: Add missing JSDOMConvertBufferSource.h include.
        * bindings/js/WorkerModuleScriptLoader.cpp: Add missing ServiceWorkerGlobalScope.h
        include.
        * css/CSSFontFaceSrcValue.cpp: Add missing CachedFontLoadRequest.h include.
        * css/parser/CSSPropertyParserWorkerSafe.cpp: Add missing includes for
        CSSFontFaceSrcValue.h, CSSFontFeatureValue.h, CSSUnicodeRangeValue.h, Document.h, and
        StyleSheetContents.h; remove (now unneeded) CSSPropertyParserHelpers.h include.
        (WebCore::CSSPropertyParserWorkerSafe::parseFont): Sprinkle usage of functions with
        missing WebCore:: namespace prefixes.
        (WebCore::CSSPropertyParserHelpersWorkerSafe::consumeFontFaceSrcLocal): Ditto.
        (WebCore::CSSPropertyParserHelpersWorkerSafe::consumeFontStyleRange): Ditto.
        * css/parser/CSSPropertyParserWorkerSafe.h: Add missing CSSPropertyParserHelpers.h
        include.
        * dom/DocumentFontLoader.cpp: Add missing includes CSSFontSelector.h,
        CachedResourceLoader.h, Frame.h, and FrameLoader.h
        * editing/AppendNodeCommand.cpp: Add missing CompositeEditCommand.h include.
        * editing/DeleteFromTextNodeCommand.cpp: Ditto.
        * editing/InsertIntoTextNodeCommand.cpp: Ditto.
        * editing/InsertNodeBeforeCommand.cpp: Ditto.
        * editing/MergeIdenticalElementsCommand.h: Ditto, and remove unneeded EditCommand.h
        include.
        * editing/RemoveNodeCommand.cpp: Add missing CompositeEditCommand.h include.
        * editing/SetNodeAttributeCommand.cpp: Ditto.
        * editing/SetSelectionCommand.cpp: Ditto.
        * editing/SplitElementCommand.cpp: Ditto.
        * editing/SplitTextNodeCommand.cpp: Ditto.
        * loader/cache/CachedFontLoadRequest.h: Add missing FontSelectionAlgorithm.h include.
        * platform/graphics/FontTaggedSettings.h: Add missing wtf/Hasher.h include.
        * platform/text/BidiContext.cpp: Add missing <mutex> and wtf/NeverDestroyed.h includes.
        * workers/WorkerGlobalScopeProxy.h: Forward-declare WebCore::ScriptBuffer.

2021-04-21  Aditya Keerthi  <akeerthi@apple.com>

        [iOS][FCR] Update datalist dropdown indicator
        https://bugs.webkit.org/show_bug.cgi?id=224844
        <rdar://problem/76785950>

        Reviewed by Wenson Hsieh.

        * css/html.css:
        (input::-webkit-list-button):

        Updated to use a "small" sized SF symbol.

2021-04-21  Tyler Wilcock  <twilco.o@protonmail.com>

        [css-counter-styles] Parse @counter-style descriptors
        https://bugs.webkit.org/show_bug.cgi?id=224718

        Reviewed by Darin Adler.

        Implement parsing and CSSCounterStyleRule IDL interface for @counter-style descriptors.
        See spec for full details on all descriptors:

        https://drafts.csswg.org/css-counter-styles-3/#the-counter-style-rule

        Test: webexposed/counter-style-image-symbols-not-exposed.html and WPTs

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::valueForPropertyInStyle):
        Return `nullptr` for new @counter-style descriptor properties.

        * css/CSSCounterStyleRule.cpp:
        (WebCore::toCounterStyleSystemEnum):
        (WebCore::symbolsValidForSystem):
        (WebCore::StyleRuleCounterStyle::newValueInvalidOrEqual const):
        (WebCore::CSSCounterStyleRule::cssText const):
        (WebCore::CSSCounterStyleRule::setName):
        (WebCore::CSSCounterStyleRule::setterInternal):
        (WebCore::CSSCounterStyleRule::setSystem):
        (WebCore::CSSCounterStyleRule::setNegative):
        (WebCore::CSSCounterStyleRule::setPrefix):
        (WebCore::CSSCounterStyleRule::setSuffix):
        (WebCore::CSSCounterStyleRule::setRange):
        (WebCore::CSSCounterStyleRule::setPad):
        (WebCore::CSSCounterStyleRule::setFallback):
        (WebCore::CSSCounterStyleRule::setSymbols):
        (WebCore::CSSCounterStyleRule::setAdditiveSymbols):
        (WebCore::CSSCounterStyleRule::setSpeakAs):
        Implement setters and tangential functionality required by setters.

        * css/CSSCounterStyleRule.h:
        Replace FIXME with actual descriptor getter and setter
        implementations.

        * css/CSSProperties.json:
        Add @counter-style descriptor properties.

        * css/CSSValueKeywords.in:
        Add new values required for `system` and `speak-as` 
        @counter-style descriptor properties.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeCounterStyleSystem):
        (WebCore::consumeCounterStyleSymbol):
        (WebCore::consumeCounterStyleNegative):
        (WebCore::consumeCounterStyleRangeBound):
        (WebCore::consumeCounterStyleRange):
        (WebCore::consumeCounterStylePad):
        (WebCore::consumeCounterStyleSymbols):
        (WebCore::consumeCounterStyleAdditiveSymbols):
        (WebCore::consumeCounterStyleSpeakAs):
        (WebCore::CSSPropertyParser::parseCounterStyleDescriptor):
        Parse @counter-style descriptors.

2021-04-21  Chris Dumez  <cdumez@apple.com>

        ASSERTION FAILED: context().isInitialized() ./Modules/webaudio/OfflineAudioDestinationNode.cpp(142)
        https://bugs.webkit.org/show_bug.cgi?id=224876
        <rdar://76896256>

        Reviewed by Eric Carlson.

        In OfflineAudioDestinationNode::uninitialize(), we were synchronizing with the
        render thread to make sure that OfflineAudioDestinationNode::offlineRender() was
        done running before proceeding with uninitialization. However, when an audio
        worklet is used, m_renderThread is null and no synchronization with the AudioWorklet
        thread would happen. This patch adds the missing synchronization with the AudioWorklet
        thread when present.

        Test: webaudio/OfflineAudioContext/offlineaudiocontext-uninitialized-crash.html

        * Modules/webaudio/OfflineAudioDestinationNode.cpp:
        (WebCore::OfflineAudioDestinationNode::uninitialize):

2021-04-21  Simon Fraser  <simon.fraser@apple.com>

        will-change: transform should affect nested position:fixed
        https://bugs.webkit.org/show_bug.cgi?id=167600

        Reviewed by Alan Bujtas.

        "will-change transform" should make an element a container for position:fixed,
        just as a transform does.

        Test: fast/css/will-change/will-change-transform-contains-fixed.html

        * rendering/RenderElement.h:
        (WebCore::RenderElement::canContainFixedPositionObjects):

2021-04-21  Antoine Quint  <graouts@webkit.org>

        Add discrete animation support for several background CSS properties
        https://bugs.webkit.org/show_bug.cgi?id=224871

        Reviewed by Antti Koivisto.

        We now support animation of background-attachment, background-clip, background-origin
        and background-repeat.

        * animation/CSSPropertyAnimation.cpp:
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::setBackgroundAttachment):
        (WebCore::RenderStyle::setBackgroundClip):
        (WebCore::RenderStyle::setBackgroundOrigin):
        (WebCore::RenderStyle::setBackgroundRepeatX):
        (WebCore::RenderStyle::setBackgroundRepeatY):

2021-04-21  Zalan Bujtas  <zalan@apple.com>

        Enable mid-layout render tree dump with floating boxes
        https://bugs.webkit.org/show_bug.cgi?id=224878

        Reviewed by Simon Fraser.

        Floating box geometry dump requires the box to be placed first (see assert(isPlaced()) in FloatingObject::frameRect()).

        * rendering/FloatingObjects.cpp:
        (WebCore::operator<<):

2021-04-21  Chris Lord  <clord@igalia.com>

        DOMException should be Serializable
        https://bugs.webkit.org/show_bug.cgi?id=224865

        Reviewed by Chris Dumez.

        Implement serialization of DOMException objects.

        No new tests, rebaselined existing tests.

        * bindings/js/SerializedScriptValue.cpp:

2021-04-21  Rob Buis  <rbuis@igalia.com>

        RenderGeometryMap should know about individual transform properties
        https://bugs.webkit.org/show_bug.cgi?id=224856

        Reviewed by Simon Fraser.

        RenderGeometryMap should know about individual transform properties.

        Test: fast/transforms/textarea-individual-transform-properties-crash.html

        * rendering/RenderGeometryMap.cpp:
        (WebCore::RenderGeometryMap::mapToContainer const):
        (WebCore::canMapBetweenRenderersViaLayers):

2021-04-21  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Add OpenGLES2 targets
        https://bugs.webkit.org/show_bug.cgi?id=224786

        Reviewed by Adrian Perez de Castro.

        Use the OpenGL::GLES target.

        * CMakeLists.txt:

2021-04-21  Peng Liu  <peng.liu6@apple.com>

        [GPUP] Refactor the implementation of MediaSource::buffered()
        https://bugs.webkit.org/show_bug.cgi?id=224848

        Reviewed by Eric Carlson.

        This patch is a preparation to run `MockMediaPlayerMediaSource` in the GPU Process.

        In the current implementation, `MediaSource::m_buffered` is updated by the caller
        of `MediaSource::buffered()`. As a result, when an object from the GPU process
        wants to get the value of `m_buffered`, it may need to use a synchronous IPC
        message (from the GPU process to a WebContent process), which is bad.
        Therefore, there is an `ASSERT_NOT_REACHED()` in `RemoteMediaSourceProxy::buffered()`.
        However, `MockMediaPlayerMediaSource` needs to use it for testing purposes.

        This patch adds a function `sourceBufferDidChangeBufferedDirty()` to
        `MediaSource`, so that `SourceBuffer` can notify the `MediaSource` object to
        refresh its `m_buffered` and notify `MediaSourcePrivate` regarding the new value.
        When "Media in GPU process" is enabled, `MediaSourcePrivateRemote` will forward
        the new value to the GPU process, so that we can avoid the synchronous IPC
        message from the GPU process to the WebContent process, and meet the requirement
        of `MockMediaPlayerMediaSource`.

        There is no behavior change when "Media in GPU Process" is disabled.

        Covered by existing tests.

        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::MediaSource):
        (WebCore::MediaSource::buffered const):
        (WebCore::MediaSource::sourceBufferDidChangeBufferedDirty):
        (WebCore::MediaSource::regenerateActiveSourceBuffers):
        (WebCore::MediaSource::updateBufferedIfNeeded):
        * Modules/mediasource/MediaSource.h:
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::sourceBufferPrivateBufferedDirtyChanged):
        * platform/graphics/MediaSourcePrivate.h:
        (WebCore::MediaSourcePrivate::bufferedChanged):

2021-04-21  Aditya Keerthi  <akeerthi@apple.com>

        [iOS][FCR] <select> decorations should match the text color
        https://bugs.webkit.org/show_bug.cgi?id=224831
        <rdar://problem/76918959>

        Reviewed by Darin Adler.

        Currently, <select> decorations always have a system blue color, even
        if a different text color is specified. To improve stylability, the
        color of the decoration should match the color of the text.

        Test: fast/forms/ios/form-control-refresh/select/decoration-color.html

        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::paintMenuListButtonDecorationsWithFormControlRefresh):

        Use the color property of the style when painting the decoration.

2021-04-21  Michael Catanzaro  <mcatanzaro@gnome.org>

        URL::URL(HashTableDeletedValueType) triggers -Wuninitialized warnings with GCC 11
        https://bugs.webkit.org/show_bug.cgi?id=224755

        Reviewed by Chris Dumez

        My first thought here was to just always fully-initialize the URL object when used as a
        HashTableDeletedValue, but Alex is concerned it might have a performance impact. Instead,
        Chris suggested we could use the SecurityOriginData rather than URL to track whether we are
        a HashTableDeletedValue. This seems good because it avoids any size increase in
        ServiceWorkerRegistrationKey. Additionally, let's follow Darin's advice to construct the
        ServiceWorkerRegistrationKey using placement new rather than via assignment to the
        uninitialized storage.

        There should be no behavior change. (Although we were copying uninitialized data before, it
        was never read. Hopefully.)

        * workers/service/ServiceWorkerRegistrationKey.h:
        (WTF::HashTraits<WebCore::ServiceWorkerRegistrationKey>::constructDeletedValue):
        (WTF::HashTraits<WebCore::ServiceWorkerRegistrationKey>::isDeletedValue):

2021-04-21  Simon Fraser  <simon.fraser@apple.com>

        Enhance scrolling-related trace points
        https://bugs.webkit.org/show_bug.cgi?id=224852

        Reviewed by Tim Horton.

        Add a new trace point when the "display did refresh" ping gets to ThreadedScrollingTree on
        the EventDispatcher thread, and add some metadata to the existing displayDidRefresh trace
        scope.

        * page/scrolling/ThreadedScrollingTree.cpp:
        (WebCore::ThreadedScrollingTree::displayDidRefreshOnScrollingThread):
        (WebCore::ThreadedScrollingTree::displayDidRefresh):

2021-04-21  Youenn Fablet  <youenn@apple.com>

        AudioMediaStreamTrackRendererUnit should not have its data zeroed if one track has not enough data
        https://bugs.webkit.org/show_bug.cgi?id=224673

        Reviewed by Eric Carlson.

        AudioMediaStreamTrackRendererUnit may get data from multiple tracks.
        If one track has not enough data, AudioSampleDataSource will zero the buffer while it should leave it unchanged.
        If all tracks do not have enough data, AudioMediaStreamTrackRendererUnit will have silent output as the first track will actually zero the buffer.

        Manually tested.

        * platform/audio/cocoa/AudioSampleDataSource.mm:
        (WebCore::AudioSampleDataSource::pullSamplesInternal):

2021-04-21  Zalan Bujtas  <zalan@apple.com>

        [LFC] Take "contain: size" into account when computing the preferred logical width
        https://bugs.webkit.org/show_bug.cgi?id=224850

        Reviewed by Antti Koivisto.

        The intrinsic sizes of the size containment box are determined as if the element had no content,
        following the same logic as when sizing as if empty.

        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::intrinsicWidthConstraints):
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::computeIntrinsicWidthForFormattingRoot):
        * layout/tableformatting/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::computedIntrinsicWidthConstraints):

2021-04-21  Zalan Bujtas  <zalan@apple.com>

        REGRESSION(r256107): Text moves around when selecting at https://www.tokyo-sports.co.jp/entame/news/2834187/
        https://bugs.webkit.org/show_bug.cgi?id=224839
        <rdar://74958484>

        Reviewed by Darin Adler.

        Pass in locale information when constructing the text iterator for the content (locale affects soft wrap opportunities).

        Test: fast/text/line-break-with-locale.html

        * layout/inlineformatting/InlineTextItem.cpp:
        (WebCore::Layout::InlineTextItem::createAndAppendTextItems):
        * layout/inlineformatting/text/TextUtil.cpp: In addition to locale, add missing line breaking mode.
        (WebCore::Layout::TextUtil::lineBreakIteratorMode):
        * layout/inlineformatting/text/TextUtil.h:

2021-04-21  Ziran Sun  <zsun@igalia.com>

        [css-grid] last-baseline shouldn't affect baseline alignment
        https://bugs.webkit.org/show_bug.cgi?id=224538

        Reviewed by Darin Adler and Javier Fernandez.

        According to discussions at https://github.com/w3c/csswg-drafts/issues/5293,
        "align-self: last baseline" should not interfere with baseline alignment in
        first row. This change is to make sure this is checked while deciding
        whether an item participates in baseline alignment.  

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::firstLineBaseline const):
        (WebCore::RenderGrid::isBaselineAlignmentForChild const):

2021-04-21  Martin Robinson  <mrobinson@webkit.org>

        Add basic (non-momentum) wheel event handling for scroll snap
        https://bugs.webkit.org/show_bug.cgi?id=222594

        Reviewed by Darin Adler.

        Test: css3/scroll-snap/scroll-snap-wheel-event.html

        Enable scroll snapping for basic wheel events on GTK+ and WPE. The Mac port
        has special wheel handling due to momentum scrolling. Other scroll-snap-enabled
        ports can just use a basic version.

        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::scroll): Accept a bitmask of options now. This
        will allow using this method when handling wheel events that do not animate.
        (WebCore::ScrollAnimator::handleWheelEvent): Trigger ::scroll with
        scroll snapping enabled and pass the appropriate option to disable animations.
        (WebCore::ScrollAnimator::processWheelEventForScrollSnap): Deleted.
        * platform/ScrollAnimator.h:
        (WebCore::ScrollAnimator::ScrollAnimator::processWheelEventForScrollSnap): Made
        this a method that can be overridden by subclasses.
        * platform/mac/ScrollAnimatorMac.h: Added processWheelEventForScrollSnap.
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::scroll): Pay attention to the NeverAnimate bitmask now.
        (WebCore::ScrollAnimatorMac::processWheelEventForScrollSnap): Added.

2021-04-21  Youenn Fablet  <youenn@apple.com>

        Use BlobURL::getOriginURL in more places
        https://bugs.webkit.org/show_bug.cgi?id=224857

        Reviewed by Alex Christensen.

        Covered by existing tests.

        * loader/PolicyChecker.cpp:
        (WebCore::FrameLoader::PolicyChecker::extendBlobURLLifetimeIfNecessary const):

2021-04-21  Tim Horton  <timothy_horton@apple.com>

        Long-pressing a data detectors link causes the link to be followed
        https://bugs.webkit.org/show_bug.cgi?id=224847
        <rdar://problem/72889738>

        Reviewed by Wenson Hsieh.

        New API tests: iOSMouseSupport.{EndedTouchesTriggerClick,CancelledTouchesDoNotTriggerClick}

        * page/EventHandler.h:

2021-04-21  Youenn Fablet  <youenn@apple.com>

        [ BigSur wk2 ARM64 ] http/wpt/webrtc/change-encoded-transform.html is a flakey crash
        https://bugs.webkit.org/show_bug.cgi?id=224696
        <rdar://problem/76780020>

        Reviewed by Eric Carlson.

        Sometimes the video sender delegate will be recreated on the fly.
        In that case, it might receive a frame from the old delegate before processing an existing frame.
        This makes the encoder queue being null.
        To prevent this we update backends to only register once.

        Covered by tests no longer crashing.

        * Modules/mediastream/libwebrtc/LibWebRTCRtpReceiverTransformBackend.cpp:
        (WebCore::LibWebRTCRtpReceiverTransformBackend::setTransformableFrameCallback):
        * Modules/mediastream/libwebrtc/LibWebRTCRtpReceiverTransformBackend.h:
        * Modules/mediastream/libwebrtc/LibWebRTCRtpSenderTransformBackend.cpp:
        (WebCore::LibWebRTCRtpSenderTransformBackend::setTransformableFrameCallback):
        * Modules/mediastream/libwebrtc/LibWebRTCRtpSenderTransformBackend.h:

2021-04-21  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] Avoid triggering image extraction for animated images
        https://bugs.webkit.org/show_bug.cgi?id=224851

        Reviewed by Megan Gardner.

        Avoid adding the "Reveal Image" context menu item for animated images. Testing is currently blocked on
        webkit.org/b/224641.

        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::populate):

2021-04-21  Megan Gardner  <megan_gardner@apple.com>

        Support scrolling to a selected AppHighlight
        https://bugs.webkit.org/show_bug.cgi?id=224773

        Reviewed by Tim Horton.

        Test: AppHighlights::AppHighlightCreateAndRestoreAndScroll

        * Modules/highlight/AppHighlightStorage.cpp:
        (WebCore::AppHighlightStorage::restoreAndScrollToAppHighlight):
        (WebCore::AppHighlightStorage::attemptToRestoreHighlightAndScroll):
        (WebCore::AppHighlightStorage::restoreUnrestoredAppHighlights):
        (WebCore::AppHighlightStorage::restoreAppHighlight): Deleted.
        * Modules/highlight/AppHighlightStorage.h:
        * WebCore.xcodeproj/project.pbxproj:
        * editing/Editor.cpp:
        (WebCore::TemporarySelectionChange::setSelection):
        * page/Page.cpp:
        (WebCore::Page::doAfterUpdateRendering):

2021-04-20  Ian Gilbert  <iang@apple.com>

        Crash in CompositeEditCommand::insertNodeAt
        https://bugs.webkit.org/show_bug.cgi?id=224504

        Reviewed by Ryosuke Niwa.

        CompositeEditCommand::cleanupAfterDeletion will remove text nodes that only
        have a newline. Added check inside FormatBlockCommand::formatRange to avoid
        a null pointer dereference on a removed node. 

        Test: editing/execCommand/format-block-remove-text-node-crash.html

        * editing/FormatBlockCommand.cpp:
        (WebCore::FormatBlockCommand::formatRange):

2021-04-20  Basuke Suzuki  <basuke.suzuki@sony.com>

        [clang] Remove implicit cast related warnings.
        https://bugs.webkit.org/show_bug.cgi?id=224797

        Reviewed by Darin Adler.

        Added explicit cast to suppress warning.
        Behavior is not changed from implicit cast.

        No new tests because there's no behavior change.

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::adjustLinePositionForPagination):

2021-04-20  Brent Fulgham  <bfulgham@apple.com>

        [Cocoa] Prevent GPU and WebContent processes from attempting to connect to the AppSSO service 
        https://bugs.webkit.org/show_bug.cgi?id=224834
        <rdar://problem/72157514>

        Reviewed by Jiewen Tan.

        Call version of '_protocolClassForRequest' that tells CFNetwork to ignore AppSSO flows
        when building for a platform that supports it.

        * platform/mac/WebCoreNSURLExtras.mm:
        (WebCore::URLByCanonicalizingURL):

2021-04-20  Devin Rousso  <drousso@apple.com>

        Parse `theme_color` in web application manifests and pass it along to `-[WKWebView themeColor]`
        https://bugs.webkit.org/show_bug.cgi?id=224796

        Reviewed by Darin Adler.

        * Modules/applicationmanifest/ApplicationManifest.h:
        (WebCore::ApplicationManifest::encode const):
        (WebCore::ApplicationManifest::decode):

        * Modules/applicationmanifest/ApplicationManifestParser.h:
        * Modules/applicationmanifest/ApplicationManifestParser.cpp:
        (WebCore::ApplicationManifestParser::parse):
        (WebCore::ApplicationManifestParser::ApplicationManifestParser):
        (WebCore::ApplicationManifestParser::parseManifest):
        (WebCore::ApplicationManifestParser::logDeveloperWarning):
        (WebCore::ApplicationManifestParser::parseColor): Added.
        * loader/cache/CachedApplicationManifest.h:
        * loader/cache/CachedApplicationManifest.cpp:
        (WebCore::CachedApplicationManifest::process):
        Pass an actual `Document` instead of a `ScriptExecutionContext` so that we can notify it
        when finished parsing the JSON (`Document::processApplicationManifest`).

        * dom/Document.h:
        (WebCore::Document::themeColor const):
        * dom/Document.cpp:
        (WebCore::Document::processMetaElementThemeColor): Added.
        (WebCore::Document::themeColorChanged): Added.
        (WebCore::Document::processApplicationManifest): Added.
        (WebCore::Document::processThemeColor): Deleted.
        Use the theme color from `<meta name="theme-color">` if valid, falling back to the theme
        color from `"theme_color"` in the web application manifest (if specified). Only notify the
        UIProcess of changes to `<meta name="theme-color">` or the `"theme_color"` in the web
        application manifest if the new value is the value that would be used.

        * html/HTMLMetaElement.cpp:
        (WebCore::HTMLMetaElement::attributeChanged):
        (WebCore::HTMLMetaElement::removedFromAncestor):
        (WebCore::HTMLMetaElement::process):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::rootBackgroundColorOrTransparencyChanged):
        Drive-by: Rename `Document::processThemeColor` to `Document::processMetaElementThemeColor`
        so that it's more specific to `<meta name="theme-color">`.

        * page/ChromeClient.h:
        (WebCore::ChromeClient::themeColorChanged const):
        (WebCore::ChromeClient::pageExtendedBackgroundColorDidChange const):
        Drive-by: Remove the `Color` parameter since it's not actually used in the WebProcess.

2021-04-20  Michael Catanzaro  <mcatanzaro@gnome.org>

        Lots of spurious -Wnonnull warnings with GCC 11
        https://bugs.webkit.org/show_bug.cgi?id=224452

        Reviewed by Darin Adler.

        * css/CSSValue.h:
        (WebCore::CSSValue::deref):
        * css/StyleRule.h:
        (WebCore::StyleRuleBase::deref const):
        * dom/Node.h:
        (WebCore::Node::deref const):

2021-04-20  Wenson Hsieh  <wenson_hsieh@apple.com>

        Rename WebCore::SelectionRect to WebCore::SelectionGeometry
        https://bugs.webkit.org/show_bug.cgi?id=224820

        Reviewed by Megan Gardner.

        To prepare for rendering non-rectilinear selection quads on iOS using UIKit, rename `WebCore::SelectionRect` to
        `WebCore::SelectionGeometry`. In a subsequent patch, this class will be backed by a `FloatQuad` instead of an
        `IntRect`, and will additionally contain a flag indicating whether it should render using the bounding rect of
        the quad (and should additionally be coalesced with surrounding selection rects), or if it should render the
        selection quad without coalescing.

        No change in behavior.

        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper textRectsFromMarkers:withText:]):
        * page/DragController.cpp:
        * page/TextIndicator.cpp:
        (WebCore::initializeIndicator):
        * platform/ios/SelectionGeometry.cpp: Renamed from Source/WebCore/platform/ios/SelectionRect.cpp.
        (WebCore::SelectionGeometry::SelectionGeometry):
        (WebCore::SelectionGeometry::setLogicalLeft):
        (WebCore::SelectionGeometry::setLogicalWidth):
        (WebCore::SelectionGeometry::setLogicalTop):
        (WebCore::SelectionGeometry::setLogicalHeight):
        (WebCore::operator<<):
        * platform/ios/SelectionGeometry.h: Renamed from Source/WebCore/platform/ios/SelectionRect.h.
        (WebCore::SelectionGeometry::rect const):
        (WebCore::SelectionGeometry::logicalLeft const):
        (WebCore::SelectionGeometry::logicalWidth const):
        (WebCore::SelectionGeometry::logicalTop const):
        (WebCore::SelectionGeometry::logicalHeight const):
        (WebCore::SelectionGeometry::direction const):
        (WebCore::SelectionGeometry::minX const):
        (WebCore::SelectionGeometry::maxX const):
        (WebCore::SelectionGeometry::maxY const):
        (WebCore::SelectionGeometry::lineNumber const):
        (WebCore::SelectionGeometry::isLineBreak const):
        (WebCore::SelectionGeometry::isFirstOnLine const):
        (WebCore::SelectionGeometry::isLastOnLine const):
        (WebCore::SelectionGeometry::containsStart const):
        (WebCore::SelectionGeometry::containsEnd const):
        (WebCore::SelectionGeometry::isHorizontal const):
        (WebCore::SelectionGeometry::isInFixedPosition const):
        (WebCore::SelectionGeometry::isRubyText const):
        (WebCore::SelectionGeometry::pageNumber const):
        (WebCore::SelectionGeometry::setRect):
        (WebCore::SelectionGeometry::setDirection):
        (WebCore::SelectionGeometry::setMinX):
        (WebCore::SelectionGeometry::setMaxX):
        (WebCore::SelectionGeometry::setMaxY):
        (WebCore::SelectionGeometry::setLineNumber):
        (WebCore::SelectionGeometry::setIsLineBreak):
        (WebCore::SelectionGeometry::setIsFirstOnLine):
        (WebCore::SelectionGeometry::setIsLastOnLine):
        (WebCore::SelectionGeometry::setContainsStart):
        (WebCore::SelectionGeometry::setContainsEnd):
        (WebCore::SelectionGeometry::setIsHorizontal):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::collectSelectionGeometries):
        (WebCore::RenderImage::collectSelectionRects): Deleted.
        * rendering/RenderImage.h:
        * rendering/RenderLineBreak.cpp:
        (WebCore::RenderLineBreak::collectSelectionGeometries):
        (WebCore::RenderLineBreak::collectSelectionRects): Deleted.
        * rendering/RenderLineBreak.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::collectSelectionGeometries):
        (WebCore::adjustLineHeightOfSelectionGeometries):
        (WebCore::coalesceSelectionGeometries):
        (WebCore::RenderObject::collectSelectionGeometriesWithoutUnionInteriorLines):
        (WebCore::RenderObject::collectSelectionGeometriesInternal):
        (WebCore::RenderObject::collectSelectionRects): Deleted.
        (WebCore::adjustLineHeightOfSelectionRects): Deleted.
        (WebCore::coalesceSelectionRects): Deleted.
        (WebCore::RenderObject::collectSelectionRectsWithoutUnionInteriorLines): Deleted.
        (WebCore::RenderObject::collectSelectionRectsInternal): Deleted.
        * rendering/RenderObject.h:
        * rendering/RenderSelectionInfo.cpp:
        (WebCore::RenderSelectionInfo::RenderSelectionInfo):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::collectSelectionGeometries):
        (WebCore::RenderText::collectSelectionGeometriesForLineBoxes):
        (WebCore::RenderText::selectionRectForRepaint):
        (WebCore::RenderText::collectSelectionRects): Deleted.
        (WebCore::RenderText::collectSelectionRectsForLineBoxes): Deleted.
        * rendering/RenderText.h:

2021-04-20  Sam Weinig  <weinig@apple.com>

        Separated models don't get opacity set on them at all
        https://bugs.webkit.org/show_bug.cgi?id=224763

        Reviewed by Tim Horton.

        Test: model-element/model-element-graphics-layers-opacity.html

        This certainly won't be the way things land once separated/optimized
        layer semantics are better understood, but for now, it is useful to
        explicitly propogate the opacity of the owing layer to the content
        layer if the content layer is a model layer. In the future, we may want
        to do this for any separated child (and conversely, only to the content
        layer if it is separated), but this will allow us to play a bit futher
        in our experimentation.

        Also adds support for dumping the opacity of a content layer to make
        this testable.

        * platform/graphics/GraphicsLayerClient.h:
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::setContentsToModel):
        (WebCore::GraphicsLayerCA::purposeNameForInnerLayer const):
        (WebCore::GraphicsLayerCA::dumpInnerLayer const):
        * testing/Internals.cpp:
        (WebCore::toPlatformLayerTreeFlags):
        * testing/Internals.h:
        * testing/Internals.idl:

2021-04-20  Kate Cheney  <katherine_cheney@apple.com>

        Preconnect tasks and preflight checks do not correctly mark app-bound context string
        https://bugs.webkit.org/show_bug.cgi?id=224779
        <rdar://problem/76738879>

        Reviewed by Brent Fulgham.

        Tests: http/tests/in-app-browser-privacy/context-string-preconnect.html
               http/tests/in-app-browser-privacy/context-string-preflight.html

        * loader/CrossOriginAccessControl.cpp:
        (WebCore::createAccessControlPreflightRequest):
        CORS preflight case.

2021-04-20  Aditya Keerthi  <akeerthi@apple.com>

        [iOS][FCR] Update date/time picker appearance
        https://bugs.webkit.org/show_bug.cgi?id=224794
        <rdar://problem/76785859>

        Reviewed by Wenson Hsieh.

        * en.lproj/Localizable.strings:

        Remove now unused string.

        * platform/LocalizedStrings.cpp:
        * platform/LocalizedStrings.h:
        * platform/cocoa/LocalizedStringsCocoa.mm:
        (WebCore::formControlDoneButtonTitle):

        Moved definition out of PLATFORM(WATCHOS) in LocalizedStrings.cpp and
        into LocalizedStringsCocoa, so that the "Done" string can be used by
        PLATFORM(IOS_FAMILY).

2021-04-20  Fujii Hironori  <Hironori.Fujii@sony.com>

        editing/execCommand/insert-image-in-composed-list.html is crashing
        https://bugs.webkit.org/show_bug.cgi?id=224801

        Reviewed by Don Olmstead.

        This crash were happened for Release builds of GTK port compiled
        by GCC and WinCairo port compiled by Clang 12.

        As per the comment of Position::containerNode(), it returns null
        in some cases.

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::removeRedundantBlocks): Added
        null checking for the return value of Position::containerNode().

2021-04-20  Aditya Keerthi  <akeerthi@apple.com>

        REGRESSION (r275523): [iOS] Opaque system fill colors are incorrect in dark mode
        https://bugs.webkit.org/show_bug.cgi?id=224800
        <rdar://problem/76878335>

        Reviewed by Darin Adler.

        r275523 updated form control backgrounds to use opaque variants of
        system colors. This change was implemented by blending the system
        colors over a white background. However, in dark mode, the colors
        should be blended over a black background, to retain a dark appearance.

        Updated an existing test to validate the colors in light and dark mode.

        * rendering/RenderThemeIOS.mm:
        (WebCore::systemColorFromCSSValueSystemColorInformation):

        Added a useDarkAppearance parameter, so that the system color can be
        blended over black when necessary.

        (WebCore::systemColorFromCSSValueID):
        (WebCore::RenderThemeIOS::cssValueToSystemColorMap const):

2021-04-20  Basuke Suzuki  <basuke.suzuki@sony.com>

        Remove UNUSED warnings based on the configuration.
        https://bugs.webkit.org/show_bug.cgi?id=224787

        Reviewed by Darin Adler.

        Added UNUSED_VARIABLE or its variant to suppress warnings based on the configuration.

        No new tests because it just for suppression of the warnings.

        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::willSendRequestInternal):
        * page/PageConsoleClient.cpp:
        (WebCore::snapshotCanvas):
        * page/PerformanceLogging.cpp:
        (WebCore::PerformanceLogging::didReachPointOfInterest):
        * platform/graphics/freetype/FontCacheFreeType.cpp:
        (WebCore::FontCache::systemFallbackForCharacters):
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:

2021-04-19  Darin Adler  <darin@apple.com>

        Refactor sorted array mapping machinery in LocaleToScriptMapping.cpp for reuse elsewhere
        https://bugs.webkit.org/show_bug.cgi?id=224733

        Reviewed by Yusuke Suzuki.

        * Modules/indexeddb/client/IDBConnectionToServer.h: Removed unneeded includes.
        * Modules/mediastream/RTCRtpSFrameTransformer.h: Ditto.
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.h: Ditto.
        * Modules/webauthn/AuthenticatorCoordinatorClient.h: Ditto.
        * Modules/websockets/WebSocketChannel.cpp: Ditto.
        * Modules/websockets/WebSocketDeflater.cpp: Ditto.
        * bindings/IDLTypes.h: Ditto.
        * bridge/jsc/BridgeJSC.h: Ditto.
        * contentextensions/DFANode.h: Ditto.
        * contentextensions/NFAToDFA.cpp: Ditto.
        * contentextensions/Term.h: Ditto.
        * css/typedom/StylePropertyMap.h: Ditto.
        * css/typedom/StylePropertyMapReadOnly.cpp: Ditto.
        * cssjit/SelectorCompiler.cpp: Ditto.

        * platform/text/LocaleToScriptMapping.cpp:
        (WebCore::scriptNameToCode): Refactor to use SortedArrayMap. Also changed to take StringView.
        (WebCore::localeToScriptCodeForFontSelection): Ditto. Cut down on memory allocation by using
        StringView instead of String while looping through substrings.

        * platform/text/LocaleToScriptMapping.h: Changed scriptNameToCode to take StringView.

2021-04-20  Zalan Bujtas  <zalan@apple.com>

        [LFC] Implement Box::isSizeContainmentBox()
        https://bugs.webkit.org/show_bug.cgi?id=224799

        Reviewed by Antti Koivisto.

        This is part of https://www.w3.org/TR/css-contain-2/#containment-size

        * layout/layouttree/LayoutBox.cpp:
        (WebCore::Layout::Box::isSizeContainmentBox const):
        * layout/layouttree/LayoutBox.h:

2021-04-20  Kimmo Kinnunen  <kkinnunen@apple.com>

        AudioSourceProviderAVFObjC uses atomic variables but also locks with mutex
        https://bugs.webkit.org/show_bug.cgi?id=224543

        Reviewed by Darin Adler.

        Remove the use of std::atomic, the variables are already protected by the
        mutex.

        * platform/graphics/avfoundation/AudioSourceProviderAVFObjC.h:
        * platform/graphics/avfoundation/AudioSourceProviderAVFObjC.mm:
        (WebCore::AudioSourceProviderAVFObjC::provideInput):
        (WebCore::AudioSourceProviderAVFObjC::process):

2021-04-20  Martin Robinson  <mrobinson@webkit.org>

        Re-land: Eliminate ScrollAnimatorGeneric::m_smoothAnimation
        https://bugs.webkit.org/show_bug.cgi?id=222588

        Reviewed by Žan Doberšek.

        No new tests. This change should not change behavior.

        Eliminate the extra ScrollAnimationSmooth in ScrollAnimatorGeneric. The base
        class already knows how to do scroll animations for programmatic scrolls,
        so we can reuse that animation for doing ScrollAnimator::scroll(...). This
        makes the code easier to understand and should simplify managing interactions
        between the different animations in the future.

        Changes since first version: Now only update the current position of the animation
        if it is not active. This is the behavior that was used in ScrollAnimatorGeneric
        and is the correct behavior when using ScrollAnimationSmooth.

        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::ScrollAnimator): Renamed m_animationProgrammaticScroll
        to m_scrollAnimation. The more generic name reflects the fact that it is also
        used for doing scrolling from UI interaction now.
        (WebCore::ScrollAnimator::scroll): Use the ScrollAnimationSmooth member to do
        animated scrolls when necessary.
        (WebCore::ScrollAnimator::scrollToPositionWithoutAnimation): Make sure the animation
        is up to date with the current position when scrolling without it. This is
        how ScrollAnimatorGeneric treated its ScrollAnimationSmooth.
        (WebCore::ScrollAnimator::scrollToPositionWithAnimation): Rename member.
        (WebCore::ScrollAnimator::cancelAnimations): Ditto.
        (WebCore::ScrollAnimator::willEndLiveResize): Ditto.
        (WebCore::ScrollAnimator::didAddVerticalScrollbar): Ditto.
        (WebCore::ScrollAnimator::didAddHorizontalScrollbar): Ditto.
        * platform/ScrollAnimator.h: Ditto.
        * platform/generic/ScrollAnimatorGeneric.cpp:
        (WebCore::ScrollAnimatorGeneric::ScrollAnimatorGeneric): Eliminate ScrollAnimationSmooth.
        (WebCore::ScrollAnimatorGeneric::scrollToPositionWithoutAnimation): Ditto.
        (WebCore::ScrollAnimatorGeneric::didAddVerticalScrollbar): Ditto.
        (WebCore::ScrollAnimatorGeneric::didAddHorizontalScrollbar): Ditto.
        (WebCore::ScrollAnimatorGeneric::ensureSmoothScrollingAnimation): Deleted.
        (WebCore::ScrollAnimatorGeneric::scroll): Deleted.
        (WebCore::ScrollAnimatorGeneric::willEndLiveResize): Deleted.
        * platform/generic/ScrollAnimatorGeneric.h:

2021-04-20  Chris Lord  <clord@igalia.com>

        Don't use the full CSS parser for CSSFontFaceSet
        https://bugs.webkit.org/show_bug.cgi?id=224749

        Reviewed by Darin Adler.

        Replace use of the full CSS parser in CSSFontFaceSet with
        CSSPropertyParserWorkerSafe::parseFont to parse font shorthands. This
        makes CSSFontFaceSet safe to use in a Worker (required for
        OffscreenCanvas) and ought also to be faster, at the cost of a slight
        increase in lines of code.

        No new tests, covered by existing tests.

        * css/CSSFontFaceSet.cpp:
        (WebCore::computeFontSelectionRequest):
        (WebCore::CSSFontFaceSet::matchingFacesExcludingPreinstalledFonts):

2021-04-20  Tim Nguyen  <ntim@apple.com>

        Implement CSS display property 2-value syntax
        https://bugs.webkit.org/show_bug.cgi?id=224574

        Reviewed by Darin Adler.

        Except for list-item which doesn't have layout support for different variants.
        Also fix a WPT to expect the most backwards-compatible form for `display: flow` computed value.

        Test: web-platform-tests/css/css-display/parsing/display-valid.html

        * css/CSSValueKeywords.in:
        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):
        (WebCore::CSSParserFastPaths::isKeywordPropertyID):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeDisplay):
        (WebCore::CSSPropertyParser::parseSingleValue):

2021-04-19  Antti Koivisto  <antti@apple.com>

        Render tree updates for Text node content mutations should happen during rendering update
        https://bugs.webkit.org/show_bug.cgi?id=222406
        <rdar://problem/74822830>

        Reviewed by Simon Fraser.

        Calls to Text.insertData and similar should not mutate render tree synchronously.
        Instead render tree should be updated during the next rendering update along with
        any style changes.

        These updates already go via RenderTreeUpdater. We just need to save the information
        about which nodes need updating so the next rendering update can pick them up.

        This seems to help with some performance benchmarks.

        * dom/CharacterData.cpp:
        (WebCore::CharacterData::parserAppendData):
        (WebCore::CharacterData::setDataAndUpdate):

        Move in-tree check to the updateRendererAfterContentChange and make it use isConnected().

        * dom/Document.cpp:
        (WebCore::Document::removedLastRef):
        (WebCore::Document::resolveStyle):

        Include the text update when updating the render tree.

        (WebCore::Document::updateTextRenderer):

        Create a text update that will get flushed during the next rendering update.

        (WebCore::Document::needsStyleRecalc const):

        We need to recalc if there are pending text updates.

        * dom/Document.h:
        * dom/Text.cpp:
        (WebCore::Text::splitText):

        Use updateRendererAfterContentChange instead of poking render tree directly.

        (WebCore::Text::updateRendererAfterContentChange):
        * rendering/updating/RenderTreeUpdater.cpp:
        * style/StyleTreeResolver.cpp:
        (WebCore::Style::TreeResolver::TreeResolver):
        (WebCore::Style::TreeResolver::resolve):
        * style/StyleTreeResolver.h:
        (WebCore::Style::TreeResolver::TreeResolver):
        * style/StyleUpdate.cpp:
        (WebCore::Style::Update::addText):

        Merge text updates.

        (WebCore::Style::Update::addPossibleRoot):
        * style/StyleUpdate.h:
        (WebCore::Style::Update::roots const):
        (WebCore::Style::Update:: const): Deleted.

        Refcount the nodes since this now has longer lifetime.

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::deleteInsignificantText):

        Ensure we leave deleteInsignificantText with updated render tree. Clients expect that.
        Do layout (instead of just style update) for consistency, deleteInsignificantText does one anyway in beginning.

        * editing/markup.cpp:
        (WebCore::replaceChildrenWithFragment):

        Pending text update may ref the node so this refcount assert is not correct.

        * style/StyleUpdate.cpp:
        (WebCore::Style::Update::addText):

2021-04-19  Said Abou-Hallawa  <said@apple.com>

        cachedCGColor() and nsColor() are not thread-safe
        https://bugs.webkit.org/show_bug.cgi?id=223033

        Reviewed by Chris Dumez.

        These functions will break if they are used by a worker thread.

        * platform/graphics/cg/ColorCG.cpp:
        (WebCore::cachedCGColor):
        * platform/graphics/mac/ColorMac.mm:
        (WebCore::nsColor):

2021-04-19  Wenson Hsieh  <wenson_hsieh@apple.com>

        Rename FloatQuad::isEmpty() to boundingBoxIsEmpty() and reimplement isEmpty()
        https://bugs.webkit.org/show_bug.cgi?id=224769

        Reviewed by Tim Horton.

        The existing `isEmpty()` method on `FloatQuad` only checks that the bounding box of the quad is empty (as
        indicated by the comment above the method declaration). This means `isEmpty()` returns `false` in cases where
        the quad consists of one or more non-rectilinear line segments, even though the quad contains no area.

        To address this, we rename the existing `isEmpty()` helper to `boundingBoxIsEmpty()` and reintroduce an
        `isEmpty()` method that accounts for quads which are equivalent to non-rectilinear line segments.

        No change in behavior.

        * inspector/InspectorOverlay.cpp:
        (WebCore::drawFragmentHighlight):
        * platform/graphics/FloatQuad.cpp:
        * platform/graphics/FloatQuad.h:
        (WebCore::FloatQuad::isEmpty const): Deleted.
        (WebCore::FloatQuad::boundingBoxIsEmpty const):

2021-04-19  Patrick Angle  <pangle@apple.com>

        Web Inspector: Grid overlay column line label placement copy/paste error
        https://bugs.webkit.org/show_bug.cgi?id=224777

        Reviewed by Devin Rousso.

        In grid overlays, a typo meant for all column line labels after the initial line, only the start of the line was
        used for placement, where it is more accurate to use the start and end points to match the behavior of the first
        line. This had no visual impact because subsequent lines do not currently have their labels adjusted further into
        the grid, only flipped into the grid but still referencing the same point. This patch corrects the value of
        `gapLabelLine` to always be a line on which the label can be placed, instead of a single point.

        * inspector/InspectorOverlay.cpp:
        (WebCore::InspectorOverlay::buildGridOverlay):

2021-04-19  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] LineCandidate.inlineContent should be ignored when reverting
        https://bugs.webkit.org/show_bug.cgi?id=224771
        <rdar://76760857>

        Reviewed by Antti Koivisto.

        LineCandidate.inlineContent is a set of candidate runs for the line and when the line breaker says "please revert" (move back to an earlier position on the line)
        these runs should all be ignored as they did not make it to the line.
        (inlineContentIsFullyCommitted flag got confused when the number of candidate runs matched the number of runs we managed to put on the line as part of the revert. It did not take the "revert" bit into account.) 

        Test: fast/inline/crash-when-revert-has-trailing-line-break.html

        * layout/inlineformatting/InlineLineBuilder.cpp:
        (WebCore::Layout::LineBuilder::placeInlineContent):

2021-04-19  Chris Dumez  <cdumez@apple.com>

        SVG Images launch the GPUProcess unnecessarily
        https://bugs.webkit.org/show_bug.cgi?id=224770

        Reviewed by Eric Carlson.

        Make sure MediaPlayer::supportsType() returns early for MIME types that can definitely
        not be media, to avoid launch the GPUProcess unnecessarily.

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::supportsType):

2021-04-19  Manuel Rego Casasnovas  <rego@igalia.com>

        [selectors] Script focus and :focus-visible
        https://bugs.webkit.org/show_bug.cgi?id=224598

        Reviewed by Darin Adler.

        Implement :focus-visible behavior when a script moves focus.
        An element will match :focus-visible when a script move focus if the last focused element was not focused via mouse click.

        This patch makes WebKit behaves like Chromium and Firefox and pass all the related tests.

        There's an ongoing discussion about 6 tests that are marked as ".tentative" in the following issue:
        https://github.com/web-platform-tests/wpt/issues/28505

        Test: web-platform-tests/css/selectors/focus-visible-script-focus-*

        * dom/Document.cpp:
        (WebCore::Document::adjustFocusedNodeOnNodeRemoval): Just update FocusOptions initializer.
        (WebCore::Document::setFocusedElement): Store if the last element has been focused by mouse click or not.
        * dom/Document.h: New member m_latestFocusTrigger.
        (WebCore::Document::wasLastFocusByClick const): Method to check status of m_latestFocusTrigger.
        * dom/Element.cpp:
        (WebCore::Element::focus): When there's a script focus, this checks if the last element was focused
        by mouse click in order to make it match :focus-visible.
        * dom/FocusOptions.h: Add FocusTrigger enum to know if an element has been focused via mouse click or not.
        This refers to the "focus trigger" concept on the HTML spec (see https://html.spec.whatwg.org/multipage/interaction.html).
        * page/EventHandler.cpp:
        (WebCore::EventHandler::dispatchMouseEvent): Pass FocusTrigger:Click in setFocusedElement() call.

2021-04-19  Darin Adler  <darin@apple.com>

        Nullptr crash in CSSCalcValue::category() via HTMLConverterCaches::floatPropertyValueForNode
        https://bugs.webkit.org/show_bug.cgi?id=221392

        Reviewed by Simon Fraser.

        * css/CSSCalculationValue.cpp:
        (WebCore::CSSCalcOperationNode::createCalcExpression const): Pass in a destination category
        when creating a CalcExpressionOperation.
        (WebCore::createCSS): Pass the destination category from the CalcExpressionOperation when
        creating a CSSCalcOperationNode.

        * css/CSSCalculationValue.h: Moved the CalculationCategory enumeration from here to
        CalculationValue.h.

        * platform/CalculationValue.cpp:
        (WebCore::operator==): Include destination category when comparing.

        * platform/CalculationValue.h: Moved CalculationCategory here. Added a destination
        category constructor argument, data members, and getter function to the
        CalcExpressionOperation class.

2021-04-19  Antti Koivisto  <antti@apple.com>

        CSSValuePool should be non-copyable
        https://bugs.webkit.org/show_bug.cgi?id=224764

        Reviewed by Alan Bujtas.

        * css/CSSValuePool.h:

2021-04-19  Zalan Bujtas  <zalan@apple.com>

        [LFC] The layout containment box establishes an absolute positioning containing block and a fixed positioning containing block
        https://bugs.webkit.org/show_bug.cgi?id=224754

        Reviewed by Antti Koivisto.

        https://www.w3.org/TR/css-contain-2/#containment-layout.

        "The layout containment box establishes an absolute positioning containing block and a fixed positioning containing block."

        * layout/layouttree/LayoutBox.h:
        (WebCore::Layout::Box::isContainingBlockForFixedPosition const):
        (WebCore::Layout::Box::isContainingBlockForOutOfFlowPosition const):

2021-04-19  Zalan Bujtas  <zalan@apple.com>

        [LFC] Layout containment box establishes an independent formatting context
        https://bugs.webkit.org/show_bug.cgi?id=224753

        Reviewed by Antti Koivisto.

        https://www.w3.org/TR/css-contain-2/#containment-layout.

        "The layout containment box establishes an independent formatting context."

        * layout/layouttree/LayoutBox.cpp:
        (WebCore::Layout::Box::establishesIndependentFormattingContext const):

2021-04-19  Michael Catanzaro  <mcatanzaro@gnome.org>

        Silence various -Wreturn-type warnings
        https://bugs.webkit.org/show_bug.cgi?id=224756

        Reviewed by Don Olmstead.

        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::mixColorComponents):
        * inspector/InspectorOverlay.cpp:
        (WebCore::expectedSizeForLayoutLabel):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::usedClear):
        (WebCore::RenderStyle::usedFloat):

2021-04-19  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, fix the build after r276181
        <rdar://problem/76832595>

        Add a couple of missing forward declarations for `IntRect` and `IntPoint`.

        * page/ContextMenuClient.h:

2021-04-19  Youenn Fablet  <youenn@apple.com>

        Add assertions to check for no memory allocation in AudioMediaStreamTrackRendererUnit rendering thread
        https://bugs.webkit.org/show_bug.cgi?id=224674

        Reviewed by Eric Carlson.

        Add ForbidMallocUseForCurrentThreadScope in audio rendering code path to prevent memory allocation.
        Rename inputProc to renderingCallback.
        Remove use of AudioMediaStreamTrackRendererUnit::singleton and instead use the pointer given to renderingCallback.
        This is safe as AudioMediaStreamTrackRendererUnit destructor stops the audio unit.

        * platform/mediastream/mac/AudioMediaStreamTrackRendererUnit.cpp:
        (WebCore::AudioMediaStreamTrackRendererUnit::createAudioUnitIfNeeded):
        (WebCore::AudioMediaStreamTrackRendererUnit::render):
        (WebCore::AudioMediaStreamTrackRendererUnit::renderingCallback):
        (WebCore::AudioMediaStreamTrackRendererUnit::inputProc): Deleted.
        * platform/mediastream/mac/AudioMediaStreamTrackRendererUnit.h:

2021-04-19  Zalan Bujtas  <zalan@apple.com>

        [LFC] Implement Box::isLayoutContainmentBox
        https://bugs.webkit.org/show_bug.cgi?id=224740

        Reviewed by Antti Koivisto.

        This is part of https://www.w3.org/TR/css-contain-2/#containment-layout

        * layout/layouttree/LayoutBox.cpp:
        (WebCore::Layout::Box::isLayoutContainmentBox const):
        (WebCore::Layout::Box::isInternalTableBox const):
        * layout/layouttree/LayoutBox.h:
        (WebCore::Layout::Box::isInternalRubyBox const):

2021-04-19  Kimmo Kinnunen  <kkinnunen@apple.com>

        Enable -Wthread-safety, add attributes to custom lock classes, and provide macros to declare guards
        https://bugs.webkit.org/show_bug.cgi?id=221614
        <rdar://problem/74396781>

        Reviewed by David Kilzer.

        Add -Wthread-safety to compile flags.

        * Configurations/Base.xcconfig:

2021-04-19  Youenn Fablet  <youenn@apple.com>

        Make RealtimeIncomingAudioSourceCocoa preallocate audio buffer
        https://bugs.webkit.org/show_bug.cgi?id=224672

        Reviewed by Eric Carlson.

        Instead of allocating the buffer on valid data, we wait for data to be of the correct sample rate.
        We preallocate the buffer accordingly in constructor to avoid allocation in the webrtc audio thread.
        Default is 1 channel since mono is what webrtc encoders mostly do these days.
        Covered by existing tests.

        * platform/mediastream/mac/RealtimeIncomingAudioSourceCocoa.cpp:
        (WebCore::RealtimeIncomingAudioSourceCocoa::RealtimeIncomingAudioSourceCocoa):
        (WebCore::RealtimeIncomingAudioSourceCocoa::OnData):

2021-04-19  Youenn Fablet  <youenn@apple.com>

        Move from RecursiveLock to Lock in RealtimeMediaSource
        https://bugs.webkit.org/show_bug.cgi?id=224671

        Reviewed by Eric Carlson.

        RecursiveLock is more expensive as it allocates memory and not useful here.
        Covered by existing tests.

        * platform/mediastream/RealtimeMediaSource.h:
        * platform/mediastream/RealtimeOutgoingAudioSource.h:
        * platform/mediastream/RealtimeOutgoingVideoSource.h:

2021-04-19  Youenn Fablet  <youenn@apple.com>

        Reduce crackling at start of playing a live audio track
        https://bugs.webkit.org/show_bug.cgi?id=218898
        <rdar://problem/71625010>

        Reviewed by Eric Carlson.

        We often hear crackles at the beginning of playing a MediaStreamTrack.
        This is due to starting at a point where there is not enough data, so we start rendering and quickly run short of data.
        Our heuristic to start was not good since we were not accounting to LibWebRTC audio module which sends audio samples by batch of 5 samples.
        So we would have needed to at least have 6 samples to be sure to not run out of data.

        What this patch does:
        - Add an extra parameter to AudioSampleDataSource so that we do not start until we have at least been pushed a given number of sample count.
        - Change LibWebRTAudioModule to send audio samples by batch of 3 (hence 30 ms) instead of 5
        - Set this new parameter to 2 for local tracks and 4 for remote tracks
        - Add a new boolean to AudioSampleDataSource to know whether we start the track for the first time or not. If we start it, use the new parameter to buffer enough data.
          Otherwise, use current heuristic.

        We also reduce the AudioSampleDataSource buffer to 0.5 seconds instead of 2 seconds, since 2 seconds is too much for real time audio.

        Manually tested.

        * platform/audio/cocoa/AudioSampleDataSource.h:
        * platform/audio/cocoa/AudioSampleDataSource.mm:
        (WebCore::AudioSampleDataSource::create):
        (WebCore::AudioSampleDataSource::AudioSampleDataSource):
        (WebCore::AudioSampleDataSource::pullSamplesInternal):
        * platform/mediastream/libwebrtc/LibWebRTCAudioModule.cpp:
        (WebCore::LibWebRTCAudioModule::pollFromSource):
        * platform/mediastream/libwebrtc/LibWebRTCAudioModule.h:
        * platform/mediastream/mac/AudioMediaStreamTrackRendererCocoa.cpp:
        (WebCore::pollSamplesCount):
        (WebCore::AudioMediaStreamTrackRendererCocoa::pushSamples):
        * platform/mediastream/mac/MediaStreamTrackAudioSourceProviderCocoa.cpp:
        (WebCore::MediaStreamTrackAudioSourceProviderCocoa::MediaStreamTrackAudioSourceProviderCocoa):
        * platform/mediastream/mac/WebAudioSourceProviderCocoa.h:
        * platform/mediastream/mac/WebAudioSourceProviderCocoa.mm:
        (WebCore::WebAudioSourceProviderCocoa::prepare):

2021-04-19  Imanol Fernandez  <ifernandez@igalia.com>

        Enable GL_ANGLE_instanced_arrays WebGL extension in WPE
        https://bugs.webkit.org/show_bug.cgi?id=224438

        Reviewed by Darin Adler.

        Tested by WebGL WPT.

        * html/canvas/ANGLEInstancedArrays.cpp:
        (WebCore::ANGLEInstancedArrays::supported):
        * platform/graphics/opengl/ExtensionsGLOpenGLES.cpp:
        (WebCore::ExtensionsGLOpenGLES::supportsExtension):

2021-04-19  Felipe Erias  <felipeerias@igalia.com>

        [css-flexbox] Table layout disregards overriding height
        https://bugs.webkit.org/show_bug.cgi?id=224665

        Reviewed by Sergio Villar Senin.

        Update table layout to take into account the overriding height set by the element's parent.
        This was causing several WPT tests to fail.

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout):
        During layout, set the computed height so that it is at least as large as the overriding height
        provided by the element's parent (if any) minus the height that will be taken up by captions.
        This additional height will be distributed among the table's sections so its total height matches
        the overriding value.

2021-04-19  Martin Robinson  <mrobinson@webkit.org>

        [css-scroll-snap] Properly support fractional scroll steps in WebCore::ScrollAnimator::scroll
        https://bugs.webkit.org/show_bug.cgi?id=224176

        Reviewed by Simon Fraser.

        Stop using the ScrollableArea's position to calculate scroll snap positions in ScrollAnimator::snap.
        The position stored in ScrollAnimator is a floating point position, while the one stored in ScrollableArea
        is an integer position. This currently isn't an issue, because all callers of ScrollAnimator::scroll
        use integer scroll offsets, but this will allow this function to be used in the future for precise
        scrolling delta.

        No new tests. This doesn't change any behavior, since all callers currently use
        integer scroll offsets, but a future change will make use of this fix.

        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::scroll): Get the current scroll position from the ScrollAnimator,
        which stores it in floating point. Also, only call into the scroll snap code if we actually
        have scroll offsets.
        (WebCore::ScrollAnimator::offsetFromPosition): Added this helper.
        (WebCore::ScrollAnimator::positionFromOffset): Ditto.
        (WebCore::ScrollAnimator::deltaFromStep): Return a delta instead of a position so this helper
        can be used with offsets or positions.
        (WebCore::ScrollAnimator::positionFromStep): Deleted.
        * platform/ScrollAnimator.h:
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::scroll): Use the new helper.j

2021-04-19  Philippe Normand  <pnormand@igalia.com>

        [WPE][GTK] Enable AVIF decoder as experimental feature and unskip tests
        https://bugs.webkit.org/show_bug.cgi?id=224663

        Reviewed by Xabier Rodriguez-Calvar.

        Refactor the AVIF build options out of the GTK port so they can be reused by other CMake ports.

        * PlatformGTK.cmake:
        * platform/ImageDecoders.cmake:
        * platform/image-decoders/avif/AVIFImageDecoder.cpp:
        * platform/image-decoders/avif/AVIFImageReader.cpp:
        * platform/image-decoders/avif/AVIFUniquePtr.h:

2021-04-18  Wenson Hsieh  <wenson_hsieh@apple.com>

        Selected image overlay text should never be visible
        https://bugs.webkit.org/show_bug.cgi?id=224734
        <rdar://problem/76806399>

        Reviewed by Darin Adler.

        Make a slight adjustment to the UA stylesheet to ensure that image overlay text is never visible. See below for
        more details.

        Test: fast/images/image-extraction/image-overlay-with-selection-styles.html

        * html/shadow/imageOverlay.css:
        (div.image-overlay-text::selection):

        Enforce selected text styles for image overlay text.

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::selectionPseudoStyle const):

        Make an additional adjustment when computing selection pseudo styles for UA shadow root content. Currently, for
        elements inside a UA shadow root, we always immediately ascend to the shadow host; this means that `::selection`
        pseudo selectors currently don't work in UA stylesheets, since they're skipped when resolving styles, upon
        painting selected text.

        To fix this, we can let the element's own pseudo styles take precedence over the shadow host's renderer in the
        case where we have a selection pseudo style. While we're here, also replace a few raw pointers with `RefPtr`.

2021-04-18  Rob Buis  <rbuis@igalia.com>

        Support contain: layout
        https://bugs.webkit.org/show_bug.cgi?id=223569

        Reviewed by Darin Adler.

        This patch implements layout containment as specified[1].
        It adds shouldApplyLayoutContainment to check whether the
        element applies for layout containment. Is so, then:
        - an independent formatting context is established.
        - any overflow is treated as ink overflow.
        - an absolute positioning and fixed positioning
        containing block is established.
        - a stacking context is created.
        - for baseline handling, the box is treated as having no
        baseline. For grid/flexible box containers/items, this needs
        a baseline synthesized from the border edges [2], for buttons it
        requires a baseline synthesized from the margin edges [2, 3].

        [1] https://drafts.csswg.org/css-contain-2/#layout-containment
        [2] https://drafts.csswg.org/css-align-3/#synthesize-baseline
        [3] https://www.w3.org/TR/CSS2/visudet.html#propdef-vertical-align

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::firstLineBaseline const):
        (WebCore::RenderBlock::inlineBlockBaseline const):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::firstLineBaseline const):
        (WebCore::RenderBlockFlow::inlineBlockBaseline const):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::createsNewFormattingContext const):
        (WebCore::RenderBox::layoutOverflowRectForPropagation const):
        * rendering/RenderBox.h:
        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::baselinePosition const):
        * rendering/RenderElement.h:
        (WebCore::RenderElement::canContainFixedPositionObjects const):
        (WebCore::RenderElement::canContainAbsolutelyPositionedObjects const):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::firstLineBaseline const):
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::firstLineBaseline const):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::baselinePosition const):
        * rendering/RenderObject.cpp:
        (WebCore::objectIsRelayoutBoundary):
        (WebCore::shouldApplyLayoutContainment):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isAtomicInlineLevelBox const):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::firstLineBaseline const):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::containsLayout const):
        * style/StyleAdjuster.cpp:
        (WebCore::Style::Adjuster::adjust const):

2021-04-18  Sam Weinig  <weinig@apple.com>

        GraphicsLayer::distributeOpacity, GraphicsLayer::setOpacityInternal and GraphicsLayer::accumulatedOpacity are never used
        https://bugs.webkit.org/show_bug.cgi?id=224732

        Reviewed by Darin Adler.

        Remove dead code.

        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::accumulatedOpacity const): Deleted.
        (WebCore::GraphicsLayer::distributeOpacity): Deleted.
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::setOpacityInternal): Deleted.
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        * platform/graphics/ca/GraphicsLayerCA.h:

2021-04-18  Antoine Quint  <graouts@webkit.org>

        Fix interpolation of the rotate CSS property
        https://bugs.webkit.org/show_bug.cgi?id=224730

        Reviewed by Dean Jackson.

        Implement the CSS Transforms spec about animating the rotateZ() function
        for the simplified case where only the angle is interpolated.

        * platform/graphics/transforms/RotateTransformOperation.cpp:
        (WebCore::RotateTransformOperation::blend):

2021-04-18  Youenn Fablet  <youenn@apple.com>

        Blob URLs should use for their owner origin for CSP checks
        https://bugs.webkit.org/show_bug.cgi?id=224535
        <rdar://76458106>

        Reviewed by Alex Christensen.

        Before the patch, we were checking blob origin directly with ancestors.
        As per https://w3c.github.io/webappsec-csp/#match-url-to-source-expression step 4.1,
        we need to get the URL origin, which by spec is the origin of the blob creator.
        We only do this for navigation loads as script loads should be kept the current way, as a cross-site scripting protection,
        and to remain compatible with other browsers.

        Make some refactoring to add helper routines to get origin and secure context state of blob URLs in BlobURL.
        Make use of it in MixedContentChecker as a refactoring.
        Make use of the helper routine in ContentSecurityPolicySource::matches to fix the bug.

        Test: http/tests/security/frame-src-and-blob-download.https.html

        * fileapi/BlobURL.cpp:
        (WebCore::blobOwner):
        (WebCore::BlobURL::getOriginURL):
        (WebCore::BlobURL::isSecureBlobURL):
        * fileapi/BlobURL.h:
        * fileapi/ThreadableBlobRegistry.cpp:
        (WebCore::isBlobURLContainsNullOrigin):
        * loader/MixedContentChecker.cpp:
        (WebCore::MixedContentChecker::isMixedContent):
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::isSecure):
        * page/csp/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::urlMatchesSelf const):
        * page/csp/ContentSecurityPolicy.h:
        * page/csp/ContentSecurityPolicySourceList.cpp:
        (WebCore::ContentSecurityPolicySourceList::matches const):

2021-04-18  Cathie Chen  <cathiechen@igalia.com>

        The implicit aspect-ratio from width and height attributes with float value is not accurate enough
        https://bugs.webkit.org/show_bug.cgi?id=224664

        Reviewed by Darin Adler.

        The width and height attributes should impact the aspect ratio only not the intrinsic size which should be from the content.
        Since computeAspectRatioInformationForRenderBox doesn't change the intrinsic size now, so we can remove it from computePreferredLogicalWidths.

        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::computeIntrinsicRatioInformation const): Width and height attributes change intrinsicRatio only, not intrinsicSize.
        (WebCore::RenderReplaced::computePreferredLogicalWidths): computeAspectRatioInformationForRenderBox doesn't change intrinsicSize now, so we can remove this.

2021-04-17  Yusuke Suzuki  <ysuzuki@apple.com>

        Use binary-search in LocaleToScriptMapping
        https://bugs.webkit.org/show_bug.cgi?id=224727

        Reviewed by Darin Adler.

        This patch removes HashMaps in LocaleToScriptMapping, and binary-search onto the constant data arrays.
        These maps are not frequently used. Keys of the maps can be encoded into uint32_t or uint64_t so that
        comparison becomes super cheap and we can initialize this array at compile-time.

        We introduce ScriptName(uint32_t) and LocaleName(uint64_t) instead of String. And ues it and generate
        sorted constant data array for mappings. We use binary-search to look entry up. Since # of entries are
        not huge (~200), comparisons are extremely cheap (uint32_t / uint64_t comparison), and this is not a
        hot code, we can just use binary-search here and eliminate HashMaps' memory allocation.

        * platform/text/LocaleToScriptMapping.cpp:
        (WebCore::PackedASCIILowerCodes::PackedASCIILowerCodes):
        (WebCore::PackedASCIILowerCodes::parse):
        (WebCore::PackedASCIILowerCodes::operator==):
        (WebCore::PackedASCIILowerCodes::operator!=):
        (WebCore::PackedASCIILowerCodes::operator<):
        (WebCore::PackedASCIILowerCodes::operator<=):
        (WebCore::PackedASCIILowerCodes::operator>):
        (WebCore::PackedASCIILowerCodes::operator>=):
        (WebCore::PackedASCIILowerCodes::value const):
        (WebCore::scriptNameToCode):
        (WebCore::localeToScriptCodeForFontSelection):

2021-04-17  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] Add some support for webpage translation in WebKitLegacy
        https://bugs.webkit.org/show_bug.cgi?id=224683
        <rdar://problem/75641882>

        Reviewed by Darin Adler.

        Remove compile-time guards around `ContextMenuItemTagAddHighlightToCurrentGroup` and
        `ContextMenuItemTagAddHighlightToNewGroup`, so that we can keep these internal WebCore context menu tags in sync
        with the SPI-exposed enum values in `WebUIDelegatePrivate.h`. See WebKitLegacy ChangeLog for more details.

        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected):
        (WebCore::ContextMenuController::checkOrEnableIfNeeded const):
        * platform/ContextMenuItem.cpp:
        (WebCore::isValidContextMenuAction):
        * platform/ContextMenuItem.h:

2021-04-17  Wenson Hsieh  <wenson_hsieh@apple.com>

        Remove PromisedAttachmentInfo::blobURL and adjacent code
        https://bugs.webkit.org/show_bug.cgi?id=224720

        Reviewed by Ryosuke Niwa.

        Remove this member of `PromisedAttachmentInfo`. See WebKit ChangeLog for more details.

        * editing/Editor.cpp:
        (WebCore::Editor::promisedAttachmentInfo):
        * platform/PromisedAttachmentInfo.h:
        (WebCore::PromisedAttachmentInfo::operator bool const):

2021-04-17  Tim Nguyen  <ntim@apple.com>

        Add support for inline-{start/end} values to float & clear properties
        https://bugs.webkit.org/show_bug.cgi?id=218087

        Reviewed by Antti Koivisto & Zalan Bujtas.

        Imported reftests from: https://github.com/web-platform-tests/wpt/commit/47e7176242e2ca4ca68d6cfe032619ccf44d55a6
        Enabled: imported/w3c/web-platform-tests/css/css-logical/logical-values-float-clear.html

        Tests: imported/w3c/web-platform-tests/css/css-logical/logical-values-float-clear-1.html
               imported/w3c/web-platform-tests/css/css-logical/logical-values-float-clear-2.html
               imported/w3c/web-platform-tests/css/css-logical/logical-values-float-clear-3.html
               imported/w3c/web-platform-tests/css/css-logical/logical-values-float-clear-4.html

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator Clear const):
        (WebCore::CSSPrimitiveValue::operator Float const):
        * css/CSSValueKeywords.in:
        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):
        * display/css/DisplayStyle.cpp:
        (WebCore::Display::Style::Style):
        * layout/integration/LayoutIntegrationBoxTree.cpp:
        (WebCore::LayoutIntegration::BoxTree::buildTree):
        * layout/layouttree/LayoutBox.cpp:
        (WebCore::Layout::Box::isFloatingPositioned const):
        * layout/layouttree/LayoutTreeBuilder.cpp:
        (WebCore::Layout::TreeBuilder::createLayoutBox):
        (WebCore::Layout::TreeBuilder::buildTableStructure):
        * rendering/ComplexLineLayout.cpp:
        (WebCore::ComplexLineLayout::layoutRunsAndFloats):
        (WebCore::ComplexLineLayout::layoutRunsAndFloatsInRange):
        * rendering/FloatingObjects.cpp:
        (WebCore::FloatingObject::FloatingObject):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::computeBlockPreferredLogicalWidths const):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::marginOffsetForSelfCollapsingBlock):
        (WebCore::RenderBlockFlow::marginBeforeEstimateForChild const):
        (WebCore::RenderBlockFlow::computeLogicalLocationForFloat):
        (WebCore::RenderBlockFlow::positionNewFloats):
        (WebCore::RenderBlockFlow::clearFloats):
        (WebCore::RenderBlockFlow::getClearDelta):
        (WebCore::RenderBlockFlow::computeInlinePreferredLogicalWidths const):
        * rendering/RenderBlockFlow.h:
        * rendering/line/BreakingContext.h:
        (WebCore::BreakingContext::handleBR):
        * rendering/line/LineBreaker.cpp:
        (WebCore::LineBreaker::reset):
        * rendering/line/LineBreaker.h:
        (WebCore::LineBreaker::usedClear):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::usedClear):
        (WebCore::RenderStyle::usedFloat):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::isFloating const):
        (WebCore::RenderStyle::initialFloating):
        * rendering/style/RenderStyleConstants.cpp:
        (WebCore::operator<<):
        * rendering/style/RenderStyleConstants.h:
        * style/StyleAdjuster.cpp:
        (WebCore::Style::Adjuster::adjust const):

2021-04-17  Basuke Suzuki  <basuke.suzuki@sony.com>

        [Curl] Remove warnings on curl layer.
        https://bugs.webkit.org/show_bug.cgi?id=224721

        Reviewed by Darin Adler.

        Remove unused parameters to prevent warnings. For CurlRequest, it passes
        member variable to private method which is meaningless so that it was
        removed.

        Covered by existing test files.

        * platform/network/curl/CookieJarDB.cpp:
        (WebCore::CookieJarDB::createPrepareStatement):
        * platform/network/curl/CurlFormDataStream.cpp:
        (WebCore::CurlFormDataStream::read):
        * platform/network/curl/CurlRequest.cpp:
        (WebCore::CurlRequest::setupTransfer):
        (WebCore::CurlRequest::setupPUT):
        (WebCore::CurlRequest::setupPOST):
        * platform/network/curl/CurlRequest.h:
        * platform/network/curl/NetworkStorageSessionCurl.cpp:
        (WebCore::NetworkStorageSession::setCookiesFromDOM const):

2021-04-17  Chris Lord  <clord@igalia.com>

        Create local copy of CSSParserContext in CSSPropertyParserWorkerSafe
        https://bugs.webkit.org/show_bug.cgi?id=224675

        Reviewed by Darin Adler.

        Make sure to hold a copy of the CSSParserContext in
        CSSPropertyParserWorkerSafe functions as CSSParserImpl only takes a
        reference.

        * css/parser/CSSParserWorkerSafe.cpp:

2021-04-17  Tyler Wilcock  <twilco.o@protonmail.com>

        Consider making CSSStyleSheet::rules() just an alias of CSSStyleSheet::cssRules().
        https://bugs.webkit.org/show_bug.cgi?id=197725

        Reviewed by Darin Adler.

        To match other browsers (Blink and Gecko) and pass a WPT, CSSStyleSheet.rules now aliases
        CSSStyleSheet.cssRulesForBindings.  CSSStyleSheet.rulesForBindings is deleted.

        Tested by
        imported/w3c/web-platform-tests/css/cssom/CSSStyleSheet.html.

        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::rulesForBindings): Deleted.
        (WebCore::CSSStyleSheet::rules): Deleted.

        * css/CSSStyleSheet.h:
        Change `rules()` to be an inlined alias for `cssRulesForBindings()`.

        * css/CSSStyleSheet.idl:
        Remove [ImplementedAs=rulesForBindings], as this function has been
        deleted.

2021-04-17  Tyler Wilcock  <twilco.o@protonmail.com>

        Media queries with max-width greater than 999999999px evaluate to false
        https://bugs.webkit.org/show_bug.cgi?id=224097

        Reviewed by Darin Adler.

        We now evaluate <length> values in media queries with double
        precision instead of int precision to match other browsers and pass a WPT.

        See similar method in Chromium:
        https://github.com/chromium/chromium/blob/09a0b960b27f6e08fbe67ad97e6c4fb55ada383f/third_party/blink/renderer/core/css/media_query_evaluator.cc#L436

        Test: fast/media/media-query-lengths-evaluate-with-double-precision.html
        and WPT imported/w3c/web-platform-tests/css/mediaqueries/min-width-001.xht

        * css/MediaQueryEvaluator.cpp:
        (WebCore::computeLength):
        Return Optional<double> rather than int& out-value.

        (WebCore::deviceHeightEvaluate):
        (WebCore::deviceWidthEvaluate):
        (WebCore::heightEvaluate):
        (WebCore::widthEvaluate):
        Evaluate `length` values as doubles instead of ints.

2021-04-17  Zalan Bujtas  <zalan@apple.com>

        [Cleanup] Remove redundant BreakingContext::m_currentStyle
        https://bugs.webkit.org/show_bug.cgi?id=224717

        Reviewed by Antti Koivisto.

        * rendering/line/BreakingContext.h:
        (WebCore::BreakingContext::BreakingContext):
        (WebCore::BreakingContext::initializeForCurrentObject):
        (WebCore::BreakingContext::handleBR):
        (WebCore::BreakingContext::handleText):
        (WebCore::BreakingContext::commitAndUpdateLineBreakIfNeeded):

2021-04-17  Brent Fulgham  <bfulgham@apple.com>

        Perform port blocking earlier in the load
        https://bugs.webkit.org/show_bug.cgi?id=224525
        <rdar://problem/75440591>

        Unreviewed follow-up (suggested by David Kilzer)

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::willSendRequest): Restore an m_frame nullptr check.,

2021-04-17  Basuke Suzuki  <basuke.suzuki@sony.com>

        [clang 11] Remove warning when converting WebCore::maxValueForCssLength from int to float
        https://bugs.webkit.org/show_bug.cgi?id=224714

        Reviewed by Chris Dumez.

        On clang 11, the conversion from const int WebCore::maxValueForCssLength (= 33554429) to
        float generates conversion warning: 
        > warning: implicit conversion from 'const int' to 'float' changes value from 33554429 to 33554428

        Changing the target type from float to double works for this. Length constructor accept double
        so that there's no drawback with this change.

        No test because it's compiler behavior.

        * style/StyleBuilderConverter.h:
        (WebCore::Style::BuilderConverter::convertWordSpacing):

2021-04-17  Sam Weinig  <weinig@apple.com>

        Move RuntimeEnabledFeatures to Settings (Part 1)
        https://bugs.webkit.org/show_bug.cgi?id=224440

        Reviewed by Alex Christensen.

        Move a few RuntimeEnabledFeatures to Settings to consolidate settings
        in one object and removes the need for additional boilerplate. This 
        is now possible as Settings are now accessible in workers.

        Moves PeerConnectionEnabled, WebGLUsingMetal, WebGL2Enabled, WebGPUEnabled
        and MaskWebGLStringsEnabled.

        * Modules/mediastream/RTCAnswerOptions.idl:
        * Modules/mediastream/RTCCertificate.idl:
        * Modules/mediastream/RTCConfiguration.idl:
        * Modules/mediastream/RTCDTMFSender.idl:
        * Modules/mediastream/RTCDTMFToneChangeEvent.idl:
        * Modules/mediastream/RTCDataChannel.idl:
        * Modules/mediastream/RTCDataChannelEvent.idl:
        * Modules/mediastream/RTCIceCandidate.idl:
        * Modules/mediastream/RTCIceCandidateInit.idl:
        * Modules/mediastream/RTCIceConnectionState.idl:
        * Modules/mediastream/RTCIceGatheringState.idl:
        * Modules/mediastream/RTCIceServer.idl:
        * Modules/mediastream/RTCIceTransport.idl:
        * Modules/mediastream/RTCIceTransportState.idl:
        * Modules/mediastream/RTCOfferAnswerOptions.idl:
        * Modules/mediastream/RTCOfferOptions.idl:
        * Modules/mediastream/RTCPeerConnection.idl:
        * Modules/mediastream/RTCPeerConnectionIceErrorEvent.idl:
        * Modules/mediastream/RTCPeerConnectionIceEvent.idl:
        * Modules/mediastream/RTCPeerConnectionState.idl:
        * Modules/mediastream/RTCPriorityType.idl:
        * Modules/mediastream/RTCRtcpParameters.idl:
        * Modules/mediastream/RTCRtpCapabilities.idl:
        * Modules/mediastream/RTCRtpCodecCapability.idl:
        * Modules/mediastream/RTCRtpCodecParameters.idl:
        * Modules/mediastream/RTCRtpCodingParameters.idl:
        * Modules/mediastream/RTCRtpContributingSource.idl:
        * Modules/mediastream/RTCRtpDecodingParameters.idl:
        * Modules/mediastream/RTCRtpEncodingParameters.idl:
        * Modules/mediastream/RTCRtpFecParameters.idl:
        * Modules/mediastream/RTCRtpHeaderExtensionParameters.idl:
        * Modules/mediastream/RTCRtpParameters.idl:
        * Modules/mediastream/RTCRtpReceiver.idl:
        * Modules/mediastream/RTCRtpRtxParameters.idl:
        * Modules/mediastream/RTCRtpSendParameters.idl:
        * Modules/mediastream/RTCRtpSender.idl:
        * Modules/mediastream/RTCRtpSynchronizationSource.idl:
        * Modules/mediastream/RTCRtpTransceiver.idl:
        * Modules/mediastream/RTCRtpTransceiverDirection.idl:
        * Modules/mediastream/RTCSdpType.idl:
        * Modules/mediastream/RTCSessionDescription.idl:
        * Modules/mediastream/RTCSignalingState.idl:
        * Modules/mediastream/RTCStatsReport.idl:
        * Modules/mediastream/RTCTrackEvent.idl:
        * Modules/webgpu/GPUBindGroupLayoutBinding.idl:
        * Modules/webgpu/GPUBindGroupLayoutDescriptor.idl:
        * Modules/webgpu/GPUBlendDescriptor.idl:
        * Modules/webgpu/GPUBufferDescriptor.idl:
        * Modules/webgpu/GPUBufferUsage.idl:
        * Modules/webgpu/GPUCanvasContext.idl:
        * Modules/webgpu/GPUColor.idl:
        * Modules/webgpu/GPUColorStateDescriptor.idl:
        * Modules/webgpu/GPUColorWrite.idl:
        * Modules/webgpu/GPUCompareFunction.idl:
        * Modules/webgpu/GPUDepthStencilStateDescriptor.idl:
        * Modules/webgpu/GPUErrorFilter.idl:
        * Modules/webgpu/GPUExtent3D.idl:
        * Modules/webgpu/GPULoadOp.idl:
        * Modules/webgpu/GPUOrigin3D.idl:
        * Modules/webgpu/GPUOutOfMemoryError.idl:
        * Modules/webgpu/GPURequestAdapterOptions.idl:
        * Modules/webgpu/GPUSamplerDescriptor.idl:
        * Modules/webgpu/GPUShaderStage.idl:
        * Modules/webgpu/GPUStoreOp.idl:
        * Modules/webgpu/GPUTextureDescriptor.idl:
        * Modules/webgpu/GPUTextureFormat.idl:
        * Modules/webgpu/GPUTextureUsage.idl:
        * Modules/webgpu/GPUUncapturedErrorEvent.idl:
        * Modules/webgpu/GPUValidationError.idl:
        * Modules/webgpu/GPUVertexAttributeDescriptor.idl:
        * Modules/webgpu/GPUVertexBufferDescriptor.idl:
        * Modules/webgpu/GPUVertexInputDescriptor.idl:
        * Modules/webgpu/Navigator+GPU.idl:
        * Modules/webgpu/NavigatorGPU.cpp:
        * Modules/webgpu/WebGPU.idl:
        * Modules/webgpu/WebGPUAdapter.idl:
        * Modules/webgpu/WebGPUBindGroup.idl:
        * Modules/webgpu/WebGPUBindGroupBinding.idl:
        * Modules/webgpu/WebGPUBindGroupDescriptor.idl:
        * Modules/webgpu/WebGPUBindGroupLayout.idl:
        * Modules/webgpu/WebGPUBuffer.idl:
        * Modules/webgpu/WebGPUBufferBinding.idl:
        * Modules/webgpu/WebGPUCommandBuffer.idl:
        * Modules/webgpu/WebGPUCommandEncoder.idl:
        * Modules/webgpu/WebGPUComputePassEncoder.idl:
        * Modules/webgpu/WebGPUComputePipeline.idl:
        * Modules/webgpu/WebGPUComputePipelineDescriptor.idl:
        * Modules/webgpu/WebGPUDevice.idl:
        * Modules/webgpu/WebGPUDeviceErrorScopes.idl:
        * Modules/webgpu/WebGPUDeviceEventHandler.idl:
        * Modules/webgpu/WebGPUPipelineDescriptorBase.idl:
        * Modules/webgpu/WebGPUPipelineLayout.idl:
        * Modules/webgpu/WebGPUPipelineLayoutDescriptor.idl:
        * Modules/webgpu/WebGPUProgrammablePassEncoder.idl:
        * Modules/webgpu/WebGPUProgrammableStageDescriptor.idl:
        * Modules/webgpu/WebGPUQueue.idl:
        * Modules/webgpu/WebGPURenderPassDescriptor.idl:
        * Modules/webgpu/WebGPURenderPassEncoder.idl:
        * Modules/webgpu/WebGPURenderPipeline.idl:
        * Modules/webgpu/WebGPURenderPipelineDescriptor.idl:
        * Modules/webgpu/WebGPUSampler.idl:
        * Modules/webgpu/WebGPUShaderModule.idl:
        * Modules/webgpu/WebGPUShaderModuleDescriptor.idl:
        * Modules/webgpu/WebGPUSwapChain.idl:
        * Modules/webgpu/WebGPUTexture.idl:
        * Modules/webgpu/WebGPUTextureView.idl:
        * Modules/webgpu/WorkerNavigator+GPU.idl:
        * Modules/webgpu/WorkerNavigatorGPU.cpp:
        * Modules/webxr/Navigator+WebXR.idl:
        * Modules/webxr/WebXRBoundedReferenceSpace.idl:
        * Modules/webxr/WebXRFrame.idl:
        * Modules/webxr/WebXRInputSource.idl:
        * Modules/webxr/WebXRInputSourceArray.idl:
        * Modules/webxr/WebXRLayer.idl:
        * Modules/webxr/WebXRPose.idl:
        * Modules/webxr/WebXRReferenceSpace.idl:
        * Modules/webxr/WebXRRenderState.idl:
        * Modules/webxr/WebXRRigidTransform.idl:
        * Modules/webxr/WebXRSession.idl:
        * Modules/webxr/WebXRSpace.idl:
        * Modules/webxr/WebXRSystem.cpp:
        * Modules/webxr/WebXRSystem.idl:
        * Modules/webxr/WebXRView.idl:
        * Modules/webxr/WebXRViewerPose.idl:
        * Modules/webxr/WebXRViewport.idl:
        * Modules/webxr/WebXRWebGLLayer.idl:
        * Modules/webxr/XREnvironmentBlendMode.idl:
        * Modules/webxr/XREye.idl:
        * Modules/webxr/XRHandedness.idl:
        * Modules/webxr/XRInputSourceEvent.idl:
        * Modules/webxr/XRInputSourcesChangeEvent.idl:
        * Modules/webxr/XRInteractionMode.idl:
        * Modules/webxr/XRReferenceSpaceEvent.idl:
        * Modules/webxr/XRReferenceSpaceType.idl:
        * Modules/webxr/XRRenderStateInit.idl:
        * Modules/webxr/XRSessionEvent.idl:
        * Modules/webxr/XRSessionInit.idl:
        * Modules/webxr/XRSessionMode.idl:
        * Modules/webxr/XRTargetRayMode.idl:
        * Modules/webxr/XRVisibilityState.idl:
        * Modules/webxr/XRWebGLLayerInit.idl:
        * html/HTMLCanvasElement.cpp:
        * html/canvas/WebGL2RenderingContext.cpp:
        * html/canvas/WebGL2RenderingContext.idl:
        * html/canvas/WebGLRenderingContextBase.cpp:
        * html/canvas/WebGLTransformFeedback.idl:
        * html/canvas/WebGLVertexArrayObject.idl:
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::peerConnectionEnabled const): Deleted.
        (WebCore::RuntimeEnabledFeatures::setPeerConnectionEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::setWebGLUsingMetal): Deleted.
        (WebCore::RuntimeEnabledFeatures::webGLUsingMetal const): Deleted.
        (WebCore::RuntimeEnabledFeatures::setWebGL2Enabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::webGL2Enabled const): Deleted.
        (WebCore::RuntimeEnabledFeatures::setWebGPUEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::webGPUEnabled const): Deleted.
        (WebCore::RuntimeEnabledFeatures::setMaskWebGLStringsEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::maskWebGLStringsEnabled const): Deleted.
        * testing/FakeXRBoundsPoint.idl:
        * testing/FakeXRButtonStateInit.idl:
        * testing/FakeXRInputSourceInit.idl:
        * testing/FakeXRRigidTransformInit.idl:
        * testing/FakeXRViewInit.idl:
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::Backup::Backup):
        (WebCore::InternalSettings::Backup::restoreTo):
        (WebCore::InternalSettings::setWebGL2Enabled): Deleted.
        (WebCore::InternalSettings::setWebGPUEnabled): Deleted.
        * testing/InternalSettings.h:
        * testing/InternalSettings.idl:
        * testing/Internals.cpp:
        * testing/WebFakeXRDevice.idl:
        * testing/WebFakeXRInputController.idl:
        * testing/WebXRTest.idl:
        * testing/XRSimulateUserActivationFunction.idl:

2021-04-17  Tim Nguyen  <ntim@apple.com>

        Don't omit conic gradient starting angle when serializing when starting angle is under 0
        https://bugs.webkit.org/show_bug.cgi?id=224719

        Reviewed by Ryosuke Niwa.

        Updated pre-existing test to cover this case.

        Test: LayoutTests/imported/w3c/web-platform-tests/css/css-backgrounds/parsing/background-image-computed.sub.html

        * css/CSSGradientValue.cpp:
        (WebCore::CSSConicGradientValue::customCSSText const):

2021-04-17  Zalan Bujtas  <zalan@apple.com>

        [Cleanup] Modernize TrailingObjects
        https://bugs.webkit.org/show_bug.cgi?id=224712

        Reviewed by Antti Koivisto.

        Remove redundant c'tor and start using enum class.

        * rendering/line/BreakingContext.h:
        (WebCore::BreakingContext::handleText):
        (WebCore::checkWhitespaceCollapsingTransitions):
        (WebCore::BreakingContext::handleEndOfLine):
        * rendering/line/TrailingObjects.cpp:
        (WebCore::TrailingObjects::updateWhitespaceCollapsingTransitionsForTrailingBoxes):
        * rendering/line/TrailingObjects.h:
        (WebCore::TrailingObjects::setTrailingWhitespace):
        (WebCore::TrailingObjects::clear):
        (WebCore::TrailingObjects::TrailingObjects): Deleted.

2021-04-17  Zalan Bujtas  <zalan@apple.com>

        [Cleanup] BreakingContext::handleText should consistently use the cached renderer
        https://bugs.webkit.org/show_bug.cgi?id=224711

        Reviewed by Antti Koivisto.

        Since this function is not supposed to increment the renderer, let's replace m_current.renderer() with "renderer".

        * rendering/line/BreakingContext.h:
        (WebCore::BreakingContext::handleText):
        * rendering/line/TrailingObjects.h:
        (WebCore::TrailingObjects::setTrailingWhitespace):

2021-04-17  Zalan Bujtas  <zalan@apple.com>

        [Cleanup] inlineLogicalWidth should take const RenderObject&
        https://bugs.webkit.org/show_bug.cgi?id=224700

        Reviewed by Antti Koivisto.

        1. inlineLogicalWidth takes const RenderObject& now.
        2. Both previousInFlowSibling and shouldAddBorderPaddingMargin moved to inlineLogicalWidth

        * rendering/line/BreakingContext.h:
        (WebCore::inlineLogicalWidth):
        (WebCore::BreakingContext::handleOutOfFlowPositioned):
        (WebCore::BreakingContext::handleEmptyInline):
        (WebCore::BreakingContext::handleReplaced):
        (WebCore::BreakingContext::handleText):
        (WebCore::shouldAddBorderPaddingMargin): Deleted.
        (WebCore::previousInFlowSibling): Deleted.

2021-04-17  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, GTK LTS build fix after r276197

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::configureMediaStreamAudioTracks):

2021-04-17  Philippe Normand  <pnormand@igalia.com>

        [GStreamer][MediaStream] fast/mediastream/play-newly-added-audio-track.html is failing since added in r260380
        https://bugs.webkit.org/show_bug.cgi?id=210840

        Reviewed by Xabier Rodriguez-Calvar.

        The test was failing mainly because our mediastreamsrc GStreamer element wasn't creating the
        corresponding AudioTrackPrivateMediaStream object. The media player should propagate its
        volume/mute/is-playing states to the source element. And also until now our mediastreamsrc
        element was handling at most one audio track and at most one audio track, but it turns out
        multiple audio tracks can be added actually. So I refactored the element internals
        accordingly. The InternalSource is now directly observing the corresponding
        RealtimeMediaSource, which simplified some code. Observing is also now suspended/resumed
        depending on the element state.

        We don't implement a GStreamer AudioMediaStreamTrackRenderer class yet, because actual
        rendering is still performed from the WebProcess, so early returns were added in
        AudioTrackPrivateMediaStream to handle this case.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::updateTracks):
        (WebCore::MediaPlayerPrivateGStreamer::configureMediaStreamAudioTracks):
        (WebCore::MediaPlayerPrivateGStreamer::setVolume):
        (WebCore::MediaPlayerPrivateGStreamer::setMuted):
        (WebCore::MediaPlayerPrivateGStreamer::updateStates):
        (WebCore::MediaPlayerPrivateGStreamer::didEnd):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        * platform/mediastream/AudioTrackPrivateMediaStream.cpp:
        (WebCore::AudioTrackPrivateMediaStream::createRenderer):
        (WebCore::AudioTrackPrivateMediaStream::setLogger):
        (WebCore::AudioTrackPrivateMediaStream::clear):
        (WebCore::AudioTrackPrivateMediaStream::setVolume):
        (WebCore::AudioTrackPrivateMediaStream::setAudioOutputDevice):
        (WebCore::AudioTrackPrivateMediaStream::volume const):
        (WebCore::AudioTrackPrivateMediaStream::audioSamplesAvailable):
        (WebCore::AudioTrackPrivateMediaStream::startRenderer):
        (WebCore::AudioTrackPrivateMediaStream::stopRenderer):
        (WebCore::AudioTrackPrivateMediaStream::createNewRenderer):
        * platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:
        (mediaStreamTrackPrivateGetTags):
        (WebKitMediaStreamObserver::didRemoveTrack):
        (webkitMediaStreamSrcConstructed):
        (webkitMediaStreamSrcDispose):
        (webkitMediaStreamSrcChangeState):
        (webkitMediaStreamSrcPostStreamCollection):
        (webkitMediaStreamSrcAddPad):
        (ProbeData::ProbeData):
        (webkitMediaStreamSrcPadProbeCb):
        (webkitMediaStreamSrcAddTrack):
        (webkitMediaStreamSrcSetStream):
        (webkitMediaStreamSrcTrackEnded):
        (InternalSource::trackEnded):
        (webkitMediaStreamSrcConfigureAudioTracks):
        * platform/mediastream/gstreamer/GStreamerMediaStreamSource.h:

2021-04-16  Brent Fulgham  <bfulgham@apple.com>

        Perform port blocking earlier in the load
        https://bugs.webkit.org/show_bug.cgi?id=224525
        <rdar://problem/75440591>

        Reviewed by Darin Adler.

        WebKit blocks loads to URLs with any of the prohibited ports defined in
        the engine. This blocking happens late in the load process, allowing
        connections to be made (and observed). Instead, we should stop the load
        early, at the same time we perform other checks.

        Test: http/tests/security/form-blocked-port.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::isSafeToLoadURL): Add a check for prohibited ports,
        and block (with relevant logging) if a load to a denied port is attempted.
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::willSendRequest): Ditto.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadFrameRequest): Ditto.
        (WebCore::FrameLoader::reportBlockedLoadFailed): Ditto.
        * loader/FrameLoader.h:
        * loader/PingLoader.cpp:
        (WebCore::PingLoader::loadImage): Ditto.
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::init): Ditto.
        * loader/SubframeLoader.cpp:
        (WebCore::FrameLoader::SubframeLoader::pluginIsLoadable): Ditto.
        (WebCore::FrameLoader::SubframeLoader::loadSubframe): Ditto.
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::canRequest): Ditto.
        (WebCore::CachedResourceLoader::canRequestAfterRedirection const): Ditto.

2021-04-16  Basuke Suzuki  <basuke.suzuki@sony.com>

        Use WebKit macro to detect 64bit in RenderLayerBacking.h
        https://bugs.webkit.org/show_bug.cgi?id=224707

        Reviewed by Yusuke Suzuki.

        There's no definition of __WORDSIZE in some environment. Also there's WebKit macro for that.

        > warning: '__WORDSIZE' is not defined, evaluates to 0 [-Wundef]
        > #if __WORDSIZE == 64 && PLATFORM(COCOA)
        >     ^

        No test because it's compiler behavior.

        * rendering/RenderLayerBacking.h:

2021-04-16  Ryosuke Niwa  <rniwa@webkit.org>

        Deploy Ref/RefPtr in Editor
        https://bugs.webkit.org/show_bug.cgi?id=224708

        Reviewed by Wenson Hsieh.

        Deployed smart pointers in WebCore::Editor.

        Also deployed ScriptDisallowedScope around the code which accesses the render tree.

        * dom/Position.cpp:
        (WebCore::Position::containerOrParentElement const): Added.
        * dom/Position.h:
        * editing/Editor.cpp:
        (WebCore::Editor::selectionForCommand):
        (WebCore::Editor::pasteAsPlainText):
        (WebCore::Editor::pasteAsFragment):
        (WebCore::Editor::shouldInsertFragment):
        (WebCore::Editor::replaceSelectionWithFragment):
        (WebCore::Editor::respondToChangedContents):
        (WebCore::Editor::hasBidiSelection const):
        (WebCore::Editor::selectionUnorderedListState const):
        (WebCore::Editor::selectionOrderedListState const):
        (WebCore::Editor::findEventTargetFrom const):
        (WebCore::Editor::findEventTargetFromSelection const):
        (WebCore::notifyTextFromControls):
        (WebCore::Editor::willApplyEditing const):
        (WebCore::Editor::appliedEditing):
        (WebCore::Editor::insertTextWithoutSendingTextEvent):
        (WebCore::Editor::performCutOrCopy):
        (WebCore::Editor::simplifyMarkup): Replaced the manual tree traversal by treeOrder(~). 
        (WebCore::Editor::copyImage):
        (WebCore::Editor::setBaseWritingDirection):
        (WebCore::Editor::baseWritingDirectionForSelectionStart const):
        (WebCore::Editor::setComposition):
        (WebCore::Editor::advanceToNextMisspelling):
        (WebCore::Editor::markMisspellingsAfterTypingToWord): Use containerOrParentElement.
        (WebCore::Editor::isSpellCheckingEnabledFor const):
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges):
        (WebCore::Editor::markAndReplaceFor):
        (WebCore::scanForTelephoneNumbers):
        (WebCore::Editor::scanSelectionForTelephoneNumbers): Restrucuted the code with makeScopeExit
        to exit early instead of nesting if's. 
        (WebCore::findFirstMarkable):
        (WebCore::Editor::selectionStartHasMarkerFor const):
        (WebCore::Editor::resolveTextCheckingTypeMask):
        (WebCore::Editor::stringForCandidateRequest const):
        (WebCore::Editor::fontAttributesAtSelectionStart):
        (WebCore::Editor::promisedAttachmentInfo):
        (WebCore::Editor::styleForSelectionStart):
        (WebCore::Editor::fontForSelection):
        * editing/Editor.h:
        * page/DragController.cpp:
        (WebCore::DragController::dispatchTextInputEventFor):

2021-04-16  Darin Adler  <darin@apple.com>

        font-size with viewport units in calc() doesn't change when viewport resizes
        https://bugs.webkit.org/show_bug.cgi?id=224614

        Reviewed by Zalan Bujtas.

        * css/CSSToLengthConversionData.cpp:
        (WebCore::CSSToLengthConversionData::zoom const): Updated since m_zoom is now optional.
        We use effectiveZoom when m_zoom is not specified, which is the same semantic that was
        implemented before with a separate boolean.
        (WebCore::CSSToLengthConversionData::viewportWidthFactor const): When calling the
        setHasViewportUnits function as a side effect, use m_viewportDependencyDetectionStyle,
        rather than always using m_style. This lets us handle the font-size case correctly.
        Also removed the explicit computingFontSize check for the same reason.
        (WebCore::CSSToLengthConversionData::viewportHeightFactor const): Ditto.
        (WebCore::CSSToLengthConversionData::viewportMinFactor const): Ditto.
        (WebCore::CSSToLengthConversionData::viewportMaxFactor const): Ditto.

        * css/CSSToLengthConversionData.h: Added a new member, m_viewportDependencyDetectionStyle,
        which defaults to the same value as m_style. Also changed m_zoom to use Optional instead
        of a separate boolean and an ignored "must be 1.0" value. Initialized data members in
        the modern way, allowing us to use the default constructor.

        * style/StyleBuilderCustom.h:
        (WebCore::Style::BuilderCustom::applyValueFontSize): Pass in the builder's style as the
        viewportDependencyDetectionStyle. This does the same thing that the existing code to
        call setHasViewportUnits did directly, but does it even for more complex cases involving
        calc(). Also made the isLength and isCalculatedPercentageWithLength cases more similar
        to each other and left a FIXME behind about taking that a bit further, but doing that
        probably requires creating some more test cases.

2021-04-16  Ian Gilbert  <iang@apple.com>

        Nullptr deref in CompositeEditCommand::isRemovableBlock in DeleteSelectionCommand::removeRedundantBlocks
        https://bugs.webkit.org/show_bug.cgi?id=224518

        Reviewed by Ryosuke Niwa.

        Add null check in case node is removed while iterating over tree.

        Test: editing/execCommand/remove-node-during-command-crash.html

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::removeRedundantBlocks):

2021-04-16  Cameron McCormack  <heycam@apple.com>

        Place vertical scrollbars at (inline/block)-end edge in all writing modes.
        https://bugs.webkit.org/show_bug.cgi?id=224224

        Reviewed by Simon Fraser.

        Tests: fast/scrolling/v-rl-scrollbars-initial-position-dynamic.html
               fast/scrolling/v-rl-scrollbars-initial-position.html
               fast/scrolling/vertical-scrollbar-position.html

        We currently only consider moving a vertical scrollbar to the left for
        `writing-mode: horizontal-{tb,bt}; direction: rtl` containers. But
        ideally we should always place the vertical scrollbar at the end edge
        of the container (whether that's the inline-end edge, when using a
        horizontal writing mode, or the block-end edge, when using a vertical
        writing mode).

        Some functions calling the existing shouldPlaceBlockDirectionScrollbarOnLeft
        instead really care about whether the vertical scrollbar is on the
        left, not whether the block direction scrollbar is on the left (since
        for vertical writing modes, the block direction scrollbar is the
        horizontal one on the bottom). So we rename this to
        shouldPlaceVerticalScrollbarOnLeft, make it return true for
        `writing-mode: vertical-rl`, and adjust callers that really do care
        only about block direction scrollbars to additionally check their
        writing mode.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::selectCursor):
        * page/FrameView.cpp:
        (WebCore::FrameView::shouldPlaceVerticalScrollbarOnLeft const):
        * page/FrameView.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::documentScrollPositionRelativeToViewOrigin const):
        (WebCore::ScrollView::updateScrollbars):
        (WebCore::ScrollView::scrollCornerRect const):
        (WebCore::ScrollView::locationOfContents const):
        * platform/ScrollableArea.h:
        * platform/adwaita/ScrollbarThemeAdwaita.cpp:
        (WebCore::ScrollbarThemeAdwaita::paint):
        * platform/gtk/ScrollbarThemeGtk.cpp:
        (WebCore::widgetTypeForScrollbar):
        (WebCore::ScrollbarThemeGtk::paint):
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::didCreateScrollerImp):
        * platform/win/PopupMenuWin.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::logicalLeftOffsetForContent const):
        (WebCore::RenderBlock::logicalRightOffsetForContent const):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::determineLogicalLeftPositionForChild):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paddingBoxRect const):
        (WebCore::RenderBox::contentBoxLocation const):
        (WebCore::RenderBox::overflowClipRect const):
        (WebCore::RenderBox::computePositionedLogicalWidth const):
        (WebCore::RenderBox::flippedClientBoxRect const):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::constrainingRectForStickyPosition const):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollRectToVisible):
        (WebCore::RenderLayer::resize):
        (WebCore::RenderLayer::overflowControlsRects const):
        (WebCore::RenderLayer::offsetFromResizeCorner const):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::positionForClipLayer const):
        * rendering/RenderLayerModelObject.cpp:
        (WebCore::RenderLayerModelObject::shouldPlaceVerticalScrollbarOnLeft const):
        * rendering/RenderLayerModelObject.h:
        * rendering/RenderLayerScrollableArea.cpp:
        (WebCore::RenderLayerScrollableArea::shouldPlaceVerticalScrollbarOnLeft const):
        (WebCore::RenderLayerScrollableArea::overflowControlsRects const):
        (WebCore::RenderLayerScrollableArea::computeScrollOrigin):
        (WebCore::RenderLayerScrollableArea::updateScrollbarsAfterLayout):
        (WebCore::RenderLayerScrollableArea::drawPlatformResizerImage):
        (WebCore::RenderLayerScrollableArea::hitTestResizerInFragments const):
        (WebCore::RenderLayerScrollableArea::updateScrollbarsAfterStyleChange):
        * rendering/RenderLayerScrollableArea.h:
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::itemBoundingBoxRect):
        (WebCore::RenderListBox::paintScrollbar):
        (WebCore::RenderListBox::isPointInOverflowControl):
        (WebCore::RenderListBox::listIndexAtOffset):
        (WebCore::RenderListBox::invalidateScrollbarRect):
        (WebCore::RenderListBox::convertFromScrollbarToContainingView const):
        (WebCore::RenderListBox::convertFromContainingViewToScrollbar const):
        * rendering/RenderListBox.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::repaintViewRectangle const):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::shouldPlaceVerticalScrollbarOnLeft const):
        * rendering/style/RenderStyle.h:

2021-04-16  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] Refactor some webpage translation code
        https://bugs.webkit.org/show_bug.cgi?id=224680
        Work towards <rdar://75641882>

        Reviewed by Tim Horton.

        In preparation for fixing https://webkit.org/b/224683, refactor some codepaths for handling webpage translation
        via the context menu on macOS, in WebKit2.

        Currently, the context menu action for `ContextMenuItemTagTranslate` is fully handled in the client layer in
        WebKit2, using state in `m_activeContextMenuContextData`. However, to make this action work in WebKitLegacy as
        well, we need the ability to call back into the `ContextMenuController` to handle the action, since context menu
        actions in WebKitLegacy only target the shared `WebMenuTarget` instance, which only knows about the context menu
        controller rather than the `WebHTMLView` that vended the menu item.

        Instead of adding logic in `WebMenuTarget` to dig the `WebHTMLView` corresponding to the focused frame out of
        the context menu controller, it makes more sense to plumb this call through the (already-established)
        `ContextMenuClient`. While this has the disadvantage of requiring an extra IPC hop on the WebKit2 case, it also
        has the advantage that we can lazily compute the selection bounds and menu location in root view coordinates
        only if the user has selected this menu action, which makes context menu data (slightly) cheaper to compute.

        No change in behavior.

        * loader/EmptyClients.cpp:
        * page/ContextMenuClient.h:
        * page/ContextMenuContext.h:
        (WebCore::ContextMenuContext::setSelectionBounds): Deleted.
        (WebCore::ContextMenuContext::selectionBounds const): Deleted.

        Remove code for computing and setting selection bounds. This was only added in support of webpage translation;
        instead of computing this up front, we can instead send this information only when the action is invoked.

        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected):

        Move logic for computing the selection bounds and menu location in root view coordinates out of `populate` and
        into `contextMenuItemSelected`, only in the case where the action is `ContextMenuItemTagTranslate`.

        (WebCore::ContextMenuController::populate):

2021-04-16  Jiewen Tan  <jiewen_tan@apple.com>

        Allow using the platform authenticator on non-Touch ID Macs according to Internal requirements
        https://bugs.webkit.org/show_bug.cgi?id=224639
        <rdar://74698346>

        Reviewed by Daniel Bates.

        Covered by new tests within existing test files.

        * testing/MockWebAuthenticationConfiguration.h:
        * testing/MockWebAuthenticationConfiguration.idl:
        Mock testing support.

2021-04-16  Peng Liu  <peng.liu6@apple.com>

        [GPUP] WebContent process should not create AVOutputContext instances when media in GPU Process is enabled
        https://bugs.webkit.org/show_bug.cgi?id=224469

        Reviewed by Eric Carlson.

        This patch modifies `MediaPlaybackTargetContext` to provide interfaces to serialize/deserialize
        `AVOutputContext` and modifies `MediaPlaybackTargetCocoa` to use `MediaPlaybackTargetContext` to
        manage its `AVOutputContext` instead of keeping a pointer to the `AVOutputContext` object.
        With these changes, a WebContent process can forward a serialized `AVOutputContext` object
        to other processes (e.g., the GPU process) without deserializing it. Therefore, the WebContent
        process does not need access to the CoreMedia routing service. So we can remove the fix (r275669)
        for bug 224328.

        Covered by existing tests.

        * Modules/airplay/WebMediaSessionManager.cpp:
        (WebCore::WebMediaSessionManager::setMockMediaPlaybackTargetPickerState):
        * Modules/airplay/WebMediaSessionManager.h:

        * Headers.cmake:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        Modify the project file because `MediaPlaybackTargetContext` is used in Cocoa ports only.

        * page/ChromeClient.h:
        (WebCore::ChromeClient::setMockMediaPlaybackTargetPickerState):
        * page/Page.cpp:
        (WebCore::Page::setMockMediaPlaybackTargetPickerState):
        * page/Page.h:

        * platform/graphics/MediaPlaybackTarget.h:
        (WebCore::MediaPlaybackTarget::hasActiveRoute const):
        (WebCore::MediaPlaybackTarget::deviceName const):
        (WebCore::MediaPlaybackTarget::supportsRemoteVideoPlayback):
        (): Deleted.
        * platform/graphics/MediaPlaybackTargetContext.h: Removed.
        * platform/graphics/avfoundation/MediaPlaybackTargetCocoa.h:
        (WebCore::MediaPlaybackTargetCocoa::outputContext const): Deleted.
        * platform/graphics/avfoundation/MediaPlaybackTargetCocoa.mm:
        (WebCore::MediaPlaybackTargetCocoa::create):
        (WebCore::MediaPlaybackTargetCocoa::MediaPlaybackTargetCocoa):
        (WebCore::MediaPlaybackTargetCocoa::~MediaPlaybackTargetCocoa):
        (WebCore::toMediaPlaybackTargetCocoa):
        (WebCore::MediaPlaybackTargetCocoa::supportsRemoteVideoPlayback const): Deleted.
        (WebCore::MediaPlaybackTargetCocoa::targetContext const): Deleted.
        (WebCore::MediaPlaybackTargetCocoa::hasActiveRoute const): Deleted.
        (WebCore::MediaPlaybackTargetCocoa::deviceName const): Deleted.
        Don't directly use `AVOutputContext` in this class.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::isCurrentPlaybackTargetWireless const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setWirelessPlaybackTarget):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setShouldPlayToPlaybackTarget):

        * platform/graphics/cocoa/MediaPlaybackTargetContext.h: Added.
        (WebCore::MediaPlaybackTargetContext::MediaPlaybackTargetContext):
        (WebCore::MediaPlaybackTargetContext::type const):
        (WebCore::MediaPlaybackTargetContext::mockState const):
        (WebCore::MediaPlaybackTargetContext::outputContext const):
        (WebCore::MediaPlaybackTargetContext::serializedOutputContext const):
        (WebCore::MediaPlaybackTargetContext::encodingRequiresPlatformData const):
        * platform/graphics/cocoa/MediaPlaybackTargetContext.mm: Added.
        (WebCore::MediaPlaybackTargetContext::MediaPlaybackTargetContext):
        (WebCore::MediaPlaybackTargetContext::deviceName const):
        (WebCore::MediaPlaybackTargetContext::hasActiveRoute const):
        (WebCore::MediaPlaybackTargetContext::supportsRemoteVideoPlayback const):
        (WebCore::MediaPlaybackTargetContext::serializeOutputContext):
        (WebCore::MediaPlaybackTargetContext::deserializeOutputContext):

        * platform/mock/MediaPlaybackTargetMock.cpp:
        (WebCore::MediaPlaybackTargetMock::create):
        (WebCore::MediaPlaybackTargetMock::MediaPlaybackTargetMock):
        (WebCore::toMediaPlaybackTargetMock):
        (WebCore::MediaPlaybackTargetMock::targetContext const): Deleted.
        * platform/mock/MediaPlaybackTargetMock.h:
        (WebCore::MediaPlaybackTargetMock::state const):
        * platform/mock/MediaPlaybackTargetPickerMock.cpp:
        (WebCore::MediaPlaybackTargetPickerMock::externalOutputDeviceAvailable):
        (WebCore::MediaPlaybackTargetPickerMock::startingMonitoringPlaybackTargets):
        (WebCore::MediaPlaybackTargetPickerMock::invalidatePlaybackTargets):
        (WebCore::MediaPlaybackTargetPickerMock::setState):
        * platform/mock/MediaPlaybackTargetPickerMock.h:

        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState):
        (WebCore::Internals::setMockMediaPlaybackTargetPickerState):

2021-04-16  Zalan Bujtas  <zalan@apple.com>

        Remove redundant renderObject in BreakingContext::handleText
        https://bugs.webkit.org/show_bug.cgi?id=224682

        Reviewed by Darin Adler.

        * rendering/line/BreakingContext.h:
        (WebCore::BreakingContext::handleText):

2021-04-16  Basuke Suzuki  <basuke.suzuki@sony.com>

        [PlayStation][OpenSSL] Remove warnings.
        https://bugs.webkit.org/show_bug.cgi?id=224630

        Reviewed by Don Olmstead.

        There're two kinds of warnings in curl and openssl layer in our platform.

        a) Unused param

        b) '__WORDSIZE' is not defined. 
        warning: '__WORDSIZE' is not defined, evaluates to 0 [-Wundef]
        #if __WORDSIZE >= 64
        ^

        No new tests because it's only for compilation issue.

        * crypto/algorithms/CryptoAlgorithmAES_GCM.cpp:
        (WebCore::CryptoAlgorithmAES_GCM::encrypt):
        (WebCore::CryptoAlgorithmAES_GCM::decrypt):
        * crypto/openssl/CryptoKeyECOpenSSL.cpp:
        (WebCore::CryptoKeyEC::platformGeneratePair):
        (WebCore::CryptoKeyEC::platformImportRaw):
        (WebCore::CryptoKeyEC::platformImportJWKPublic):
        (WebCore::CryptoKeyEC::platformImportJWKPrivate):
        (WebCore::CryptoKeyEC::platformImportSpki):
        (WebCore::CryptoKeyEC::platformImportPkcs8):
        * crypto/openssl/CryptoKeyRSAOpenSSL.cpp:
        (WebCore::CryptoKeyRSA::create):
        (WebCore::CryptoKeyRSA::generatePair):
        (WebCore::CryptoKeyRSA::importSpki):
        (WebCore::CryptoKeyRSA::importPkcs8):

2021-04-16  Alex Christensen  <achristensen@webkit.org>

        Disable ApplicationCache with linkedOnOrAfter check
        https://bugs.webkit.org/show_bug.cgi?id=224629

        Reviewed by Brady Eidson.

        ApplicationCache has been deprecated for two years in WebKit with a message to developers since r227225.

        Firefox removed support in https://bugzilla.mozilla.org/show_bug.cgi?id=1619673 which shipped with Firefox 84 on Dec 15, 2020.

        Chrome removed support in https://bugs.chromium.org/p/chromium/issues/detail?id=582750 by default in Chrome 85 on August 25, 2020
        but they have a reverse origin trial program running right now so that some origins have it working, but they are planning to remove
        even that support October 2021.

        We have kept it working for a reason related to rdar://38505756, specifically the 4th and 5th comment in that bug.
        That reason is now passed.

        This patch removes support for new apps but keeps it working for 3rd party apps linked with existing SDKs.  Once those apps update
        to a new SDK, they will be unable to use ApplicationCache.  They will need to migrate to use fetch service workers instead.

        * platform/cocoa/VersionChecks.h:

2021-04-16  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r273733.
        https://bugs.webkit.org/show_bug.cgi?id=224686

        Broke mouse wheel scrolling speed

        Reverted changeset:

        "Eliminate ScrollAnimatorGeneric::m_smoothAnimation"
        https://bugs.webkit.org/show_bug.cgi?id=222588
        https://trac.webkit.org/changeset/273733

2021-04-16  Alex Christensen  <achristensen@webkit.org>

        Reduce maximum HashTable entry size to 128 bytes
        https://bugs.webkit.org/show_bug.cgi?id=224381

        Reviewed by Yusuke Suzuki.

        * inspector/agents/InspectorAnimationAgent.cpp:
        (WebCore::InspectorAnimationAgent::willApplyKeyframeEffect):
        (WebCore::InspectorAnimationAgent::stopTrackingDeclarativeAnimation):
        * inspector/agents/InspectorAnimationAgent.h:

2021-04-16  Tyler Wilcock  <twilco.o@protonmail.com>

        [css-counter-styles] Parse and add feature flag for @counter-style
        https://bugs.webkit.org/show_bug.cgi?id=223150

        Reviewed by Darin Adler.

        Parse @counter-style (without implementing descriptor parsing) behind
        a new feature flag, CSSCounterStyleAtRulesEnabled.  A separate feature
        flag for @counter-style <image> symbol values has also been added, as
        image symbols have extra complexities that we won't want to hold the
        entire feature back on.
        https://www.w3.org/TR/css-counter-styles-3

        The CSSCounterStyleRule IDL interface is also added and implemented,
        and similarly feature flagged.
        https://www.w3.org/TR/css-counter-styles-3/#apis

        Test: webexposed/counter-style-is-not-exposed.html and existing WPTs.

        * CMakeLists.txt:
        Add CSSCounterStyleRule.idl.

        * DerivedSources-input.xcfilelist:
        Add CSSCounterStyleRule.idl.

        * DerivedSources-output.xcfilelist:
        Add JSCSSCounterStyleRule.h and JSCSSCounterStyleRule.cpp.

        * DerivedSources.make:
        Add CSSCounterStyleRule.idl.

        * Sources.txt:
        Add CSSCounterStyleRule.cpp and JSCSSCounterStyleRule.cpp.

        * WebCore.xcodeproj/project.pbxproj:
        Add CounterStyle.h, CounterStyle.cpp, and CounterStyle.idl.

        * bindings/js/JSCSSRuleCustom.cpp:
        (WebCore::toJSNewlyCreated):
        Support CSSCounterStyleRule.

        * bindings/js/WebCoreBuiltinNames.h:
        Add macro(CSSCounterStyleRule) to generate counter-style built-in
        names.

        * css/CSSCounterStyleRule.cpp: Added.
        (WebCore::StyleRuleCounterStyle::StyleRuleCounterStyle):
        (WebCore::StyleRuleCounterStyle::create):
        (WebCore::StyleRuleCounterStyle::mutableProperties):
        (WebCore::CSSCounterStyleRule::CSSCounterStyleRule):
        (WebCore::CSSCounterStyleRule::reattach):
        (WebCore::CSSCounterStyleRule::cssText const):

        * css/CSSCounterStyleRule.h: Added.
        (isType): Add specialized rule.isCounterStyleRule() implementation.

        * css/CSSCounterStyleRule.idl: Added.
        * css/CSSRule.cpp: Add new StyleRuleType::CounterStyle COMPILE_ASSERT.
        * css/CSSRule.h:
        Add COUNTER_STYLE_RULE constant.  Also add comment `// WebIDL enum` to
        disable enum_casing lint, since these values are named to match IDL
        attributes.
        * css/CSSRule.idl: Add COUNTER_STYLE_RULE constant behind flag.

        * css/StyleRule.cpp: 
        (WebCore::StyleRuleBase::destroy):
        (WebCore::StyleRuleBase::copy const):
        (WebCore::StyleRuleBase::createCSSOMWrapper const):
        Handle newly added StyleRuleType::CounterStyle.

        * css/StyleRule.h:
        (WebCore::StyleRuleBase::isCounterStyleRule const): Added.

        * css/StyleRuleType.h: Add StyleRuleType::CounterStyle

        * css/StyleSheetContents.cpp:
        (WebCore::traverseRulesInVector):
        (WebCore::StyleSheetContents::traverseSubresources const):
        If @counter-style image symbols flag is enabled, do traverse
        subresources.

        * css/parser/CSSAtRuleID.cpp:
        If the @counter-style feature flag is enabled, return newly added
        CSSAtRuleCounterStyle ID.

        (WebCore::cssAtRuleID):
        * css/parser/CSSAtRuleID.h:
        Add CSSAtRuleCounterStyle ID.

        * css/parser/CSSParserContext.cpp:
        (WebCore::operator==):
        * css/parser/CSSParserContext.h:
        (WebCore::CSSParserContextHash::hash):
        Add cssCounterStyleAtRulesEnabled and
        cssCounterStyleAtRuleImageSymbolsEnabled flags.

        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):
        Refactor to use new CSSPropertyParserHelpers::isPredefinedCounterStyle
        method.

        * css/parser/CSSParserImpl.cpp:
        (WebCore::computeNewAllowedRules):
        (WebCore::CSSParserImpl::consumeAtRule):
        (WebCore::CSSParserImpl::consumeCounterStyleRule): Added.
        (WebCore::CSSParserImpl::consumeDeclarationList):
        (WebCore::CSSParserImpl::consumeDeclaration):
        * css/parser/CSSParserImpl.h:
        Handle new @counter-style rule.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::parseValue): Handle
        StyleRuleType::CounterStyle.
        (WebCore::consumeCounterContent):
        Refactor to use new CSSPropertyParserHelpers::isPredefinedCounterStyle
        method.
        (WebCore::CSSPropertyParser::parseCounterStyleDescriptor):
        Add placeholder for future @counter-style descriptor parsing work.

        * css/parser/CSSPropertyParser.h:
        Add parseCounterStyleDescriptor method

        * css/parser/CSSPropertyParserHelpers.h:
        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::consumeCustomIdent):
        Add new flag that allows consumed custom ident values to be lowercased
        on-parse.  This is necessary for some <counter-style-name> values.
        (WebCore::CSSPropertyParserHelpers::isPredefinedCounterStyle): Added.
        (WebCore::CSSPropertyParserHelpers::consumeCounterStyleName):
        (WebCore::CSSPropertyParserHelpers::consumeCounterStyleNameInPrelude):
        Parse @counter-style names, both in-prelude names and non-prelude
        names (e.g. as part of the `extends` descriptor).

2021-04-16  Chris Dumez  <cdumez@apple.com>

        Unreviewed GTK / WinCairo build fix after Antoine's r276141.

        Just add the BlendingContext constructor this time because there are too many build failures.

        * animation/CSSPropertyAnimation.cpp:
        (WebCore::CSSPropertyBlendingContext::CSSPropertyBlendingContext):
        (WebCore::CSSPropertyBlendingContext::client): Deleted.
        * platform/animation/AnimationUtilities.h:
        (WebCore::BlendingContext::BlendingContext):
        * platform/graphics/nicosia/NicosiaAnimation.cpp:
        (Nicosia::blendFunc):
        (Nicosia::applyTransformAnimation):

2021-04-16  Chris Dumez  <cdumez@apple.com>

        Unreviewed attempt to fix GTK's build after Antoine's r276141.

        * platform/graphics/nicosia/NicosiaAnimation.cpp:
        (Nicosia::blendFunc):
        (Nicosia::applyTransformAnimation):

2021-04-16  Chris Dumez  <cdumez@apple.com>

        Unreviewed build fix after Antoine's r276141.

        * animation/CSSPropertyAnimation.cpp:
        (WebCore::CSSPropertyBlendingContext::CSSPropertyBlendingContext):

2021-04-16  Antoine Quint  <graouts@webkit.org>

        Refactor parameters to blending functions
        https://bugs.webkit.org/show_bug.cgi?id=224433

        Reviewed by Dean Jackson.

        Reduce the number of parameters passed to the blending functions such that we package
        the client and progress together and track whether the animation is discrete instead
        of computing it several times. This information is now passed as a BlendingContext
        parameter, and a CSSPropertyBlendingContext private to CSSPropertyAnimation.

        When we support composite operations, we'll just need to add a new member to that
        struct instead of modifying all the method signatures.

        Since we are modifying the method signatures, we also change the RenderStyle pointers
        to references since we would never pass in a null value.

        * animation/CSSPropertyAnimation.cpp:
        (WebCore::CSSPropertyBlendingContext::CSSPropertyBlendingContext):
        (WebCore::blendFunc):
        (WebCore::blendFilterOperations):
        (WebCore::blendFilter):
        (WebCore::crossfadeBlend):
        (WebCore::AnimationPropertyWrapperBase::canInterpolate const):
        (WebCore::PropertyWrapperGetter::value const):
        (WebCore::canInterpolateCaretColor):
        (WebCore::CSSPropertyAnimation::blendProperties):
        (WebCore::CSSPropertyAnimation::propertiesEqual):
        (WebCore::CSSPropertyAnimation::canPropertyBeInterpolated):
        * animation/CSSPropertyAnimation.h:
        * animation/KeyframeEffect.cpp:
        (WebCore::KeyframeEffect::setAnimatedPropertiesInStyle):
        * css/CSSCrossfadeValue.cpp:
        (WebCore::blendFunc):
        (WebCore::CSSCrossfadeValue::blend const):
        * css/CSSCrossfadeValue.h:
        * css/CSSGradientValue.cpp:
        (WebCore::RadialGradientAdapter::normalizeStopsAndEndpointsOutsideRange):
        (WebCore::ConicGradientAdapter::normalizeStopsAndEndpointsOutsideRange):
        (WebCore::CSSGradientValue::computeStops):
        * platform/Length.cpp:
        (WebCore::blendMixedTypes):
        (WebCore::blend):
        * platform/Length.h:
        * platform/LengthPoint.h:
        (WebCore::blend):
        * platform/LengthSize.h:
        (WebCore::blend):
        * platform/animation/AnimationUtilities.h:
        (WebCore::blend):
        * platform/graphics/ColorBlending.cpp:
        (WebCore::blend):
        (WebCore::blendWithoutPremultiply):
        * platform/graphics/ColorBlending.h:
        * platform/graphics/ca/cocoa/PlatformCAFiltersCocoa.mm:
        (WebCore::PlatformCAFilters::colorMatrixValueForFilter):
        * platform/graphics/filters/FilterOperation.cpp:
        (WebCore::BasicColorMatrixFilterOperation::blend):
        (WebCore::BasicComponentTransferFilterOperation::blend):
        (WebCore::InvertLightnessFilterOperation::blend):
        (WebCore::BlurFilterOperation::blend):
        (WebCore::DropShadowFilterOperation::blend):
        * platform/graphics/filters/FilterOperation.h:
        (WebCore::FilterOperation::blend):
        * platform/graphics/transforms/IdentityTransformOperation.h:
        * platform/graphics/transforms/Matrix3DTransformOperation.cpp:
        (WebCore::createOperation):
        (WebCore::Matrix3DTransformOperation::blend):
        * platform/graphics/transforms/Matrix3DTransformOperation.h:
        * platform/graphics/transforms/MatrixTransformOperation.cpp:
        (WebCore::MatrixTransformOperation::blend):
        * platform/graphics/transforms/MatrixTransformOperation.h:
        * platform/graphics/transforms/PerspectiveTransformOperation.cpp:
        (WebCore::PerspectiveTransformOperation::blend):
        * platform/graphics/transforms/PerspectiveTransformOperation.h:
        * platform/graphics/transforms/RotateTransformOperation.cpp:
        (WebCore::RotateTransformOperation::blend):
        * platform/graphics/transforms/RotateTransformOperation.h:
        * platform/graphics/transforms/ScaleTransformOperation.cpp:
        (WebCore::ScaleTransformOperation::blend):
        * platform/graphics/transforms/ScaleTransformOperation.h:
        * platform/graphics/transforms/SkewTransformOperation.cpp:
        (WebCore::SkewTransformOperation::blend):
        * platform/graphics/transforms/SkewTransformOperation.h:
        * platform/graphics/transforms/TransformOperation.h:
        * platform/graphics/transforms/TransformOperations.cpp:
        (WebCore::TransformOperations::blendByMatchingOperations const):
        (WebCore::TransformOperations::blendByUsingMatrixInterpolation const):
        (WebCore::TransformOperations::blend const):
        * platform/graphics/transforms/TransformOperations.h:
        * platform/graphics/transforms/TranslateTransformOperation.cpp:
        (WebCore::TranslateTransformOperation::blend):
        * platform/graphics/transforms/TranslateTransformOperation.h:
        * rendering/style/BasicShapes.cpp:
        (WebCore::BasicShapeCircle::blend const):
        (WebCore::BasicShapeEllipse::blend const):
        (WebCore::BasicShapePolygon::blend const):
        (WebCore::BasicShapePath::blend const):
        (WebCore::BasicShapeInset::blend const):
        * rendering/style/BasicShapes.h:
        (WebCore::BasicShapeCenterCoordinate::blend const):
        (WebCore::BasicShapeRadius::blend const):
        * style/Styleable.cpp:
        (WebCore::propertyInStyleMatchesValueForTransitionInMap):
        (WebCore::updateCSSTransitionsForStyleableAndProperty):
        * svg/SVGLengthValue.cpp:
        (WebCore::SVGLengthValue::blend):
        * svg/SVGPathBlender.cpp:
        (WebCore::blendFloatPoint):
        (WebCore::SVGPathBlender::blendAnimatedDimensonalFloat):
        (WebCore::SVGPathBlender::blendArcToSegment):

2021-04-16  Antoine Quint  <graouts@webkit.org>

        Blend using calc() when necessary
        https://bugs.webkit.org/show_bug.cgi?id=224670

        Reviewed by Antti Koivisto.

        We need to blend between lengths when their types are not the same. However, we would take
        some shortcuts in the following cases and blend using just one value:

        1. either the from or to value was a 0 value,
        2. progress was 0 or 1.

        Now we use the mixed types code path if the types are different or either the from or to
        value is a calculated value. The single exception where we don't actually end up generating
        a CalculationValue is when we know that one of the two values is 0 and not a percentage, in
        which case we run a simple blend.

        Due to this approach, we stopped returning the value as-is in some cases where progress was
        0 or 1. To avoid regressions in this area, we made the LengthBoxPropertyWrapper clone the from
        or to value in the discrete case, as some other areas of the code do not know how to deal with
        calculated Length values, for instance valueForImageSliceSide(const Length&).

        * animation/CSSPropertyAnimation.cpp:
        * platform/Length.cpp:
        (WebCore::blendMixedTypes):
        (WebCore::blend):
        * platform/LengthBox.h:
        (WebCore::LengthBox::LengthBox):
        * platform/RectEdges.h:
        (WebCore::RectEdges::RectEdges):

2021-04-16  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] Do not try to collapse anonymous blocks when cleaning up the first-letter subtree
        https://bugs.webkit.org/show_bug.cgi?id=224667
        <rdar://76616098>

        Reviewed by Antti Koivisto.

        We construct a dedicated renderer for the first letter content and in some cases wrap it into an anonymous block.
        This subtree needs to be destroyed when the associated RenderText is getting deleted. During this cleanup process
        we may find the wrapper anonymous block redundant and initiate a sibling block collapsing. However this collapsing
        may interfere with the initial delete (the associated RenderText) and lead to unexpected result.
        Let's reserve the anonymous collapsing for the initial remove.

        * rendering/updating/RenderTreeBuilderFirstLetter.cpp:
        (WebCore::RenderTreeBuilder::FirstLetter::cleanupOnDestroy):

2021-04-16  Zalan Bujtas  <zalan@apple.com>

        [IFC] Incorrect box height when scrollbar takes padding box space
        https://bugs.webkit.org/show_bug.cgi?id=224546
        <rdar://problem/76666402>

        Reviewed by Antti Koivisto.

        This patch fixes the case when a non-overlay scrollbar can't be accomodated in the padding/content box area (e.g <div style="height: 10px; overflow: scroll">...)
        In the legacy render tree the non-overlay scrollbar size is already taken into account when calling RenderBox::contentWidth/Height (paddingBoxHeight/Width), so
        we just have to check how much space they actully take (currently maximum of 15px).

        Test: fast/inline-block/non-overlay-scrollbar-incorrect-padding.html

        * layout/integration/LayoutIntegrationLineLayout.cpp:
        (WebCore::LayoutIntegration::LineLayout::updateLayoutBoxDimensions):

2021-04-16  Ryosuke Niwa  <rniwa@webkit.org>

        Deploy Ref/RefPtr in ApplyStyleCommand
        https://bugs.webkit.org/show_bug.cgi?id=224662

        Reviewed by Antti Koivisto.

        Deployed smart pointers in ApplyStyleCommand. Also deployed ScriptDisallowedScope around the code
        which accesses the render tree in ApplyStyleCommand::applyInlineStyleToPushDown.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyRelativeFontStyleChange):
        (WebCore::dummySpanAncestorForNode):
        (WebCore::ApplyStyleCommand::cleanupUnstyledAppleStyleSpans):
        (WebCore::ApplyStyleCommand::splitAncestorsWithUnicodeBidi):
        (WebCore::ApplyStyleCommand::removeEmbeddingUpToEnclosingBlock):
        (WebCore::highestEmbeddingAncestor):
        (WebCore::ApplyStyleCommand::applyInlineStyle):
        (WebCore::ApplyStyleCommand::fixRangeAndApplyInlineStyle):
        (WebCore::containsNonEditableRegion):
        (WebCore::ApplyStyleCommand::applyInlineStyleToNodeRange):
        (WebCore::ApplyStyleCommand::shouldApplyInlineStyleToRun):
        (WebCore::ApplyStyleCommand::highestAncestorWithConflictingInlineStyle):
        (WebCore::ApplyStyleCommand::applyInlineStyleToPushDown):
        (WebCore::ApplyStyleCommand::pushDownInlineStyleAroundNode):
        (WebCore::ApplyStyleCommand::removeInlineStyle):
        (WebCore::ApplyStyleCommand::mergeStartWithPreviousIfIdentical):
        (WebCore::ApplyStyleCommand::mergeEndWithNextIfIdentical):
        (WebCore::ApplyStyleCommand::surroundNodeRangeWithElement):
        (WebCore::ApplyStyleCommand::applyInlineStyleChange):
        (WebCore::ApplyStyleCommand::joinChildTextNodes):
        * editing/ApplyStyleCommand.h:

2021-04-16  Ryosuke Niwa  <rniwa@webkit.org>

        Deploy Ref/RefPtr/WeakPtr in EditCommand and CompositeEditCommand
        https://bugs.webkit.org/show_bug.cgi?id=224659

        Reviewed by Antti Koivisto.

        Deployed Ref/RefPtr/WeakPtr across CompositeEditCommand and EditCommand.

        Also wrapped sections of code that access render tree with ScriptDisallowedScope.

        * editing/CompositeEditCommand.cpp:
        (WebCore::postTextStateChangeNotification):
        (WebCore::CompositeEditCommand::ensureComposition):
        (WebCore::CompositeEditCommand::isRemovableBlock): Let a raw pointer to the parent node here
        since the only thing we do is to call hasOneChild on it.
        (WebCore::CompositeEditCommand::insertNodeBefore):
        (WebCore::CompositeEditCommand::insertNodeAfter):
        (WebCore::CompositeEditCommand::insertNodeAt):
        (WebCore::CompositeEditCommand::removeChildrenInRange):
        (WebCore::CompositeEditCommand::replaceElementWithSpanPreservingChildrenAndAttributes):
        (WebCore::CompositeEditCommand::positionOutsideTabSpan):
        (WebCore::CompositeEditCommand::textNodeForRebalance const): Renamed from canRebalance and
        now returns the text node after downcasting so that rebalanceWhitespaceAt doesn't need to have
        a lone downcast without a type check.
        (WebCore::CompositeEditCommand::rebalanceWhitespaceAt):
        (WebCore::CompositeEditCommand::rebalanceWhitespaceOnTextSubstring):
        (WebCore::CompositeEditCommand::prepareWhitespaceAtPositionForSplit):
        (WebCore::CompositeEditCommand::deleteInsignificantText):
        (WebCore::CompositeEditCommand::addBlockPlaceholderIfNeeded):
        (WebCore::CompositeEditCommand::cloneParagraphUnderNewElement):
        (WebCore::CompositeEditCommand::moveParagraphs):
        * editing/CompositeEditCommand.h:
        (WebCore::CompositeEditCommand): Now inherits from CanMakeWeakPtr.
        (WebCore::toCompositeEditCommand): Deleted.
        * editing/EditCommand.cpp:
        (WebCore::EditCommand::EditCommand): Initialize m_startingSelection and m_endingSelection directly
        since setStartingSelection and setEndingSelection now stores "this" pointer in RefPtr.
        There is no behavior difference since m_parent and CompositeEditCommand::m_composition if applicable
        are both nullptr at this point.
        (WebCore::compositionIfPossible):
        (WebCore::EditCommand::isEditingTextAreaOrTextInput const): Use enclosingTextFormControl instead
        of duplicating the code here.
        (WebCore::EditCommand::setStartingSelection):
        (WebCore::EditCommand::setEndingSelection):
        (WebCore::EditCommand::setParent):
        (WebCore::EditCommand::postTextStateChangeNotification):
        * editing/EditCommand.h:
        (WebCore::EditCommand::parent const):
        * editing/InsertTextCommand.cpp:
        (WebCore::InsertTextCommand::doApply):

2021-04-16  Youenn Fablet  <youenn@apple.com>

        Remove a no longer necessary callOnMainThread in Worker::createRTCRtpScriptTransformer
        https://bugs.webkit.org/show_bug.cgi?id=224539

        Reviewed by Darin Adler.

        * workers/Worker.cpp:
        (WebCore::Worker::createRTCRtpScriptTransformer):
        ThreadSafeRefCounted already handles it with the DestructionThread::Main option.

2021-04-15  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r276107.
        https://bugs.webkit.org/show_bug.cgi?id=224653

        It broke non-Cocoa clean builds

        Reverted changeset:

        "[GPUP] WebContent process should not create AVOutputContext
        instances when media in GPU Process is enabled"
        https://bugs.webkit.org/show_bug.cgi?id=224469
        https://trac.webkit.org/changeset/276107

2021-04-15  Lauro Moura  <lmoura@igalia.com>

        REGRESSION(r276039) [GTK] Build failures on Ubuntu 18.04
        https://bugs.webkit.org/show_bug.cgi?id=224644
        <rdar://problem/76742835>

        Unreviewed build fix.

        * bindings/js/JSDOMSetLike.cpp: Add missing Inlines header as
        suggested by Mark.

2021-04-15  Don Olmstead  <don.olmstead@sony.com>

        Remove TilingData class
        https://bugs.webkit.org/show_bug.cgi?id=224643

        Reviewed by Yusuke Suzuki.

        It doesn't seem to be used anywhere and the code hasn't been touched in almost a decade.

        * PlatformMac.cmake:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/gpu/TilingData.cpp: Removed.
        * platform/graphics/gpu/TilingData.h: Removed.

2021-04-15  Don Olmstead  <don.olmstead@sony.com>

        [CMake] OpenGL libraries not linked when ANGLE isn't used
        https://bugs.webkit.org/show_bug.cgi?id=224642

        Reviewed by Fujii Hironori.

        Move the block linking and including OpenGL libraries outside of the ANGLE related checks
        to catch the case where OpenGL is needed but WebGL and ANGLE are disabled.

        Also removes an include for the platform/gpu directory as that's only used for WebGPU.

        * CMakeLists.txt:

2021-04-15  Sergio Villar Senin  <svillar@igalia.com>

        Assertion failure in SVGAnimationElement::currentValuesForValuesAnimation
        https://bugs.webkit.org/show_bug.cgi?id=222715

        Reviewed by Ryosuke Niwa.

        Replaced ASSERT_WITH_SECURITY_IMPLICATION by ASSERT. It was added by mistake as part of
        r157341 long time ago. There is no security implication because just after the assert
        there would be a division by 0 followed by a crash.

        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::currentValuesForValuesAnimation):

2021-04-15  Peng Liu  <peng.liu6@apple.com>

        [GPUP] WebContent process should not create AVOutputContext instances when media in GPU Process is enabled
        https://bugs.webkit.org/show_bug.cgi?id=224469

        Reviewed by Eric Carlson.

        This patch modifies `MediaPlaybackTargetContext` to provide interfaces to serialize/deserialize
        `AVOutputContext` and modifies `MediaPlaybackTargetCocoa` to use `MediaPlaybackTargetContext` to
        manage its `AVOutputContext` instead of keeping a pointer to the `AVOutputContext` object.
        With these changes, a WebContent process can forward a serialized `AVOutputContext` object
        to other processes (e.g., the GPU process) without deserializing it. Therefore, the WebContent
        process does not need access to the CoreMedia routing service. So we can remove the fix (r275669)
        for bug 224328.

        Covered by existing tests.

        * Modules/airplay/WebMediaSessionManager.cpp:
        (WebCore::WebMediaSessionManager::setMockMediaPlaybackTargetPickerState):
        * Modules/airplay/WebMediaSessionManager.h:

        * Headers.cmake:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        Modify the project file because `MediaPlaybackTargetContext` is used in Cocoa ports only.

        * page/ChromeClient.h:
        (WebCore::ChromeClient::setMockMediaPlaybackTargetPickerState):
        * page/Page.cpp:
        (WebCore::Page::setMockMediaPlaybackTargetPickerState):
        * page/Page.h:

        * platform/graphics/MediaPlaybackTarget.h:
        (WebCore::MediaPlaybackTarget::hasActiveRoute const):
        (WebCore::MediaPlaybackTarget::deviceName const):
        (WebCore::MediaPlaybackTarget::supportsRemoteVideoPlayback):
        (): Deleted.
        * platform/graphics/MediaPlaybackTargetContext.h: Removed.
        * platform/graphics/avfoundation/MediaPlaybackTargetCocoa.h:
        (WebCore::MediaPlaybackTargetCocoa::outputContext const): Deleted.
        * platform/graphics/avfoundation/MediaPlaybackTargetCocoa.mm:
        (WebCore::MediaPlaybackTargetCocoa::create):
        (WebCore::MediaPlaybackTargetCocoa::MediaPlaybackTargetCocoa):
        (WebCore::MediaPlaybackTargetCocoa::~MediaPlaybackTargetCocoa):
        (WebCore::toMediaPlaybackTargetCocoa):
        (WebCore::MediaPlaybackTargetCocoa::supportsRemoteVideoPlayback const): Deleted.
        (WebCore::MediaPlaybackTargetCocoa::targetContext const): Deleted.
        (WebCore::MediaPlaybackTargetCocoa::hasActiveRoute const): Deleted.
        (WebCore::MediaPlaybackTargetCocoa::deviceName const): Deleted.
        Don't directly use `AVOutputContext` in this class.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::isCurrentPlaybackTargetWireless const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setWirelessPlaybackTarget):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setShouldPlayToPlaybackTarget):

        * platform/graphics/cocoa/MediaPlaybackTargetContext.h: Added.
        (WebCore::MediaPlaybackTargetContext::MediaPlaybackTargetContext):
        (WebCore::MediaPlaybackTargetContext::type const):
        (WebCore::MediaPlaybackTargetContext::mockState const):
        (WebCore::MediaPlaybackTargetContext::outputContext const):
        (WebCore::MediaPlaybackTargetContext::serializedOutputContext const):
        (WebCore::MediaPlaybackTargetContext::encodingRequiresPlatformData const):
        * platform/graphics/cocoa/MediaPlaybackTargetContext.mm: Added.
        (WebCore::MediaPlaybackTargetContext::MediaPlaybackTargetContext):
        (WebCore::MediaPlaybackTargetContext::deviceName const):
        (WebCore::MediaPlaybackTargetContext::hasActiveRoute const):
        (WebCore::MediaPlaybackTargetContext::supportsRemoteVideoPlayback const):
        (WebCore::MediaPlaybackTargetContext::serializeOutputContext):
        (WebCore::MediaPlaybackTargetContext::deserializeOutputContext):

        * platform/mock/MediaPlaybackTargetMock.cpp:
        (WebCore::MediaPlaybackTargetMock::create):
        (WebCore::MediaPlaybackTargetMock::MediaPlaybackTargetMock):
        (WebCore::toMediaPlaybackTargetMock):
        (WebCore::MediaPlaybackTargetMock::targetContext const): Deleted.
        * platform/mock/MediaPlaybackTargetMock.h:
        (WebCore::MediaPlaybackTargetMock::state const):
        * platform/mock/MediaPlaybackTargetPickerMock.cpp:
        (WebCore::MediaPlaybackTargetPickerMock::externalOutputDeviceAvailable):
        (WebCore::MediaPlaybackTargetPickerMock::startingMonitoringPlaybackTargets):
        (WebCore::MediaPlaybackTargetPickerMock::invalidatePlaybackTargets):
        (WebCore::MediaPlaybackTargetPickerMock::setState):
        * platform/mock/MediaPlaybackTargetPickerMock.h:

        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState):
        (WebCore::Internals::setMockMediaPlaybackTargetPickerState):

2021-04-15  Tim Horton  <timothy_horton@apple.com>

        Add a mechanism to dump the PlatformCALayer subtree of a GraphicsLayer, for testing
        https://bugs.webkit.org/show_bug.cgi?id=224595

        Reviewed by Simon Fraser.

        Test: fast/harness/platform-layer-tree-as-text.html

        Add internals.platformLayerTreeAsText(), which takes a (composited) Element
        and returns the recursive PlatformCALayer tree under that element's backing
        layer's primary layer.

        This is intended to be used in a future patch in order to test a fix
        that is only currently testable by observing the platform layer tree.
        I've separated it from that patch in order to get the test rebaselining
        out of the way in a behavior-neutral patch.

        The motivation for a new method instead of a layerTreeAsText() flag
        is this: if you make each GraphicsLayerCA dump its PlatformCALayers
        (as a "show me the platform sublayers recursively" flag might do),
        each GraphicsLayerCA also dumps its children's platform sublayers.
        Thus the easiest way to get sane logging for testing is to target
        the specific element you're interested in; thus, a new method.

        * page/Frame.cpp:
        (WebCore::Frame::layerTreeAsText const): Deleted.
        * page/Frame.h:
        Move layerTreeAsText to RenderLayerCompositor, where it probably belongs.

        * page/Page.h: Fix a typo.

        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::platformLayerTreeAsText const):
        * platform/graphics/GraphicsLayerClient.h:
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::purposeNameForInnerLayer const):
        When dumping a PlatformCALayer, look up its purpose by checking which
        layer member it is, instead of having it passed in. This way, we can
        look it up even when we've reached this layer by crawling down the
        PlatformCALayer tree.

        (WebCore::GraphicsLayerCA::dumpInnerLayer const):
        Clean up the PlatformCALayer dumping; make it multi-line and more
        consistent with GraphicsLayer's dumping (a future patch will add more properties).

        (WebCore::GraphicsLayerCA::dumpAdditionalProperties const):
        Use dumpInnerLayer when dumping PlatformCALayers from a GraphicsLayer dump,
        but with a bit set to disable dumping children, to maintain the exising output
        and avoid each layer also dumping its children's platform layers, as mentioned above.

        (WebCore::GraphicsLayerCA::platformLayerTreeAsText const):
        (WebCore::dumpInnerLayer): Deleted.
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.h:
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:
        Add a getter for the set of sublayers of a PlatformCALayerCocoa that 
        themselves have PlatformCALayers (thus the -forLogging; I didn't want
        anybody to accidentally think that this gets *all* of the sublayers).

        (WebCore::PlatformCALayerCocoa::sublayersForLogging):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateCompositingForLayerTreeAsTextDump):
        Consolidate all of the pre-layer-tree-dumping setup work, so it can
        be shared between layerTreeAsText and platformLayerTreeAsText.

        (WebCore::RenderLayerCompositor::layerTreeAsText):
        (WebCore::RenderLayerCompositor::platformLayerTreeAsText):
        * rendering/RenderLayerCompositor.h:
        * testing/Internals.cpp:
        (WebCore::Internals::layerTreeAsText const):
        Adopt the RenderLayerCompositor version of layerTreeAsText.
        Don't bother doing layout, RenderLayerCompositor does it.

        (WebCore::toPlatformLayerTreeFlags):
        (WebCore::Internals::platformLayerTreeAsText const):
        * testing/Internals.h:
        * testing/Internals.idl:

2021-04-15  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] Support the Translate menu item in editable selected text
        https://bugs.webkit.org/show_bug.cgi?id=224625
        <rdar://problem/76723022>

        Reviewed by Tim Horton and Devin Rousso.

        Adjust some logic in `ContextMenuController` to ensure that the "Translate" context menu item shows up for
        selected text in both editable and non-editable fields. To do this, we pull code for appending the menu items
        out into a separate lambda function, which we use in both cases. This also allows us to remove some duplicated
        code between the editable and non-editable codepaths.

        Test: fast/events/contextmenu-actions-in-selected-text.html

        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::populate):

        Additionally, set `selectedText` and `selectionBounds` in both cases, as long as there is selected text.

2021-04-15  Ian Gilbert  <iang@apple.com>

        Null pointer dereference on MediaStreamAudioSourceNode destructor
        https://bugs.webkit.org/show_bug.cgi?id=224573

        Reviewed by Eric Carlson.

        Add null pointer check in case the capture source no longer exists.

        Test: webaudio/destroy-audio-source-node-with-no-track-crash.html

        * platform/mediastream/mac/MediaStreamTrackAudioSourceProviderCocoa.cpp:
        (WebCore::MediaStreamTrackAudioSourceProviderCocoa::hasNewClient):

2021-04-15  Julian Gonzalez  <julian_a_gonzalez@apple.com>

        Crash in ReplaceSelectionCommand::mergeEndIfNeeded()
        https://bugs.webkit.org/show_bug.cgi?id=224587

        Reviewed by Ryosuke Niwa.

        Return early in mergeEndIfNeeded() if either of our VisiblePositions are null.

        Test: editing/inserting/insert-horizontal-rule-with-style-crash.html

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::mergeEndIfNeeded):

2021-04-15  Manuel Rego Casasnovas  <rego@igalia.com>

        Move FocusRemovalEventsMode into FocusOptions
        https://bugs.webkit.org/show_bug.cgi?id=224549
        <rdar://problem/76695885>

        Reviewed by Darin Adler.

        Follow-up patch to use braces initializer for FocusOptions struct and simplify the code.

        * dom/Document.cpp:
        (WebCore::Document::adjustFocusedNodeOnNodeRemoval):

2021-04-15  Alex Christensen  <achristensen@webkit.org>

        Add deprecation macros
        https://bugs.webkit.org/show_bug.cgi?id=224624

        * platform/audio/mac/AudioHardwareListenerMac.cpp:
        (WebCore::isAudioHardwareProcessRunning):
        (WebCore::currentDeviceSupportedBufferSizes):
        (WebCore::processIsRunningPropertyDescriptor):
        (WebCore::outputDevicePropertyDescriptor):
        * platform/audio/mac/AudioSessionMac.mm:
        (WebCore::defaultDevice):
        (WebCore::defaultDeviceTransportIsBluetooth):
        (WebCore::AudioSessionPrivate::addSampleRateObserverIfNeeded):
        (WebCore::AudioSessionPrivate::addBufferSizeObserverIfNeeded):
        (WebCore::AudioSession::sampleRate const):
        (WebCore::AudioSession::bufferSize const):
        (WebCore::AudioSession::maximumNumberOfOutputChannels const):
        (WebCore::AudioSession::setPreferredBufferSize):
        (WebCore::AudioSession::isMuted const):
        (WebCore::AudioSession::addMutedStateObserver):
        (WebCore::AudioSession::removeMutedStateObserver):
        * platform/graphics/mac/GraphicsChecksMac.cpp:
        (WebCore::attachToAppleGraphicsControl):
        * platform/mediastream/mac/CoreAudioCaptureDevice.cpp:
        (WebCore::getDeviceInfo):
        (WebCore::CoreAudioCaptureDevice::CoreAudioCaptureDevice):
        (WebCore::CoreAudioCaptureDevice::relatedAudioDeviceIDs):
        * platform/mediastream/mac/CoreAudioCaptureDeviceManager.cpp:
        (WebCore::deviceHasInputStreams):
        (WebCore::deviceHasOutputStreams):
        (WebCore::isValidCaptureDevice):
        (WebCore::CoreAudioCaptureDeviceManager::coreAudioCaptureDevices):
        (WebCore::computeAudioDeviceList):
        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
        (WebCore::CoreAudioSharedUnit::defaultOutputDevice):

2021-04-15  Don Olmstead  <don.olmstead@sony.com>

        ANGLE is only being built when WebGL is enabled
        https://bugs.webkit.org/show_bug.cgi?id=224555

        Reviewed by Fujii Hironori.

        Remove any ENABLE(WEBGL) guards that reference functionality that isn't WebGL specific.
        Modify the CMakeLists file to build with USE_ANGLE_EGL when ENABLE_WEBGL is OFF.

        * CMakeLists.txt:
        * platform/graphics/GLContext.h:
        * platform/graphics/angle/ANGLEHeaders.h:
        * platform/graphics/egl/GLContextEGL.cpp:
        (WebCore::GLContextEGL::platformContext):
        * platform/graphics/egl/GLContextEGL.h:
        * platform/graphics/glx/GLContextGLX.cpp:
        (WebCore::GLContextGLX::platformContext):
        * platform/graphics/glx/GLContextGLX.h:
        * platform/graphics/opengl/TemporaryOpenGLSetting.cpp:
        * platform/graphics/opengl/TemporaryOpenGLSetting.h:

2021-04-15  Mark Lam  <mark.lam@apple.com>

        Optimize the DeferTermination scope to be more efficient.
        https://bugs.webkit.org/show_bug.cgi?id=224619

        Reviewed by Saam Barati.

        * workers/WorkerOrWorkletScriptController.cpp:

2021-04-15  Antoine Quint  <graouts@webkit.org>

        calc() should not contain 0 values other than percentages
        https://bugs.webkit.org/show_bug.cgi?id=224611

        Reviewed by Simon Fraser.

        A calc() value containing a 0px value, such as calc(10% + 0px), was incorrectly serialized
        as-is for the computed style, instead of the simplified form containing on the percentage.

        For the correct behavior we need to make four changes in css/CSSCalculationValue.cpp:

        1. in createCSS(const CalcExpressionNode&, const RenderStyle&), when dealing with a node
        that is CalcExpressionNodeType::Length, we return nullptr in the case then node's Length
        is a 0 value that's not a percentage,

        2. additionally, in createCSS(const Vector<std::unique_ptr<CalcExpressionNode>>&, const RenderStyle&),
        we no longer bail when a nullptr value is returned for a child and instead proceed with the
        processing of further children, ensuring that a 0px value in, say, a Sum operation is removed
        while retaining other non-zero values,

        3. back in createCSS(const CalcExpressionNode&, const RenderStyle&), for CalcExpressionNodeType::Operation
        nodes, when there is single parameter to a Sum operation we return that parameter rather than
        a Sum operation, and do the same for a Negate operation, making sure we return negated node if
        it is the second child,

        4. finally, in CSSCalcOperationNode::buildCSSText(const CSSCalcExpressionNode&, StringBuilder&)
        when we serialize a calculated value, we do not enclose the value in a `calc()` string if the
        node is a CSSCalcPrimitiveValueNode.

        * css/CSSCalculationValue.cpp:
        (WebCore::CSSCalcOperationNode::buildCSSText):
        (WebCore::createCSS):

2021-04-15  Mark Lam  <mark.lam@apple.com>

        Refactor inline functions out of HashMapImpl.h into HashMapImplInlines.h.
        https://bugs.webkit.org/show_bug.cgi?id=224616
        rdar://76713709

        Reviewed by Yusuke Suzuki.

        * bindings/js/SerializedScriptValue.cpp:

2021-04-15  Alex Christensen  <achristensen@webkit.org>

        Use WTF::Function instead of std::function in SVGPropertyAnimatorFactory::attributeAnimatorCreator
        https://bugs.webkit.org/show_bug.cgi?id=224586

        Reviewed by Darin Adler.

        sizeof(WTF::Function<void()>) is 8.
        sizeof(std::function<void()>) is 48.

        * svg/properties/SVGPropertyAnimatorFactory.h:
        (WebCore::SVGPropertyAnimatorFactory::attributeAnimatorCreator):

2021-04-14  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Image extraction fails in Google search results
        https://bugs.webkit.org/show_bug.cgi?id=224527
        <rdar://problem/76500331>

        Reviewed by Andy Estes.

        Override the `-webkit-user-select` CSS property in Google search results pages, and make a slight adjustment to
        the user agent stylesheet.

        Test: fast/images/image-extraction/image-overlay-in-image-with-zero-font-size.html

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::updateWithImageExtractionResult):
        * html/shadow/imageOverlay.css:
        (div#image-overlay):

        Additionally force a default value for the font size and font family of the image overlay text, so that a
        cascading font size of 0 won't end up breaking logic for computing image overlay CSS transforms. See layout test
        for more details.

        * page/Quirks.cpp:
        (WebCore::Quirks::needsToForceUserSelectWhenInstallingImageOverlay const):
        * page/Quirks.h:

2021-04-15  Antti Koivisto  <antti@apple.com>

        Remove unused RunIterator::setAtEnd
        https://bugs.webkit.org/show_bug.cgi?id=224597

        Reviewed by Zalan Bujtas.

        * layout/integration/LayoutIntegrationLineIteratorLegacyPath.h:
        (WebCore::LayoutIntegration::LineIteratorLegacyPath::atEnd const):
        (WebCore::LayoutIntegration::LineIteratorLegacyPath::setAtEnd): Deleted.
        * layout/integration/LayoutIntegrationLineIteratorModernPath.h:
        (WebCore::LayoutIntegration::LineIteratorModernPath::atEnd const):
        (WebCore::LayoutIntegration::LineIteratorModernPath::setAtEnd):
        * layout/integration/LayoutIntegrationRunIterator.cpp:
        (WebCore::LayoutIntegration::RunIterator::setAtEnd): Deleted.
        * layout/integration/LayoutIntegrationRunIterator.h:
        * layout/integration/LayoutIntegrationRunIteratorLegacyPath.h:
        (WebCore::LayoutIntegration::RunIteratorLegacyPath::atEnd const):
        (WebCore::LayoutIntegration::RunIteratorLegacyPath::setAtEnd): Deleted.
        * layout/integration/LayoutIntegrationRunIteratorModernPath.h:
        (WebCore::LayoutIntegration::RunIteratorModernPath::atEnd const):
        (WebCore::LayoutIntegration::RunIteratorModernPath::setAtEnd):

2021-04-15  Philippe Normand  <pnormand@igalia.com>

        [WebRTC][GStreamer] Build and use the openh264 based encoder if present on the system
        https://bugs.webkit.org/show_bug.cgi?id=202538
        <rdar://problem/76047172>

        Reviewed by Xabier Rodriguez-Calvar.

        Enable the openh264 encoder if it is available, it would be preferred over existing
        GStreamer H.264 encoders in such case.

        * platform/mediastream/libwebrtc/GStreamerVideoCommon.cpp:
        (WebCore::supportedH264Formats):
        * platform/mediastream/libwebrtc/GStreamerVideoCommon.h:
        * platform/mediastream/libwebrtc/GStreamerVideoDecoderFactory.cpp:
        * platform/mediastream/libwebrtc/GStreamerVideoEncoderFactory.cpp:
        (WebCore::GStreamerVideoEncoderFactory::CreateVideoEncoder):
        (WebCore::GStreamerVideoEncoderFactory::GetSupportedFormats const):

2021-04-15  Youenn Fablet  <youenn@apple.com>

        Make RTCEncodedVideoFrameMetadata.contributingSources undefined until properly supported
        https://bugs.webkit.org/show_bug.cgi?id=224540

        Reviewed by Eric Carlson.

        We are not yet ready to expose contributing sources for video.
        It seems better to have the corresponding field be undefined instead of an empty array.

        Covered by updated test.

        * Modules/mediastream/RTCEncodedVideoFrame.idl:
        * Modules/mediastream/RTCRtpTransformableFrame.h:
        * Modules/mediastream/libwebrtc/LibWebRTCRtpTransformableFrame.cpp:
        (WebCore::LibWebRTCRtpTransformableFrame::videoMetadata const):

2021-04-15  Chris Lord  <clord@igalia.com>

        Make FontFace parsing worker-safe
        https://bugs.webkit.org/show_bug.cgi?id=224426

        Reviewed by Darin Adler.

        Make CSS FontFace property parsing safe to do in a Worker. Instead of
        constructing a rule per property and using the full CSSPropertyParser
        path, instead factor out the specific, necessary property parsers into a
        new CSSPropertyParserWorkerSafe and make sure they're safe to use in a
        Worker (mainly by allowing for specifying the CSSValuePool so that
        main-thread singletons don't get used).

        No new tests, no change in behavior.

        * Sources.txt: Add CSSPropertyParserWorkerSafe.cpp/.h
        * WebCore.xcodeproj/project.pbxproj:

        * css/FontFace.cpp: Call setters with the ScriptExecutionContext so
          that we have access to ::cssValuePool() and use new worker-safe
          parser functions.
        (WebCore::FontFace::create):
        (WebCore::FontFace::setFamily):
        (WebCore::FontFace::setStyle):
        (WebCore::FontFace::setWeight):
        (WebCore::FontFace::setStretch):
        (WebCore::FontFace::setUnicodeRange):
        (WebCore::FontFace::setFeatureSettings):
        (WebCore::FontFace::setDisplay):
        * css/FontFace.h:
        * css/FontFace.idl:

        * css/parser/CSSParser.cpp: Move WorkerSafe parsing functions to
          CSSPropertyParserWorkerSafe and remove now-unnecessary
          parseFontFaceDescriptor.
        * css/parser/CSSParser.h:

        * css/parser/CSSPropertyParser.cpp: Move FontFace property parsers to
          CSSPropertyParserWorkerSafe.
        (WebCore::CSSPropertyParser::parseSingleValue):
        (WebCore::CSSPropertyParser::parseFontFaceDescriptor):
        (WebCore::CSSPropertyParser::consumeFont):
        * css/parser/CSSPropertyParser.h:

        * css/parser/CSSPropertyParserHelpers.cpp: Add WorkerSafe variants for
          some of the basic consume helpers.
        (WebCore::CSSPropertyParserHelpers::CalcParser::CalcParser):
        (WebCore::CSSPropertyParserHelpers::CalcParser::consumeValue):
        (WebCore::CSSPropertyParserHelpers::CalcParser::consumeInteger):
        (WebCore::CSSPropertyParserHelpers::CalcParser::consumeNumber):
        (WebCore::CSSPropertyParserHelpers::consumeFontWeightNumber):
        (WebCore::CSSPropertyParserHelpers::consumeFontWeightNumberWorkerSafe):
        (WebCore::CSSPropertyParserHelpers::consumePercent):
        (WebCore::CSSPropertyParserHelpers::consumePercentWorkerSafe):
        (WebCore::CSSPropertyParserHelpers::consumeAngle):
        (WebCore::CSSPropertyParserHelpers::consumeAngleWorkerSafe):
        (WebCore::CSSPropertyParserHelpers::consumeIdent):
        (WebCore::CSSPropertyParserHelpers::consumeIdentWorkerSafe):
        (WebCore::CSSPropertyParserHelpers::consumeFontRaw):
        * css/parser/CSSPropertyParserHelpers.h:
        (WebCore::CSSPropertyParserHelpers::consumeIdent):
        (WebCore::CSSPropertyParserHelpers::consumeIdentWorkerSafe):

        * css/parser/CSSPropertyParserWorkerSafe.cpp: Added.
        (WebCore::CSSPropertyParserWorkerSafe::parseFont):
        (WebCore::CSSPropertyParserWorkerSafe::parseColor):
        (WebCore::CSSPropertyParserWorkerSafe::parseFontFaceSrc):
        (WebCore::CSSPropertyParserWorkerSafe::parseFontFaceStyle):
        (WebCore::CSSPropertyParserWorkerSafe::parseFontFaceWeight):
        (WebCore::CSSPropertyParserWorkerSafe::parseFontFaceStretch):
        (WebCore::CSSPropertyParserWorkerSafe::parseFontFaceUnicodeRange):
        (WebCore::CSSPropertyParserWorkerSafe::parseFontFaceFeatureSettings):
        (WebCore::CSSPropertyParserWorkerSafe::parseFontFaceDisplay):
        (WebCore::CSSPropertyParserHelpersWorkerSafe::consumeFontFaceSrcURI):
        (WebCore::CSSPropertyParserHelpersWorkerSafe::consumeFontFaceSrcLocal):
        (WebCore::CSSPropertyParserHelpersWorkerSafe::consumeFontFaceSrc):
        (WebCore::CSSPropertyParserHelpersWorkerSafe::consumeFontStyle):
        (WebCore::CSSPropertyParserHelpersWorkerSafe::consumeFontStyleKeywordValue):
        (WebCore::CSSPropertyParserHelpersWorkerSafe::consumeFontStyleRange):
        (WebCore::CSSPropertyParserHelpersWorkerSafe::consumeFontWeightAbsoluteKeywordValue):
        (WebCore::CSSPropertyParserHelpersWorkerSafe::consumeFontWeightAbsoluteRange):
        (WebCore::CSSPropertyParserHelpersWorkerSafe::consumeFontWeightAbsolute):
        (WebCore::CSSPropertyParserHelpersWorkerSafe::consumeFontStretchKeywordValue):
        (WebCore::CSSPropertyParserHelpersWorkerSafe::fontStretchIsWithinRange):
        (WebCore::CSSPropertyParserHelpersWorkerSafe::consumeFontStretch):
        (WebCore::CSSPropertyParserHelpersWorkerSafe::consumeFontStretchRange):
        (WebCore::CSSPropertyParserHelpersWorkerSafe::consumeFontFaceUnicodeRange):
        (WebCore::CSSPropertyParserHelpersWorkerSafe::consumeFontFeatureTag):
        (WebCore::CSSPropertyParserHelpersWorkerSafe::consumeFontFeatureSettings):
        (WebCore::CSSPropertyParserHelpersWorkerSafe::consumeFontFaceFontDisplay):
        * css/parser/CSSPropertyParserWorkerSafe.h: Added.

        * dom/ScriptExecutionContext.cpp: Add ::cssValuePool().
        (WebCore::ScriptExecutionContext::cssValuePool):
        * dom/ScriptExecutionContext.h:

        * html/canvas/CanvasRenderingContext2D.cpp: Update due to refactoring.
        (WebCore::CanvasRenderingContext2D::setFontWithoutUpdatingStyle):
        * html/canvas/CanvasStyle.cpp:
        (WebCore::parseColor):
        * html/canvas/OffscreenCanvasRenderingContext2D.cpp:
        (WebCore::OffscreenCanvasRenderingContext2D::setFont):
        * workers/WorkerGlobalScope.h:

2021-04-15  Manuel Rego Casasnovas  <rego@igalia.com>

        Move FocusRemovalEventsMode into FocusOptions
        https://bugs.webkit.org/show_bug.cgi?id=224549

        Reviewed by Darin Adler.

        This patch is just a refactoring that moves FocusRemovalEventsMode enum into FocusOptions.
        This allows us to simplify some method signatures, as they'll just receive a FocusOptions parameter, instead of two parameters for FocusRemovalEventsMode and FocusDirection.

        There is no change of behavior, just a code refactoring.

        * dom/Document.cpp:
        (WebCore::Document::adjustFocusedNodeOnNodeRemoval):
        (WebCore::Document::setFocusedElement):
        * dom/Document.h:
        (WebCore::Document::setFocusedElement):
        * dom/Element.cpp:
        (WebCore::Element::focus):
        * dom/FocusOptions.h:
        * page/FocusController.cpp:
        (WebCore::FocusController::setFocusedElement):
        * page/FocusController.h:
        (WebCore::FocusController::setFocusedElement):

2021-04-09  Sergio Villar Senin  <svillar@igalia.com>

        Empty value is added in codePointsFromString in CSSFontFaceSet::matchingFacesExcludingPreinstalledFonts
        https://bugs.webkit.org/show_bug.cgi?id=223857

        Reviewed by Darin Adler.

        Use UnsignedWithZeroKeyHashTraits in codePointsFromString() to avoid it.

        * css/CSSFontFaceSet.cpp:
        (WebCore::codePointsFromString):

2021-04-15  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] Cleanup the inline tree when moving subtrees
        https://bugs.webkit.org/show_bug.cgi?id=224342
        <rdar://76349279>

        Reviewed by Antti Koivisto.

        When an inline box is moved over to a different BFC (<span>), any inline level descendant (<span><img></span>) should be invalidated. The safest way to do this is
        to destroy the inline tree (the "subtree moving" will eventually be replaced by "destroy followed by construct" activity).

        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::move):

2021-04-15  Youenn Fablet  <youenn@apple.com>

        Update RTCScriptTransform constructor up to spec
        https://bugs.webkit.org/show_bug.cgi?id=224447

        Reviewed by Eric Carlson.

        Remove built-in support for message ports in RTCRtpScriptTransform/RTCRtpScriptTransformer.
        Instead pass a transfer object to RTCRtpScriptTransform constructor used jointly with options to enable the same behavior.
        This aligns with the change made in https://github.com/w3c/webrtc-encoded-transform/pull/96.

        Covered by updated tests.

        * Modules/mediastream/RTCRtpScriptTransform.cpp:
        (WebCore::RTCRtpScriptTransform::create):
        (WebCore::RTCRtpScriptTransform::RTCRtpScriptTransform):
        * Modules/mediastream/RTCRtpScriptTransform.h:
        * Modules/mediastream/RTCRtpScriptTransform.idl:
        * Modules/mediastream/RTCRtpScriptTransformer.cpp:
        (WebCore::RTCRtpScriptTransformer::create):
        (WebCore::RTCRtpScriptTransformer::RTCRtpScriptTransformer):
        (WebCore::RTCRtpScriptTransformer::options):
        * Modules/mediastream/RTCRtpScriptTransformer.h:
        (WebCore::RTCRtpScriptTransformer::port): Deleted.
        * Modules/mediastream/RTCRtpScriptTransformer.idl:
        * workers/DedicatedWorkerGlobalScope.cpp:
        (WebCore::DedicatedWorkerGlobalScope::createRTCRtpScriptTransformer):
        * workers/DedicatedWorkerGlobalScope.h:
        * workers/Worker.cpp:
        (WebCore::Worker::createRTCRtpScriptTransformer):
        * workers/Worker.h:

2021-04-15  Youenn Fablet  <youenn@apple.com>

        REGRESSION(Safari 14): iframe with blob url does not work with sandboxing
        https://bugs.webkit.org/show_bug.cgi?id=222312
        <rdar://problem/74927624>

        Reviewed by Chris Dumez.

        In https://trac.webkit.org/r275884, we correctly compute whether a blob is to be considered secure or not.
        For that, we need to have the blob URL registered with its document origin.
        Update PolicyChecker to properly register the temporoary blob URL with its document origin.

        Test: http/tests/security/sandbox-iframe-and-blob.https.html

        * loader/PolicyChecker.cpp:
        (WebCore::FrameLoader::PolicyChecker::extendBlobURLLifetimeIfNecessary const):

2021-04-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r272900): Nullptr crash in ComposedTreeIterator::traverseNextInShadowTree() via ShadowRoot::hostChildElementDidChange
        https://bugs.webkit.org/show_bug.cgi?id=222720

        Reviewed by Ryosuke Niwa.

        This patch reverts r274064 to apply a different fix. Instead of null-checking the nodes returned by
        SlotAssignment::assignedNodesForSlot(), assigned nodes are removed from the list when they are about to be
        removed from the parent. That ensures we never return nullptr nodes nor nodes with a nullptr parent from the
        assigned nodes vector.

        * dom/ComposedTreeIterator.cpp:
        (WebCore::ComposedTreeIterator::traverseNextInShadowTree):
        (WebCore::ComposedTreeIterator::advanceInSlot):
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::removeBetween):
        * dom/Node.h:
        (WebCore::Node::hasShadowRootContainingSlots const):
        (WebCore::Node::setHasShadowRootContainingSlots):
        * dom/ShadowRoot.h:
        * dom/SlotAssignment.cpp:
        (WebCore::SlotAssignment::addSlotElementByName):
        (WebCore::SlotAssignment::removeSlotElementByName):
        (WebCore::SlotAssignment::willRemoveAssignedNode):
        * dom/SlotAssignment.h:
        (WebCore::ShadowRoot::willRemoveAssignedNode):

2021-04-15  Ryosuke Niwa  <rniwa@webkit.org>

        Deploy Ref/RefPtr in ReplaceSelectionCommand
        https://bugs.webkit.org/show_bug.cgi?id=224591

        Reviewed by Jiewen Tan.

        Deployed Ref/RefPtr in ReplaceSelectionCommand.cpp per guidelines we outlined in
        https://lists.webkit.org/pipermail/webkit-dev/2020-September/031386.html

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::positionAvoidingPrecedingNodes):
        (WebCore::ReplacementFragment::ReplacementFragment):
        (WebCore::ReplacementFragment::removeUnrenderedNodes):
        (WebCore::ReplacementFragment::removeInterchangeNodes):
        (WebCore::ReplaceSelectionCommand::shouldMerge):
        (WebCore::fragmentNeedsColorTransformed): Protected the code accessing the render tree
        with ScriptDisallowedScope::InMainThread.
        (WebCore::ReplaceSelectionCommand::removeRedundantStylesAndKeepStyleSpanInline):
        (WebCore::ReplaceSelectionCommand::makeInsertedContentRoundTrippableWithHTMLTreeBuilder):
        (WebCore::ReplaceSelectionCommand::moveNodeOutOfAncestor):
        (WebCore::ReplaceSelectionCommand::positionAtEndOfInsertedContent const):
        (WebCore::handleStyleSpansBeforeInsertion):
        (WebCore::ReplaceSelectionCommand::handleStyleSpans):
        (WebCore::enclosingInline):
        (WebCore::ReplaceSelectionCommand::doApply):
        (WebCore::ReplaceSelectionCommand::shouldPerformSmartReplace const):
        (WebCore::ReplaceSelectionCommand::addSpacesForSmartReplace):
        (WebCore::ReplaceSelectionCommand::mergeTextNodesAroundPosition):
        (WebCore::singleChildList):
        (WebCore::deepestSingleChildList):
        (WebCore::ReplaceSelectionCommand::insertAsListItems):
        (WebCore::ReplaceSelectionCommand::performTrivialReplace):

2021-04-14  Antti Koivisto  <antti@apple.com>

        Preloaded async scripts should use the same priority as the normally loaded ones
        https://bugs.webkit.org/show_bug.cgi?id=224537

        Reviewed by Sam Weinig.

        Use the same priority (medium instead of low) when preloading.
        
        Factor default priorities to a separate type making it easier to keep them in sync.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/LoadableClassicScript.cpp:
        (WebCore::LoadableClassicScript::load):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::process):
        * html/parser/HTMLResourcePreloader.cpp:
        (WebCore::PreloadRequest::resourceRequest):
        * loader/DefaultResourceLoadPriority.cpp: Added.
        (WebCore::DefaultResourceLoadPriority::forResourceType):
        * loader/DefaultResourceLoadPriority.h: Added.
        * loader/LinkLoader.cpp:
        (WebCore::LinkLoader::preloadIfNeeded):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::CachedResource):
        (WebCore::CachedResource::setLoadPriority):
        (WebCore::CachedResource::defaultPriorityForResourceType): Deleted.
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::identifierForLoadWithoutResourceLoader const):

2021-04-14  Tim Nguyen  <ntim@apple.com>

        Omit default position/angle when serializing radial & conic gradients
        https://bugs.webkit.org/show_bug.cgi?id=223892

        Reviewed by Antti Koivisto.

        Test: LayoutTests/imported/w3c/web-platform-tests/css/css-backgrounds/parsing/background-image-computed.sub.html

        * css/CSSGradientValue.cpp:
        (WebCore::ConicGradientAdapter::normalizeStopsAndEndpointsOutsideRange):
        (WebCore::CSSLinearGradientValue::customCSSText const):
        (WebCore::CSSRadialGradientValue::customCSSText const):
        (WebCore::CSSConicGradientValue::customCSSText const):
        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::isCenterPosition const):
        * css/CSSPrimitiveValue.h:

2021-04-14  Don Olmstead  <don.olmstead@sony.com>

        [Nicosia] NicosiaGCGLLayer is unneeded when ENABLE_WEBGL is OFF
        https://bugs.webkit.org/show_bug.cgi?id=224557

        Reviewed by Michael Catanzaro.

        Add an ENABLE(WEBGL) guard around NicosiaGCGLLayer.

        * platform/graphics/nicosia/texmap/NicosiaGCGLLayer.cpp:
        * platform/graphics/nicosia/texmap/NicosiaGCGLLayer.h:

2021-04-14  Ryosuke Niwa  <rniwa@webkit.org>

        Avoid indirect load in ContainerNode::hasOneChild()
        https://bugs.webkit.org/show_bug.cgi?id=224589

        Reviewed by Chris Dumez.

        Getting nextSibling() will involve loading the first child into the register.
        Avoid that and just check m_firstChild and m_lastChild instead to avoid this extra memory load.

        * dom/ContainerNode.h:
        (WebCore::ContainerNode::hasOneChild const):

2021-04-14  Ryosuke Niwa  <rniwa@webkit.org>

        Crash in in ReplaceSelectionCommand::mergeEndIfNeeded()
        https://bugs.webkit.org/show_bug.cgi?id=222941

        Unreviewed. Address Darin's post-commit comment that we don't need to explicitly call copyRef here.

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::mergeEndIfNeeded):

2021-04-14  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] Make image extraction interactions work for elements inside links
        https://bugs.webkit.org/show_bug.cgi?id=224576
        <rdar://problem/76664721>

        Reviewed by Devin Rousso.

        Make a slight adjustment to `EventHandler::canMouseDownStartSelect` to allow selection to begin when handling a
        mousedown over text inside an image overlay.

        Test: fast/images/image-extraction/mac/select-image-overlay-in-link-with-mouse-drag.html

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::isImageOverlayText):

        Add an overloaded version of this helper method that takes a pointer instead of a reference, and use it in
        several places where we current check the nullity of a `Node*` before dereferencing it and passing it into
        `isImageOverlayText()`.

        * html/HTMLElement.h:
        * page/DragController.cpp:
        (WebCore::DragController::draggableElement const):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::canMouseDownStartSelect):
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::EventHandler::updateSelectionForMouseDrag):

        Additionally, make it so that we only invalidate a click (i.e. prevent mouse release from dispatching a click
        event) in `EventHandler::updateSelectionForMouseDrag` in the case where we're selecting text in an image
        overlay, if the selection hasn't actually changed.

2021-04-14  Devin Rousso  <drousso@apple.com>

        [Apple Pay] add WKA hooks for `ApplePayModifier`
        https://bugs.webkit.org/show_bug.cgi?id=224585
        <rdar://problem/76669793>

        Reviewed by Wenson Hsieh.

        * Modules/applepay/paymentrequest/ApplePayModifier.h:

2021-04-14  Chris Dumez  <cdumez@apple.com>

        Flaky crash under AudioSummingJunction::removeOutput() on Debug bots
        https://bugs.webkit.org/show_bug.cgi?id=224584

        Reviewed by Eric Carlson.

        Add DisableMallocRestrictionsForCurrentThreadScope to allow the heap allocation until I can investigate
        if we can avoid it.

        * Modules/webaudio/AudioSummingJunction.cpp:
        (WebCore::AudioSummingJunction::removeOutput):

2021-04-13  BJ Burg  <bburg@apple.com>

        Web Inspector: add setting to allow inspecting Web Inspector
        https://bugs.webkit.org/show_bug.cgi?id=224082
        <rdar://75695002>

        Reviewed by Devin Rousso.

        Add a property to check if inspecting inspector is allowed,
        and to enable/disable upon loading the frontend or toggling the setting.

        * en.lproj/Localizable.strings:
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::inspectInspector):
        (WebCore::InspectorFrontendHost::allowsInspectingInspector):
        (WebCore::InspectorFrontendHost::setAllowsInspectingInspector):
        * inspector/InspectorFrontendHost.h:
        * inspector/InspectorFrontendHost.idl:

2021-04-14  Sam Weinig  <weinig@apple.com>

        Use range-for loop in target contrast selection to simplify/improve code readability
        https://bugs.webkit.org/show_bug.cgi?id=224512

        Reviewed by Darin Adler.

        Address some additional post landing feedback from Darin.

        - Use range-for loop in target contrast selection.
        - Use double to represent luminance, lightness and contrast everywhere.
          This avoid unnecessary conversions to and from float.
        - Rename Color::contrastRatio(Color, Color) to just contrastRatio(Color, Color)
          and move it ColorLuminance.h/cpp with the other contrastRatio overloads.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        Add ColorLuminance.cpp

        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::selectFirstColorThatMeetsOrExceedsTargetContrast):
        Convert colorsToCompareAgainst to an r-value since vector is never used after
        calling this.

        (WebCore::CSSPropertyParserHelpers::selectFirstColorWithHighestContrast):
        Convert colorsToCompareAgainst to an r-value since vector is never used after
        calling this. Also, switch to a range-for loop to aid readability.

        (WebCore::CSSPropertyParserHelpers::parseColorContrastFunctionParameters):
        Move colorsToCompareAgainst to the select functions.

        * platform/graphics/Color.h:
        * platform/graphics/Color.cpp:
        (WebCore::Color::lightness const):
        (WebCore::Color::luminance const):
        Use double to represent lightness and luminance.

        (WebCore::Color::contrastRatio): Deleted.
        Moved to ColorLuminance.h/cpp

        * platform/graphics/ColorLuminance.cpp: Added.
        (WebCore::contrastRatio):
        * platform/graphics/ColorLuminance.h:
        (WebCore::relativeLuminance):
        (WebCore::contrastRatio):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::disabledTextColor const):
        * rendering/TextPaintStyle.cpp:
        (WebCore::textColorIsLegibleAgainstBackgroundColor):
        Use double to represent luminance and constrast everywhere.

2021-04-14  Antti Koivisto  <antti@apple.com>

        RunIterator::traverseNext/PreviousOnLineIgnoringLineBreak should skip over WBRs
        https://bugs.webkit.org/show_bug.cgi?id=224545
        rdar://76101143

        Reviewed by Zalan Bujtas.
        
        Test: fast/editing/wbr-iterator-crash.html

        * layout/integration/LayoutIntegrationRunIterator.cpp:
        (WebCore::LayoutIntegration::RunIterator::traverseNextOnLineIgnoringLineBreak):
        (WebCore::LayoutIntegration::RunIterator::traversePreviousOnLineIgnoringLineBreak):
        
        Skip over (instead of bailing) runs with isLineBreak() set. It is true for <WBR> so there can be multiple on a line.

2021-04-14  Lauro Moura  <lmoura@igalia.com>

        REGRESSION(r275948) Wrap sh::ShaderVariable into UniqueRef to fit in HashMap
        https://bugs.webkit.org/show_bug.cgi?id=224567

        Unreviewed build fix.

        * platform/graphics/opengl/ExtensionsGLOpenGLCommon.cpp:
        (WebCore::ExtensionsGLOpenGLCommon::getTranslatedShaderSourceANGLE):
        * platform/graphics/opengl/GraphicsContextGLOpenGL.h:
        * platform/graphics/opengl/GraphicsContextGLOpenGLCommon.cpp:
        (WebCore::GraphicsContextGLOpenGL::precisionsMatch const):
        (WebCore::GraphicsContextGLOpenGL::mappedSymbolInShaderSourceMap):
        (WebCore::GraphicsContextGLOpenGL::originalSymbolInShaderSourceMap):
        (WebCore::GraphicsContextGLOpenGL::mappedSymbolName):
        (WebCore::GraphicsContextGLOpenGL::shaderSource):

2021-04-14  Julian Gonzalez  <julian_a_gonzalez@apple.com>

        Crash in ReplaceSelectionCommand::removeUnrenderedTextNodesAtEnds()
        https://bugs.webkit.org/show_bug.cgi?id=224520

        Reviewed by Ryosuke Niwa.

        Adopt RefPtr<Node> instead of using plain Node* here to avoid a crash.

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::removeUnrenderedTextNodesAtEnds):

2021-04-14  Devin Rousso  <drousso@apple.com>

        [iOS] limit how often `WebAVPlayerController` notifies the `PlaybackSessionModel` about changes to playback speed
        https://bugs.webkit.org/show_bug.cgi?id=224515
        <rdar://problem/75901463>

        Reviewed by Eric Carlson.

        This change will cause `HTMLMediaElement::setPlaybackRate` to not send IPC back and forth
        between the WebProcess and UIProcess, as a modification to the `WebAVPlayerController` in
        the UIProcess would notify its `PlaybackSessionModel` "delegate", which would in turn make
        it's way back to the related `HTMLMediaElement::setPlaybackRate` in the WebProcess.

        * platform/ios/WebAVPlayerController.mm:
        (-[WebAVPlayerController init]):
        (-[WebAVPlayerController dealloc]):
        (-[WebAVPlayerController defaultPlaybackRate]): Added.
        (-[WebAVPlayerController setDefaultPlaybackRate:]): Added.
        (-[WebAVPlayerController rate]): Added.
        (-[WebAVPlayerController setRate:]): Added.
        (-[WebAVPlayerController observeValueForKeyPath:ofObject:change:context:]):
        Instead of relying on ObjC KVO on `self` to handle changes to `defaultPlaybackRate` (and
        `rate`), create an actual `setDefaultPlaybackRate:` so that we can handle cases where the
        value is the same. Limit when we notify the `PlaybackSessionModel` to only when it has a
        different value.

        * platform/cocoa/PlaybackSessionModel.h:
        * platform/cocoa/PlaybackSessionModelMediaElement.h:
        * platform/cocoa/PlaybackSessionModelMediaElement.mm:
        (WebCore::PlaybackSessionModelMediaElement::setPlaybackRate): Added.
        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        (VideoFullscreenControllerContext::setPlaybackRate): Added.
        Add support for handling when the `rate` of the `AVPlayerController` changes too.

2021-04-14  Kate Cheney  <katherine_cheney@apple.com>

        Service worker soft-update loads not being marked app-bound
        https://bugs.webkit.org/show_bug.cgi?id=223200
        <rdar://problem/75438555>

        Reviewed by Youenn Fablet.

        We need to mark requests initiated by service worker soft updates as
        app-bound based on the last navigation. We should get this value from the
        NetworkResourceLoader and store it in SWServerRegistration so we can
        use it to build a new request.

        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::startScriptFetch):
        * workers/service/server/SWServer.h:
        Pass the entire SWServerRegistration to SWServer::startScriptFetch
        now that we need more than one value from it. Move shouldRefreshCache
        logic here instead of SWServerJobQueue::runUpdateJob.

        * workers/service/server/SWServerJobQueue.cpp:
        (WebCore::SWServerJobQueue::runUpdateJob):
        * workers/service/server/SWServerRegistration.cpp:
        (WebCore::SWServerRegistration::scheduleSoftUpdate):
        * workers/service/server/SWServerRegistration.h:
        (WebCore::SWServerRegistration::isAppBound):

2021-04-14  Eric Carlson  <eric.carlson@apple.com>

        Allow text tracks to purge cues outside of the buffered range
        https://bugs.webkit.org/show_bug.cgi?id=224489

        Reviewed by Jer Noble.

        TextTrackCues associated in-band tracks live "forever" - until the video element 
        is deleted or reloaded. This is fine for relatively short files, but not so good
        for long lived files (eg. a very long live stream), or for timed metadata where
        the "cue" size can be much larger than a text sample. 

        Allow text tracks to opt in to purging cues who's time range does not intersect
        with the `buffered` range, where audio and video data is also not available. Only
        AVFoundation backed in-band tracks opt in at this time, because AVFoundation will
        redeliver cues if a time range is played again.

        Tested manually as the only way to test this currently would be with an HLS stream
        that would have to play too long for a layout test, or with an MSE text track but
        we won't support text tracks in MSE yet.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerBufferedTimeRangesChanged): Allow tracks
        that support purging cues to do so.
        * html/HTMLMediaElement.h:

        * html/track/InbandDataTextTrack.h: Return true for shouldPurgeCuesFromUnbufferedRanges();

        * html/track/InbandGenericTextTrack.h: Ditto.

        * html/track/TextTrack.cpp:
        (WebCore::TextTrack::removeCuesNotInTimeRanges): Remove all cues who's time range
        does not intersect with the buffered range.
        * html/track/TextTrack.h:
        (WebCore::TextTrack::shouldPurgeCuesFromUnbufferedRanges const):

2021-04-14  Antti Koivisto  <antti@apple.com>

        Remove unused InlineBox::next/previousLeafOnLineIgnoringLineBreak()
        https://bugs.webkit.org/show_bug.cgi?id=224542

        Reviewed by Zalan Bujtas.

        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::nextLeafOnLineIgnoringLineBreak const): Deleted.
        (WebCore::InlineBox::previousLeafOnLineIgnoringLineBreak const): Deleted.
        * rendering/InlineBox.h:

2021-04-14  Frédéric Wang  <fwang@igalia.com>

        Crash in RenderBlock::addOverflowFromChildren
        https://bugs.webkit.org/show_bug.cgi?id=223539

        Reviewed by Ryosuke Niwa.

        For an <svg> element that is a direct child of a <foreignObject>, a RenderSVGRoot is
        generally created. However, a RenderSVGViewportContainer is currently created instead if
        the element is inside a shadow tree. This is leading to bad state during the layout of
        the foreign object, causing a debug assertion and a nullptr crash. This patch fixes this
        issue by always treating direct <svg> child of <foreignObject> as an outermost SVG element.

        Tests: svg/foreignObject/svg-child-of-foreign-object-in-shadow-tree-crash.html
               svg/outermost-svg-root.html

        * svg/SVGElement.cpp:
        (WebCore::SVGElement::isOutermostSVGSVGElement const): Lower down the priority of the rule
        "is in shadow tree".

2021-04-14  Zalan Bujtas  <zalan@apple.com>

        InlineBox should not hold a reference to RenderObject
        https://bugs.webkit.org/show_bug.cgi?id=224506

        Reviewed by Antti Koivisto.

        The InlineBox/RenderObject relationship is somewhat error-prone (see RenderBox::setInlineBoxWrapper vs. InlineElementBox::extractLine) and it's rather easy to delete one without letting the other know.

        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::showNodeTreeForThis const):
        (WebCore::InlineBox::showLineTreeForThis const):
        (WebCore::InlineBox::caretMinOffset const):
        (WebCore::InlineBox::caretMaxOffset const):
        (WebCore::InlineBox::adjustPosition):
        (WebCore::InlineBox::selectionState):
        (WebCore::InlineBox::canAccommodateEllipsis const):
        (WebCore::InlineBox::locationIncludingFlipping const):
        (WebCore::InlineBox::flipForWritingMode const):
        * rendering/InlineBox.h:
        (WebCore::InlineBox::renderer const):
        (WebCore::InlineBox::boxModelObject const):
        (WebCore::InlineBox::InlineBox):

2021-04-14  Aditya Keerthi  <akeerthi@apple.com>

        [iOS][FCR] Indeterminate progress bars should update at 60fps
        https://bugs.webkit.org/show_bug.cgi?id=224372
        <rdar://problem/76416848>

        Reviewed by Wenson Hsieh.

        * rendering/RenderProgress.cpp:
        (WebCore::RenderProgress::animationTimerFired):

        Added a FIXME to state that progress bar animation should be performed
        as part of the rendering update lifecycle. Progress bars have always
        maintained their own timers for animation, however, the update interval
        may not always match the display's refresh rate.

        * rendering/RenderThemeIOS.mm:

        Ensure a smoother animation by increasing the frame rate to 60fps.

2021-04-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        Do not reset computed style for element children with display contents style
        https://bugs.webkit.org/show_bug.cgi?id=223794

        Reviewed by Antti Koivisto.

        We were checking hasDisplayContents() was false before calling resetComputedStyle() on the parent, but we don't
        check it when iterating the children.

        * dom/Element.cpp:
        (WebCore::Element::resetComputedStyle):
        * style/StyleTreeResolver.cpp:
        (WebCore::Style::TreeResolver::resolveComposedTree):

2021-04-13  Rob Buis  <rbuis@igalia.com>

        Make SVGElement::getBoundingBox retrieve bbox from RenderObject
        https://bugs.webkit.org/show_bug.cgi?id=224482

        Reviewed by Zalan Bujtas.

        Make SVGElement::getBoundingBox retrieve bbox from RenderObject.
        Also make it const and return an Optional.

        * dom/Element.cpp:
        (WebCore::Element::boundsInRootViewSpace):
        (WebCore::Element::absoluteEventBounds):
        (WebCore::Element::boundingAbsoluteRectWithoutLayout):
        * page/ResizeObservation.cpp:
        (WebCore::ResizeObservation::computeObservedSize const):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::getBoundingBox const):
        (WebCore::SVGElement::getBoundingBox): Deleted.
        * svg/SVGElement.h:

2021-04-13  Kimmo Kinnunen  <kkinnunen@apple.com>

        AudioSourceProviderAVFObjC should lock all multithreaded objects
        https://bugs.webkit.org/show_bug.cgi?id=224230

        Reviewed by Eric Carlson.

        Lock following objects with TapStorage::lock:
          AudioSourceProviderAVFObjC::m_tapStorage
          AudioSourceProviderAVFObjC::m_avPlayerItem

        Do not clear the tapStorage nor the _this pointer from
        the audio thread. This is a race that cannot be overcome
        since the main thread needs to access the m_tapStorage pointer to
        lock the m_tapStorage pointer for modification.

        Initialize m_tap in more robust way, in case initialization fails.

        Do not leave stale m_tapStorage present when destroying the mixer.

        * platform/graphics/avfoundation/AudioSourceProviderAVFObjC.h:
        * platform/graphics/avfoundation/AudioSourceProviderAVFObjC.mm:
        (WebCore::AudioSourceProviderAVFObjC::~AudioSourceProviderAVFObjC):
        (WebCore::AudioSourceProviderAVFObjC::destroyMixIfNeeded):
        (WebCore::AudioSourceProviderAVFObjC::createMixIfNeeded):
        (WebCore::AudioSourceProviderAVFObjC::initCallback):
        (WebCore::AudioSourceProviderAVFObjC::finalizeCallback):

2021-04-13  Fujii Hironori  <Hironori.Fujii@sony.com>

        Table caption jumps to the bottom of the table after simplified table relayout
        https://bugs.webkit.org/show_bug.cgi?id=187903
        <rdar://problem/42506245>

        Reviewed by Zalan Bujtas.

        Test: fast/table/caption-simplified-layout.html

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::simplifiedNormalFlowLayout):
        Do not call layoutCaptions().

2021-04-13  Myles C. Maxfield  <mmaxfield@apple.com>

        [GPU Process] Simplify DisplayList::Iterator part 4: Move DisplayList::Iterator to its own .h/.cpp files
        https://bugs.webkit.org/show_bug.cgi?id=224146

        Reviewed by Wenson Hsieh.

        This doesn't actually change any lines of code; it just moves code into different files.
        This patch isn't strictly necessary, but I think it helps, because the iterator contains
        a non-trivial amount of logic.

        No new tests because there is no behavior change.

        * Headers.cmake:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/displaylists/DisplayList.cpp:
        (WebCore::DisplayList::DisplayList::begin const):
        (WebCore::DisplayList::DisplayList::end const):
        (WebCore::DisplayList::DisplayList::iterator::atEnd const): Deleted.
        (WebCore::DisplayList::DisplayList::iterator::updateCurrentDrawingItemExtent): Deleted.
        (WebCore::DisplayList::DisplayList::iterator::updateCurrentItem): Deleted.
        (WebCore::DisplayList::DisplayList::iterator::advance): Deleted.
        (WebCore::DisplayList::DisplayList::iterator::clearCurrentItem): Deleted.
        (WebCore::DisplayList::DisplayList::iterator::moveToEnd): Deleted.
        (WebCore::DisplayList::DisplayList::iterator::moveCursorToStartOfCurrentBuffer): Deleted.
        * platform/graphics/displaylists/DisplayList.h:
        (WebCore::DisplayList::DisplayList::iterator::iterator): Deleted.
        (WebCore::DisplayList::DisplayList::iterator::~iterator): Deleted.
        (WebCore::DisplayList::DisplayList::iterator::operator==): Deleted.
        (WebCore::DisplayList::DisplayList::iterator::operator!=): Deleted.
        (WebCore::DisplayList::DisplayList::iterator::operator++): Deleted.
        (WebCore::DisplayList::DisplayList::iterator::operator* const): Deleted.
        (WebCore::DisplayList::DisplayList::iterator::itemBuffer const): Deleted.
        (WebCore::DisplayList::DisplayList::begin const): Deleted.
        (WebCore::DisplayList::DisplayList::end const): Deleted.
        * platform/graphics/displaylists/DisplayListIterator.cpp: Added.
        (WebCore::DisplayList::DisplayList::Iterator::atEnd const):
        (WebCore::DisplayList::DisplayList::Iterator::updateCurrentDrawingItemExtent):
        (WebCore::DisplayList::DisplayList::Iterator::updateCurrentItem):
        (WebCore::DisplayList::DisplayList::Iterator::advance):
        (WebCore::DisplayList::DisplayList::Iterator::clearCurrentItem):
        (WebCore::DisplayList::DisplayList::Iterator::moveToEnd):
        (WebCore::DisplayList::DisplayList::Iterator::moveCursorToStartOfCurrentBuffer):
        * platform/graphics/displaylists/DisplayListIterator.h: Added.
        (WebCore::DisplayList::DisplayList::Iterator::Iterator):
        (WebCore::DisplayList::DisplayList::Iterator::~Iterator):
        (WebCore::DisplayList::DisplayList::Iterator::operator==):
        (WebCore::DisplayList::DisplayList::Iterator::operator!=):
        (WebCore::DisplayList::DisplayList::Iterator::operator++):
        (WebCore::DisplayList::DisplayList::Iterator::operator* const):
        (WebCore::DisplayList::DisplayList::Iterator::itemBuffer const):
        * platform/graphics/displaylists/DisplayListReplayer.cpp:

2021-04-13  Alex Christensen  <achristensen@webkit.org>

        Disable YouTube Flash and QuickTime plug in replacements on iOS
        https://bugs.webkit.org/show_bug.cgi?id=224453

        Reviewed by Chris Dumez.

        * page/Settings.yaml:

2021-04-13  Ziran Sun  <zsun@igalia.com>

        [css-grid] Incorrect track sizing when using relative sized items in 'auto' column tracks
        https://bugs.webkit.org/show_bug.cgi?id=191627

        Reviewed by Javier Fernandez.

        This is a reland of r274596. The original patch was reverted because Google logo is not visible
        on google.com.

        Containing block for a grid item is the grid area it's located in. During the GridTrackSizingAlgorithm,
        we determine that this item has a relative size (percent in this case) and that the grid area is still
        indefinite. Hence, we set nullopt for the grid area width and mark the item for layout. During the item's
        layout, we call this RenderBox::containingBlockLogicalWidthForContent to determine the available height.
        However, this method checks the containing block's width if the overridingContentLogicalWidth is nullopt,
        which is incorrect for grid items. We should never use the grid container for resolving grid item's size.

        This change is to return 0_lu for grid item when overridingContainingBlockContentLogicalWidth() returns
        nullopt rather than use containing block's width. It also comments that there might be an issue with 
        RenderBox::containingBlockLogicalHeightForContent for grid item. It should return whatever value we get from
        overridingContainingBlockContentLogicalHeight(), including WTF::nullopt.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::containingBlockLogicalWidthForContent const):
        (WebCore::RenderBox::containingBlockLogicalHeightForContent const):

2021-04-13  Devin Rousso  <drousso@apple.com>

        [WebIDL] includes for `Conditional` dictionary members should also be guarded
        https://bugs.webkit.org/show_bug.cgi?id=224501
        <rdar://problem/76598492>

        Reviewed by Tim Horton.

        WebKitAdditions sometimes needs to conditionally include IDL files and in those cases the
        generated `JS*.h` might not get created even though the wrapped C++ type does exist. In
        these cases, we should also guard the `#include JS*.h` (in addition to the already guarded
        usage of the wrapped C++ type in `convertDictionary`).

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateDictionaryImplementationContent):

        * bindings/scripts/test/TestDictionary.idl: Added.
        * bindings/scripts/test/JS/JSTestDictionary.h: Added.
        * bindings/scripts/test/JS/JSTestDictionary.cpp: Added.
        * bindings/scripts/test/TestDictionaryWithOnlyConditionalMembers.idl:
        * bindings/scripts/test/JS/JSTestDictionaryWithOnlyConditionalMembers.cpp:
        * bindings/scripts/test/SupplementalDependencies.dep:

2021-04-13  Said Abou-Hallawa  <said@apple.com>

        [GPU Process] Make ImageBuffer calculate its memoryCost() from its size
        https://bugs.webkit.org/show_bug.cgi?id=224306

        Reviewed by Simon Fraser.

        Instead of round-trip processes to get the backend memoryCost(), we can 
        calculate it from the size and the bytes alignment of each row in the
        backend. These are static values so in the case of RemoteImageBufferProxy,
        there is no need to ensure the backend is created in GPUP and it is mapped
        in the Web Process.

        * platform/graphics/ConcreteImageBuffer.h:
        * platform/graphics/ImageBufferBackend.cpp:
        (WebCore::ImageBufferBackend::calculateBackendSize):
        (WebCore::ImageBufferBackend::calculateMemoryCost):
        (WebCore::ImageBufferBackend::ImageBufferBackend):
        * platform/graphics/ImageBufferBackend.h:
        (WebCore::ImageBufferBackend::calculateExternalMemoryCost):
        (WebCore::ImageBufferBackend::memoryCost const): Deleted.
        (WebCore::ImageBufferBackend::externalMemoryCost const): Deleted.
        (WebCore::ImageBufferBackend::bytesPerRow const): Deleted.
        - This is the general case of the backend which is 4-bytes aligned rows.
        - calculateSafeBackendSize() returns the size whose bytesPerRow does not
        overflow unsigned and whose memoryCost does not not overflow size_t.

        * platform/graphics/cairo/ImageBufferCairoImageSurfaceBackend.cpp:
        (WebCore::ImageBufferCairoImageSurfaceBackend::calculateSafeBackendSize):
        (WebCore::ImageBufferCairoImageSurfaceBackend::calculateBytesPerRow):
        (WebCore::ImageBufferCairoImageSurfaceBackend::calculateMemoryCost):
        (WebCore::ImageBufferCairoImageSurfaceBackend::create):
        (WebCore::ImageBufferCairoImageSurfaceBackend::bytesPerRow const):
        * platform/graphics/cairo/ImageBufferCairoImageSurfaceBackend.h:
        cairo_format_stride_for_width() is used to calculate the bytesPerRow()
        for Cairo port.

        * platform/graphics/cg/ImageBufferCGBackend.cpp:
        (WebCore::ImageBufferCGBackend::calculateBytesPerRow):
        * platform/graphics/cg/ImageBufferCGBackend.h:
        This is the CG case when the backend is 4-bytes aligned rows.

        * platform/graphics/cg/ImageBufferCGBitmapBackend.cpp:
        (WebCore::ImageBufferCGBitmapBackend::calculateSafeBackendSize):
        (WebCore::ImageBufferCGBitmapBackend::calculateMemoryCost):
        (WebCore::ImageBufferCGBitmapBackend::create):
        (WebCore::ImageBufferCGBitmapBackend::bytesPerRow const):
        * platform/graphics/cg/ImageBufferCGBitmapBackend.h:
        This is the CG bitmap case where the backend is 4-bytes aligned rows.

        * platform/graphics/cg/ImageBufferIOSurfaceBackend.cpp:
        (WebCore::ImageBufferIOSurfaceBackend::calculateSafeBackendSize):
        (WebCore::ImageBufferIOSurfaceBackend::calculateBytesPerRow):
        (WebCore::ImageBufferIOSurfaceBackend::calculateMemoryCost):
        (WebCore::ImageBufferIOSurfaceBackend::calculateExternalMemoryCost):
        (WebCore::ImageBufferIOSurfaceBackend::create):
        (WebCore::ImageBufferIOSurfaceBackend::context const):
        (WebCore::ImageBufferIOSurfaceBackend::calculateBackendSize): Deleted.
        (WebCore::ImageBufferIOSurfaceBackend::memoryCost const): Deleted.
        (WebCore::ImageBufferIOSurfaceBackend::externalMemoryCost const): Deleted.
        * platform/graphics/cg/ImageBufferIOSurfaceBackend.h:
        IOSurfaceAlignProperty() is used to align the CG bytesPerRow to the proper
        IOSurface alignment.

2021-04-13  Razvan Caliman  <rcaliman@apple.com>

        Web Inspector: Forced color scheme should reset on page refresh
        https://bugs.webkit.org/show_bug.cgi?id=224485
        <rdar://76227216>

        Reviewed by BJ Burg.

        Reset the forced color scheme on page reload to keep in sync with Web Inspector
        behavior for other forced states, like pseudo-classes.

        * page/Page.cpp:
        (WebCore::Page::didCommitLoad):

2021-04-13  Alex Christensen  <achristensen@webkit.org>

        Remove SharedBuffer's equality operators with Ref<SharedBuffer>
        https://bugs.webkit.org/show_bug.cgi?id=224464

        Reviewed by Chris Dumez.

        No change in behavior.

        I'm doing this to make a Ref comparator for all Refs to remove another reason we use RefPtr instead of Ref, even when they're all non-null.
        See bug 224412

        * platform/SharedBuffer.h:
        (WebCore::operator==): Deleted.
        (WebCore::operator!=): Deleted.
        * platform/graphics/avfoundation/objc/CDMInstanceFairPlayStreamingAVFObjC.mm:
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::sessionForKeyIDs const):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::updateLicense):

2021-04-13  Kimmo Kinnunen  <kkinnunen@apple.com>

        AudioSourceProviderAVFObjC should check for m_client when dispatching setFormat
        https://bugs.webkit.org/show_bug.cgi?id=224479

        Reviewed by Eric Carlson.

        Use a weak pointer to schedule the setFormat client callback.
        If client is unset before any callback is run, cancel the
        pending callbacks.

        * platform/graphics/avfoundation/AudioSourceProviderAVFObjC.h:
        * platform/graphics/avfoundation/AudioSourceProviderAVFObjC.mm:
        (WebCore::AudioSourceProviderAVFObjC::destroyMixIfNeeded):
        (WebCore::AudioSourceProviderAVFObjC::createMixIfNeeded):
        (WebCore::AudioSourceProviderAVFObjC::prepare):

2021-04-13  Kimmo Kinnunen  <kkinnunen@apple.com>

        AudioSourceProviderAVFObjC::setClient should check for m_avAssetTrack
        https://bugs.webkit.org/show_bug.cgi?id=224478

        Reviewed by Eric Carlson.

        Check for m_avAssetTrack when setting the client.
        This is done for consistency, it is unclear if this affects
        real world content.

        * platform/graphics/avfoundation/AudioSourceProviderAVFObjC.h:
        * platform/graphics/avfoundation/AudioSourceProviderAVFObjC.mm:
        (WebCore::AudioSourceProviderAVFObjC::setClient):
        (WebCore::AudioSourceProviderAVFObjC::setPlayerItem):
        (WebCore::AudioSourceProviderAVFObjC::setAudioTrack):
        (WebCore::AudioSourceProviderAVFObjC::destroyMixIfNeeded):
        (WebCore::AudioSourceProviderAVFObjC::createMixIfNeeded):

2021-04-13  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r275889.
        https://bugs.webkit.org/show_bug.cgi?id=224488

        Unintentional commit

        Reverted changeset:

        https://trac.webkit.org/changeset/275889

2021-04-13  Sihui Liu  <sihui_liu@apple.com>

        Make WebIDBServer not block main thread during initialization
        https://bugs.webkit.org/show_bug.cgi?id=224299

        Reviewed by Geoffrey Garen.

        * Modules/indexeddb/server/IDBServer.cpp:
        (WebCore::IDBServer::IDBServer::IDBServer):
        * Modules/indexeddb/server/IDBServer.h:
        (WebCore::IDBServer::IDBServer::lock): Deleted.
        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::abortActiveTransactions):

2021-04-13  Frédéric Wang  <fwang@igalia.com>

        ASSERTION FAILED: !m_needExceptionCheck in CloneSerializer::serialize with postMessage({g:42})
        https://bugs.webkit.org/show_bug.cgi?id=223785

        Reviewed by Yusuke Suzuki.

        Test: js/dom/missing-exception-check-in-clone-serializer-serialize.html

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::serialize): Use a local throw scope within this method and
        handle potential exceptions.
        (WebCore::CloneBase::shouldTerminate): Deleted.

2021-04-13  Philippe Normand  <pnormand@igalia.com>

        [GTK][WPE] Avif decoder build broken
        https://bugs.webkit.org/show_bug.cgi?id=224232

        Reviewed by Carlos Garcia Campos.

        libavif 0.9.0 introduces an API break. avifDecoderParse() no
        longer takes the image data as input. Instead, an avifIO object
        needs to be associated with an avifDecoder and the avifDecoder
        calls the read() method of the avifIO object to read image data
        incrementally.

        * platform/image-decoders/avif/AVIFImageReader.cpp:
        (WebCore::AVIFImageReader::parseHeader):
        (WebCore::AVIFImageReader::decodeFrame):

2021-04-13  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] CaptureDevice monitoring is not implemented
        https://bugs.webkit.org/show_bug.cgi?id=222889

        Reviewed by Xabier Rodriguez-Calvar.

        GStreamer capture device events are notified through a message bus associated to the the
        GstDeviceMonitor, so we need to watch out for those messages and notify the
        RealtimeSourceMediaCenter accordingly.

        * platform/mediastream/gstreamer/GStreamerCaptureDeviceManager.cpp:
        (WebCore::GStreamerCaptureDeviceManager::~GStreamerCaptureDeviceManager):
        (WebCore::GStreamerCaptureDeviceManager::captureDevices):
        (WebCore::GStreamerCaptureDeviceManager::addDevice):
        (WebCore::GStreamerCaptureDeviceManager::refreshCaptureDevices):
        * platform/mediastream/gstreamer/GStreamerCaptureDeviceManager.h:

2021-04-13  Frédéric Wang  <fwang@igalia.com>

        ASSERTION FAILED: !m_needExceptionCheck in RTCPeerConnection::CertificateParameters
        https://bugs.webkit.org/show_bug.cgi?id=223788

        Reviewed by Ryosuke Niwa.

        Test: js/dom/missing-exception-check-in-convertNumbers.html

        * bindings/js/JSDOMConvertNumbers.h:
        (WebCore::Converter<IDLFloat>::convert): Handle potential exceptions thrown by toNumber.
        (WebCore::Converter<IDLDouble>::convert): Ditto.

2021-04-13  Rob Buis  <rbuis@igalia.com>

        Skip style update
        https://bugs.webkit.org/show_bug.cgi?id=223365

        Reviewed by Ryosuke Niwa.

        Skip style update for getting the SVG bounding box
        since boundingClientRect already updated style.

        * dom/Element.cpp:
        (WebCore::Element::boundingAbsoluteRectWithoutLayout):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::getBoundingBox):

2021-04-13  Youenn Fablet  <youenn@apple.com>

        SFrameTransform should be able to take array buffer views as input
        https://bugs.webkit.org/show_bug.cgi?id=224437

        Reviewed by Eric Carlson.

        Add support for processing ArrayBufferView.
        We still output ArrayBuffer as output.

        Test: webrtc/sframe-transform-buffer-source.html

        * Modules/mediastream/RTCRtpSFrameTransform.cpp:
        (WebCore::transformFrame):
        (WebCore::RTCRtpSFrameTransform::createStreams):

2021-04-12  Sergio Villar Senin  <svillar@igalia.com>

        [css-flexbox] CDC COVID Vaccine Tracker: Safari garbles data table
        https://bugs.webkit.org/show_bug.cgi?id=222581

        Reviewed by Zalan Bujtas.

        With nested flexboxes in which the flex-basis is a percentage the current code that stretches the item forces a relayout
        of the children because it thinks it has percentage height descendants. That happens because we call
        computePercentageLogicalHeights() with a mock percentage length to check whether a size is definite and that call performs
        the addPercentageHeightDescendants() call. We should avoid calling the latter in those cases as we're just trying to
        figure out whether we can compute the flex-basis used value or not.

        Adding a new parameter to the aforementioned method so that the percentage height descendants map could be left untouched
        in those cases where we just want to test size definiteness.

        Apart from making the implementation more correct this brings some performance improvements for the cases described in the
        first paragraph as it can be seen in the provided performance test (24.5% of improvement).

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computePercentageLogicalHeight const):
        * rendering/RenderBox.h:
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::canComputePercentageFlexBasis const):
        (WebCore::RenderFlexibleBox::childMainSizeIsDefinite const):
        (WebCore::RenderFlexibleBox::useChildOverridingMainSizeForPercentageResolution):
        * rendering/RenderFlexibleBox.h:

2021-04-13  Ryosuke Niwa  <rniwa@webkit.org>

        Use WTF::compactMap in HTMLSlotElement
        https://bugs.webkit.org/show_bug.cgi?id=224470

        Reviewed by Antti Koivisto.

        Cleaned up the code in assignedNodes and assignedElements with WTF::compactMap.

        * html/HTMLSlotElement.cpp:
        (WebCore::HTMLSlotElement::assignedNodes const):
        (WebCore::HTMLSlotElement::assignedElements const):

2021-04-13  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] CaptureDevice monitor used from UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=222888

        Reviewed by Youenn Fablet .

        Move the device observer infrastructure from the WebKit UserMediaProcessManager to the
        RealtimeMediaSourceCenter.

        * platform/mediastream/CaptureDevice.h:
        (WebCore::haveDevicesChanged):
        * platform/mediastream/RealtimeMediaSourceCenter.cpp:
        (WebCore::RealtimeMediaSourceCenter::RealtimeMediaSourceCenter):
        (WebCore::RealtimeMediaSourceCenter::Observer::~Observer):
        (WebCore::RealtimeMediaSourceCenter::addDevicesChangedObserver):
        (WebCore::RealtimeMediaSourceCenter::removeDevicesChangedObserver):
        (WebCore::RealtimeMediaSourceCenter::captureDevicesChanged):
        (WebCore::RealtimeMediaSourceCenter::triggerDevicesChangedObservers):
        (WebCore::RealtimeMediaSourceCenter::setDevicesChangedObserver): Deleted.
        * platform/mediastream/RealtimeMediaSourceCenter.h:
        (WebCore::RealtimeMediaSourceCenter::Observer::devicesChanged):

2021-04-13  Antoine Quint  <graouts@webkit.org>

        calc() simplification for a multiplication should apply the multiplication to each value of an addition
        https://bugs.webkit.org/show_bug.cgi?id=224376

        Reviewed by Simon Fraser.

        An expression such as calc(0.5 * (100% + 100px)) should be simplified to calc(50% + 50px). We produce
        these types of expressions when blending between a percentage and a dimension, and they can also be
        specified explicitly in style.

        * css/CSSCalculationValue.cpp:
        (WebCore::CSSCalcOperationNode::combineChildren):

2021-04-13  Said Abou-Hallawa  <said@apple.com>

        SVG paced value animations overwrite user-provided keyTimes
        https://bugs.webkit.org/show_bug.cgi?id=109010

        Reviewed by Ryosuke Niwa.

        If the calcMode is Paced, the 'keyTimes' attribute is ignored. Distances
        between the 'values' are used produce an even pace of change across the
        animation.

        When changing calcMode, times defined in the 'keyTimes' attribute should
        be used instead. To fix this, SVGAnimationElement can maintain two lists 
        for keyTimes: (1) keyTimesFromAttribute (2) keyTimesForPaced.
        One of these lists will be picked by a new function 'keyTimes()' based
        on the current calcMode.

        Specs: https://www.w3.org/TR/SVG11/animate.html#CalcModeAttribute

        Test: svg/animations/animate-calcMode-paced-overwrite-key-times.html

        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::parseAttribute):
        (WebCore::SVGAnimationElement::calculateKeyTimesForCalcModePaced):
        (WebCore::SVGAnimationElement::keyTimes const):
        (WebCore::SVGAnimationElement::calculateKeyTimesIndex const):
        (WebCore::SVGAnimationElement::calculatePercentFromKeyPoints const):
        (WebCore::SVGAnimationElement::calculatePercentForFromTo const):
        (WebCore::SVGAnimationElement::currentValuesFromKeyPoints const):
        (WebCore::SVGAnimationElement::currentValuesForValuesAnimation):
        (WebCore::SVGAnimationElement::startedActiveInterval):
        (WebCore::SVGAnimationElement::updateAnimation):
        * svg/SVGAnimationElement.h:

2021-04-12  Ryosuke Niwa  <rniwa@webkit.org>

        TextManipulationController should use weak pointers to Node
        https://bugs.webkit.org/show_bug.cgi?id=215913

        Reviewed by Wenson Hsieh.

        Use WeakHashSet for m_manipulatedTextsWithNewContent, m_textNodesWithNewRenderer, and m_manipulatedNodes.

        Also made TextManipulationController::removeNode take Node& instead of Node*.

        * dom/Node.cpp:
        (WebCore::Node::~Node):
        (WebCore::Node::moveNodeToNewDocument):
        * editing/TextManipulationController.cpp:
        (WebCore::TextManipulationController::observeParagraphs):
        (WebCore::TextManipulationController::didCreateRendererForElement):
        (WebCore::TextManipulationController::didUpdateContentForText):
        (WebCore::TextManipulationController::didCreateRendererForTextNode):
        (WebCore::TextManipulationController::scheduleObservationUpdate):
        (WebCore::TextManipulationController::replace):
        (WebCore::TextManipulationController::removeNode):
        * editing/TextManipulationController.h:

2021-04-12  Don Olmstead  <don.olmstead@sony.com>

        Remove GraphicsContextGLOpenGLPrivate
        https://bugs.webkit.org/show_bug.cgi?id=224446

        Reviewed by Myles C. Maxfield.

        GraphicsContextGLOpenGLPrivate is dead code. It requires AppleWin to turn on WebGL which
        it does not. This removes all references to it.

        * platform/graphics/opengl/GraphicsContextGLOpenGL.h:
        * platform/graphics/opengl/GraphicsContextGLOpenGLES.cpp:
        (WebCore::GraphicsContextGLOpenGL::create): Deleted.
        (WebCore::GraphicsContextGLOpenGL::GraphicsContextGLOpenGL): Deleted.
        (WebCore::GraphicsContextGLOpenGL::~GraphicsContextGLOpenGL): Deleted.
        (WebCore::GraphicsContextGLOpenGL::setContextLostCallback): Deleted.
        (WebCore::GraphicsContextGLOpenGL::setErrorMessageCallback): Deleted.
        (WebCore::GraphicsContextGLOpenGL::makeContextCurrent): Deleted.
        (WebCore::GraphicsContextGLOpenGL::checkGPUStatus): Deleted.
        (WebCore::GraphicsContextGLOpenGL::isGLES2Compliant const): Deleted.
        (WebCore::GraphicsContextGLOpenGL::platformLayer const): Deleted.
        * platform/graphics/opengl/GraphicsContextGLOpenGLPrivate.cpp: Removed.
        * platform/graphics/opengl/GraphicsContextGLOpenGLPrivate.h: Removed.

2021-04-12  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r275793.
        https://bugs.webkit.org/show_bug.cgi?id=224466

        Caused crashes on <http://facebook.com|facebook.com>

        Reverted changeset:

        "calc() simplification for a multiplication should apply the
        multiplication to each value of an addition"
        https://bugs.webkit.org/show_bug.cgi?id=224376
        https://trac.webkit.org/changeset/275793

2021-04-12  Zalan Bujtas  <zalan@apple.com>

        Unreviewed, reverting r275761.

        Caused InlineBox invalidation bugs.

        Reverted changeset:

        "[RenderTreeBuilder] Cleanup the inline box wrappers when
        moving subtrees"
        https://bugs.webkit.org/show_bug.cgi?id=224342
        https://commits.webkit.org/r275761

2021-04-12  BJ Burg  <bburg@apple.com>

        Modernize uses of ConsoleClient
        https://bugs.webkit.org/show_bug.cgi?id=224398

        Reviewed by David Kilzer.

        ConsoleClient acts like a delegate, so its callers
        should be using weak references to it.

        * bindings/js/ScriptCachedFrameData.cpp:
        (WebCore::ScriptCachedFrameData::restore):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::initScriptForWindowProxy):
        * bindings/js/WindowProxy.cpp:
        (WebCore::WindowProxy::setDOMWindow):
        * workers/WorkerOrWorkletScriptController.cpp:
        (WebCore::WorkerOrWorkletScriptController::initScriptWithSubclass):

2021-04-12  Chris Dumez  <cdumez@apple.com>

        webaudio/AudioListener/audiolistener-set-position.html is leaking PannerNodes
        https://bugs.webkit.org/show_bug.cgi?id=224399

        Reviewed by Geoffrey Garen.

        The test was leaking all its nodes and contexts due to several logic issues in our code.

        Tests: webaudio/OfflineAudioContext/offlineaudiocontext-can-only-render-once.html
               webaudio/OfflineAudioContext/offlineaudiocontext-leak-after-rendering-with-nodes.html

        * Modules/webaudio/AudioScheduledSourceNode.cpp:
        (WebCore::AudioScheduledSourceNode::AudioScheduledSourceNode):
        (WebCore::AudioScheduledSourceNode::virtualHasPendingActivity const):
        (WebCore::AudioScheduledSourceNode::finish):
        * Modules/webaudio/AudioScheduledSourceNode.h:
        1. Stop using an ActiveDOMObject::PendingActivity to keep our wrapper alive as this was causing
           a reference cycle. PendingActivity keeps a ref to |this| and this is ref'ing the PendingActivity.
           2 things could break the cycle:
           - finish() gets called but the audio context may go away without finish getting called.
           - didBecomeMarkedForDeletion() gets called. However, it was getting called from
             AudioNode::markNodeForDeletionIfNecessary(). This function would early return if m_normalRefCount
             is not 0. Here m_normalRefCount could NOT be 0, since PendingActity was ref'ing the Node.
        2. Instead of a PendingActivity, we now override ActiveDOMObject::virtualHasPendingActivity() to keep
           the wrapper alive. The behavior is the same since its return true when the state is not finished
           and the node has not been marked for deletion. However, I added a condition to make sure it starts
           returning false as soon as the context is closed. There is also no need to keep the JS wrapper alive
           if there is no 'ended' event listener.

        * Modules/webaudio/BaseAudioContext.cpp:
        (WebCore::BaseAudioContext::lazyInitialize):
        Early return if lazyInitialize() gets called for an audiocontext is closed. Nothing prevents JS from
        creating an AudioNode after the AudioContext is closed. Constructing an AudioNode ends up lazy
        initializing the audio context. In such case, we would already early return in release because if the
        m_isAudioThreadFinished check. However, we would crash in debug because of the m_isAudioThreadFinished
        ASSERT().

        * Modules/webaudio/BaseAudioContext.h:
        Make clear() member function protected so it can get called by OfflineAudioContext when rendering is
        complete.

        * Modules/webaudio/OfflineAudioContext.cpp:
        (WebCore::OfflineAudioContext::uninitialize):
        Stop rejecting the suspend promises when the OfflineAudioContext gets uninitialized. Previously this
        would only happen on navigation so we did not notice the issue. However, the OfflineAudioContext now
        gets uninitialized as soon as it is done rendering and rejecting those promises in this case would
        start causing test failures.

        (WebCore::OfflineAudioContext::didFinishOfflineRendering):
        - Stop clearing the m_didStartOfflineRendering flag when rendering is finished. This flag is called
          [[rendering started]] in the WebAudio specification [1]. As per the specification, it gets set to true
          in startRendering() and never gets reset to false. This means that an offline audio context cannot
          start rendering again once it is done rendering. I have added a layout test for this behavior change
          and verified that this test is passing is both Firefox and Chrome.
          [1] https://webaudio.github.io/web-audio-api/#dom-offlineaudiocontext-startrendering
        - Call uninitialize() and clear() when rendering has finished to clear as much memory as possible as
          soon as we can. This is acceptable because it is no longer possible to start rendering again once
          it's finished. Previously, uninitialize() / clear() would only happen when navigating away and when
          the document would get destroyed.

2021-04-12  Chris Dumez  <cdumez@apple.com>

        OfflineAudioContext with nodes that completed rendering do not get freed until navigating away
        https://bugs.webkit.org/show_bug.cgi?id=224439

        Reviewed by Geoffrey Garen.

        Tests: webaudio/OfflineAudioContext/offlineaudiocontext-can-only-render-once.html
               webaudio/OfflineAudioContext/offlineaudiocontext-leak-after-rendering-with-nodes.html

        * Modules/webaudio/BaseAudioContext.cpp:
        (WebCore::BaseAudioContext::finishedRendering):
        * Modules/webaudio/OfflineAudioContext.cpp:
        (WebCore::OfflineAudioContext::didFinishOfflineRendering):

2021-04-12  Ada Chan  <ada.chan@apple.com>

        Initial implementation of WebChromeClient::enumerateImmersiveXRDevices() and XRDeviceProxy
        https://bugs.webkit.org/show_bug.cgi?id=224353

        Reviewed by Dean Jackson.

        Remove PlatformXRDeviceCocoa as WebKit::XRDeviceProxy will be implementing PlatformXR::Device.
        Implement the encode/decode methods to enable PlatformXR::Device::FrameData to
        be sent over IPC.

        * platform/xr/PlatformXR.h:
        (PlatformXR::Device::trackingAndRenderingClient const):
        (PlatformXR::Device::FrameData::FloatQuaternion::encode const):
        (PlatformXR::Device::FrameData::FloatQuaternion::decode):
        (PlatformXR::Device::FrameData::Pose::encode const):
        (PlatformXR::Device::FrameData::Pose::decode):
        (PlatformXR::Device::FrameData::Fov::encode const):
        (PlatformXR::Device::FrameData::Fov::decode):
        (PlatformXR::Device::FrameData::View::encode const):
        (PlatformXR::Device::FrameData::View::decode):
        (PlatformXR::Device::FrameData::StageParameters::encode const):
        (PlatformXR::Device::FrameData::StageParameters::decode):
        (PlatformXR::Device::FrameData::LayerData::encode const):
        (PlatformXR::Device::FrameData::LayerData::decode):
        (PlatformXR::Device::FrameData::encode const):
        (PlatformXR::Device::FrameData::decode):
        * platform/xr/cocoa/PlatformXRCocoa.h:
        (): Deleted.

2021-04-12  Antoine Quint  <graouts@webkit.org>

        border-image-width computed values should be a calc() value if it contains a percentage
        https://bugs.webkit.org/show_bug.cgi?id=224420

        Reviewed by Simon Fraser.

        When handling calc() values containing a percentage, we must retain the calc() form when creating
        the computed style for border-image-width.

        * css/CSSToStyleMap.cpp:
        (WebCore::CSSToStyleMap::mapNinePieceImageQuad):

2021-04-12  Youenn Fablet  <youenn@apple.com>

        Add support for RTCEncodedFrame metadata
        https://bugs.webkit.org/show_bug.cgi?id=224430

        Reviewed by Eric Carlson.

        Expose metadata given from backend.
        Audio sender side uses a regular TransformableFrameInterface instead of a TransformableAudioFrameInterface.
        Make sure to not call GetHeader() in that case.

        Test: http/wpt/webrtc/metadata-transform.html

        * Modules/mediastream/RTCEncodedAudioFrame.cpp:
        (WebCore::RTCEncodedAudioFrame::timestamp const):
        (WebCore::RTCEncodedAudioFrame::getMetadata):
        * Modules/mediastream/RTCEncodedAudioFrame.h:
        * Modules/mediastream/RTCEncodedAudioFrame.idl:
        * Modules/mediastream/RTCEncodedVideoFrame.cpp:
        (WebCore::RTCEncodedVideoFrame::timestamp const):
        (WebCore::RTCEncodedVideoFrame::getMetadata):
        * Modules/mediastream/RTCEncodedVideoFrame.h:
        * Modules/mediastream/RTCEncodedVideoFrame.idl:
        * Modules/mediastream/RTCRtpTransformableFrame.h:
        * Modules/mediastream/libwebrtc/LibWebRTCRtpTransformBackend.cpp:
        (WebCore::LibWebRTCRtpTransformBackend::Transform):
        * Modules/mediastream/libwebrtc/LibWebRTCRtpTransformableFrame.cpp:
        (WebCore::LibWebRTCRtpTransformableFrame::LibWebRTCRtpTransformableFrame):
        (WebCore::LibWebRTCRtpTransformableFrame::timestamp const):
        (WebCore::LibWebRTCRtpTransformableFrame::audioMetadata const):
        (WebCore::LibWebRTCRtpTransformableFrame::videoMetadata const):
        * Modules/mediastream/libwebrtc/LibWebRTCRtpTransformableFrame.h:

2021-04-12  Sam Weinig  <weinig@apple.com>

        Remove unused 'DefaultDefineOwnProperty' extended attribute support 
        https://bugs.webkit.org/show_bug.cgi?id=224436

        Reviewed by Antti Koivisto.

        The old CSSStyleDeclaration named-getter based implementation was
        the last user so this can now be removed.

        * bindings/scripts/CodeGeneratorJS.pm:
        (InstanceOverridesDefineOwnProperty):
        * bindings/scripts/IDLAttributes.json:

2021-04-12  Philippe Normand  <pnormand@igalia.com>

        [GStreamer][WebRTC] An audio track should be muted when capture is interrupted by the OS.
        https://bugs.webkit.org/show_bug.cgi?id=196606

        Reviewed by Xabier Rodriguez-Calvar.

        Add basic interruption support in the audio capture source and mock audio capture source.

        * platform/mediastream/gstreamer/GStreamerAudioCaptureSource.cpp:
        (WebCore::GStreamerAudioCaptureSource::interrupted const):
        (WebCore::GStreamerAudioCaptureSource::setInterruptedForTesting):
        * platform/mediastream/gstreamer/GStreamerAudioCaptureSource.h:
        * platform/mediastream/gstreamer/GStreamerCapturer.cpp:
        (WebCore::GStreamerCapturer::setupPipeline):
        (WebCore::GStreamerCapturer::interrupted const):
        (WebCore::GStreamerCapturer::setInterrupted):
        * platform/mediastream/gstreamer/GStreamerCapturer.h:
        * platform/mediastream/gstreamer/MockRealtimeAudioSourceGStreamer.cpp:
        (WebCore::MockRealtimeAudioSourceGStreamer::setInterruptedForTesting):
        * platform/mediastream/gstreamer/MockRealtimeAudioSourceGStreamer.h:

2021-04-12  Sam Weinig  <weinig@apple.com>

        Update color-contrast() to support a target contrast ratio
        https://bugs.webkit.org/show_bug.cgi?id=224411

        Reviewed by Antti Koivisto.

        Updated fast/css/parsing-color-contrast.html with new test cases.

        * css/CSSValueKeywords.in:
        Add new keywords, AA and AA-large which are constants for contrast ratios of 4.5
        and 3.0 respectively.

        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::parseColorFunctionParameters):
        Remove now incorrect comment about adding support for fallback as fallback
        has been removed from the spec. 
        
        (WebCore::CSSPropertyParserHelpers::selectFirstColorThatMeetsOrExceedsTargetContrast):
        (WebCore::CSSPropertyParserHelpers::selectFirstColorWithHighestContrast):
        (WebCore::CSSPropertyParserHelpers::parseColorContrastFunctionParameters):
        Add support for the new optional target contrast ratio in color-contrast() that was
        recently added to CSS Color 5.

2021-04-12  Antti Koivisto  <antti@apple.com>

        Descendant style relations are sometimes reset when they shouldn't
        https://bugs.webkit.org/show_bug.cgi?id=224431
        rdar://76267783

        Reviewed by Sam Weinig.
        
        Some style relations computed during resolution of descendants are set on a parent element.
        The parent element shouldn't reset them unless we are actually also computing the descendants.

        Test: fast/css/first-letter-style-relation-crash.html

        * dom/Element.cpp:
        (WebCore::Element::resetStyleRelations):
        (WebCore::Element::resetChildStyleRelations):
        (WebCore::Element::resetAllDescendantStyleRelations):
        
        Split resetStyleRelations into separate parts.
        
        * dom/Element.h:
        (WebCore::Element::styleAffectedByEmpty const):
        (WebCore::Element::childrenAffectedByForwardPositionalRules const):
        (WebCore::Element::descendantsAffectedByForwardPositionalRules const):
        (WebCore::Element::childrenAffectedByBackwardPositionalRules const):
        (WebCore::Element::descendantsAffectedByBackwardPositionalRules const):
        (WebCore::Element::childrenAffectedByPropertyBasedBackwardPositionalRules const):
        (WebCore::Element::setStyleAffectedByEmpty):
        (WebCore::Element::setChildrenAffectedByForwardPositionalRules):
        (WebCore::Element::setDescendantsAffectedByForwardPositionalRules):
        (WebCore::Element::setChildrenAffectedByBackwardPositionalRules):
        (WebCore::Element::setDescendantsAffectedByBackwardPositionalRules):
        (WebCore::Element::setChildrenAffectedByPropertyBasedBackwardPositionalRules):
        * dom/ElementRareData.h:
        (WebCore::ElementRareData::resetStyleRelations): Deleted.
        * dom/Node.h:
        (WebCore::Node::StyleBitfields::clearFlags):
        (WebCore::Node::clearStyleFlags):
        (WebCore::Node::StyleBitfields::dynamicStyleRelations const): Deleted.
        (WebCore::Node::StyleBitfields::setDynamicStyleRelation): Deleted.
        (WebCore::Node::StyleBitfields::clearDynamicStyleRelations): Deleted.
        (WebCore::Node::hasDynamicStyleRelationFlag const): Deleted.
        (WebCore::Node::setDynamicStyleRelationFlag): Deleted.
        
        Remove the meaningless DynamicStyleRelation concept and merge these flags with the others.
        
        * style/StyleTreeResolver.cpp:
        (WebCore::Style::TreeResolver::resolveElement):
        (WebCore::Style::TreeResolver::resolveComposedTree):
        
        Only clear the descendant or child style relation bits if we are actually re-resolving
        descendants or children.

2021-04-12  Rob Buis  <rbuis@igalia.com>

        Clamp overridingContentLogicalWidth/Height to zero
        https://bugs.webkit.org/show_bug.cgi?id=224310

        Reviewed by Sergio Villar Senin.

        Clamp overridingContentLogicalWidth/Height to zero.

        Test: fast/css-grid-layout/negative-overriding-content-logical-height-crash.html

        * rendering/RenderBox.h:
        (WebCore::RenderBox::overridingContentLogicalWidth const):
        (WebCore::RenderBox::overridingContentLogicalHeight const):

2021-04-12  Philippe Normand  <pnormand@igalia.com>

        [MSE][GStreamer] Crash in WebCore::PlaybackPipeline::addSourceBuffer when setting duration and preload is set to none
        https://bugs.webkit.org/show_bug.cgi?id=224260

        Reviewed by Xabier Rodriguez-Calvar.

        Disable delayed loading for the GStreamer MSE player, we want the MSE source element to be
        configured ASAP, otherwise the playback pipeline will fail in various ways (duration
        notifications sent too early, crashes in addSourceBuffer, crashes in attachTracks, and so
        on).

        Test: media/media-source/media-source-no-preload-set-duration-crash.html

        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:
        (WebCore::MediaPlayerPrivateGStreamerMSE::durationChanged):

2021-04-12  Youenn Fablet  <youenn@apple.com>

        Make sure all frames get transformed when overriding a transform with another one
        https://bugs.webkit.org/show_bug.cgi?id=224367

        Reviewed by Eric Carlson.

        We were previously removing the old transform, then attaching the new transforn.
        There was a time where no transform was attached and a few samples could get missed.
        To prevent this, we add a new code path where we transfer a backend from one transform to another.
        In that case, we synchronoulsy change the input callback from the old one to the new one instead of setting it to null in between.

        Test: http/wpt/webrtc/change-encoded-transform.html

        * Modules/mediastream/RTCRtpReceiver.cpp:
        (WebCore::RTCRtpReceiver::setTransform):
        * Modules/mediastream/RTCRtpReceiver.h:
        * Modules/mediastream/RTCRtpReceiverBackend.h:
        * Modules/mediastream/RTCRtpScriptTransform.cpp:
        (WebCore::RTCRtpScriptTransform::~RTCRtpScriptTransform):
        (WebCore::RTCRtpScriptTransform::willClearBackend):
        (WebCore::RTCRtpScriptTransform::clear):
        * Modules/mediastream/RTCRtpScriptTransform.h:
        * Modules/mediastream/RTCRtpScriptTransformer.cpp:
        (WebCore::RTCRtpScriptTransformer::clear):
        * Modules/mediastream/RTCRtpScriptTransformer.h:
        * Modules/mediastream/RTCRtpSender.cpp:
        (WebCore::RTCRtpSender::setTransform):
        * Modules/mediastream/RTCRtpSender.h:
        * Modules/mediastream/RTCRtpSenderBackend.h:
        * Modules/mediastream/RTCRtpTransform.cpp:
        (WebCore::RTCRtpTransform::from):
        (WebCore::RTCRtpTransform::attachToReceiver):
        (WebCore::RTCRtpTransform::attachToSender):
        (WebCore::RTCRtpTransform::backendTransferedToNewTransform):
        * Modules/mediastream/RTCRtpTransform.h:
        (WebCore::RTCRtpTransform::takeBackend):
        * Modules/mediastream/libwebrtc/LibWebRTCRtpReceiverBackend.cpp:
        (WebCore::LibWebRTCRtpReceiverBackend::rtcRtpTransformBackend):
        * Modules/mediastream/libwebrtc/LibWebRTCRtpReceiverBackend.h:
        * Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.cpp:
        (WebCore::LibWebRTCRtpSenderBackend::LibWebRTCRtpSenderBackend):
        (WebCore::LibWebRTCRtpSenderBackend::rtcRtpTransformBackend):
        * Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.h:

2021-04-12  Frédéric Wang  <fwang@igalia.com>

        Out of memory crash with find('a'.repeat(2**30))
        https://bugs.webkit.org/show_bug.cgi?id=223787

        Reviewed by Ryosuke Niwa.

        SearchBuffer::SearchBuffer allocates a buffer whose capacity is at least 8 times the size of
        the searched text and at least 8192. It's possible to hit an out-of-memory crash by passing
        a very long string to window.find. Since there is no reason to search for arbitrary large
        text, limit it to a maximum length of 64kB.

        Test: editing/find/find-long-string-crash.html

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::find const): Exit early if the string length is larger than a limit.

2021-04-12  Chris Lord  <clord@igalia.com>

        Refactor font loading to make it possible for Worker to implement it
        https://bugs.webkit.org/show_bug.cgi?id=224277

        Reviewed by Darin Adler.

        Introduce FontLoadRequest and FontLoadRequestClient as an abstraction
        separate from CachedFont and CachedFontClient to allow for separate
        implementations. Also move Document-specific font-loading behaviour
        from CSSFontSelector into Document and add non-Document specific
        accessors to ScriptExecutionContext.

        These changes should allow for custom font loading to be implementable
        on a Worker, which will be necessary for FontFace support in
        OffscreenCanvas.

        No new tests, no change in behavior.

        * Headers.cmake: Added FontLoadRequest.h, CachedFontLoadRequest.h
          and DocumentFontLoader.h.
        * Sources.txt: Added DocumentFontLoader.cpp.
        * WebCore.xcodeproj/project.pbxproj: Added files listed above.

        * css/CSSFontFace.cpp: Update to not require Document for custom font loading.
        (WebCore::CSSFontFace::appendSources):

        * css/CSSFontFaceSource.cpp: Update to use FontLoadRequest instead of CachedFont.
        (WebCore::CSSFontFaceSource::CSSFontFaceSource):
        (WebCore::CSSFontFaceSource::~CSSFontFaceSource):
        (WebCore::CSSFontFaceSource::opportunisticallyStartFontDataURLLoading):
        (WebCore::CSSFontFaceSource::fontLoaded):
        (WebCore::CSSFontFaceSource::load):
        (WebCore::CSSFontFaceSource::font):
        (WebCore::CSSFontFaceSource::isSVGFontFaceSource const):
        * css/CSSFontFaceSource.h:

        * css/CSSFontFaceSrcValue.cpp: Update to use FontLoadRequest and
          ScriptExecutionContext instead of CachedResourceLoader.
        (WebCore::CSSFontFaceSrcValue::fontLoadRequest):
        * css/CSSFontFaceSrcValue.h:

        * css/CSSFontSelector.cpp: Remove Document-specific code.
        (WebCore::CSSFontSelector::CSSFontSelector):
        (WebCore::CSSFontSelector::~CSSFontSelector):
        (WebCore::CSSFontSelector::clearFonts):
        * css/CSSFontSelector.h:

        * dom/Document.cpp: Implement ScriptExecutionContext::fontLoadRequest
          and ::beginLoadingFontSoon.
        (WebCore::Document::~Document):
        (WebCore::Document::removedLastRef):
        (WebCore::Document::resolveStyle):
        (WebCore::Document::suspendFontLoading):
        (WebCore::Document::fontLoadRequest):
        (WebCore::Document::beginLoadingFontSoon):
        (WebCore::Document::suspend):
        (WebCore::Document::resume):
        * dom/Document.h:

        * dom/DocumentFontLoader.cpp: Added. New class to handle Document-specific
          font-loading code that was previously in CSSFontSelector and
          CSSFontFaceSrcValue.
        (WebCore::DocumentFontLoader::DocumentFontLoader):
        (WebCore::DocumentFontLoader::~DocumentFontLoader):
        (WebCore::DocumentFontLoader::cachedFont):
        (WebCore::DocumentFontLoader::beginLoadingFontSoon):
        (WebCore::DocumentFontLoader::loadPendingFonts):
        (WebCore::DocumentFontLoader::fontLoadingTimerFired):
        (WebCore::DocumentFontLoader::stopLoadingAndClearFonts):
        (WebCore::DocumentFontLoader::suspendFontLoading):
        (WebCore::DocumentFontLoader::resumeFontLoading):
        * dom/DocumentFontLoader.h:

        * dom/ScriptExecutionContext.cpp: Add functions to initiate font load requests.
        (WebCore::ScriptExecutionContext::fontLoadRequest):
        * dom/ScriptExecutionContext.h:
        (WebCore::ScriptExecutionContext::beginLoadingFontSoon):

        * loader/DocumentLoader.cpp: CSSFontSelector::suspendFontLoadingTimer
          is now Document::suspendFontLoading.
        (WebCore::DocumentLoader::stopLoading):

        * loader/FontLoadRequest.h: Added. An interface to manage font loading
          that abstracts some of the behaviour of CachedResource, CachedFont and
          CachedFontClient.
        (WebCore::FontLoadRequestClient::fontLoaded):
        (WebCore::FontLoadRequestClient::isCachedFontLoadRequest const):

        * loader/cache/CachedFontLoadRequest.h: Added. An implementation of
          FontLoadRequest for CachedFont.

        * workers/WorkerGlobalScope.cpp: Remove now-redundant CSSFontSelector call.
        (WebCore::WorkerGlobalScope::~WorkerGlobalScope):

2021-04-12  Adrian Perez de Castro  <aperez@igalia.com>

        [WPE][GTK] Use g_object_notify_by_pspec() whenever possible
        https://bugs.webkit.org/show_bug.cgi?id=224366

        Reviewed by Carlos Garcia Campos.

        Keep a static array with the GParamSpec pointer for each property, and trigger
        property change notifications using g_object_notify_by_pspec() to avoid looking
        up by its name each time.

        No new tests needed.

        * platform/graphics/gstreamer/TextCombinerPadGStreamer.cpp:
        (webkit_text_combiner_pad_class_init):

2021-04-12  Youenn Fablet  <youenn@apple.com>

        Use DestructionThread::Main for RTCRtpScriptTransform
        https://bugs.webkit.org/show_bug.cgi?id=224368
        <rdar://76404727>

        Reviewed by Eric Carlson.

        It is safer to make it DestructionThread::Main to guarantee it is destroyed in main thread.

        * Modules/mediastream/RTCRtpScriptTransform.h:

2021-04-11  Cameron McCormack  <heycam@apple.com>

        Fix initial horizontal scrollbar position when vertical scrollbar is on the left.
        https://bugs.webkit.org/show_bug.cgi?id=224409

        Reviewed by Darin Adler.

        Scrollable elements that place their vertical scrollbar on the left
        (e.g. when they're `direction: rtl` or when the OS language is RTL and
        the relevant setting to always follow OS scrollbar side is used) have
        an incorrect scroll origin, which leads to creating a horizontal
        scrollbar with an incorrect initial offset.  This is because
        RenderLayerScrollableArea::computeScrollDimensions runs prior to the
        scrollbars being created.  So whenever we start or stop having a
        (non-overlay) vertical scrollbar on the left, we need to recompute
        the scroll origin and fix up the horizontal scrollbar's offset.

        Tests: fast/scrolling/rtl-scrollbars-initial-position-dynamic.html
               fast/scrolling/rtl-scrollbars-initial-position.html

        * rendering/RenderLayerScrollableArea.cpp:
        (WebCore::RenderLayerScrollableArea::computeScrollDimensions):
        (WebCore::RenderLayerScrollableArea::computeScrollOrigin): Split this
        out of computeScrollDimensions so we can call it from
        updateScrollbarsAfterLayout and updateScrollbarsAfterStyleChange, and
        have it ask the horizontal scrollbar to update its offset.  We could
        condition this on the scroll origin actually having changed, but
        that's going to be a similar check that Scrollbar::offsetDidChange
        does to ensure the offset value did indeed change.  We don't want to
        condition this on shouldPlaceBlockDirectionScrollbarOnLeft(), since
        that's dependent on the current style, and we may be reacting to a
        style change removed the vertical scrollbar on the left.
        (WebCore::RenderLayerScrollableArea::updateScrollbarsAfterLayout):
        (WebCore::RenderLayerScrollableArea::updateScrollbarsAfterStyleChange):
        * rendering/RenderLayerScrollableArea.h:

2021-04-11  Darin Adler  <darin@apple.com>

        [Mac] Add a missing null check to slider thumb focus rendering
        https://bugs.webkit.org/show_bug.cgi?id=224418
        rdar://76450584

        Reviewed by Sam Weinig.

        * rendering/RenderThemeMac.h: Changed updateFocusedState to take a pointer.
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::updateFocusedState): Check pointer for null. This was the
        missing null check.
        (WebCore::RenderThemeMac::paintSliderThumb): Pass delegate pointer instead of reference.
        Also made sure we always update the focused state. Old code took the approach of just not
        updating focus state when it encountered null for the focus delegate, but that's not a
        good strategy. In future we may also want to change the focusDelegate function signature
        to make it clear it will never return null, but that's not critical right now.
        (WebCore::RenderThemeMac::setSearchCellState): Update since updateFocusedState now
        takes a pointer.

2021-04-11  Sam Weinig  <weinig@apple.com>

        Reduce compile time and binary size cost of enabling proper CSSStyleDeclaration property access behavior
        https://bugs.webkit.org/show_bug.cgi?id=222518
        <rdar://problem/75136887>

        Reviewed by Darin Adler.

        Re-implement proper (not using named-getters) support for the CSSStyleDeclaration bindings
        using a new DelegateToSharedSyntheticAttribute extended atttribute which allows IDL attributes
        to share a custom getter / setter implementation and delegate their implementation to it. When
        using this functionality, the synthetic attribute's implementation is passed the original property
        name so it can implement functionality based on it.

        We use this for CSSStyleDeclaration by breaking the huge list of generated properties into
        four groups, each with their own synthetic attribute. The groups are based on the different
        transformation rules in the spec.

        * bindings/js/JSDOMAttribute.h:
        (WebCore::IDLAttribute::setPassingPropertyName):
        (WebCore::IDLAttribute::getPassingPropertyName):
        Add overloads of get/set that pass the property name to the provided function. These can't
        be simple overloads of get/set as MSVC does not allow overloading with only a non-type 
        template parameters differentiating.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateInterface):
        Eagerly generate the any synthetic attributes before the rest of code generation,
        matching the behavior of other synthetic constructions like map/set/stringifiers.

        (GetAttributeGetterName):
        (GetAttributeSetterName):
        Add special cases to getter/setter name generation to forward to the generated
        name of the synthetic attribute when delegating.

        (GenerateImplementation):
        Extract attribute function forward declaration genation into a new GenerateAttributeGetterAndSetterDeclaration
        subroutine and use it for generation of both normal and synthetic attributes. Also adds
        synthetic attributes to the list of attributes to generate function implementations for.

        (GenerateAttributeGetterAndSetterDeclaration):
        Extracted from GenerateImplementation. Adds extra condition to bail if DelegateToSharedSyntheticAttribute
        is specified.

        (GenerateAttributeGetterBodyDefinition):
        Add support for the new CallWith=PropertyName extended attribute by adding a PropertyName
        argument to the signature of getter body if it is present. Removes now unnecessary support
        for the CSSProperty extended attribute.

        (GenerateAttributeGetterTrampolineDefinition):
        Switch function name from get to getPassingPropertyName if CallWith=PropertyName is specified.

        (GenerateAttributeGetterDefinition):
        Adds extra condition to bail if DelegateToSharedSyntheticAttribute is specified.

        (GenerateAttributeSetterBodyDefinition):
        Add support for the new CallWith=PropertyName extended attribute by adding a PropertyName
        argument to the signature of getter body if it is present. Removes now unnecessary support
        for the CSSProperty extended attribute.

        (GenerateAttributeSetterTrampolineDefinition):
        Switch function name from get to getPassingPropertyName if CallWith=PropertyName is specified.

        (GenerateAttributeSetterDefinition):
        Adds extra condition to bail if DelegateToSharedSyntheticAttribute is specified.

        (GenerateCallWith):
        Add support for the PropertyName value to CallWith.

        (MakeSharedSyntheticAttribute):
        Helper to generate the synthetic attribute from the base attribute with DelegateToSharedSyntheticAttribute
        specefied. Maintains all existing extended attributes of the base attribute except 
        DelegateToSharedSyntheticAttribute is replaced with IsSharedSyntheticAttribute to avoid 
        infinite recursion.

        (AddSharedSyntheticAttributesIfNeeded):
        Helper to find all delegating attributes and generate / store the synthetic attributes.

        (GetSharedSyntheticAttribute):
        Helper to get the corresponding synthetic attribute given an attribute with 
        DelegateToSharedSyntheticAttribute specified on it.

        * bindings/scripts/IDLAttributes.json:
        Removes CSSProperty. Adds DelegateToSharedSyntheticAttribute. Adds PropertyName value to 
        CallWith and SetterCallWith.

        * css/CSSStyleDeclaration.cpp:
        (WebCore::lookupCSSPropertyFromIDLAttribute):
        (WebCore::CSSStyleDeclaration::propertyValueForCamelCasedIDLAttribute):
        (WebCore::CSSStyleDeclaration::setPropertyValueForCamelCasedIDLAttribute):
        (WebCore::CSSStyleDeclaration::propertyValueForWebKitCasedIDLAttribute):
        (WebCore::CSSStyleDeclaration::setPropertyValueForWebKitCasedIDLAttribute):
        (WebCore::CSSStyleDeclaration::propertyValueForDashedIDLAttribute):
        (WebCore::CSSStyleDeclaration::setPropertyValueForDashedIDLAttribute):
        (WebCore::CSSStyleDeclaration::propertyValueForEpubCasedIDLAttribute):
        (WebCore::CSSStyleDeclaration::setPropertyValueForEpubCasedIDLAttribute):
        (WebCore::CSSStyleDeclaration::namedItem): Deleted.
        (WebCore::CSSStyleDeclaration::setNamedItem): Deleted.
        (WebCore::CSSStyleDeclaration::supportedPropertyNames const): Deleted.
        * css/CSSStyleDeclaration.h:
        Replace named-getter based implementation with helpers based on the definitions
        in the CSSOM spec (plus one special set for 'epub' specializations we currently
        maintain).

        * css/CSSStyleDeclaration.idl:
        Remove !ENABLE_ATTRIBUTE_BASED_PROPERTIES_FOR_CSS_STYLE_DECLARATION sections now that
        we can fully support ENABLE_ATTRIBUTE_BASED_PROPERTIES_FOR_CSS_STYLE_DECLARATION.

        * css/makeprop.pl:
        Remove !ENABLE_ATTRIBUTE_BASED_PROPERTIES_FOR_CSS_STYLE_DECLARATION sections now that
        we can fully support ENABLE_ATTRIBUTE_BASED_PROPERTIES_FOR_CSS_STYLE_DECLARATION.
        Replaces CSSProperty extended attributes with DelegateToSharedSyntheticAttribute and 
        CallWith=PropertyName, which together allow us to implement all the attributes with just
        8 implementation functions.

        * bindings/scripts/test/BindingTestGlobalConstructors.idl:
        * bindings/scripts/test/JS/JSTestCSSProperty.cpp: Removed.
        * bindings/scripts/test/JS/JSTestCSSProperty.h: Removed.
        * bindings/scripts/test/JS/JSTestDelegateToSharedSyntheticAttribute.cpp: Added.
        * bindings/scripts/test/JS/JSTestDelegateToSharedSyntheticAttribute.h: Added.
        * bindings/scripts/test/JS/JSTestGlobalObject.cpp:
        * bindings/scripts/test/SupplementalDependencies.dep:
        * bindings/scripts/test/TestCSSProperty.idl: Removed.
        * bindings/scripts/test/TestDelegateToSharedSyntheticAttribute.idl: Added.
        Replace CSSProperty tests with DelegateToSharedSyntheticAttribute tests and update results
        all around for new generation.

2021-04-11  Rob Buis  <rbuis@igalia.com>

        Store InputType in a Ref before calling setValueAsDecimal
        https://bugs.webkit.org/show_bug.cgi?id=223535

        Reviewed by Ryosuke Niwa.

        Store InputType in a Ref before calling setValueAsDecimal.

        * html/InputType.cpp:
        (WebCore::InputType::applyStep):

2021-04-10  Chris Dumez  <cdumez@apple.com>

        Regression(r275668) Potential null pointer deref in AudioParam::exponentialRampToValueAtTime(float, double)
        https://bugs.webkit.org/show_bug.cgi?id=224400
        <rdar://76450376>

        Reviewed by Ryosuke Niwa.

        In r275668, I added null-checks for the AudioContext in AudioParam, now that it holds a WeakPtr to its
        context. However, I missed a null-check in AudioParam::exponentialRampToValueAtTime(). This patch adds
        the missing check.

        Test: webaudio/AudioParam/audioparam-exponentialRampToValueAtTime-nocontext-crash.html

        * Modules/webaudio/AudioParam.cpp:

2021-04-10  Chris Dumez  <cdumez@apple.com>

        [ macOS ] 3 webaudio/OfflineAudioContext/ layout-tests are flakey text failures
        https://bugs.webkit.org/show_bug.cgi?id=224387
        <rdar://problem/76468058>

        Reviewed by Eric Carlson.

        Replace internals.numberOfBaseAudioContexts() test infrastructure with
        internals.baseAudioContextIdentifier() & internals.isBaseAudioContextAlive().
        This allows tests to check if specific BaseAudioContext instances created by the
        tests are actually alive. As a result, the tests are no longer impacted by tests
        running before them (and potentially leaking, see Bug 224399) or in parallel to
        them in the same process.

        This is the same approach we used for leak testing Documents (internals.documentIdentifier()
        & internals.isDocumentAlive()).

        * Modules/webaudio/BaseAudioContext.cpp:
        (WebCore::generateAudioContextID):
        (WebCore::liveAudioContexts):
        (WebCore::BaseAudioContext::BaseAudioContext):
        (WebCore::BaseAudioContext::~BaseAudioContext):
        (WebCore::BaseAudioContext::isContextAlive):
        * Modules/webaudio/BaseAudioContext.h:
        (WebCore::BaseAudioContext::contextID const):
        * testing/Internals.cpp:
        (WebCore::Internals::countMatchesForText):
        (WebCore::Internals::baseAudioContextIdentifier):
        (WebCore::Internals::isBaseAudioContextAlive):
        * testing/Internals.h:
        * testing/Internals.idl:

2021-04-10  Mark Lam  <mark.lam@apple.com>

        Enable VMTraps checks in RETURN_IF_EXCEPTION.
        https://bugs.webkit.org/show_bug.cgi?id=224078
        rdar://75037057

        Reviewed by Keith Miller.

        1. Add DeferTermination in WorkerOrWorkletScriptController::initScript().
           This allows us to avoid having to make all exception checking in
           WorkerOrWorkletScriptController::initScript() very thorough and complete.
           Currently, they aren't.

        2. Fix WorkerOrWorkletScriptController::evaluate() to handle the TerminationException.

        3. Fix JSEventListener::handleEvent() to handle the TerminationException correctly.
           Previously, in one case, it was checking scope.exception() for the exception,
           but the exception has already been taken out of there.

        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent):
        * workers/WorkerOrWorkletScriptController.cpp:
        (WebCore::WorkerOrWorkletScriptController::evaluate):
        (WebCore::WorkerOrWorkletScriptController::initScript):

2021-04-10  Zalan Bujtas  <zalan@apple.com>

        RenderFlexibleBox::m_hasDefiniteHeight should not need to be mutable
        https://bugs.webkit.org/show_bug.cgi?id=224404

        Reviewed by Antti Koivisto.

        Let's just fix constness instead.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::childIntrinsicLogicalWidth):
        (WebCore::RenderFlexibleBox::crossAxisIntrinsicExtentForChild):
        (WebCore::RenderFlexibleBox::useChildAspectRatio):
        (WebCore::RenderFlexibleBox::childMainSizeIsDefinite):
        (WebCore::RenderFlexibleBox::childCrossSizeIsDefinite):
        (WebCore::RenderFlexibleBox::childHasIntrinsicMainAxisSize):
        (WebCore::RenderFlexibleBox::childIntrinsicLogicalWidth const): Deleted.
        (WebCore::RenderFlexibleBox::crossAxisIntrinsicExtentForChild const): Deleted.
        (WebCore::RenderFlexibleBox::useChildAspectRatio const): Deleted.
        (WebCore::RenderFlexibleBox::childMainSizeIsDefinite const): Deleted.
        (WebCore::RenderFlexibleBox::childCrossSizeIsDefinite const): Deleted.
        (WebCore::RenderFlexibleBox::childHasIntrinsicMainAxisSize const): Deleted.
        * rendering/RenderFlexibleBox.h:

2021-04-09  Antoine Quint  <graouts@webkit.org>

        calc() simplification for a multiplication should apply the multiplication to each value of an addition
        https://bugs.webkit.org/show_bug.cgi?id=224376

        Reviewed by Simon Fraser.

        An expression such as calc(0.5 * (100% + 100px)) should be simplified to calc(50% + 50px). We produce
        these types of expressions when blending between a percentage and a dimension, and they can also be
        specified explicitly in style.

        * css/CSSCalculationValue.cpp:
        (WebCore::CSSCalcOperationNode::combineChildren):

2021-04-09  Simon Fraser  <simon.fraser@apple.com>

        scrollingTreeNodeDidScroll() should just trigger a rendering udpate
        https://bugs.webkit.org/show_bug.cgi?id=224394

        Reviewed by Tim Horton.

        After handling wheel events on the scrolling thread,
        ThreadedScrollingTree::scrollingTreeNodeDidScroll() appends to a queue of pending updates
        and then triggers applyPendingScrollUpdates() on the main thread to process those updates.
        However, every rendering update also processes pending scroll updates via
        synchronizeStateFromScrollingTree(), so it's simpler if we just trigger a rendering update.

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::scrollingThreadAddedPendingUpdate):
        (WebCore::AsyncScrollingCoordinator::scheduleRenderingUpdate):
        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ThreadedScrollingTree.cpp:
        (WebCore::ThreadedScrollingTree::scrollingTreeNodeDidScroll):
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::scheduleTreeStateCommit):
        * page/scrolling/nicosia/ScrollingCoordinatorNicosia.cpp:
        (WebCore::ScrollingCoordinatorNicosia::scheduleTreeStateCommit):

2021-04-09  Jean-Yves Avenard  <jya@apple.com>

        Media Session action should default to the MediaElement's default when no MediaSession handler are set
        https://bugs.webkit.org/show_bug.cgi?id=224278
        <rdar://problem/76339841>

        Reviewed by Youenn Fablet .

        When a media session doesn't explicitly define an action handler, we use the media element
        default action of the same type.
        Media Session doesn't track a particular media element, instead it loosely defines a guessed playback state
        that tracks if some element in the current document is playing and not muted or otherwise paused.
        (see https://w3c.github.io/mediasession/#playback-state-model)
        We therefore need to determine what is currently the most suitable media element available in this document.
        Unlike the Media Controller and the Now Playing policy that will only ever select a media
        if it is currently playing and not muted, for the Media Session we may have to interact with paused media elements.
        For this we add a new PlaybackControlsPurpose named MediaSession defining new search criterias.
        A media element will be up for selection if it's playable (according to autoplay policy). From then,
        the best element will be selected accoring to its visibility, its size, if it's beeing played previously and
        the last time it was interacted with.

        Test: media/media-session/default-actionHandlers.html

        * Modules/mediasession/MediaSession.cpp:
        (WebCore::platformCommandForMediaSessionAction): New convenience method to convert one datatype into another.
        (WebCore::MediaSession::callActionHandler): Use user defined handler if present or run the related action on
        the most suitable media element
        (WebCore::MediaSession::activeMediaElement const): Determine the currently active media element in the current
        Media Session's document.
        * Modules/mediasession/MediaSession.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::mediaElementSessionInfoForSession): Add new hasEverNotifiedAboutPlaying member.
        (WebCore::preferMediaControlsForCandidateSessionOverOtherCandidateSession): Amend sorting algorithm to cater
        for the MediaSession criterias described above.
        (WebCore::mediaSessionMayBeConfusedWithMainContent): When using MediaSession purpose, there is no possible
        ambiguity, amend as such.
        (WebCore::HTMLMediaElement::bestMediaElementForRemoteControls): Renamed from bestMediaElementForShowingPlaybackControlsManager
        method to better match how the method is actually used.
        * html/HTMLMediaElement.h:
        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::canShowControlsManager const): Amend for new Media Session criterias.
        (WebCore::MediaElementSession::didReceiveRemoteControlCommand): Always let MediaSession manage the actions handling.
        * html/MediaElementSession.h:
        * page/Page.cpp: 
        (WebCore::Page::playbackControlsManagerUpdateTimerFired): amend following method rename.
        * platform/audio/cocoa/MediaSessionManagerCocoa.mm:
        (WebCore::MediaSessionManagerCocoa::nowPlayingEligibleSession): amend following method rename.
        * testing/Internals.cpp:
        (WebCore::Internals::bestMediaElementForRemoteControls): Renamed from bestMediaElementForShowingPlaybackControlsManager as above.
        (WebCore::Internals::sendMediaSessionAction): amend following method rename.
        * testing/Internals.h: Rename method
        * testing/Internals.idl: Rename method

2021-04-09  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Cairo][GPUP] GraphicsContextGLOpenGL::paintToCanvas can't paint into a remote canvas
        https://bugs.webkit.org/show_bug.cgi?id=224271

        Reviewed by Don Olmstead.

        WebGL canvas tests were failing for WinCairo port since r274327
        enabled GPU process for canvas rendering. In the current
        implementation of WebKitTestRunner, 2D canvases are in GPU
        process, while WebGL canvases are in WebContent process. Remote
        canvases in GPU process failed to drawImage() with a WebGL canvas
        what is in WebContent process.

        GraphicsContextGLOpenGL::paintToCanvas of Cairo port was painting
        directly into PlatformContextCairo. It also should use
        GraphicsContext::drawNativeImage as well as CG port does.

        * platform/graphics/cairo/GraphicsContextGLCairo.cpp:
        (WebCore::GraphicsContextGLOpenGL::paintToCanvas):

2021-04-09  Jer Noble  <jer.noble@apple.com>

        WTF SoftLinking macros can cause collisions with their target functions
        https://bugs.webkit.org/show_bug.cgi?id=224379
        <rdar://76434202>

        Reviewed by Eric Carlson.

        Don't include the SoftLinkLibxslt.h file in the .cpp file.

        * xml/SoftLinkLibxslt.cpp:
        * xml/SoftLinkLibxslt.h:

2021-04-09  Ziran Sun  <zsun@igalia.com>

        [css-grid] Set hasIntrinsicWidth & hasIntrinsicHeight properties for SVG element's intrinsic size
        https://bugs.webkit.org/show_bug.cgi?id=223504

        Reviewed by Javier Fernandez.

        In RenderReplaced::computeReplacedLogicalWidth/RenderReplaced::computeReplacedLogicalHeight(),
        hasIntrinsicWidth and hasIntrinsicHeight are decided by whether the value is bigger than 0.
        This is not alway true. The SVG element sets its hasIntrinsicWidth/hasIntrinsicHeight property
        in line with its lengthType(). This change adds checks for SVG element cases specifically.

        * platform/graphics/FloatSize.h:
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::computeReplacedLogicalWidth const):
        (WebCore::RenderReplaced::computeReplacedLogicalHeight const):
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::computeIntrinsicRatioInformation const):

2021-04-08  Darin Adler  <darin@apple.com>

        [Cocoa] Reduce usage of autorelease, fix mistakes noticed nearby code using autorelease
        https://bugs.webkit.org/show_bug.cgi?id=224340

        Reviewed by Anders Carlsson.

        * bridge/objc/objc_instance.h: Added a static member function isInStringValue to
        help factor the _web_description method better.

        * bridge/objc/objc_instance.mm:
        (JSC::Bindings::ObjcInstance::stringValue const): Removed unneeded WTF prefixes.
        (JSC::Bindings::ObjcInstance::isInStringValue): Added.
        (-[NSObject _web_description]): Moved this out of the C++ namespace since it's an
        Objective-C class implementation. Refactored for simplicity.

2021-04-08  Antoine Quint  <graouts@webkit.org>

        calc() values resulting from blending mixed type lengths should be simplified
        https://bugs.webkit.org/show_bug.cgi?id=224322

        Reviewed by Sam Weinig.

        While we simplify calc() values upon parsing such that operations are resolved and
        values are sorted (percentages first then alphabetically by unit), we didn't do this
        when creating calc() values during blending of lengths of mixed types.

        * css/CSSCalculationValue.cpp:
        (WebCore::CSSCalcValue::create const):

2021-04-09  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] Cleanup the inline box wrappers when moving subtrees
        https://bugs.webkit.org/show_bug.cgi?id=224342
        <rdar://76349279>

        Reviewed by Antti Koivisto.

        When an inline box is moved over to a different BFC (<span>), any inline level descendant (<span><img></span>) should release its inline box wrapper. This inline box wrapper (e.g. InlineFlowBox)
        will eventually be destroy during the subsequent line layout of the original BFC.

        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::move):

2021-04-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Bump libsoup3 version to 2.99.3
        https://bugs.webkit.org/show_bug.cgi?id=224362

        Reviewed by Žan Doberšek.

        * platform/network/soup/GUniquePtrSoup.h:
        * platform/network/soup/ResourceResponseSoup.cpp:
        (WebCore::ResourceResponse::platformSuggestedFilename const):

2021-04-09  Ziran Sun  <zsun@igalia.com>

        [css-flexbox] max-height percentages are wrongly resolved for replaced grid items in nested percentage flexboxes
        https://bugs.webkit.org/show_bug.cgi?id=223931

        Reviewed by Javier Fernandez.

        This change is to make sure that when overridingContainingBlockContentLogicalHeight of a replaced's containing block
        element is indefinite, % max-height of the replaced element  is resolved to none.

        Test: imported/w3c/web-platform-tests/css/css-flexbox/percentage-max-height-004.html

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::hasAutoHeightOrContainingBlockWithAutoHeight const):

2021-04-09  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, GStreamer Thunder decryptor build fix after r275599

        * platform/graphics/gstreamer/eme/WebKitThunderDecryptorGStreamer.cpp:
        (decrypt):

2021-04-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        Teardown shadow root renderers on SlotAssignment::didChangeSlot
        https://bugs.webkit.org/show_bug.cgi?id=221386

        Reviewed by Ryosuke Niwa.

        This reverts r272900 to move the call to RenderTreeUpdater::tearDownRenderers() from hostChildElementDidChange()
        to didChangeSlot(). This ensures the renderers are also cleared for other shadow root trees not using details
        element.

        * dom/SlotAssignment.cpp:
        (WebCore::SlotAssignment::addSlotElementByName):
        (WebCore::SlotAssignment::didChangeSlot):
        * dom/SlotAssignment.h:
        (WebCore::ShadowRoot::hostChildElementDidChange):

2021-04-09  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] fast/canvas/canvas-createPattern-video-loading.html is failing since r218170
        https://bugs.webkit.org/show_bug.cgi?id=173410

        Reviewed by Xabier Rodriguez-Calvar.

        When a flush has been requested by the GL video sink, allocate a new copy of the sample
        which has to be released. The copy is necessary so that the video dimensions can still be
        fetched and also for canvas rendering. The release is necessary because the sample might
        have been allocated by a hardware decoder and memory might have to be reclaimed by a
        non-sysmem buffer pool.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::flushCurrentBuffer):
        (WebCore::MediaPlayerPrivateGStreamer::paint):

2021-04-09  Ziran Sun  <zsun@igalia.com>

        [css-grid] Fix min/max widths of grid affected by ancestor
        https://bugs.webkit.org/show_bug.cgi?id=222100

        Reviewed by Reviewed by Javier Fernandez.

        It's a reland of r273435, which got reverted because it broke 
        imported/w3c/web-platform-tests/css/css-flexbox/percentage-max-height-003.html. This change
        narrows down the fix specificallly to the case when logical-width is recomputed.
        We need to recalculate min/max widths of child that depend on the ancestor.
        Before update logical-width, for element that needs preferredWidth recalcution,
        it is necessary to make sure that min/max widths are set dirty.

        This change is an import of chromium CL at 
        https://chromium-review.googlesource.com/c/chromium/src/+/527640/
        Only the parts that apply to this issue are imported.

        Tests were already imported in WPT.       

        * rendering/RenderBlock.cpp:
        (WebCore::shouldRecalculateMinMaxWidthsAffectedByAncestor):
        (WebCore::RenderBlock::recomputeLogicalWidth):

2021-04-09  Yusuke Suzuki  <ysuzuki@apple.com>

        ServiceWorker should save module scripts
        https://bugs.webkit.org/show_bug.cgi?id=224356
        <rdar://problem/75634897>

        Reviewed by Youenn Fablet.

        Test: http/wpt/service-workers/persistent-modules.html

        In this patch, we call setScriptResource / scriptResource while loading service-worker module scripts in module loaders,
        so that we can ensure that they are saved on the disk.

        * bindings/js/ScriptModuleLoader.cpp:
        (WebCore::ScriptModuleLoader::notifyFinished):
        * bindings/js/WorkerModuleScriptLoader.cpp:
        (WebCore::WorkerModuleScriptLoader::load):
        (WebCore::WorkerModuleScriptLoader::notifyFinished):
        (WebCore::WorkerModuleScriptLoader::notifyClientFinished):
        * bindings/js/WorkerModuleScriptLoader.h:

2021-04-08  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] Wrong KeyboardEvent.key for numeric key pad with NumLock
        https://bugs.webkit.org/show_bug.cgi?id=224352

        Reviewed by Don Olmstead.

        `8` key on a numeric key pad with NumLock dispatched a wrong
        KeyboardEvent with `ArrowUp` as the `key` value. It should be `8`.

        WindowsKeyNames::domKeyFromLParam computed a virtual key by
        MapVirtualKey and a scan code. But, it should use a real virtual
        key conveyed by WPARAM of WM_KEYDOWN and WM_KEYUP events.

        * platform/win/KeyEventWin.cpp:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        * platform/win/WindowsKeyNames.cpp:
        (WebCore::WindowsKeyNames::domKeyFromParams):
        (WebCore::WindowsKeyNames::domKeyFromLParam): Deleted.
        * platform/win/WindowsKeyNames.h:

2021-04-08  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add a completion handler argument to `ChromeClient::requestImageExtraction`
        https://bugs.webkit.org/show_bug.cgi?id=224348

        Reviewed by Tim Horton.

        See WebKit/ChangeLog for more details. No change in behavior.

        * html/HTMLElement.h:

        Export an existing helper method.

        * page/ChromeClient.h:
        (WebCore::ChromeClient::requestImageExtraction):

        Add a (null-by-default) `CompletionHandler` argument to this client method, for future use by accessibility.

2021-04-08  Tim Horton  <timothy_horton@apple.com>

        Safari unit tests sometimes fail an ASSERTion in IOSurface.mm's optionsFor32BitSurface()
        https://bugs.webkit.org/show_bug.cgi?id=224351
        <rdar://problem/76405354>

        Reviewed by Wenson Hsieh.

        New API test: NavigationSwipeTests.DoNotAssertWhenSnapshottingZeroSizeView

        * platform/graphics/cocoa/IOSurface.mm:
        (WebCore::IOSurface::IOSurface):
        Add assertions that IOSurface size is non-empty at the beginning of the constructor.
        We already have downstream ones (e.g. the bytesPerRow and totalBytes
        assertions inside optionsFor32BitSurface()), but they are after doing
        some math and calling IOSurfaceAlignProperty, so it's tempting to blame
        that instead of the input. This way, we fail right at the input, making
        it more obvious what's up.


2021-04-08  Alex Christensen  <achristensen@webkit.org>

        REGRESSION(r273541) WKWebView can't load NSURLRequest subclasses
        https://bugs.webkit.org/show_bug.cgi?id=224338
        <rdar://76192721>

        Reviewed by Brent Fulgham.

        We used to use SPI to extract the CFURLRequestRef, but now we just call encodeWithCoder and initWithCoder.
        That's great for many reasons, but to stay binary compatible we have to continue to support NSURLRequest subclasses.
        They fail in two possible ways:

        1. In ObjC, you can do wild and crazy things such as overriding encodeWithCoder and not calling [super encodeWithCoder:coder];
        2. The process decoding the request (one of our auxiliary processes) almost certainly has not linked with the definition of the subclass.
           This makes us receive an NSException like this when calling decodeObjectOfClasses:forKey:

           *** -[NSKeyedUnarchiver decodeObjectForKey:]: cannot decode object of class (TestURLRequest) for key (root) because no class named "TestURLRequest" was found;
           the class needs to be defined in source code or linked in from a library (ensure the class is part of the correct target).
           If the class was renamed, use setClassName:forClass: to add a class translation mapping to NSKeyedUnarchiver

        To solve this problem, when attempting to encode a request that is not an NSURLRequest or NSMutableURLRequest, use existing code in ResourceRequest to extract
        the parts we use into an NSMutableURLRequest that we can successfully decode.

        * platform/network/cf/ResourceRequest.h:
        * platform/network/cocoa/ResourceRequestCocoa.mm:
        (WebCore::ResourceRequest::replacePlatformRequest):

2021-04-08  Kyle Piddington  <kpiddington@apple.com>

        [Metal ANGLE] check to see that a Metal device is available before selecting the backend.    
        https://bugs.webkit.org/show_bug.cgi?id=224341

        Some platforms, including virtual machines, do not support Metal.
        If we cannot create a default device, fall back on selecting the OpenGL backend.

        Reviewed by Dean Jackson.

        * platform/graphics/cocoa/GraphicsContextGLOpenGLCocoa.mm:
        (WebCore::platformSupportsMetal):
        (WebCore::InitializeEGLDisplay):
        Added Metal header include, and runtime check to ensure a metal device can be created before selecting the Metal backend.

2021-04-08  Chris Dumez  <cdumez@apple.com>

        Suspended OfflineAudioContext objects are leaking
        https://bugs.webkit.org/show_bug.cgi?id=224333

        Reviewed by Darin Adler.

        When offline rendering is suspended, we now release the ActiveDOMObject::PendingActivity we hold
        to keep the OfflineAudioContext and its wrapper alive during rendering. The JS has to keep a
        reference to the context's wrapper anyway if they ever want to resume rendering.

        Test: webaudio/OfflineAudioContext/offlineaudiocontext-leak-while-suspended.html

        * Modules/webaudio/OfflineAudioContext.cpp:
        (WebCore::OfflineAudioContext::didSuspendRendering):

2021-04-08  Jiewen Tan  <jiewen_tan@apple.com>

        Unreviewed, a comment fix

        * crypto/mac/CryptoAlgorithmAES_GCMMac.cpp:
        (WebCore::encryptAES_GCM):
        (WebCore::decyptAES_GCM):
        Removes unnecessary comments.

2021-04-08  Rob Buis  <rbuis@igalia.com>

        Remove virtual from RenderBox::availableLogicalWidth
        https://bugs.webkit.org/show_bug.cgi?id=224332

        Reviewed by Darin Adler.

        Remove virtual from RenderBox::availableLogicalWidth since
        it is not overridden.

        * rendering/RenderBox.h:
        (WebCore::RenderBox::availableLogicalWidth const):

2021-04-08  Chris Dumez  <cdumez@apple.com>

        OfflineAudioContext objects are leaking
        https://bugs.webkit.org/show_bug.cgi?id=224279

        Reviewed by Darin Adler.

        OfflineAudioContext objects were always leaking due to 2 reference cycles:
        1. BaseAudioContext -> m_listener (AudioListener) -> m_positionX (AudioParam) -> m_context (BaseAudioContext)
        2. BaseAudioContext -> m_destinationNode (AudioDestinationNode) -> m_context (BaseAudioContext)

        For reference cycle 1, I made AudioSummingJunction (base class of AudioParam) hold a weak pointer to the
        AudioContext instead of a Ref<>. I don't think there is a good reason for an AudioSummingJunction (AudioParam
        or AudioNodeInput) to keep its AudioContext alive. AudioNodes already keep their AudioContext alive.
        AudioNodeInputs and AudioParams are associated to AudioNodes.

        For reference cycle 2, I made AudioDestinationNode not hold a strong pointer to its context but instead a
        weak pointer. Since keeping an AudioDestinationNode alive should keep its AudioContext alive, I made it so
        that ref'ing the AudioDestinationNode refs its BaseAudioContext. Also, BaseAudioContext::m_destinationNode
        is now a UniqueRef<> instead of a RefPtr<> to avoid a cycle.

        Tests: webaudio/OfflineAudioContext/offlineaudiocontext-leak-after-rendering.html
               webaudio/OfflineAudioContext/offlineaudiocontext-leak.html

        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::baseLatency):
        (WebCore::AudioContext::getOutputTimestamp):
        (WebCore::AudioContext::close):
        (WebCore::AudioContext::destination):
        (WebCore::AudioContext::destination const):
        (WebCore::AudioContext::suspendRendering):
        (WebCore::AudioContext::resumeRendering):
        (WebCore::AudioContext::startRendering):
        (WebCore::AudioContext::lazyInitialize):
        (WebCore::AudioContext::mediaState const):
        (WebCore::AudioContext::mayResumePlayback):
        (WebCore::AudioContext::suspendPlayback):
        (WebCore::AudioContext::pageMutedStateDidChange):
        * Modules/webaudio/AudioContext.h:
        - Drop some null checks now that m_destinationNode can no longer be null.
        - Capture an ActiveDOMObject::PendingActivity when doing async work that ends up resolving a Promise, so that
          we keep both the object and its wrapper alive for the duration of the async work.

        * Modules/webaudio/AudioDestinationNode.cpp:
        (WebCore::AudioDestinationNode::ref):
        (WebCore::AudioDestinationNode::deref):
        * Modules/webaudio/AudioDestinationNode.h:
        Have AudioDestinationNode override AudioNode's ref() / deref() to forward the refcounting
        to its BaseAudioContext, instead of using the AudioNode's internal refCount.

        * Modules/webaudio/AudioListener.cpp:
        (WebCore::AudioListener::updateValuesIfNeeded):
        (WebCore::AudioListener::setPosition):
        (WebCore::AudioListener::setOrientation):
        Add some null-checks for AudioParam::context() now that AudioParam holds a WeakPtr to its
        context.

        * Modules/webaudio/AudioNode.cpp:
        (WebCore::AudioNode::toWeakOrStrongContext):
        (WebCore::AudioNode::AudioNode):
        (WebCore::AudioNode::connect):
        (WebCore::AudioNode::sampleRate const):
        (WebCore::AudioNode::markNodeForDeletionIfNecessary):
        (WebCore::AudioNode::contextForBindings):
        (WebCore::AudioNode::context):
        (WebCore::AudioNode::context const):
        * Modules/webaudio/AudioNode.h:
        - Hold the BaseAudioContext as a WeakPtr instead of a Ref<> if the AudioNode is an
          AudioDestinationNode. This avoids a reference cycle since the BaseAudioContext owns the
          AudioDestinationNode. Even though we are using a WeakPtr, it is safe to assume that
          the context is not null because ref'ing an AudioDestinationNode refs its BaseAudioContext.
        - Make sure markNodeForDeletionIfNecessary() has no effect for AudioDestinationNode since
          BaseAudioContext now owns the AudioDestinationNode when we take care of destroying its
          destination node when destroyed.

        * Modules/webaudio/AudioNodeInput.cpp:
        (WebCore::AudioNodeInput::connect):
        (WebCore::AudioNodeInput::disconnect):
        (WebCore::AudioNodeInput::outputEnabledStateChanged):
        (WebCore::AudioNodeInput::updateInternalBus):
        (WebCore::AudioNodeInput::bus):
        (WebCore::AudioNodeInput::internalSummingBus):
        (WebCore::AudioNodeInput::sumAllConnections):
        (WebCore::AudioNodeInput::pull):
        Add assertions that the context is not null. There were already assertions that we are the graph
        owner, which means we are holding the BaseAudioContext's lock, which means that the audio context
        is alive.

        * Modules/webaudio/AudioParam.cpp:
        (WebCore::AudioParam::value):
        (WebCore::AudioParam::setValueForBindings):
        (WebCore::AudioParam::smooth):
        (WebCore::AudioParam::hasSampleAccurateValues const):
        (WebCore::AudioParam::calculateSampleAccurateValues):
        (WebCore::AudioParam::calculateFinalValues):
        (WebCore::AudioParam::calculateTimelineValues):
        (WebCore::AudioParam::connect):
        (WebCore::AudioParam::disconnect):
        Add null-checks for the AudioContext now that the AudioParam is only holding a WeakPtr to its
        BaseAudioContext (to avoid a reference cycle).

        * Modules/webaudio/AudioSummingJunction.cpp:
        (WebCore::AudioSummingJunction::AudioSummingJunction):
        (WebCore::AudioSummingJunction::~AudioSummingJunction):
        (WebCore::AudioSummingJunction::markRenderingStateAsDirty):
        (WebCore::AudioSummingJunction::addOutput):
        (WebCore::AudioSummingJunction::removeOutput):
        (WebCore::AudioSummingJunction::updateRenderingState):
        (WebCore::AudioSummingJunction::outputEnabledStateChanged):
        * Modules/webaudio/AudioSummingJunction.h:
        (WebCore::AudioSummingJunction::context):
        (WebCore::AudioSummingJunction::context const):
        - Hold a WeakPtr to the BaseAudioContext to avoid a reference cycle.
        - Deal with the fact that the audio context may be null now that we're holding a WeakPtr
          to it (except when holding the graph lock)

        * Modules/webaudio/BaseAudioContext.cpp:
        (WebCore::BaseAudioContext::BaseAudioContext):
        (WebCore::BaseAudioContext::~BaseAudioContext):
        (WebCore::BaseAudioContext::numberOfInstances):
        (WebCore::BaseAudioContext::lazyInitialize):
        (WebCore::BaseAudioContext::clear):
        (WebCore::BaseAudioContext::uninitialize):
        (WebCore::BaseAudioContext::stop):
        (WebCore::BaseAudioContext::sampleRate const):
        (WebCore::BaseAudioContext::decodeAudioData):
        (WebCore::BaseAudioContext::markForDeletion):
        (WebCore::BaseAudioContext::deleteMarkedNodes):
        (WebCore::BaseAudioContext::setPendingActivity):
        (WebCore::BaseAudioContext::workletIsReady):
        * Modules/webaudio/BaseAudioContext.h:
        (WebCore::BaseAudioContext::destination):
        (WebCore::BaseAudioContext::destination const):
        (WebCore::BaseAudioContext::currentSampleFrame const):
        (WebCore::BaseAudioContext::currentTime const):
        - Switch m_destinationNode from RefPtr<> to UniqueRef<> since the AudioContext is now
          the owner of the destinationNode and since refing the destination node actually refs
          its BaseAudioContext.
        - Drop some null checks now that m_destinationNode can no longer be null.
        - Rename makePendingActivity() to setPendingActivity() to avoid a naming conflict with
          ActiveDOMObject::makePendingActivity().

        * Modules/webaudio/DefaultAudioDestinationNode.h:
        * Modules/webaudio/OfflineAudioDestinationNode.h:
        - Drop create() factory functions and make the constructor public now that the BaseAudioContext owns
          its destination node via a UniqueRef<>.
        - Make some member functions public as they are virtual and they now called on the subclass instead of the
          base class (and these functions are public in the base class).

        * Modules/webaudio/OfflineAudioContext.cpp:
        (WebCore::OfflineAudioContext::startOfflineRendering):
        (WebCore::OfflineAudioContext::resumeOfflineRendering):
        * Modules/webaudio/OfflineAudioContext.h:
        - Drop some null checks now that m_destinationNode can no longer be null.
        - Capture an ActiveDOMObject::PendingActivity when doing async work that ends up resolving a Promise, so that
          we keep both the object and its wrapper alive for the duration of the async work.

        * Modules/webaudio/WebKitAudioContext.cpp:
        (WebCore::WebKitAudioContext::close):
        Drop null checks for the destination node now that it can never be null.

        * dom/ShadowRoot.cpp:
        * rendering/FloatingObjects.cpp:
        * rendering/RootInlineBox.cpp:
        Update classes used of size restrictions since the size of a WeakPtr is not longer the same as the size of a
        pointer when debug assertions are enabled. As long as they are the same size in release builds, there is no
        memory use concern.

        * testing/Internals.cpp:
        (WebCore::Internals::numberOfBaseAudioContexts const):
        * testing/Internals.h:
        * testing/Internals.idl:
        Add testing function to check how many BaseAudioContexts are alive, so that we can write layout tests and check
        for leaks.

2021-04-08  Youenn Fablet  <youenn@apple.com>

        Streams: new test failure for canceling the branches of an errored tee'd stream
        https://bugs.webkit.org/show_bug.cgi?id=223558
        <rdar://problem/75924807>

        Reviewed by Alex Christensen.

        Align with latest version of the spec.
        Covered by updated test.

        * Modules/streams/ReadableStreamInternals.js:
        (readableStreamTee):
        (readableStreamTeePullFunction):

2021-04-08  Andres Gonzalez  <andresg_22@apple.com>

        VoiceOver does not echo text insertions and deletions when a contenteditable div has a non editable descendant element with a content editable child
        https://bugs.webkit.org/show_bug.cgi?id=223818

        Reviewed by Chris Fleizach.

        Test: accessibility/nested-textareas-value-changed-notifications.html

        AXObjectCache::textChanged now only notifies the closest non-native text
        control of value changes. This avoid the problem of multiple value
        changed notifications in a row when there are nested text areas.
        Removed AccessibilityRenderObject::textChanged and moved that
        functionality to AXObjectCache::textChanged, where it belongs.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::textChanged):
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityObjectInterface.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::textChanged): Deleted.
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/isolatedtree/AXIsolatedObject.cpp:
        (WebCore::AXIsolatedObject::textChanged): Deleted.
        * accessibility/isolatedtree/AXIsolatedObject.h:

2021-04-08  Youenn Fablet  <youenn@apple.com>

        Broken transition when video player with MediaStream changes size
        https://bugs.webkit.org/show_bug.cgi?id=224161
        <rdar://problem/76366061>

        Reviewed by Eric Carlson.

        In case of animation that changes the root layer bounds, we need to synchronously update
        the buffer layer as well.

        Manually tested.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::rootLayerBoundsDidChange):

2021-04-08  Simon Fraser  <simon.fraser@apple.com>

        Compact GraphicsContextState
        https://bugs.webkit.org/show_bug.cgi?id=224317

        Reviewed by Jon Lee.

        Shrink GraphicsContextState from 192 to 184 bytes. This saves space in all the
        GraphicsContext state stacks, and on pages with filters and canvas there can be
        many of these.

        * platform/graphics/GraphicsContext.h:

2021-04-08  Sihui Liu  <sihui_liu@apple.com>

        Remove logging for investigating http/tests/IndexedDB/storage-limit-1.html failure
        https://bugs.webkit.org/show_bug.cgi?id=223086
        <rdar://problem/75591816>

        Reviewed by Chris Dumez.

        * Modules/indexeddb/server/IDBServer.cpp:
        (WebCore::IDBServer::IDBServer::diskUsage):
        * Modules/indexeddb/server/IDBServer.h:
        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
        (WebCore::IDBServer::SQLiteIDBBackingStore::databasesSizeForDirectory):
        * Modules/indexeddb/server/SQLiteIDBBackingStore.h:
        * storage/StorageQuotaManager.cpp:
        (WebCore::StorageQuotaManager::requestSpaceOnBackgroundThread):
        (WebCore::StorageQuotaManager::tryGrantRequest):
        (WebCore::StorageQuotaManager::setLoggingEnabled): Deleted.
        * storage/StorageQuotaManager.h:

2021-04-08  Antti Koivisto  <antti@apple.com>

        Revert r273621 because iPhone PLT regression
        https://bugs.webkit.org/show_bug.cgi?id=224323

        Unreviewed.

        * dom/CharacterData.cpp:
        (WebCore::CharacterData::parserAppendData):
        (WebCore::CharacterData::setDataAndUpdate):
        * dom/Document.cpp:
        (WebCore::Document::removedLastRef):
        (WebCore::Document::resolveStyle):
        (WebCore::Document::updateTextRenderer):
        (WebCore::Document::needsStyleRecalc const):
        * dom/Document.h:
        * dom/Text.cpp:
        (WebCore::Text::splitText):
        (WebCore::Text::updateRendererAfterContentChange):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::deleteInsignificantText):
        * editing/markup.cpp:
        (WebCore::replaceChildrenWithFragment):
        * rendering/updating/RenderTreeUpdater.cpp:
        * style/StyleTreeResolver.cpp:
        (WebCore::Style::TreeResolver::TreeResolver):
        (WebCore::Style::TreeResolver::resolve):
        * style/StyleTreeResolver.h:
        (WebCore::Style::TreeResolver::TreeResolver): Deleted.
        * style/StyleUpdate.cpp:
        (WebCore::Style::Update::addText):
        (WebCore::Style::Update::addPossibleRoot):
        * style/StyleUpdate.h:
        (WebCore::Style::Update:: const):
        (WebCore::Style::Update::roots const): Deleted.

2021-04-08  Youenn Fablet  <youenn@apple.com>

        Update SFrame implementation to latest version
        https://bugs.webkit.org/show_bug.cgi?id=224276

        Reviewed by Eric Carlson.

        Update implementation according to latest draft at https://github.com/eomara/sframe/blob/master/draft-omara-sframe.md.
        In particular, we derive keys with new algorithm and the generation of the signature by including header and data length as well as nonce.

        Test: webrtc/sframe-test-vectors.html

        * Modules/mediastream/RTCRtpSFrameTransform.cpp:
        (WebCore::RTCRtpSFrameTransform::setCounterForTesting):
        * Modules/mediastream/RTCRtpSFrameTransform.h:
        * Modules/mediastream/RTCRtpSFrameTransformer.cpp:
        (WebCore::computeIV):
        (WebCore::RTCRtpSFrameTransformer::updateEncryptionKey):
        (WebCore::RTCRtpSFrameTransformer::decryptFrame):
        (WebCore::RTCRtpSFrameTransformer::encryptFrame):
        (WebCore::RTCRtpSFrameTransformer::computeEncryptedDataSignature):
        * Modules/mediastream/RTCRtpSFrameTransformer.h:
        * Modules/mediastream/RTCRtpSFrameTransformerCocoa.cpp:
        (WebCore::RTCRtpSFrameTransformer::computeSaltKey):
        (WebCore::createBaseSFrameKey):
        (WebCore::RTCRtpSFrameTransformer::computeAuthenticationKey):
        (WebCore::RTCRtpSFrameTransformer::computeEncryptionKey):
        (WebCore::encodeBigEndian):
        (WebCore::RTCRtpSFrameTransformer::computeEncryptedDataSignature):
        * testing/Internals.cpp:
        (WebCore::Internals::setSFrameCounter):
        * testing/Internals.h:
        * testing/Internals.idl:

2021-04-08  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        Unreviewed. Fixed build warning.

        * platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.h: Avoid C-linkage warning.

2021-04-07  Julian Gonzalez  <julian_a_gonzalez@apple.com>

        Nullptr dereference in ReplaceSelectionCommand::removeRedundantStylesAndKeepStyleSpanInline
        https://bugs.webkit.org/show_bug.cgi?id=224259

        Reviewed by Ryosuke Niwa.

        When pruning after removing the end <br> in ReplaceSelectionCommand::doApply(), make sure
        that insertedNodes is updated properly (given that we may be removing an ancestor
        of the start or end of insertedNodes).

        Test: editing/inserting/insert-display-contents-crash.html

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::InsertedNodes::willRemovePossibleAncestorNode):
        (WebCore::ReplaceSelectionCommand::InsertedNodes::willRemoveNode):
        (WebCore::ReplaceSelectionCommand::doApply):
        * editing/ReplaceSelectionCommand.h:

2021-04-07  Jean-Yves Avenard  <jya@apple.com>

        Site could crash if MediaRemote framework isn't available.
        https://bugs.webkit.org/show_bug.cgi?id=224308
        <rdar://problem/76273591>

        Reviewed by Eric Carlson.

        Check that MediaRemote framework is available before calling any of its method.
        We put the check in the two static methods calling MediaRemote in order to keep all code dealing with MediaRemote in the same place.

        * platform/audio/cocoa/MediaSessionManagerCocoa.mm:
        (WebCore::MediaSessionManagerCocoa::clearNowPlayingInfo): Add a test with isMediaRemoteFrameworkAvailable
        (WebCore::MediaSessionManagerCocoa::setNowPlayingInfo):  Add a test with isMediaRemoteFrameworkAvailable

2021-04-02  Darin Adler  <darin@apple.com>

        Use Hasher more, remove IntegerHasher, fix hashing-related mistakes
        https://bugs.webkit.org/show_bug.cgi?id=224138

        Reviewed by Chris Dumez.

        * contentextensions/ContentExtensionRule.h:
        (WebCore::ContentExtensions::TriggerHash::hash): Use computeHash to
        hash all the fields instead of a custom-written algorithm. The custom
        algorithm had some magic numbers, repeatedly hashed hashes, and combined
        hashes using exclusive or. The new one is almost certainly better.

        * contentextensions/Term.h:
        (WebCore::ContentExtensions::Term::CharacterSet::hash const):
        Use computeHash to hash the boolean and the characters rather than
        using intHash and pairIntHash.

        * css/parser/CSSParserContext.cpp:
        (WebCore::add): Moved the hashing here from the header. Fixed the
        mistake where this was using & instead of | and so none of the booleans
        were having any effect on the hash value.

        * css/parser/CSSParserContext.h: Use WTF_MAKE_STRUCT_FAST_ALLOCATED so
        we don't have to say public: explicitly. Also moved all the function
        members to the bottom of the struct. This is typically preferred style
        for structures as opposed to classes. Since the data members are the
        primary interface, they are first, and all function members are secondary
        and so they come after.
        (WebCore::CSSParserContextHash::hash): Use convertHash instead of
        a custom written hash function. The custom written function was combining
        hahes using exclusive or, not a best practice, and also had a mistake
        where it used & instead of | and so the "bits" local variable was always 0.

        * html/FormController.cpp: Use HashTraits instead of WTF::GenericHashTraits.

        * platform/encryptedmedia/CDMProxy.h: Removed unneedes includes.

        * platform/graphics/Font.cpp: Changed CharacterFallbackMapKey into a
        simple struct with no additional function members or static data members.
        Changed CharacterFallbackMapKeyHash to use computeHash to calculate the
        hash, instead of IntegerHasher. Probably better to hash the pointer of
        the AtomString rather than hashing the hash, but either way, we should
        have the best implementation for AtomString hashing in the Hasher class.
        Added CharacterFallbackMapKeyHashTraits instead of using
        SimpleClassHashTraits. Use the value U_SENTINEL for the UChar32 character,
        which is the same as the -1 used before, but slightly clearer why it's OK.
        (WebCore::Font::systemFallbackFontForCharacter const): Use HashMap::ensure
        instead of HashMap::add to make the logic simpler.

        * platform/graphics/Font.h: Use bool instead of uint8_t as the base type
        for the No/Yes enumeration IsForPlatformFont.

        * platform/graphics/FontCache.cpp: Removed unneeded "using namespace WTF",
        which is not our best practice, especially given unified builds.
        Changed FontPlatformDataCacheKey into a simple struct, removing all the
        hash-related member functions. Also used struct-style naming for the
        members without an "m_" prefix. Used the type FontFamilyName for the
        family name, which means we will use FontCascadeDescription's system
        for hashing and comparing family names for equality without having to
        remember do to so explicitly. Changed FontPlatformDataCacheKeyHash to
        use computeHash. The old version had unnecessarily complex logic to
        handle Optional and was unnecessarily hashing hashes.
        (WebCore::FontCache::cachedFontPlatformData): Renamed to remove "get"
        from the function's name. Also use shorter argument and local variable
        names that are single words, and updated since FontPlatformDataCacheKey
        is now a struct without a constructor.
        (WebCore::FontCache::fontForFamily): Use shorter names.
        (WebCore::operator==): To compare two FontCascadeCacheKey objects,
        use a simpler constructions, depending on the fact that Vector already
        has an == operator and we are using FontFamilyName for the elements
        of the vector, which has a correct == operator.
        (WebCore::FontCascadeCacheKeyHash::hash): Use computeHash since
        the FontFamilyName hashing is now correct, and we can rely on the
        way Hasher knows how to iterate a collection.
        (WebCore::FontCache::retrieveOrAddCachedFonts): Update since
        FontCascadeCacheEntry is now a simple struct. Also use constexpr a bit.
        (WebCore::FontCache::invalidate): Use copyToVectorOf<> to simplify the
        code that calls fontCacheInvalidated on all the font selectors.

        * platform/graphics/FontCache.h: Use "using" instead of "typedef".
        Remove FontDescriptionKey::computeHash.
        (WebCore::add): An overload of add for Hasher to include a
        FontDescriptionKey in a hash, which just lists all the data members.
        The old version did a hash of hashes, but that's not needed any more.
        Updated FontDescriptionKeyHash to use the Hasher version of ComputeHash.
        Added FontFamilyName. Change FontCascadeCacheKey to use a vector of
        FontFamilyName instead of AtomString. In FontCascadeCacheEntry, use
        WTF_MAKE_STRUCT_FAST_ALLOCATED instead of WTF_MAKE_FAST_ALLOCATED
        and also got rid of the unneeeded constructor.
        (WebCore::FontCascadeCacheKeyHashTraits::constructDeletedValue):
        Use the deleted value of FontDescriptionKey.
        (WebCore::FontCascadeCacheKeyHashTraits::isDeletedValue): Ditto.
        Renamed getCachedFontPlatformData to just cachedFontPlatformData.

        * platform/graphics/FontGenericFamilies.h: Use HashTraits instead of
        WTF::GenericHashTraits.

        * platform/graphics/FontSelectionAlgorithm.h:
        (WebCore::FontSelectionRange::uniqueValue const): Deleted.
        (WebCore::add): Add both the minimum and maximum values to the hash
        separately instead of combining them. For now, this makes the way
        they are hashed a bit inefficient, but that can be re-tightened up by
        improving the algorithm of Hasher if we like. Should be fine for our
        needs either way.

        * platform/graphics/FontTaggedSettings.cpp:
        (WebCore::FontFeatureSettings::hash const): Deleted.
        (WebCore::FontVariationSettings::hash const): Deleted.

        * platform/graphics/FontTaggedSettings.h: Added overloads of the
        add(Hasher&) function for std::array<char, 4> and FontTaggedSetting<T>.
        Got rid of many uses of pass by reference instead of value for FontTag,
        since it fits into a 32-bit register and bth more source code and less
        efficient to pass by value.

        * platform/graphics/Gradient.cpp: Removed "using WTF::pairIntHash" since
        that's now done in the WTF header.
        * platform/graphics/cg/GraphicsContextCG.cpp: Ditto. Also removed
        "using WTF::GenericHashTraits", which was unhelpful. The GenericHashTraits
        template is only really needed when specializing HashTraits, which
        already has to be done within the WTF namespace. In all other cases, we
        should just use HashTraits instead.

        * platform/graphics/cg/SubimageCacheWithTimer.h: Use HashTraits
        instead of WTF::GenericHashTraits.

        * platform/graphics/cocoa/FontFamilySpecificationCoreText.cpp:
        Move the data members to the top of the FontFamilySpecificationKey struct.
        Removed unneeded computeHash function and WTF prefix from safeCFEqual.
        (WebCore::FontFamilySpecificationKeyHash::hash): Call the Hasher version
        of computeHash directly to hash the two items in this structure.

        * platform/graphics/cocoa/SystemFontDatabaseCoreText.h:
        (WebCore::SystemFontDatabaseCoreText::CascadeListParameters::hash const):
        Use computeHash instead of IntegerHasher. Also renamed the hash function
        struct from CascadeListParameters::CascadeListParametersHash to
        CascadeListParameters::Hash.

        * platform/graphics/mac/ComplexTextControllerCoreText.mm:
        (WebCore::ComplexTextController::collectComplexTextRunsForCharacters):
        Removed now-unneeded WTF prefixes from calls to safeCFEqual.

        * rendering/TextAutoSizing.h: Use HashTraits instead of WTF::GenericHashTraits.

        * rendering/style/RenderStyle.cpp:
        (WebCore::computeFontHash): Use computeHash instead of IntegerHasher.
        Still not great that we hash a hash here, but we can improve that later.

        * workers/service/ServiceWorkerClientIdentifier.h:
        (WebCore::ServiceWorkerClientIdentifier::decode): Removed unneeded
        WTFMove on ObjectIdentifier, which are just integers, so move vs. copy
        is not an important distinction.
        (WebCore::ServiceWorkerClientIdentifier::hash const): Use computeHash
        instead of combining intHash with StringHasher::hashMemory. This fixes
        two mistakes: one is that there is no need to hash a hash. The second is
        that intHash takes a 32-bit integer as its parameter, so high bits
        of object identifiers were discarded unnecessarily.

        * workers/service/ServiceWorkerContextData.h: Removed unneeded include.

        * workers/service/ServiceWorkerGlobalScope.h: Added now-needed include
        of URLHash.h, since we removed it from a widely-included header.
        * workers/service/context/SWContextManager.h: Ditto.
        * workers/service/server/ServiceWorkerThreadProxy.h: Ditto.
        * workers/service/server/RegistrationStore.h: Ditto.
        * workers/service/server/SWServer.h: Ditto.
        * workers/service/server/SWServerToContextConnection.h: Ditto.
        * workers/service/server/SWServerWorker.h: Ditto.

2021-04-07  Mark Lam  <mark.lam@apple.com>

        Rename and make the TerminationException a singleton.
        https://bugs.webkit.org/show_bug.cgi?id=224295

        Reviewed by Keith Miller.

        In the WorkerOrWorkletScriptController constructor, we ensure the TerminationException
        because workers need to support termination requests.

        * bindings/js/JSDOMExceptionHandling.cpp:
        (WebCore::reportException):
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSC_DEFINE_HOST_FUNCTION):
        (WebCore::handleResponseOnStreamingAction):
        * bindings/js/JSDOMPromise.cpp:
        (WebCore::DOMPromise::whenPromiseIsSettled):
        * bindings/js/JSDOMPromiseDeferred.cpp:
        (WebCore::DeferredPromise::reject):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent):
        * bindings/js/ReadableStream.cpp:
        (WebCore::invokeReadableStreamFunction):
        (WebCore::ReadableStream::lock):
        (WebCore::checkReadableStream):
        * bindings/js/ReadableStreamDefaultController.cpp:
        (WebCore::invokeReadableStreamDefaultControllerFunction):
        (WebCore::ReadableStreamDefaultController::error):
        (WebCore::ReadableStreamDefaultController::enqueue):
        * workers/WorkerOrWorkletScriptController.cpp:
        (WebCore::WorkerOrWorkletScriptController::WorkerOrWorkletScriptController):
        (WebCore::WorkerOrWorkletScriptController::evaluate):
        (WebCore::WorkerOrWorkletScriptController::linkAndEvaluateModule):
        (WebCore::WorkerOrWorkletScriptController::loadAndEvaluateModule):

2021-04-07  Simon Fraser  <simon.fraser@apple.com>

        Remove RepaintLayoutRectsMap
        https://bugs.webkit.org/show_bug.cgi?id=224217

        Reviewed by Zalan Bujtas.

        RepaintLayoutRectsMap was a side table used to map RenderLayerModelObjects to
        repaint rects for their corresponding layers. However, this HashMap could
        get large, and waste more space than if we just stored the repaint rects
        on RenderLayer.

        For example, on twitter.com we could have about 2000 RenderLayers; increasing
        their size by 32 bytes (the size of the two LayoutRects) adds 62KB, but RepaintLayoutRectsMap
        would contain about 1950 entries with a capacity of 8192, wasting around 200KB.

        So moving repaint rects into RenderLayer is a memory saving. This patch does so
        without using Optional<> since that introduces extra padding.

        * rendering/ComplexLineLayout.cpp:
        (WebCore::ComplexLineLayout::layoutRunsAndFloats):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::updateLayerPositions):
        (WebCore::RenderLayer::repaintRectIncludingNonCompositingDescendants const):
        (WebCore::RenderLayer::computeRepaintRects):
        (WebCore::RenderLayer::setRepaintRects):
        (WebCore::RenderLayer::clearRepaintRects):
        (WebCore::RenderLayer::updateLayerPositionsAfterScroll):
        (WebCore::RenderLayer::calculateClipRects const):
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::repaintRects const):
        (WebCore::RenderLayer::hasComputedRepaintRects const): Deleted.
        * rendering/RenderLayerModelObject.cpp:
        (WebCore::RenderLayerModelObject::willBeDestroyed):
        (WebCore::RenderLayerModelObject::destroyLayer):
        (WebCore::RenderLayerModelObject::styleDidChange):
        (WebCore::RenderLayerModelObject::layerRepaintRects const):
        (WebCore::RepaintLayoutRects::RepaintLayoutRects): Deleted.
        (WebCore::RenderLayerModelObject::hasRepaintLayoutRects const): Deleted.
        (WebCore::RenderLayerModelObject::setRepaintLayoutRects): Deleted.
        (WebCore::RenderLayerModelObject::clearRepaintLayoutRects): Deleted.
        (WebCore::RenderLayerModelObject::repaintLayoutRects const): Deleted.
        (WebCore::RenderLayerModelObject::computeRepaintLayoutRects): Deleted.
        * rendering/RenderLayerModelObject.h:
        (WebCore::RepaintLayoutRects::RepaintLayoutRects): Deleted.
        * rendering/RenderLayerScrollableArea.cpp:
        (WebCore::RenderLayerScrollableArea::scrollTo):

2021-04-07  Simon Fraser  <simon.fraser@apple.com>

        Wasted vector capacity in various DisplayList related code paths
        https://bugs.webkit.org/show_bug.cgi?id=224304

        Reviewed by Wenson Hsieh.

        Add DisplayList::shrinkToFit() and have it shrink the vector of drawing extents (this
        could be extended to shrink item buffers at some point). Call the shrink from
        FontCascade which caches glyph buffers as an optimization.

        Reduce the inline capacity of the Recorder's context stack; this sticks around
        for GPU process canvases.

        Reduce the inline capacity of the DrawGyph buffers from 128 to 16, as these items
        persist for FontCascade cached lists (until a memory warning).

        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::displayListForTextRun const):
        * platform/graphics/displaylists/DisplayList.cpp:
        (WebCore::DisplayList::DisplayList::shrinkToFit):
        * platform/graphics/displaylists/DisplayList.h:
        * platform/graphics/displaylists/DisplayListItems.h:
        (WebCore::DisplayList::DrawGlyphs::glyphs const):
        * platform/graphics/displaylists/DisplayListRecorder.h:

2021-04-07  Simon Fraser  <simon.fraser@apple.com>

        Wasted vector capacity under CSSFontFace::setUnicodeRange()
        https://bugs.webkit.org/show_bug.cgi?id=224266

        Reviewed by Devin Rousso.

        We know how big the Vector<UnicodeRange> is up-front.

        * css/CSSFontFace.cpp:
        (WebCore::CSSFontFace::setUnicodeRange):

2021-04-07  Simon Fraser  <simon.fraser@apple.com>

        Wasted vector capacity under RuleFeatureSet::collectFeatures()
        https://bugs.webkit.org/show_bug.cgi?id=224248

        Reviewed by Devin Rousso.

        The RuleSets constructed ensureInvalidationRuleSets() were never shrunk,
        causing up to 500KB of wasted vector capacity on youtube.com.

        This change calls shrinkToFit() on the RuleSets, and on the InvalidationRuleSet
        vector.

        * style/StyleScopeRuleSets.cpp:
        (WebCore::Style::ensureInvalidationRuleSets):

2021-04-07  Simon Fraser  <simon.fraser@apple.com>

        Reduce Vector<> wasted capacity in some RuleSet code
        https://bugs.webkit.org/show_bug.cgi?id=224160

        Reviewed by Antti Koivisto.

        Dynamic media rule-related vectors were not getting shrunk because m_dynamicMediaQueryRules
        was constructed after the shrinkToFit() calls, and itself was not shrunk.

        Also re-order member variables to reduce padding.

        Saves 60-120KB on a nytimes page.

        * style/RuleSet.cpp:
        (WebCore::Style::RuleSet::addRulesFromSheet):
        (WebCore::Style::RuleSet::evaluateDynamicMediaQueryRules):
        (WebCore::Style::shrinkDynamicRules):
        (WebCore::Style::RuleSet::shrinkToFit):
        * style/RuleSet.h:
        (WebCore::Style::RuleSet::DynamicMediaQueryRules::shrinkToFit):

2021-04-07  Simon Fraser  <simon.fraser@apple.com>

        Wasted vector capacity in RenderLayer lists
        https://bugs.webkit.org/show_bug.cgi?id=224170

        Reviewed by Sam Weinig.

        Shrink RenderLayer normal flow and z-order lists.

        This saves about 800KB on twitter.com.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateNormalFlowList):
        (WebCore::RenderLayer::rebuildZOrderLists):

2021-04-07  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Remove InlineLines and InlineLineBoxes inline capacity of 10
        https://bugs.webkit.org/show_bug.cgi?id=224296

        Reviewed by Antti Koivisto.

        A casual browsing session shows that the average line count is ~1.4. Having 10 as initial capacity seems a little excessive.
        (and neither PerformanceTests/Layout/line-layout-inline-block.html nor PerformanceTests/Layout/line-layout-inline-level-boxes.html microbenchmarks show regression locally)

        * layout/inlineformatting/InlineFormattingState.h:

2021-04-07  Chris Dumez  <cdumez@apple.com>

        Drop unnecessary NDEBUG checks in ServiceWorkerContainer
        https://bugs.webkit.org/show_bug.cgi?id=224285

        Reviewed by Youenn Fablet.

        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::~ServiceWorkerContainer):
        (WebCore::ServiceWorkerContainer::scheduleJob):
        (WebCore::ServiceWorkerContainer::jobFailedWithException):
        (WebCore::ServiceWorkerContainer::queueTaskToFireUpdateFoundEvent):
        (WebCore::ServiceWorkerContainer::jobResolvedWithRegistration):
        (WebCore::ServiceWorkerContainer::jobResolvedWithUnregistrationResult):
        (WebCore::ServiceWorkerContainer::startScriptFetchForJob):
        (WebCore::ServiceWorkerContainer::jobFinishedLoadingScript):
        (WebCore::ServiceWorkerContainer::jobFailedLoadingScript):
        (WebCore::ServiceWorkerContainer::destroyJob):
        (WebCore::ServiceWorkerContainer::addRegistration):
        (WebCore::ServiceWorkerContainer::removeRegistration):
        (WebCore::ServiceWorkerContainer::queueTaskToDispatchControllerChangeEvent):
        (WebCore::ServiceWorkerContainer::contextIdentifier):
        * workers/service/ServiceWorkerContainer.h:

2021-04-07  Simon Fraser  <simon.fraser@apple.com>

        Wasted vector capacity in StyleRuleKeyframes
        https://bugs.webkit.org/show_bug.cgi?id=224264

        Reviewed by Antti Koivisto.

        Shrink StyleRuleKeyframes::m_keyframes. Saves 23KB on youtube.com.

        * css/CSSKeyframesRule.cpp:
        (WebCore::StyleRuleKeyframes::shrinkToFit):
        * css/CSSKeyframesRule.h:
        * css/parser/CSSParserImpl.cpp:
        (WebCore::CSSParserImpl::consumeKeyframesRule):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::consumeAnimationShorthand):

2021-04-07  Simon Fraser  <simon.fraser@apple.com>

        Wasted vector capacity in StyleSheetContents
        https://bugs.webkit.org/show_bug.cgi?id=224250

        Reviewed by Darin Adler.

        Call shrinkToFit() on the StyleSheetContents created in CSSParserImpl::parseStyleSheet()
        in order to shrink m_importRules and m_childRules, which can waste about 100KB on
        youtube.com.

        * css/parser/CSSParserImpl.cpp:
        (WebCore::CSSParserImpl::parseStyleSheet):

2021-04-07  Zalan Bujtas  <zalan@apple.com>

        REGRESSION (r270849): Button content fails to render on apple.com "Blood Oxygen"/"ECG"
        https://bugs.webkit.org/show_bug.cgi?id=224261

        Reviewed by Simon Fraser.

        1. The changeRequiresRecompositeLayer check in RenderStyle::diff should come after
        changeRequiresRepaintIfTextOrBorderOrOutline since RepaintIfTextOrBorderOrOutline is at
        a higher priority in StyleDifference.
        2. Ensure that we trigger setNeedsCompositingConfigurationUpdate on diff >= StyleDifference::RecompositeLayer.

        Test: fast/text/text-repaint-when-pointer-event-property-changes.html

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::layerStyleChanged):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::diff const):

2021-04-07  Rob Buis  <rbuis@igalia.com>

        Ignore non-null lastQuote ASSERT when continuation is broken
        https://bugs.webkit.org/show_bug.cgi?id=218576

        Reviewed by Zalan Bujtas.

        Ignore non-null lastQuote when continuation is broken.

        * rendering/updating/RenderTreeBuilder.h:
        (WebCore::RenderTreeBuilder::hasBrokenContinuation const):
        (WebCore::RenderTreeBuilder::setHasBrokenContinuation):
        * rendering/updating/RenderTreeBuilderInline.cpp:
        (WebCore::RenderTreeBuilder::Inline::splitInlines):
        * rendering/updating/RenderTreeUpdaterGeneratedContent.cpp:
        (WebCore::RenderTreeUpdater::GeneratedContent::updateQuotesUpTo):

2021-04-07  Imanol Fernandez  <ifernandez@igalia.com>

        Use frameData instead of scheduleOnNextFrame calls in WebFakeXRDevice
        https://bugs.webkit.org/show_bug.cgi?id=223580

        Reviewed by Youenn Fablet.

        This patch makes the WebFakeXRDevice code more robust by getting rid of the scheduleOnNextFrame calls.

        Tested by WebXR WPT.

        * testing/WebFakeXRDevice.cpp:
        (WebCore::SimulatedXRDevice::setViews):
        (WebCore::SimulatedXRDevice::setNativeBoundsGeometry):
        (WebCore::SimulatedXRDevice::setViewerOrigin):
        (WebCore::SimulatedXRDevice::frameTimerFired):
        (WebCore::WebFakeXRDevice::setViews):
        (WebCore::WebFakeXRDevice::setViewerOrigin):
        (WebCore::WebFakeXRDevice::setFloorOrigin):
        * testing/WebFakeXRDevice.h:
        * testing/WebXRTest.cpp:
        (WebCore::WebXRTest::simulateDeviceConnection):

2021-04-07  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Videos start playing muted in epiphany with no unmute icon visible in tab, webkit_web_view_get_is_muted() returns incorrect results
        https://bugs.webkit.org/show_bug.cgi?id=223195

        Reviewed by Eric Carlson.

        For GStreamer ports the semantics of IsPlayingAudio slightly differ from Apple ports. The
        webkit_web_view_is_playing_audio() API is expected to return true if a page is producing
        audio even though it might be muted.

        The second change affects the private player mute state when the page mute state has been
        updated.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaState const):
        (WebCore::HTMLMediaElement::pageMutedStateDidChange):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp: Logging improvements.
        (WebCore::MediaPlayerPrivateGStreamer::isMuted const):
        (WebCore::MediaPlayerPrivateGStreamer::volume const):
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfVolumeChange):
        (WebCore::MediaPlayerPrivateGStreamer::setMuted):
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfMute):

2021-04-07  Enrique Ocaña González  <eocanha@igalia.com>

        [EME][GStreamer] Abort decryptor operations immediately and without errors on flush
        https://bugs.webkit.org/show_bug.cgi?id=223742

        Reviewed by Xabier Rodriguez-Calvar.

        A decryptor transformInPlace() operation can cause potentially long waits in
        two situations:

        - transformInPlace() is waiting to get the cdmProxy.
        - The CDMProxy::decrypt() method is internally waiting for a specific key to
          become available.

        If a seek operation is performed during those long waits, the main thread will
        be blocked until the seek finishes the conditions those long waits are waiting
        for will never be fulfilled (because the operations that complete them happen
        in the main thread, which is blocked), the internal wait timeouts will trigger
        and the decoder will trigger an unrecoverable error.

        The solution for this is to break the waits by issuing the right notifications,
        and to detect the flushes performed by the seek, distinguising this special
        "abort" case from a regular error, so that the situation is no longer
        unrecoverable.

        This solution involves changes in several layers. A public
        CDMProxy::abortWaitingForKey() method is exposed to allow the decryptor to
        awake the inner waitFor() that checks for the key. The cdmProxy wait is also
        awaken in case there's no cdmProxy available yet.

        In order to distinguish if the awakenings are caused by real errors (no
        cdmProxy, no key available) or by a flush operation (caused by the seek), the
        decryptor first needs to keep track of the "flushing" state and allow other
        objects to know about it. CDMProxy is one of those objects, but due to layer
        limitations it can't directly ask about it to the decryptor (it can't "see"
        it).

        A new CDMProxyDecryptionClient interface is created, and the decryptor will
        hold an implementation of it (as CDMProxyDecryptorClientImplementation).
        CDMProxy can then know the client isAborting(), and the client will know the
        decryptor and will ask about it.

        As the pipeline, and thus the decryptor, can be destroyed at any moment,
        the client holds a WeakPtr to the decryptor and will only ask if isAborting()
        if the pointer is still alive.

        * platform/encryptedmedia/CDMProxy.cpp:
        (WebCore::CDMProxy::abortWaitingForKey const): Notify waiting threads.
        (WebCore::CDMProxy::tryWaitForKeyHandle const): Take a client and ask it if it's aborting.
        (WebCore::CDMProxy::getOrWaitForKeyHandle const): Pass the client along.
        (WebCore::CDMProxy::getOrWaitForKeyValue const): Ditto.
        * platform/encryptedmedia/CDMProxy.h: Declaration and usage of the CDMProxyDecryptionClient interface.
        * platform/graphics/gstreamer/eme/CDMProxyClearKey.cpp:
        (WebCore::CDMProxyClearKey::cencSetDecryptionKey): Pass the client along from the context.
        * platform/graphics/gstreamer/eme/CDMProxyClearKey.h: Store client in the cencDecryptContext.
        * platform/graphics/gstreamer/eme/CDMProxyThunder.cpp:
        (WebCore::CDMProxyThunder::getDecryptionSession const): Pass the client along from the context.
        (WebCore::CDMProxyThunder::decrypt): Abort operations aren't an error, so just trigger a warning if there's no session.
        * platform/graphics/gstreamer/eme/CDMProxyThunder.h: Store client in DecryptionContext.
        * platform/graphics/gstreamer/eme/WebKitClearKeyDecryptorGStreamer.cpp:
        (decrypt): Ask for client to the superclass and store it in the context.
        * platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.cpp:
        (CDMProxyDecryptionClientImplementation::CDMProxyDecryptionClientImplementation): Implementation of the CDMProxyDecryptionClient interface.
        (CDMProxyDecryptionClientImplementation::isAborting): Ask if the decryptor is flushing.
        (constructed): Initialize the client.
        (transformInPlace): Check the flush status after waiting for the CDMProxy and for the decryption performed by the subclasses. Release the lock when not needed.
        (isCDMProxyAvailable): Renamed mutex to be more generic.
        (attachCDMProxy): Ditto. Also renamed condition for the same reason.
        (sinkEventHandler): Manage isFlushing status and awake waits for cdmProxy or for session depending on the lifecycle stage. 
        (webKitMediaCommonEncryptionDecryptIsFlushing): Expose isFlushing status.
        (webKitMediaCommonEncryptionDecryptGetCDMProxyDecryptionClient): Return Weak reference to the client.
        (changeState): Renamed condition.
        (setContext): Renamed mutex.
        * platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.h: New getters for isFlushing and the client.
        * platform/graphics/gstreamer/eme/WebKitThunderDecryptorGStreamer.cpp:
        (decrypt): Ask for client to the superclass and store it in the context.

2021-04-07  Enrique Ocaña González  <eocanha@igalia.com>

        [GStreamer] Only seek to change the rate un updatePlaybackRate() when needed
        https://bugs.webkit.org/show_bug.cgi?id=224235

        Reviewed by Alicia Boya Garcia.

        A seek is used by MediaPlayerPrivateGStreamer to update the playback
        rate used in the pipeline. There's a special case when the rate is 0.0.
        This actually means "paused" and, when set, the pipeline is changed to
        PAUSED and no updatePlaybackRate() call is made because of an early
        return (and therefore, no seek). When the rate is restored to a
        non-zero value, the pipeline is set again to PLAYING, but a
        call to updatePlaybackRate() is done, which implies an unconditional
        seek.

        It should be possible to do the seek in updatePlaybackRate() only if the
        rate changed with respect to the original one, instead of always doing
        it. This would avoid unneeded seeks, which are complex operations that
        can trigger collateral issues such as the one addressed in
        https://bugs.webkit.org/show_bug.cgi?id=223742.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::updatePlaybackRate): Only seek when the playback rate hasn't changed.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h: Document m_lastPlaybackRate purpose.

2021-04-07  Rob Buis  <rbuis@igalia.com>

        Make synthesizedBaselineFromContentBox return LayoutUnit
        https://bugs.webkit.org/show_bug.cgi?id=224234

        Reviewed by Javier Fernandez.

        Make synthesizedBaselineFromContentBox return LayoutUnit. This
        makes it consistent with synthesizedBaselineFromBorderBox.

        * rendering/RenderButton.cpp:
        (WebCore::synthesizedBaselineFromContentBox):
        (WebCore::RenderButton::baselinePosition const):

2021-04-07  Alejandro G. Castro  <alex@igalia.com>

        [GTK][WPE] Wrong frame scrolled when view is horizontally scrolled with async scrolling enabled
        https://bugs.webkit.org/show_bug.cgi?id=222900

        Reviewed by Žan Doberšek.

        We need to use the scrolling offset in the parent when collecting
        the descendant layers at a point. We substract the boundsOrigin to
        make sure we transform the point considering the scrolling offset.

        Test: fast/scrolling/scrolling-inside-scrolled-overflowarea.html

        * page/scrolling/nicosia/ScrollingTreeNicosia.cpp:
        (WebCore::collectDescendantLayersAtPoint):

2021-04-07  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r274812): Release assert in Document::updateLayout() after calling focus({preventScroll: true}) on a textarea
        https://bugs.webkit.org/show_bug.cgi?id=224262

        Reviewed by Antti Koivisto.

        The regression was caused by Element::focus not updating the selection when preventScroll is set to true.
        Fixed it by always updating the selection whenever Element::focus is called.

        Test: fast/forms/textarea/textarea-focus-prevent-scroll-crash.html

        * dom/Element.cpp:
        (WebCore::Element::focus):
        (WebCore::Element::findTargetAndUpdateFocusAppearance): Renamed from revealFocusedElement.
        * dom/Element.h:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::dispatchMouseEvent):

2021-04-07  Stephan Szabo  <stephan.szabo@sony.com>

        [PlayStation] Provide a non-empty User Agent
        https://bugs.webkit.org/show_bug.cgi?id=224216

        Reviewed by Ross Kirsling.

        Add non-empty implementation of User Agent code for port.

        * platform/playstation/UserAgentPlayStation.cpp:

2021-04-06  Myles C. Maxfield  <mmaxfield@apple.com>

        [GPU Process] Simplify DisplayList::Iterator part 5: Tweak the return type of DisplayList::Iterator::operator*()
        https://bugs.webkit.org/show_bug.cgi?id=224148

        Reviewed by Wenson Hsieh.

        This patch migrates from

        struct Value {
            Optional<ItemHandle> item;
            Optional<FloatRect> extent;
            size_t itemSizeInBuffer { 0 };
        };
        Value operator*() const;

        to

        struct Value {
            ItemHandle item;
            Optional<FloatRect> extent;
            size_t itemSizeInBuffer { 0 };
        };
        Optional<Value> operator*() const

        There are two reasons for this:
        1. Philosophically, if the item is nullopt, then all the stuff in the Value is also meaningless
        2. Part of the iterator's API contract is that if the item is nullopt, you're not allowed to keep
               iterating - doing this will lead to an infinite loop. Promoting the optional makes it more
               likely that this API contract is followed in the future.

        No new tests because there is no behavior change.

        * platform/graphics/displaylists/DisplayList.cpp:
        (WebCore::DisplayList::DisplayList::asText const):
        (WebCore::DisplayList::DisplayList::dump const):
        * platform/graphics/displaylists/DisplayList.h:
        (WebCore::DisplayList::DisplayList::iterator::operator* const):
        * platform/graphics/displaylists/DisplayListReplayer.cpp:
        (WebCore::DisplayList::Replayer::replay):

2021-04-06  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] InlineFormattingState::shrinkToFit should shrink InlineItems too
        https://bugs.webkit.org/show_bug.cgi?id=224258

        Reviewed by Simon Fraser.

        * layout/inlineformatting/InlineFormattingState.h:
        (WebCore::Layout::InlineFormattingState::shrinkToFit):
        * layout/integration/LayoutIntegrationCoverage.cpp:

2021-04-06  Jean-Yves Avenard  <jya@apple.com>

        Fix logic error in MediaMetadataInit
        https://bugs.webkit.org/show_bug.cgi?id=224252
        <rdar://problem/76291386>

        Reviewed by Eric Carlson.

        Fix inverted logic error in decode that would have caused it to return early.

        * Modules/mediasession/MediaMetadataInit.h:
        (WebCore::MediaMetadataInit::decode):

2021-04-06  Sihui Liu  <sihui_liu@apple.com>

        [ Catalina WK2 Release ] http/tests/IndexedDB/storage-limit-1.https.html is a flaky failure
        https://bugs.webkit.org/show_bug.cgi?id=213292
        <rdar://problem/64447734>

        Reviewed by Geoffrey Garen.

        Test http/tests/IndexedDB/collect-IDB-objects.https.html, which runs right before 
        http/tests/IndexedDB/storage-limit-1.https.html, will delete databases after test completetion. During deletion, 
        we create a new database if it does not exist, extract database version from it, and then delete database files.
        This creation can happen during storage-limit-1.https.html run and interrupt testing for quota. To fix the 
        flakiness and make the deletion more efficient, let's not create a new database during deletion if database
        does not exist.

        * Modules/indexeddb/server/IDBBackingStore.h:
        * Modules/indexeddb/server/MemoryIDBBackingStore.cpp:
        (WebCore::IDBServer::MemoryIDBBackingStore::databaseVersion):
        * Modules/indexeddb/server/MemoryIDBBackingStore.h:
        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
        (WebCore::IDBServer::SQLiteIDBBackingStore::databaseVersion):
        * Modules/indexeddb/server/SQLiteIDBBackingStore.h:
        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::deleteBackingStore):

2021-04-06  Eric Carlson  <eric.carlson@apple.com>

        REGRESSION (r275538): [ macOS ] TestWebKitAPI.WebKitLegacy.MediaPlaybackSleepAssertion and TestWebKitAPI.SleepDisabler.Pause consistently failing
        https://bugs.webkit.org/show_bug.cgi?id=224249
        <rdar://problem/76286539>

        Reviewed by Jer Noble.

        No new tests, this fixes two API tests.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerItem): Use m_requestedRate
        when choosing the pitch correction algorithm.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setPlayerRate): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setPreservesPitch): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setPitchCorrectionAlgorithm): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::playerItemStatusDidChange): Ditto.

2021-04-06  Jer Noble  <jer.noble@apple.com>

        Unreviewed build fix after 275571: add declaration for new method (and make the constness match).

        * Modules/mediasession/MediaSessionCoordinator.cpp:
        (WebCore::MediaSessionCoordinator::currentPositionApproximatelyEqualTo const):
        (WebCore::MediaSessionCoordinator::currentPositionApproximatelyEqualTo): Deleted.
        * Modules/mediasession/MediaSessionCoordinator.h:

2021-04-06  Jer Noble  <jer.noble@apple.com>

        [MediaSession] Add optional mediaTime and hostTime arguments to the playSession() command.
        https://bugs.webkit.org/show_bug.cgi?id=224173

        Reviewed by Eric Carlson.

        When receiving a playSession() method that has an optional mediaTime argument, perform a
        seekAction before the matching playAction if the current media time is not already approximately
        equal to the mediaTime argument.

        * Modules/mediasession/MediaSessionCoordinator.cpp:
        (WebCore::MediaSessionCoordinator::playSession):
        (WebCore::MediaSessionCoordinator::currentPositionApproximatelyEqualTo):
        * Modules/mediasession/MediaSessionCoordinator.h:
        * Modules/mediasession/MediaSessionCoordinatorPrivate.h:

2021-04-06  Said Abou-Hallawa  <said@apple.com>

        Replace the Optional metadata of ImageSource by a single OptionSet and the underlying metadata
        https://bugs.webkit.org/show_bug.cgi?id=224202

        Reviewed by Simon Fraser.

        Encapsulating the metadata in a Optionals adds extra memory cost. Replace
        these Optionals by the underlying metadata and an OptionSet to tell which
        ones are cached.

        * platform/graphics/ImageSource.cpp:
        (WebCore::ImageSource::ImageSource):
        (WebCore::ImageSource::frameAtIndexCacheIfNeeded):
        Instead of assertion index < m_frames.size(), we can return defaultFrame().
        This will used in many callers which checks the size before calling it.

        (WebCore::ImageSource::clearMetadata):

        (WebCore::ImageSource::metadataCacheIfNeeded):
        (WebCore::ImageSource::firstFrameMetadataCacheIfNeeded):
        These two template functions will be used to return and cache, if needed,
        the image metadata. The first function uses the ImageDecoder while the
        second one uses the first ImageFrame of the image.

        (WebCore::ImageSource::encodedDataStatus):
        (WebCore::ImageSource::frameCount):
        (WebCore::ImageSource::repetitionCount):
        (WebCore::ImageSource::uti):
        (WebCore::ImageSource::filenameExtension):
        (WebCore::ImageSource::accessibilityDescription):
        (WebCore::ImageSource::hotSpot):
        (WebCore::ImageSource::orientation):
        (WebCore::ImageSource::densityCorrectedSize):
        (WebCore::ImageSource::sourceSize):
        (WebCore::ImageSource::singlePixelSolidColor):
        (WebCore::ImageSource::maximumSubsamplingLevel):
        (WebCore::ImageSource::frameDecodingStatusAtIndex):
        (WebCore::ImageSource::frameHasAlphaAtIndex):
        (WebCore::ImageSource::frameHasFullSizeNativeImageAtIndex):
        (WebCore::ImageSource::frameHasDecodedNativeImageCompatibleWithOptionsAtIndex):
        (WebCore::ImageSource::frameSubsamplingLevelAtIndex):
        (WebCore::ImageSource::frameSizeAtIndex):
        (WebCore::ImageSource::frameBytesAtIndex):
        (WebCore::ImageSource::frameDurationAtIndex):
        (WebCore::ImageSource::frameOrientationAtIndex):
        (WebCore::ImageSource::frameImageAtIndex):
        (WebCore::ImageSource::frameImageAtIndexCacheIfNeeded):
        (WebCore::ImageSource::metadata): Deleted.
        (WebCore::ImageSource::frameMetadataAtIndex): Deleted.
        (WebCore::ImageSource::frameMetadataAtIndexCacheIfNeeded): Deleted.
        * platform/graphics/ImageSource.h:
        (WebCore::ImageSource::frameAtIndex):

2021-04-06  Myles C. Maxfield  <mmaxfield@apple.com>

        [GPU Process] Simplify DisplayList::Iterator part 3: Reorder #include dependencies to allow for ItemBuffer{Writing,Reading}Client to know about DisplayList item types
        https://bugs.webkit.org/show_bug.cgi?id=224145

        Reviewed by Wenson Hsieh.

        ItemBuffer{Writing,Reading}Client exists within DisplayListItemBuffer.h. The DisplayList item types exist within DisplayListItems.h.

        Previously, the #include path was:
        DisplayListItems.h -> DisplayList.h -> DisplayListItemBuffer.h

        However, this means that DisplayListItemBuffer.h can't see what's inside DisplayListItems.h.

        After this patch, the #include path is:
        DisplayList.h -> DisplayListItemBuffer.h -> DisplayListItems.h

        This is important because ItemBuffer{Writing,Reading}Client have encodeItem() and decodeItem() functions, which will need to know
        about DisplayList item types if we want to migrate away from ItemHandle.

        No new tests because there is no behavior change.

        * Headers.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/displaylists/DisplayListItemBuffer.cpp:
        * platform/graphics/displaylists/DisplayListItemBuffer.h:
        * platform/graphics/displaylists/DisplayListItemBufferIdentifier.h: Added.
        * platform/graphics/displaylists/DisplayListItems.h:

2021-04-06  Brent Fulgham  <bfulgham@apple.com>

        Add additional page load diagnostic logging
        https://bugs.webkit.org/show_bug.cgi?id=224194
        <rdar://problem/76227175>

        Reviewed by Alex Christensen.

        This patch adds new logging to help us diagnose and investigate page load failures.

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::init): Add logging for some unusual conditions:
            (1) A loader cannot be created because the document loader is nullptr.
            (2) A load is cancelled because it violates security policy.
            (3) A load was cancelled during 'willSendRequest' processing.
            (4) A load was cancelled because the request was null.
        (WebCore::ResourceLoader::loadDataURL): Log when a data load was cancelled.
        (WebCore::ResourceLoader::willSendRequestInternal): Log when a cross-origin redirect is triggered, and when a redirect is
        to a dataURL and will be handled locally.
        (WebCore::ResourceLoader::didFinishLoadingOnePart): Log when a load is cancelled after it finished.
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::willSendRequestInternal):  Log when an ongoing load has unexpectedly reached terminal state. Remove a
        spammy log message that indicates when a redirect response is null (which just means its a normal load).
        (WebCore::SubresourceLoader::didFinishLoading): Log when a finished load unexpectedly did not reach terminal state.
        (WebCore::SubresourceLoader::notifyDone): Log when a load could not finish because the document loader was nullptr.

2021-04-06  Patrick Angle  <pangle@apple.com>

        Web Inspector: Grid overlay label style cleanup
        https://bugs.webkit.org/show_bug.cgi?id=224240

        Reviewed by BJ Burg.

        Clean up grid overlay label styling by:
        - Make all labels use a translucent background. This patch chooses a middle ground between the existing
        translucent labels that matched the color of the rulers, and the solid white background used by line
        numbers/names for maximum legibility.
        - Bumping the label padding by 1px to improve legibility.
        - Bumping the label arrow size by 2px to make it easier to understand where a label is pointing, particularly
        for labels where the edge position is not `Middle`.

        * inspector/InspectorOverlay.cpp:
        (WebCore::InspectorOverlay::drawGridOverlay):
        (WebCore::InspectorOverlay::buildGridOverlay):

2021-04-06  Patrick Angle  <pangle@apple.com>

        Web Inspector: Grid overlay track size labels should show implicit `auto` value and no computed size
        https://bugs.webkit.org/show_bug.cgi?id=224199

        Reviewed by BJ Burg.

        Previously, implicit `auto` track sizes were only shown if there were some number of explicit track sizes for
        that track direction (rows/columns). To resolve this, `authoredGridTrackSizes` now only returns explicit
        authored track sizes, and buildGridOverlay then infers `auto` for all remaining tracks. This will also help
        resolve bug 224200 by providing a way to distinguish explicit and implicit tracks.

        After discussion, this patch also removes the computed size of tracks from labels, as that information is
        available in the box model diagram for children elements and having that information in these labels further
        cramped often limited space for overlay labels.

        * inspector/InspectorOverlay.cpp:
        (WebCore::authoredGridTrackSizes):
        (WebCore::InspectorOverlay::buildGridOverlay):

2021-04-06  Patrick Angle  <pangle@apple.com>

        Web Inspector: Grid overlay line numbers should not include implicit tracks in negative line number calculations.
        https://bugs.webkit.org/show_bug.cgi?id=224200

        Reviewed by BJ Burg.

        Use the `authoredTrackColumnSizes`/`authoredTrackRowSizes` to determine if the line is an explicit grid line or
        implicit grid line (starting with the patch for bug 224199 those vectors will only contain the explicit lines).
        Only explicit lines should have a negative number for addressing the line, and those numbers should start with
        the last explicit line. Because each track is bounded by two lines, there will always be one more explicit line
        than there is explicit track, including the case where there are no explicit tracks, which will still have a
        single explicit line numbered `-1`.

        Additionally, line numbers are now separated by an em-space to improve legibility, where previously the bullet
        looked like a multiplication symbol between two numbers.

        * inspector/InspectorOverlay.cpp:
        (WebCore::InspectorOverlay::buildGridOverlay):

2021-04-06  Mike Gorse  <mgorse@suse.com>

        Build fails when video is disabled
        https://bugs.webkit.org/show_bug.cgi?id=224198

        Reviewed by Adrian Perez de Castro.

        Add #if ENABLE(VIDEO) where needed.

        * editing/markup.cpp:
        (WebCore::createPageForSanitizingWebContent):
        * page/Page.cpp:
        * page/Page.h:
        * platform/graphics/GraphicsContext.cpp:
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/GraphicsContextGL.h:
        * platform/graphics/GraphicsContextImpl.h:
        * platform/graphics/cairo/GraphicsContextImplCairo.cpp:
        * platform/graphics/cairo/GraphicsContextImplCairo.h:
        * platform/graphics/displaylists/DisplayList.cpp:
        (WebCore::DisplayList::DisplayList::append):
        * platform/graphics/displaylists/DisplayListItemBuffer.cpp:
        (WebCore::DisplayList::ItemHandle::apply):
        (WebCore::DisplayList::ItemHandle::destroy):
        (WebCore::DisplayList::ItemHandle::safeCopy const):
        * platform/graphics/displaylists/DisplayListItemType.cpp:
        (WebCore::DisplayList::sizeOfItemInBytes):
        (WebCore::DisplayList::isDrawingItem):
        (WebCore::DisplayList::isInlineItem):
        * platform/graphics/displaylists/DisplayListItemType.h:
        * platform/graphics/displaylists/DisplayListItems.cpp:
        (WebCore::DisplayList::operator<<):
        * platform/graphics/displaylists/DisplayListItems.h:
        * platform/graphics/displaylists/DisplayListRecorder.cpp:
        * platform/graphics/displaylists/DisplayListRecorder.h:
        * platform/graphics/nicosia/cairo/NicosiaCairoOperationRecorder.cpp:
        * platform/graphics/nicosia/cairo/NicosiaCairoOperationRecorder.h:
        * platform/graphics/opengl/GraphicsContextGLOpenGL.cpp:
        * platform/graphics/opengl/GraphicsContextGLOpenGL.h:
        * platform/graphics/win/GraphicsContextImplDirect2D.cpp:
        * platform/graphics/win/GraphicsContextImplDirect2D.h:
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged):

2021-04-06  Philippe Normand  <pnormand@igalia.com>

        REGRESSION(r275275): Broke some build configs lacking openh264
        https://bugs.webkit.org/show_bug.cgi?id=224244

        Unreviewed, manual revert of r275275 and r275409.

        * platform/mediastream/libwebrtc/GStreamerVideoCommon.cpp:
        (WebCore::gstreamerSupportedH264Codecs):
        (WebCore::supportedH264Formats): Deleted.
        * platform/mediastream/libwebrtc/GStreamerVideoCommon.h:
        * platform/mediastream/libwebrtc/GStreamerVideoDecoderFactory.cpp:
        * platform/mediastream/libwebrtc/GStreamerVideoEncoderFactory.cpp:
        (WebCore::GStreamerVideoEncoderFactory::CreateVideoEncoder):
        (WebCore::GStreamerVideoEncoderFactory::GetSupportedFormats const):

2021-04-06  Simon Fraser  <simon.fraser@apple.com>

        Shrink some IndexedDB-related classes
        https://bugs.webkit.org/show_bug.cgi?id=224221

        Reviewed by Geoffrey Garen.

        Shrink some enum classes, and re-order data members to optimize packing in 
        IDBRequest and IDBKeyRangeData.

        A couple of data members of IDBRequest were made private with protected setters.

        This shrinks IDBRequest from 496 bytes to 448 bytes, and IDBKeyRangeData from 96
        to 72 bytes on x86_64.

        * Modules/indexeddb/IDBKeyData.h:
        * Modules/indexeddb/IDBKeyRangeData.cpp:
        (WebCore::IDBKeyRangeData::IDBKeyRangeData):
        * Modules/indexeddb/IDBKeyRangeData.h:
        (WebCore::IDBKeyRangeData::IDBKeyRangeData):
        * Modules/indexeddb/IDBObjectStore.h:
        * Modules/indexeddb/IDBOpenDBRequest.cpp:
        (WebCore::IDBOpenDBRequest::IDBOpenDBRequest):
        (WebCore::IDBOpenDBRequest::versionChangeTransactionDidFinish):
        (WebCore::IDBOpenDBRequest::onSuccess):
        (WebCore::IDBOpenDBRequest::onUpgradeNeeded):
        (WebCore::IDBOpenDBRequest::onDeleteDatabaseSuccess):
        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::IDBRequest):
        * Modules/indexeddb/IDBRequest.h:
        (WebCore::IDBRequest::setReadyState):
        (WebCore::IDBRequest::setShouldExposeTransactionToDOM):
        * Modules/indexeddb/IndexedDB.h:
        * Modules/indexeddb/client/IDBConnectionToServerDelegate.h:
        * Modules/indexeddb/server/MemoryIndex.h:
        * Modules/indexeddb/server/MemoryObjectStore.h:
        * Modules/indexeddb/shared/IDBCursorInfo.h:
        * Modules/indexeddb/shared/IDBGetAllRecordsData.h:

2021-04-06  Ryosuke Niwa  <rniwa@webkit.org>

        Assert failure in isCloneInShadowTreeOfSVGUseElement
        https://bugs.webkit.org/show_bug.cgi?id=224174

        Reviewed by Darin Adler and Antti Koivisto.

        The bug was caused by two related but distinct issues:
        1. An element can have an instance that had been removed from a use element's shadow tree
           but not yet deleted. Because SVGElement clears its correspondingElement in its destructor,
           when addEventListener is called on such an element, it can try to add an event listener
           on this instance which is in the process of getting disposed.
        2. DOM mutation events can be fired on the corresponding element of an instance inside
           a use element’s shadow tree with EventQueueScope in the stack when the event is schedueld
           via Node::dispatchScopedEvent, e.g. because use element's shadow tree was updated during
           a style update at the beginning of document.execComand. Because SVGUseElement::cloneTarget
           constructs the shadow tree by cloning the original tree while it's disconnected from the
           document, Node::dispatchSubtreeModifiedEvent sees isInShadowTree() to be false and happily
           tries to dispach DOMSubtreeModified event using Node::dispatchScopedEvent. This works fine
           when the event is dispatched synchronously since these elements had never been exposed to
           any scripts yet and they are still disconnected so no scripts have had an opportunity to
           attach an event listener. But when EventQueueScope in the stack, Node::dispatchScopedEvent
           will queue up the event and fire it later when those instance elements had been inserted
           into use element's shadow tree.

        This patch addresses (1) by severing correspondingElement relationship as soon as an instance
        is removed from its use element's shadow tree, and (2) by not dispatching a scheduled mutation
        event if the target is inside a shadow tree. Note that this patch also addresses (2) for
        a regular shadow tree attached by author scripts.

        Tests: fast/shadow-dom/mutation-event-in-shadow-tree.html
               svg/dom/mutate-symbol-subtree-referenced-by-use-during-execCommand.html
               svg/dom/update-svg-use-shadow-tree-with-execCommand.html

        * dom/ScopedEventQueue.cpp:
        (WebCore::ScopedEventQueue::dispatchEvent const):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::~SVGElement):
        (WebCore::SVGElement::removedFromAncestor):
        (WebCore::SVGElement::addEventListener):
        (WebCore::SVGElement::removeEventListener):

2021-04-06  Eric Carlson  <eric.carlson@apple.com>

        [Cocoa] audio played at 2x speed video is not pitch corrected
        https://bugs.webkit.org/show_bug.cgi?id=224238
        rdar://75868284

        Reviewed by Jer Noble.

        We need to use the _intended_ playback rate when deciding which pitch correction
        algorithm to use. MediaPlayerPrivateAVFoundationObjC::m_cachedRate is used for this,
        but r274592 stopped setting m_cachedRate in MediaPlayerPrivateAVFoundationObjC::setPlayerRate
        because it is also set when AVPlayer KVOs that the rate changed.

        Tested manually.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setPlayerRate): Set m_cachedRate.

2021-04-06  David Kilzer  <ddkilzer@apple.com>

        UBSan: RenderView.cpp:831:9: runtime error: load of value nnn, which is not a valid value for type 'bool'
        <https://webkit.org/b/224157>

        Reviewed by Darin Adler.

        Tests: editing/inserting/insert-list-user-select-none-crash.html
               fast/dom/clientWidthAfterDocumentIsRemoved.html
               fast/scrolling/iframe-scrollable-after-back.html
               fast/text/crash-font-family-parsed.html
               html5lib/generated/run-template-write.html
               imported/blink/plugins/renderless-plugin-creation-doesnt-crash-without-frame.html
               imported/w3c/web-platform-tests/css/cssom-view/scrolling-no-browsing-context.html
               imported/w3c/web-platform-tests/dom/ranges/Range-mutations-appendChild.html
               imported/w3c/web-platform-tests/html/browsers/the-window-object/named-access-on-the-window-object/navigated-named-objects.window.html
               imported/w3c/web-platform-tests/html/semantics/forms/the-label-element/clicking-interactive-content.html
               imported/w3c/web-platform-tests/html/syntax/parsing/html5lib_template.html
               imported/w3c/web-platform-tests/html/syntax/parsing/template/creating-an-element-for-the-token/template-owner-document.html
               imported/w3c/web-platform-tests/selection/addRange-12.html
               imported/w3c/web-platform-tests/shadow-dom/untriaged/html-elements-in-shadow-trees/html-forms/test-001.html
               media/track/track-remove-crash.html
               svg/custom/animate-reference-crash.html

        * rendering/RenderView.h:
        (WebCore::RenderView::m_wasAccumulatingRepaintRegion):
        - Add default initialization.

2021-04-06  Jiewen Tan  <jiewen_tan@apple.com>

        WebCrypto in Safari will not AES-GCM encrypt 0 bytes
        https://bugs.webkit.org/show_bug.cgi?id=224083
        <rdar://75093377>

        Reviewed by Youenn Fablet.

        CommonCrypto will bail out both the encryption and decryption process if the dataOut is a null pointer.
        To workaround the issue, this patch forces the dataOut to be a non-null pointer.

        Test: crypto/subtle/aes-gcm-generate-key-encrypt-decrypt-null-plain-text.html

        * crypto/mac/CryptoAlgorithmAES_GCMMac.cpp:
        (WebCore::encryptAES_GCM):
        (WebCore::decyptAES_GCM):

2021-04-06  Patrick Angle  <pangle@apple.com>

        Web Inspector: Grid overlay areas appear offset from their actual areas when the grid container has a border set
        https://bugs.webkit.org/show_bug.cgi?id=224201

        Reviewed by BJ Burg.

        As of r274096, it is no longer correct to subtract the first track's position for either axis from the edge
        lines of areas. This change resolves that, bringing this math in line with how other grid lines are laid out.

        * inspector/InspectorOverlay.cpp:
        (WebCore::InspectorOverlay::buildGridOverlay):

2021-04-06  Alicia Boya García  <aboya@igalia.com>

        [GStreamer] At EOS, change position to match duration, not the other way around.
        https://bugs.webkit.org/show_bug.cgi?id=224237

        Reviewed by Philippe Normand.

        The criteria used to check if playback has finished is currentTime >=
        duration. Currently MediaPlayerPrivateGStreamer::didEnd() ensures this
        in an awkward way: by changing the duration so that it matches
        currentTime, rather than the other way around.

        This meant a duration change at the end of playback most of the time,
        with a slightly different duration each time, since currentTime is
        cached periodically.

        This patch reworks that function to work more naturally and less racy:

        First, only if the stream doesn't have a set duration (e.g. live
        stream), we set a duration to currentTime, as defined in the spec.

        Second, at EOS we update currentTime to match duration, rather than
        the other way around.

        This patch doesn't introduce changes in test results.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::didEnd):

2021-04-06  Tyler Wilcock  <twilco.o@protonmail.com>

        Non-unified build fixes, early April 2021
        https://bugs.webkit.org/show_bug.cgi?id=224091

        Reviewed by Simon Fraser.
        
        The SelectionRestorationMode enum has been moved out of Document.h so
        the entirety of Document.h doesn't need to be included just for that
        enum.

        * Headers.cmake:
        Add SelectionRestorationMode.h.

        * WebCore.xcodeproj/project.pbxproj:
        Add SelectionRestorationMode.h.
        
        * dom/Document.h:
        Move SelectionRestorationMode enum to its own file.

        * dom/Element.h:
        Add forward declaration for enum class SelectionRestorationMode. Rearrange
        existing enum class forward declarations alphabetically.

        * dom/SelectionRestorationMode.h: Added.

        * dom/FocusOptions.h:
        * history/CachedPage.cpp:
        * html/HTMLFormControlElement.cpp:
        * html/HTMLInputElement.h:
        * html/HTMLLabelElement.cpp:
        * html/HTMLLegendElement.cpp:
        * html/HTMLTextAreaElement.h:
        * html/InputType.cpp:
        * page/EventHandler.cpp:
        * page/FocusController.cpp:
        Add #include "SelectionRestorationMode.h".

        * workers/service/context/ServiceWorkerThreadProxy.cpp:
        Add #include "ServiceWorkerGlobalScope.h" to fix:
        ServiceWorkerThreadProxy.cpp:287:53: error: invalid use of incomplete type
        'WTF::match_constness_t<WebCore::ScriptExecutionContext, WebCore::ServiceWorkerGlobalScope>'
        {aka 'class WebCore::ServiceWorkerGlobalScope'}

2021-04-06  Aditya Keerthi  <akeerthi@apple.com>

        [iOS][FCR] Use opaque system colors for control backgrounds
        https://bugs.webkit.org/show_bug.cgi?id=224131
        <rdar://problem/75975709>

        Reviewed by Tim Horton.

        r274600 introduced the use of system colors for control backgrounds.
        However, the system fill colors are not opaque, leading to poor
        visibility on certain page/element backgrounds.

        To fix, use an opaque variant of the system fill colors, as if they
        were drawn on top of a white background. Note that UIKit does not
        expose these opaque variants, leaving us to make the adjustments
        ourselves.

        * css/CSSValueKeywords.in:

        Replace the system fill color keywords with opaque variants. The old
        colors are fine to remove, since they were only introduced in r274600,
        and have no external clients.

        * css/html.css:

        Replace all system fill colors with their opaque variants.
 
        * rendering/RenderThemeIOS.mm:
        (WebCore::cssValueSystemColorInformationList):

        Renamed CSSValueIDAndSelector to CSSValueSystemColorInformation to
        account for the addition of new fields to support opaque fill colors.

        Storing the blendOverWhite and opacity fields in the list allows us
        to resolve the color once and store it in a cache, rather than
        applying the adjustments each time.

        (WebCore::systemColorFromCSSValueSystemColorInformation):

        Use the blendOverWhite and opacity information from the
        CSSValueSystemColorInformation to determine the final color.

        (WebCore::systemColorFromCSSValueID):

        Call into systemColorFromCSSValueSystemColorInformation to avoid
        duplicating logic.

        (WebCore::RenderThemeIOS::cssValueToSystemColorMap):
        (WebCore::RenderThemeIOS::systemColor):
        (WebCore::RenderThemeIOS::checkboxRadioBackgroundColor):
        (WebCore::RenderThemeIOS::paintProgressBarWithFormControlRefresh):
        (WebCore::RenderThemeIOS::paintMeter):
        (WebCore::RenderThemeIOS::paintSliderTrackWithFormControlRefresh):

2021-04-06  Tadeu Zagallo  <tzagallo@apple.com>

        Handle OOM in ScriptExecutionContext::reportUnhandledPromiseRejection
        https://bugs.webkit.org/show_bug.cgi?id=223777
        <rdar://66271491>

        Reviewed by Yusuke Suzuki.

        It's possible to fail to allocate the error message in ScriptExecutionContext::reportUnhandledPromiseRejection,
        in which case we should report an OOM exception instead of crashing.

        Test: js/Promise-reject-large-string.html

        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::reportUnhandledPromiseRejection):

2021-04-06  Patrick Angle  <pangle@apple.com>

        Web Inspector: Grid overlay does not honor writing modes and RTL layout direction.
        https://bugs.webkit.org/show_bug.cgi?id=224127

        Reviewed by BJ Burg.

        Grid overlays did not previous honor writing modes and RTL layout direction correctly. The underlying math was
        correct, but the 'origin' of the element's grid, and the direction in which rows and columns increased, was not
        handled correctly. This patch resolves this by taking writing mode and direction into account when calculating
        row/column line positions as well as correctly orienting layout label arrows based on the current writing
        mode/direction.

        Area names have been moved to the center of their respective areas, which both helps to make sure the label is
        within the area for all writing modes/direction/transformation, as well as improved legibility on smaller grids
        where area names were previously behind other labels.

        * inspector/InspectorOverlay.cpp:
        (WebCore::InspectorOverlay::backgroundPathForLayoutLabel):
        (WebCore::InspectorOverlay::drawLayoutLabel):
        (WebCore::InspectorOverlay::drawGridOverlay):
        - `backgroundPathForLayoutLabel`, `drawLayoutLabel`, and `drawGridOverlay` now interpret the `None` arrow direction
        as using the label's location as its center, not top-left.
        (WebCore::authoredGridTrackSizes):
        - Drive-by removal of extra whitespace.
        (WebCore::InspectorOverlay::buildGridOverlay):
        - Use the element's computed style to determine writing mode and direction (which takes into account the `dir` attribute).
        - Adjust columnLineAt and rowLineAt calculations based on writing mode and direction.
        - Adjust all arrow directions and positions based on writing mode and direction.


2021-04-06  Stephan Szabo  <stephan.szabo@sony.com>

        [PlayStation] Fix build of DiagnosticLoggingDomain.h
        https://bugs.webkit.org/show_bug.cgi?id=224205

        Reviewed by Don Olmstead.

        No new tests, build fix only.

        * page/DiagnosticLoggingDomain.h: Include wtf/EnumTraits.h

2021-04-06  Philippe Normand  <pnormand@igalia.com>

        REGRESSION(r274358) [GStreamer] http/tests/images/mp4-partial-load.html is flaky crashing inside GStreamer
        https://bugs.webkit.org/show_bug.cgi?id=223636

        Reviewed by Carlos Alberto Lopez Perez.

        Ensure the GStreamer messages are always processed synchronously, even when the handler is
        called from another thread. Without blocking in the latter case, the select-streams event
        might be sent to decodebin too late. It has to be sent as a synchronous reaction to the
        stream-collection message.

        * platform/graphics/gstreamer/ImageDecoderGStreamer.cpp:
        (WebCore::ImageDecoderGStreamer::InnerDecoder::handleMessage):
        (WebCore::ImageDecoderGStreamer::InnerDecoder::preparePipeline):
        * platform/graphics/gstreamer/ImageDecoderGStreamer.h:

2021-04-06  Zalan Bujtas  <zalan@apple.com>

        [LFC][Integration] Enable inline box support (RenderInline)
        https://bugs.webkit.org/show_bug.cgi?id=220148
        <rdar://problem/72768785>

        Reviewed by Antti Koivisto.

        Use the modern line layout for content like <span>content inside an inline box</span>.

        * layout/integration/LayoutIntegrationCoverage.cpp:

2021-04-06  Philippe Normand  <pnormand@igalia.com>

        [GStreamer][WebRTC] Audio is not played from an audio element when the srcObject object has unstarted video tracks
        https://bugs.webkit.org/show_bug.cgi?id=209163

        Reviewed by Xabier Rodriguez-Calvar.

        Ensure no MediaStream (active) video tracks can be added in a pipeline representing an <audio> element.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::sourceSetup):
        (WebCore::MediaPlayerPrivateGStreamer::hasFirstSampleReachedSink const):
        (WebCore::MediaPlayerPrivateGStreamer::videoSinkCapsChanged):
        (WebCore::MediaPlayerPrivateGStreamer::playbackPosition const):
        (WebCore::MediaPlayerPrivateGStreamer::updateTracks):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        * platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:
        (webkitMediaStreamSrcPostStreamCollection):
        (webkitMediaStreamSrcSetStream):
        * platform/mediastream/gstreamer/GStreamerMediaStreamSource.h:

2021-04-06  Philippe Normand  <pnormand@igalia.com>

        [GTK][GStreamer] Web Audio - Media element source - Audio is cracking.
        https://bugs.webkit.org/show_bug.cgi?id=196293

        Reviewed by Xabier Rodriguez-Calvar.

        The provider client might request samples faster than the current clock speed, so this sink
        should process buffers as fast as possible. The cracks were consequence of the audio sink of
        the AudioDestination starving off.

        * platform/audio/gstreamer/AudioSourceProviderGStreamer.cpp:
        (WebCore::AudioSourceProviderGStreamer::handleNewDeinterleavePad):

2021-04-06  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Heap allocation exceptions
        https://bugs.webkit.org/show_bug.cgi?id=224188

        Reviewed by Xabier Rodriguez-Calvar.

        The current GStreamer audio-related backends can't yet avoid heap allocations in the audio
        thread, so we need exceptions for those cases.

        * platform/audio/gstreamer/AudioSourceProviderGStreamer.cpp:
        (WebCore::AudioSourceProviderGStreamer::provideInput):
        * platform/graphics/gstreamer/GstAllocatorFastMalloc.cpp:
        (gstMemoryFastMallocNew):
        * platform/mediastream/gstreamer/RealtimeOutgoingAudioSourceLibWebRTC.cpp:
        (WebCore::RealtimeOutgoingAudioSourceLibWebRTC::audioSamplesAvailable):

2021-04-06  Philippe Normand  <pnormand@igalia.com>

        [GStreamer][MediaStream] AudioSource triggering critical warnings
        https://bugs.webkit.org/show_bug.cgi?id=224180

        Reviewed by Xabier Rodriguez-Calvar.

        Keep track of audio channel offsets and store them as metadata in audio buffers. This is
        used by downstream elements such as the audio convert elements.

        * Modules/webaudio/MediaStreamAudioSourceGStreamer.cpp:
        (WebCore::copyBusData):
        (WebCore::MediaStreamAudioSource::consumeAudio):

2021-04-06  Antti Koivisto  <antti@apple.com>

        [LFC][Integration] Disable LFC if paginated context has inline boxes
        https://bugs.webkit.org/show_bug.cgi?id=224222

        Reviewed by Zalan Bujtas.

        There are no known problems with this combination but it is untested.

        * layout/integration/LayoutIntegrationCoverage.cpp:
        (WebCore::LayoutIntegration::canUseForChild):
        
        Pass in the RenderBlockFlow and move the existing test requiring it here too.
        
        (WebCore::LayoutIntegration::canUseForLineLayoutWithReason):
        
2021-04-06  Keith Miller  <keith_miller@apple.com>

        CloneDeserializer should use ArrayBuffer::tryCreate
        https://bugs.webkit.org/show_bug.cgi?id=224218

        Reviewed by Antti Koivisto.

        Right now CloneDeserializer assumes that every ArrayBuffer allocation during
        deserialization will succeed. This is silly since it's an array-like object.
        It should call tryCreate and fail the deserialization instead.

        Test: fast/dom/Window/post-message-large-array-buffer-should-not-crash.html

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneDeserializer::readArrayBuffer):

2021-04-06  Stephan Szabo  <stephan.szabo@sony.com>

        [PlayStation] Change mediaControlsLocalizedStrings to use unicode escapes
        https://bugs.webkit.org/show_bug.cgi?id=224195

        Reviewed by Yusuke Suzuki.

        * en.lproj/mediaControlsLocalizedStrings.js:

        Switch from literal smart quotes to unicode escapes.

2021-04-06  Rob Buis  <rbuis@igalia.com>

        Migrate layout ascents and descents to LayoutUnits instead of ints
        https://bugs.webkit.org/show_bug.cgi?id=133040

        Reviewed by Zalan Bujtas.

        Migrate layout ascents and descents to LayoutUnits instead of ints.
        The actual ascent/descent values are still integral.

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::adjustMaxAscentAndDescent):
        (WebCore::InlineFlowBox::computeLogicalBoxHeights):
        * rendering/InlineFlowBox.h:
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::alignBoxesInBlockDirection):
        (WebCore::setAscentAndDescent):
        (WebCore::RootInlineBox::ascentAndDescentForBox const):
        * rendering/RootInlineBox.h:

2021-04-06  Chris Lord  <clord@igalia.com>

        BidiContext caching is not thread-safe
        https://bugs.webkit.org/show_bug.cgi?id=224179

        Reviewed by Darin Adler.

        Make BidiContext ThreadSafeRefCounted and make shared context creation
        thread-safe. This is needed by OffscreenCanvas to use text in Workers.

        No new tests, covered by existing tests.

        * platform/text/BidiContext.cpp:
        (WebCore::BidiContext::create):
        * platform/text/BidiContext.h:

2021-04-06  Frédéric Wang  <fwang@igalia.com>

        Nullptr crash in EventPath::eventTargetRespectingTargetRules
        https://bugs.webkit.org/show_bug.cgi?id=222718

        Reviewed by Ryosuke Niwa.

        During executions of "undo" and "redo" commands, beforeinput and input events are dispatched
        on root editable elements. It is however possible that these elements had been disconnected,
        causing nullptr crash. This patch exits the command execution early if that's the case.

        Test: editing/undo/undo-with-disconnected-editable-element-crash.html

        * editing/CompositeEditCommand.cpp:
        (WebCore::EditCommandComposition::areRootEditabledElementsConnected): Add helper function
        to check whether m_startingRootEditableElement and m_endingRootEditableElement are still
        connected.
        (WebCore::EditCommandComposition::unapply): Exit early if root editable elements are no
        longer connected. Put this after the layout update.
        (WebCore::EditCommandComposition::reapply): Ditto.
        * editing/CompositeEditCommand.h: Declare new helper function.

2021-03-24  Sergio Villar Senin  <svillar@igalia.com>

        [css-grid] Initialize auto-repeat data in RenderStyle in applyInitialGridTemplate{Columns|Rows}
        https://bugs.webkit.org/show_bug.cgi?id=222852

        Reviewed by Antti Koivisto.

        We should initialize the auto repeat data (like auto repeat tracks or the insertion point) whenever
        applyInitialGridTemplateXXX is called. That method is normally called using different RenderStyle's
        but under some circumstances it might be the same. For those cases we wouldn't like to end up with
        obsolete data from a previous style resolution.

        The same applies also to the applyInheritGridTemplateXXX calls. We're also removing a duplicate call
        to setGridAutoRepeat{Row|Column}sInsertionPoint() that is not needed at all.

        In order to have a single place with all the style properties affecting columns and rows, all the set
        calls were moved to a macro that is used by all the apply{Initial|Inherit}GridTemplate{Columns|Rows}
        methods. This would allow us to prevent eventual out-of-sync issues like this one.

        * style/StyleBuilderCustom.h:
        (WebCore::Style::BuilderCustom::applyInitialGridTemplateColumns):
        (WebCore::Style::BuilderCustom::applyInheritGridTemplateColumns):
        (WebCore::Style::BuilderCustom::applyInitialGridTemplateRows):
        (WebCore::Style::BuilderCustom::applyInheritGridTemplateRows):

2021-04-06  Rob Buis  <rbuis@igalia.com>

        Move synthesizedBaselineFromBorderBox to RenderBox
        https://bugs.webkit.org/show_bug.cgi?id=224186

        Reviewed by Javier Fernandez.

        Move synthesizedBaselineFromBorderBox to RenderBox since there are
        various call sites using it.

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::inlineBlockBaseline const):
        * rendering/RenderBox.cpp:
        (WebCore::synthesizedBaselineFromBorderBox):
        * rendering/RenderBox.h:
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::synthesizedBaselineFromBorderBox): Deleted.
        * rendering/RenderGrid.cpp:
        (WebCore::synthesizedBaselineFromBorderBox): Deleted.

2021-04-05  Simon Fraser  <simon.fraser@apple.com>

        Wasted vector capacity in CSSSegmentedFontFace
        https://bugs.webkit.org/show_bug.cgi?id=224167

        Reviewed by Myles C. Maxfield.

        Shrink FontRanges.m_ranges. This saves about 12KB on youtube.com.

        * css/CSSSegmentedFontFace.cpp:
        (WebCore::CSSSegmentedFontFace::fontRanges):
        * platform/graphics/FontRanges.h:
        (WebCore::FontRanges::shrinkToFit):

2021-04-05  Chris Dumez  <cdumez@apple.com>

        Make sure we no longer show the previous page when running a JS prompt
        https://bugs.webkit.org/show_bug.cgi?id=215782
        <rdar://problem/67698601>

        Reviewed by Darin Adler.

        Add linked-on-after check for the behavior change to minimize the risk of
        breakage.

        * platform/cocoa/VersionChecks.h:

2021-04-05  Alex Christensen  <achristensen@webkit.org>

        Resurrect Mac CMake build
        https://bugs.webkit.org/show_bug.cgi?id=224084

        Reviewed by Tim Horton.

        * PlatformMac.cmake:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/mac/WebGLBlocklist.mm:
        * platform/text/cocoa/LocalizedDateCache.h: Renamed from Source/WebCore/platform/text/ios/LocalizedDateCache.h.
        * platform/text/cocoa/LocalizedDateCache.mm: Renamed from Source/WebCore/platform/text/ios/LocalizedDateCache.mm.
        (WebCore::localizedDateCache):
        (WebCore::_localeChanged):
        (WebCore::LocalizedDateCache::LocalizedDateCache):
        (WebCore::LocalizedDateCache::~LocalizedDateCache):
        (WebCore::LocalizedDateCache::localeChanged):
        (WebCore::LocalizedDateCache::formatterForDateType):
        (WebCore::LocalizedDateCache::maximumWidthForDateType):
        (WebCore::LocalizedDateCache::createFormatterForType):
        (WebCore::LocalizedDateCache::calculateMaximumWidth):
        * testing/cocoa/WebViewVisualIdentificationOverlay.mm:

2021-04-05  Simon Fraser  <simon.fraser@apple.com>

        Wasted vector capacity in SVGPathByteStream
        https://bugs.webkit.org/show_bug.cgi?id=224165

        Reviewed by Said Abou-Hallawa.

        On youtube.com, about 50KB of vector capacity is wasted in SVGPathByteStream,
        so shrink them after parsing.

        * svg/SVGPathByteStream.h:
        (WebCore::SVGPathByteStream::shrinkToFit):
        * svg/SVGPathParser.cpp:
        (WebCore::SVGPathParser::parseToByteStream):

2021-04-05  Simon Fraser  <simon.fraser@apple.com>

        Wasted vector capacity in CSSVariableData
        https://bugs.webkit.org/show_bug.cgi?id=224164

        Reviewed by Anders Carlsson.

        Shrink m_tokens. This saves 2.7MB on youtube.com.

        * css/CSSVariableData.cpp:
        (WebCore::CSSVariableData::CSSVariableData):

2021-04-05  Wenson Hsieh  <wenson_hsieh@apple.com>

        REGRESSION: ASSERTION FAILED: settings().textAutosizingEnabled() && settings().textAutosizingUsesIdempotentMode() on various tests
        https://bugs.webkit.org/show_bug.cgi?id=209450
        <rdar://problem/60799255>

        Reviewed by Tim Horton.

        When running layout tests without idempotent text autosizing after layout tests with idempotent text autosizing
        enabled, it's possible to get into a state where the text size adjustment timer (which is used to schedule
        idempotent text autosizing style adjustments) is scheduled, but idempotent text autosizing is disabled before
        the timer fires. This causes the assertion in `resetIdempotentTextAutosizingIfNeeded` to fail, leading to a
        debug assertion.

        To prevent this, we simply add a client method to call out to WebPage to stop its idempotent text autosizing
        timer when the idempotent text autosizing WebCore setting changes to disabled.

        This fixes assertions on these four tests, which are normally run after fast/text-autosizing:
        - fast/text/control-characters/visible-control-characters-1.html
        - fast/text/firstline/001.html
        - fast/text-indicator/text-indicator-empty-link.html
        - fast/text/basic/001.html

        * page/ChromeClient.h:
        (WebCore::ChromeClient::textAutosizingUsesIdempotentModeChanged):

        Add the new chrome client hook (see WebKit2 change for more details).

        * page/SettingsBase.cpp:
        (WebCore::SettingsBase::textAutosizingUsesIdempotentModeChanged):

        Replace the existing settings change handler (`setNeedsRecalcStyleInAllFrames`) with a custom change handler
        (`textAutosizingUsesIdempotentModeChanged`) that invokes the client hook above, in addition to flagging all
        frames for a style recalc.

        * page/SettingsBase.h:

2021-04-05  Simon Fraser  <simon.fraser@apple.com>

        Shrink the Vector<> of keyframe values
        https://bugs.webkit.org/show_bug.cgi?id=224154

        Reviewed by Sam Weinig.

        The Vector<double> returned by CSSParserImpl::consumeKeyframeKeyList()
        wasted 152KB of vector capacity on nytimes.com pages, so shrink it.

        * css/parser/CSSParserImpl.cpp:
        (WebCore::CSSParserImpl::consumeKeyframeKeyList):

2021-04-05  Zalan Bujtas  <zalan@apple.com>

        No need to update the list marker number during internal move (e.g. result of anonymous collapsing)
        https://bugs.webkit.org/show_bug.cgi?id=224142
        <rdar://76101241>

        Reviewed by Antti Koivisto.

        Let's not update the marker numbers when the reason for re-parenting is "internal move"
        which means the renderer's insertion point remains the same (e.g collapsing its anonymous parent). 

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::insertedIntoTree):
        (WebCore::RenderElement::willBeRemovedFromTree):
        * rendering/RenderElement.h:
        * rendering/RenderFragmentContainer.cpp:
        (WebCore::RenderFragmentContainer::insertedIntoTree):
        (WebCore::RenderFragmentContainer::willBeRemovedFromTree):
        * rendering/RenderFragmentContainer.h:
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::insertedIntoTree):
        (WebCore::RenderListItem::willBeRemovedFromTree):
        * rendering/RenderListItem.h:
        * rendering/RenderMultiColumnFlow.cpp:
        (WebCore::RenderMultiColumnFlow::willBeRemovedFromTree):
        * rendering/RenderMultiColumnFlow.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::insertedIntoTree):
        (WebCore::RenderObject::willBeRemovedFromTree):
        * rendering/RenderObject.h:
        * rendering/RenderQuote.cpp:
        (WebCore::RenderQuote::insertedIntoTree):
        (WebCore::RenderQuote::willBeRemovedFromTree):
        * rendering/RenderQuote.h:
        * rendering/RenderTableCaption.cpp:
        (WebCore::RenderTableCaption::insertedIntoTree):
        (WebCore::RenderTableCaption::willBeRemovedFromTree):
        * rendering/RenderTableCaption.h:
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::willBeRemovedFromTree):
        * rendering/RenderTableCell.h:
        * rendering/RenderTableCol.cpp:
        (WebCore::RenderTableCol::insertedIntoTree):
        (WebCore::RenderTableCol::willBeRemovedFromTree):
        * rendering/RenderTableCol.h:
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::willBeRemovedFromTree):
        * rendering/RenderTableRow.h:
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::willBeRemovedFromTree):
        * rendering/RenderTableSection.h:
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::insertedIntoTree):
        (WebCore::RenderSVGRoot::willBeRemovedFromTree):
        * rendering/svg/RenderSVGRoot.h:
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::attachToRenderElementInternal):
        (WebCore::RenderTreeBuilder::move):
        (WebCore::RenderTreeBuilder::detachFromRenderElement):
        * rendering/updating/RenderTreeBuilder.h:

2021-04-05  Alex Christensen  <achristensen@webkit.org>

        WebSocketChannel buffers use memory after going idle (64K wasted on facebook.com
        https://bugs.webkit.org/show_bug.cgi?id=224193

        Reviewed by Simon Fraser.

        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::processFrame):

2021-04-05  Chris Dumez  <cdumez@apple.com>

        Make sure the Frame always gets destroyed on the main thread
        https://bugs.webkit.org/show_bug.cgi?id=224213
        <rdar://75131946>

        Reviewed by Alex Christensen.

        Make sure the Frame always gets destroyed on the main thread.

        Since http://trac.webkit.org/changeset/181791, Frame is ThreadSafeRefCounted and captured
        on other threads. We should make sure the Frame is always destroyed on the main thread
        though, since it is a main thread object and we hold WeakPtrs to it in many places.

        * page/AbstractFrame.h:

2021-04-05  Simon Fraser  <simon.fraser@apple.com>

        Wasted vector capacity in FEColorMatrix and filters
        https://bugs.webkit.org/show_bug.cgi?id=224169

        Reviewed by Said Abou-Hallawa.

        When building filter effects, avoid the inputEffects() having a larger
        capacity than needed.

        Shrink the Vector<float> which is input to FEColorMatrix.

        This saves around 40KB on facebook.com feed pages.

        * platform/graphics/filters/FEColorMatrix.cpp:
        (WebCore::FEColorMatrix::FEColorMatrix):
        (WebCore::FEColorMatrix::create):
        * platform/graphics/filters/FEColorMatrix.h:
        * rendering/CSSFilter.cpp:
        (WebCore::CSSFilter::build):
        (WebCore::endMatrixRow): Deleted.
        (WebCore::lastMatrixRow): Deleted.
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::buildPrimitives const):
        * svg/SVGFEColorMatrixElement.cpp:
        (WebCore::SVGFEColorMatrixElement::build const):
        * svg/SVGFEComponentTransferElement.cpp:
        (WebCore::SVGFEComponentTransferElement::build const):
        * svg/SVGFEConvolveMatrixElement.cpp:
        (WebCore::SVGFEConvolveMatrixElement::build const):
        * svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::build const):
        * svg/SVGFEDropShadowElement.cpp:
        (WebCore::SVGFEDropShadowElement::build const):
        * svg/SVGFEGaussianBlurElement.cpp:
        (WebCore::SVGFEGaussianBlurElement::build const):
        * svg/SVGFEMergeElement.cpp:
        (WebCore::SVGFEMergeElement::build const):
        * svg/SVGFEMorphologyElement.cpp:
        (WebCore::SVGFEMorphologyElement::build const):
        * svg/SVGFEOffsetElement.cpp:
        (WebCore::SVGFEOffsetElement::build const):
        * svg/SVGFESpecularLightingElement.cpp:
        (WebCore::SVGFESpecularLightingElement::build const):
        * svg/SVGFETileElement.cpp:
        (WebCore::SVGFETileElement::build const):

2021-04-05  Saam Barati  <sbarati@apple.com>

        Enable QuotaExceededError on non GSTREAMER platforms
        https://bugs.webkit.org/show_bug.cgi?id=224136
        <rdar://71219720>

        Reviewed by Jer Noble.

        This fixes a memory leak in Disney+ where we end up queuing up the entire
        video because we never communicate to the page that they should stop queuing
        more data.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::appendBufferInternal):

2021-04-05  Chris Dumez  <cdumez@apple.com>

        Make sure service workers use a ScriptSourceCode backed by file-mapped memory when possible
        https://bugs.webkit.org/show_bug.cgi?id=224088

        Reviewed by Yusuke Suzuki.

        To run a worker, we were constructing a ScriptSourceCode from the source String and calling
        JSC::evaluate. ScriptSourceCode would construct a JSC::StringSourceProvider, which would
        keep the source String alive for the lifetime of the provider. This is problematic since
        those worker scripts may be big and keeping heap-allocated version of them in memory is
        expensive.

        To address the issue, this patch introduces a new JSC::SourceProvider subclass named
        ScriptBufferSourceProvider, which uses a ScriptBuffer internally. ScriptBuffer has the
        benefit of being able to hold file-mapped data. We only convert the ScriptBuffer to
        a String whenever necessary (When the script contains non-ascii characters and JSC
        requests a StringView to the script). If we do end up converting the ScriptBuffer to
        a String, this String will get cleared on memory pressure. This is similar to what
        CachedScriptSourceProvider / CachedScript do on the main thread.

        In the warm case, where the service worker script is coming from disk, we create
        the ScriptBufferSourceProvider right away from a file-mapped ScriptBuffer, thus
        greatly reducing dirty memory use. In the cold case, we initially construct the
        ScriptBufferSourceProvider using a ScriptBuffer that is not file-mapped. However,
        once the script is saved to disk (via SWScriptStorage), we replace the
        ScriptBufferSourceProvider's ScriptBuffer with the new file-mapped version in
        order to reduce dirty memory use in this case too.

        * WebCore.xcodeproj/project.pbxproj:
        Add ScriptBufferSourceProvider.h to the project.

        * bindings/js/ScriptBufferSourceProvider.h: Added.
        - Add new ScriptBufferSourceProvider, which is a JSC::SourceProvider subclass that
        uses a ScriptBuffer as backing instead of a String. This allows us to use file-mapped
        memory whenever possible, thus reducing dirty memory use. This provider provides
        similar functionality to CachedScriptSourceProvider / CachedScript but works with
        a ScriptBuffer and can be used off the main thread.
        - We only transform the SharedBuffer into a String when strictly necessary, meaning
          that the ScriptBuffer contains non-ascii characters and JSC is asking for a StringView
          to the script.
        - The class supports clearing the String copy of the script (done on memory pressure)
          and replacing the ScriptBuffer (with a new file-mapped version).

        * bindings/js/ScriptSourceCode.h:
        (WebCore::ScriptSourceCode::ScriptSourceCode):
        (WebCore::ScriptSourceCode::m_code):
        (WebCore::ScriptSourceCode::provider):
        Add new constructors taking a ScriptBuffer instead of a String for the source code.
        We then use the new ScriptBufferSourceProvider internally instead of the
        StringSourceProvider.

        * workers/DedicatedWorkerThread.cpp:
        (WebCore::DedicatedWorkerThread::DedicatedWorkerThread):
        * workers/DedicatedWorkerThread.h:
        Use ScriptBuffer instead of String.

        * workers/ScriptBuffer.cpp:
        (WebCore::ScriptBuffer::empty):
        (WebCore::ScriptBuffer::append):
        (WebCore::operator!=):
        * workers/ScriptBuffer.h:
        (WebCore::ScriptBuffer::isEmpty const):
        Add some functionality to SCriptBuffer to make it more convenient to use.

        * workers/Worker.cpp:
        (WebCore::Worker::notifyFinished):
        Convert ScriptBuffer to a String since this is what WebInspector expects.

        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::importScripts):
        - When importing a new script, we now construct a ScriptSourceCode from a
        ScriptBuffer instead of a String.
        - We also store a weak pointer to the ScriptBufferSourceProvider used by the ScriptSourceCode
          on the WorkerGlobalScope. This is so that we can ask those ScriptBufferSourceProvider objects
          to clear their cached String representation of the script source on memory pressure. It is
          also needed so we can replace the ScriptBufferSourceProvider's ScriptBuffer with a file-mapped
          version when one becomes available.

        (WebCore::WorkerGlobalScope::releaseMemory):
        In addition to deleting JS code and doing garbage collection, we now also ask the
        ScriptBufferSourceProvider objects to clear their cached String representation of the script
        source.

        (WebCore::WorkerGlobalScope::deleteJSCodeAndGC):
        Moved the logic to delete JS code and doing GC from releaseMemory() to a new function, now
        that releaseMemory() needs to do more things.

        (WebCore::WorkerGlobalScope::setMainScriptSourceProvider):
        (WebCore::WorkerGlobalScope::addImportedScriptSourceProvider):
        Functions used to store the CachedScriptSourceProvider objects for the scripts used by the
        worker on the WorkerGlobalScope. We keep weak pointers to those.

        (WebCore::WorkerGlobalScope::clearDecodedScriptData):
        Function used to ask the ScriptBufferSourceProvider objects to clear their cached String
        representation of the script source on memory pressure.

        (WebCore::WorkerGlobalScope::updateSourceProviderBuffers):
        Function used to ask the ScriptBufferSourceProvider objects to replace their ScriptBuffers
        with file-backed versions.

        * workers/WorkerGlobalScope.h:
        * workers/WorkerGlobalScopeProxy.h:
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::startWorkerGlobalScope):
        * workers/WorkerMessagingProxy.h:
        Use ScriptBuffer instead of String.

        * workers/WorkerScriptLoader.cpp:
        (WebCore::WorkerScriptLoader::WorkerScriptLoader):
        (WebCore::WorkerScriptLoader::loadSynchronously):
        (WebCore::WorkerScriptLoader::didReceiveData):
        * workers/WorkerScriptLoader.h:
        (WebCore::WorkerScriptLoader::script):
        Use ScriptBuffer instead of String to hold the script source. We eventually need a ScriptBuffer
        since this is what the Worker now needs to launch. Also, in the service worker case, we may
        get a ScriptBuffer right away from the scriptResourceMap, without going to the network at all.

        * workers/WorkerThread.cpp:
        (WebCore::WorkerThreadStartupData::WorkerThreadStartupData):
        (WebCore::WorkerThread::WorkerThread):
        Use ScriptBuffer instead of String.

        (WebCore::WorkerThread::evaluateScriptIfNecessary):
        - When evaluating the main worker script, we now construct a ScriptSourceCode from a
        ScriptBuffer instead of a String.
        - We also store a weak pointer to the ScriptBufferSourceProvider used by the ScriptSourceCode
          on the WorkerGlobalScope. This is so that we can ask those ScriptBufferSourceProvider objects
          to clear their cached String representation of the script source on memory pressure. It is
          also needed so we can replace the ScriptBufferSourceProvider's ScriptBuffer with a file-mapped
          version when one becomes available.

        * workers/WorkerThread.h:
        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::jobFinishedLoadingScript):
        * workers/service/ServiceWorkerContainer.h:
        * workers/service/ServiceWorkerFetchResult.h:
        * workers/service/ServiceWorkerGlobalScope.cpp:
        (WebCore::ServiceWorkerGlobalScope::didSaveScriptsToDisk):
        * workers/service/ServiceWorkerJobClient.h:
        * workers/service/context/ServiceWorkerThread.cpp:
        (WebCore::ServiceWorkerThread::ServiceWorkerThread):
        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::updateWorker):
        * workers/service/server/SWServer.h:
        * workers/service/server/SWServerJobQueue.cpp:
        (WebCore::SWServerJobQueue::scriptFetchFinished):
        Use ScriptBuffer instead of String.

2021-04-05  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][WK2] Implement IPC::Semaphore to run WebGL in GPU process
        https://bugs.webkit.org/show_bug.cgi?id=224014

        Reviewed by Don Olmstead.

        * platform/graphics/PlatformDisplay.cpp:
        (WebCore::PlatformDisplay::sharedDisplay): GPU process calls this
        function in IPC thread. Removed the assertion checking the main
        thread.
        * platform/graphics/opengl/GraphicsContextGLOpenGL.h:
        * platform/graphics/texmap/GraphicsContextGLTextureMapper.cpp:
        (WebCore::GraphicsContextGLOpenGL::createForGPUProcess): Added.

2021-04-05  Cameron McCormack  <heycam@apple.com>

        Fix max-content on tables with percentage cell widths.
        https://bugs.webkit.org/show_bug.cgi?id=221165

        Reviewed by Zalan Bujtas.

        When `width: max-content` is specified on an element, any percentages
        on content inside the element that are relative to the containing block
        width should be treated as auto.  Percentages on table cells and columns
        in tables using auto table layout are not quite relative to the
        containing block width, but do have a similar influence.  So when
        computing the intrinsic width of a table for the purpose of determining
        the max-content value to use, ignore any percentages specified on table
        cells and columns.

        This change makes us match Firefox and Chrome on the test case.

        Test: fast/table/percent-width-max-content.html

        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::computeIntrinsicLogicalWidths):
        * rendering/AutoTableLayout.h:
        * rendering/FixedTableLayout.cpp:
        (WebCore::FixedTableLayout::computeIntrinsicLogicalWidths):
        * rendering/FixedTableLayout.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeIntrinsicLogicalWidthUsing const): Call
        into the new computeIntrinsicKeywordLogicalWidths function so that
        tables can return different values for layout and intrinsic keyword
        calculation.
        * rendering/RenderBox.h:
        (WebCore::RenderBox::computeIntrinsicKeywordLogicalWidths const):
        Added to support computing intrinsic keyword lengths that differ from
        those returned by computeIntrinsicLogicalWidths.
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::computeIntrinsicLogicalWidths const): Factored
        this out to allow specifying an argument for whether the intrinsics
        being computed are for layout or for instrinsic keyword calculation,
        like max-content.
        (WebCore::RenderTable::computeIntrinsicKeywordLogicalWidths const):
        Added.  This is the only override of the default implementation in
        RenderBox.
        * rendering/RenderTable.h:
        * rendering/TableLayout.h:

2021-04-05  Myles C. Maxfield  <mmaxfield@apple.com>

        [GPU Process] Simplify DisplayList::Iterator part 1: Require encoding/decoding delegates for non-inline display list items
        https://bugs.webkit.org/show_bug.cgi?id=223849

        Reviewed by Wenson Hsieh.

        Requiring delegates for non-inline display list items has these advantages:
        - DisplayList::Iterator::updateCurrentItem() only has 2 codepaths instead of 3.
        - ItemBuffer::m_itemsToDestroyInAllocatedBuffers can be deleted entirely.
        - The conditional inside ItemBuffer::append() can be simplified from
              !T::isInlineItem && m_writingClient to just !T::isInlineItem, which I think makes the
              function significantly more readable.

        There are a few places where we were using non-inline display list items without a delegate:
        This patch adds two new "null" delegates, and hooks them up to a subclass of DisplayList,
        called InMemoryDisplayList. Clients who want to use in-memory display lists (like the
        DrawGlyphs cache) can just use this class, and retain their calling pattern they were using
        before. Also, this patch adds InMemoryDisplayList without adding any virtual functions to
        DisplayList.

        No new tests because there is no behavior change.

        * Headers.cmake:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLCanvasElement.cpp:
        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::displayListForTextRun const):
        * platform/graphics/FontCascade.h:
        (WebCore::FontCascade::displayListForTextRun):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::recursiveCommitChanges):
        (WebCore::GraphicsLayerCA::platformCALayerPaintContents):
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/displaylists/DisplayList.cpp:
        (WebCore::DisplayList::DisplayList::iterator::updateCurrentItem):
        * platform/graphics/displaylists/DisplayListDrawingContext.h:
        (WebCore::DisplayList::DrawingContext::replayedDisplayList const):
        * platform/graphics/displaylists/DisplayListImageBuffer.h:
        (WebCore::DisplayList::ImageBuffer::ImageBuffer):
        * platform/graphics/displaylists/DisplayListItemBuffer.cpp:
        (WebCore::DisplayList::copyInto):
        (WebCore::DisplayList::ItemBuffer::ItemBuffer):
        (WebCore::DisplayList::ItemBuffer::operator=):
        (WebCore::DisplayList::ItemBuffer::clear):
        (WebCore::DisplayList::ItemBuffer::append):
        (WebCore::DisplayList::m_allocatedBuffers): Deleted.
        * platform/graphics/displaylists/DisplayListItemBuffer.h:
        (WebCore::DisplayList::ItemHandle::get const):
        (WebCore::DisplayList::ItemBufferWritingClient::~ItemBufferWritingClient):
        (WebCore::DisplayList::ItemBufferWritingClient::createItemBuffer):
        (WebCore::DisplayList::ItemBufferWritingClient::requiredSizeForItem const):
        (WebCore::DisplayList::ItemBufferWritingClient::encodeItemOutOfLine const):
        (WebCore::DisplayList::ItemBufferWritingClient::encodeItemInline const):
        (WebCore::DisplayList::ItemBufferWritingClient::didAppendData):
        (WebCore::DisplayList::ItemBuffer::append):
        * platform/graphics/displaylists/DisplayListReplayer.cpp:
        (WebCore::DisplayList::Replayer::replay):
        * platform/graphics/displaylists/DisplayListReplayer.h:
        * platform/graphics/displaylists/InMemoryDisplayList.cpp: Added.
        (WebCore::DisplayList::InMemoryDisplayList::WritingClient::requiredSizeForItem const):
        (WebCore::DisplayList::InMemoryDisplayList::WritingClient::encodeItemInline const):
        (WebCore::DisplayList::InMemoryDisplayList::ReadingClient::decodeItem):
        (WebCore::DisplayList::InMemoryDisplayList::InMemoryDisplayList):
        (WebCore::DisplayList::InMemoryDisplayList::~InMemoryDisplayList):
        * platform/graphics/displaylists/InMemoryDisplayList.h: Copied from Source/WebCore/platform/graphics/displaylists/DisplayListDrawingContext.h.
        * rendering/GlyphDisplayListCache.h:

2021-04-05  Jer Noble  <jer.noble@apple.com>

        [MediaSession] Small refactoring of MediaSession implementation classes
        https://bugs.webkit.org/show_bug.cgi?id=224141

        Reviewed by Eric Carlson.

        A smorgasboard of small refactoring changes:

        - Don't call action handlers by default in response to coordinator requests.
        - Since we don't call the action handlers, we don't need the internal methods.
        - Simplify the call site by defining the action details inline.

        * Modules/mediasession/MediaSessionCoordinator.cpp:
        (WebCore::MediaSessionCoordinator::seekSessionToTime):
        (WebCore::MediaSessionCoordinator::playSession):
        (WebCore::MediaSessionCoordinator::pauseSession):
        (WebCore::MediaSessionCoordinator::setSessionTrack):
        (WebCore::MediaSessionCoordinator::internalSeekTo): Deleted.
        (WebCore::MediaSessionCoordinator::internalPlay): Deleted.
        (WebCore::MediaSessionCoordinator::internalPause): Deleted.
        (WebCore::MediaSessionCoordinator::internalSetTrack): Deleted.
        * Modules/mediasession/MediaSessionCoordinator.h:
        * Modules/mediasession/MediaSessionCoordinatorPrivate.h:

2021-04-05  Yusuke Suzuki  <ysuzuki@apple.com>

        Define AtomString(ASCIILiteral) and use ASCIILiteral more to avoid memory allocation
        https://bugs.webkit.org/show_bug.cgi?id=224125

        Reviewed by Saam Barati.

        We apply "..."_s more. This avoids allocating of string storage when creating StringImpl.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::initializeRoleMap):
        * dom/ScriptElement.cpp:
        (WebCore::isLegacySupportedJavaScriptLanguage):
        * editing/EditorCommand.cpp:
        (WebCore::createCommandMap):
        * html/Autofill.cpp:
        (WebCore::fieldNameMap):
        * platform/LegacySchemeRegistry.cpp:
        (WebCore::builtinLocalURLSchemes):
        (WebCore::builtinSecureSchemes):
        (WebCore::builtinSchemesWithUniqueOrigins):
        (WebCore::builtinEmptyDocumentSchemes):
        (WebCore::builtinCanDisplayOnlyIfCanRequestSchemes):
        (WebCore::builtinCORSEnabledSchemes):
        * platform/MIMETypeRegistry.cpp:
        (WebCore::MIMETypeRegistry::systemPreviewMIMETypes):
        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::hasValidAverageCharWidth const):
        * platform/graphics/HEVCUtilities.cpp:
        (WebCore::codecStringForDoViCodecType):
        (WebCore::profileIDForAlphabeticDoViProfile):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::staticMIMETypeList):
        * platform/graphics/avfoundation/objc/AVAssetMIMETypeCache.mm:
        (WebCore::AVAssetMIMETypeCache::staticContainerTypeList):
        * platform/graphics/cg/ImageSourceCGWin.cpp:
        (WebCore::preferredExtensionForImageType):
        * svg/SVGTests.cpp:
        (WebCore::supportedSVGFeatures):

2021-04-02  Ryosuke Niwa  <rniwa@webkit.org>

        PendingImageBitmap gets created on a stopped script execution context.
        https://bugs.webkit.org/show_bug.cgi?id=223971

        Reviewed by Youenn Fablet.

        Don't create a PendingImageBitmap in PendingImageBitmap::fetch
        if the associated script execution context had already been stoppped.

        The new behavior matches of Chrome although it's technically incorrect.

        Correcting it to match the spec & Firefox will refactor a larger fix around
        how script execution context is used by the threaded loader.

        * html/ImageBitmap.cpp:
        (WebCore::PendingImageBitmap::fetch):

2021-04-02  Alexey Shvayka  <shvaikalesh@gmail.com>

        Remove [Replaceable] extended attribute from `document.all`
        https://bugs.webkit.org/show_bug.cgi?id=223883

        Reviewed by Darin Adler.

        [Replaceable] semantics was introduced around 2003 to work around a web-compat issue.
        Since then, `document.all` was revised multiple times and standardized as [[IsHTMLDDA]]
        object without a setter, which was proven to be compatible with the web.

        This patch aligns WebKit with the spec [1], Blink, and Gecko.

        iOS apps are unlikely to accidentally depend on subtleties in `document.all` behavior since
        they were authored long after it became obsolete.

        Old versions of libraries, originally designed for the web, are also unlikely to rely on
        previous behavior, because `document.all` was never replaceable in some popular browsers.

        [1] https://html.spec.whatwg.org/multipage/obsolete.html#Document-partial

        Tests: fast/dom/undetectable-document-all.html
               imported/w3c/web-platform-tests/html/dom/idlharness.https.html

        * dom/Document+HTMLObsolete.idl:

2021-04-02  Chris Dumez  <cdumez@apple.com>

        Introduce ScriptBuffer class to wrap SharedBuffer containing a script
        https://bugs.webkit.org/show_bug.cgi?id=224092

        Reviewed by Yusuke Suzuki and Geoff Garen.

        Introduce ScriptBuffer class to wrap SharedBuffer containing a script. We started using SharedBuffer to represent
        worker scripts instead of String, so that they can hold file mapped data and be shared across processes.
        This patch introduces a new ScriptBuffer to wrap those SharedBuffers. The type makes it clearer what type of
        data we're dealing with. The helper functions used to convert between String and SharedBuffer can now simply
        be member functions on ScriptBuffer. This also simplifies IPC code.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        Add new ScriptBuffer class to project files.

        * inspector/agents/worker/ServiceWorkerAgent.cpp:
        (WebCore::ServiceWorkerAgent::getInitializationInfo):
        Use ScriptBuffer::toString() instead of scriptBufferToString().

        * workers/ScriptBuffer.cpp: Added.
        (WebCore::ScriptBuffer::ScriptBuffer):
        (WebCore::ScriptBuffer::toString const):
        (WebCore::ScriptBuffer::containsSingleFileMappedSegment const):
        (WebCore::operator==):
        * workers/ScriptBuffer.h: Added.
        (WebCore::ScriptBuffer::ScriptBuffer):
        (WebCore::ScriptBuffer::buffer const):
        (WebCore::ScriptBuffer::isolatedCopy const):
        (WebCore::ScriptBuffer::operator bool const):
        New ScriptBuffer class that wraps a SharedBuffer representation of a script.
        This class helps make it clear what data we're dealing with. It also facilitates
        conversion to and from a String when needed. The class also has its own IPC
        coder at WebKit layer to encode the script as a ShareableResource when file
        mapped.

        * workers/WorkerScriptLoader.cpp:
        (WebCore::WorkerScriptLoader::loadSynchronously):
        Use ScriptBuffer::toString() instead of scriptBufferToString().
        And use StringBuffer constructor that takes a String instead of stringToScriptBuffer().

        * workers/service/SWClientConnection.h:
        * workers/service/ServiceWorkerContextData.cpp:
        (WebCore::ServiceWorkerContextData::isolatedCopy const):
        * workers/service/ServiceWorkerContextData.h:
        (WebCore::ServiceWorkerContextData::ImportedScript::encode const):
        (WebCore::ServiceWorkerContextData::ImportedScript::decode):
        (WebCore::ServiceWorkerContextData::ImportedScript::isolatedCopy const):
        (WebCore::ServiceWorkerContextData::encode const):
        (WebCore::ServiceWorkerContextData::decode):
        - Use ScriptBuffer instead of RefPtr<SharedBuffer> for scripts.
        - Drop scriptBufferToString() & stringToScriptBuffer() as they are no longer needed.
        - Move IPC coders for ServiceWorkerContextData back from WebCoreArgumentCoders back
          to the WebCore class, now that the coders no longer need to deal with ShareableResource
          directly. We now encode / decode ScriptBuffer objects and its coder takes care of
          using a ShareableResource whenever possible.

        * workers/service/ServiceWorkerGlobalScope.cpp:
        (WebCore::ServiceWorkerGlobalScope::didSaveScriptsToDisk):
        * workers/service/ServiceWorkerGlobalScope.h:
        * workers/service/context/SWContextManager.cpp:
        (WebCore::SWContextManager::didSaveScriptsToDisk):
        * workers/service/context/SWContextManager.h:
        * workers/service/context/ServiceWorkerThread.cpp:
        (WebCore::ServiceWorkerThread::ServiceWorkerThread):
        * workers/service/context/ServiceWorkerThreadProxy.cpp:
        (WebCore::ServiceWorkerThreadProxy::didSaveScriptsToDisk):
        * workers/service/context/ServiceWorkerThreadProxy.h:
        * workers/service/server/RegistrationDatabase.cpp:
        (WebCore::RegistrationDatabase::doPushChanges):
        (WebCore::RegistrationDatabase::importRecords):
        * workers/service/server/RegistrationStore.cpp:
        (WebCore::RegistrationStore::didSaveWorkerScriptsToDisk):
        * workers/service/server/RegistrationStore.h:
        * workers/service/server/SWScriptStorage.cpp:
        (WebCore::SWScriptStorage::store):
        (WebCore::SWScriptStorage::retrieve):
        * workers/service/server/SWScriptStorage.h:
        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::didSaveWorkerScriptsToDisk):
        (WebCore::SWServer::updateWorker):
        * workers/service/server/SWServer.h:
        * workers/service/server/SWServerJobQueue.cpp:
        (WebCore::SWServerJobQueue::scriptFetchFinished):
        * workers/service/server/SWServerToContextConnection.h:
        * workers/service/server/SWServerWorker.cpp:
        (WebCore::SWServerWorker::SWServerWorker):
        (WebCore::SWServerWorker::didSaveScriptsToDisk):
        * workers/service/server/SWServerWorker.h:
        (WebCore::SWServerWorker::script const):
        Use ScriptBuffer instead of SharedBuffer.

2021-04-02  Chris Dumez  <cdumez@apple.com>

        Unreviewed, reverting r275434.

        Need to figure out a better strategy to chose the color

        Reverted changeset:

        "Make sure we are no longer show the previous page when
        running a JS prompt"
        https://bugs.webkit.org/show_bug.cgi?id=215782
        https://commits.webkit.org/r275434

2021-04-02  Simon Fraser  <simon.fraser@apple.com>

        Allow wheel events to trigger high frequency DisplayLinks
        https://bugs.webkit.org/show_bug.cgi?id=224095

        Reviewed by Sam Weinig.

        Adjust some logging so it's clear which process code is running in.

        * platform/graphics/DisplayRefreshMonitor.cpp:
        (WebCore::DisplayRefreshMonitor::displayLinkFired):
        * platform/graphics/DisplayRefreshMonitorManager.cpp:
        (WebCore::DisplayRefreshMonitorManager::ensureMonitorForDisplayID):

2021-04-02  David Kilzer  <ddkilzer@apple.com>

        UBSan: AlternativeTextController::dismiss()/dismissSoon(): runtime error: load of value nnn, which is not a valid value for type 'bool'
        <https://webkit.org/b/223903>

        Reviewed by Wenson Hsieh.

        Covered by 449 layout tests using WebKit compiled with UBSan.

        * editing/AlternativeTextController.h:
        - Initialize m_isActive and m_isDismissedByEditing.

2021-04-02  Chris Dumez  <cdumez@apple.com>

        Make sure we are no longer show the previous page when running a JS prompt
        https://bugs.webkit.org/show_bug.cgi?id=215782
        <rdar://problem/67698601>

        Reviewed by Simon Fraser.

        Add linked-on-after check for the behavior change to minimize the risk of
        breakage.

        * platform/cocoa/VersionChecks.h:

2021-04-02  Devin Rousso  <drousso@apple.com>

        [iPadOS] unable to reorder tabs on `*.mybinder.org`
        https://bugs.webkit.org/show_bug.cgi?id=224034
        <rdar://problem/51770057>

        Reviewed by Brent Fulgham.

        * page/Quirks.h:
        * page/Quirks.cpp:
        (WebCore::Quirks::shouldDispatchSimulatedMouseEvents const):
        (WebCore::Quirks::shouldDispatchedSimulatedMouseEventsAssumeDefaultPrevented const):
        (WebCore::Quirks::simulatedMouseEventTypeForTarget const):
        Modify `Quirks::shouldDispatchSimulatedMouseEvents` to accept an `EventTarget` so that we
        can limit dispatching touch events as mouse events on `*.mybinder.org` to only the tab bar.

        * dom/EventNames.h:
        (WebCore::EventNames::isTouchRelatedEventType const):
        * dom/Node.cpp:
        (WebCore::Node::moveNodeToNewDocument):
        (WebCore::tryAddEventListener):
        (WebCore::tryRemoveEventListener):
        (WebCore::Node::defaultEventHandler):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::addEventListener):
        (WebCore::DOMWindow::removeEventListener):
        Pass in the `EventTarget` when calling `Quirks::shouldDispatchSimulatedMouseEvents`.

2021-04-02  Zalan Bujtas  <zalan@apple.com>

        [AspectRatio] Out-of-flow box with intrinsic width (e.g. <img>) may trigger infinite recursion
        https://bugs.webkit.org/show_bug.cgi?id=224113

        Reviewed by Rob Buis.

        This covers the case when the out-of-flow box has intrinsic width (replaced box) and
        the max-width is also set to "intrinsic" meaning content size dependent. In such cases
        the aspect ratio computation ends up recursing around RenderBox::computeReplacedLogicalWidthRespectingMinMaxWidth.
        This path checks if the out-of-flow box's horizontal size is also constrained by the intrinsic width.

        Test: fast/replaced/infinite-recursion-with-intrinsic-width.html

        * rendering/RenderBox.cpp:
        (WebCore::shouldComputeLogicalWidthFromAspectRatioAndInsets):

2021-04-02  Chris Dumez  <cdumez@apple.com>

        Delete JS code and trigger garbage collection in worker threads on memory pressure
        https://bugs.webkit.org/show_bug.cgi?id=224110

        Reviewed by Geoffrey Garen.

        Delete JS code and trigger garbage collection in worker threads on memory pressure,
        to release as much memory as possible. We were previously only doing this in the
        common (main thread) VM.

        For the garbage collection logic, I tried to match what the GCController is doing
        for the commonVM but apply it to worker VMs.

        * page/MemoryRelease.cpp:
        (WebCore::releaseCriticalMemory):
        * workers/WorkerGlobalScope.cpp:
        (WebCore::allWorkerGlobalScopeIdentifiers):
        (WebCore::WorkerGlobalScope::WorkerGlobalScope):
        (WebCore::WorkerGlobalScope::~WorkerGlobalScope):
        (WebCore::WorkerGlobalScope::releaseMemory):
        (WebCore::WorkerGlobalScope::releaseMemoryInWorkers):
        * workers/WorkerGlobalScope.h:

2021-04-02  Aditya Keerthi  <akeerthi@apple.com>

        Do not paint native decorations for search fields without '-webkit-appearance: searchfield'
        https://bugs.webkit.org/show_bug.cgi?id=223946
        <rdar://problem/75621365>

        Reviewed by Antti Koivisto.

        On iOS, sites that use <input type="search"> have been observed to draw
        their own icons next to the field. Since we draw our own icon for
        search fields, this results in an unwanted icon on some sites, such as
        on chanel.com. However, in this case, the site specifies
        "-webkit-appearance: textfield" on the search input, indicating a desire
        to remove the native search field appearance. To remove the unwanted
        icon, we should not paint decorations for search fields without
        "-webkit-appearance: searchfield".

        To achieve this behavior, adjust the -webkit-appearance value on the
        pseudo element containing the icon when the search field has a different
        -webkit-appearance value, so that the native painting is elided. The
        decision to not simply set "display: none" on the element was made so
        that sites can still customize the decoration should they choose to do
        so. Note that on macOS, Web Inspector paints their own search icon
        using the pseudo element.

        No new tests. A layout test is not possible since SearchFieldResultsButtonElement
        is inaccessible through DOM APIs. A reference mismatch test is not
        possible since changing the -webkit-appearance property on a search field
        already results in visual changes. Existing tests were rebaselined to
        account for the fact that the decoration is removed when changing
        -webkit-appearance, so we do have test coverage.

        * html/HTMLElement.h:
        (WebCore::HTMLElement::isSearchFieldResultsButtonElement const):
        * html/shadow/TextControlInnerElements.cpp:
        (WebCore::SearchFieldResultsButtonElement::SearchFieldResultsButtonElement):
        (WebCore::SearchFieldResultsButtonElement::resolveCustomStyle):

        If the searchfield's appearance is not "searchfield", adjust the
        appearance of the results button to NoControlPart. For compatibility
        reasons, the adjustment is skipped if the author has specified the
        results attribute on the searchfield. This is determined by checking
        the maxResults of the input element.

        If the adjustment needs to be performed, we elide standard style
        adjustments from the theme by setting canAdjustStyleForAppearance to
        false. Without this, the call to resolveStyle will apply native styles
        to the element, since it does not know we are about to reset appearance.

        * html/shadow/TextControlInnerElements.h:
        (isType):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::adjustStyle):
        (WebCore::RenderTheme::adjustSearchFieldDecorationStyle const):

        Skip style adjustment and reset the appearance when necessary.

        * rendering/RenderTheme.h:
        * style/StyleTreeResolver.cpp:
        (WebCore::Style::TreeResolver::resolveElement):

        Resolve all descendants if the appearance property of a search input is
        changed. Without this change, the style of the results button is not
        resolved when making a dynamic style change to the appearance of the
        search input.

2021-04-02  Chris Fleizach  <cfleizach@apple.com>

        AX: textRectsFromMarkers always fails
        https://bugs.webkit.org/show_bug.cgi?id=223556
        <rdar://74256003>

        Reviewed by Zalan Bujtas.

        The textRectsFromMarkers:text: method is always failing to return a valid answer because when we try to extend
        the search range of text to search, we're creating a range that can't be iterated with a CharacterIterator.

        Test: accessibility/ios-simulator/text-rects-for-range-matches.html

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::rangeMatchesTextNearRange):

2021-04-02  Tyler Wilcock  <twilco.o@protonmail.com>

        Non-unified build fixes, early April 2021
        https://bugs.webkit.org/show_bug.cgi?id=224091

        Reviewed by Alex Christensen.

        Non-unified build fixes, April 2021.

        * bindings/scripts/CodeGeneratorJS.pm:
        (AddToIncludesForIDLType):
        For IDLs that have a property with a type of `undefined`, also add #include "JSDOMConvertBase.h" to
        the generated binding source file.  This fixes a build error in
        DerivedSources/JSWebGLLoseContext.cpp that looked like:

        WebCore/DerivedSources/JSWebGLLoseContext.cpp:147:78: error: expected primary-expression before ‘>’ token
        RELEASE_AND_RETURN(throwScope, JSValue::encode(toJS<IDLUndefined>(*lexicalGlobalObject, throwScope, [&]() -> decltype(auto) { return impl.loseContext(); })));

        Thanks to Darin Adler for figuring this out.

        To see the full error, go here: https://bugs.webkit.org/show_bug.cgi?id=223150#c14

        * dom/EventContext.h:
        * dom/FocusOptions.h:
        * loader/ResourceLoadInfo.cpp:
        * page/scrolling/ScrollSnapOffsetsInfo.cpp:
        * platform/network/soup/SoupNetworkSession.cpp:
        * rendering/RenderLayerModelObject.cpp:
        * style/Styleable.cpp:
        * workers/service/server/SWScriptStorage.cpp:
        * workers/service/server/SWScriptStorage.h:
        * Modules/mediastream/RTCDataChannelRemoteSource.h:
        Fix 'invalid use of incomplete type <TYPE>' or '<TYPE> does not name a type' errors.

        * bindings/scripts/test/JS/JSTestCEReactions.cpp:
        * bindings/scripts/test/JS/JSTestCallTracer.cpp:
        * bindings/scripts/test/JS/JSTestCallbackFunctionWithThisObject.cpp:
        * bindings/scripts/test/JS/JSTestCallbackFunctionWithTypedefs.cpp:
        * bindings/scripts/test/JS/JSTestCallbackInterface.cpp:
        * bindings/scripts/test/JS/JSTestConditionalIncludes.cpp:
        * bindings/scripts/test/JS/JSTestDomainSecurity.cpp:
        * bindings/scripts/test/JS/JSTestEnabledBySetting.cpp:
        * bindings/scripts/test/JS/JSTestGlobalObject.cpp:
        * bindings/scripts/test/JS/JSTestIndexedSetterWithIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        * bindings/scripts/test/JS/JSTestLegacyNoInterfaceObject.cpp:
        * bindings/scripts/test/JS/JSTestMapLikeWithOverriddenOperations.cpp:
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterWithIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestNamedDeleterWithIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestNamedSetterWithIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetter.cpp:
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetterAndSetter.cpp:
        * bindings/scripts/test/JS/JSTestNamedSetterWithLegacyUnforgeableProperties.cpp:
        * bindings/scripts/test/JS/JSTestNamedSetterWithLegacyUnforgeablePropertiesAndLegacyOverrideBuiltIns.cpp:
        * bindings/scripts/test/JS/JSTestNode.cpp:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/JS/JSTestOperationConditional.cpp:
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        * bindings/scripts/test/JS/JSTestSetLikeWithOverriddenOperations.cpp:
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        * bindings/scripts/test/JS/JSTestVoidCallbackFunction.cpp:
        Update bindings via `run-bindings-tests --reset-results` to add new "JSDOMConvertBase.h" include.

2021-04-02  Chris Lord  <clord@igalia.com>

        Implement text rendering on OffscreenCanvas in a Worker
        https://bugs.webkit.org/show_bug.cgi?id=202793

        Reviewed by Darin Adler.

        Add a CSSFontSelector and FontCache to WorkerGlobalScope and via
        interface changes to ScriptExecutionContext and FontSelector, use them
        as appropriate after enabling text functions on Worker threads with
        OffscreenCanvas.

        No new tests, rebaselined existing tests.

        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::CSSFontSelector):
        (WebCore::m_version):
        (WebCore::CSSFontSelector::~CSSFontSelector):
        (WebCore::CSSFontSelector::fontRangesForFamily):
        (WebCore::CSSFontSelector::fallbackFontAt):
        * css/CSSFontSelector.h:
        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::genericFontFamily):
        (WebCore::CSSPropertyParserHelpers::genericFontFamilyIndex):
        * css/parser/CSSPropertyParserHelpers.h:
        * dom/Document.h:
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::fontCache):
        * dom/ScriptExecutionContext.h:
        (WebCore::ScriptExecutionContext::cssFontSelector):
        * dom/make_names.pl:
        * html/canvas/CanvasRenderingContext2DBase.cpp:
        (WebCore::CanvasRenderingContext2DBase::canDrawText):
        * html/canvas/OffscreenCanvasRenderingContext2D.cpp:
        (WebCore::OffscreenCanvasRenderingContext2D::setFont):
        * platform/graphics/FontCache.cpp:
        (WebCore::FontDataCacheKeyHash::hash):
        (WebCore::FontDataCacheKeyHash::equal):
        (WebCore::FontDataCacheKeyTraits::emptyValue):
        (WebCore::FontDataCacheKeyTraits::constructDeletedValue):
        (WebCore::FontDataCacheKeyTraits::isDeletedValue):
        (WebCore::FontCache::create):
        (WebCore::FontCache::singleton):
        (WebCore::FontCache::FontCache):
        (WebCore::FontCache::getCachedFontPlatformData):
        (WebCore::FontCache::fontForPlatformData):
        (WebCore::FontCache::purgeInactiveFontDataIfNeeded):
        (WebCore::FontCache::purgeInactiveFontData):
        (WebCore::FontCache::verticalData):
        (WebCore::FontCache::fontCount):
        (WebCore::FontCache::inactiveFontCount):
        (WebCore::FontCache::invalidate):
        * platform/graphics/FontCache.h:
        (WebCore::FontCache::fontCacheFallbackToSingleton):
        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::isCurrent const):
        (WebCore::FontCascade::update const):
        * platform/graphics/FontCascadeFonts.cpp:
        (WebCore::FontCascadeFonts::FontCascadeFonts):
        (WebCore::realizeNextFallback):
        (WebCore::FontCascadeFonts::realizeFallbackRangesAt):
        * platform/graphics/FontSelector.h:
        * platform/graphics/cairo/FontCairoHarfbuzzNG.cpp:
        (WebCore::FontCascade::fontForCombiningCharacterSequence const):
        * platform/graphics/freetype/FontCacheFreeType.cpp:
        (WebCore::getFamilyNameStringFromFamily):
        * style/StyleBuilderCustom.h:
        (WebCore::Style::BuilderCustom::applyValueFontFamily):
        * style/StyleResolveForFontRaw.cpp:
        (WebCore::Style::useFixedDefaultSize):
        (WebCore::Style::resolveForFontRaw):
        * style/StyleResolveForFontRaw.h:
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::~WorkerGlobalScope):
        (WebCore::WorkerGlobalScope::cssFontSelector):
        (WebCore::WorkerGlobalScope::fontCache):
        * workers/WorkerGlobalScope.h:

2021-04-02  Youenn Fablet  <youenn@apple.com>

        No audio output when unplugged wired headset during a call
        https://bugs.webkit.org/show_bug.cgi?id=216389
        <rdar://problem/68692800>

        Reviewed by Eric Carlson.

        Implement shouldOverridePauseDuringRouteChange for media elements.
        If it is a media stream backed video element, do not pause on active audio route change.

        Implement internal API to write a layout test.

        Refactoring to share more code between WebCore and WebKit and implement the internal API.
        Improve isolation of MediaSessionHelper by moving all its members from protected to private.

        Test: fast/mediastream/MediaStream-video-element-change-audio-route.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::shouldOverridePauseDuringRouteChange const):
        * html/HTMLMediaElement.h:
        * platform/audio/ios/MediaSessionHelperIOS.h:
        (WebCore::MediaSessionHelper::MediaSessionHelper):
        * platform/audio/ios/MediaSessionHelperIOS.mm:
        (MediaSessionHelper::activeAudioRouteDidChange):
        (MediaSessionHelper::applicationWillEnterForeground):
        (MediaSessionHelper::applicationDidEnterBackground):
        (MediaSessionHelper::applicationWillBecomeInactive):
        (MediaSessionHelper::applicationDidBecomeActive):
        (MediaSessionHelper::mediaServerConnectionDied):
        (MediaSessionHelper::externalOutputDeviceAvailableDidChange):
        (MediaSessionHelper::isPlayingToAutomotiveHeadUnitDidChange):
        (MediaSessionHelper::activeVideoRouteDidChange):
        (MediaSessionHelper::startMonitoringWirelessRoutes):
        (MediaSessionHelper::stopMonitoringWirelessRoutes):
        (MediaSessionHelperiOS::MediaSessionHelperiOS):
        (MediaSessionHelperiOS::startMonitoringWirelessRoutesInternal):
        (MediaSessionHelperiOS::stopMonitoringWirelessRoutesInternal):
        (MediaSessionHelperiOS::mediaServerConnectionDied):
        (MediaSessionHelperiOS::setIsPlayingToAutomotiveHeadUnit):
        (MediaSessionHelperiOS::activeAudioRouteDidChange):
        (MediaSessionHelperiOS::activeVideoRouteDidChange):
        (MediaSessionHelperiOS::externalOutputDeviceAvailableDidChange):
        (MediaSessionHelperiOS::startMonitoringWirelessRoutes): Deleted.
        (MediaSessionHelperiOS::stopMonitoringWirelessRoutes): Deleted.
        (MediaSessionHelperiOS::applicationDidBecomeActive): Deleted.
        (MediaSessionHelperiOS::applicationDidEnterBackground): Deleted.
        (MediaSessionHelperiOS::applicationWillBecomeInactive): Deleted.
        (MediaSessionHelperiOS::applicationWillEnterForeground): Deleted.
        * testing/Internals.cpp:
        (WebCore::Internals::activeAudioRouteDidChange):
        * testing/Internals.h:
        * testing/Internals.idl:

2021-04-02  Youenn Fablet  <youenn@apple.com>

        Start observing outgoing audio/video sources asynchronously
        https://bugs.webkit.org/show_bug.cgi?id=224040

        Reviewed by Eric Carlson.

        We delay sending media a little bit to guarantee that senders can be
        assigned a transform synchronously at creation time.
        This guarantees all sent media will go through the transform.
        Difficult to test in practice as this would be very racy.

        * Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.cpp:
        (WebCore::operator==):
        (WebCore::LibWebRTCRtpSenderBackend::startSource):
        * Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.h:

2021-04-02  Rob Buis  <rbuis@igalia.com>

        Subpixel layout: Switch inlines' baseline positioning from int to LayoutUnit.
        https://bugs.webkit.org/show_bug.cgi?id=133932

        Reviewed by Zalan Bujtas.

        This change converts the int returns type to LayoutUnit.
        To match the old behavior, the implicit toInt() calls
        have been replaced by explicit toInt() calls.

        * rendering/GridBaselineAlignment.cpp:
        (WebCore::GridBaselineAlignment::ascentForChild const):
        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::baselinePosition const):
        * rendering/InlineBox.h:
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::baselinePosition const):
        * rendering/InlineTextBox.h:
        * rendering/RenderAttachment.cpp:
        (WebCore::RenderAttachment::baselinePosition const):
        * rendering/RenderAttachment.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::baselinePosition const):
        (WebCore::RenderBlock::firstLineBaseline const):
        (WebCore::RenderBlock::inlineBlockBaseline const):
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::firstLineBaseline const):
        (WebCore::RenderBlockFlow::inlineBlockBaseline const):
        * rendering/RenderBlockFlow.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::baselinePosition const):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::firstLineBaseline const):
        (WebCore::RenderBox::inlineBlockBaseline const):
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::baselinePosition const):
        * rendering/RenderButton.h:
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::synthesizedBaselineFromBorderBox):
        (WebCore::RenderFlexibleBox::baselinePosition const):
        (WebCore::RenderFlexibleBox::firstLineBaseline const):
        (WebCore::RenderFlexibleBox::inlineBlockBaseline const):
        * rendering/RenderFlexibleBox.h:
        * rendering/RenderGrid.cpp:
        (WebCore::synthesizedBaselineFromBorderBox):
        (WebCore::RenderGrid::baselinePosition const):
        (WebCore::RenderGrid::firstLineBaseline const):
        (WebCore::RenderGrid::inlineBlockBaseline const):
        * rendering/RenderGrid.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::baselinePosition const):
        * rendering/RenderInline.h:
        * rendering/RenderLineBreak.cpp:
        (WebCore::RenderLineBreak::baselinePosition const):
        * rendering/RenderLineBreak.h:
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::baselinePosition const):
        * rendering/RenderListBox.h:
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::baselinePosition const):
        * rendering/RenderListMarker.h:
        * rendering/RenderMenuList.h:
        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::baselinePosition const):
        * rendering/RenderSlider.h:
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::baselinePosition const):
        (WebCore::RenderTable::inlineBlockBaseline const):
        (WebCore::RenderTable::firstLineBaseline const):
        * rendering/RenderTable.h:
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::firstLineBaseline const):
        * rendering/RenderTableSection.h:
        * rendering/RenderTextControl.h:
        * rendering/RenderTextControlMultiLine.cpp:
        (WebCore::RenderTextControlMultiLine::baselinePosition const):
        * rendering/RenderTextControlMultiLine.h:
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::baselinePosition const):
        * rendering/RootInlineBox.h:
        * rendering/mathml/RenderMathMLBlock.cpp:
        (WebCore::RenderMathMLBlock::baselinePosition const):
        (WebCore::RenderMathMLTable::firstLineBaseline const):
        * rendering/mathml/RenderMathMLBlock.h:
        (WebCore::RenderMathMLBlock::ascentForChild):
        * rendering/mathml/RenderMathMLFraction.cpp:
        (WebCore::RenderMathMLFraction::firstLineBaseline const):
        * rendering/mathml/RenderMathMLFraction.h:
        * rendering/mathml/RenderMathMLOperator.cpp:
        (WebCore::RenderMathMLOperator::firstLineBaseline const):
        * rendering/mathml/RenderMathMLOperator.h:
        * rendering/mathml/RenderMathMLPadded.cpp:
        (WebCore::RenderMathMLPadded::firstLineBaseline const):
        * rendering/mathml/RenderMathMLPadded.h:
        * rendering/mathml/RenderMathMLRow.cpp:
        (WebCore::RenderMathMLRow::firstLineBaseline const):
        * rendering/mathml/RenderMathMLRow.h:
        * rendering/mathml/RenderMathMLScripts.cpp:
        (WebCore::RenderMathMLScripts::firstLineBaseline const):
        * rendering/mathml/RenderMathMLScripts.h:
        * rendering/mathml/RenderMathMLSpace.cpp:
        (WebCore::RenderMathMLSpace::firstLineBaseline const):
        * rendering/mathml/RenderMathMLSpace.h:
        * rendering/mathml/RenderMathMLToken.cpp:
        (WebCore::RenderMathMLToken::firstLineBaseline const):
        * rendering/mathml/RenderMathMLToken.h:

2021-04-02  Philippe Normand  <pnormand@igalia.com>

        REGRESSION(r268176): [GStreamer] media/video-orientation-canvas.html fails
        https://bugs.webkit.org/show_bug.cgi?id=223850

        Reviewed by Carlos Alberto Lopez Perez.

        The GL pipeline used by the player is now able to handle image rotation tags itself. Manual
        handling of the image rotation tags is now performed only when the pipeline is not able to
        do it by itself.

        * platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp:
        (webKitGLVideoSinkConstructed):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin):
        (WebCore::getVideoOrientation):
        (WebCore::MediaPlayerPrivateGStreamer::updateVideoSizeAndOrientationFromCaps):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:

2021-04-01  Yusuke Suzuki  <ysuzuki@apple.com>

        [WTF] Introduce RobinHoodHashTable
        https://bugs.webkit.org/show_bug.cgi?id=223895

        Reviewed by Fil Pizlo.

        * Modules/mediacapabilities/MediaCapabilities.cpp:
        (WebCore::bucketMIMETypes):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::popupValue const):
        * dom/Element.cpp:
        (WebCore::canAttachAuthorShadowRoot):
        * dom/QualifiedName.h:
        * dom/make_names.pl:
        (printNamesHeaderFile):
        (printFactoryCppFile):
        (printWrapperFactoryCppFile):
        * editing/FormatBlockCommand.cpp:
        (WebCore::isElementForFormatBlock):
        * editing/RemoveFormatCommand.cpp:
        (WebCore::isElementForRemoveFormatCommand):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::isProhibitedParagraphChild):
        * html/Autofill.cpp:
        (WebCore::fieldNameMap):
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::isCaseSensitiveAttribute):
        * html/HTMLObjectElement.cpp:
        (WebCore::preventsParentObjectFromExposure):
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::createCaseMap):
        (WebCore::adjustSVGTagNameCase):
        (WebCore::adjustAttributes):
        (WebCore::createForeignAttributesMap):
        (WebCore::adjustForeignAttributes):
        (WebCore::addNamesWithPrefix): Deleted.
        * page/DebugPageOverlays.cpp:
        (WebCore::touchEventRegionColors):
        (WebCore::NonFastScrollableRegionOverlay::drawRect):
        * page/PerformanceUserTiming.cpp:
        (WebCore::restrictedMarkNamesToNavigationTimingFunctionMap):
        * platform/cocoa/MIMETypeRegistryCocoa.mm:
        (WebCore::extensionsForMIMETypeMap):
        * platform/graphics/FontCascade.cpp:
        (WebCore::useBackslashAsYenSignForFamily):
        (WebCore::FontCascade::hasValidAverageCharWidth const):
        * platform/graphics/avfoundation/CDMFairPlayStreaming.cpp:
        (WebCore::validInitDataTypes):
        * platform/graphics/cg/UTIRegistry.cpp:
        (WebCore::defaultSupportedImageTypes):
        * platform/graphics/cg/UTIRegistry.h:
        * platform/graphics/cocoa/HEVCUtilitiesCocoa.mm:
        (WebCore::codecTypeForDoViCodecString):
        * platform/graphics/cocoa/SourceBufferParserWebM.cpp:
        (WebCore::SourceBufferParserWebM::supportedVideoCodecs):
        (WebCore::SourceBufferParserWebM::supportedAudioCodecs):
        * platform/graphics/cocoa/SourceBufferParserWebM.h:
        * rendering/svg/SVGResources.cpp:
        (WebCore::clipperFilterMaskerTags):
        (WebCore::markerTags):
        (WebCore::fillAndStrokeTags):
        (WebCore::chainableResourceTags):
        * style/StyleAdjuster.cpp:
        (WebCore::Style::hasEffectiveDisplayNoneForDisplayContents):
        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::isSupportedAttribute):
        * svg/SVGElement.cpp:
        (WebCore::createAttributeNameToCSSPropertyIDMap):
        (WebCore::SVGElement::animatableAttributeForName):
        (WebCore::SVGElement::cssPropertyIdForSVGAttributeName):
        * svg/SVGTests.cpp:
        (WebCore::SVGTests::addSupportedAttributes):
        * svg/SVGTests.h:
        * svg/SVGUseElement.cpp:
        (WebCore::createAllowedElementSet):
        (WebCore::isDisallowedElement):
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::isSupportedAttribute):
        * xml/XPathFunctions.cpp:
        (WebCore::XPath::createFunctionMap):
        * xml/XPathParser.cpp:
        (WebCore::XPath::createAxisNamesMap):

2021-04-02  Youenn Fablet  <youenn@apple.com>

        Bail out early if encoded frame is written twice
        https://bugs.webkit.org/show_bug.cgi?id=224041

        Reviewed by Eric Carlson.

        Test: http/wpt/webrtc/write-twice-transform.html

        * Modules/mediastream/libwebrtc/LibWebRTCRtpTransformBackend.cpp:
        (WebCore::LibWebRTCRtpTransformBackend::processTransformedFrame):
        In case the frame is written twice, the second write is considered as a no-op.

2021-04-01  Cameron McCormack  <heycam@apple.com>

        Remove redundant #if in RuntimeApplicationChecks.h.
        https://bugs.webkit.org/show_bug.cgi?id=224037

        Reviewed by Alexey Proskuryakov.

        * platform/RuntimeApplicationChecks.h:

2021-04-01  Zalan Bujtas  <zalan@apple.com>

        Expand on shouldComputeLogicalWidthFromAspectRatioAndInsets return logic
        https://bugs.webkit.org/show_bug.cgi?id=224057

        Reviewed by Rob Buis.

        In this patch we also start checking against logicalWidth/height instead of just width/height.

        * rendering/RenderBox.cpp:
        (WebCore::shouldComputeLogicalWidthFromAspectRatioAndInsets):
        (WebCore::RenderBox::shouldComputeLogicalHeightFromAspectRatio const):
        (WebCore::RenderBox::shouldComputeLogicalWidthFromAspectRatio const):
        (WebCore::RenderBox::shouldComputeLogicalWidthFromAspectRatioAndInsets const): Deleted.
        * rendering/RenderBox.h:

2021-04-01  Alex Christensen  <achristensen@webkit.org>

        REGRESSION(r272469) QuickLook previews broken in some places on macOS
        https://bugs.webkit.org/show_bug.cgi?id=224086

        Reviewed by Tim Horton.

        The linked-on-or-after check saves us from most compatibility problems, but QuickLook on macOS was broken.
        It uses schemes x-apple-ql-id and x-apple-ql-magic, which we allow to continue to have non-null origins.
        Covered by API tests.

        * page/SecurityOrigin.cpp:
        (WebCore::shouldTreatAsUniqueOrigin):

2021-04-01  Alex Christensen  <achristensen@webkit.org>

        Add more deprecation macros.

        I missed one in r275298

        * platform/network/cocoa/CertificateInfoCocoa.mm:
        (WebCore::CertificateInfo::dump const):

2021-04-01  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r274381.
        https://bugs.webkit.org/show_bug.cgi?id=224080

        Caused stuttery select scrolling

        Reverted changeset:

        "Add basic (non-momentum) wheel event handling for scroll
        snap"
        https://bugs.webkit.org/show_bug.cgi?id=222594
        https://trac.webkit.org/changeset/274381

2021-04-01  Rob Buis  <rbuis@igalia.com>

        aspect-ratio not recomputed on hover
        https://bugs.webkit.org/show_bug.cgi?id=224028

        Reviewed by Zalan Bujtas.

        Detect change in aspect-ratio on hover.

        Test: imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/replaced-element-dynamic-aspect-ratio.html

        * rendering/style/RenderStyle.cpp:
        (WebCore::rareNonInheritedDataChangeRequiresLayout):

2021-04-01  Chris Dumez  <cdumez@apple.com>

        Have the ServiceWorker process hold on to a file mapped version of the service worker scripts to save dirty memory
        https://bugs.webkit.org/show_bug.cgi?id=224015
        <rdar://75637679>

        Reviewed by Geoffrey Garen.

        Since r275267, the Network process holds on the file mapped (mmap'd) versions of the service worker
        scripts instead of heap allocated versions, in order to decrease its dirty memory use. However, the
        ServiceWorker process (which is often a regular WebProcess) was still using heap allocated service
        worker scripts. This patch is a follow-up to make sure the NetworkProcess sends its file mapped
        scripts to the ServiceWorker processes as ShareableResource handles in order to decrease the dirty
        memory usage of the ServiceWorker processes as well.

        No new tests, no Web-facing behavior change, just a decrease in dirty memory use in the ServiceWorker
        processes (which may be WebProcesses). I have done local testing with a very large service worker
        that uses a ~100MB main script, which imports another ~100MB sub-script. With my change, dirty
        memory usage goes from ~440MB to ~230MB in both the cold and warm cases ("Cold" meaning that the
        service worker was just registed and downloaded from the network and "Warm" meaning that the
        service worker had been previously registed and was loaded straight from the SWScriptStorage).

        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::hasOneSegment const):
        Add a utility function to SharedBuffer to check if it contains a single data segment.

        (WebCore::SharedBuffer::DataSegment::containsMappedFileData const):
        Add a utility function to check if a SharedBuffer DataSegment contains a MappedFileData object.

        * platform/SharedBuffer.h:

        * workers/service/ServiceWorkerContextData.h:
        (WebCore::ServiceWorkerContextData::ImportedScript::isolatedCopy const):
        Move IPC encoders / decoders for ServiceWorkerContextData and ServiceWorkerContextData::ImportedScript
        to the WebKit layer, in WebCoreArgumentCoders. This allows us to encode / decode the scripts as
        WebKit::ShareableHandle whenever possible. This way, when the NetworkProcess sends a
        ServiceWorkerContextData to the ServiceWorker process to launch a service worker, both the
        ServiceWorker process and the Network process share the same mmap'd versions of the scripts and we
        save on dirty memory use. This helps reduce dirty memory use in the ServiceWorker process in the
        warm case, where the scripts are loaded straight from the disk (via SWScriptStorage).

        * workers/service/ServiceWorkerGlobalScope.cpp:
        (WebCore::ServiceWorkerGlobalScope::didSaveScriptsToDisk):
        * workers/service/ServiceWorkerGlobalScope.h:
        * workers/service/context/SWContextManager.cpp:
        (WebCore::SWContextManager::didSaveScriptsToDisk):
        * workers/service/context/SWContextManager.h:
        * workers/service/context/ServiceWorkerThreadProxy.cpp:
        (WebCore::ServiceWorkerThreadProxy::didSaveScriptsToDisk):
        * workers/service/context/ServiceWorkerThreadProxy.h:
        * workers/service/server/SWServerToContextConnection.h:
        * workers/service/server/SWServerWorker.cpp:
        (WebCore::SWServerWorker::didSaveScriptsToDisk):
        In the cold case, once the NetworkProcess is done saving the scripts to disk, it now sends the
        file mapped version of the scripts to the ServiceWorker process, so that it can also replace
        its heap-allocated copies and save on dirty memory use.

2021-04-01  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WebGL] Use GraphicsContextGLOpenGLManager for ports using TextureMapper
        https://bugs.webkit.org/show_bug.cgi?id=224035

        Reviewed by Don Olmstead.

        Use GraphicsContextGLOpenGLManager for GTK, WPE and WinCairo ports
        to reduce duplicated code.

        GraphicsContextGLOpenGLBase.cpp isn't used by Cocoa ports.

        No behavior change.

        * PlatformMac.cmake:
        * Sources.txt:
        * SourcesCocoa.txt:
        * platform/graphics/opengl/GraphicsContextGLOpenGLManager.h:
        * platform/graphics/texmap/GraphicsContextGLTextureMapper.cpp:
        (WebCore::GraphicsContextGLOpenGL::create):
        (WebCore::GraphicsContextGLOpenGL::~GraphicsContextGLOpenGL):
        (WebCore::activeContexts): Deleted.

2021-04-01  Chris Lord  <clord@igalia.com>

        Make FontCache constructable and safe to use off the main thread
        https://bugs.webkit.org/show_bug.cgi?id=223997

        Reviewed by Darin Adler.

        So that we can have a separate FontCache for use with OffscreenCanvas
        on Worker threads, make FontCache constructable/destructable and
        ref-counted.

        This also changes some functions so that they no longer rely on static
        AtomString variables, as these paths would not be safe to use off the
        main thread, and changes main-thread checks to creation-thread checks.

        No new tests, no change in behavior.

        * platform/graphics/FontCache.cpp:
        (WebCore::FontCache::alternateFamilyName):
        (WebCore::FontCache::getCachedFontPlatformData):
        (WebCore::FontCache::fontForFamily):
        (WebCore::FontCache::similarFont):
        * platform/graphics/FontCache.h:
        (WebCore::FontCache::fontForFamily):
        (WebCore::FontCache::getCachedFontPlatformData):
        * platform/graphics/FontCascadeFonts.cpp:
        (WebCore::FontCascadeFonts::FontCascadeFonts):
        (WebCore::FontCascadeFonts::glyphDataForCharacter):
        * platform/graphics/FontCascadeFonts.h:
        (WebCore::FontCascadeFonts::primaryFont):
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::FontCache::similarFont):
        (WebCore::FontCache::platformAlternateFamilyName):
        * platform/graphics/freetype/FontCacheFreeType.cpp:
        (WebCore::FontCache::lastResortFallbackFont):
        (WebCore::getFamilyNameStringFromFamily):
        (WebCore::FontCache::platformAlternateFamilyName):
        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::FontCache::fontFromDescriptionAndLogFont):
        (WebCore::FontCache::lastResortFallbackFont):
        (WebCore::FontCache::platformAlternateFamilyName):

2021-04-01  Mark Lam  <mark.lam@apple.com>

        Fix some missing exception checks in HTMLMediaElement methods.
        https://bugs.webkit.org/show_bug.cgi?id=224038
        rdar://69573092

        Reviewed by Eric Carlson.

        Test: media/missing-exception-checks-in-HTMLMediaElement-methods.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setupAndCallJS):
        (WebCore::HTMLMediaElement::updateCaptionContainer):
        (WebCore::HTMLMediaElement::ensureMediaControlsInjectedScript):
        (WebCore::HTMLMediaElement::setControllerJSProperty):
        (WebCore::HTMLMediaElement::didAddUserAgentShadowRoot):
        (WebCore::HTMLMediaElement::updateMediaControlsAfterPresentationModeChange):
        (WebCore::HTMLMediaElement::getCurrentMediaControlsStatus):

2021-04-01  Jean-Yves Avenard  <jya@apple.com>

        Previous artwork isn't cleared when NowPlaying info doesn't contain an artwork
        https://bugs.webkit.org/show_bug.cgi?id=224031
        <rdar://76044544>

        Reviewed by Youenn Fablet.

        Manually tested, no framework available to test such change.

        * platform/audio/cocoa/MediaSessionManagerCocoa.mm:
        (WebCore::MediaSessionManagerCocoa::setNowPlayingInfo): use MRMediaRemoteSetNowPlayingInfoWithMergePolicy instead.
        * platform/mac/MediaRemoteSoftLink.h: Soft link MRMediaRemoteSetNowPlayingInfoWithMergePolicy
        * platform/mac/MediaRemoteSoftLink.mm:

2021-04-01  Jean-Yves Avenard  <jya@apple.com>

        Now Playing artwork doesn't update when changed.
        https://bugs.webkit.org/show_bug.cgi?id=223731
        <rdar://problem/75823923>

        Now Playing and Media Remote requires a unique identifier for the currently playing item.
        If the same identifier is provided for every call to MRMediaRemoteSetNowPlayingInfo,
        then some updates may be skipped.
        In earlier changes, the MediaSessionElement identifier was combined with the Media Element
        identifier which broke Now Playing as the MediaSession identifier never changes for the
        lifetime of the web content process.
        So we create a new method HTMLMediaElement::mediaUniqueIdentifier with a new MediaUniqueIdentifier
        that willthat will be updated whenever the source of a media element changes and stop
        using the MediaSession identifier when dealing with Now Playing.

        Reviewed by Eric Carlson.

        Manually tested, no framework available to test such change.

        * WebCore.xcodeproj/project.pbxproj: Add MediaUniqueIdentifier.h
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::prepareForLoad): Use setCurrentSrc instead of directly modifying m_currentSrc.
        (WebCore::HTMLMediaElement::selectMediaResource): Use setCurrentSrc instead of directly modifying m_currentSrc.
        (WebCore::HTMLMediaElement::loadResource): Use setCurrentSrc instead of directly modifying m_currentSrc.
        (WebCore::HTMLMediaElement::setCurrentSrc): Add convenience method, generate new MediaUniqueIdentifier each time m_currentSrc is modified.
        (WebCore::HTMLMediaElement::mediaUniqueIdentifier const): Return unique media identifier.
        (WebCore::HTMLMediaElement::mediaSessionUniqueIdentifier const): Deleted.
        * html/HTMLMediaElement.h:
        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::nowPlayingInfo const):
        * platform/audio/NowPlayingInfo.h: Use MediaUniqueIdentifier for uniqueIdentifier member.
        (WebCore::NowPlayingInfo::decode):
        * platform/audio/PlatformMediaSessionManager.h: Use MediaUniqueIdentifier instead.
        (WebCore::PlatformMediaSessionManager::lastUpdatedNowPlayingInfoUniqueIdentifier const):
        set kMRMediaRemoteNowPlayingInfoArtworkIdentifier in CFDictionary to the source of the artwork.
        Workaround a bug in Media Controller component.
        * platform/audio/cocoa/MediaSessionManagerCocoa.h:
        * platform/audio/cocoa/MediaSessionManagerCocoa.mm:
        (WebCore::MediaSessionManagerCocoa::setNowPlayingInfo):
        * platform/mac/MediaRemoteSoftLink.h: Soft-link kMRMediaRemoteNowPlayingInfoArtworkIdentifier symbol.
        * platform/mac/MediaRemoteSoftLink.mm:
        * testing/Internals.h: Add missing header.

2021-04-01  Devin Rousso  <drousso@apple.com>

        Limit the number of buttons shown in media controls
        https://bugs.webkit.org/show_bug.cgi?id=223909

        Reviewed by Eric Carlson.

        When in fullscreen, it's possible to have five different buttons to the right of "Play":
         - AirPlay
         - Enter Picture in Picture
         - Audio/Languages
         - Exit Full Screen
         - More...
        This turns the UI into something of an "icon soup" and should really be avoided, especially
        now that `OverflowButton` allows for a single button to have multiple actions (via a native
        contextmenu). This matches AVKit behavior.

        Tests: media/modern-media-controls/ios-inline-media-controls/ios-inline-media-dropping-controls.html:
               media/modern-media-controls/macos-fullscreen-media-controls/macos-fullscreen-media-controls-buttons-containers-styles.html:
               media/modern-media-controls/macos-fullscreen-media-controls/macos-fullscreen-media-controls-buttons-styles.html:
               media/modern-media-controls/macos-fullscreen-media-controls/macos-fullscreen-media-controls-constructor.html:
               media/modern-media-controls/macos-inline-media-controls/macos-inline-media-dropping-controls.html:

        * Modules/modern-media-controls/controls/inline-media-controls.js:
        (InlineMediaControls.prototype.layout):
        (InlineMediaControls.prototype._droppableButtons):
        (InlineMediaControls.prototype._collapsableButtons): Added.
        * Modules/modern-media-controls/controls/macos-fullscreen-media-controls.js:
        (MacOSFullscreenMediaControls):
        (MacOSFullscreenMediaControls.prototype.layout):
        (MacOSFullscreenMediaControls.prototype._collapsableButtons): Added.
        Limit the number of `visible` buttons in `rightContainer.children` by iteratively marking
        `dropped = true` on buttons that are also in `_collapsableButtons` until either there are
        no iterations left (`i < 0`) or the number of visible buttons is below the maximum (2 for
        inline and 3 for fullscreen).

        * Modules/modern-media-controls/controls/pip-button.js:
        (PiPButton.prototype.get contextMenuOptions): Added.
        * Modules/mediacontrols/MediaControlsHost.cpp:
        (WebCore::MediaControlsHost::showMediaControlsContextMenu):
        Add support for `includePictureInPicture` to the native contextmenu.

        * en.lproj/Localizable.strings:

        * testing/Internals.idl:
        * testing/Internals.h:
        * testing/Internals.cpp:
        (WebCore::Internals::setMediaControlsMaximumRightContainerButtonCountOverride): Added.
        * html/HTMLMediaElement.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setMediaControlsMaximumRightContainerButtonCountOverride): Added.
        * Modules/modern-media-controls/media/media-controller.js:
        (MediaController.prototype.set maximumRightContainerButtonCountOverride): Added.
        Add a way to override the default maximum right container button count for testing. This is
        useful for testing the functionality of a specific button when not in the collapsed state,
        allowing for tests to not have to worry about other state that may affect collapsing (e.g.
        the AirPlay button is shown when there are AirPlay targets).

2021-04-01  Zalan Bujtas  <zalan@apple.com>

        Cleanup shouldComputeLogicalWidthFromAspectRatio and shouldComputeLogicalWidthFromAspectRatioAndInsets
        https://bugs.webkit.org/show_bug.cgi?id=224044

        Reviewed by Antti Koivisto.

        Let's use "return foo()" (or "return !foo()") instead of
        if (!foo())
          return true;
        return false;

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::shouldComputeLogicalWidthFromAspectRatio const):
        (WebCore::RenderBox::shouldComputeLogicalWidthFromAspectRatioAndInsets const):

2021-04-01  Aditya Keerthi  <akeerthi@apple.com>

        [iOS] '-webkit-appearance: none' is not respected for searchfield decorations
        https://bugs.webkit.org/show_bug.cgi?id=224018

        Reviewed by Antti Koivisto.

        Specifying '-webkit-appearance: none' on a searchfield decoration
        pseudo-element fails to hide the native icon. This issue arises from
        the fact that we add the icon in the UA stylesheet, rather than painting
        it in the theme.

        To fix, remove the styles from the UA stylesheet, and paint the icon in
        RenderThemeIOS. If a different '-webkit-appearance' is specified the
        theme will not adjust styles or paint the icon.

        Test: fast/forms/ios/form-control-refresh/search/search-decoration-appearance.html

        * css/html.css:

        Remove the UA styles for searchfield decorations so that they are not
        applied when specifying a different -webkit-appearance.

        * rendering/RenderThemeIOS.h:
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::adjustSearchFieldDecorationPartStyle const):

        Adjust the style to match the native appearance.

        (WebCore::RenderThemeIOS::paintSearchFieldDecorationPart):

        Paint the native icon.

        (WebCore::RenderThemeIOS::adjustSearchFieldResultsDecorationPartStyle const):
        (WebCore::RenderThemeIOS::paintSearchFieldResultsDecorationPart):
        (WebCore::RenderThemeIOS::adjustSearchFieldResultsButtonStyle const):
        (WebCore::RenderThemeIOS::paintSearchFieldResultsButton):

2021-04-01  Martin Robinson  <mrobinson@igalia.com>

        Expose an alias for ScrollSnapOffsetInfo<T> to make it easier to use
        https://bugs.webkit.org/show_bug.cgi?id=223986

        Reviewed by Sergio Villar Senin.

        No new tests. This should not change behavior.

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::setStateScrollingNodeSnapOffsetsAsFloat): Use new aliases.
        * page/scrolling/ScrollSnapOffsetsInfo.cpp:
        (WebCore::FloatScrollSnapOffsetsInfo::convertUnits const): Ditto.
        (WebCore::LayoutScrollSnapOffsetsInfo::convertUnits const): Ditto.
        (WebCore::LayoutScrollSnapOffsetsInfo::closestSnapOffset const): Ditto.
        (WebCore::FloatScrollSnapOffsetsInfo::closestSnapOffset const): Ditto.
        (WebCore::ScrollSnapOffsetsInfo<float>::convertUnits const): Deleted.
        (WebCore::ScrollSnapOffsetsInfo<LayoutUnit>::convertUnits const): Deleted.
        (WebCore::ScrollSnapOffsetsInfo<LayoutUnit>::closestSnapOffset const): Deleted.
        (WebCore::ScrollSnapOffsetsInfo<float>::closestSnapOffset const): Deleted.
        * page/scrolling/ScrollSnapOffsetsInfo.h: Ditto.
        * page/scrolling/ScrollingStateScrollingNode.cpp:
        (WebCore::ScrollingStateScrollingNode::setSnapOffsetsInfo): Ditto.
        * page/scrolling/ScrollingStateScrollingNode.h:
        (WebCore::ScrollingStateScrollingNode::snapOffsetsInfo const): Ditto.
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::snapOffsetsInfo const): Ditto.
        * page/scrolling/ScrollingTreeScrollingNode.h: Ditto.
        * platform/ScrollController.cpp:
        (WebCore::ScrollController::updateScrollSnapPoints): Ditto.
        * platform/ScrollController.h: Ditto.
        * platform/ScrollSnapAnimatorState.h:
        (WebCore::ScrollSnapAnimatorState::snapOffsetInfo const): Ditto.
        (WebCore::ScrollSnapAnimatorState::setSnapOffsetInfo): Ditto.
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::ensureSnapOffsetsInfo): Ditto.
        (WebCore::ScrollableArea::snapOffsetInfo const): Ditto.
        (WebCore::ScrollableArea::setScrollSnapOffsetInfo): Ditto.
        * platform/ScrollableArea.h: Ditto.
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::gestureShouldBeginSnap): Ditto.

2021-04-01  Rob Buis  <rbuis@igalia.com>

        Use Element for checking Settings in CSSComputedStyleDeclaration
        https://bugs.webkit.org/show_bug.cgi?id=223598

        Reviewed by Darin Adler.

        Use Element for checking Settings in CSSComputedStyleDeclaration.
        Right now renderer is used but this will not work for non-rendered elements.

        Tests: fast/css/rotate-invalidate-if-disabled.html
               fast/css/scale-invalidate-if-disabled.html
               fast/css/translate-invalidate-if-disabled.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::valueForPropertyInStyle):

2021-04-01  Youenn Fablet  <youenn@apple.com>

        Add some logging to RTCRtpSender and RTCRtpReceiver
        https://bugs.webkit.org/show_bug.cgi?id=223991

        Reviewed by Eric Carlson.

        Add some logging around transforms.
        No change of behavior.

        * Modules/mediastream/PeerConnectionBackend.cpp:
        (WebCore::PeerConnectionBackend::setRemoteDescriptionSucceeded):
        * Modules/mediastream/RTCRtpReceiver.cpp:
        (WebCore::RTCRtpReceiver::RTCRtpReceiver):
        (WebCore::RTCRtpReceiver::setTransform):
        (WebCore::RTCRtpReceiver::logChannel const):
        * Modules/mediastream/RTCRtpReceiver.h:
        * Modules/mediastream/RTCRtpReceiver.idl:
        * Modules/mediastream/RTCRtpSender.cpp:
        (WebCore::RTCRtpSender::RTCRtpSender):
        (WebCore::RTCRtpSender::setTransform):
        (WebCore::RTCRtpSender::logChannel const):
        * Modules/mediastream/RTCRtpSender.h:
        * Modules/mediastream/RTCRtpSender.idl:

2021-03-31  Antoine Quint  <graouts@webkit.org>

        Move AnimationTimeline methods related to Styleable to Styleable
        https://bugs.webkit.org/show_bug.cgi?id=224012

        Reviewed by Dean Jackson.

        A number of public methods on AnimationTimeline make no use of any AnimationTimeline instance
        variables and instead call into Styleable:

            void elementWasRemoved(const Styleable&);
            void willChangeRendererForStyleable(const Styleable&);
            void cancelDeclarativeAnimationsForStyleable(const Styleable&);
            void animationWasAddedToStyleable(WebAnimation&, const Styleable&);
            void animationWasRemovedFromStyleable(WebAnimation&, const Styleable&);
            void removeDeclarativeAnimationFromListsForOwningElement(WebAnimation&, const Styleable&);
            void updateCSSAnimationsForStyleable(const Styleable&, const RenderStyle* currentStyle, const RenderStyle& afterChangeStyle, const RenderStyle* parentElementStyle);
            void updateCSSTransitionsForStyleable(const Styleable&, const RenderStyle& currentStyle, const RenderStyle& newStyle);

        These really belong on Styleable so we move them all over to that class with a new .cpp class
        for these non-trivial methods.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * animation/AnimationTimeline.cpp:
        (WebCore::AnimationTimeline::removeAnimation):
        (WebCore::AnimationTimeline::animationWasAddedToStyleable): Deleted.
        (WebCore::removeCSSTransitionFromMap): Deleted.
        (WebCore::AnimationTimeline::animationWasRemovedFromStyleable): Deleted.
        (WebCore::AnimationTimeline::removeDeclarativeAnimationFromListsForOwningElement): Deleted.
        (WebCore::AnimationTimeline::removeCSSAnimationCreatedByMarkup): Deleted.
        (WebCore::AnimationTimeline::elementWasRemoved): Deleted.
        (WebCore::AnimationTimeline::willChangeRendererForStyleable): Deleted.
        (WebCore::AnimationTimeline::cancelDeclarativeAnimationsForStyleable): Deleted.
        (WebCore::shouldConsiderAnimation): Deleted.
        (WebCore::AnimationTimeline::updateCSSAnimationsForStyleable): Deleted.
        (WebCore::keyframeEffectForElementAndProperty): Deleted.
        (WebCore::propertyInStyleMatchesValueForTransitionInMap): Deleted.
        (WebCore::transitionCombinedDuration): Deleted.
        (WebCore::transitionMatchesProperty): Deleted.
        (WebCore::compileTransitionPropertiesInStyle): Deleted.
        (WebCore::AnimationTimeline::updateCSSTransitionsForStyleableAndProperty): Deleted.
        (WebCore::AnimationTimeline::updateCSSTransitionsForStyleable): Deleted.
        * animation/AnimationTimeline.h:
        * animation/DeclarativeAnimation.cpp:
        (WebCore::DeclarativeAnimation::disassociateFromOwningElement):
        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::setEffectInternal):
        (WebCore::WebAnimation::setTimeline):
        (WebCore::WebAnimation::effectTargetDidChange):
        (WebCore::WebAnimation::persist):
        * dom/Element.cpp:
        (WebCore::Element::removedFromAncestor):
        * dom/PseudoElement.cpp:
        (WebCore::PseudoElement::clearHostElement):
        * rendering/updating/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::tearDownRenderers):
        * style/StyleTreeResolver.cpp:
        (WebCore::Style::TreeResolver::createAnimatedElementUpdate):
        * style/Styleable.cpp: Copied from Source/WebCore/animation/AnimationTimeline.cpp.
        (WebCore::Styleable::animationWasAdded const):
        (WebCore::removeCSSTransitionFromMap):
        (WebCore::Styleable::removeDeclarativeAnimationFromListsForOwningElement const):
        (WebCore::Styleable::animationWasRemoved const):
        (WebCore::removeCSSAnimationCreatedByMarkup):
        (WebCore::Styleable::elementWasRemoved const):
        (WebCore::Styleable::willChangeRenderer const):
        (WebCore::Styleable::cancelDeclarativeAnimations const):
        (WebCore::shouldConsiderAnimation):
        (WebCore::Styleable::updateCSSAnimations const):
        (WebCore::keyframeEffectForElementAndProperty):
        (WebCore::propertyInStyleMatchesValueForTransitionInMap):
        (WebCore::transitionCombinedDuration):
        (WebCore::transitionMatchesProperty):
        (WebCore::compileTransitionPropertiesInStyle):
        (WebCore::updateCSSTransitionsForStyleableAndProperty):
        (WebCore::Styleable::updateCSSTransitions const):
        * style/Styleable.h:

2021-03-31  Simon Fraser  <simon.fraser@apple.com>

        Feed preferred frames per second back to the UI process for each DisplayRefreshMonitor
        https://bugs.webkit.org/show_bug.cgi?id=224023

        Reviewed by Sam Weinig.

        DisplayRefreshMonitors should be responsive to the frame rate demands of their clients,
        so move from a model where DisplayRefreshMonitor has setPreferredFramesPerSecond()
        to one where it computes maxClientPreferredFramesPerSecond().

        DisplayRefreshMonitor needs to recompute maxClientPreferredFramesPerSecond when clients
        are added, removed, or when the preferred frame rate of a client changes.

        For now, just one of the DisplayRefreshMonitor implementations responds to adjustPreferredFramesPerSecond:
        DisplayRefreshMonitorMac sends IPC to the UI process, which DisplayLink can use on a per-connection
        basis to throttle the frequency of display updates sent to that process (which is important
        for power).

        * platform/graphics/DisplayRefreshMonitor.cpp:
        (WebCore::DisplayRefreshMonitor::addClient):
        (WebCore::DisplayRefreshMonitor::removeClient):
        (WebCore::DisplayRefreshMonitor::maximumClientPreferredFramesPerSecond const):
        (WebCore::DisplayRefreshMonitor::computeMaxPreferredFramesPerSecond):
        (WebCore::DisplayRefreshMonitor::clientPreferredFramesPerSecondChanged):
        * platform/graphics/DisplayRefreshMonitor.h:
        (WebCore::DisplayRefreshMonitor::maxClientPreferredFramesPerSecond const):
        (WebCore::DisplayRefreshMonitor::adjustPreferredFramesPerSecond):
        (WebCore::DisplayRefreshMonitor::setPreferredFramesPerSecond): Deleted.
        * platform/graphics/DisplayRefreshMonitorClient.cpp:
        (WebCore::DisplayRefreshMonitorClient::setPreferredFramesPerSecond):
        * platform/graphics/DisplayRefreshMonitorManager.cpp:
        (WebCore::DisplayRefreshMonitorManager::clientPreferredFramesPerSecondChanged):
        (WebCore::DisplayRefreshMonitorManager::setPreferredFramesPerSecond): Deleted.
        * platform/graphics/DisplayRefreshMonitorManager.h:

2021-03-31  Wenson Hsieh  <wenson_hsieh@apple.com>

        List of extents should be bounds-checked when iterating display list items
        https://bugs.webkit.org/show_bug.cgi?id=224019
        <rdar://problem/71851600>

        Reviewed by Tim Horton.

        Add a bounds check before attempting to access the vector of display list drawing item extents. In the case
        where we would've otherwise attempted to access an out-of-bounds item, we instead flag ourselves as invalid and
        stop early with `StopReplayReason::InvalidItemOrExtent`.

        * platform/graphics/displaylists/DisplayList.cpp:
        (WebCore::DisplayList::DisplayList::setTracksDrawingItemExtents):

        Drive-by fix: use `isEmpty()` in the release assertion instead of duplicating code.

        (WebCore::DisplayList::DisplayList::iterator::updateCurrentDrawingItemExtent):
        (WebCore::DisplayList::DisplayList::iterator::updateCurrentItem):
        * platform/graphics/displaylists/DisplayList.h:
        * platform/graphics/displaylists/DisplayListReplayer.cpp:
        (WebCore::DisplayList::Replayer::applyItem):
        (WebCore::DisplayList::Replayer::replay):
        * platform/graphics/displaylists/DisplayListReplayer.h:

        Rename the `StopReplayReason::InvalidItem` to `StopReplayReason::InvalidItemOrExtent`, to reflect that we may
        also stop replay when encountering invalid item extents.

2021-03-31  Tadeu Zagallo  <tzagallo@apple.com>

        Missing scope release in JSDOMBuiltinConstructorBase
        https://bugs.webkit.org/show_bug.cgi?id=216851
        <rdar://problem/69144642>

        Reviewed by Yusuke Suzuki.

        In JSDOMBuiltinConstructorBase::callFunctionWithCurrentArguments, we should release the
        ThrowScope before calling into JavaScript since we don't intend to handle the exception.

        Test: js/transform-stream.html

        * bindings/js/JSDOMBuiltinConstructorBase.cpp:
        (WebCore::JSDOMBuiltinConstructorBase::callFunctionWithCurrentArguments):

2021-03-31  Chris Dumez  <cdumez@apple.com>

        Use MACH_PORT_VALID() when wanting to check if a mach port is valid
        https://bugs.webkit.org/show_bug.cgi?id=224004

        Reviewed by Darin Adler.

        Use MACH_PORT_VALID() when wanting to check if a mach port is valid, instead of checking for
        MACH_PORT_NULL. MACH_PORT_VALID() is the correct way to check for validity since it also checks
        for the MACH_PORT_DEAD value.

        * page/cocoa/ResourceUsageThreadCocoa.mm:
        (WebCore::ResourceUsageThread::platformCollectCPUData):
        * platform/graphics/mac/GraphicsChecksMac.cpp:
        (WebCore::attachToAppleGraphicsControl):
        (WebCore::hasMuxCapability):

2021-03-31  Cameron McCormack  <heycam@apple.com>

        Avoid creating any complex text runs when font-size is zero.
        https://bugs.webkit.org/show_bug.cgi?id=223983

        Reviewed by Myles C. Maxfield.

        We have existing checks to handle `font-size: 0` on the simple
        text path, but not for complex text.  Handle this by creating
        no complex text runs for text with zero size.

        Test: fast/text/font-size-zero-complex.html

        * platform/graphics/ComplexTextController.cpp:
        (WebCore::ComplexTextController::collectComplexTextRuns):

2021-03-31  Mark Lam  <mark.lam@apple.com>

        Placate exception check validation below convertVariadicArguments().
        https://bugs.webkit.org/show_bug.cgi?id=224027
        rdar://68912995

        Reviewed by Saam Barati.

        Test: js/dom/missing-exception-check-in-convertVariadicArguments.html

        * bindings/js/JSDOMConvertVariadic.h:
        (WebCore::convertVariadicArguments):

2021-03-31  Venky Dass  <yaranamavenkataramana@apple.com>

        Null pointer access crash in WebCore::makeBoundaryPoint(..)
        https://bugs.webkit.org/show_bug.cgi?id=223977

        Reviewed by Darin Adler.

        In makeBoundaryPoint, position.containerNode() can be nullptr even if position.isNull() was false 

        Test: LayoutTests/editing/inserting/crash-make-boundary-point.html

        * dom/Position.cpp:
        (WebCore::makeBoundaryPoint):

2021-03-31  Eric Carlson  <eric.carlson@apple.com>

        [macOS] MediaSessionCoordinator should have join and leave methods
        https://bugs.webkit.org/show_bug.cgi?id=223955
        <rdar://problem/76021588>

        Reviewed by Jer Noble.
        
        Add 'join' and 'leave' methods to MediaSessionCoordinator so a page has to opt-in
        to participating in a coordinated session and can leave at any time. Don't have 
        the coordinator automatically call session methods when the private coordinator
        finishes, just signal the promise and let the page handle it.

        No new tests, updated media/media-session/mock-coordinator.html.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/mediasession/MediaMetadata.idl: Fix Conditional.
        * Modules/mediasession/MediaMetadataPlaylistMixin.idl: Ditto.

        * Modules/mediasession/MediaPositionState.h: Add logging template.
        (WTF::LogArgument<WebCore::MediaPositionState>::toString):

        * Modules/mediasession/MediaSession.cpp:
        (WebCore::MediaSession::MediaSession): Switch from beging a ContextDestructionObserver
        to an ActiveDOMObject to the wrapper won't be collected while an event dispatch
        is pending.
        (WebCore::MediaSession::virtualHasPendingActivity const): Prevent collection while
        event dispatch is pending.
        (WebCore::MediaSession::setPositionState): Improve logging.
        (WebCore::MediaPositionState::toJSONString const):
        * Modules/mediasession/MediaSession.h:
        * Modules/mediasession/MediaSession.idl:

        * Modules/mediasession/MediaSessionCoordinator.cpp:
        (WebCore::MediaSessionCoordinator::join): New.
        (WebCore::MediaSessionCoordinator::leave): New.
        (WebCore::MediaSessionCoordinator::seekTo): Reject unless state is 'joined'. Don't
        call session method.
        (WebCore::MediaSessionCoordinator::play): Ditto.
        (WebCore::MediaSessionCoordinator::pause): Ditto.
        (WebCore::MediaSessionCoordinator::setTrack): Ditto.
        (WebCore::MediaSessionCoordinator::positionStateChanged):
        (WebCore::MediaSessionCoordinator::playbackStateChanged):
        (WebCore::MediaSessionCoordinator::readyStateChanged): Do nothing unless state is
        'joined'. Improve logging.
        (WebCore::MediaSessionCoordinator::seekSessionToTime): Ditto.
        (WebCore::MediaSessionCoordinator::playSession): Ditto.
        (WebCore::MediaSessionCoordinator::pauseSession): Ditto.
        (WebCore::MediaSessionCoordinator::setSessionTrack): Ditto.
        * Modules/mediasession/MediaSessionCoordinator.h:
        (WebCore::MediaSessionCoordinator::identifier const):
        (WebCore::MediaSessionCoordinator::state const):
        * Modules/mediasession/MediaSessionCoordinator.idl:
        * Modules/mediasession/MediaSessionCoordinatorMixin.idl: Fix Conditional.

        * Modules/mediasession/MediaSessionCoordinatorPrivate.h: Declare new required methods.

        * Modules/mediasession/MediaSessionCoordinatorState.h: Define states.
        * Modules/mediasession/MediaSessionCoordinatorState.idl:

        * Modules/mediasession/MediaSessionPlaylistMixin.idl: Fix Conditional.

        * Sources.txt: Add JSMediaSessionCoordinatorState.cpp.

        * WebCore.xcodeproj/project.pbxproj:

        * testing/MockMediaSessionCoordinator.cpp:
        (WebCore::MockMediaSessionCoordinator::join):
        (WebCore::MockMediaSessionCoordinator::leave):
        (WebCore::MockMediaSessionCoordinator::coordinatorStateChanged):
        * testing/MockMediaSessionCoordinator.h:

2021-03-31  Zalan Bujtas  <zalan@apple.com>

        Remove misleading FIXME comment in RenderBox::shouldComputeLogicalWidthFromAspectRatioAndInsets
        https://bugs.webkit.org/show_bug.cgi?id=224020

        Reviewed by Simon Fraser.

        RenderStyle should not contain such logic (or any layout related logic for that matter).

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::shouldComputeLogicalWidthFromAspectRatioAndInsets const):

2021-03-31  Chris Lord  <clord@igalia.com>

        Make FontCache self-contained (remove static global variables)
        https://bugs.webkit.org/show_bug.cgi?id=223995

        Reviewed by Darin Adler.

        This refactors FontCache so that the iOS font lock, the
        FontPlatformDataCache, the FontDataCache, the FontVerticalDataCache,
        the FontSelector clients list and the generation counter all live on
        FontCache instead of in static global variables.

        No new tests, no change in behavior.

        * platform/graphics/FontCache.cpp:
        (WebCore::FontCache::FontCache):
        (WebCore::FontPlatformDataCacheKey::isHashTableDeletedValue const):
        (WebCore::FontCache::getCachedFontPlatformData):
        (WebCore::FontCache::verticalData):
        (WebCore::FontCache::fontForPlatformData):
        (WebCore::FontCache::purgeInactiveFontDataIfNeeded):
        (WebCore::FontCache::purgeInactiveFontData):
        (WebCore::FontCache::fontCount):
        (WebCore::FontCache::inactiveFontCount):
        (WebCore::FontCache::addClient):
        (WebCore::FontCache::removeClient):
        (WebCore::FontCache::invalidate):
        * platform/graphics/FontCache.h:
        (WebCore::FontCache::generation const):

2021-03-31  Sam Weinig  <weinig@apple.com>

        Merge DOMWindow+IndexedDatabase.idl and WorkerGlobalScope+IndexedDatabase.idl into a single WindowOrWorkerGlobalScope+IndexedDatabase.idl to match the IndexedDB spec
        https://bugs.webkit.org/show_bug.cgi?id=223856

        Reviewed by Sihui Liu.

        Replaces DOMWindow+IndexedDatabase.idl and WorkerGlobalScope+IndexedDatabase.idl with
        WindowOrWorkerGlobalScope+IndexedDatabase.idl which contains a partial mixin interface
        like specified. Also moves implementations of supplements into the cpp file, as the only
        use of them is by the two indexedDB static functions.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/indexeddb/DOMWindow+IndexedDatabase.idl: Removed.
        * Modules/indexeddb/DOMWindowIndexedDatabase.cpp: Removed.
        * Modules/indexeddb/DOMWindowIndexedDatabase.h: Removed.
        * Modules/indexeddb/WindowOrWorkerGlobalScope+IndexedDatabase.idl: Added.
        * Modules/indexeddb/WindowOrWorkerGlobalScopeIndexedDatabase.cpp: Added.
        (WebCore::DOMWindowIndexedDatabase::supplementName):
        (WebCore::WorkerGlobalScopeIndexedDatabase::supplementName):
        (WebCore::WindowOrWorkerGlobalScopeIndexedDatabase::indexedDB):
        (WebCore::DOMWindowIndexedDatabase::DOMWindowIndexedDatabase):
        (WebCore::DOMWindowIndexedDatabase::from):
        (WebCore::DOMWindowIndexedDatabase::indexedDB):
        (WebCore::WorkerGlobalScopeIndexedDatabase::WorkerGlobalScopeIndexedDatabase):
        (WebCore::WorkerGlobalScopeIndexedDatabase::from):
        (WebCore::WorkerGlobalScopeIndexedDatabase::indexedDB):
        * Modules/indexeddb/WindowOrWorkerGlobalScopeIndexedDatabase.h: Added.
        * Modules/indexeddb/WorkerGlobalScope+IndexedDatabase.idl: Removed.
        * Modules/indexeddb/WorkerGlobalScopeIndexedDatabase.cpp: Removed.
        * Modules/indexeddb/WorkerGlobalScopeIndexedDatabase.h: Removed.
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMWindowCustom.cpp:
        * inspector/agents/InspectorIndexedDBAgent.cpp:

2021-03-30  Simon Fraser  <simon.fraser@apple.com>

        Assertions in DisplayUpdate when dragging WebView windows between screens with different refresh rates
        https://bugs.webkit.org/show_bug.cgi?id=223984

        Reviewed by Sam Weinig.

        There are various reasons why rigorous assertions in DisplayUpdate::relevantForUpdateFrequency()
        are ill advised.

        When WebKitLegacy calls windowScreenDidChange() it does not pass in a nominal display
        refresh rate, so we assume 60fps. If the screen actually has a non-60fps refresh rate, then
        we can get mixed 60/50 state in various places; this change fixes one of them, but such bugs
        have to not result in assertions or divide by zero crashes in
        DisplayUpdate::relevantForUpdateFrequency().

        The second reason is webkit.org/b/212120; we may start DisplayRefreshMonitors with DisplayID
        0 before we know what screen we're on, again risking a situation where the actual screen has
        a non-60fps refresh rate.

        To fix the case where no nominal refresh rate is passed through
        Chrome::windowScreenDidChange(), allow a DisplayRefreshMonitor to supply a rate; often, a
        DisplayRefreshMonitor can compute one from its knowledge of the display. This requires
        DisplayRefreshMonitorManager is able to create a DisplayRefreshMonitor with no client, so
        support that with a little refactoring.

        Have some DisplayRefreshMonitor implementations supply their nominal display refresh rate
        when known.

        * page/Chrome.cpp:
        (WebCore::Chrome::windowScreenDidChange): No need to early return here; Page does the same check.
        * page/Page.cpp:
        (WebCore::Page::windowScreenDidChange): Push the call to adjustRenderingUpdateFrequency() into 
        renderingUpdateScheduler().windowScreenDidChange() as suggested in a previous review.
        * page/RenderingUpdateScheduler.cpp:
        (WebCore::RenderingUpdateScheduler::windowScreenDidChange):
        * platform/graphics/DisplayRefreshMonitor.h:
        (WebCore::DisplayRefreshMonitor::displayNominalFramesPerSecond):
        * platform/graphics/DisplayRefreshMonitorManager.cpp:
        (WebCore::DisplayRefreshMonitorManager::ensureMonitorForDisplayID):
        (WebCore::DisplayRefreshMonitorManager::nominalFramesPerSecondForDisplay):
        (WebCore::DisplayRefreshMonitorManager::monitorForClient):
        * platform/graphics/DisplayRefreshMonitorManager.h:
        * platform/graphics/DisplayUpdate.cpp:
        (WebCore::DisplayUpdate::relevantForUpdateFrequency const):
        * platform/graphics/ios/DisplayRefreshMonitorIOS.h:
        * platform/graphics/ios/DisplayRefreshMonitorIOS.mm:
        (WebCore::DisplayRefreshMonitorIOS::displayNominalFramesPerSecond):
        * platform/graphics/mac/LegacyDisplayRefreshMonitorMac.cpp:
        (WebCore::LegacyDisplayRefreshMonitorMac::ensureDisplayLink):
        (WebCore::LegacyDisplayRefreshMonitorMac::startNotificationMechanism):
        (WebCore::LegacyDisplayRefreshMonitorMac::displayNominalFramesPerSecond):
        * platform/graphics/mac/LegacyDisplayRefreshMonitorMac.h:

2021-03-31  Sihui Liu  <sihui_liu@apple.com>

        Add logging in IndexedDB to help debug flaky quota tests
        https://bugs.webkit.org/show_bug.cgi?id=223578
        <rdar://problem/75956789>

        Reviewed by Alexey Proskuryakov.

        With r274323, we know that the tests fail because of IndexedDB. IndexedDB data should be cleared between tests, 
        so let's add more logging to see what databases are left.

        * Modules/indexeddb/server/IDBServer.cpp:
        (WebCore::IDBServer::IDBServer::diskUsage):
        * Modules/indexeddb/server/IDBServer.h:
        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
        (WebCore::IDBServer::SQLiteIDBBackingStore::databasesSizeForDirectory):
        * Modules/indexeddb/server/SQLiteIDBBackingStore.h:

2021-03-31  Alex Christensen  <achristensen@webkit.org>

        Add deprecation macros.

        * platform/network/cf/CertificateInfoCFNet.cpp:
        (WebCore::certificatesMatch):
        (WebCore::CertificateInfo::certificateChainFromSecTrust):
        (WebCore::CertificateInfo::containsNonRootSHA1SignedCertificate const):

2021-03-31  Antoine Quint  <graouts@webkit.org>

        Remove CA_WHERE_ADDITIVE_TRANSFORMS_ARE_REVERSED
        https://bugs.webkit.org/show_bug.cgi?id=224000

        Reviewed by Simon Fraser.

        Since trunk is no longer maintained on macOS versions earlier than 10.15,
        we can remove this compile-time flag.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::updateAnimations):

2021-03-31  Patrick Angle  <pangle@apple.com>

        Web Inspector: CSS Grid overlay track sizes are incorrect when inline styles are applied to the element
        https://bugs.webkit.org/show_bug.cgi?id=223908

        Reviewed by BJ Burg.

        Add checking the inline style attributes on an element when collecting authored track sizes for grid overlays.

        * inspector/InspectorOverlay.cpp:
        (WebCore::authoredGridTrackSizes):

2021-03-31  Chris Dumez  <cdumez@apple.com>

        ServiceWorkerContextData should not be saved both on ServiceWorkerThread & ServiceWorkerGlobalScope
        https://bugs.webkit.org/show_bug.cgi?id=224001

        Reviewed by Geoffrey Garen.

        ServiceWorkerContextData should not be saved both on ServiceWorkerThread & ServiceWorkerGlobalScope.
        ServiceWorkerContextData contains script sources and may use a large amount of memory.

        To address the issue, we now clear ServiceWorkerThread's context data once the ServiceWorkerGlobalScope
        has been constructed.

        * inspector/agents/worker/ServiceWorkerAgent.cpp:
        (WebCore::ServiceWorkerAgent::getInitializationInfo):
        * workers/service/ServiceWorkerGlobalScope.cpp:
        (WebCore::ServiceWorkerGlobalScope::create):
        (WebCore::ServiceWorkerGlobalScope::ServiceWorkerGlobalScope):
        * workers/service/ServiceWorkerGlobalScope.h:
        * workers/service/context/SWContextManager.cpp:
        (WebCore::SWContextManager::registerServiceWorkerThreadForInstall):
        * workers/service/context/ServiceWorkerThread.cpp:
        (WebCore::ServiceWorkerThread::ServiceWorkerThread):
        (WebCore::ServiceWorkerThread::createWorkerGlobalScope):
        (WebCore::ServiceWorkerThread::heartBeatTimerFired):
        (WebCore::ServiceWorkerThread::finishedFiringInstallEvent):
        * workers/service/context/ServiceWorkerThread.h:
        (WebCore::ServiceWorkerThread::identifier const):
        (WebCore::ServiceWorkerThread::jobDataIdentifier const):
        (WebCore::ServiceWorkerThread::contextData const): Deleted.
        * workers/service/context/ServiceWorkerThreadProxy.cpp:
        (WebCore::ServiceWorkerThreadProxy::ServiceWorkerThreadProxy):
        * workers/service/context/ServiceWorkerThreadProxy.h:

2021-03-31  Antoine Quint  <graouts@webkit.org>

        font-stretch should support 0% and disallow animating to a value below 0%
        https://bugs.webkit.org/show_bug.cgi?id=223994

        Reviewed by Antti Koivisto.

        Trying to fix css/css-fonts/animations/font-stretch-interpolation.html showed two issues:
        
        1. we disallowed 0% as a valid value when parsing font-stretch,
        2. we allowed negative values when blending.

        This patch addresses both.

        * animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFunc):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::fontStretchIsWithinRange):

2021-03-31  Antoine Quint  <graouts@webkit.org>

        Remove the Silently argument to WebAnimation::cancel()
        https://bugs.webkit.org/show_bug.cgi?id=223992

        Reviewed by Frédéric Wang.

        The recent commit r275228 removed the use of the Silently argument in
        AnimationTimeline::cancelDeclarativeAnimationsForStyleable(), which
        was the only function that would eventually call into WebAnimation::cancel()
        with a value other than the default, Silently::No.

        So we remove that argument to WebAnimation::cancel(), its call sites and
        WebAnimation::resetPendingTasks() which was called from it.

        And since the Silently enum is no longer used outside of WebAnimation.cpp,
        we move it to be private.

        * animation/AnimationTimeline.cpp:
        (WebCore::AnimationTimeline::elementWasRemoved):
        (WebCore::AnimationTimeline::cancelDeclarativeAnimationsForStyleable):
        * animation/AnimationTimeline.h:
        * animation/DeclarativeAnimation.cpp:
        (WebCore::DeclarativeAnimation::cancel):
        * animation/DeclarativeAnimation.h:
        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::cancel):
        (WebCore::WebAnimation::resetPendingTasks):
        * animation/WebAnimation.h:
        * rendering/updating/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::tearDownRenderers):

2021-03-31  Antti Koivisto  <antti@apple.com>

        Use :is() instead of :matches() on UA stylesheet
        https://bugs.webkit.org/show_bug.cgi?id=223996

        Reviewed by Antoine Quint.

        Use the standard name.

        * css/html.css:
        (:is(article, aside, nav, section) h1):
        (:is(article, aside, nav, section) :is(article, aside, nav, section) h1):
        (:is(article, aside, nav, section) :is(article, aside, nav, section) :is(article, aside, nav, section) h1):
        (:is(article, aside, nav, section) :is(article, aside, nav, section) :is(article, aside, nav, section) :is(article, aside, nav, section) h1):
        (:is(article, aside, nav, section) :is(article, aside, nav, section) :is(article, aside, nav, section) :is(article, aside, nav, section) :is(article, aside, nav, section) h1):
        (#endif):
        (#if defined(WTF_PLATFORM_IOS_FAMILY) && WTF_PLATFORM_IOS_FAMILY):
        (input:is([type="hidden"], [type="image"], [type="file"])):
        (input:is([type="radio"], [type="checkbox"])):
        (input:is([type="button"], [type="submit"], [type="reset"])):
        (input:is([type="button"], [type="submit"], [type="reset"]), input[type="file"]::file-selector-button, button):
        (input:is([type="button"], [type="submit"], [type="reset"]):active, input[type="file"]::file-selector-button:active, button:active):
        (input:is([type="button"], [type="submit"], [type="reset"]):active, input[type="file"]:active::file-selector-button, button:active):
        (input:is([type="button"], [type="submit"], [type="reset"]):active:disabled,):
        (input:is([type="button"], [type="submit"], [type="reset"]):disabled,):
        (input:is([type="checkbox"], [type="radio"]):checked):
        (input:is([type="checkbox"], [type="radio"]):disabled):
        (input:is([type="checkbox"], [type="radio"]):checked:disabled):
        (:matches(article, aside, nav, section) h1): Deleted.
        (:matches(article, aside, nav, section) :matches(article, aside, nav, section) h1): Deleted.
        (:matches(article, aside, nav, section) :matches(article, aside, nav, section) :matches(article, aside, nav, section) h1): Deleted.
        (:matches(article, aside, nav, section) :matches(article, aside, nav, section) :matches(article, aside, nav, section) :matches(article, aside, nav, section) h1): Deleted.
        (:matches(article, aside, nav, section) :matches(article, aside, nav, section) :matches(article, aside, nav, section) :matches(article, aside, nav, section) :matches(article, aside, nav, section) h1): Deleted.
        (input:matches([type="hidden"], [type="image"], [type="file"])): Deleted.
        (input:matches([type="radio"], [type="checkbox"])): Deleted.
        (input:matches([type="button"], [type="submit"], [type="reset"])): Deleted.
        (input:matches([type="button"], [type="submit"], [type="reset"]), input[type="file"]::file-selector-button, button): Deleted.
        (input:matches([type="button"], [type="submit"], [type="reset"]):active, input[type="file"]::file-selector-button:active, button:active): Deleted.
        (input:matches([type="button"], [type="submit"], [type="reset"]):active, input[type="file"]:active::file-selector-button, button:active): Deleted.
        (input:matches([type="button"], [type="submit"], [type="reset"]):active:disabled,): Deleted.
        (input:matches([type="button"], [type="submit"], [type="reset"]):disabled,): Deleted.
        (input:matches([type="checkbox"], [type="radio"]):checked): Deleted.
        (input:matches([type="checkbox"], [type="radio"]):disabled): Deleted.
        (input:matches([type="checkbox"], [type="radio"]):checked:disabled): Deleted.

2021-03-31  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] Do not merge anonymous table cells with mismatching children types
        https://bugs.webkit.org/show_bug.cgi?id=223979
        <rdar://76003320>

        Reviewed by Antti Koivisto.

        A table cell (as it establishes a block formatting context) should only contain either
        inline or block level inflow boxes.

        * rendering/RenderElement.h:
        (WebCore::RenderElement::firstInFlowChild const):
        (WebCore::RenderElement::lastInFlowChild const):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isInFlow const):
        (WebCore::RenderObject::previousInFlowSibling const):
        (WebCore::RenderObject::nextInFlowSibling const):
        * rendering/updating/RenderTreeBuilderTable.cpp:
        (WebCore::canCollapseNextSibling):
        (WebCore::RenderTreeBuilder::Table::collapseAndDetachAnonymousNextSibling):

2021-03-31  Antti Koivisto  <antti@apple.com>

        Animated pseudo element style resolved against wrong parent style
        https://bugs.webkit.org/show_bug.cgi?id=223990
        rdar://74997361

        Reviewed by Antoine Quint.
        
        In createAnimatedElementUpdate we get the parent and parent box styles from the parent stack.
        This is wrong for pseudo elements. Their parent style should the host style which is not pushed to the stack.
        
        This matters in style adjuster which may apply wrong adjustments as a result.

        Test: fast/animation/pseudo-element-style-adjuster.html

        * style/StyleTreeResolver.cpp:
        (WebCore::Style::TreeResolver::resolveElement):
        (WebCore::Style::TreeResolver::resolvePseudoStyle):
        (WebCore::Style::TreeResolver::createAnimatedElementUpdate):
        
        Make static and provide the parent and parent box styles as parameters.
        
        * style/StyleTreeResolver.h:

2021-03-31  Youenn Fablet  <youenn@apple.com>

        Apply permission policy to geolocation
        https://bugs.webkit.org/show_bug.cgi?id=223248

        Reviewed by Eric Carlson.

        Only allow third-party iframes if allowed by permission policy,
        following https://w3c.github.io/geolocation-api/#permissions-policy.
        Covered by API tests.

        * Modules/geolocation/Geolocation.cpp:
        (WebCore::Geolocation::shouldBlockGeolocationRequests):
        * html/FeaturePolicy.cpp:
        (WebCore::policyTypeName):
        (WebCore::FeaturePolicy::parse):
        (WebCore::FeaturePolicy::allows const):
        * html/FeaturePolicy.h:

2021-03-31  Thibault Saunier  <tsaunier@igalia.com> and Philippe Normand  <pnormand@igalia.com>

        [WebRTC][GStreamer] Build and use the openh264 based encoder if present on the system
        https://bugs.webkit.org/show_bug.cgi?id=202538

        Reviewed by Xabier Rodriguez-Calvar and Adrian Perez de Castro.

        Enable the openh264 encoder if it is available, it would be preferred over existing
        GStreamer H.264 encoders in such case.

        * platform/mediastream/libwebrtc/GStreamerVideoEncoderFactory.cpp:
        (WebCore::GStreamerVideoEncoder::AddCodecIfSupported):
        (WebCore::GStreamerVideoEncoderFactory::CreateVideoEncoder):

2021-03-30  Antoine Quint  <graouts@webkit.org>

        Computed style for a border-radius corner should never be 0px when the provided width isn't 0px
        https://bugs.webkit.org/show_bug.cgi?id=223927

        Reviewed by Dean Jackson.

        If "border-top-left-radius: 40px 0px" is provided, the computed style would return "0px" since
        BuilderConverter::convertRadius() would treat either of the dimensions for the radius being 0
        as both being 0.

        * style/StyleBuilderConverter.h:
        (WebCore::Style::BuilderConverter::convertRadius):

2021-03-30  Antoine Quint  <graouts@webkit.org>

        Fix interpolation of box-shadow and text-shadow CSS properties
        https://bugs.webkit.org/show_bug.cgi?id=223924

        Reviewed by Dean Jackson.

        There were three issues with interpolation of ShadowData-backed properties such
        as box-shadow and text-shadow:

        1. the blur radius should not be allowed to be negative,
        2. blending LayoutUnit had accuracy issues,
        3. we would allow interpolation to happen when items in lists did not have
           matching shadow styles ("inset" vs. unspecified).

        * animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFunc):
        * platform/animation/AnimationUtilities.h:
        (WebCore::blend):

2021-03-30  Antoine Quint  <graouts@webkit.org>

        Computed style for background-position should not use "left" and "top" keywords
        https://bugs.webkit.org/show_bug.cgi?id=223878

        Reviewed by Simon Fraser.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::valueForPropertyInStyle): Ensure querying the computed
        style for background-position longhands passes in the RenderStyle for the calc() case.
        (WebCore::createPositionListForLayer):

2021-03-30  Chris Dumez  <cdumez@apple.com>

        Service Worker scripts use too much memory in the network process
        https://bugs.webkit.org/show_bug.cgi?id=223808
        <rdar://75637093>

        Reviewed by Geoff Garen.

        Previously, the network process would store service worker scripts in a SQLite database.
        When starting to use service workers, we would load all those scripts from the database
        into memory. This would use a decent amount of memory in the network process.

        To address the issue, the approach is this patch is to store the scripts as separate
        files on the filesystem instead. This when, when loading them, we can simply mmap() them
        and greatly reduce dirty memory usage.

        Note that the service worker process (which may be the WebContent process) also keeps a
        copy of the imported service worker scripts for the service workers it is running. More
        work will be needed in a follow-up but we should be able to extend the approach so that
        the service worker process would only have a mmap'd version of those scripts. This would
        reduce dirty memory usage on the WebContent/ServiceWorker process side as well. I am
        doing this separately though to reduce patch size and facilitate review.

        No new tests, there should be no Web-facing behavior change, just a decreased
        dirty memory usage in the network process when service workers are used.

        I did manual memory testing with a very large service worker that had one ~100MB main
        script, importing another ~100MB script.

        Here are the memory results without my change:
        - Networking (Dirty): 238MB (cold) / 331MB (warm)
        - WebContent (Dirty): 441MB (cold) / 857MB (warm)

        Here are the memory results with my change:
        - Networking (Dirty): 22MB (cold) / 14MB (warm)
        - WebContent (Dirty): 440MB (cold) / 438MB (warm)

        This shows that ALL memory from the scripts in the network process is no longer marked
        as dirty. We also see a significant progression in the WebProcess in the warm case, since
        the scripts are coming from the network process as shared memory in this case. There is
        no progression in the WebProcess in the cold case yet, since the script were just
        downloaded and are coming from the WebProcess to the NetworkProcess. In a follow-up, the
        network process could send shared memory back to the WebProcess, after saving the scripts
        to disk, so that the WebProcess can replace the copies of its scripts and save more memory.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        Add new SWScriptStorage class to the project.

        * inspector/agents/worker/ServiceWorkerAgent.cpp:
        (WebCore::ServiceWorkerAgent::getInitializationInfo):
        Convert the script type from SharedBuffer to String.

        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::operator== const):
        Fix assertions that were hitting when comparing to empty SharedBuffers (offset would be 0
        and size would be 0). This was caught by API tests since we have some service worker API
        tests that use empty worker scripts.

        * workers/WorkerScriptLoader.cpp:
        (WebCore::WorkerScriptLoader::loadSynchronously):
        Add some conversion from String to SharedBuffer to the script, and vice-versa, in the
        service worker case.

        * workers/service/ServiceWorkerContextData.cpp:
        (WebCore::ServiceWorkerContextData::isolatedCopy const):
        (WebCore::scriptBufferToString):
        (WebCore::stringToScriptBuffer):
        * workers/service/ServiceWorkerContextData.h:
        (WebCore::ServiceWorkerContextData::ImportedScript::isolatedCopy const):
        (WebCore::ServiceWorkerContextData::ImportedScript::decode):
        (WebCore::ServiceWorkerContextData::decode):
        - Store scripts as SharedBuffer instead of String, so that they can hold
          mmap'd data.
        - Add scriptBufferToString() / stringToScriptBuffer() utility functions to
          convert script sources between String and SharedBuffer.

        * workers/service/context/ServiceWorkerThread.cpp:
        (WebCore::ServiceWorkerThread::ServiceWorkerThread):
        Convert from script from SharedBuffer to String.

        * workers/service/server/RegistrationDatabase.cpp:
        (WebCore::recordsTableSchema):
        Update database schema and bump version now that we no longer store the
        service worker script inside the SQLite database. Instead, those scripts
        are stored separately on the filesystem via SWScriptStorage.

        (WebCore::ImportedScriptAttributes::encode const):
        (WebCore::ImportedScriptAttributes::decode):
        Introduce new ImportedScriptAttributes struct which contains all the data
        members of ServiceWorkerContextData::ImportedScript, except for the actual
        script source. We now save a HashMap of ImportedScriptAttributes in the
        databasae instead of HashMap of ImportedScript since we no longer want to
        store imported script sources in the database, but rather store them
        separately on the file system.

        (WebCore::stripScriptSources):
        Utility function to convert a HashMap of ServiceWorkerContextData::ImportedScript
        into a HashMap of ImportedScriptAttributes (identical but without the script
        source), ready to save in the SQLite database.

        (WebCore::populateScriptSourcesFromDisk):
        Utility function to construct a HashMap of ServiceWorkerContextData::ImportedScript
        from a HasMap of ImportedScriptAttributes, coming from the SQLiteDatabase. The
        missing script sources are fetched from the disk via SWScriptStorage.

        (WebCore::RegistrationDatabase::~RegistrationDatabase):
        Make sure we destroy the SWScriptStorage on the background queue for thread-safety.

        (WebCore::RegistrationDatabase::scriptStorageDirectory const):
        Returns the path on the filesystem where service worker scripts are stored.

        (WebCore::RegistrationDatabase::scriptStorage):
        Constructs (if necessary) a SWScriptStorage and return it.

        (WebCore::RegistrationDatabase::clearAll):
        Make sure we clear all the service worker scripts on disk in addition to the database,
        now that they are stored separately.

        (WebCore::RegistrationDatabase::doPushChanges):
        - Stop storing the script sources in the SQLite database, and instead store them as separate
        files on the file system via SWScriptStorage.
        - Improve logging
        - When done storing the scripts to disk, send these new mmap'd versions back to the
          SWServerWorker on the main thread, so that it can replace it's heavy script sources with
          these ones. This helps reduce memory usage.

        (WebCore::RegistrationDatabase::importRecords):
        - Load the script sources from the disk via SWScriptStorage, now that they are no longer
          stored in the SQLite database.
        - Improve logging.

        * workers/service/server/RegistrationDatabase.h:

        * workers/service/server/RegistrationStore.cpp:
        (WebCore::RegistrationStore::didSaveWorkerScriptsToDisk):
        * workers/service/server/RegistrationStore.h:
        Pass scripts that were saved to disk from the store to the SWServerWorker so that it
        can replace its scripts sources with those new mmap'd version, in order to save memory.

        * workers/service/server/SWScriptStorage.cpp: Added.
        (WebCore::hashURL):
        (WebCore::SWScriptStorage::SWScriptStorage):
        (WebCore::SWScriptStorage::registrationDirectory const):
        (WebCore::SWScriptStorage::scriptPath const):
        (WebCore::SWScriptStorage::store):
        (WebCore::SWScriptStorage::retrieve):
        (WebCore::SWScriptStorage::clear):
        * workers/service/server/SWScriptStorage.h: Added.
        Add SWScriptStorage to deal with the storage / retrieval of Service
        Worker scripts to / from disk, as files on the file system. When
        going a retrieval, we return a script as a SharedBuffer which usually contains
        mmap'd() data (we don't use mmap() for files that are smaller than the PAGE_SIZE).
        The scripts reside in a Scripts/ folder, beside the database. The scripts are separated
        by origin (using SHA256 of the origin as folder name with salt), and then by registration (by
        using SHA256 of the registration scope as subfolder name with salt). The file name for the script
        is a SHA256 of the script URL with salt.

        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::didSaveWorkerScriptsToDisk):
        Pass scripts that were saved to disk from the store to the SWServerWorker so that it
        can replace its scripts sources with those new mmap'd version, in order to save memory.

        (WebCore::SWServer::updateWorker):
        Convert script from String to SharedBuffer.

        * workers/service/server/SWServerJobQueue.cpp:
        (WebCore::SWServerJobQueue::scriptFetchFinished):
        Convert script from SharedBuffer to String.

        * workers/service/server/SWServerToContextConnection.cpp:
        (WebCore::SWServerToContextConnection::setScriptResource):
        * workers/service/server/SWServerToContextConnection.h:
        Take in a ServiceWorkerContextData::ImportedScript for convenience, instead of taking
        all its data members as separate parameters.

        * workers/service/server/SWServerWorker.cpp:
        (WebCore::SWServerWorker::SWServerWorker):
        * workers/service/server/SWServerWorker.h:
        (WebCore::SWServerWorker::script const):
        Use SharedBuffer type for script instead of String type, so that we can hold on the
        mmap'd data and reduce memory usage.

2021-03-30  Devin Rousso  <drousso@apple.com>

        REGRESSION(r274607): media controls script is visible in Web Inspector even without the engineering "Show WebKit-internal scripts" enabled
        https://bugs.webkit.org/show_bug.cgi?id=223961

        Reviewed by Yusuke Suzuki.

        It turns out that Web Inspector will only ignore scripts that have a source URL directive
        that matches `__InjectedScript_*.js`, not those that have a (source) URL matching that.

        In addition to Web Inspector ignoring these scripts in the UI, it will also cause the
        `Debugger` to not pause in scripts with a matching source URL directive (unless the
        local build engineering only "Pause in WebKit-internal scripts" is enabled).

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::ensureMediaControlsInjectedScript):
        Change the `ScriptSourceCode` here to not have a `URL` and have `make-js-file-arrays.py`
        add a `//# sourceURL=__InjectedScript_*.js` to the contents before it's encoded.

2021-03-30  Venky Dass  <yaranamavenkataramana@apple.com>

        Nullptr crash in Crash in WebCore::positionInParentBeforeNode(..) where a NULL check is missing.
        https://bugs.webkit.org/show_bug.cgi?id=223639

        Reviewed by Ryosuke Niwa.

        In positionInParentBeforeNode(..) there is a null check missing on a pointer - hence the crash.

        Test: LayoutTests/editing/inserting/edit-style-and-insert-image.html

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply):

2021-03-30  Ryosuke Niwa  <rniwa@webkit.org>

        Occasional debug assert in GenericTaskQueue::~GenericTaskQueue
        https://bugs.webkit.org/show_bug.cgi?id=223913

        Reviewed by Eric Carlson.

        Eagerly initialize WeakPtrImpl so that we don't hit debug assertions.

        Also made Performance object use EventLoop.

        No new tests since there is no test case that reliably reproduces this issue.

        * dom/TaskSource.h:
        (TaskSource): Added PerformanceTimeline.
        * page/Performance.cpp:
        (WebCore::Performance::Performance):
        (WebCore::Performance::contextDestroyed):
        (WebCore::Performance::queueEntry): Use EventLoopTaskGroup instead of GenericTaskQueue to deliver entries.
        * page/Performance.h:
        * platform/GenericTaskQueue.h:
        (WebCore::GenericTaskQueue::GenericTaskQueue): Eagerly initialize WeakPtrImpl.
        Also assert that we're creating this object in the main thread.

2021-03-30  Peng Liu  <peng.liu6@apple.com>

        [GPUP] Add an IPC message to implement RemoteImageDecoderAVF::clearFrameBufferCache()
        https://bugs.webkit.org/show_bug.cgi?id=223707

        Reviewed by Youenn Fablet.

        No change in observable functionality.

        * platform/graphics/avfoundation/objc/ImageDecoderAVFObjC.h:
        Export method `clearFrameBufferCache()` so that we can call it from WebKit.

2021-03-30  Antti Koivisto  <antti@apple.com>

        Nullptr crash in applyCommonButtonPaddingToStyle
        https://bugs.webkit.org/show_bug.cgi?id=223917
        rdar://57262957

        Reviewed by Zalan Bujtas.

        * rendering/RenderThemeIOS.mm:
        (WebCore::applyCommonButtonPaddingToStyle):
        
        Null check frame.

2021-03-30  Frédéric Wang  <fwang@igalia.com>

        Release assert in compareAnimationsByCompositeOrder
        https://bugs.webkit.org/show_bug.cgi?id=223368

        Reviewed by Antoine Quint.

        AnimationTimeline::cancelDeclarativeAnimationsForStyleable currently only calls cancel() on
        the declarative animation, which means the owning element is still associated to the
        animation and that one continues to be accessible via Element's getAnimations(). When members
        like pause() are called on that animation, one can obtain inconsistent state for
        KeyframeEffectStack, leading to a debug ASSERT(!cssAnimationList->isEmpty()); and a
        RELEASE_ASSERT_NOT_REACHED() in compareCSSAnimations(). This patch forces the owning element
        to be clear during cancelDeclarativeAnimationsForStyleable in order to address these issues.
        More code refactoring and cleanup should be done in follow-up patches, though.

        Test: animations/animation-remove-element-crash.html

        * animation/AnimationTimeline.cpp:
        (WebCore::AnimationTimeline::cancelDeclarativeAnimationsForStyleable): Use cancelFromStyle()
        so that the owning element is also cleared.

2021-03-30  Antoine Quint  <graouts@webkit.org>

        CSS properties backed by StyleImage should not interpolate when one of the values is "none"
        https://bugs.webkit.org/show_bug.cgi?id=223929

        Reviewed by Dean Jackson.

        * animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFunc):

2021-03-30  Peng Liu  <peng.liu6@apple.com>

        Rename MediaElementSession::playbackPermitted() to MediaElementSession::playbackStateChangePermitted()
        https://bugs.webkit.org/show_bug.cgi?id=220939

        Reviewed by Youenn Fablet.

        A follow-up patch of r271870 to rename function `playbackPermitted()` and
        the enum class `MediaPlaybackOperation`.

        No new tests as there is no change in functionality.

        * Modules/mediacontrols/MediaControlsHost.cpp:
        (WebCore::MediaControlsHost::userGestureRequired const):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::canTransitionFromAutoplayToPlay const):
        (WebCore::HTMLMediaElement::setReadyState):
        (WebCore::HTMLMediaElement::play):
        (WebCore::HTMLMediaElement::pause):
        (WebCore::HTMLMediaElement::pauseInternal):
        (WebCore::HTMLMediaElement::setVolume):
        (WebCore::HTMLMediaElement::mediaPlayerDidAddAudioTrack):
        (WebCore::HTMLMediaElement::mediaPlayerCharacteristicChanged):
        (WebCore::HTMLMediaElement::updateShouldPlay):

        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::playbackStateChangePermitted const):
        (WebCore::MediaElementSession::canShowControlsManager const):
        (WebCore::MediaElementSession::updateMediaUsageIfChanged):
        (WebCore::MediaElementSession::playbackPermitted const): Deleted.
        * html/MediaElementSession.h:

2021-03-30  Antoine Quint  <graouts@webkit.org>

        Account for "hanging" and "each-line" when blending text-interpolation
        https://bugs.webkit.org/show_bug.cgi?id=223914

        Reviewed by Dean Jackson.

        * animation/CSSPropertyAnimation.cpp:
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):

2021-03-30  Antoine Quint  <graouts@webkit.org>

        [CSS Backgrounds] WPT test css/css-backgrounds/animations/border-image-width-interpolation.html asserts
        https://bugs.webkit.org/show_bug.cgi?id=206578

        Reviewed by Dean Jackson.

        Ensure we pass the RenderStyle through the methods eventually calling createValue() for calculated lengths.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForNinePieceImageQuad):
        (WebCore::valueForNinePieceImage):
        (WebCore::valueForReflection):
        (WebCore::ComputedStyleExtractor::valueForPropertyInStyle):

2021-03-30  Andres Gonzalez  <andresg_22@apple.com>

        Fix for accessibility/textarea-insertion-point-line-number.html.
        https://bugs.webkit.org/show_bug.cgi?id=223936
        <rdar://problem/76007361>

        Reviewed by Chris Fleizach.

        Test: accessibility/textarea-insertion-point-line-number.html

        Added AXCoreObject::insertionPointLineNumber to support this functionality.
        This replaces the previous implementation in the wrapper's accessibilityAttributeValue.
        There were several problems with the previous implementation that was
        doing an unnecessary and buggy round trip from Ranges to indexes and
        back to VisiblePositions.

        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityObjectInterface.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::insertionPointLineNumber const):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/isolatedtree/AXIsolatedObject.cpp:
        (WebCore::AXIsolatedObject::insertionPointLineNumber const):
        (WebCore::AXIsolatedObject::selectionStart const): Deleted.
        (WebCore::AXIsolatedObject::selectionEnd const): Deleted.
        * accessibility/isolatedtree/AXIsolatedObject.h:
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):

2021-03-29  Simon Fraser  <simon.fraser@apple.com>

        Allow non-60fps display updates to be driven by DisplayRefreshMonitor
        https://bugs.webkit.org/show_bug.cgi?id=223912

        Reviewed by Sam Weinig.
        
        Previously, RenderingUpdateScheduler::scheduleAnimation() would return false for any
        preferredFramesPerSecond which is not 60fps, causing RenderingUpdateScheduler to fall back
        to its timer mechanism. This meant that throttled (e.g. by low power) pages and display
        updates on non-60fps display would all use timers. This is undesirable because we want
        alignment with display refresh, and to avoid timer drift between multiple throttled
        documents.

        The fix has two parts. First, we need to fix RenderingUpdateScheduler and
        ScriptedAnimationController to compute their frame rates in terms of FramesPerSecond, rather
        than Seconds, because using the latter requires conversion to Seconds and back via
        m_page.preferredRenderingUpdateInterval() which was awkward. So have Page expose
        preferredRenderingUpdateFramesPerSecond().

        Also add preferredFramesPerSecond(), and have both it and preferredFrameInterval() take the
        "near 60fps" flag as an argument, so doing the common math in AnimationFrameRate.

        The second part of the fix is to move "preferredFramesPerSecond" from
        RenderingUpdateScheduler to DisplayRefreshMonitorClient, since clients should be able to
        request different frame rates. Then we pass the DisplayUpdate to
        DisplayRefreshMonitorClient::fireDisplayRefreshIfNeeded(), and finally use it to do the math
        of whether to skip an update for this client.

        Tested by API tests in AnimationFrameRate.cpp, and by
        fast/animation/request-animation-frame-throttling-lowPowerMode.html

        * dom/ScriptedAnimationController.cpp:
        (WebCore::ScriptedAnimationController::interval const): This function (used for testing)
        is just a synonym for preferredScriptedAnimationInterval(), but left here because it's exported
        and maybe the compiler can inline preferredScriptedAnimationInterval().
        (WebCore::ScriptedAnimationController::preferredScriptedAnimationInterval const): Just call
        preferredFrameInterval() with throttlingReasons(), which is the union of the reasons for
        the page and for this ScriptedAnimationController.
        (WebCore::ScriptedAnimationController::throttlingReasons const): No reason not to return m_throttlingReasons
        if we don't have a page. Should never happen.
        (WebCore::ScriptedAnimationController::shouldRescheduleRequestAnimationFrame const): Logging.
        (WebCore::ScriptedAnimationController::serviceRequestAnimationFrameCallbacks): Logging.
        * page/Page.cpp:
        (WebCore::Page::windowScreenDidChange): The display nominal FPS may have changed so recompute the update frequency.
        (WebCore::Page::preferredRenderingUpdateFramesPerSecond const): Return the preferred update in FramesPerSecond. Will return
        null if throttling results in a < 1fps update.
        (WebCore::Page::preferredRenderingUpdateInterval const): Push the "near 60fps" logic into the helper function.
        (WebCore::Page::setIsVisuallyIdleInternal): Clearer to use OptionSet<>::set().
        (WebCore::Page::handleLowModePowerChange): Ditto.
        * page/Page.h:
        (WebCore::Page::displayNominalFramesPerSecond const):
        (WebCore::Page::throttlingReasons const):
        * page/RenderingUpdateScheduler.cpp:
        (WebCore::RenderingUpdateScheduler::scheduleAnimation): Remove code that fell back to a timer for any non-60fps rate.
        (WebCore::RenderingUpdateScheduler::adjustRenderingUpdateFrequency): Compute if we have to use a timer.
        (WebCore::RenderingUpdateScheduler::scheduleRenderingUpdate):
        (WebCore::RenderingUpdateScheduler::setPreferredFramesPerSecond): Deleted.
        * page/RenderingUpdateScheduler.h:
        * platform/graphics/AnimationFrameRate.cpp: Simplify some code with halfSpeedThrottlingReasons.
        (WebCore::preferredFramesPerSecond): Similar logic to preferredFrameInterval, but for FramesPerSecond values.
        (WebCore::preferredFrameInterval):
        * platform/graphics/AnimationFrameRate.h:
        * platform/graphics/DisplayRefreshMonitor.cpp:
        (WebCore::DisplayRefreshMonitor::displayDidRefresh):
        * platform/graphics/DisplayRefreshMonitorClient.cpp:
        (WebCore::DisplayRefreshMonitorClient::setPreferredFramesPerSecond):
        (WebCore::DisplayRefreshMonitorClient::fireDisplayRefreshIfNeeded):
        * platform/graphics/DisplayRefreshMonitorClient.h:
        (WebCore::DisplayRefreshMonitorClient::preferredFramesPerSecond const):
        * platform/graphics/DisplayUpdate.cpp:
        (WebCore::DisplayUpdate::relevantForUpdateFrequency const): Compute whether this update is relevant
        for a client who wants updates at 'preferredFramesPerSecond'.
        * platform/graphics/DisplayUpdate.h:

2021-03-30  Antti Koivisto  <antti@apple.com>

        [LFC][Integration] Elements that overflow inline-blocks are not hit tested correctly
        https://bugs.webkit.org/show_bug.cgi?id=223932
        rdar://75888718

        Reviewed by Zalan Bujtas.
        
        If an inline block has overflowing children (for example due to negative margin) we may fail to hit test them.

        Test: fast/inline-block/hit-test-negative-margin-child.html

        * layout/integration/LayoutIntegrationLineLayout.cpp:
        (WebCore::LayoutIntegration::LineLayout::hitTest):
        
        Always descend into inline blocks even if their run didn't hit.

2021-03-30  Mark Lam  <mark.lam@apple.com>

        Ensure that GlobalPropertyInfo is allocated on the stack.
        https://bugs.webkit.org/show_bug.cgi?id=223911
        rdar://75865742

        Reviewed by Yusuke Suzuki.

        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::addBuiltinGlobals):
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::finishCreation):
        (WebCore::JSDOMWindowBase::initStaticGlobals):
        * bindings/js/JSDOMWindowBase.h:

2021-03-30  Sam Weinig  <weinig@apple.com>

        Generalize ColorComponents to support an arbritrary number of components (though really we will only ever want 3, 4, or 5)
        https://bugs.webkit.org/show_bug.cgi?id=223901

        Reviewed by Darin Adler.

        Add a length to ColorComponents to allow an arbitrary number of components. This
        will be used to support cases where we only want to carry the three color components
        (not alpha) and will be useful if we ever need to add back CMYKA support.

        A new dedecution guide added allows for cases that currently deduce to remain.

        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::makeColorTypeByNormalizingComponentsAfterMix):
        (WebCore::CSSPropertyParserHelpers::makeColorTypeByNormalizingComponentsAfterMix<HWBA<float>>):
        (WebCore::CSSPropertyParserHelpers::makeColorTypeByNormalizingComponentsAfterMix<HSLA<float>>):
        (WebCore::CSSPropertyParserHelpers::fixupHueComponentsPriorToMix):
        * platform/graphics/Color.cpp:
        (WebCore::Color::colorSpaceAndComponents const):
        * platform/graphics/Color.h:
        (WebCore::Color::OutOfLineComponents::create):
        (WebCore::Color::OutOfLineComponents::components const):
        (WebCore::Color::OutOfLineComponents::OutOfLineComponents):
        * platform/graphics/ColorComponents.h:
        (WebCore::ColorComponents::ColorComponents):
        (WebCore::mapColorComponents):
        (WebCore::N>::map const):
        (WebCore::=):
        (WebCore::N>::operator const):
        (WebCore::N>::abs const):
        (WebCore::N>::get const):
        (WebCore::N>::subset const):
        (WebCore::perComponentMax):
        (WebCore::perComponentMin):
        (WebCore::operator==):
        (WebCore::operator!=):
        (WebCore::ColorComponents<T>::map const): Deleted.
        (WebCore::ColorComponents<T>::operator const): Deleted.
        (WebCore::ColorComponents<T>::abs const): Deleted.
        (WebCore::ColorComponents<T>::get const): Deleted.
        * platform/graphics/ColorMatrix.h:
        (WebCore::RowCount>::transformedColorComponents const):
        (WebCore::applyMatricesToColorComponents):
        * platform/graphics/ColorSpace.h:
        (WebCore::callWithColorType):
        * platform/graphics/ColorTypes.h:
        (WebCore::makeFromComponents):
        (WebCore::clampedComponent):
        (WebCore::clampedComponents):
        (WebCore::clampedComponentsExceptAlpha):
        (WebCore::makeFromComponentsClamping):
        (WebCore::makeFromComponentsClampingExceptAlpha):
        (WebCore::asColorComponents):
        * platform/graphics/filters/FEColorMatrix.cpp:
        * platform/graphics/filters/FEMorphology.cpp:
        (WebCore::makeColorComponentsfromPixelValue):
        (WebCore::makePixelValueFromColorComponents):
        (WebCore::minOrMax):
        (WebCore::columnExtremum):
        (WebCore::kernelExtremum):
        (WebCore::FEMorphology::platformApplyGeneric):
        * platform/graphics/filters/FETurbulence.cpp:
        (WebCore::FETurbulence::noise2D const):
        (WebCore::toIntBasedColorComponents):
        (WebCore::FETurbulence::calculateTurbulenceValueForPoint const):
        * platform/graphics/filters/FETurbulence.h:
        * platform/graphics/filters/FilterOperation.cpp:
        (WebCore::hueRotate):

2021-03-30  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] Anonymous table cell collapsing should also cleanup the inline tree
        https://bugs.webkit.org/show_bug.cgi?id=223910

        Reviewed by Antti Koivisto.

        Let's delete the inline tree when the anonymous table cell is collapsed.
        It's completely redundant at this point as the content is moved over to a previous sibling.

        * rendering/updating/RenderTreeBuilderTable.cpp:
        (WebCore::RenderTreeBuilder::Table::collapseAndDetachAnonymousNextSibling):
        (WebCore::RenderTreeBuilder::Table::collapseAndDestroyAnonymousSiblingCells):
        (WebCore::RenderTreeBuilder::Table::collapseAndDestroyAnonymousSiblingRows):
        (WebCore::RenderTreeBuilder::Table::collapseAndDestroyAnonymousSiblings): Deleted.
        * rendering/updating/RenderTreeBuilderTable.h:

2021-03-30  Jean-Yves Avenard  <jya@apple.com>

        Now Playing content isn't updated when media session's Metadata is modified
        https://bugs.webkit.org/show_bug.cgi?id=223795
        <rdar://problem/75883478>

        Reviewed by Eric Carlson.

        Manually tested. Ensuring that immediately after modifying the MediaSession metadata, NowPlaying reflects the change.

        * Modules/mediasession/MediaSession.h:
        (WebCore::MediaSession::Observer::metadataChanged): Change method prototype to avoid unnecessary refcount.
        (WebCore::MediaSession::Observer::positionStateChanged): Change method prototype to pass argument by reference rather than value (and easier forward declaration).
        * Modules/mediasession/MediaSessionCoordinator.cpp:
        (WebCore::MediaSessionCoordinator::positionStateChanged):  Pass argument by reference rather than value.
        * Modules/mediasession/MediaSessionCoordinator.h:
        * Modules/mediasession/MediaSessionCoordinatorPrivate.h:
        * html/MediaElementSession.cpp: Add MediaSessionObserver class, we use separate proxy to avoid multiple inheritance of CanMakeWeakPtr.
        (WebCore::MediaSessionObserver::MediaSessionObserver):
        (WebCore::MediaSessionObserver::~MediaSessionObserver):
        (WebCore::MediaSessionObserver::actionHandlersChanged):
        (WebCore::MediaElementSession::registerWithDocument): Add MediaElementSession as Media Session observer when it's added to the DOM.
        (WebCore::MediaElementSession::unregisterWithDocument): Remove MediaElementSession as Media Session observer when it's removed from the DOM.
        (WebCore::MediaElementSession::didReceiveRemoteControlCommand): Simplify with new mediaSession() helper.
        (WebCore::MediaElementSession::nowPlayingInfo const): Simplify with new mediaSession() helper.
        (WebCore::MediaElementSession::mediaSession const): Helper to retrieve associated mediaSession object.
        (WebCore::MediaElementSession::ensureIsObservingMediaSession):
        (WebCore::MediaElementSession::metadataChanged): Call clientCharacteristicsChanged which will trigger the PlatformMediaSessionManager to refresh the NowPlayingInfo content.
        (WebCore::MediaElementSession::positionStateChanged): Method currently doing nothing. Preparing for future change.
        (WebCore::MediaElementSession::playbackStateChanged): Method currently doing nothing. Preparing for future change.
        (WebCore::MediaElementSession::actionHandlersChanged): Method currently doing nothing. Preparing for future change.
        * html/MediaElementSession.h: Add methods.
        * platform/cocoa/RemoteCommandListenerCocoa.h: Remove trailing whitespace.
        * testing/MockMediaSessionCoordinator.cpp:
        (WebCore::MockMediaSessionCoordinator::positionStateChanged): Update for new method prototyping.
        * testing/MockMediaSessionCoordinator.h:

2021-03-30  Antoine Quint  <graouts@webkit.org>

        Account for "cover" and "contain" when interpolating background-size
        https://bugs.webkit.org/show_bug.cgi?id=223879

        Reviewed by Antti Koivisto.

        * animation/CSSPropertyAnimation.cpp:

2021-03-30  Lauro Moura  <lmoura@igalia.com>

        [GTK][WPE] Timeouts on WPT css/css-images ref-tests after updating WPT import
        https://bugs.webkit.org/show_bug.cgi?id=214472

        Reviewed by Žan Doberšek.

        In some cases, degenerated and corner cases of grandient stops might
        trigger really slow operations in Cairo due to extremely high bezier
        parameters. For example, the normalization-conic-2.html triggered this
        by making the conic code calculate the tangent of 90 degrees for an
        interpolation stop.

        This commit adds some special handling for these cases to make sure the
        interpolation will be inside reasonable values.

        Covered by existing tests.

        * platform/graphics/cairo/GradientCairo.cpp:
        (WebCore::createConic): Handle degenerated stops

2021-03-29  Antoine Quint  <graouts@webkit.org>

        Enable "hanging" and "each-line" keywords for the text-indent CSS property
        https://bugs.webkit.org/show_bug.cgi?id=223851

        Reviewed by Antti Koivisto.

        We've had support for "hanging" and "each-line" behind the ENABLE_CSS3_TEXT flag. Probably by mistake,
        "hanging" itself was parsed and Web-exposed by default. Presumably that was the case because that CSS
        keyword existed in the context of SVG.

        But LineWidth.cpp already knew how to handle these keywords, so there seems to be no reason to keep
        these behind a flag.

        So we remove all the ENABLE_CSS3_TEXT guards related to they keywords and address some spec compliance
        issue, namely:
        
            1. add the text-indent length or percentage, the "hanging" and "each-line" keywords in that order
               in consumeTextIndent(),
            2. use that same order for the computed style.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::valueForPropertyInStyle):
        * css/CSSValueKeywords.in:
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeTextIndent):
        * layout/inlineformatting/InlineLineBuilder.cpp:
        (WebCore::Layout::LineBuilder::initialConstraintsForLine const):
        * rendering/line/LineWidth.cpp:
        (WebCore::requiresIndent):
        * rendering/style/RenderStyle.cpp:
        (WebCore::rareInheritedDataChangeRequiresLayout):
        * rendering/style/RenderStyle.h:
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::operator== const):
        * rendering/style/StyleRareInheritedData.h:
        * style/StyleBuilderCustom.h:
        (WebCore::Style::BuilderCustom::applyInheritTextIndent):
        (WebCore::Style::BuilderCustom::applyInitialTextIndent):
        (WebCore::Style::BuilderCustom::applyValueTextIndent):

2021-03-29  David Kilzer  <ddkilzer@apple.com>

        Remove unused struct WebCore::AlternativeTextController::AlternativeTextInfo
        <https://webkit.org/b/223902>

        Reviewed by Wenson Hsieh.

        * editing/AlternativeTextController.h:
        - Remove unused struct definition.

2021-03-29  Chris Dumez  <cdumez@apple.com>

        REGRESSION(r274992): Nullptr crash in FontCache::retrieveOrAddCachedFonts
        https://bugs.webkit.org/show_bug.cgi?id=223858
        <rdar://75883697>

        Reviewed by Darin Adler and Ryosuke Niwa.

        Stop using a hash as key in the FontCascadeCache. Instead, use HashTraits and use
        FontCascadeCacheKey as key.

        Test: fonts/font-cache-crash.html

        * platform/graphics/FontCache.cpp:
        (WebCore::FontCache::retrieveOrAddCachedFonts):
        (WTF::FontCascadeCacheKeyHash::hash):
        * platform/graphics/FontCache.h:
        (WebCore::FontCascadeCacheKey::operator== const):
        (WTF::FontCascadeCacheKeyHash::equal):
        (WTF::HashTraits<WebCore::FontCascadeCacheKey>::emptyValue):
        (WTF::HashTraits<WebCore::FontCascadeCacheKey>::constructDeletedValue):
        (WTF::HashTraits<WebCore::FontCascadeCacheKey>::isDeletedValue):

2021-03-29  Devin Rousso  <drousso@apple.com>

        Propagate user gestures through `requestAnimationFrame` just like `setTimeout`
        https://bugs.webkit.org/show_bug.cgi?id=223775
        <rdar://problem/75860868>

        Reviewed by Geoffrey Garen.

        `setTimeout` and `requestAnimationFrame` are used somewhat interchangeably on the web.
        There should be similar features/affordances for both so that if a developer decides to use
        a display-linked animation "loop" instead of a strictly time-based delay (or even a "loop")
        they're able to do similar things in the callback/handler.

        Test: fast/animation/request-animation-frame-propagate-user-gesture.html

        * dom/ScriptedAnimationController.h:
        * dom/ScriptedAnimationController.cpp:
        (WebCore::ScriptedAnimationController::resume):
        (WebCore::ScriptedAnimationController::registerCallback):
        (WebCore::ScriptedAnimationController::cancelCallback):
        (WebCore::ScriptedAnimationController::serviceRequestAnimationFrameCallbacks):
        Create a private struct for holding more data in the list of callbacks than just the
        callback itself. For now, the only other data saved is a `RefPtr<UserGestureToken>`.

        * testing/Internals.idl:
        * testing/Internals.h:
        * testing/Internals.cpp:
        (WebCore::Internals::withoutUserGesture): Added.
        Add a way for tests to guaranteed run arbitrary code without a user gesture.

2021-03-29  Said Abou-Hallawa  <said@apple.com>

        [GPU Process] Don't record DisplayList items if the GPU Process has been terminated
        https://bugs.webkit.org/show_bug.cgi?id=223864
        <rdar://73586187>

        Reviewed by Simon Fraser.

        Consult the DisplayList::Recorder::Delegate before appending the item.
        If the GPU Process was terminated, don't append the item.

        * platform/graphics/displaylists/DisplayListRecorder.cpp:
        (WebCore::DisplayList::Recorder::canAppendItemOfType):
        (WebCore::DisplayList::Recorder::willAppendItemOfType): Deleted.
        * platform/graphics/displaylists/DisplayListRecorder.h:
        (WebCore::DisplayList::Recorder::Delegate::canAppendItemOfType):
        (WebCore::DisplayList::Recorder::append):
        (WebCore::DisplayList::Recorder::Delegate::willAppendItemOfType): Deleted.

2021-03-29  ChangSeok Oh  <changseok@webkit.org>

        Implement repetition of animated AVIF
        https://bugs.webkit.org/show_bug.cgi?id=223127
        <rdar://problem/75629284>

        Reviewed by Philippe Normand.

        This change implements repeating AVIF animation, reflecting the AVIF sequence spec.
        As the libavif does not provide a clear repetition count yet, we calculate it
        by dividing the track duration by the sum of each frame duration. If the track duration
        is not specified, the animation repeats indefinitely. Chromium just indefinitely
        repeats all animated avif images.
        The repetition count of avif sequence images is not necessarily an integer.
        Since ScalableImageDecoder accepts an integer value for repetition,
        we round the repetition count in floating point values to conform the current
        image decoder design. Later, when we have more reliable testing environment
        for the avifs repetition, we will revisit the repetition count in floating point numbers.

        No new tests since no reliable test could be created. The latest avif encoder
        does not support the repetition count yet.

        * platform/image-decoders/avif/AVIFImageDecoder.cpp:
        (WebCore::AVIFImageDecoder::repetitionCount const):
        (WebCore::AVIFImageDecoder::tryDecodeSize):
        * platform/image-decoders/avif/AVIFImageDecoder.h:
        * platform/image-decoders/avif/AVIFImageReader.cpp:
        (WebCore::AVIFImageReader::repetitionCount const):
        * platform/image-decoders/avif/AVIFImageReader.h:

2021-03-29  Myles C. Maxfield  <mmaxfield@apple.com>

        [GPU Process] Simplify DisplayList::Iterator part 2: Rename setItemBufferClient to setItemBuffer{Writing,Reading}Client
        https://bugs.webkit.org/show_bug.cgi?id=223863

        Reviewed by Wenson Hsieh.

        Currently, we have:
        void setItemBufferClient(ItemBufferReadingClient*);
        void setItemBufferClient(ItemBufferWritingClient*);

        This is unfortunate, because if you want to set one of these clients to nullptr, you have to do:
        setItemBufferClient(static_cast<ItemBufferReadingClient*>(nullptr));

        Instead, we can just rename these functions to:
        void setItemBufferReadingClient(ItemBufferReadingClient*);
        void setItemBufferWritingClient(ItemBufferWritingClient*);

        So you can just do
        setItemBufferReadingClient(nullptr);

        No new tests because there is no behavior change.

        * platform/graphics/displaylists/DisplayList.cpp:
        (WebCore::DisplayList::DisplayList::setItemBufferReadingClient):
        (WebCore::DisplayList::DisplayList::setItemBufferWritingClient):
        (WebCore::DisplayList::DisplayList::setItemBufferClient): Deleted.
        * platform/graphics/displaylists/DisplayList.h:

2021-03-29  Eric Carlson  <eric.carlson@apple.com>

        [macOS] Playback is paused after scrubbing with the touch bar
        https://bugs.webkit.org/show_bug.cgi?id=223887
        rdar://75597684

        Reviewed by Jer Noble.

        Test: media/remote-control-command-scrubbing.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::pauseInternal): Don't pause if `m_pausedInternal` is true.
        (WebCore::HTMLMediaElement::didReceiveRemoteControlCommand): Support BeginScrubbingCommand
        and EndScrubbingCommand.

        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::didReceiveRemoteControlCommand): Update enum names.

        * platform/audio/PlatformMediaSession.cpp:
        (WebCore::convertEnumerationToString): Ditto.

        * platform/audio/PlatformMediaSession.h:  Add "Command" suffix to BeginScrubbing
        and EndScrubbing so they math the enum's naming pattern.

        * platform/mac/WebPlaybackControlsManager.mm:
        (-[WebPlaybackControlsManager beginTouchBarScrubbing]): Update enum names.
        (-[WebPlaybackControlsManager endTouchBarScrubbing]): Update enum names.
        * testing/Internals.cpp:
        (WebCore::Internals::postRemoteControlCommand): Add "beginscrubbing" and "endscrubbing".

2021-03-29  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo] Custom fonts don't work in GPU process mode
        https://bugs.webkit.org/show_bug.cgi?id=223861

        Reviewed by Don Olmstead.

        Custom fonts didn't work in GPU process mode of WinCairo port
        because FontCustomPlatformData was destructed soon. In non-GPU
        process mode, FontCustomPlatformData is retained by CachedFont. In
        GPU process mode, there is no CachedFont. So, the font resource
        handle should be ref-counted and retained by FontPlatformData.

        Added a new class FontMemoryResource to ref-count the font
        resource handle. Added a new member of Ref<FontMemoryResource> to
        FontPlatformData::CreationData struct.

        Converted by existing canvas custom font tests.

        * PlatformWin.cmake:
        * platform/graphics/FontPlatformData.h:
        * platform/graphics/opentype/FontMemoryResource.h:
        (WebCore::FontMemoryResource::create):
        (WebCore::FontMemoryResource::~FontMemoryResource):
        (WebCore::FontMemoryResource::FontMemoryResource):
        * platform/graphics/opentype/OpenTypeUtilities.cpp:
        (WebCore::renameAndActivateFont):
        * platform/graphics/opentype/OpenTypeUtilities.h:
        * platform/graphics/win/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::FontCustomPlatformData):
        (WebCore::FontCustomPlatformData::fontPlatformData):
        (WebCore::createFontCustomPlatformData):
        (WebCore::FontCustomPlatformData::~FontCustomPlatformData): Deleted.
        * platform/graphics/win/FontCustomPlatformData.h:
        (WebCore::FontCustomPlatformData::FontCustomPlatformData): Deleted.
        * platform/graphics/win/FontCustomPlatformDataCairo.cpp:
        (WebCore::FontCustomPlatformData::FontCustomPlatformData):
        (WebCore::createFontCustomPlatformData):
        (WebCore::FontCustomPlatformData::~FontCustomPlatformData): Deleted.
        * platform/graphics/win/FontPlatformDataWin.cpp:
        (WebCore::FontPlatformData::FontPlatformData):

2021-03-29  Eric Carlson  <eric.carlson@apple.com>

        [macOS] Add remote MediaSessionCoordinator
        https://bugs.webkit.org/show_bug.cgi?id=223854
        <rdar://problem/75934650>

        Reviewed by Jer Noble.

        Rename PlatformMediaSessionCoordinator to MediaSessionCoordinatorPrivate and make
        it possible for the MediaSessionCoordinator implementation to be located in another
        process.

        * Modules/mediasession/MediaPositionState.h:
        (WebCore::MediaPositionState::encode const):
        (WebCore::MediaPositionState::decode):
        * Modules/mediasession/MediaSession.cpp:
        * Modules/mediasession/MediaSession.h:
        * Modules/mediasession/MediaSessionActionHandler.h:
        * Modules/mediasession/MediaSessionCoordinator.cpp:
        (WebCore::MediaSessionCoordinator::create):
        (WebCore::MediaSessionCoordinator::MediaSessionCoordinator):
        (WebCore::MediaSessionCoordinator::seekTo):
        (WebCore::MediaSessionCoordinator::play):
        (WebCore::MediaSessionCoordinator::pause):
        (WebCore::MediaSessionCoordinator::setTrack):
        (WebCore::MediaSessionCoordinator::positionStateChanged):
        (WebCore::MediaSessionCoordinator::playbackStateChanged):
        (WebCore::MediaSessionCoordinator::readyStateChanged):
        (WebCore::MediaSessionCoordinator::seekSessionToTime):
        (WebCore::MediaSessionCoordinator::playSession):
        (WebCore::MediaSessionCoordinator::pauseSession):
        (WebCore::MediaSessionCoordinator::setSessionTrack):
        (WebCore::MediaSessionCoordinator::internalSeekTo):
        (WebCore::MediaSessionCoordinator::internalPlay):
        (WebCore::MediaSessionCoordinator::internalPause):
        (WebCore::MediaSessionCoordinator::internalSetTrack):
        * Modules/mediasession/MediaSessionCoordinator.h:
        * Modules/mediasession/MediaSessionCoordinatorPrivate.cpp: Copied from Source/WebCore/platform/graphics/PlatformMediaSessionCoordinator.cpp
        (WebCore::MediaSessionCoordinatorPrivate::setLogger):
        * Modules/mediasession/MediaSessionCoordinatorPrivate.h:  Copied from Source/WebCore/platform/graphics/PlatformMediaSessionCoordinator.h
        (WebCore::MediaSessionCoordinatorPrivate::setClient):
        (WebCore::MediaSessionCoordinatorPrivate::loggerPtr const):
        (WebCore::MediaSessionCoordinatorPrivate::logIdentifier const):
        (WebCore::MediaSessionCoordinatorPrivate::client const):
        * Modules/mediasession/MediaSessionPlaybackState.h:
        * Modules/mediasession/MediaSessionReadyState.h:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/audio/PlatformMediaSession.h:
        * platform/graphics/PlatformMediaSessionCoordinator.cpp: Removed.
        * platform/graphics/PlatformMediaSessionCoordinator.h: Removed.
        * testing/MockMediaSessionCoordinator.cpp:
        (WebCore::MockMediaSessionCoordinator::seekTo):
        (WebCore::MockMediaSessionCoordinator::play):
        (WebCore::MockMediaSessionCoordinator::pause):
        (WebCore::MockMediaSessionCoordinator::setTrack):
        (WebCore::MockMediaSessionCoordinator::positionStateChanged):
        (WebCore::MockMediaSessionCoordinator::readyStateChanged):
        (WebCore::MockMediaSessionCoordinator::playbackStateChanged):
        (WebCore::MockMediaSessionCoordinator::logChannel const):
        * testing/MockMediaSessionCoordinator.h:
        (WebCore::MockMediaSessionCoordinator::logClassName const):

2021-03-29  Devin Rousso  <drousso@apple.com>

        [Payment Request] move added `object data` to `ApplePayModifier`
        https://bugs.webkit.org/show_bug.cgi?id=223621
        <rdar://problem/75720879>

        Reviewed by Wenson Hsieh.

        The `object data` in `PaymentDetailsModifier` has a sibling property `required DOMString supportedMethods`
        which acts as a "guard" to make sure that the structure of `data` is only limited to that `supportedMethods`
        meaning that there's no concern over naming collisions between two different `supportedMethods`. As such,
        the `object data` added to `PaymentItem` and `PaymentDetailsBase` and `PaymentShippingOption` should really
        be part of `ApplePayModifier` (which is what the `object data` in `PaymentDetailsModifier` is parsed into).

        * Modules/applepay/paymentrequest/ApplePayModifier.idl:
        * Modules/applepay/paymentrequest/ApplePayModifier.h:
        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.h:
        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp:
        (WebCore::convertAndValidate):
        (WebCore::merge):
        (WebCore::ApplePayPaymentHandler::show):
        (WebCore::ApplePayPaymentHandler::computeShippingMethods const):
        (WebCore::ApplePayPaymentHandler::computeTotalAndLineItems const):
        (WebCore::validate):
        (WebCore::ApplePayPaymentHandler::firstApplicableModifier const): Added.
        (WebCore::ApplePayPaymentHandler::shippingAddressUpdated):
        (WebCore::ApplePayPaymentHandler::shippingOptionUpdated):
        (WebCore::ApplePayPaymentHandler::paymentMethodUpdated):
        Instead of validating and merging data from the various `ApplePay*Data` objects, get the
        first applicable `ApplePayModifier` from the list of `PaymentDetailsModifier` and use that
        for validation and data merging (since, as explained above, it now contains the data).

        * Modules/paymentrequest/PaymentDetailsBase.idl:
        * Modules/paymentrequest/PaymentDetailsBase.h:
        * Modules/paymentrequest/PaymentItem.idl:
        * Modules/paymentrequest/PaymentItem.h:
        * Modules/paymentrequest/PaymentShippingOption.idl:
        * Modules/paymentrequest/PaymentShippingOption.h:
        * Modules/paymentrequest/PaymentRequest.cpp:
        (WebCore::checkAndCanonicalizePaymentItem):
        (WebCore::checkAndCanonicalizeTotal):
        (WebCore::checkAndCanonicalizeDetails):
        (WebCore::PaymentRequest::create):
        (WebCore::PaymentRequest::settleDetailsPromise):
        Remove the IDL `object data;` and associated members/logic now that the parsed data is all
        part of `ApplePayModifier`. These objects are now back to being spec compliant.

        * Modules/applepay/ApplePayDetailsUpdateBase.idl:
        Drive-by: Add missing inheritance to `ApplePayDetailsUpdateData`.

        * Modules/applepay/ApplePayLineItemData.idl:
        * Modules/applepay/ApplePayShippingMethodData.idl:
        Drive-by: Remove unnecessary attributes.

2021-03-29  Ian Gilbert  <iang@apple.com>

        Make a Ref to HTMLPlugInElement when resolving callback
        https://bugs.webkit.org/show_bug.cgi?id=223846

        Reviewed by Ryosuke Niwa.

        Take a Ref to the HTMLPlugInElement to keep it alive while invoking HTMLPlugInElement::swapRendererTimerFired()

        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::swapRendererTimerFired):

2021-03-29  Alex Christensen  <achristensen@webkit.org>

        Build fix.

        * platform/graphics/SourceBufferPrivateClient.h:
        I have a build that can't find the MediaDescription destructor from the AudioTrackInformation declaration.
        Including MediaDescription.h fixes it.

2021-03-29  Frédéric Wang  <fwang@igalia.com>

        Release assert in Vector::at in RenderLayoutState::establishLineGrid
        https://bugs.webkit.org/show_bug.cgi?id=223368

        Reviewed by Zalan Bujtas.

        Fix out-of-bound access for layoutStateStack and ensure the whole vector is browsed.

        Test: fast/line-grid/establish-line-grid-crash.html

        * rendering/RenderLayoutState.cpp:
        (WebCore::RenderLayoutState::establishLineGrid): Fix the exit condition.

2021-03-28  Simon Fraser  <simon.fraser@apple.com>

        Plumb DisplayUpdate through the display refresh monitors
        https://bugs.webkit.org/show_bug.cgi?id=223847

        Reviewed by Sam Weinig.

        Future work will allow DisplayRefreshMonitorClients to request different frame rates, which
        are whole fractions of the display's nominal refresh rate. These various frame rate requests
        flow up through the DisplayRefreshMonitors, and in WebKit2, up through IPC to the
        per-display DisplayLink which may even service multiple processes.

        For power reasons, we don't want to trigger display refresh notifications down the chain at
        the highest possible frequency; at various stages of propagation the rate might be halved if
        that's necessary for downstream clients.
        
        To make this frequency splitting logic simple, this patch introduces DisplayUpdate, which
        represents an update of the display, and contains data about it in the form of a numerator
        is the frame index, and the denominator is the nominal frame rate. Frame index wraps to zero
        every second.
        
        For example, a 60Hz display will generate display refreshes with DisplayUpdates which
        sequentially will be { 0, 60 }, { 1, 60 }, { 2, 60 } ... { 59, 60 }, { 0, 60 }. The
        zeroth frame is at some arbitrary time and not aligned with wallclock time.
        
        Thus a client with a 30Hz update requirement can simply ignore every odd-numbered frame, and
        a client downstream from it with a 15Hz requirement, which only receives those even-numbered
        frames, still has enough information to compute which frames to ignore.
        
        Classes which are sources of callbacks for DisplayRefreshMonitor need to generate these
        DisplayUpdates; that includes the various platform DisplayRefreshMonitor subclasses in
        WebCore, and those in WebKit that live in the UI process and trigger updates over IPC.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/EmptyClients.cpp:
        * platform/graphics/AnimationFrameRate.cpp:
        * platform/graphics/AnimationFrameRate.h:
        * platform/graphics/DisplayRefreshMonitor.cpp:
        (WebCore::DisplayRefreshMonitor::displayLinkFired):
        (WebCore::DisplayRefreshMonitor::dispatchDisplayDidRefresh):
        (WebCore::DisplayRefreshMonitor::displayDidRefresh):
        * platform/graphics/DisplayRefreshMonitor.h:
        * platform/graphics/DisplayRefreshMonitorManager.cpp:
        (WebCore::DisplayRefreshMonitorManager::displayWasUpdated):
        * platform/graphics/DisplayRefreshMonitorManager.h:
        * platform/graphics/DisplayUpdate.cpp: Copied from Source/WebCore/platform/graphics/win/DisplayRefreshMonitorWin.h.
        (WebCore::operator<<):
        * platform/graphics/DisplayUpdate.h: Copied from Source/WebCore/platform/graphics/gtk/DisplayRefreshMonitorGtk.h.
        (WebCore::DisplayUpdate::didUpdate):
        (WebCore::DisplayUpdate::encode const):
        (WebCore::DisplayUpdate::decode):
        * platform/graphics/gtk/DisplayRefreshMonitorGtk.cpp: Assume a 60fps refresh rate but this code
        should probably use gdk_frame_clock_get_refresh_info() to get the correct rate.
        (WebCore::onFrameClockUpdate):
        (WebCore::DisplayRefreshMonitorGtk::displayLinkCallbackFired):
        (WebCore::DisplayRefreshMonitorGtk::startNotificationMechanism):
        * platform/graphics/gtk/DisplayRefreshMonitorGtk.h:
        * platform/graphics/ios/DisplayRefreshMonitorIOS.h:
        * platform/graphics/ios/DisplayRefreshMonitorIOS.mm:
        (-[WebDisplayLinkHandler initWithMonitor:]):
        (-[WebDisplayLinkHandler handleDisplayLink:]):
        (WebCore::DisplayRefreshMonitorIOS::displayLinkCallbackFired):
        (WebCore::DisplayRefreshMonitorIOS::startNotificationMechanism):
        (-[WebDisplayLinkHandler setPreferredFramesPerSecond:]): Deleted.
        * platform/graphics/mac/LegacyDisplayRefreshMonitorMac.cpp:
        (WebCore::displayLinkCallback):
        (WebCore::LegacyDisplayRefreshMonitorMac::displayLinkCallbackFired):
        (WebCore::LegacyDisplayRefreshMonitorMac::dispatchDisplayDidRefresh):
        (WebCore::LegacyDisplayRefreshMonitorMac::nominalFramesPerSecondFromDisplayLink):
        (WebCore::LegacyDisplayRefreshMonitorMac::startNotificationMechanism):
        * platform/graphics/mac/LegacyDisplayRefreshMonitorMac.h:
        (WebCore::LegacyDisplayRefreshMonitorMac::currentUpdate const):
        * platform/graphics/win/DisplayRefreshMonitorWin.cpp:
        (WebCore::DisplayRefreshMonitorWin::DisplayRefreshMonitorWin):
        (WebCore::DisplayRefreshMonitorWin::displayLinkCallbackFired):
        * platform/graphics/win/DisplayRefreshMonitorWin.h:

2021-03-29  Aditya Keerthi  <akeerthi@apple.com>

        Use enum classes and OptionSets for ControlStates::States
        https://bugs.webkit.org/show_bug.cgi?id=223647

        Reviewed by Sam Weinig.

        No behavior change.

        * dom/Element.cpp:
        (WebCore::Element::setActive):
        (WebCore::Element::setHovered):
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::focusedOrActiveStateChanged):
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::disabledStateChanged):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setChecked):
        (WebCore::HTMLInputElement::setIndeterminate):
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::parseAttribute):
        * platform/ControlStates.h:
        (WebCore::ControlStates::ControlStates):
        (WebCore::ControlStates::states const):
        (WebCore::ControlStates::setStates):
        * platform/adwaita/ThemeAdwaita.cpp:
        (WebCore::ThemeAdwaita::paintCheckbox):
        (WebCore::ThemeAdwaita::paintRadio):
        (WebCore::ThemeAdwaita::paintButton):
        (WebCore::ThemeAdwaita::paintSpinButton):
        * platform/mac/ThemeMac.mm:
        (WebCore::updateStates):
        (WebCore::paintToggleButton):
        (WebCore::button):
        (WebCore::paintButton):
        (WebCore::paintStepper):
        (WebCore::ThemeMac::ensuredView):
        (WebCore::paintColorWell):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::stateChanged const):
        (WebCore::RenderTheme::extractControlStatesForRenderer const):
        * rendering/RenderTheme.h:
        * rendering/RenderThemeAdwaita.cpp:
        (WebCore::RenderThemeAdwaita::paintMenuList):
        * rendering/RenderThemeIOS.h:
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::checkboxRadioBackgroundColor):
        (WebCore::RenderThemeIOS::checkboxRadioIndicatorColor):
        (WebCore::RenderThemeIOS::paintCheckbox):
        (WebCore::RenderThemeIOS::paintRadio):

2021-03-28  Antoine Quint  <graouts@webkit.org>

        Add support for animating the vertical-align CSS property
        https://bugs.webkit.org/show_bug.cgi?id=223853

        Reviewed by Antti Koivisto.

        Adding support for animating vertical-align revealed a couple of long-standing issues with
        regards to our support for this property.

        First off, we didn't honor the "inherit" value since it required a custom builder method
        to deal with both RenderStyle::verticalAlign() (the type) and RenderStyle::verticalAlignLength()
        (the value).

        Then, we would hit an assertion when obtaining the computed style for this property and a
        calculated value since we didn't pass the RenderStyle to createValue().

        We now correctly interpolate this property per the dedicated WPT test, the only issues remaining
        being about how our calc serialization (https://bugs.webkit.org/show_bug.cgi?id=223875).

        * animation/CSSPropertyAnimation.cpp:
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::valueForPropertyInStyle):
        * css/CSSProperties.json:
        * style/StyleBuilderCustom.h:
        (WebCore::Style::BuilderCustom::applyInheritVerticalAlign):

2021-03-28  Sam Weinig  <weinig@apple.com>

        Remove JSCustomXPathNSResolver.h/JSCustomXPathNSResolver.cpp from the Xcode project as they don't exist
        https://bugs.webkit.org/show_bug.cgi?id=223852

        Reviewed by Simon Fraser.

        * WebCore.xcodeproj/project.pbxproj:
        Remove long deleted files.

2021-03-28  Jer Noble  <jer.noble@apple.com>

        [Cocoa] Exception thrown from -setShouldProvideMediaDataForTrackID:
        https://bugs.webkit.org/show_bug.cgi?id=223859
        <rdar://75936746>

        Reviewed by Eric Carlson.

        Protect against undocumented exceptions thrown from -setShouldProvideMediaDataForTrackID:.

        * platform/graphics/avfoundation/objc/SourceBufferParserAVFObjC.mm:
        (WebCore::SourceBufferParserAVFObjC::setShouldProvideMediaDataForTrackID):

2021-03-28  Sam Weinig  <weinig@apple.com>

        Remove ENABLE_INDEXED_DATABASE & ENABLE_INDEXED_DATABASE_IN_WORKERS, it seems like it is on for all ports
        https://bugs.webkit.org/show_bug.cgi?id=223810

        Reviewed by Simon Fraser.

        Remove ENABLE_INDEXED_DATABASE & ENABLE_INDEXED_DATABASE_IN_WORKERS conditionals.

        * Modules/indexeddb/DOMWindow+IndexedDatabase.idl:
        * Modules/indexeddb/DOMWindowIndexedDatabase.cpp:
        * Modules/indexeddb/DOMWindowIndexedDatabase.h:
        * Modules/indexeddb/IDBActiveDOMObject.h:
        * Modules/indexeddb/IDBCursor.cpp:
        * Modules/indexeddb/IDBCursor.h:
        * Modules/indexeddb/IDBCursor.idl:
        * Modules/indexeddb/IDBCursorDirection.idl:
        * Modules/indexeddb/IDBCursorWithValue.cpp:
        * Modules/indexeddb/IDBCursorWithValue.h:
        * Modules/indexeddb/IDBCursorWithValue.idl:
        * Modules/indexeddb/IDBDatabase.cpp:
        * Modules/indexeddb/IDBDatabase.h:
        * Modules/indexeddb/IDBDatabase.idl:
        * Modules/indexeddb/IDBDatabaseIdentifier.cpp:
        * Modules/indexeddb/IDBDatabaseIdentifier.h:
        * Modules/indexeddb/IDBDatabaseNameAndVersionRequest.cpp:
        * Modules/indexeddb/IDBDatabaseNameAndVersionRequest.h:
        * Modules/indexeddb/IDBFactory.cpp:
        * Modules/indexeddb/IDBFactory.h:
        * Modules/indexeddb/IDBFactory.idl:
        * Modules/indexeddb/IDBGetAllResult.cpp:
        * Modules/indexeddb/IDBGetAllResult.h:
        * Modules/indexeddb/IDBGetResult.cpp:
        * Modules/indexeddb/IDBGetResult.h:
        * Modules/indexeddb/IDBIndex.cpp:
        * Modules/indexeddb/IDBIndex.h:
        * Modules/indexeddb/IDBIndex.idl:
        * Modules/indexeddb/IDBKey.cpp:
        * Modules/indexeddb/IDBKey.h:
        * Modules/indexeddb/IDBKeyData.cpp:
        * Modules/indexeddb/IDBKeyData.h:
        * Modules/indexeddb/IDBKeyPath.cpp:
        * Modules/indexeddb/IDBKeyPath.h:
        * Modules/indexeddb/IDBKeyRange.cpp:
        * Modules/indexeddb/IDBKeyRange.h:
        * Modules/indexeddb/IDBKeyRange.idl:
        * Modules/indexeddb/IDBKeyRangeData.cpp:
        * Modules/indexeddb/IDBKeyRangeData.h:
        * Modules/indexeddb/IDBObjectStore.cpp:
        * Modules/indexeddb/IDBObjectStore.h:
        * Modules/indexeddb/IDBObjectStore.idl:
        * Modules/indexeddb/IDBOpenDBRequest.cpp:
        * Modules/indexeddb/IDBOpenDBRequest.h:
        * Modules/indexeddb/IDBOpenDBRequest.idl:
        * Modules/indexeddb/IDBRecordIdentifier.h:
        * Modules/indexeddb/IDBRequest.cpp:
        * Modules/indexeddb/IDBRequest.h:
        * Modules/indexeddb/IDBRequest.idl:
        * Modules/indexeddb/IDBRequestCompletionEvent.cpp:
        * Modules/indexeddb/IDBRequestCompletionEvent.h:
        * Modules/indexeddb/IDBTransaction.cpp:
        * Modules/indexeddb/IDBTransaction.h:
        * Modules/indexeddb/IDBTransaction.idl:
        * Modules/indexeddb/IDBTransactionMode.h:
        * Modules/indexeddb/IDBTransactionMode.idl:
        * Modules/indexeddb/IDBValue.cpp:
        * Modules/indexeddb/IDBValue.h:
        * Modules/indexeddb/IDBVersionChangeEvent.cpp:
        * Modules/indexeddb/IDBVersionChangeEvent.h:
        * Modules/indexeddb/IDBVersionChangeEvent.idl:
        * Modules/indexeddb/IndexedDB.h:
        * Modules/indexeddb/WorkerGlobalScopeIndexedDatabase.cpp:
        * Modules/indexeddb/WorkerGlobalScopeIndexedDatabase.h:
        * Modules/indexeddb/client/IDBConnectionProxy.cpp:
        * Modules/indexeddb/client/IDBConnectionProxy.h:
        * Modules/indexeddb/client/IDBConnectionToServer.cpp:
        * Modules/indexeddb/client/IDBConnectionToServer.h:
        * Modules/indexeddb/client/IDBConnectionToServerDelegate.h:
        * Modules/indexeddb/client/TransactionOperation.cpp:
        * Modules/indexeddb/client/TransactionOperation.h:
        * Modules/indexeddb/server/IDBBackingStore.h:
        * Modules/indexeddb/server/IDBConnectionToClient.cpp:
        * Modules/indexeddb/server/IDBConnectionToClient.h:
        * Modules/indexeddb/server/IDBConnectionToClientDelegate.h:
        * Modules/indexeddb/server/IDBSerialization.cpp:
        * Modules/indexeddb/server/IDBSerialization.h:
        * Modules/indexeddb/server/IDBSerializationContext.cpp:
        * Modules/indexeddb/server/IDBSerializationContext.h:
        * Modules/indexeddb/server/IDBServer.cpp:
        * Modules/indexeddb/server/IDBServer.h:
        * Modules/indexeddb/server/IndexValueEntry.cpp:
        * Modules/indexeddb/server/IndexValueEntry.h:
        * Modules/indexeddb/server/IndexValueStore.cpp:
        * Modules/indexeddb/server/IndexValueStore.h:
        * Modules/indexeddb/server/MemoryBackingStoreTransaction.cpp:
        * Modules/indexeddb/server/MemoryBackingStoreTransaction.h:
        * Modules/indexeddb/server/MemoryCursor.cpp:
        * Modules/indexeddb/server/MemoryCursor.h:
        * Modules/indexeddb/server/MemoryIDBBackingStore.cpp:
        * Modules/indexeddb/server/MemoryIDBBackingStore.h:
        * Modules/indexeddb/server/MemoryIndex.cpp:
        * Modules/indexeddb/server/MemoryIndex.h:
        * Modules/indexeddb/server/MemoryIndexCursor.cpp:
        * Modules/indexeddb/server/MemoryIndexCursor.h:
        * Modules/indexeddb/server/MemoryObjectStore.cpp:
        * Modules/indexeddb/server/MemoryObjectStore.h:
        * Modules/indexeddb/server/MemoryObjectStoreCursor.cpp:
        * Modules/indexeddb/server/MemoryObjectStoreCursor.h:
        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
        * Modules/indexeddb/server/SQLiteIDBBackingStore.h:
        * Modules/indexeddb/server/SQLiteIDBCursor.cpp:
        * Modules/indexeddb/server/SQLiteIDBCursor.h:
        * Modules/indexeddb/server/SQLiteIDBTransaction.cpp:
        * Modules/indexeddb/server/SQLiteIDBTransaction.h:
        * Modules/indexeddb/server/ServerOpenDBRequest.cpp:
        * Modules/indexeddb/server/ServerOpenDBRequest.h:
        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        * Modules/indexeddb/server/UniqueIDBDatabase.h:
        * Modules/indexeddb/server/UniqueIDBDatabaseConnection.cpp:
        * Modules/indexeddb/server/UniqueIDBDatabaseConnection.h:
        * Modules/indexeddb/server/UniqueIDBDatabaseTransaction.cpp:
        * Modules/indexeddb/server/UniqueIDBDatabaseTransaction.h:
        * Modules/indexeddb/shared/IDBCursorInfo.cpp:
        * Modules/indexeddb/shared/IDBCursorInfo.h:
        * Modules/indexeddb/shared/IDBCursorRecord.h:
        * Modules/indexeddb/shared/IDBDatabaseInfo.cpp:
        * Modules/indexeddb/shared/IDBDatabaseInfo.h:
        * Modules/indexeddb/shared/IDBDatabaseNameAndVersion.h:
        * Modules/indexeddb/shared/IDBError.cpp:
        * Modules/indexeddb/shared/IDBError.h:
        * Modules/indexeddb/shared/IDBGetAllRecordsData.cpp:
        * Modules/indexeddb/shared/IDBGetAllRecordsData.h:
        * Modules/indexeddb/shared/IDBGetRecordData.cpp:
        * Modules/indexeddb/shared/IDBGetRecordData.h:
        * Modules/indexeddb/shared/IDBIndexInfo.cpp:
        * Modules/indexeddb/shared/IDBIndexInfo.h:
        * Modules/indexeddb/shared/IDBIterateCursorData.cpp:
        * Modules/indexeddb/shared/IDBIterateCursorData.h:
        * Modules/indexeddb/shared/IDBObjectStoreInfo.cpp:
        * Modules/indexeddb/shared/IDBObjectStoreInfo.h:
        * Modules/indexeddb/shared/IDBRequestData.cpp:
        * Modules/indexeddb/shared/IDBRequestData.h:
        * Modules/indexeddb/shared/IDBResourceIdentifier.cpp:
        * Modules/indexeddb/shared/IDBResourceIdentifier.h:
        * Modules/indexeddb/shared/IDBResultData.cpp:
        * Modules/indexeddb/shared/IDBResultData.h:
        * Modules/indexeddb/shared/IDBTransactionInfo.cpp:
        * Modules/indexeddb/shared/IDBTransactionInfo.h:
        * Modules/indexeddb/shared/IndexKey.cpp:
        * Modules/indexeddb/shared/IndexKey.h:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/IDBBindingUtilities.cpp:
        * bindings/js/IDBBindingUtilities.h:
        * bindings/js/JSDOMConvertIndexedDB.h:
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::scriptExecutionContext const):
        (WebCore::scriptModuleLoader):
        * bindings/js/JSIDBCursorCustom.cpp:
        * bindings/js/JSIDBCursorWithValueCustom.cpp:
        * bindings/js/JSIDBIndexCustom.cpp:
        * bindings/js/JSIDBObjectStoreCustom.cpp:
        * bindings/js/JSIDBRequestCustom.cpp:
        * bindings/js/JSIDBSerializationGlobalObject.cpp:
        * bindings/js/JSIDBSerializationGlobalObject.h:
        * bindings/js/JSIDBTransactionCustom.cpp:
        * bindings/js/SerializedScriptValue.cpp:
        * bindings/js/SerializedScriptValue.h:
        * bindings/js/WebCoreJSClientData.cpp:
        (WebCore::JSVMClientData::JSVMClientData):
        * bindings/js/WebCoreJSClientData.h:
        * dom/Document.cpp:
        (WebCore::Document::idbConnectionProxy):
        (WebCore::Document::setBackForwardCacheState):
        * dom/Document.h:
        * dom/EmptyScriptExecutionContext.h:
        * dom/EventNames.in:
        * dom/EventTargetFactory.in:
        * dom/ScriptExecutionContext.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::createLazyAgents):
        * inspector/agents/InspectorIndexedDBAgent.cpp:
        * inspector/agents/InspectorIndexedDBAgent.h:
        * loader/EmptyClients.cpp:
        * page/DatabaseProvider.h:
        * page/Page.cpp:
        (WebCore::Page::setSessionID):
        (WebCore::Page::clearIDBConnection):
        * page/Page.h:
        * testing/Internals.cpp:
        (WebCore::Internals::numberOfIDBTransactions const):
        * testing/Internals.h:
        * testing/Internals.idl:
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::WorkerGlobalScope):
        (WebCore::WorkerGlobalScope::prepareForDestruction):
        (WebCore::WorkerGlobalScope::idbConnectionProxy):
        (WebCore::WorkerGlobalScope::stopIndexedDatabase):
        (WebCore::WorkerGlobalScope::suspend):
        (WebCore::WorkerGlobalScope::resume):
        * workers/WorkerGlobalScope.h:
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::startWorkerGlobalScope):
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::WorkerThread):
        (WebCore::WorkerThread::idbConnectionProxy):
        * workers/WorkerThread.h:
        * workers/service/context/ServiceWorkerThreadProxy.cpp:
        (WebCore::idbConnectionProxy):
        * worklets/WorkletGlobalScope.h:

2021-03-28  Philippe Normand  <pnormand@igalia.com>

        REGRESSION(r274527): [GStreamer] media/webaudio-background-playback.html now failing
        https://bugs.webkit.org/show_bug.cgi?id=223840

        Reviewed by Chris Dumez.

        r274527 actually exposed a bug that was present since r271197. The AudioDestination pipeline
        was not stopping properly because webkitGstSetElementStateSynchronously() was returning too
        early.

        This patch also includes a few improvements in the webaudiosrc element, most notably
        regarding its preroll state. The element now stops emitting buffers downstream as soon as
        the AudioDestination is scheduled to stop.

        * platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:
        (webKitWebAudioSrcRenderAndPushFrames): Return early as soon as the destination is scheduled to stop.
        (webKitWebAudioSrcChangeState): Synchronize preroll state with element state.
        * platform/graphics/gstreamer/GStreamerCommon.cpp:
        (WebCore::webkitGstSetElementStateSynchronously): targetState might be lower than current
        state, e.g, when stopping a running pipeline, so we can't return early for those cases,
        otherwise the pipeline won't stop.

2021-03-28  Chris Dumez  <cdumez@apple.com>

        Unreviewed, add an exception for a heap allocation on the WebAudio thread.

        I recently added assertions to catch heap allocations on the WebAudio threads and failed to
        mark this one as allowed (for now).

        * Modules/webaudio/BaseAudioContext.cpp:
        (WebCore::BaseAudioContext::markForDeletion):

2021-03-27  Simon Fraser  <simon.fraser@apple.com>

        Allow DisplayRefreshMonitor to be more long-lived objects
        https://bugs.webkit.org/show_bug.cgi?id=223844

        Reviewed by Chris Dumez.

        The existing behavior for DisplayRefreshMonitors was that they were created and destroyed
        frequently, as their clients are registered and unregistered. In addition, some of
        their subclasses had duplicated logic related to how often they fired without clients
        before they were removed.

        The 1:1 correspondance between DisplayRefreshMonitors and physical displays makes them
        a useful place to store per-display information (like refresh rate), which should
        persist whether or not they have clients, so this change prepares for that.
        
        The main changes in this patch are:
          1. Provide virtual startNotificationMechanism()/stopNotificationMechanism() functions on
             DisplayRefreshMonitor that subclasses can use to start their CVDisplayLink or related
             functionality.

          2. Provide some shared maxUnscheduledFireCount logic that subclasses can tune to
             provide the hysteresis used to control the start/stop of the underlying
             notification mechanism.

         3. Provide a shared dispatchDisplayDidRefresh() function that most implementations
            can use.

        DisplayRefreshMonitorManager no longer destroys DisplayRefreshMonitors when they lose
        all their clients. This means that DisplayRefreshMonitors are never removed, but there
        should only ever be as many as there are physical displays, and they are only
        active if being scheduled by clients.

        * loader/EmptyClients.cpp:
        * platform/graphics/DisplayRefreshMonitor.cpp:
        (WebCore::DisplayRefreshMonitor::stop):
        (WebCore::DisplayRefreshMonitor::removeClient):
        (WebCore::DisplayRefreshMonitor::requestRefreshCallback):
        (WebCore::DisplayRefreshMonitor::firedAndReachedMaxUnscheduledFireCount):
        (WebCore::DisplayRefreshMonitor::displayLinkFired):
        (WebCore::DisplayRefreshMonitor::dispatchDisplayDidRefresh):
        (WebCore::DisplayRefreshMonitor::displayDidRefresh):
        * platform/graphics/DisplayRefreshMonitor.h:
        (WebCore::DisplayRefreshMonitor::setMaxUnscheduledFireCount):
        (WebCore::DisplayRefreshMonitor::mutex):
        (WebCore::DisplayRefreshMonitor::displayLinkFired): Deleted.
        (WebCore::DisplayRefreshMonitor::stop): Deleted.
        (WebCore::DisplayRefreshMonitor::shouldBeTerminated const): Deleted.
        (WebCore::DisplayRefreshMonitor::isActive const): Deleted.
        (WebCore::DisplayRefreshMonitor::setIsActive): Deleted.
        * platform/graphics/DisplayRefreshMonitorManager.cpp:
        (WebCore::DisplayRefreshMonitorManager::unregisterClient):
        (WebCore::DisplayRefreshMonitorManager::displayDidRefresh):
        (WebCore::DisplayRefreshMonitorManager::displayWasUpdated):
        * platform/graphics/gtk/DisplayRefreshMonitorGtk.cpp:
        (WebCore::DisplayRefreshMonitorGtk::~DisplayRefreshMonitorGtk):
        (WebCore::onFrameClockUpdate):
        (WebCore::DisplayRefreshMonitorGtk::stop):
        (WebCore::DisplayRefreshMonitorGtk::startNotificationMechanism):
        (WebCore::DisplayRefreshMonitorGtk::stopNotificationMechanism):
        (WebCore::DisplayRefreshMonitorGtk::requestRefreshCallback): Deleted.
        (WebCore::DisplayRefreshMonitorGtk::displayLinkFired): Deleted.
        * platform/graphics/gtk/DisplayRefreshMonitorGtk.h:
        * platform/graphics/ios/DisplayRefreshMonitorIOS.h:
        * platform/graphics/ios/DisplayRefreshMonitorIOS.mm:
        (-[WebDisplayLinkHandler setPaused:]):
        (WebCore::DisplayRefreshMonitorIOS::DisplayRefreshMonitorIOS):
        (WebCore::DisplayRefreshMonitorIOS::~DisplayRefreshMonitorIOS):
        (WebCore::DisplayRefreshMonitorIOS::stop):
        (WebCore::DisplayRefreshMonitorIOS::startNotificationMechanism):
        (WebCore::DisplayRefreshMonitorIOS::stopNotificationMechanism):
        (WebCore::DisplayRefreshMonitorIOS::requestRefreshCallback): Deleted.
        (WebCore::DisplayRefreshMonitorIOS::displayLinkFired): Deleted.
        * platform/graphics/mac/LegacyDisplayRefreshMonitorMac.cpp:
        (WebCore::LegacyDisplayRefreshMonitorMac::LegacyDisplayRefreshMonitorMac):
        (WebCore::LegacyDisplayRefreshMonitorMac::stop):
        (WebCore::LegacyDisplayRefreshMonitorMac::dispatchDisplayDidRefresh):
        (WebCore::LegacyDisplayRefreshMonitorMac::startNotificationMechanism):
        (WebCore::LegacyDisplayRefreshMonitorMac::stopNotificationMechanism):
        (WebCore::LegacyDisplayRefreshMonitorMac::requestRefreshCallback): Deleted.
        (WebCore::LegacyDisplayRefreshMonitorMac::displayLinkFired): Deleted.
        * platform/graphics/mac/LegacyDisplayRefreshMonitorMac.h:
        * platform/graphics/win/DisplayRefreshMonitorWin.cpp:
        (WebCore::DisplayRefreshMonitorWin::DisplayRefreshMonitorWin):
        (WebCore::DisplayRefreshMonitorWin::startNotificationMechanism):
        (WebCore::DisplayRefreshMonitorWin::stopNotificationMechanism):
        (WebCore::DisplayRefreshMonitorWin::requestRefreshCallback): Deleted.
        (WebCore::DisplayRefreshMonitorWin::displayLinkFired): Deleted.
        * platform/graphics/win/DisplayRefreshMonitorWin.h:

2021-03-27  Ryosuke Niwa  <rniwa@webkit.org>

        Don't add Frame as an opaque root of DOMWindow
        https://bugs.webkit.org/show_bug.cgi?id=223838

        Reviewed by Simon Fraser.

        Don't add Frame as an opaque root of DOMWindow since we don't use Frame
        as an opaque root of any JS wrappers since r248276.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::visitAdditionalChildren):

2021-03-27  David Kilzer  <ddkilzer@apple.com>

        UBSan: runtime error: load of value <unknown>, which is not a valid value for type 'const WebCore::RealtimeMediaSourceCapabilities::EchoCancellation'
        <https://webkit.org/b/223821>

        Reviewed by Chris Dumez.

        Tests: fast/mediastream/MediaDevices-addEventListener.html
               fast/mediastream/constraint-intrinsic-size.html
               http/tests/media/media-stream/enumerate-devices-iframe-allow-attribute.html
               http/tests/media/media-stream/get-display-media-iframe-allow-attribute.html
               imported/w3c/web-platform-tests/mediacapture-record/MediaRecorder-bitrate.https.html
               webrtc/addICECandidate-closed.html
               webrtc/ice-candidate-sdpMLineIndex.html
               webrtc/libwebrtc/descriptionGetters.html
               webrtc/peerconnection-page-cache.html

        * platform/mediastream/RealtimeMediaSourceCapabilities.h:
        (WebCore::CapabilityValueOrRange::union ValueUnion):
        - Make asDouble the first union member so C++ member
          initializers set all memory.
        (WebCore::CapabilityValueOrRange::m_minOrValue):
        (WebCore::CapabilityValueOrRange::m_max):
        (WebCore::CapabilityValueOrRange::m_type):
        (WebCore::RealtimeMediaSourceCapabilities::m_echoCancellation):
        - Provide member initializers. Setting a default value for
          m_echoCancellation fixes the bug.
        (WebCore::RealtimeMediaSourceCapabilities::encode const):
        - Drive-by clean-up of encoder statement.

2021-03-27  Antoine Quint  <graouts@webkit.org>

        Fix build with ENABLE_CSS3_TEXT
        https://bugs.webkit.org/show_bug.cgi?id=223841

        Reviewed by Darin Adler.

        We also remove the -webkit- prefix for the "hanging" and "each-line" keywords since
        these are well specified by the CSS Text Module Level 3 spec.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::valueForPropertyInStyle):
        * css/CSSValueKeywords.in:
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeTextIndent):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::setTextIndentType):
        (WebCore::RenderStyle::setTextAlignLast):
        (WebCore::RenderStyle::setTextJustify):
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        * style/StyleBuilderCustom.h:
        (WebCore::Style::BuilderCustom::applyValueTextIndent):

2021-03-27  Kate Cheney  <katherine_cheney@apple.com>

        PCM: Send report to both click source and attribution destination website
        https://bugs.webkit.org/show_bug.cgi?id=223615
        <rdar://problem/75849443>

        Reviewed by Brent Fulgham.

        Introduce 2 new structs for storing the earliest time to send and 
        seconds until send for the source and destination sites.

        * loader/PrivateClickMeasurement.cpp:
        (WebCore::PrivateClickMeasurement::isValid const):
        (WebCore::PrivateClickMeasurement::hasPreviouslyBeenReported):
        (WebCore::randomlyBetweenTwentyFourAndFortyEightHours):
        (WebCore::PrivateClickMeasurement::attributeAndGetEarliestTimeToSend):
        * loader/PrivateClickMeasurement.h:
        (WebCore::PrivateClickMeasurement::AttributionSecondsUntilSendData::hasValidSecondsUntilSendValues):
        (WebCore::PrivateClickMeasurement::AttributionSecondsUntilSendData::minSecondsUntilSend):
        (WebCore::PrivateClickMeasurement::AttributionSecondsUntilSendData::encode const):
        (WebCore::PrivateClickMeasurement::AttributionSecondsUntilSendData::decode):
        (WebCore::PrivateClickMeasurement::AttributionTimeToSendData::earliestTimeToSend):
        (WebCore::PrivateClickMeasurement::AttributionTimeToSendData::latestTimeToSend):
        (WebCore::PrivateClickMeasurement::AttributionTimeToSendData::attributionReportEndpoint):
        (WebCore::PrivateClickMeasurement::AttributionTimeToSendData::encode const):
        (WebCore::PrivateClickMeasurement::AttributionTimeToSendData::decode):
        (WebCore::PrivateClickMeasurement::timesToSend const):
        (WebCore::PrivateClickMeasurement::setTimesToSend):
        (WebCore::PrivateClickMeasurement::encode const):
        (WebCore::PrivateClickMeasurement::decode):
        (WebCore::PrivateClickMeasurement::earliestTimeToSend const): Deleted.
        (WebCore::PrivateClickMeasurement::setEarliestTimeToSend): Deleted.

2021-03-27  Simon Fraser  <simon.fraser@apple.com>

        Remove DisplayRefreshMonitor::handleDisplayRefreshedNotificationOnMainThread()
        https://bugs.webkit.org/show_bug.cgi?id=223837

        Reviewed by Tim Horton.

        handleDisplayRefreshedNotificationOnMainThread() is an anachronism left over from
        the non-main-thread nature of the CVDisplayLink callback. There's no need to burden
        all subclasses of DisplayRefreshMonitor with that detail.

        * platform/graphics/DisplayRefreshMonitor.cpp:
        (WebCore::DisplayRefreshMonitor::displayDidRefresh):
        (WebCore::DisplayRefreshMonitor::handleDisplayRefreshedNotificationOnMainThread): Deleted.
        * platform/graphics/DisplayRefreshMonitor.h:
        * platform/graphics/gtk/DisplayRefreshMonitorGtk.cpp:
        (WebCore::DisplayRefreshMonitorGtk::displayLinkFired):
        * platform/graphics/ios/DisplayRefreshMonitorIOS.mm:
        (WebCore::DisplayRefreshMonitorIOS::displayLinkFired):
        * platform/graphics/mac/LegacyDisplayRefreshMonitorMac.cpp:
        (WebCore::LegacyDisplayRefreshMonitorMac::displayLinkFired):
        * platform/graphics/win/DisplayRefreshMonitorWin.cpp:
        (WebCore::DisplayRefreshMonitorWin::displayLinkFired):

2021-03-27  Zalan Bujtas  <zalan@apple.com>

        [Multicolumn] Do not try to re-validate a multicol spanner when the renderer is moved internally
        https://bugs.webkit.org/show_bug.cgi?id=223836
        <rdar://75742694>

        Reviewed by Ryosuke Niwa.

        When a renderer becomes a multicol spanner 
        1. it is moved out of its original tree position and placed as a sibling of the enclosing multicolumn flow and
        2. a spanner placeholder is constructed and inserted at the original position

        This patch fixes the case when an already placed multicol spanner is internally moved (e.g. collapsing an anonymous block parent)
        and we attempt to re-insert this spanner to the multicolumn flow. No spanner state should change due to internal re-parenting. 

        Test: fast/multicol/spanner-get-re-added-on-move-crash.html

        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::attachToRenderElementInternal):

2021-03-26  Ian Gilbert  <iang@apple.com>

        Dirty layout for floating children of inline on full layout
        https://bugs.webkit.org/show_bug.cgi?id=223660

        Reviewed by Zalan Bujtas.

        Avoid consuming an object on an empty line when that object is floating or out-of-flow.

        * rendering/line/BreakingContext.h:
        (WebCore::BreakingContext::handleEndOfLine):

2021-03-26  Chris Dumez  <cdumez@apple.com>

        Avoid heap allocation on the audio thread in BaseAudioContext::scheduleNodeDeletion()
        https://bugs.webkit.org/show_bug.cgi?id=223825

        Reviewed by Darin Adler.

        Avoid heap allocation on the audio thread in BaseAudioContext::scheduleNodeDeletion()
        for performance. Stop calling appendVector() on m_nodesToDelete since m_nodesToDelete
        is always empty. We can use std::exchange() instead of appendVector() and clear() to
        avoid the heap allocation.

        The reason m_nodesToDelete is always empty is that BaseAudioContext::scheduleNodeDeletion()
        relies on the m_isDeletionScheduled flag to avoid adding to m_nodesToDelete until
        m_nodesToDelete is cleared on the main thread and the m_isDeletionScheduled gets reset.

        * Modules/webaudio/BaseAudioContext.cpp:
        (WebCore::BaseAudioContext::clear):
        (WebCore::BaseAudioContext::scheduleNodeDeletion):

2021-03-26  Patrick Angle  <pangle@apple.com>

        Web Inspector: Grid layout labels can be drawn outside the viewport
        https://bugs.webkit.org/show_bug.cgi?id=221972

        Reviewed by BJ Burg.

        Added logic for a best-effort attempt to make sure that layout labels are drawn within the document's bounds, or
        at least within the grid itself. Labels are measured and adjusted so that if they would be drawn outside the
        document's bounds, they will be pulled inside the grid. This does not guarantee that all labels will be visible
        all the time. It is still possible an entire side of a grid will be outside the document's bounds, and this does
        not attempt to correct for this case, as the desired anchor points for labels will be outside of the visible
        area of the document.

        * inspector/InspectorOverlay.cpp:
        (WebCore::InspectorOverlay::fontForLayoutLabel):
        - Added helper that creates the FontCascade for layout labels, which is done in a few different places.
        (WebCore::InspectorOverlay::backgroundPathForLayoutLabel):
        - Added helper to create the Path for the background of layout labels, which is now used in `WebKit::WKInspectorHighlightView`.
        (WebCore::expectedSizeForLayoutLabel):
        - Gets the expected size of the label based on the text and arrow direction, and does so without needing to
        create the entire label background's path.
        (WebCore::InspectorOverlay::drawLayoutLabel):
        - Support new `LabelArrowEdgePosition` property
        (WebCore::InspectorOverlay::drawGridOverlay):
        (WebCore::buildLabel):
        (WebCore::InspectorOverlay::buildGridOverlay):
        * inspector/InspectorOverlay.h:
        (WebCore::InspectorOverlay::Highlight::GridHighlightOverlay::Label::encode const):
        (WebCore::InspectorOverlay::Highlight::GridHighlightOverlay::Label::decode):

2021-03-26  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] No need to update the counters when the renderer is moved internally
        https://bugs.webkit.org/show_bug.cgi?id=223801
        <rdar://75835208>

        Reviewed by Ryosuke Niwa.

        When the renderer re-parenting is initiated by an "internal move" (e.g. anonymous block parent is not needed anymore so all the descendants
        are moved "one level" up), we don't need to re-compute the counters. Their state should not be any different after this re-parenting.

        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::attachToRenderElementInternal):
        (WebCore::RenderTreeBuilder::move):
        * rendering/updating/RenderTreeBuilder.h:

2021-03-26  Chris Fleizach  <cfleizach@apple.com>

        AX: crash at aom.apple.WebCore: WebCore::AccessibilityProgressIndicator::element const
        https://bugs.webkit.org/show_bug.cgi?id=223800
        rdar://75861367

        Reviewed by Zalan Bujtas.

        Prevent unintended renderer access. 
        No steps to reproduce were available, so a test was not able to be created.

        * accessibility/AccessibilityProgressIndicator.cpp:
        (WebCore::AccessibilityProgressIndicator::element const):

2021-03-26  Chris Dumez  <cdumez@apple.com>

        Source/WebCore/editing/cocoa/HTMLConverter.mm:1278:44: runtime error: member call on null pointer of type 'WebCore::ArchiveResource'
        https://bugs.webkit.org/show_bug.cgi?id=223696

        Reviewed by Alex Christensen.

        Fix bug found by UBSan.

        * editing/cocoa/HTMLConverter.mm:
        (HTMLConverter::_addAttachmentForElement):
        - Drop duplicate call to dataSource->subresource(url) as it doesn't seem it can return something else
          than null if it returned null the first time around.
        - Make sure resource is null-checked before we dereference it to get the MIME type.

2021-03-26  Wenson Hsieh  <wenson_hsieh@apple.com>

        Allow some image overlay content to render in fully transparent image elements
        https://bugs.webkit.org/show_bug.cgi?id=223781
        <rdar://problem/75886351>

        Reviewed by Tim Horton.

        Introduce `ImageOverlayController`, and use it to render selections in image overlay content when the image
        overlay's host element is fully transparent.

        Test: fast/images/image-extraction/mac/select-word-in-transparent-image-overlay.html

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::willBeRemovedFromFrame):

        Add plumbing to allow `ImageOverlayController` to uninstall its `PageOverlay` when the document is about to be
        detached. See `ImageOverlayController::` below.

        * editing/SelectionRectGatherer.cpp:
        (WebCore::SelectionRectGatherer::Notifier::~Notifier):

        Have `SelectionRectGatherer` notify the image overlay controller as well, when selection rects change.

        * page/ChromeClient.h:
        (WebCore::ChromeClient::needsImageOverlayControllerForSelectionPainting const):

        Add a new client hook that returns whether or not we should use `ImageOverlayController` to paint selections.
        If not (i.e. we're on iOS, where we use UIKit to draw selections in the UI process), then we'll never install
        page overlays, since `selectionRectsDidChange` is effectively a no-op.

        * page/ImageOverlayController.cpp: Added.
        (WebCore::ImageOverlayController::ImageOverlayController):
        (WebCore::ImageOverlayController::selectionRectsDidChange):

        When selection rects change, if the selection is inside an image overlay whose host is completely transparent
        (or very close to being completely transparent), then remember the selection rects along with the renderer's
        background color, and use this to render selection highlights separately, in a `PageOverlay`.

        (WebCore::ImageOverlayController::documentDetached):

        If the `Document` containing the current rendered overlay selection is detached, immediately uninstall the
        current `PageOverlay`. This ensures that the overlays don't persist through navigation.

        (WebCore::ImageOverlayController::installPageOverlayIfNeeded):
        (WebCore::ImageOverlayController::uninstallPageOverlayIfNeeded):

        Helper methods to add or remove the `PageOverlay` from the current `Page`.

        (WebCore::ImageOverlayController::willMoveToPage):

        Uninstall the current page overlay if needed.

        (WebCore::ImageOverlayController::drawRect):

        Use the information stored in `ImageOverlayController::selectionRectsDidChange` to render custom selection
        rects.

        * page/ImageOverlayController.h: Added.
        * page/Page.cpp:
        * page/Page.h:

        Add an `ImageOverlayController` to the `Page`.

        (WebCore::Page::imageOverlayController):

2021-03-26  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Deprecate using DERIVED_SOURCES_DIR/FOWARDING_HEADERS_DIR directly
        https://bugs.webkit.org/show_bug.cgi?id=223763

        Reviewed by Michael Catanzaro.

        Remove any usages of DERIVED_SOURCES_DIR and FOWARDING_HEADERS_DIR.

        * PlatformFTW.cmake:
        * PlatformWin.cmake:

2021-03-26  Tim Nguyen  <ntim@apple.com>

        Make the object-position CSS property animatable.
        https://bugs.webkit.org/show_bug.cgi?id=223568

        Reviewed by Antoine Quint.

        Test: imported/w3c/web-platform-tests/css/css-images/object-position-interpolation.html

        * animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFunc):
        (WebCore::canInterpolateLengthPoints):
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):

2021-03-26  Said Abou-Hallawa  <said@apple.com>

        Allow logging minimal info about uploading media files in the system diagnose
        https://bugs.webkit.org/show_bug.cgi?id=223706

        Reviewed by Alex Christensen.

        Give the WebKit client the ability to log info about the media files which
        were submitted to a web server through an HTMLFormElement.

        * Headers.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::submit):
        * loader/EmptyClients.cpp:
        * page/DiagnosticLoggingClient.h:
        * page/DiagnosticLoggingDomain.h: Copied from Source/WebKit/UIProcess/API/APIDiagnosticLoggingClient.h.

2021-03-26  Imanol Fernandez  <ifernandez@igalia.com>

        Implement cachedPropertyValue for WebXR [SameObject] attributes
        https://bugs.webkit.org/show_bug.cgi?id=223635

        Reviewed by Chris Dumez.

        [SameObject] is not currently implemented in WebKit. We need to implement custom getters.

        Tested by WebXR WPT.

        * Modules/webxr/WebXRRigidTransform.h:
        (WebCore::WebXRRigidTransform::cachedMatrix):
        * Modules/webxr/WebXRRigidTransform.idl:
        * Modules/webxr/WebXRView.h:
        (WebCore::WebXRView::cachedProjectionMatrix):
        * Modules/webxr/WebXRView.idl:
        * Modules/webxr/WebXRViewerPose.h:
        (WebCore::WebXRViewerPose::cachedViews):
        * Modules/webxr/WebXRViewerPose.idl:
        * Sources.txt:
        * bindings/js/JSWebXRRigidTransformCustom.cpp: Added.
        (WebCore::JSWebXRRigidTransform::matrix const):
        * bindings/js/JSWebXRViewCustom.cpp: Added.
        (WebCore::JSWebXRView::projectionMatrix const):
        * bindings/js/JSWebXRViewerPoseCustom.cpp: Added.
        (WebCore::JSWebXRViewerPose::views const):

2021-03-26  Devin Rousso  <drousso@apple.com>

        Adopt AVKit SPI for hiding touch bar seeking controls
        https://bugs.webkit.org/show_bug.cgi?id=223773
        <rdar://problem/68937617>

        Reviewed by Jer Noble.

        * platform/mac/WebPlaybackControlsManager.h:
        * platform/mac/WebPlaybackControlsManager.mm:
        (-[WebPlaybackControlsManager setSeekableTimeRanges:]):
        (-[WebPlaybackControlsManager canBeginTouchBarScrubbing]):
        If the list of seekable time ranges is empty, we are unable to seek.

2021-03-26  Kimmo Kinnunen  <kkinnunen@apple.com>

        GraphicsContextGLOpenGL should avoid calling into ANGLE MakeCurrent
        https://bugs.webkit.org/show_bug.cgi?id=223511

        Reviewed by Kenneth Russell.

        Avoid calling ANGLE MakeCurrent for contexts that are already current. Cache the current context pointer into a
        global variable. Currently the code adds no locking. For the forseeable future, ANGLE does not support
        simultaneous access from multiple threads.

        The optimization can be done when run in WebContent process or in GPU process, but not when in WK1. This is because in WK1,
        the 3rd party client may run arbitrary code in WebKit thread. This includes code that changes EAGL or AGL state.
        This code might change the current context underneath WebKit. In WK1 mode, we already use "volatile context" feature of
        ANGLE to reset the platform context on every EGL command. The command we use for this for normal GL commands is EGL_MakeCurrent.
        Makes in-process WebGL faster in MotionMark triangles by 6300 -> 9800 pts
        Makes GPU process WebGL faster in MotionMark triangles by 5300 -> 7000 pts

        * platform/graphics/cocoa/GraphicsContextGLOpenGLCocoa.mm:
        (WebCore::isCurrentContextPredictable):
        (WebCore::InitializeEGLDisplay):
        (WebCore::GraphicsContextGLOpenGL::~GraphicsContextGLOpenGL):
        (WebCore::GraphicsContextGLOpenGL::makeContextCurrent):
        (WebCore::GraphicsContextGLOpenGL::clearCurrentContext):
        (WebCore::GraphicsContextGLOpenGL::releaseCurrentContext):
        (WebCore::GraphicsContextGLOpenGL::checkGPUStatus):
        * platform/graphics/opengl/GraphicsContextGLOpenGL.h:

2021-03-25  Antoine Quint  <graouts@webkit.org>

        Fix interpolation of the caret-color CSS property
        https://bugs.webkit.org/show_bug.cgi?id=223181
        <rdar://problem/75687413>

        Reviewed by Antti Koivisto.

        Add support for the "auto" value for the "caret-color" CSS property. That value
        is its initial value. We support it with a new boolean flag on StyleRareInheritedData
        which we reset to false when setCaretColor() or setVisitedLinkCaretColor() is called.

        Then, we can blend this property with the new CaretColorPropertyWrapper wrapper which is
        required to correctly get and set the "auto" bit.

        * animation/CSSPropertyAnimation.cpp:
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):
        * css/CSSProperties.json: We can remove the initial value key since this property is entirely
        custom.
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::setCaretColor):
        (WebCore::RenderStyle::setHasAutoCaretColor):
        (WebCore::RenderStyle::setVisitedLinkCaretColor):
        (WebCore::RenderStyle::setHasVisitedLinkAutoCaretColor):
        (WebCore::RenderStyle::hasAutoCaretColor const):
        (WebCore::RenderStyle::hasVisitedLinkAutoCaretColor const):
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::operator== const):
        * rendering/style/StyleRareInheritedData.h:
        * style/StyleBuilderCustom.h:
        (WebCore::Style::BuilderCustom::applyInitialCaretColor):
        (WebCore::Style::BuilderCustom::applyInheritCaretColor):
        (WebCore::Style::BuilderCustom::applyValueCaretColor):

2021-03-26  Jean-Yves Avenard  <jya@apple.com>

        Fix NowPlayingInfoArtwork operator== logic.
        https://bugs.webkit.org/show_bug.cgi?id=223730
        <rdar://problem/75822687>

        Reviewed by Youenn Fablet.

        Gtest NowPlayingInfoArtworkTest added .

        * platform/audio/NowPlayingInfo.h:
        (WebCore::NowPlayingInfoArtwork::operator== const):
        (WebCore::NowPlayingInfoArtwork::operator!= const):

2021-03-26  Rob Buis  <rbuis@igalia.com>

        Remove ASSERT in RenderListItem::computeMarkerStyle
        https://bugs.webkit.org/show_bug.cgi?id=222670

        Reviewed by Ryosuke Niwa.

        Remove ASSERT in RenderListItem::computeMarkerStyle
        since ::marker does not apply to all elements so
        getCachedPseudoStyle can return null.

        Test: fast/lists/list-item-compute-marker-style-crash.xhtml

        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::computeMarkerStyle const):

2021-03-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r272301): [SOUP] default port attribute when persisting credential information with libsecret
        https://bugs.webkit.org/show_bug.cgi?id=223782

        Reviewed by Adrian Perez de Castro.

        Use the default port instead of 0 when the URL omits the port.

        * platform/network/soup/AuthenticationChallengeSoup.cpp:
        (WebCore::protectionSpaceFromSoupAuthAndURL):

2021-03-26  Yusuke Suzuki  <ysuzuki@apple.com>

        Use ICUDeleter to encode ucnv_close/uenum_close call into type of deleter of std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=223503

        Reviewed by Alex Christensen.

        Use ICUDeleter<ucnv_close> instead of holding ucnv_close pointer in ICUConverterPtr.
        This deleter encodes ucnv_close calls into type so that we do not need to hold a pointer
        to ucnv_close.

        We also use ICUDeleter<uenum_close> in place where we use UEnumeration.

        * Modules/applepay/PaymentRequestValidator.mm:
        (WebCore::validateCurrencyCode):
        * platform/text/EncodingTables.cpp:
        (WebCore::jis0208):
        (WebCore::jis0212):
        (WebCore::big5):
        (WebCore::eucKR):
        (WebCore::gb18030):
        * platform/text/TextCodecICU.cpp:
        (WebCore::TextCodecICU::createICUConverter const):
        * platform/text/TextCodecICU.h:

2021-03-26  Jessie Berlin  <jberlin@webkit.org>

        Update the BEFORE/SINCE, SYSTEM_VERSION_PREFIX, and MACOSX_DEPLOYMENT_TARGET flags
        https://bugs.webkit.org/show_bug.cgi?id=223779

        Reviewed by Tim Horton.

        * Configurations/DebugRelease.xcconfig:
        * Configurations/Version.xcconfig:
        * Configurations/WebCore.xcconfig:
        * Configurations/WebKitTargetConditionals.xcconfig:

2021-03-25  Alex Christensen  <achristensen@webkit.org>

        Allow WKContentRuleList to block only in frames or only in main frame
        https://bugs.webkit.org/show_bug.cgi?id=219001
        <rdar://problem/71382045>

        Reviewed by Ben Poulain.

        This adds load-context to the trigger, which can have an array containing main-frame or iframe.
        This makes the trigger only happen in such loading contexts.

        * Modules/websockets/ThreadableWebSocketChannel.cpp:
        (WebCore::ThreadableWebSocketChannel::validateURL):
        * contentextensions/ContentExtension.cpp:
        (WebCore::ContentExtensions::ContentExtension::populateConditionCacheIfNeeded):
        * contentextensions/ContentExtensionParser.cpp:
        (WebCore::ContentExtensions::getTypeFlags):
        (WebCore::ContentExtensions::loadTrigger):
        * contentextensions/ContentExtensionsBackend.cpp:
        (WebCore::ContentExtensions::ContentExtensionsBackend::processContentRuleListsForLoad):
        (WebCore::ContentExtensions::ContentExtensionsBackend::processContentRuleListsForPingLoad):
        * contentextensions/DFABytecodeInterpreter.cpp:
        (WebCore::ContentExtensions::DFABytecodeInterpreter::interpretTestFlagsAndAppendAction):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadResourceSynchronously):
        * loader/NetscapePlugInStreamLoader.cpp:
        (WebCore::NetscapePlugInStreamLoader::NetscapePlugInStreamLoader):
        * loader/PingLoader.cpp:
        (WebCore::PingLoader::sendPing):
        (WebCore::PingLoader::sendViolationReport):
        * loader/ResourceLoadInfo.cpp:
        (WebCore::ContentExtensions::toResourceType):
        (WebCore::ContentExtensions::readResourceType):
        (WebCore::ContentExtensions::readLoadType):
        (WebCore::ContentExtensions::readLoadContext):
        (WebCore::ContentExtensions::ResourceLoadInfo::getResourceFlags const):
        * loader/ResourceLoadInfo.h:

2021-03-25  Wenson Hsieh  <wenson_hsieh@apple.com>

        Don't add `-webkit-user-select: none;` on image elements with `draggable=true`
        https://bugs.webkit.org/show_bug.cgi?id=223774
        <rdar://problem/75860124>

        Reviewed by Tim Horton.

        Avoid adding this presentational CSS style property for image elements marked with `draggable=true`. Since
        image elements are already draggable by default and mouse drags over image elements do not trigger text
        selection, it's not necessary for the user agent to add this style property. See below for more details.

        Test: fast/images/image-extraction/mac/select-word-in-draggable-image-overlay.html

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::collectStyleForPresentationAttribute):

        If the element is already draggable (barring HTML attributes), don't additionally disable text selection inside
        the element when we additionally have `draggable=true` set on the element.

        (WebCore::HTMLElement::draggable const):

        Refactor this to consult `isDraggableIgnoringAttributes()` when determining whether to check if the `draggable`
        attribute value is not `"false"` vs. equal to `"true"`. In the case where the element is already draggable, we
        only return `false` here if `draggable=false` is explicitly set.

        * html/HTMLElement.h:
        (WebCore::HTMLElement::isDraggableIgnoringAttributes const):
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::draggable const): Deleted.
        * html/HTMLImageElement.h:

        Override `isDraggableIgnoringAttributes` and return `true`.

2021-03-25  Wenson Hsieh  <wenson_hsieh@apple.com>

        It should be possible to drag images with overlay content
        https://bugs.webkit.org/show_bug.cgi?id=223766
        <rdar://problem/75856030>

        Reviewed by Tim Horton.

        Make a few minor adjustments to make drag and drop play well with images with overlay content. See below for
        more details.

        Test: DragAndDropTests.DragElementWithImageOverlay

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::isInsideImageOverlay):

        Add a helper method to return whether an individual DOM node is inside an image overlay. Use this in the
        existing version of this method that takes a `SimpleRange`.

        * html/HTMLElement.h:
        * page/DragController.cpp:
        (WebCore::DragController::draggableElement const):

        Skip all drag source actions except for `Selection` in the case where we're hit-testing to text inside of an
        image overlay.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEvent):

        Make `isMouseDownOnLinkOrImage` `false` in the case where we're over image overlay text.

        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::nodeForImageData const):
        (WebCore::HitTestResult::image const):
        (WebCore::HitTestResult::imageRect const):
        (WebCore::HitTestResult::absoluteImageURL const):

        Teach `HitTestResult` to skip out of image overlay content and find the actual image element when determining
        the image URL, image, or image rect.

        * rendering/HitTestResult.h:

2021-03-25  Jessie Berlin  <jberlin@webkit.org>

        Remove 10.13 DEPLOYMENT_TARGETs and SYSTEM_VERSION_PREFIXs
        https://bugs.webkit.org/show_bug.cgi?id=223765

        Reviewed by Tim Horton.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:
        * Configurations/Version.xcconfig:

2021-03-25  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] Do not try to normalize the tree while destroying the multicolumn flow
        https://bugs.webkit.org/show_bug.cgi?id=223722
        <rdar://75731256>

        Reviewed by Simon Fraser.

        Test: fast/multicol/crash-while-destroying-the-column-context.html

        This patch ensures that we don't start moving around parts of the fragmented flow subtree (e.g. collapsing anonymous blocks) while
        trying place the spanner renderers back to their original positions as part of the "we don't need multicolumn context anymore".
        (e.g spanner placeholder is removed -> triggers anon block collapsing -> moves subtrees around inside the multicolumn subtree -> insertion happens -> spanner placeholder gets re-validated)

        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::destroy):
        * rendering/updating/RenderTreeBuilder.h:
        * rendering/updating/RenderTreeBuilderBlock.cpp:
        (WebCore::RenderTreeBuilder::Block::detach):
        * rendering/updating/RenderTreeBuilderMultiColumn.cpp:
        (WebCore::RenderTreeBuilder::MultiColumn::destroyFragmentedFlow):
        (WebCore::RenderTreeBuilder::MultiColumn::handleSpannerRemoval):
        (WebCore::RenderTreeBuilder::MultiColumn::multiColumnRelativeWillBeRemoved):
        * rendering/updating/RenderTreeBuilderMultiColumn.h:

2021-03-25  Andres Gonzalez  <andresg_22@apple.com>

        AX: Consider implementing @aria-details.
        https://bugs.webkit.org/show_bug.cgi?id=165842
        rdar://30725491

        Reviewed by Chris Fleizach.

        Tests: accessibility/ios-simulator/aria-details.html
               accessibility/mac/aria-details.html

        - Added [WebAccessibilityObjectWrapper accessibilityDetailsElements] on iOS.
        - Added helper function accessibleElementsForObjects to retrieve platform-
        specific accessible elements given a collection of AXCoreObjects.
        
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (accessibleElementsForObjects):
        (-[WebAccessibilityObjectWrapper accessibilityDetailsElements]):
        (-[WebAccessibilityObjectWrapper accessibilityErrorMessageElements]):

2021-03-25  Cameron McCormack  <heycam@apple.com>

        Collapse newly adjacent anonymous table cells when a table cell is detached from between them.
        https://bugs.webkit.org/show_bug.cgi?id=220934

        Reviewed by Zalan Bujtas.

        We already had support for collapsing newly adjacent table row cells when a
        table row cell is detached from between them.  We need to do this for anonymous
        table cells too.

        Test: fast/table/table-anonymous-cell-collapse.html

        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::destroyAndCleanUpAnonymousWrappers): Call
        into the RenderTreeBuilder::Table to collapse anonymous table cells when
        needed.
        * rendering/updating/RenderTreeBuilderTable.cpp:
        (WebCore::RenderTreeBuilder::Table::collapseAndDestroyAnonymousSiblings):
        Factor out the existing collapseAndDestroyAnonymousSiblingRows into
        something re-usable.
        (WebCore::RenderTreeBuilder::Table::collapseAndDestroyAnonymousSiblingCells):
        Added.
        (WebCore::RenderTreeBuilder::Table::collapseAndDestroyAnonymousSiblingRows):
        Factored out to collapseAndDestroyAnonymousSiblings.
        * rendering/updating/RenderTreeBuilderTable.h:

2021-03-25  Tim Nguyen  <ntim@apple.com>

        Fix edge cases in normalization of conic-gradient color stops
        https://bugs.webkit.org/show_bug.cgi?id=221294
        <rdar://problem/74157218>

        Reviewed by Darin Adler.

        `lastOneOrLessIndex` had an off-by-one error, so it did not go through the
        branch handling clamping all the stop offsets when they're all above 1.

        Also made `normalizeStopsAndEndpointsOutsideRange` logic easier to follow using
        `Optional<size_t>` instead of placeholder values.

        Test: web-platform-tests/css/css-images/normalization-conic-2.html

        * css/CSSGradientValue.cpp:
        (WebCore::ConicGradientAdapter::normalizeStopsAndEndpointsOutsideRange):

2021-03-25  Chris Dumez  <cdumez@apple.com>

        Address some alignment issues found by UBSan in contentextensions code
        https://bugs.webkit.org/show_bug.cgi?id=223748

        Reviewed by Darin Adler.

        Address some alignment issues found by UBSan in contentextensions code:
        - contentextensions/SerializedNFA.h:55:20: runtime error: reference binding to misaligned address 0xnnnnnnnnn for type 'const unsigned long long', which requires 8 byte alignment
        - contentextensions/NFAToDFA.cpp:254:29: runtime error: reference binding to misaligned address 0xnnnnnnnnn for type 'const unsigned long long', which requires 8 byte alignment
        - contentextensions/DFABytecodeCompiler.cpp:43:5: runtime error: store to misaligned address 0xnnnnnnnnn for type 'unsigned short', which requires 2 byte alignment

        Use memcpy() to store/load to/from misaligned address.

        * contentextensions/DFABytecodeCompiler.cpp:
        (WebCore::ContentExtensions::append):
        * contentextensions/NFAToDFA.cpp:
        (WebCore::ContentExtensions::epsilonClosureExcludingSelf):
        (WebCore::ContentExtensions::NodeIdSetToUniqueNodeIdSetTranslator::translate):
        * contentextensions/SerializedNFA.h:
        (WebCore::ContentExtensions::SerializedNFA::Range::pointerAt const):
        (WebCore::ContentExtensions::SerializedNFA::Range::valueAt const):
        (WebCore::ContentExtensions::SerializedNFA::ConstTargetIterator::operator* const):
        (WebCore::ContentExtensions::SerializedNFA::ConstTargetIterator::operator-> const):
        (WebCore::ContentExtensions::SerializedNFA::ConstRangeIterator::first const):
        (WebCore::ContentExtensions::SerializedNFA::ConstRangeIterator::last const):
        (WebCore::ContentExtensions::SerializedNFA::ConstRangeIterator::data const):
        (WebCore::ContentExtensions::SerializedNFA::ConstRangeIterator::range const):
        (WebCore::ContentExtensions::SerializedNFA::transitionsForNode const):
        (WebCore::ContentExtensions::SerializedNFA::Range::operator[] const): Deleted.

2021-03-25  Chris Dumez  <cdumez@apple.com>

        Source/WebCore/xml/parser/CharacterReferenceParserInlines.h:107:33: runtime error: signed integer overflow: 268435455 * 16 cannot be represented in type 'int'
        https://bugs.webkit.org/show_bug.cgi?id=223718

        Reviewed by Darin Adler.

        Use Checked<> for the result in consumeCharacterReference() to deal with overflows
        in a well-defined manner.

        * xml/parser/CharacterReferenceParserInlines.h:
        (WebCore::consumeCharacterReference):

2021-03-25  John Wilander  <wilander@apple.com>

        PCM: Rename attributeOn to attributionDestination and change the IDL data type of attributionSourceId to unsigned long
        https://bugs.webkit.org/show_bug.cgi?id=223661
        <rdar://problem/75762075>

        Reviewed by Brent Fulgham.

        The PR review of the update of the PCM spec lead WebKit, Mozilla, and Google to decide on two changes:
        1. Rename attributeOn to attributionDestination
        2. Change the IDL data type of attributionSourceId from DOMString to unsigned long

        The spec change can be seen in this commit:
        https://github.com/privacycg/private-click-measurement/pull/75/commits/8623b5df5e899e6652bc5b00313585f7eeafa797

        This patch makes those changes, plus changes names of SPIs, functions, and variables accordingly.

        Existing tests were updated.

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::parsePrivateClickMeasurement const):
        * html/HTMLAnchorElement.idl:
        * html/HTMLAttributeNames.in:
        * loader/PrivateClickMeasurement.cpp:
        (WebCore::PrivateClickMeasurement::isValid const):
        (WebCore::PrivateClickMeasurement::attributionReportAttributeOnURL const):
        (WebCore::PrivateClickMeasurement::attributionReportJSON const):
        * loader/PrivateClickMeasurement.h:
        (WebCore::PrivateClickMeasurement::AttributionDestinationSite::AttributionDestinationSite):
        (WebCore::PrivateClickMeasurement::AttributionDestinationSite::operator== const):
        (WebCore::PrivateClickMeasurement::AttributionDestinationSite::deletedValue):
        (WebCore::PrivateClickMeasurement::AttributionDestinationSite::constructDeletedValue):
        (WebCore::PrivateClickMeasurement::AttributionDestinationSiteHash::hash):
        (WebCore::PrivateClickMeasurement::AttributionDestinationSiteHash::equal):
        (WebCore::PrivateClickMeasurement::PrivateClickMeasurement):
        (WebCore::PrivateClickMeasurement::destinationSite const):
        (WebCore::PrivateClickMeasurement::encode const):
        (WebCore::PrivateClickMeasurement::decode):
        (WTF::HashTraits<WebCore::PrivateClickMeasurement::AttributionDestinationSite>::emptyValue):
        (WTF::HashTraits<WebCore::PrivateClickMeasurement::AttributionDestinationSite>::constructDeletedValue):
        (WTF::HashTraits<WebCore::PrivateClickMeasurement::AttributionDestinationSite>::isDeletedValue):
        (WebCore::PrivateClickMeasurement::AttributeOnSite::AttributeOnSite): Deleted.
        (WebCore::PrivateClickMeasurement::AttributeOnSite::operator== const): Deleted.
        (WebCore::PrivateClickMeasurement::AttributeOnSite::matches const): Deleted.
        (WebCore::PrivateClickMeasurement::AttributeOnSite::isHashTableDeletedValue const): Deleted.
        (WebCore::PrivateClickMeasurement::AttributeOnSite::deletedValue): Deleted.
        (WebCore::PrivateClickMeasurement::AttributeOnSite::constructDeletedValue): Deleted.
        (WebCore::PrivateClickMeasurement::AttributeOnSite::deleteValue): Deleted.
        (WebCore::PrivateClickMeasurement::AttributeOnSite::isDeletedValue const): Deleted.
        (WebCore::PrivateClickMeasurement::AttributeOnSiteHash::hash): Deleted.
        (WebCore::PrivateClickMeasurement::AttributeOnSiteHash::equal): Deleted.
        (WebCore::PrivateClickMeasurement::attributeOnSite const): Deleted.
        (WTF::HashTraits<WebCore::PrivateClickMeasurement::AttributeOnSite>::emptyValue): Deleted.
        (WTF::HashTraits<WebCore::PrivateClickMeasurement::AttributeOnSite>::constructDeletedValue): Deleted.
        (WTF::HashTraits<WebCore::PrivateClickMeasurement::AttributeOnSite>::isDeletedValue): Deleted.

2021-03-25  Chris Dumez  <cdumez@apple.com>

        Drop unnecessary Settings pre-warming in ProcessWarming::prewarmGlobally()
        https://bugs.webkit.org/show_bug.cgi?id=223749

        Reviewed by Antti Koivisto.

        Drop unnecessary Settings pre-warming in ProcessWarming::prewarmGlobally(). Based on the comment,
        it looks like the intention was to prewarm some font families. However, looking at the code, nothing
        that gets populated is global and survives the destruction of the Settings object on the next line.
        We don't even make any calls to CTFont.

        * page/ProcessWarming.cpp:
        (WebCore::ProcessWarming::prewarmGlobally):

2021-03-25  Youenn Fablet  <youenn@apple.com>

        Switch from PORTALLOCATOR_DISABLE_ADAPTER_ENUMERATION to filtering interfaces in Network process
        https://bugs.webkit.org/show_bug.cgi?id=223679

        Reviewed by Eric Carlson.

        Covered by webrtc/datachannel/filter-ice-candidate.html.

        * platform/mediastream/libwebrtc/LibWebRTCProvider.cpp:
        (WebCore::LibWebRTCProvider::createPeerConnection):
        * platform/mediastream/libwebrtc/LibWebRTCProvider.h:
        Use set_allow_tcp_listen instead of PORTALLOCATOR_DISABLE_ADAPTER_ENUMERATION.

2021-03-25  Ben Nham  <nham@apple.com>

        Only preheat MTLCopyAllDevices on Mac
        https://bugs.webkit.org/show_bug.cgi?id=223747

        Reviewed by Chris Dumez.

        We should use adoptNS to avoid leaking the array returned by MTLCopyAllDevices. We should
        also only do this on Mac because this is only a public API on the Mac, and the issue of
        graphics drivers falling out of the dyld shared cache doesn't exist on iOS.

        * platform/graphics/gpu/cocoa/GPUDeviceMetal.mm:
        (WebCore::GPUDevice::prewarm):

2021-03-25  Alex Christensen  <achristensen@webkit.org>

        WKContentRuleList first-party should include other subdomains of the current registrable domain
        https://bugs.webkit.org/show_bug.cgi?id=223728
        <rdar://71912579>

        Reviewed by John Wilander.

        Covered by API tests.

        * loader/ResourceLoadInfo.cpp:
        (WebCore::ContentExtensions::ResourceLoadInfo::isThirdParty const):

2021-03-25  Youenn Fablet  <youenn@apple.com>

        Improve RealtimeIncomingVideoSourceCocoa::OnFrame logging to include rotation and size information
        https://bugs.webkit.org/show_bug.cgi?id=223741

        Reviewed by Eric Carlson.

        No change of behavior.

        * platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.mm:
        (WebCore::RealtimeIncomingVideoSourceCocoa::OnFrame):

2021-03-25  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r274826 and r274968.
        https://bugs.webkit.org/show_bug.cgi?id=223746

        Added broken layout test

        Reverted changesets:

        "AX: textRectsFromMarkers always fails"
        https://bugs.webkit.org/show_bug.cgi?id=223556
        https://trac.webkit.org/changeset/274826

        "AX: Add functions rectsForTextMarkerRange for testing"
        https://bugs.webkit.org/show_bug.cgi?id=223705
        https://trac.webkit.org/changeset/274968

2021-03-25  Antoine Quint  <graouts@webkit.org>

        Improve interpolation of the shape-outside CSS property
        https://bugs.webkit.org/show_bug.cgi?id=223738

        Reviewed by Antti Koivisto.

        While we had logic to deal with cases where ShapeValue objects could not be interpolated, we did not make
        use of it in the animation wrapper. We now move this logic from the blendFunc() to the canInterpolate()
        override method on the wrapper to correctly interpolate only when possible.

        * animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFunc):

2021-03-25  Tim Horton  <timothy_horton@apple.com>

        All Books quirks are flakily not applied in modern WebKit
        https://bugs.webkit.org/show_bug.cgi?id=157101
        <rdar://problem/25965028>

        Reviewed by Darin Adler.

        No new tests; I haven't found a way to write a test that doesn't involve
        adding a new parameter to the process bootstrap message, which seems
        out of the realm of reason for a test.

        * bindings/js/CommonVM.cpp:
        (WebCore::commonVMSlow):
        (WebCore::globalConstRedeclarationShouldThrow): Deleted.
        Stop hardcoding globalConstRedeclarationShouldThrow based on the UI process identity.

        * platform/RuntimeApplicationChecks.cpp:
        (WebCore::isInAuxiliaryProcess):
        * platform/RuntimeApplicationChecks.h:
        * platform/cocoa/RuntimeApplicationChecksCocoa.mm:
        (WebCore::applicationBundleIdentifier):
        (WebCore::setApplicationBundleIdentifierOverride):
        Add an assertion to catch any future case where a bundle check is queried
        in a auxiliary process before the hosting application bundle identifier is set.

2021-03-24  Yusuke Suzuki  <ysuzuki@apple.com>

        All string resources from UserAgentStyleSheets / UserAgentScripts should be used as non-copying StringImpl
        https://bugs.webkit.org/show_bug.cgi?id=223685

        Reviewed by Saam Barati.

        We use StringImpl::createWithoutCopying for string resources from UserAgentStyleSheets / UserAgentScripts to make sure that
        these resources do not allocate heap strings.

        This patch also fixes HTMLMeterElement's bug (and imageOverlayUserAgentStyleSheet's bug). Previously, we are using String::ConstructFromLiteral,
        but this only accepts string literal as it says. As a result, we are dropping the last character since UserAgentStyleSheets's last character is not \0.

        * Modules/plugins/QuickTimePluginReplacement.mm:
        (WebCore::quickTimePluginReplacementScript):
        * WebCoreMacros.cmake:
        * dom/Document.cpp:
        (WebCore::Document::ensurePlugInsInjectedScript):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::updateWithImageExtractionResult):
        * html/HTMLMeterElement.cpp:
        (WebCore::HTMLMeterElement::didAddUserAgentShadowRoot):
        * rendering/RenderThemeAdwaita.cpp:
        (WebCore::RenderThemeAdwaita::extraDefaultStyleSheet):
        (WebCore::RenderThemeAdwaita::extraMediaControlsStyleSheet):
        (WebCore::RenderThemeAdwaita::mediaControlsScripts):
        * rendering/RenderThemeCocoa.mm:
        (WebCore::RenderThemeCocoa::mediaControlsStyleSheet):
        (WebCore::RenderThemeCocoa::mediaControlsScripts):
        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::extraDefaultStyleSheet):
        (WebCore::RenderThemeWin::extraQuirksStyleSheet):
        * style/UserAgentStyle.cpp:
        (WebCore::Style::UserAgentStyle::initDefaultStyleSheet):
        (WebCore::Style::UserAgentStyle::ensureDefaultStyleSheetsForElement):

2021-03-24  Chris Dumez  <cdumez@apple.com>

        bindings/js/JSEventListener.cpp:281:91: runtime error: reference binding to null pointer of type 'WebCore::ScriptExecutionContext'
        https://bugs.webkit.org/show_bug.cgi?id=223719

        Reviewed by Darin Adler.

        Make sure we null check the scriptExecutionContext before we dereference it.

        * bindings/js/JSEventListener.cpp:
        (WebCore::eventHandlerAttribute):
        (WebCore::windowEventHandlerAttribute):

2021-03-24  Chris Dumez  <cdumez@apple.com>

        Port FontDescriptionKey::computeHash() from legacy IntegerHasher to Hasher
        https://bugs.webkit.org/show_bug.cgi?id=223701

        Reviewed by Darin Adler.

        Port FontDescriptionKey::computeHash() from legacy IntegerHasher to Hasher. Hasher
        has the benefit of having add() overloads that take in signed integer types.

        * platform/graphics/FontCache.h:
        (WebCore::FontDescriptionKey::computeHash const):

2021-03-24  Chris Dumez  <cdumez@apple.com>

        Extend WebAudio heap allocation assertions to cover the pre & post-rendering phases
        https://bugs.webkit.org/show_bug.cgi?id=223640

        Reviewed by Sam Weinig.

        Extend WebAudio heap allocation assertions to cover the pre & post-rendering phases. I had to add
        exceptions for some heap allocations that are currently happening during this phase but I
        will work to reduce the number of exceptions in follow-ups.

        * Modules/webaudio/AudioDestinationNode.cpp:
        (WebCore::AudioDestinationNode::render):
        * Modules/webaudio/AudioNodeInput.cpp:
        (WebCore::AudioNodeInput::updateInternalBus):
        * Modules/webaudio/AudioNodeOutput.cpp:
        (WebCore::AudioNodeOutput::updateInternalBus):
        * Modules/webaudio/BaseAudioContext.cpp:
        (WebCore::BaseAudioContext::addAutomaticPullNode):
        (WebCore::BaseAudioContext::updateAutomaticPullNodes):
        * platform/audio/AudioDSPKernelProcessor.cpp:
        (WebCore::AudioDSPKernelProcessor::initialize):

2021-03-24  Chris Dumez  <cdumez@apple.com>

        Unreviewed build fix after r274983.

        * Modules/mediasession/MediaSession.h:

2021-03-24  Chris Dumez  <cdumez@apple.com>

        Move TelephoneNumberDetector preloading off the main thread
        https://bugs.webkit.org/show_bug.cgi?id=223715

        Reviewed by Geoffrey Garen.

        Move TelephoneNumberDetector preloading off the main thread. We have evidence that prewarmGlobally() can be slow and hang the main
        thread for too long (rdar://75279383). As a result, it is a good idea to prewarm things off the main thread whenever possible.

        * page/ProcessWarming.cpp:
        (WebCore::ProcessWarming::prewarmGlobally):
        * platform/TelephoneNumberDetector.h:
        * platform/cocoa/TelephoneNumberDetectorCocoa.cpp:
        (WebCore::TelephoneNumberDetector::phoneNumbersScanner):
        (WebCore::TelephoneNumberDetector::prewarm):

2021-03-24  Eric Carlson  <eric.carlson@apple.com>

        [Cocoa] Add Experimental MediaSession coordinator
        https://bugs.webkit.org/show_bug.cgi?id=222158
        <rdar://problem/74508862>

        Reviewed by Jer Noble.

        Add an experimental MediaSession coordinator, an object that provides an interface
        that allows script to coordinate changes to MediaSession with the User Agent. Also
        add an experimental MediaSession playlist interface.

        The changes are behind new experimental feature flags,
        MediaSessionCoordinatorEnabled and MediaSessionPlaylistEnabled.

        Test: media/media-session/mock-coordinator.html

        * DerivedSources-input.xcfilelist: Add new IDL files.
        * DerivedSources-output.xcfilelist: Add new derived sources.
        * DerivedSources.make: Add new IDL.

        * Modules/mediasession/MediaMetadata.cpp:
        (WebCore::MediaMetadata::create): Set trackIdentifier from init data.
        (WebCore::MediaMetadata::setTrackIdentifier): trackIdentifier setter.
        * Modules/mediasession/MediaMetadata.h:
        (WebCore::MediaMetadata::trackIdentifier const):
        * Modules/mediasession/MediaMetadata.idl:

        * Modules/mediasession/MediaMetadataInit.h: Add trackIdentifier.
        (WebCore::MediaMetadataInit::encode const):
        (WebCore::MediaMetadataInit::decode):
        * Modules/mediasession/MediaMetadataInit.idl:

        * Modules/mediasession/MediaSession.cpp:
        (WebCore::MediaSession::MediaSession): Initialize MainThreadGenericEventQueue.
        (WebCore::MediaSession::setMetadata): metadataUpdated -> notifyMetadataObservers.
        (WebCore::MediaSession::setReadyState): Session readyState setter.
        (WebCore::MediaSession::setCoordinator): Coordinator setter. Post 'coordinatorchange'
        event after change.
        (WebCore::MediaSession::setPlaylist): Playlist setter.
        (WebCore::MediaSession::setActionHandler): Call notifyActionHandlerObservers.
        (WebCore::MediaSession::setPositionState): Call notifyPositionStateObservers.
        (WebCore::MediaSession::metadataUpdated): Call notifyMetadataObservers.
        (WebCore::MediaSession::addObserver): New.
        (WebCore::MediaSession::removeObserver): New.
        (WebCore::MediaSession::forEachObserver): New.
        (WebCore::MediaSession::notifyMetadataObservers): New.
        (WebCore::MediaSession::notifyPositionStateObservers): New.
        (WebCore::MediaSession::notifyPlaybackStateObservers): New.
        (WebCore::MediaSession::notifyActionHandlerObservers): New.
        (WebCore::MediaSession::notifyReadyStateObservers): New.
        * Modules/mediasession/MediaSession.h:
        (WebCore::MediaSession::coordinator const):
        (WebCore::MediaSession::playlist const):
        (WebCore::MediaSession::logger const):
        * Modules/mediasession/MediaSession.idl:

        * Modules/mediasession/MediaSessionAction.h:
        * Modules/mediasession/MediaSessionAction.idl:
        * Modules/mediasession/MediaSessionActionDetails.h:
        * Modules/mediasession/MediaSessionActionDetails.idl:

        MediaSessionCoordinator proxies calls through the PlatformMediaSessionCoordinator,
        and then calls the equivalent MediaSession methode if the platform coordinator 
        is successful.
        * Modules/mediasession/MediaSessionCoordinator.cpp: Added.
        (WebCore::nextCoordinatorLogIdentifier):
        (WebCore::MediaSessionCoordinator::create):
        (WebCore::MediaSessionCoordinator::MediaSessionCoordinator):
        (WebCore::MediaSessionCoordinator::seekTo):
        (WebCore::MediaSessionCoordinator::play):
        (WebCore::MediaSessionCoordinator::pause):
        (WebCore::MediaSessionCoordinator::setTrack):
        (WebCore::MediaSessionCoordinator::setMediaSession):
        (WebCore::MediaSessionCoordinator::logChannel):
        * Modules/mediasession/MediaSessionCoordinator.h: New.
        (WebCore::MediaSessionCoordinator::logger const):
        (WebCore::MediaSessionCoordinator::logIdentifier const):
        (WebCore::MediaSessionCoordinator::logClassName):
        * Modules/mediasession/MediaSessionCoordinator.idl: New.

        * Modules/mediasession/NavigatorMediaSession.h:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:
        * dom/EventNames.h:
        * dom/EventTargetFactory.in:

        * platform/graphics/PlatformMediaSessionCoordinator.h: Added.
        (WebCore::PlatformMediaSessionCoordinator::setLogger):
        (WebCore::PlatformMediaSessionCoordinator::loggerPtr const):
        (WebCore::PlatformMediaSessionCoordinator::logIdentifier const):
        (WebCore::PlatformMediaSessionCoordinator::logClassName const):
        (WebCore::PlatformMediaSessionCoordinator::logChannel const):

        * testing/Internals.cpp:
        (WebCore::Internals::registerMockMediaSessionCoordinator): Register the mock
        media session coordinator for testing.
        * testing/Internals.h:
        * testing/Internals.idl:

        * testing/MockMediaSessionCoordinator.cpp: Added.
        (WebCore::MockMediaSessionCoordinator::create):
        (WebCore::MockMediaSessionCoordinator::MockMediaSessionCoordinator):
        (WebCore::MockMediaSessionCoordinator::seekTo):
        (WebCore::MockMediaSessionCoordinator::play):
        (WebCore::MockMediaSessionCoordinator::pause):
        (WebCore::MockMediaSessionCoordinator::setTrack):
        * testing/MockMediaSessionCoordinator.h: New.

2021-03-24  Chris Dumez  <cdumez@apple.com>

        Preload graphics drivers on a background thread instead of the main thread
        https://bugs.webkit.org/show_bug.cgi?id=223713

        Reviewed by Simon Fraser.

        Preload graphics drivers on a background thread instead of the main thread. We have evidence of prewarmGlobally() hanging
        the main thread (rdar://75279383) so we should do pre-warming off the main thread whenever possible.

        r265418 introduced this graphics loader preloading and an earlier version of this patch was simply calling MTLCopyAllDevices()
        on a background queue. However, that patch was updated before landing to do the work on the main thread. I think we should go
        back to the earlier iteration.

        * page/ProcessWarming.cpp:
        (WebCore::ProcessWarming::prewarmGlobally):
        * platform/graphics/gpu/GPUDevice.h:
        * platform/graphics/gpu/cocoa/GPUDeviceMetal.mm:
        (WebCore::GPUDevice::prewarm):
        * platform/graphics/gpu/dawn/GPUDeviceDawn.cpp:
        (WebCore::GPUDevice::prewarm):

2021-03-24  Antoine Quint  <graouts@webkit.org>

        Fix interpolation of the border-spacing property
        https://bugs.webkit.org/show_bug.cgi?id=223702

        Reviewed by Antti Koivisto.

        Test: imported/w3c/web-platform-tests/css/css-tables/animations/border-spacing-interpolation.html

        While we already supported animation of border-spacing, we did not correctly clip the interpolated
        value to 0.

        * animation/CSSPropertyAnimation.cpp:
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):

2021-03-24  Simon Fraser  <simon.fraser@apple.com>

        Add DisplayLink log channels in WebCore and WebKit
        https://bugs.webkit.org/show_bug.cgi?id=223669

        Reviewed by Tim Horton.
        
        DisplayRefreshMonitor code involves some non-trivial object
        fan-out and WebProcess/UI Process interaction, and it deserves
        a log channel.

        * platform/Logging.h:
        * platform/graphics/DisplayRefreshMonitor.cpp:
        (WebCore::DisplayRefreshMonitor::displayDidRefresh):
        * platform/graphics/DisplayRefreshMonitorManager.cpp:
        (WebCore::DisplayRefreshMonitorManager::monitorForClient):
        (WebCore::DisplayRefreshMonitorManager::displayDidRefresh):

2021-03-24  Philippe Normand  <pnormand@igalia.com>

        REGRESSION(r274870) fast/canvas/webgl/texImage2D-mse-flipY-true.html and fast/canvas/webgl/texImage2D-mse-flipY-false.html are crashing
        https://bugs.webkit.org/show_bug.cgi?id=223674

        Reviewed by Kenneth Russell.

        When the srcObject is directly set on a media element, the corresponding URL might still be
        empty, so we need to ensure the URI corresponding to the MediaSource blob is not empty,
        otherwise uridecodebin would fail to create the right source element.

        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:
        (WebCore::MediaPlayerPrivateGStreamerMSE::load):

2021-03-24  Aditya Keerthi  <akeerthi@apple.com>

        REGRESSION (r273154): [iOS] Two magnifier symbols on google.com
        https://bugs.webkit.org/show_bug.cgi?id=223700
        <rdar://problem/75357965>

        Reviewed by Tim Horton.

        The iOS form control refresh added a magnifier symbol to
        the default appearance of <input type="search">. On iPhone, google.com
        uses <input type="search"> for their search field, while drawing their
        own magnifier symbol. As a result, two magnifier symbols appear.

        Note that on macOS and iPadOS, google.com uses an <input type="text">,
        which means this problem is only observed on iPhone. Ideally, google.com
        should adopt <input type="text"> on the iPhone version of the site,
        matching the other platforms. However, in the meantime, we can hide our
        symbol using a quirk.

        * html/shadow/TextControlInnerElements.cpp:
        (WebCore::SearchFieldResultsButtonElement::SearchFieldResultsButtonElement):

        Hide the symbol if the quirk applies.

        * page/Quirks.cpp:
        (WebCore::Quirks::shouldHideSearchFieldResultsButton const):

        Add a quirk to hide the magnifier symbol on google.com and other country
        domains.

        * page/Quirks.h:

2021-03-24  Youenn Fablet  <youenn@apple.com>

        Add logging to check whether RealtimeOutgoingVideoSource is applying rotation or not
        https://bugs.webkit.org/show_bug.cgi?id=223691

        Reviewed by Eric Carlson.

        No change of behavior.

        * platform/mediastream/mac/RealtimeOutgoingVideoSourceCocoa.mm:
        (WebCore::RealtimeOutgoingVideoSourceCocoa::rotatePixelBuffer):

2021-03-24  Chris Dumez  <cdumez@apple.com>

        Source/WebCore/page/FrameView.h:990:50: runtime error: signed integer overflow: 65537 * 65537 cannot be represented in type 'int'
        https://bugs.webkit.org/show_bug.cgi?id=223697

        Reviewed by Darin Adler.

        Make sure FrameView::incrementVisuallyNonEmptyPixelCount() deals with overflows in a well-defined
        manner. This fixes the following reports from UBSan:
        - Source/WebCore/page/FrameView.h:990:50: runtime error: signed integer overflow: 65537 * 65537 cannot be represented in type 'int'
        - Source/WebCore/page/FrameView.h:990:50: runtime error: signed integer overflow: 65536 * 65536 cannot be represented in type 'int'
        - Source/WebCore/page/FrameView.h:990:50: runtime error: signed integer overflow: 1116300 * 558150 cannot be represented in type 'int'
        - Source/WebCore/page/FrameView.h:990:50: runtime error: signed integer overflow: -33554432 * -33554432 cannot be represented in type 'int'

        * page/FrameView.h:
        (WebCore::FrameView::incrementVisuallyNonEmptyPixelCount):

2021-03-24  Rob Buis  <rbuis@igalia.com>

        [css-contain] Parse CSS contain property
        https://bugs.webkit.org/show_bug.cgi?id=223252

        Reviewed by Sam Weinig.

        Address post land review comments.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::valueForPropertyInStyle):
        * css/CSSValueKeywords.in:
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeContain):
        * rendering/style/RenderStyleConstants.h:
        * style/StyleBuilderCustom.h:
        (WebCore::Style::BuilderCustom::applyValueContain):

2021-03-24  Sam Weinig  <weinig@apple.com>

        Update CSS Color 5 color-mix() implementation to match the latest draft spec
        https://bugs.webkit.org/show_bug.cgi?id=223665

        Reviewed by Simon Fraser.

        Update to the latest draft spec, which dramatically reduces the complexity of color-mix()
        by remove per-component adjusters.

        * css/CSSValueKeywords.in:
        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::normalizeWhitenessBlackness):
        (WebCore::CSSPropertyParserHelpers::consumeColorMixColorSpaceAndComma):
        (WebCore::CSSPropertyParserHelpers::consumeColorMixComponent):
        (WebCore::CSSPropertyParserHelpers::normalizedMixPercentages):
        (WebCore::CSSPropertyParserHelpers::makeColorTypeByNormalizingComponentsAfterMix):
        (WebCore::CSSPropertyParserHelpers::makeColorTypeByNormalizingComponentsAfterMix<HWBA<float>>):
        (WebCore::CSSPropertyParserHelpers::makeColorTypeByNormalizingComponentsAfterMix<HSLA<float>>):
        (WebCore::CSSPropertyParserHelpers::fixupHueComponentsPriorToMix):
        (WebCore::CSSPropertyParserHelpers::mixColorComponentsInColorSpace):
        (WebCore::CSSPropertyParserHelpers::mixColorComponents):
        (WebCore::CSSPropertyParserHelpers::parseColorMixFunctionParameters):
        (WebCore::CSSPropertyParserHelpers::HueColorAdjuster::fixupAnglesForInterpolation): Deleted.
        (WebCore::CSSPropertyParserHelpers::HueColorAdjuster::HueColorAdjuster): Deleted.
        (WebCore::CSSPropertyParserHelpers::ColorAdjuster::ColorAdjuster): Deleted.
        (WebCore::CSSPropertyParserHelpers::consumeAdjuster): Deleted.
        (WebCore::CSSPropertyParserHelpers::consumeAndUpdateAdjusterAtIndex): Deleted.
        (WebCore::CSSPropertyParserHelpers::consumeAndUpdateAdjuster): Deleted.
        (WebCore::CSSPropertyParserHelpers::consumeAdjusters): Deleted.
        (WebCore::CSSPropertyParserHelpers::consumeMixComponents): Deleted.
        (WebCore::CSSPropertyParserHelpers::normalizeAdjusterValues): Deleted.
        (WebCore::CSSPropertyParserHelpers::remainingAdjustment): Deleted.
        (WebCore::CSSPropertyParserHelpers::mixComponent): Deleted.
        (WebCore::CSSPropertyParserHelpers::mixComponentAtIndex): Deleted.
        (WebCore::CSSPropertyParserHelpers::mix): Deleted.
        (WebCore::CSSPropertyParserHelpers::parseColorMixFunctionParametersUsingAdjusters): Deleted.
        Update to the new syntax and remove component adjusters. They may come back for color-adjust() 
        in the future.

        * platform/graphics/ColorModels.h:
        * platform/graphics/ColorTypes.h:
        (WebCore::clampedComponent):
        (WebCore::assertInRange):
        * platform/graphics/ColorUtilities.h:
        (WebCore::invertedColorWithOverriddenAlpha):
        Add support in the color models for annotating more about each component, now including
        the type (angle, number or percentage). This allows algorithms generic algorithms to
        operate on abstract color type components without specializing for each color type.

2021-03-24  Zan Dobersek  <zdobersek@igalia.com>

        [GStreamer] Use imxvideoconvert_g2d element inside the sink when available
        https://bugs.webkit.org/show_bug.cgi?id=223693

        Reviewed by Philippe Normand.

        On some iMX platforms we require the use of imxvideoconvert_g2d element
        in order to properly convert the visual buffers before they can be
        rendered through our pipeline. We expect to require this buffer if it's
        present in the GStreamer plugin registry on the system.

        We search for this element and, if found, add it to the sink and
        position it at the beginning, before the glupload element.

        Based on an approach outlined by Gabriel Valcazar.

        * platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp:
        (webKitGLVideoSinkConstructed):

2021-03-24  Antoine Quint  <graouts@webkit.org>

        Support animation of the tab-size CSS property
        https://bugs.webkit.org/show_bug.cgi?id=223688

        Reviewed by Antti Koivisto.

        Test: imported/w3c/web-platform-tests/css/css-text/animations/tab-size-interpolation.html

        * animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFunc):
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):
        * platform/graphics/TabSize.h:
        (WebCore::TabSize::value const):
        (WebCore::TabSize::operator bool const):

2021-03-24  Rob Buis  <rbuis@igalia.com>

        [css-grid] Do not allow negative heights
        https://bugs.webkit.org/show_bug.cgi?id=221439

        Reviewed by Javier Fernandez.

        Do not allow negative heights in calculations.

        Test: fast/css-grid-layout/zero-height-crash.html

        * rendering/GridTrackSizingAlgorithm.cpp:
        (WebCore::GridTrackSizingAlgorithm::setup):
        * rendering/GridTrackSizingAlgorithm.h:
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::computeTrackSizesForDefiniteSize):
        (WebCore::RenderGrid::gridGap const):
        (WebCore::RenderGrid::computeTrackSizesForIndefiniteSize const):
        (WebCore::RenderGrid::availableAlignmentSpaceForChildBeforeStretching const):

2021-03-23  Tim Horton  <timothy_horton@apple.com>

        Consolidate Books bundle checks
        https://bugs.webkit.org/show_bug.cgi?id=223664
        <rdar://problem/75754750>

        Reviewed by Wenson Hsieh.

        No new tests, no change in behavior.

        * Modules/geolocation/Geolocation.cpp:
        (WebCore::isRequestFromIBooks):
        * bindings/js/CommonVM.cpp:
        (WebCore::globalConstRedeclarationShouldThrow):
        * dom/MouseEvent.cpp:
        (WebCore::MouseEvent::initMouseEventQuirk):
        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::requiresFullscreenForVideoPlayback const):
        * inspector/agents/InspectorTimelineAgent.cpp:
        (WebCore::currentRunLoop):
        * platform/RuntimeApplicationChecks.h:
        * platform/cocoa/RuntimeApplicationChecksCocoa.mm:
        (WebCore::CocoaApplication::isIBooks):
        (WebCore::MacApplication::isIBooks): Deleted.
        (WebCore::IOSApplication::isIBooks): Deleted.
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::synchronousWillSendRequestEnabled):
        * rendering/RenderBox.cpp:
        (WebCore::allowMinMaxPercentagesInAutoHeightBlocksQuirk):
        Transition to a single bundle check for Books, since the quirks are generally
        about book content, not about the app's behavior. Long-term, we should
        get rid of these entirely (some are no longer necessary, and the rest
        should turn into switches that Books can toggle).

2021-03-23  Simon Fraser  <simon.fraser@apple.com>

        Add DisplayRefreshMonitorFactory.
        https://bugs.webkit.org/show_bug.cgi?id=223648

        Reviewed by Chris Dumez.

        Future work will require that it's possible to create a DisplayRefreshMonitor
        without having a DisplayRefreshMonitorClient. It was also weird that the way to
        create a DisplayRefreshMonitor was via the DisplayRefreshMonitorClient, so
        this change fixes both by adding DisplayRefreshMonitorFactory.

        In WK2, the drawing areas are DisplayRefreshMonitorFactories. If there is no
        factory, we fall back to the default implementations.

        * Headers.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/EmptyClients.cpp:
        (WebCore::EmptyDisplayRefreshMonitorFactory::sharedEmptyDisplayRefreshMonitorFactory):
        (WebCore::EmptyChromeClient::displayRefreshMonitorFactory const):
        (WebCore::EmptyChromeClient::createDisplayRefreshMonitor const): Deleted.
        * loader/EmptyClients.h:
        * page/ChromeClient.h:
        (WebCore::ChromeClient::displayRefreshMonitorFactory const):
        (WebCore::ChromeClient::createDisplayRefreshMonitor const): Deleted.
        * page/RenderingUpdateScheduler.cpp:
        (WebCore::RenderingUpdateScheduler::displayRefreshMonitorFactory const):
        (WebCore::RenderingUpdateScheduler::createDisplayRefreshMonitor const): Deleted.
        * page/RenderingUpdateScheduler.h:
        * platform/graphics/DisplayRefreshMonitor.cpp:
        (WebCore::DisplayRefreshMonitor::create):
        * platform/graphics/DisplayRefreshMonitor.h:
        * platform/graphics/DisplayRefreshMonitorClient.cpp:
        (WebCore::DisplayRefreshMonitorClient::DisplayRefreshMonitorClient): Deleted.
        * platform/graphics/DisplayRefreshMonitorClient.h:
        * platform/graphics/DisplayRefreshMonitorFactory.h: Copied from Source/WebCore/platform/graphics/DisplayRefreshMonitorClient.cpp.
        * platform/graphics/DisplayRefreshMonitorManager.cpp:
        (WebCore::DisplayRefreshMonitorManager::monitorForClient):
        * platform/graphics/GraphicsLayerUpdater.cpp:
        (WebCore::GraphicsLayerUpdater::GraphicsLayerUpdater):
        (WebCore::GraphicsLayerUpdater::displayRefreshMonitorFactory const):
        (WebCore::GraphicsLayerUpdater::createDisplayRefreshMonitor const): Deleted.
        * platform/graphics/GraphicsLayerUpdater.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::displayRefreshMonitorFactory):
        (WebCore::RenderLayerCompositor::createDisplayRefreshMonitor const): Deleted.
        * rendering/RenderLayerCompositor.h:

2021-03-23  Kate Cheney  <katherine_cheney@apple.com>

        Service worker loads are not marked as app-bound
        https://bugs.webkit.org/show_bug.cgi?id=222635
        <rdar://problem/74395950>

        Reviewed by Youenn Fablet.

        Fix capitalization error. Add a new function to mark the service
        worker document loader as app-bound.

        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::setLastNavigationWasAppBound):
        (WebCore::DocumentLoader::setlastNavigationWasAppBound): Deleted.
        * workers/service/context/ServiceWorkerThreadProxy.cpp:
        (WebCore::ServiceWorkerThreadProxy::setLastNavigationWasAppBound):
        * workers/service/context/ServiceWorkerThreadProxy.h:

2021-03-23  Simon Fraser  <simon.fraser@apple.com>

        Use FramesPerSecond in more places in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=223656

        Reviewed by Tim Horton.

        Use FramesPerSecond rather than 'unsigned' in more places in WebCore.

        * page/Chrome.h:
        * page/Page.cpp:
        (WebCore::Page::windowScreenDidChange):
        * page/Page.h:
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::windowScreenDidChange):
        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollingCoordinator::windowScreenDidChange):
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::windowScreenDidChange):
        * page/scrolling/ScrollingTree.h:
        * platform/HostWindow.h:

2021-03-23  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Functor for WeakGCMap::ensureValue must not invoke GC
        https://bugs.webkit.org/show_bug.cgi?id=223629

        Reviewed by Mark Lam.

        Test: js/dom/weak-gc-map-ensure-value-should-not-invoke-gc.html

        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::createCrossOriginFunction):
        (WebCore::JSDOMGlobalObject::createCrossOriginGetterSetter):

2021-03-23  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rebaseline bindings tests after r274906.

        * bindings/scripts/test/JS/JSTestCEReactions.cpp:
        * bindings/scripts/test/JS/JSTestCallTracer.cpp:
        * bindings/scripts/test/JS/JSTestConditionalIncludes.cpp:
        * bindings/scripts/test/JS/JSTestDomainSecurity.cpp:
        * bindings/scripts/test/JS/JSTestEnabledBySetting.cpp:
        * bindings/scripts/test/JS/JSTestGlobalObject.cpp:
        * bindings/scripts/test/JS/JSTestIndexedSetterWithIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        * bindings/scripts/test/JS/JSTestLegacyNoInterfaceObject.cpp:
        * bindings/scripts/test/JS/JSTestMapLikeWithOverriddenOperations.cpp:
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterWithIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestNamedDeleterWithIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestNamedSetterWithIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetter.cpp:
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetterAndSetter.cpp:
        * bindings/scripts/test/JS/JSTestNamedSetterWithLegacyUnforgeableProperties.cpp:
        * bindings/scripts/test/JS/JSTestNamedSetterWithLegacyUnforgeablePropertiesAndLegacyOverrideBuiltIns.cpp:
        * bindings/scripts/test/JS/JSTestNode.cpp:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/JS/JSTestOperationConditional.cpp:
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        * bindings/scripts/test/JS/JSTestSetLikeWithOverriddenOperations.cpp:
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:

2021-03-23  Chris Dumez  <cdumez@apple.com>

        Unreviewed build fix after r274832.

        * bindings/scripts/CodeGeneratorJS.pm:
        (AddToIncludesForIDLType):

2021-03-23  Adrian Perez de Castro  <aperez@igalia.com>

        [CMake] Use an imported target for the LCMS2 library
        https://bugs.webkit.org/show_bug.cgi?id=223442

        Reviewed by Carlos Garcia Campos.

        No new tests needed.

        * PlatformGTK.cmake: Use the LCMS::LCMS2 imported target, only with USE_LCMS enabled.
        * PlatformWPE.cmake: Ditto.

2021-03-23  Jer Noble  <jer.noble@apple.com>

        [Cocoa][Opus] Protect against variable frame duration packets
        https://bugs.webkit.org/show_bug.cgi?id=223623

        Reviewed by Eric Carlson.

        Because frames-per-packet and frame duration are carried within the TOC of each individual
        frame, it's theoretically possible to construct an Opus stream where those values change
        without a new initialization segment, a situation which CoreAudio does not currently
        support. In the case such a stream is encountered, bail with an error code during parsing,
        rather than passing such data on to CoreAudio for decoding.

        To do so, extract some of the Opus private data parsing code from
        createOpusAudioFormatDescription(), into its own method parseOpusPrivateData(). Create a new
        struct type OpusCookieContents to recieve this parsed data. And to avoid excessive
        allocations during parsing, ensure that these methods support stack-based structures through
        an out-param (as opposed to returning an Optional<> struct).

        * platform/graphics/cocoa/SourceBufferParserWebM.cpp:
        (WebCore::SourceBufferParserWebM::AudioTrackData::consumeFrameData):
        * platform/graphics/cocoa/SourceBufferParserWebM.h:
        * platform/graphics/cocoa/WebMAudioUtilitiesCocoa.h:
        * platform/graphics/cocoa/WebMAudioUtilitiesCocoa.mm:
        (WebCore::parseOpusPrivateData):
        (WebCore::cookieFromOpusCookieContents):
        (WebCore::createOpusAudioFormatDescription):
        (WebCore::cookieFromOpusCodecPrivate): Deleted.

2021-03-23  Chris Dumez  <cdumez@apple.com>

        [UBSan] dom/Document.cpp:2722:23: runtime error: reference binding to null pointer of type 'JSC::CallFrame'
        https://bugs.webkit.org/show_bug.cgi?id=223642

        Reviewed by Darin Adler.

        Use a raw pointer instead of a reference for the JSC::CallFrame and null check it to make sure
        the code is safe and its behavior is defined.

        * dom/Document.cpp:
        (WebCore::Document::shouldBypassMainWorldContentSecurityPolicy const):

2021-03-23  Jiewen Tan  <jiewen_tan@apple.com>

        Provide a way to specify platform vs security key when requesting an assertion in the SPI
        https://bugs.webkit.org/show_bug.cgi?id=223547
        <rdar://74034746>

        Reviewed by Brent Fulgham.

        Covered by API tests.

        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/webauthn/AuthenticatorAttachment.h: Added.
        * Modules/webauthn/AuthenticatorAttachment.idl: Added.
        * Modules/webauthn/PublicKeyCredentialCreationOptions.h:
        * Modules/webauthn/PublicKeyCredentialCreationOptions.idl:
        * Modules/webauthn/PublicKeyCredentialRequestOptions.h:
        * WebCore.xcodeproj/project.pbxproj:

2021-03-23  Sihui Liu  <sihui_liu@apple.com>

        Add write barrier to JSValueInWrappedObject for garbage collection
        https://bugs.webkit.org/show_bug.cgi?id=198319

        Reviewed by Filip Pizlo.

        * bindings/js/JSValueInWrappedObject.h:
        (WebCore::cachedPropertyValue):

2021-03-23  Aditya Keerthi  <akeerthi@apple.com>

        [iOS][FCR] Add pressed state for button-like controls
        https://bugs.webkit.org/show_bug.cgi?id=223208
        <rdar://problem/72399087>

        Reviewed by Simon Fraser.

        Add a pressed state for buttons, checkboxes, radio buttons, select
        elements and date inputs. The pressed state has a 75% opacity applied
        to the text and background colors.

        * css/html.css:

        Explicitly set the default active style on buttons to ensure styles are
        are adjusted when the element is pressed.

        * rendering/RenderThemeIOS.h:
        * rendering/RenderThemeIOS.mm:

        The style adjustment is only performed if the -webkit-appearance property
        is not set to none. This ensures we do not override the colors for
        custom styled form controls.

        (WebCore::adjustInputElementButtonStyle):
        (WebCore::RenderThemeIOS::adjustMenuListButtonStyle const):
        (WebCore::RenderThemeIOS::adjustButtonStyle const):
        (WebCore::RenderThemeIOS::checkboxRadioBackgroundColor):

        Factored out the background color determination for checkboxes and
        radio buttons into a common method.

        (WebCore::RenderThemeIOS::checkboxRadioIndicatorColor):

        Factored out the indicator color determination for checkboxes and
        radio buttons into a common method.

        (WebCore::RenderThemeIOS::paintCheckbox):
        (WebCore::RenderThemeIOS::paintRadio):

2021-03-23  Peng Liu  <peng.liu6@apple.com>

        Enable the quirk to disable firing "webkitendfullscreen" event when a video enters picture-in-picture from fullscreen on espn.com
        https://bugs.webkit.org/show_bug.cgi?id=223610

        Reviewed by Jer Noble.

        A video element entering picture-in-picture from fullscreen will fire a "webkitendfullscreen"
        event since r266728, but some sites (e.g., espn.com) do not handle the event properly.
        Because they assume the video will resume to inline after exiting fullscreen.

        This patch enables the quirk for espn.com to disable firing "webkitendfullscreen" event
        in that scenario before they fix the issue in the event handler.

        * page/Quirks.cpp:
        (WebCore::Quirks::shouldDisableEndFullscreenEventWhenEnteringPictureInPictureFromFullscreenQuirk const):

2021-03-23  Chris Dumez  <cdumez@apple.com>

        dom/WheelEvent.cpp:47:58: runtime error: negation of -2147483648 cannot be represented in type 'int'; cast to an unsigned type to negate this value to itself
        https://bugs.webkit.org/show_bug.cgi?id=223605

        Reviewed by Darin Adler.

        Fix issues found by UBSan in the WheelEvent constructor:
        - wheelDeltaX / wheelDeltaY have type int and we negate those values to compute deltaX / deltaY (which have type double).
          If wheelDeltaX / wheelDeltaY where INT_MIN, then -INT_MIN would overflow. To address the issue, we now cast to double
          *before* negating the value.
        - When wheelDeltaX / wheelDeltaY are initially 0, we compute their value from deltaX / deltaY. However, deltaX & deltaY
          use type double while wheelDeltaX / wheelDeltaY use type int. As a result, values for deltaX / deltaY could end up
          being out of range and not fit in wheelDeltaX / wheelDeltaY. To address the issue, we use clampTo<int>() to clamp to
          the correct destination range.

        Test: fast/events/wheelevent-delta-overflow.html

        * dom/WheelEvent.cpp:
        (WebCore::WheelEvent::WheelEvent):
        (WebCore::WheelEvent::initWebKitWheelEvent):

2021-03-23  Jean-Yves Avenard  <jya@apple.com>

        Only send image across XPC to GPU process if it changes.
        https://bugs.webkit.org/show_bug.cgi?id=223298
        <rdar://problem/75559236>

        Reviewed by Eric Carlson.

        No change in observable functionality.

        * platform/NowPlayingManager.cpp: 
        (WebCore::NowPlayingManager::setNowPlayingInfo): On first image change we store it to a local member variable and set imageData to null.
        (WebCore::NowPlayingManager::setNowPlayingInfoPrivate): Check if imageData is null, and if so use cache value.
        * platform/NowPlayingManager.h: New member to store cache.

2021-03-23  Chris Dumez  <cdumez@apple.com>

        Add assertions to guard against heap allocations on the audio thread
        https://bugs.webkit.org/show_bug.cgi?id=223226

        Reviewed by Darin Adler.

        Add assertions to guard against heap allocations on the audio thread during
        audio processing, since those are bad for performance. I fixed any of the
        issues found by these assertions in dependency bugs. Some issues remain
        and are protected by DisableMallocRestrictionsForCurrentThreadScope to avoid
        tripping the new assertions.

        Right now, the assertions only protect audio processing, not pre/post quantum
        rendering casts. Ideally, we'd expand the scope of these assertions to cover
        everything that's done on the audio thread but this will require more fixes.

        * Modules/webaudio/AudioDestinationNode.cpp:
        (WebCore::AudioDestinationNode::render):
        * Modules/webaudio/AudioScheduledSourceNode.cpp:
        (WebCore::AudioScheduledSourceNode::finish):
        * Modules/webaudio/AudioWorkletNode.cpp:
        (WebCore::AudioWorkletNode::fireProcessorErrorOnMainThread):
        * Modules/webaudio/AudioWorkletProcessor.cpp:
        (WebCore::AudioWorkletProcessor::process):
        * Modules/webaudio/MediaStreamAudioSourceCocoa.cpp:
        (WebCore::MediaStreamAudioSource::consumeAudio):
        * Modules/webaudio/ScriptProcessorNode.cpp:
        (WebCore::ScriptProcessorNode::process):

2021-03-23  Philippe Normand  <pnormand@igalia.com>

        [MSE][GStreamer] SIGSEV in webKitMediaSrcFreeStream
        https://bugs.webkit.org/show_bug.cgi?id=220091

        Reviewed by Xabier Rodriguez-Calvar.

        The pipeline used by the MSE player is now able reload the MediaSource from the beginning if
        a seek to 0 was requested. The problem was that uridecodebin was creating a new source
        element and notifying the player which was then trying to dispose underlying platform track
        informations, and also related appsrc elements. The latter was specially problematic because
        the appsrc elements ownership was badly handled (elements added to a bin should not be
        reused, unless an extra ref is added), leading to racy crashes.

        So now when uridecodebin creates a new source element, the player detects this is a new
        source and transfers track-related informations to the new element. Additionally, new appsrc
        elements are created for the new element and track signals emitted so that the player is
        still fully aware of the MSE tracks topology.

        No new tests but two existing tests are now passing.

        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:
        (WebCore::MediaPlayerPrivateGStreamerMSE::load):
        (WebCore::MediaPlayerPrivateGStreamerMSE::sourceSetup):
        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.h:
        * platform/graphics/gstreamer/mse/MediaSourcePrivateGStreamer.cpp:
        (WebCore::MediaSourcePrivateGStreamer::open):
        * platform/graphics/gstreamer/mse/MediaSourcePrivateGStreamer.h:
        * platform/graphics/gstreamer/mse/PlaybackPipeline.cpp:
        (WebCore::PlaybackPipeline::addSourceBuffer):
        * platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamer.cpp:
        (webKitMediaSrcFinalize):
        (webKitMediaSrcChangeState):
        (webKitMediaSrcFreeStream):
        (webKitMediaSrcRestoreTracks):
        (webKitMediaSrcSignalTracks):
        * platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamer.h:

2021-03-23  Philippe Normand  <pnormand@igalia.com>

        [GTK] X11 build fixes
        https://bugs.webkit.org/show_bug.cgi?id=223577

        Reviewed by Adrian Perez de Castro.

        X11 headers define a bunch of macros with common terms, interfering with WebCore and WTF
        enum values. As a workaround, we explicitly undef them.

        * platform/graphics/GLContext.h:
        * platform/graphics/GraphicsContext.h:

2021-03-23  Frédéric Wang  <fwang@igalia.com>

        Nullptr deref in WebCore::ApplyStyleCommand::applyRelativeFontStyleChange
        https://bugs.webkit.org/show_bug.cgi?id=223364

        Reviewed by Ryosuke Niwa.

        When the editing code creates a span to apply font style change, it may not have editable
        style if the document sets extra style (e.g. user-select: all). This is causing a debug
        ASSERT in AppendNodeCommand::AppendNodeCommand when the span is inserted and a nullptr
        dereference later in release mode. This patch ensures that we skip the font style change
        when that happens.

        Test: editing/style/apply-font-style-change-crash.html

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyRelativeFontStyleChange): Skip the font style change if
        the span insertion failed.
        (WebCore::ApplyStyleCommand::surroundNodeRangeWithElement): After inserting the new element,
        ensure that the conditions from the ASSERT of AppendNodeCommand::AppendNodeCommand hold and
        return failure if they don't.
        * editing/ApplyStyleCommand.h: Return a boolean indicating success.

2021-03-23  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Unable to view state details on CDC COVID map
        https://bugs.webkit.org/show_bug.cgi?id=223620
        <rdar://74284133>

        Reviewed by Simon Fraser.

        When the content change observer sees some visibility change, it checks if the newly visible content is actionable (e.g. something the user can click on).
        A non-actionable content is considered less important than the action behind the "click". So while we trigger the hover state we immediately proceed with click as well.
        (e.g. on youtube.com, hovering over the controls (settings, volume etc) brings up a (non-actionable) tooltip and the subsequent click triggers the associated action.
        Now on iPadOS, it would require 2 taps on the mute/unmute button to actually mute/unmute the video, if we stopped at the hover state)

        This patch implements a quirk for the CDC Covid map so that tapping on the map brings up the numbers dialog and we only submit the click event on the subsequent tap.

        * page/Quirks.cpp:
        (WebCore::Quirks::shouldTooltipPreventFromProceedingWithClick const):
        * page/Quirks.h:
        * page/ios/ContentChangeObserver.cpp:
        (WebCore::ContentChangeObserver::isConsideredActionableContent const): moved the isConsideredClickable logic to a lambda function. Call it when we don't apply the quirk.
        (WebCore::ContentChangeObserver::didFinishTransition):
        (WebCore::ContentChangeObserver::StyleChangeScope::~StyleChangeScope):
        (WebCore::isConsideredClickable): Deleted.
        * page/ios/ContentChangeObserver.h:

2021-03-23  Frédéric Wang  <fwang@igalia.com>

        Nullopt in DOMSelection::getRangeAt
        https://bugs.webkit.org/show_bug.cgi?id=223361

        Reviewed by Ryosuke Niwa.

        When extending the selection toward a pseudo element, it's possible to reach the
        corresponding debug ASSERT in WebCore::Position::Position and later a nullptr dereference in
        release mode. This patch fixes start/endPositionForLine to avoid that issue.

        Test: editing/selection/modify-by-lineboundary-toward-pseudo-element.html

        * editing/VisibleUnits.cpp: Make the two branches of LineEndpointComputationMode consistent
        and merge them.
        (WebCore::startPositionForLine): For logical ordering, try a non-pseudo element after.
        (WebCore::endPositionForLine): For logical ordering, try a non-pseudo element before.

2021-03-23  Frédéric Wang  <fwang@igalia.com>

        Nullptr crash in HTMLConverter::convert
        https://bugs.webkit.org/show_bug.cgi?id=221719

        Reviewed by Ryosuke Niwa.

        When the "Undo" command is called after DOM changes, one of the selection's position anchors
        may have been moved to a new document. In that case, just clear the selection. Also add
        asserts to ensure the selection is in good state after unapply and reapply commands.

        * editing/CompositeEditCommand.cpp:
        (WebCore::EditCommandComposition::unapply): Add security assert to ensure selection is in
        good state.
        (WebCore::EditCommandComposition::reapply): Ditto.
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::setSelectionWithoutUpdatingAppearance): If the selection's
        position anchors have been moved to a new document then just clear the selection.
        (WebCore::FrameSelection::isConnectedToDocument const): New method to verify that all the
        positions of the visible selection are in m_document.
        * editing/FrameSelection.h: Declare new method.
        * editing/VisibleSelection.cpp:
        (WebCore::VisibleSelection::document const): New method that returns a common document for
        all positions or nullptr otherwise.
        * editing/VisibleSelection.h: Declare new method.

2021-03-23  Kimmo Kinnunen  <kkinnunen@apple.com>

        REGRESSION(r274860): error: ‘class WebCore::ExtensionsGLOpenGLCommon’ has no member named ‘drawArraysInstancedANGLE’
        https://bugs.webkit.org/show_bug.cgi?id=223633

        Unreviewed build fix.

        Fix WPE build by adding the functions to ExtensionsGLOpenGLCommon as pure virtual functions.

        * platform/graphics/opengl/ExtensionsGLOpenGL.h:
        * platform/graphics/opengl/ExtensionsGLOpenGLCommon.h:

2021-03-23  Kimmo Kinnunen  <kkinnunen@apple.com>

        Move instanced drawing functionality from ExtensionsGL to GraphicsContextGL
        https://bugs.webkit.org/show_bug.cgi?id=223179

        Reviewed by Kenneth Russell.

        Remove unused instanced rendering functions from ExtensionsGL.
        They are already in GraphicsContextGL interfaces.
        ExtensionsGL is being removed as it is redundant. The extension object
        is the same object as the context object and not useful.

        * platform/graphics/ExtensionsGL.h:
        * platform/graphics/angle/ExtensionsGLANGLE.cpp:
        * platform/graphics/angle/ExtensionsGLANGLE.h:
        * platform/graphics/opengl/ExtensionsGLOpenGL.h:

2021-03-23  Kimmo Kinnunen  <kkinnunen@apple.com>

        ANGLE is missing the explicit context headers
        https://bugs.webkit.org/show_bug.cgi?id=223470

        Reviewed by Alexey Proskuryakov.

        * platform/graphics/angle/ANGLEHeaders.h:
        Remove the hack that was needed when including ANGLE without
        the explicit context headers.

2021-03-23  Martin Robinson  <mrobinson@igalia.com>

        No scrolling momentum with 'scroll-snap-type: x mandatory' if the scroller scrolls vertically
        https://bugs.webkit.org/show_bug.cgi?id=213571
        <rdar://problem/64715507>

        Reviewed by Simon Fraser.

        When handling momentum scrolling for scroll containers that snap, use the
        predicted momentum scroll destination for axes that do not snap. Using
        the initial scroll offset here was causing momentum scrolling in these axes
        to end prematurely.

        Test: tiled-drawing/scrolling/scroll-snap/scroll-snap-momentum-in-non-snapping-axis.html

        * platform/ScrollSnapAnimatorState.cpp:
        (WebCore::ScrollSnapAnimatorState::targetOffsetForStartOffset const): Use the predicted
        scroll offset. Even though the startOffset parameter is no longer used, do not remove
        it because it will be used in the fix for https://bugs.webkit.org/show_bug.cgi?id=223406.

2021-03-23  Said Abou-Hallawa  <said@apple.com>

        SVG links navigate only to internal animation elements and <view> anchors
        https://bugs.webkit.org/show_bug.cgi?id=223161

        Reviewed by Ryosuke Niwa.

        The specs for the SVG anchor element <a> have changed in SVG2.

        Link: https://svgwg.org/svg2-draft/linking.html#Links

        After deprecating the xlink namespace, the SVG anchor element <a> became
        very similar to HTML’s <a> element. They both use attributes in the default
        namespace.

        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::defaultEventHandler):

2021-03-22  Venky Dass  <yaranamavenkataramana@apple.com>

        Nullptr crash in  WebCore::RenderObject::RenderObjectBitfields::isLineBreak() where a NULL check is missing.
        https://bugs.webkit.org/show_bug.cgi?id=223409

        Reviewed by Ryosuke Niwa.

        When the check for LineBreak is performed the BR elmement NULL check is not performed. Which results in a crash
        The fix therefore is to check for NULL.
        
        Test: LayoutTests/editing/inserting/insert-paragraph-between-hr-and-br-assigned-to-slot-crash.html

        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply):

2021-03-22  Julian Gonzalez  <julian_a_gonzalez@apple.com>

        Crash in ReplaceSelectionCommand::doApply()
        https://bugs.webkit.org/show_bug.cgi?id=223545

        Reviewed by Ryosuke Niwa.

        Test: editing/execCommand/insert-image-in-composed-list.html

        Add a missing check in ReplaceSelectionCommand::doApply()
        to prevent calling splitTreeToNode() with nullptr.

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply):

2021-03-22  Ryosuke Niwa  <rniwa@webkit.org>

        Use JSValueInWrappedObject to keep the JSObject alive for QuickTimePluginReplacement
        https://bugs.webkit.org/show_bug.cgi?id=223561
        <rdar://75634407>

        Reviewed by Geoffrey Garen.

        This patch replaces QuickTimePluginReplacement's m_scriptObject member variable by
        JSValueInWrappedObject in HTMLPlugInElement and hooks it up with the slot visitor.

        Also use WeakPtr instead of a raw pointer for the back reference to the plugin element
        in QuickTimePluginReplacement and YouTubePluginReplacement.

        * Modules/plugins/PluginReplacement.h:
        (WebCore::PluginReplacement::InstallResult): Added; a boolean indicating the installation
        had succeeded and the script object for QuickTimePluginReplacement.
        (WebCore::PluginReplacement::scriptObject): Deleted.
        * Modules/plugins/QuickTimePluginReplacement.h:
        * Modules/plugins/QuickTimePluginReplacement.mm:
        (WebCore::QuickTimePluginReplacement::QuickTimePluginReplacement): Deployed WeakPtr.
        (WebCore::QuickTimePluginReplacement::~QuickTimePluginReplacement): Removed
        the superflous de-initialization of the member variables.
        (WebCore::QuickTimePluginReplacement::installReplacement): Now returns JSValue
        instead of storing it in m_scriptObject.
        * Modules/plugins/YouTubePluginReplacement.cpp:
        (WebCore::YouTubePluginReplacement::YouTubePluginReplacement): Deployed WeakPtr.
        (WebCore::YouTubePluginReplacement::installReplacement):
        * Modules/plugins/YouTubePluginReplacement.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        (InstanceNeedsVisitChildren): Generate visitChildren when an IDL has Plugin attribute.
        (GenerateImplementation): Visit the newly added JSValueInWrappedObject.
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::didAddUserAgentShadowRoot): Store the script object returned
        by QuickTimePluginReplacement::installReplacement in the newly added member variable.
        (WebCore::HTMLPlugInElement::scriptObjectForPluginReplacement): Updated.
        * html/HTMLPlugInElement.h:
        (WebCore::HTMLPlugInElement::pluginReplacementScriptObject): Added. Used by visitChildren.

2021-03-22  Myles C. Maxfield  <mmaxfield@apple.com>

        [GPU Process]: Improve getImageData() perf part 1: Add a GetImageData display list item
        https://bugs.webkit.org/show_bug.cgi?id=223544

        Unreviewed.

        I accidentally forgot to commit one line of the patch!!

        * platform/graphics/displaylists/DisplayListItems.h:

2021-03-22  Myles C. Maxfield  <mmaxfield@apple.com>

        [GPU Process]: Improve getImageData() perf part 1: Add a GetImageData display list item
        https://bugs.webkit.org/show_bug.cgi?id=223544

        Reviewed by Wenson Hsieh.

        We're moving to a design for getImageData() where the web process and the GPU process
        set up a shmem + semaphore ahead-of-time, so that when we encounter a call to getImageData(),
        the GPU process can just write into the shmem and signal the semaphore. The web process just
        encodes the getImageData() call into the regular display list, flushAsync()s to kick the GPU
        process, then just waits on the semaphore. Initial performance testing shows that this is
        way, way faster than sending messages containing pixel color data payloads.

        This patch is just the first step: Adding a GetImageData display list item. The item
        currently gets recorded in the web process and applied in the GPU process, but the application
        process currently does nothing.

        No new tests because there is no behavior change yet.

        * platform/graphics/displaylists/DisplayList.cpp:
        (WebCore::DisplayList::DisplayList::append):
        * platform/graphics/displaylists/DisplayListItemBuffer.cpp:
        (WebCore::DisplayList::ItemHandle::apply):
        (WebCore::DisplayList::ItemHandle::destroy):
        (WebCore::DisplayList::ItemHandle::safeCopy const):
        * platform/graphics/displaylists/DisplayListItemBuffer.h:
        * platform/graphics/displaylists/DisplayListItemType.cpp:
        (WebCore::DisplayList::sizeOfItemInBytes):
        (WebCore::DisplayList::isDrawingItem):
        (WebCore::DisplayList::isInlineItem):
        * platform/graphics/displaylists/DisplayListItemType.h:
        * platform/graphics/displaylists/DisplayListItems.cpp:
        (WebCore::DisplayList::operator<<):
        (WebCore::DisplayList::PutImageData::apply const): Deleted.
        * platform/graphics/displaylists/DisplayListItems.h:
        (WebCore::DisplayList::GetImageData::GetImageData):
        (WebCore::DisplayList::GetImageData::outputFormat const):
        (WebCore::DisplayList::GetImageData::srcRect const):
        * platform/graphics/displaylists/DisplayListRecorder.cpp:
        (WebCore::DisplayList::Recorder::getImageData):
        * platform/graphics/displaylists/DisplayListRecorder.h:

2021-03-22  Sam Weinig  <weinig@apple.com>

        [WebIDL] Remove the need to specify [MayThrowException]
        https://bugs.webkit.org/show_bug.cgi?id=180019

        Reviewed by Darin Adler and Chris Dumez.

        Removes the need to specify [MayThrowException] by deducing it from the bound 
        signature's return value. Any function returning an ExceptionOr is one that throws.

        In most cases, this was already handled by toJS<>(..., impl.func()), which had
        overloads for the case that the value was an ExceptionOr. The cases this didn't
        work for were funtions that returned void, as toJS<>(..., impl.func()) would not
        compile. To work around this, toJS<>() can now take a lambda as its value, and
        can determine via the lambda's return type if it needs to throw. For instance,
        an IDL operation like:

            [MayThrowException] undefined func();

        used to generate a bindings body that looked like the following :

            auto& impl = castedThis->wrapped();
            throwScope.release();
            propagateException(*lexicalGlobalObject, throwScope, impl.func());
            return JSValue::encode(jsUndefined());        
        
        will now generate a bindings body that looks like:
        
             auto& impl = castedThis->wrapped();
             RELEASE_AND_RETURN(throwScope, JSValue::encode(toJS<IDLUndefined>(*lexicalGlobalObject, throwScope, [&]() -> decltype(auto) { return impl.func(); })));

        which closely mirrors a non-undefined return operation. This wrapped lambda form
        is only used for operations returning undefined or promises, as those are the only
        functions that can return void, but it would be correct to use them for all types,
        if not a bit more noisy and perhaps a tiny compile time cost.

        NOTE: The use of `-> decltype(auto)` explicit return type on the lambda is required
        to perfectly forward reference types, such as those used by owned promises. Otherwise,
        a copy constructor is invoked.

        In addition to supporting all operations, this also removes the requirement to annotate
        named and indexed getters/setters. This mostly just means always defining a throw scope,
        but for named getters it also meant adding a new helper, `visibleNamedPropertyItemAccessorFunctor`
        which constructors the item accessor functor for the `accessVisibleNamedProperty` 
        algorithm rather than hard coding it in the generator.

        Due to increased use of toJS, the code generator is now checking more return types
        (via AddToImplIncludesForIDLType) so the code generator was able to find a few invalid
        return types (e.g. use of Promise<bool> rather than Promise<boolean>, etc.) and these
        have been fixed and will be an error going forward. Would be a nice improvement to
        the code generator to do type checking up front, rather than as a side effect of
        code generation, but we will leave that for another day.

        * bindings/js/JSDOMAbstractOperations.h:
        (WebCore::visibleNamedPropertyItemAccessorFunctor):
        Added. Moves the getterFunctor lambda creation from the GenerateNamedGetterLambda
        subroutine in CodeGeneratorJS.pm, but uses deduction and constexpr to determine
        if the getter throws.

        (WebCore::accessVisibleNamedProperty):
        Rename Functor to ItemAccessor to make it a bit more clear what the type does.

        * bindings/js/JSDOMConvertBase.h:
        (WebCore::toJS):
        (WebCore::toJSNewlyCreated):
        Replace SFINAE-based overloading of toJS/toJSNewlyCreated with constexpr based
        conditionals and add the ability to pass in a functor rather than value. If a
        functor is used, additional code paths for void and ExpectionOr<void> are added
        which explicitly return jsUndefined().

        * bindings/js/JSDOMConvertDate.cpp:
        Remove incorrect comment about ExecStates that hasn't applied for a while.

        * bindings/js/JSDOMConvertSequences.h:
        Fix comment, replacing ExecState with JSGlobalObject. This has been wrong for
        a while, and this is just a drive by fix.

        * bindings/js/JSDOMExceptionHandling.h:
        (WebCore::invokeFunctorPropagatingExceptionIfNecessary):
        Use an explicit else as part of the constexpr expression to ensure the functor
        is not called, even in debug builds.

        * bindings/js/JSDOMPromiseDeferred.cpp:
        (WebCore::createDeferredPromise): Deleted.
        * bindings/js/JSDOMPromiseDeferred.h:
        Remove unused createDeferredPromise function.

        * bindings/scripts/CodeGeneratorJS.pm:
        (AddMapLikeAttributesAndOperationIfNeeded):
        (AddSetLikeAttributesAndOperationIfNeeded):
        Fix return type of mapped clear operation to be `any` rather than `undefined`
        to match the implementation, which returns a JSValue (e.g. `any`). This is now
        required as we actually look at the return type via deduction and need it to match.
 
        (GenerateNamedGetterLambda):
        Replace most of the implementation with a call to the new `visibleNamedPropertyItemAccessorFunctor`
        helper which returns a lambda with the correct behavior depending on the return type of the inner
        lambda passed.
 
        (GenerateGetOwnPropertySlot):
        (GenerateGetOwnPropertySlotByIndex):
        (GenerateAttributeGetterBodyDefinition):
        Match most other parts of the generator and always create a throw scope.

        (GenerateOperationDefinition):
        Remove explicit call to propagateException now that toJS() will handle that for us.

        (GenerateParametersCheck):
        Remove explicit call to propagateException now that toJS() will handle that for us.

        (GenerateImplementationFunctionCall):
        Simplify by using invokeFunctorPropagatingExceptionIfNecessary helper for the "returnArgumentName"
        case and relying on toJS handling the other cases.

        (NativeToJSValueMayThrow):
        Add operation to the list of things that might always throw.

        (NativeToJSValue):
        Use the lambda wrapped version of toJS for undefined and promise types, which might both
        return void and thus require it. To keep most code unchanged, and avoid unnecessary compiler
        work, we only use the wrapped version when it might be necessary. If it turns out to be
        cheep enough, it might make sense to always use this form for simplicity.

        (NeedsExplicitPropagateExceptionCall): Deleted.

        * bindings/scripts/IDLAttributes.json:
        Remove MayThrowException.

        * dom/Element.idl:
        * dom/Element.h:
        (WebCore::Element::removeAttributeForBindings):
        (WebCore::Element::removeAttributeNSForBindings):
        Add bindings specific versions of `removeAttribute` and `removeAttributeNS` which
        have a void return type (rather than the bool used by the main implementation)
        as it is now a requirement that that the bound functions signature match the IDL.

        * Modules/cache/DOMCache.idl:
        Use the correct interface name, `FetchRequest`, not `Request`.

        * Modules/cache/DOMCacheStorage.idl:
        Use the correct interface name, `DOMCache`, not `Cache`.

        * Modules/encryptedmedia/MediaKeySession.idl:
        * Modules/encryptedmedia/MediaKeys.idl:
        * dom/Document+StorageAccess.idl:
        * page/Navigator+IsLoggedIn.idl:
        Use the correct IDL type, `boolean`, not `bool`.

        * dom/AbortSignal.idl:
        Update whenSignalAborted to match the return type of implementation, which is `boolean`,
        not `undefined`.

        * testing/ServiceWorkerInternals.idl:
        Use the correct interface name, `FetchResponse`, not `Response`.

        * workers/service/ServiceWorkerClients.idl:
        Use the correct interface names, `ServiceWorkerClient`, not `Client`, and `ServiceWorkerWindowClient`, not `WindowClient`.

        * workers/service/ServiceWorkerWindowClient.idl:
        Use the correct interface names, `ServiceWorkerWindowClient`, not `WindowClient`.

        * Modules/applepay/ApplePaySession.idl:
        * Modules/beacon/Navigator+Beacon.idl:
        * Modules/cache/DOMWindow+Caches.idl:
        * Modules/encryptedmedia/legacy/WebKitMediaKeySession.idl:
        * Modules/encryptedmedia/legacy/WebKitMediaKeys.idl:
        * Modules/fetch/FetchHeaders.idl:
        * Modules/fetch/FetchRequest.idl:
        * Modules/fetch/FetchResponse.idl:
        * Modules/indexeddb/IDBCursor.idl:
        * Modules/indexeddb/IDBDatabase.idl:
        * Modules/indexeddb/IDBFactory.idl:
        * Modules/indexeddb/IDBIndex.idl:
        * Modules/indexeddb/IDBKeyRange.idl:
        * Modules/indexeddb/IDBObjectStore.idl:
        * Modules/indexeddb/IDBTransaction.idl:
        * Modules/mediarecorder/MediaRecorder.idl:
        * Modules/mediasession/MediaMetadata.idl:
        * Modules/mediasession/MediaSession.idl:
        * Modules/mediasource/MediaSource.idl:
        * Modules/mediasource/SourceBuffer.idl:
        * Modules/mediastream/RTCDTMFSender.idl:
        * Modules/mediastream/RTCDataChannel.idl:
        * Modules/mediastream/RTCPeerConnection.idl:
        * Modules/mediastream/RTCRtpReceiver+Transform.idl:
        * Modules/mediastream/RTCRtpSFrameTransform.idl:
        * Modules/mediastream/RTCRtpScriptTransformer.idl:
        * Modules/mediastream/RTCRtpSender+Transform.idl:
        * Modules/mediastream/RTCRtpSender.idl:
        * Modules/mediastream/RTCRtpTransceiver.idl:
        * Modules/paymentrequest/MerchantValidationEvent.idl:
        * Modules/paymentrequest/PaymentRequestUpdateEvent.idl:
        * Modules/speech/SpeechRecognition.idl:
        * Modules/webaudio/AudioBuffer.idl:
        * Modules/webaudio/AudioBufferSourceNode.idl:
        * Modules/webaudio/AudioContext.idl:
        * Modules/webaudio/AudioListener.idl:
        * Modules/webaudio/AudioNode.idl:
        * Modules/webaudio/AudioParam.idl:
        * Modules/webaudio/AudioScheduledSourceNode.idl:
        * Modules/webaudio/AudioWorkletGlobalScope.idl:
        * Modules/webaudio/AudioWorkletProcessor.idl:
        * Modules/webaudio/BaseAudioContext.idl:
        * Modules/webaudio/BiquadFilterNode.idl:
        * Modules/webaudio/IIRFilterNode.idl:
        * Modules/webaudio/PannerNode.idl:
        * Modules/webaudio/WebKitAudioBufferSourceNode.idl:
        * Modules/webaudio/WebKitAudioContext.idl:
        * Modules/webdatabase/SQLResultSetRowList.idl:
        * Modules/webdatabase/SQLTransaction.idl:
        * Modules/websockets/WebSocket.idl:
        * Modules/webxr/WebXRFrame.idl:
        * Modules/webxr/WebXRReferenceSpace.idl:
        * Modules/webxr/WebXRSession.idl:
        * Modules/webxr/WebXRWebGLLayer.idl:
        * animation/Animatable.idl:
        * animation/AnimationEffect.idl:
        * animation/KeyframeEffect.idl:
        * animation/WebAnimation.idl:
        * css/CSSGroupingRule.idl:
        * css/CSSStyleDeclaration.idl:
        * css/CSSStyleSheet.idl:
        * css/DOMCSSNamespace+CSSPropertiesandValues.idl:
        * css/DOMMatrix.idl:
        * css/DOMMatrixReadOnly.idl:
        * css/DeprecatedCSSOMPrimitiveValue.idl:
        * css/FontFaceSet.idl:
        * css/MediaList.idl:
        * dom/CharacterData.idl:
        * dom/ChildNode.idl:
        * dom/CustomElementRegistry.idl:
        * dom/DOMImplementation.idl:
        * dom/DOMPointReadOnly.idl:
        * dom/DataTransferItemList.idl:
        * dom/Document+HTML.idl:
        * dom/Document.idl:
        * dom/Element+DOMParsing.idl:
        * dom/Element+PointerEvents.idl:
        * dom/EventTarget.idl:
        * dom/MessagePort.idl:
        * dom/MutationObserver.idl:
        * dom/NamedNodeMap.idl:
        * dom/Node.idl:
        * dom/NodeIterator.idl:
        * dom/ParentNode.idl:
        * dom/Range+DOMParsing.idl:
        * dom/Range.idl:
        * dom/Text.idl:
        * dom/TextDecoder.idl:
        * dom/TextDecoderStreamDecoder.idl:
        * dom/TreeWalker.idl:
        * fileapi/Blob.idl:
        * fileapi/FileReader.idl:
        * fileapi/FileReaderSync.idl:
        * html/DOMTokenList.idl:
        * html/HTMLCanvasElement.idl:
        * html/HTMLDialogElement.idl:
        * html/HTMLEmbedElement.idl:
        * html/HTMLFrameElement.idl:
        * html/HTMLIFrameElement.idl:
        * html/HTMLInputElement.idl:
        * html/HTMLMediaElement.idl:
        * html/HTMLObjectElement.idl:
        * html/HTMLOptionsCollection.idl:
        * html/HTMLSelectElement.idl:
        * html/HTMLTableElement.idl:
        * html/HTMLTableRowElement.idl:
        * html/HTMLTableSectionElement.idl:
        * html/HTMLTextAreaElement.idl:
        * html/HTMLVideoElement.idl:
        * html/OffscreenCanvas.idl:
        * html/TimeRanges.idl:
        * html/canvas/CanvasDrawImage.idl:
        * html/canvas/CanvasFillStrokeStyles.idl:
        * html/canvas/CanvasGradient.idl:
        * html/canvas/CanvasImageData.idl:
        * html/canvas/CanvasPath.idl:
        * html/canvas/CanvasPattern.idl:
        * html/canvas/CanvasTransform.idl:
        * html/canvas/ImageBitmapRenderingContext.idl:
        * html/canvas/Path2D.idl:
        * html/canvas/WebGL2RenderingContext.idl:
        * html/canvas/WebGLRenderingContextBase.idl:
        * html/track/TextTrack.idl:
        * inspector/InspectorAuditAccessibilityObject.idl:
        * inspector/InspectorAuditDOMObject.idl:
        * inspector/InspectorAuditResourcesObject.idl:
        * loader/appcache/DOMApplicationCache.idl:
        * page/Crypto.idl:
        * page/DOMSelection.idl:
        * page/DOMWindow.idl:
        * page/History.idl:
        * page/Location.idl:
        * page/NavigatorServiceWorker.idl:
        * page/Performance+UserTiming.idl:
        * page/PerformanceObserver.idl:
        * page/UndoManager.idl:
        * page/UserMessageHandler.idl:
        * page/WindowOrWorkerGlobalScope.idl:
        * storage/Storage.idl:
        * svg/SVGAngle.idl:
        * svg/SVGGeometryElement.idl:
        * svg/SVGGraphicsElement.idl:
        * svg/SVGLength.idl:
        * svg/SVGLengthList.idl:
        * svg/SVGMatrix.idl:
        * svg/SVGNumberList.idl:
        * svg/SVGPathSegList.idl:
        * svg/SVGPointList.idl:
        * svg/SVGStringList.idl:
        * svg/SVGTextContentElement.idl:
        * svg/SVGTransform.idl:
        * svg/SVGTransformList.idl:
        * testing/InternalSettings.idl:
        * testing/Internals.idl:
        * workers/DedicatedWorkerGlobalScope.idl:
        * workers/Worker.idl:
        * workers/WorkerGlobalScope.idl:
        * workers/service/ExtendableEvent.idl:
        * workers/service/FetchEvent.idl:
        * workers/service/ServiceWorker.idl:
        * workers/service/ServiceWorkerClient.idl:
        * worklets/PaintWorkletGlobalScope.idl:
        * xml/DOMParser.idl:
        * xml/XMLHttpRequest.idl:
        * xml/XPathEvaluatorBase.idl:
        * xml/XPathExpression.idl:
        * xml/XPathResult.idl:
        Remove use of [MayThrowException].

        * bindings/scripts/test/JS/*:
        Remove uses of [MayThrowException] in the tests and update all the test results.

2021-03-22  Fujii Hironori  <Hironori.Fujii@sony.com>

        Unreviewed build fix for AppleWin after r274827
        https://bugs.webkit.org/show_bug.cgi?id=223500
        <rdar://problem/75706741>

        * platform/graphics/win/FontCustomPlatformData.cpp:
        (WebCore::createFontCustomPlatformData):

2021-03-22  Jean-Yves Avenard  <jya@apple.com>

        Move management of RemoteCommandListener from MediaSessionManagerCocoa into NowPlayingManager.
        https://bugs.webkit.org/show_bug.cgi?id=223435
        <rdar://problem/75567198>

        Reviewed by Eric Carlson.

        NowPlaying and RemoteCommandListener kind of do the same things, as such it make sense to combine the two
        and hide the implementation details from consumers.
        We move the handling of setting and clearing the NowPlayingInfo information to an expanded
        NowPlayingManager which now also runs in the webcontent process.
        The job to ensure a RemoteCommandListener is set is now up to the NowPlayingManager as well as
        dealing with changes in NowPlayingInfo content.
        Ideally we would prefer to remove all code related to MediaRemote from MediaSessionManagerCocoa;
        however for ease we leave it there to avoid having to deal with objective-C interface in NowPlayingManager.
        No change in observable behavior.

        * platform/MediaStrategy.h: The two existing methods dealing with NowPlayingInfo are removed, instead we can override the entire creation of the NowPlayingManager.
        * platform/MediaStrategy.cpp:
        (WebCore::MediaStrategy::createNowPlayingManager const): default implementation for createNowPlayingManager
        * platform/NowPlayingManager.cpp: Add methods used in MediaSessionManagerCocoa used to deal with RemoteCommandListener.
        (WebCore::NowPlayingManager::didReceiveRemoteControlCommand):
        (WebCore::NowPlayingManager::addClient): Add explicit method to add a RemoteCommandListener listener, to be called before calling setNowPlayingInfo if needed.
        (WebCore::NowPlayingManager::removeClient): renamed from clearNowPlayingInfoClient.
        (WebCore::NowPlayingManager::clearNowPlayingInfo):
        (WebCore::NowPlayingManager::clearNowPlayingInfoPrivate): Virtual class with default implementation which will immediately communicate with MediaRemote.
        (WebCore::NowPlayingManager::setNowPlayingInfo):
        (WebCore::NowPlayingManager::setNowPlayingInfoPrivate):  Virtual class with default implementation which will immediately communicate with MediaRemote.
        (WebCore::NowPlayingManager::setSupportsSeeking): We explicitly set a different setSupportsSeeking method for code clarity.
        (WebCore::NowPlayingManager::addSupportedCommand):
        (WebCore::NowPlayingManager::removeSupportedCommand):
        (WebCore::NowPlayingManager::setSupportedRemoteCommands):
        (WebCore::NowPlayingManager::updateSupportedCommands):
        (WebCore::NowPlayingManager::ensureRemoteCommandListenerCreated):
        (WebCore::NowPlayingManager::clearNowPlayingInfoClient): Deleted.
        * platform/NowPlayingManager.h:
        * platform/audio/cocoa/MediaSessionManagerCocoa.h: Remove now unused members
        * platform/audio/cocoa/MediaSessionManagerCocoa.mm: Amended to use new NowPlayingManager.
        (WebCore::MediaSessionManagerCocoa::MediaSessionManagerCocoa):
        (WebCore::MediaSessionManagerCocoa::scheduleSessionStatusUpdate):
        (WebCore::MediaSessionManagerCocoa::addSession):
        (WebCore::MediaSessionManagerCocoa::removeSession):
        (WebCore::MediaSessionManagerCocoa::setCurrentSession):
        (WebCore::MediaSessionManagerCocoa::addSupportedCommand):
        (WebCore::MediaSessionManagerCocoa::removeSupportedCommand):
        (WebCore::MediaSessionManagerCocoa::updateNowPlayingInfo):

2021-03-22  Fujii Hironori  <Hironori.Fujii@sony.com>

        Unreviewed build fix for AppleWin after r274791
        https://bugs.webkit.org/show_bug.cgi?id=223500
        <rdar://problem/75706741>

        * platform/graphics/win/FontCustomPlatformData.cpp:
        (WebCore::createFontCustomPlatformData):

2021-03-22  Chris Fleizach  <cfleizach@apple.com>

        AX: textRectsFromMarkers always fails
        https://bugs.webkit.org/show_bug.cgi?id=223556
        <rdar://74256003>

        Reviewed by Zalan Bujtas.

        The textRectsFromMarkers:text: method is always failing to return a valid answer because when we try to extend
        the search range of text to search, we're creating a range that can't be iterated with a CharacterIterator

        Test: accessibility/ios-simulator/text-rects-for-range-matches.html

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::rangeMatchesTextNearRange):

2021-03-22  Ian Gilbert  <iang@apple.com>

        [Web Animations] nullptr crash in updatePlaybackRate() with no timeline
        https://bugs.webkit.org/show_bug.cgi?id=223095

        Reviewed by Ryosuke Niwa.

        Changed to WebAnimation::remove() to use setTimeline() instead of setTimelineInternal()
        to ensure the animation is in the correct play state.

        No new tests as this relies on navigating while updating the playback rate and I was unable to make
        a reliable test case.

        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::remove): Changed setTimelineInternal() to setTimeline() in order to
        ensure the animation has the correct play state.

2021-03-22  Patrick Angle  <pangle@apple.com>

        Web Inspector: Port grid overlay drawing to iOS
        https://bugs.webkit.org/show_bug.cgi?id=223396

        Reviewed by BJ Burg.

        Enable Grid Overlays to be drawn on iOS be including computed overlay objects in the
        `InspectorOverlay::Highlight`. Some refactoring was also done to reduce code duplication in the normal and iOS
        paths.

        * Headers.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        - FloatLine should be accessible from `WebKit::*`
        * inspector/InspectorOverlay.cpp:
        (WebCore::InspectorOverlay::paint):
        (WebCore::InspectorOverlay::getHighlight):
        - Add `GridHighlightOverlay`s to the highlight object for iOS.
        (WebCore::InspectorOverlay::drawGridOverlay):
        (WebCore::buildLabel):
        (WebCore::InspectorOverlay::buildGridOverlay):
        - Refactored actual drawing into a separate method to reduce the amount of code duplication needed between the
        normal path and the iOS path.
        * inspector/InspectorOverlay.h:
        (WebCore::InspectorOverlay::Highlight::GridHighlightOverlay::encode const):
        (WebCore::InspectorOverlay::Highlight::GridHighlightOverlay::decode):
        (WebCore::InspectorOverlay::Highlight::GridHighlightOverlay::Label::encode const):
        (WebCore::InspectorOverlay::Highlight::GridHighlightOverlay::Label::decode):
        (WebCore::InspectorOverlay::Highlight::GridHighlightOverlay::Area::encode const):
        (WebCore::InspectorOverlay::Highlight::GridHighlightOverlay::Area::decode):
        - Support encode/decode for sending new Highlight components to the UIProcess.
        * platform/graphics/FloatLine.h:
        (WebCore::FloatLine::encode const):
        (WebCore::FloatLine::decode):
        - Support encode/decode as part of serialization of `InspectorOverlay::Highlight`

2021-03-22  Ada Chan  <ada.chan@apple.com>

        [WebXR] Enumerate XR devices via ChromeClient in WebXRSystem
        https://bugs.webkit.org/show_bug.cgi?id=223520

        Reviewed by Sam Weinig.

        We want to avoid using singletons in the WebProcess and be able
        to proxy the devices from the UI process.

        * Modules/webxr/WebXRSystem.cpp:
        (WebCore::WebXRSystem::ensureImmersiveXRDeviceIsSelected):
        Instead of getting the devices from the singleton PlatformXR::Instance,
        get them from the ChromeClient.
        * WebCore.xcodeproj/project.pbxproj:
        Mark PlatformXR.h private so it's visible to WebKit.
        * page/ChromeClient.h:
        (WebCore::ChromeClient::enumerateImmersiveXRDevices):
        The default implementation will call PlatformXR::Instance::enumerateImmersiveXRDevices()
        to keep current functionality.
        * platform/xr/PlatformXR.h:
        Export methods that are now called in ChromeClient.

2021-03-22  Eric Carlson  <eric.carlson@apple.com>

        AVAudioSessionCaptureDeviceManager should use crossThreadCopy
        https://bugs.webkit.org/show_bug.cgi?id=223565
        <rdar://75480589>

        Reviewed by Youenn Fablet.

        Tested manually, this can only be tested on device.

        * platform/mediastream/CaptureDevice.h: Change access restriction for member
        variables from `private:` to `protected:` so derived classes can access them
        directly.

        * platform/mediastream/ios/AVAudioSessionCaptureDevice.h:
        * platform/mediastream/ios/AVAudioSessionCaptureDevice.mm:
        (WebCore::AVAudioSessionCaptureDevice::AVAudioSessionCaptureDevice): New constructor.
        (WebCore::AVAudioSessionCaptureDevice::isolatedCopy const): New.

        * platform/mediastream/ios/AVAudioSessionCaptureDeviceManager.mm:
        (WebCore::AVAudioSessionCaptureDeviceManager::refreshAudioCaptureDevices): Use
        `WTFMove(deviceList).isolatedCopy()` when moving from AVAudioSession queue
        to main thread.
        (WebCore::AVAudioSessionCaptureDeviceManager::getCaptureDevices): Ditto.

2021-03-22  Patrick Angle  <pangle@apple.com>

        REGRESSION(r272433): Inspector should not instrument inside `WebCore::Node::setRenderer`
        https://bugs.webkit.org/show_bug.cgi?id=223559

        Reviewed by Ryosuke Niwa and Devin Rousso.

        Existing test coverage:
        - inspector/css/nodeLayoutContextTypeChanged.html
        - inspector/css/setLayoutContextTypeChangedMode.html

        The previous approach to observing render changes was most likely a performance regression in a very hot code
        path (`Node::setRenderer`). This patch resolves this by not instrumenting in this the hot path. Instead we call
        inspector instrumentation inside the constructors/destructors of only the RenderObject subclasses we are
        interested in observing layout changes for.

        Additionally, layout change events are now added to a `Vector` of pending changes, which will be sent to the
        front-end later in order to avoid evaluating JavaScript inside a destructor in WK1 with the new instrumentation
        points.

        * dom/Element.cpp:
        (WebCore::Element::didChangeRenderer): Deleted.
        * dom/Element.h:
        * dom/Node.h:
        (WebCore::Node::didChangeRenderer): Deleted.
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::nodeLayoutContextChangedImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::nodeLayoutContextChanged):
        * inspector/agents/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::InspectorCSSAgent):
        (WebCore::InspectorCSSAgent::reset):
        (WebCore::InspectorCSSAgent::nodeLayoutContextTypeChanged):
        (WebCore::InspectorCSSAgent::layoutContextTypeChangedTimerFired):
        - Moved layout change events behind a timer firing.
        * inspector/agents/InspectorCSSAgent.h:
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::RenderGrid):
        (WebCore::RenderGrid::~RenderGrid):
        - Move instrumentation from `Node::setRenderer` to `RenderGrid`.
        * rendering/RenderObject.h:
        (WebCore::Node::setRenderer):

2021-03-22  Peng Liu  <peng.liu6@apple.com>

        [GPUP] Add a "wallTime" field to struct RemoteMediaPlayerState
        https://bugs.webkit.org/show_bug.cgi?id=223523

        Reviewed by Eric Carlson.

        No new tests. Fix test failures:
        - media/video-controller-child-rate.html
        - media/media-controller-unpause.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::currentMediaTime const): A minor fix for the comment.

2021-03-22  Rob Buis  <rbuis@igalia.com>

        Enable ability to prevent scrolling in Element.focus()
        https://bugs.webkit.org/show_bug.cgi?id=178583

        Reviewed by Simon Fraser.

        Add FocusOptions parameter to the focus method [1] both
        to the IDL as the C++ side. Change Element.focus to not
        scroll if FocusOptions.preventScroll is true.

        Behavior matches Chrome and Firefox.

        Tests: imported/w3c/web-platform-tests/html/interaction/focus/processing-model/preventScroll-textarea.html
               imported/w3c/web-platform-tests/html/interaction/focus/processing-model/preventScroll-nested-scroll-elements.html

        Test: imported/w3c/web-platform-tests/html/interaction/focus/processing-model/preventScroll-nested-scroll-elements.html

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Headers.cmake:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Element.cpp:
        (WebCore::Element::focus):
        * dom/Element.h:
        (WebCore::Element::focus):
        * dom/FocusOptions.h: Copied from Source/WebCore/html/HTMLOrForeignElement.idl.
        * dom/FocusOptions.idl: Copied from Source/WebCore/html/HTMLOrForeignElement.idl.
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::didAttachRenderers):
        * html/HTMLLabelElement.cpp:
        (WebCore::HTMLLabelElement::focus):
        * html/HTMLLabelElement.h:
        * html/HTMLLegendElement.cpp:
        (WebCore::HTMLLegendElement::focus):
        * html/HTMLLegendElement.h:
        * html/HTMLOrForeignElement.idl:
        * html/InputType.cpp:
        (WebCore::InputType::accessKeyAction):
        * page/FocusController.cpp:
        (WebCore::FocusController::advanceFocusInDocumentOrder):
        (WebCore::FocusController::advanceFocusDirectionallyInContainer):

2021-03-22  Devin Rousso  <drousso@apple.com>

        Remove unused JS and CSS files of media controls
        https://bugs.webkit.org/show_bug.cgi?id=214955
        <rdar://problem/66604040>

        Reviewed by Eric Carlson.

        Cocoa platforms are already using modern media controls so there's no reason to keep the old
        media controls resources/logic around any longer. It just wastes space.

        The non-iOS Apple controls must be kept though as they are still used on Windows.

        * Modules/mediacontrols/assets-apple-iOS.svg: Removed.
        * Modules/mediacontrols/mediaControlsiOS.css: Removed.
        * Modules/mediacontrols/mediaControlsiOS.js: Removed.

        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::modernMediaControlsStyleSheet): Deleted.
        * rendering/RenderThemeCocoa.h:
        * rendering/RenderThemeCocoa.mm:
        (WebCore::RenderThemeCocoa::purgeCaches): Added.
        (WebCore::RenderThemeCocoa::mediaControlsStyleSheet): Added.
        (WebCore::RenderThemeCocoa::mediaControlsScripts): Added.
        (WebCore::RenderThemeCocoa::mediaControlsBase64StringForIconNameAndType): Added.
        * rendering/RenderThemeIOS.h:
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::mediaControlsStyleSheet): Deleted.
        (WebCore::RenderThemeIOS::modernMediaControlsStyleSheet): Deleted.
        (WebCore::RenderThemeIOS::purgeCaches): Deleted.
        (WebCore::RenderThemeIOS::mediaControlsScripts): Deleted.
        (WebCore::RenderThemeIOS::mediaControlsBase64StringForIconNameAndType): Deleted.
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::mediaControlsStyleSheet): Deleted.
        (WebCore::RenderThemeMac::modernMediaControlsStyleSheet): Deleted.
        (WebCore::RenderThemeMac::purgeCaches): Deleted.
        (WebCore::RenderThemeMac::mediaControlsScripts): Deleted.
        (WebCore::RenderThemeMac::mediaControlsBase64StringForIconNameAndType): Deleted.
        Move media controls functions to `RenderThemeCocoa` since they are identical.

        * Modules/mediacontrols/MediaControlsHost.idl:
        * Modules/mediacontrols/MediaControlsHost.h:
        * Modules/mediacontrols/MediaControlsHost.cpp:
        (WebCore::MediaControlsHost::shadowRootCSSText):
        * css/mediaControls.css:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::ensureMediaControlsInjectedScript):
        (WebCore::HTMLMediaElement::updateMediaControlsAfterPresentationModeChange):
        * html/MediaDocument.cpp:
        (WebCore::MediaDocumentParser::createDocumentStructure):
        (WebCore::MediaDocument::defaultEventHandler):
        * style/UserAgentStyle.cpp:
        (WebCore::Style::UserAgentStyle::ensureDefaultStyleSheetsForElement):
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setModernMediaControlsEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::modernMediaControlsEnabled const): Deleted.
        Replace `ModernMediaControlsEnabled` setting with `ENABLE_MODERN_MEDIA_CONTROLS` build flag.

        * html/track/TextTrackCueGeneric.cpp:
        Update the static `DEFAULTCAPTIONFONTSIZE` value for modern media controls.

        * Modules/modern-media-controls/controls/macos-fullscreen-media-controls.css:
        * Modules/modern-media-controls/controls/text-tracks.css:
        Update comments.

        * css/mediaControlsiOS.css: Removed.
        This file was never included anywhere.

        * platform/audio/PlatformMediaSessionManager.h:
        (WebCore::PlatformMediaSessionManager::resetHaveEverRegisteredAsNowPlayingApplicationForTesting): added.
        * platform/audio/cocoa/MediaSessionManagerCocoa.mm:
        (WebCore::MediaSessionManagerCocoa::resetHaveEverRegisteredAsNowPlayingApplicationForTesting): added.
        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState):
        Drive-by: Reset `haveEverRegisteredAsNowPlayingApplication` to a consistent state between tests.
                  This is expected by `LayoutTests/media/now-playing-status-without-media.html`.

        * bindings/js/WebCoreBuiltinNames.h:
        * WebCore.xcodeproj/project.pbxproj:

2021-03-22  Chris Dumez  <cdumez@apple.com>

        Reduce number of heap allocations on the audio thread in AudioSampleDataSource
        https://bugs.webkit.org/show_bug.cgi?id=223549

        Reviewed by Darin Adler.

        Reduce number of heap allocations on the audio thread in AudioSampleDataSource
        for performance reasons. I got rid of the heap allocations that I could easily
        address. Some trickier ones remain.

        * platform/audio/cocoa/AudioSampleDataSource.h:
        (WebCore::AudioSampleDataSource::inputDescription const):
        - Use Optional<> type for m_inputDescription & m_outputDescription data members instead of
        std::unique_ptr<> so that we can initialize them without heap allocation.
        - Use UniqueRef<> instead of std::unique_ptr<> for m_ringBuffer now that it gets
          initialized in the constructor (on the main thread).

        * platform/audio/cocoa/AudioSampleDataSource.mm:
        (WebCore::AudioSampleDataSource::AudioSampleDataSource):
        Initialize m_ringBuffer in the constructor which runs on the main thread, instead of
        doing it lazily later on, on the audio rendering thread.

        (WebCore::AudioSampleDataSource::~AudioSampleDataSource):
        Stop nulling data members out unnecessarily in the destructor.

        (WebCore::AudioSampleDataSource::setInputFormat):
        Initialize m_inputDescription without doing a heap allocation.

        (WebCore::AudioSampleDataSource::setOutputFormat):
        - Initialize m_outputDescription without doing a heap allocation.
        - Drop initialization of m_ringBuffer now that it is done eagerly in the constructor.
        - Drop RunLoop::main().dispatch() just to do logging since this was causing heap allocations.

        (WebCore::AudioSampleDataSource::pushSamplesInternal):
        (WebCore::AudioSampleDataSource::pushSamples):
        (WebCore::AudioSampleDataSource::pullSamplesInternal):
        (WebCore::AudioSampleDataSource::pullAvalaibleSamplesAsChunks):
        (WebCore::AudioSampleDataSource::pullSamples):
        Drop null checks for m_ringBuffer now that it is initialized eagerly in the constructor
        and thus can never be null.

2021-03-22  Devin Rousso  <drousso@apple.com>

        Fix incorrect fallback values in `PlaybackSessionModelMediaElement` after r274249
        https://bugs.webkit.org/show_bug.cgi?id=223584

        Reviewed by Eric Carlson.

        These values were something I was experimenting with as a way of knowing "has this ever
        been changed", but as it turned out there were other ways of achieving this and/or it was
        unnecessary to do so.

        * platform/cocoa/PlaybackSessionModelMediaElement.mm:
        (WebCore::PlaybackSessionModelMediaElement::defaultPlaybackRate const):
        (WebCore::PlaybackSessionModelMediaElement::playbackRate const):

2021-03-22  Jean-Yves Avenard  <jya@apple.com>

        Always perform image decoding in the web content process.
        https://bugs.webkit.org/show_bug.cgi?id=223290
        <rdar://problem/75559243>

        Reviewed by Eric Carlson.

        No change in externally observable behaviour.

        * Modules/mediasession/MediaMetadata.cpp:
        (WebCore::ArtworkImageLoader::notifyFinished): We decode the image into a BitmapImage and handle all potential failures getting there.
        * platform/audio/cocoa/MediaSessionManagerCocoa.mm:
        (WebCore::MediaSessionManagerCocoa::setNowPlayingInfo): remove FIXME comment.

2021-03-22  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Composition text is not initially highlighted when typing in text fields using Pinyin keyboard
        https://bugs.webkit.org/show_bug.cgi?id=223563
        <rdar://problem/75564516>

        Reviewed by Antti Koivisto.

        When enabling line layout integration, composition highlights on iOS don't appear when typing an input string
        using the Pinyin keyboard for the first time. This is because the text renderer for the inserted composition
        text does not contain inline text boxes when painting the composition text on iOS, so the marked text painting
        codepath is never triggered.

        On macOS, this isn't an issue because the process of setting the composition changes the selection, which then
        changes the highlight state of the `RenderText`, which subsequently calls into `ensureLineBoxes()`. However,
        since selections are drawn using UIKit in the UI process on iOS, we don't end up ensuring that inline text boxes
        are constructed for the inserted text.

        To address this, we follow macOS behavior by ensuring line box construction on the rendered composition text
        when setting the composition.

        Test: editing/input/composition-underline-in-search-field.html

        * editing/Editor.cpp:
        (WebCore::Editor::setComposition):

2021-03-22  Chris Dumez  <cdumez@apple.com>

        imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/nan-param.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=223583

        Reviewed by Eric Carlson.

        As per https://webaudio.github.io/web-audio-api/#computation-of-value, we should replace NaN values with
        the default value, when computing the value for an AudioParam.

        No new tests, rebaselined existing test.

        * Modules/webaudio/AudioParam.cpp:
        (WebCore::replaceNaNValues):
        (WebCore::AudioParam::calculateFinalValues):

2021-03-22  Rob Buis  <rbuis@igalia.com>

        [css-contain] Parse CSS contain property
        https://bugs.webkit.org/show_bug.cgi?id=223252

        Reviewed by Darin Adler.

        Parse CSS contain property according to the specification [1].
        This patch also adds the experimental feature CSSContainment and
        makes contain invisible from style when disabled.

        [1] https://drafts.csswg.org/css-contain-1/#contain-property

        Test: fast/css/contain-invalidate-if-disabled.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::valueForPropertyInStyle):
        * css/CSSProperties.json:
        * css/CSSValueKeywords.in:
        * css/parser/CSSParserContext.cpp:
        (WebCore::operator==):
        (WebCore::CSSParserContext::isPropertyRuntimeDisabled const):
        * css/parser/CSSParserContext.h:
        (WebCore::CSSParserContextHash::hash):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeContain):
        (WebCore::CSSPropertyParser::parseSingleValue):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::contain const):
        (WebCore::RenderStyle::setContain):
        (WebCore::RenderStyle::initialContainment):
        (WebCore::RenderStyle::strictContainment):
        (WebCore::RenderStyle::contentContainment):
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator== const):
        * rendering/style/StyleRareNonInheritedData.h:
        * style/StyleBuilderCustom.h:
        (WebCore::Style::BuilderCustom::applyInitialContain):
        (WebCore::Style::BuilderCustom::applyInheritContain):
        (WebCore::Style::BuilderCustom::applyValueContain):

2021-03-22  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo] ASSERTION FAILED: isMainThread() in GPU process for some canvas/philip/tests tests
        https://bugs.webkit.org/show_bug.cgi?id=223500

        Reviewed by Alex Christensen.

        Added a new member of FontPlatformData::CreationData to
        FontCustomPlatformData struct to transfer custom fonts to GPU
        process for WinCairo port.

        * PlatformWin.cmake:
        * platform/graphics/FontPlatformData.h:
        * platform/graphics/win/FontCustomPlatformData.cpp:
        (WebCore::createFontCustomPlatformData):
        * platform/graphics/win/FontCustomPlatformData.h:
        (WebCore::FontCustomPlatformData::FontCustomPlatformData):
        * platform/graphics/win/FontCustomPlatformDataCairo.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        (WebCore::createFontCustomPlatformData):
        * platform/graphics/win/FontPlatformDataCairoWin.cpp:
        (WebCore::FontPlatformData::FontPlatformData):

2021-03-22  Youenn Fablet  <youenn@apple.com>

        RealtimeMediaSource does not need to be a WeakPtr
        https://bugs.webkit.org/show_bug.cgi?id=223573
        <rdar://75583258>

        Reviewed by Eric Carlson.

        Remove use of WeakPtr and ref the source instead.
        Covered by existing tests.

        * platform/mediastream/RealtimeIncomingAudioSource.cpp:
        (WebCore::RealtimeIncomingAudioSource::OnChanged):
        * platform/mediastream/RealtimeIncomingVideoSource.cpp:
        (WebCore::RealtimeIncomingVideoSource::OnChanged):
        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::updateHasStartedProducingData):
        * platform/mediastream/RealtimeMediaSource.h:

2021-03-22  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] gst_audio_format_fill_silence() is deprecated in GStreamer 1.20
        https://bugs.webkit.org/show_bug.cgi?id=223562

        Reviewed by Xabier Rodriguez-Calvar.

        Fix GStreamer deprecation warnings.

        * platform/graphics/gstreamer/GStreamerCommon.h:
        * platform/mediastream/gstreamer/MockRealtimeAudioSourceGStreamer.cpp:
        (WebCore::MockRealtimeAudioSourceGStreamer::render):
        * platform/mediastream/gstreamer/RealtimeIncomingAudioSourceLibWebRTC.cpp:
        (WebCore::RealtimeIncomingAudioSourceLibWebRTC::OnData):
        * platform/mediastream/gstreamer/RealtimeOutgoingAudioSourceLibWebRTC.cpp:
        (WebCore::RealtimeOutgoingAudioSourceLibWebRTC::pullAudioData):

2021-03-22  Youenn Fablet  <youenn@apple.com>

        Async Clipboard read prevents WebRTC IOSurfaces from being released
        https://bugs.webkit.org/show_bug.cgi?id=223489
        <rdar://problem/75601433>

        Reviewed by Eric Carlson.

        Instead of dispatching a task to main thread, the task refing a MediaSample,
        we store the MediaSample in MediaPlayerPrivateMediaStreamAVFObjC on the background thread and
        access it on main thread with a lock.
        This ensures that we do not keep more than one media sample per MediaPlayerPrivateMediaStreamAVFObjC, even if main thread is blocked.
        Make sure to reset the video transformation according hasChangedOrientation even if there is no media sample available anymore.
        Covered by existing tests.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::processNewVideoSample):

2021-03-22  Jean-Yves Avenard  <jya@apple.com>

        Fix typo introduced in r274586 and revert fix from r274667 to get around compilation error following typo.
        https://bugs.webkit.org/show_bug.cgi?id=223554

        Reviewed by Eric Carlson.

        No test needed.

        * testing/Internals.cpp:
        (WebCore::Internals::loadArtworkImage):

2021-03-22  Chris Dumez  <cdumez@apple.com>

        Better validate JSArrays in AudioWorkletProcessor
        https://bugs.webkit.org/show_bug.cgi?id=223548

        Reviewed by Geoffrey Garen.

        Better validate JSArrays in AudioWorkletProcessor. Replaces debug assertions with runtime
        checks for robustness.

        * Modules/webaudio/AudioWorkletProcessor.cpp:
        (WebCore::copyDataFromBusesToJSArray):
        (WebCore::copyDataFromParameterMapToJSObject):
        (WebCore::zeroJSArray):
        (WebCore::AudioWorkletProcessor::buildJSArguments):

2021-03-22  Zalan Bujtas  <zalan@apple.com>

        [ macOS debug arm64 ] ASSERTION FAILED: count >= 1 ./rendering/RenderMultiColumnSet.cpp(450) : unsigned int WebCore::RenderMultiColumnSet::columnCount() const
        https://bugs.webkit.org/show_bug.cgi?id=223144
        <rdar://problem/75381496>

        Reviewed by Simon Fraser.

        Overflow height computation with infinite constraint should not produce a negative height value.
        During the column balancing, we use the "max layout unit" value to indicate infinite available space.
        However this max value confuses the height computation in expandToEncompassFragmentedFlowContentsIfNeeded and produces a negative height value.

        Let's also ensure that we never trigger undefined behavior as the result of implicitly converting (negative)float to unsigned.

        * rendering/RenderFragmentContainerSet.cpp:
        (WebCore::RenderFragmentContainerSet::expandToEncompassFragmentedFlowContentsIfNeeded):
        * rendering/RenderFragmentedFlow.cpp:
        (WebCore::RenderFragmentedFlow::updateFragmentsFragmentedFlowPortionRect):
        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::columnCount const):

2021-03-22  Chris Dumez  <cdumez@apple.com>

        Implement AbortSignal.abort()
        https://bugs.webkit.org/show_bug.cgi?id=223071
        <rdar://problem/75575483>

        Reviewed by Darin Adler.

        Implement AbortSignal.abort() which creates and returns an already aborted AbortSignal:
        - https://github.com/whatwg/dom/pull/960
        - https://github.com/web-platform-tests/wpt/pull/28003

        No new tests, covered by updated test.

        * dom/AbortSignal.cpp:
        (WebCore::AbortSignal::createAborted):
        (WebCore::AbortSignal::AbortSignal):
        * dom/AbortSignal.h:
        * dom/AbortSignal.idl:

2021-03-22  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] Context menu should account for image overlay content
        https://bugs.webkit.org/show_bug.cgi?id=223518
        <rdar://problem/75505210>

        Reviewed by Devin Rousso.

        Make some adjustments to allow context menu items for text selection to show up when right clicking on text in
        an image overlay.

        Test: fast/images/image-extraction/mac/copy-image-overlay-text-with-context-menu.html

        * editing/Editor.cpp:
        (WebCore::Editor::performCutOrCopy):

        Adjust this logic so that we only attempt to write plain text to the system pasteboard when copying text inside
        image overlays (this matches the behavior of copying selected text in `textarea` elements and text fields).

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::hasImageOverlay const):
        (WebCore::imageOverlayHost):
        (WebCore::HTMLElement::isInsideImageOverlay):

        Add a helper function to determine whether or not a given range in the DOM is inside an image overlay shadow
        root. To avoid code duplication, pull out some logic to grab the image overlay's element host (if it exists) out
        into a separate static helper function (`imageOverlayHost`), and use it here and also in `isImageOverlayText`.

        (WebCore::HTMLElement::isImageOverlayText):

        Move the UA shadow root check into `HTMLElement::hasImageOverlay`, so that `hasImageOverlay` can be invoked for
        elements with non-UA shadow roots without hitting an assertion.

        * html/HTMLElement.h:
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::populate):

        Pull logic that determines whether or not we should show text-selection-related context menu items out into a
        separate lambda function, so that it's easier to take advantage of early returns; then, in the case where we
        have an image URL, additionally show selected text options if the selection is inside the image overlay.

2021-03-22  Sam Weinig  <weinig@apple.com>

        Use the PropertyName parameter passed to custom getters/setters rather than a redundant const char* in DOM attribute prologues
        https://bugs.webkit.org/show_bug.cgi?id=223542

        Reviewed by Alexey Shvayka.

        Use the PropertyName parameter passed to custom getters/setters rather than a 
        redundant const char* in DOM attribute prologues. This will allow us to share
        IDLAttribute prologue implementations in cases where the same bound function
        should be called for multiple attributes, as will be the case for CSSStyleDeclaration.

        Also took the opertunity to do some cleanup
        - Made CastedThisErrorBehavior conditions use if constexpr to ensure the non-requested
          cases are compiled out, even in debug builds.
        - Moves all attribute Getter/Setter TypeError related functions to JSC, where there
          were already some, to remove duplication of strings and prepare for hoisting setter
          prologues in the future (as is already done for getters).
        - Remove AttributeSetter::call as it was redundant with invokeFunctorPropagatingExceptionIfNecessary.

        * bindings/js/JSDOMAttribute.h:
        (WebCore::IDLAttribute::set):
        (WebCore::IDLAttribute::setStatic):
        (WebCore::IDLAttribute::get):
        (WebCore::IDLAttribute::getStatic):
        (WebCore::AttributeSetter::call): Deleted.
        * bindings/js/JSDOMExceptionHandling.cpp:
        (WebCore::rejectPromiseWithGetterTypeError):
        (WebCore::makeGetterTypeErrorMessage): Deleted.
        (WebCore::throwGetterTypeError): Deleted.
        (WebCore::throwSetterTypeError): Deleted.
        * bindings/js/JSDOMExceptionHandling.h:
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSC_DEFINE_HOST_FUNCTION):
        * bindings/js/JSDOMOperation.h:
        (WebCore::IDLOperation::call):
        * bindings/js/JSDOMOperationReturningPromise.h:
        (WebCore::IDLOperationReturningPromise::call):
        (WebCore::IDLOperationReturningPromise::callReturningOwnPromise):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateAttributeGetterTrampolineDefinition):
        (GenerateAttributeSetterBodyDefinition):
        (GenerateAttributeSetterTrampolineDefinition):

        * bindings/scripts/test/JS/*:
        Update test results.

2021-03-22  Chris Dumez  <cdumez@apple.com>

        Avoid heap allocation under AudioNodeInput::disable() / AudioNodeInput::enable()
        https://bugs.webkit.org/show_bug.cgi?id=223529

        Reviewed by Eric Carlson.

        Avoid heap allocation under AudioNodeInput::disable() / AudioNodeInput::enable() since those can
        get called on the audio thread.

        AudioNodeInput used to have a m_disabledOutputs container to keep disabled outputs separated
        from enabled ones (in m_outputs). Instead, we now store all outputs in m_outputs with a 'isEnabled'
        flag. As a result, we no longer need to make any heap allocations when enabling/disabling an
        output, we merely need to flip a flag in m_outputs.

        For convenience, since clients of rendering outputs only care about enabled outputs, I introduced
        a new RenderingOutputCollection container with iterators. This way clients do not need to worry
        about disabled outputs.

        * Modules/webaudio/AudioNodeInput.cpp:
        (WebCore::AudioNodeInput::connect):
        (WebCore::AudioNodeInput::disconnect):
        (WebCore::AudioNodeInput::didDisableOutput):
        (WebCore::AudioNodeInput::didEnableOutput):
        (WebCore::AudioNodeInput::bus):
        (WebCore::AudioNodeInput::sumAllConnections):
        (WebCore::AudioNodeInput::pull):
        * Modules/webaudio/AudioNodeInput.h:
        * Modules/webaudio/AudioNodeOutput.cpp:
        (WebCore::AudioNodeOutput::disable):
        (WebCore::AudioNodeOutput::enable):
        * Modules/webaudio/AudioParam.cpp:
        (WebCore::AudioParam::calculateFinalValues):
        * Modules/webaudio/AudioSummingJunction.cpp:
        (WebCore::AudioSummingJunction::numberOfConnections const):
        (WebCore::AudioSummingJunction::addOutput):
        (WebCore::AudioSummingJunction::removeOutput):
        (WebCore::AudioSummingJunction::updateRenderingState):
        (WebCore::AudioSummingJunction::maximumNumberOfChannels const):
        (WebCore::AudioSummingJunction::didDisableOutput):
        (WebCore::AudioSummingJunction::didEnableOutput):
        (WebCore::AudioSummingJunction::RenderingOutputCollection::RenderingOutput::RenderingOutput):
        (WebCore::WebCore::AudioSummingJunction::RenderingOutputCollection::remove):
        (WebCore::WebCore::AudioSummingJunction::RenderingOutputCollection::setEnabled):
        (WebCore::WebCore::AudioSummingJunction::RenderingOutputCollection::RenderingOutputCollection):
        * Modules/webaudio/AudioSummingJunction.h:
        (WebCore::AudioSummingJunction::RenderingOutputCollection::isEmpty const):
        (WebCore::AudioSummingJunction::RenderingOutputCollection::size const):
        (WebCore::AudioSummingJunction::RenderingOutputCollection::clear):
        (WebCore::AudioSummingJunction::RenderingOutputCollection::append):
        (WebCore::AudioSummingJunction::RenderingOutputCollection::ConstIterator::ConstIterator):
        (WebCore::AudioSummingJunction::RenderingOutputCollection::ConstIterator::operator* const):
        (WebCore::AudioSummingJunction::RenderingOutputCollection::ConstIterator::operator!= const):
        (WebCore::AudioSummingJunction::RenderingOutputCollection::ConstIterator::operator++):
        (WebCore::AudioSummingJunction::RenderingOutputCollection::begin const):
        (WebCore::AudioSummingJunction::RenderingOutputCollection::end const):
        (WebCore::AudioSummingJunction::renderingOutputs const):
        (WebCore::AudioSummingJunction::isConnected const):
        * Modules/webaudio/WebKitAudioPannerNode.cpp:
        (WebCore::WebKitAudioPannerNode::notifyAudioSourcesConnectedToNode):

2021-03-22  Youenn Fablet  <youenn@apple.com>

        Implement RTCDataChannel transfer out of process
        https://bugs.webkit.org/show_bug.cgi?id=223443

        Reviewed by Eric Carlson.

        Add support for serialization/deserialization of RTCDataChannel information so that it can be MessagePort transfered or transfered to out-of-process contexts like Window or Service Worker.
        Add infrastructure for remote sources (that allows to send data or close data channels) and remote handlers which receive messages from out-of-process data channels.

        Covered by API tests.

        * Modules/mediastream/DetachedRTCDataChannel.h: Added.
        (WebCore::DetachedRTCDataChannel::DetachedRTCDataChannel):
        (WebCore::DetachedRTCDataChannel::memoryCost const):
        (WebCore::DetachedRTCDataChannel::encode const):
        (WebCore::DetachedRTCDataChannel::decode):
        * Modules/mediastream/RTCDataChannel.cpp:
        (WebCore::RTCDataChannel::RTCDataChannel):
        (WebCore::rtcDataChannelLocalMap):
        (WebCore::RTCDataChannel::handlerFromIdentifier):
        (WebCore::RTCDataChannel::create):
        * Modules/mediastream/RTCDataChannel.h:
        * Modules/mediastream/RTCDataChannelRemoteHandler.cpp: Added.
        (WebCore::RTCDataChannelRemoteHandler::create):
        (WebCore::RTCDataChannelRemoteHandler::RTCDataChannelRemoteHandler):
        (WebCore::RTCDataChannelRemoteHandler::~RTCDataChannelRemoteHandler):
        (WebCore::RTCDataChannelRemoteHandler::didChangeReadyState):
        (WebCore::RTCDataChannelRemoteHandler::didReceiveStringData):
        (WebCore::RTCDataChannelRemoteHandler::didReceiveRawData):
        (WebCore::RTCDataChannelRemoteHandler::didDetectError):
        (WebCore::RTCDataChannelRemoteHandler::bufferedAmountIsDecreasing):
        (WebCore::RTCDataChannelRemoteHandler::readyToSend):
        (WebCore::RTCDataChannelRemoteHandler::setClient):
        (WebCore::RTCDataChannelRemoteHandler::sendStringData):
        (WebCore::RTCDataChannelRemoteHandler::sendRawData):
        (WebCore::RTCDataChannelRemoteHandler::close):
        * Modules/mediastream/RTCDataChannelRemoteHandler.h: Added.
        * Modules/mediastream/RTCDataChannelRemoteSource.cpp: Copied from Source/WebCore/platform/mediastream/RTCDataChannelHandler.h.
        (WebCore::RTCDataChannelRemoteSource::RTCDataChannelRemoteSource):
        (WebCore::RTCDataChannelRemoteSource::~RTCDataChannelRemoteSource):
        * Modules/mediastream/RTCDataChannelRemoteSource.h: Added.
        (WebCore::RTCDataChannelRemoteSource::create):
        (WebCore::RTCDataChannelRemoteSource::sendStringData):
        (WebCore::RTCDataChannelRemoteSource::sendRawData):
        (WebCore::RTCDataChannelRemoteSource::close):
        * Modules/mediastream/libwebrtc/LibWebRTCDataChannelHandler.cpp:
        (WebCore::LibWebRTCDataChannelHandler::postTask):
        * Modules/webaudio/AudioWorkletMessagingProxy.cpp:
        (WebCore::AudioWorkletMessagingProxy::createRTCDataChannelRemoteHandlerConnection):
        * Modules/webaudio/AudioWorkletMessagingProxy.h:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::SerializedScriptValue::SerializedScriptValue):
        * bindings/js/SerializedScriptValue.h:
        (WebCore::SerializedScriptValue::encode const):
        (WebCore::SerializedScriptValue::decode):
        * dom/Document.cpp:
        (WebCore::Document::createRTCDataChannelRemoteHandlerConnection):
        * dom/Document.h:
        * dom/ScriptExecutionContext.h:
        (WebCore::ScriptExecutionContext::createRTCDataChannelRemoteHandlerConnection):
        * platform/ScriptExecutionContextIdentifier.h: Copied from Source/WebCore/platform/mediastream/RTCDataChannelState.h.
        * platform/mediastream/RTCDataChannelHandler.h:
        (WebCore::RTCDataChannelInit::encode const):
        (WebCore::RTCDataChannelInit::decode):
        * platform/mediastream/RTCDataChannelIdentifier.h: Copied from Source/WebCore/platform/mediastream/RTCDataChannelHandler.h.
        (WebCore::RTCDataChannelIdentifier::encode const):
        (WebCore::RTCDataChannelIdentifier::decode):
        * platform/mediastream/RTCDataChannelRemoteHandlerConnection.h: Copied from Source/WebCore/platform/mediastream/RTCDataChannelHandler.h.
        * platform/mediastream/RTCDataChannelRemoteSourceConnection.h: Copied from Source/WebCore/platform/mediastream/RTCDataChannelHandler.h.
        * platform/mediastream/RTCDataChannelState.h:
        * platform/mediastream/RTCPriorityType.h:
        * platform/mediastream/libwebrtc/LibWebRTCProvider.h:
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::createRTCDataChannelRemoteHandlerConnection):
        * workers/WorkerGlobalScope.h:
        * workers/WorkerLoaderProxy.h:
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::createRTCDataChannelRemoteHandlerConnection):
        * workers/WorkerMessagingProxy.h:
        * workers/service/context/ServiceWorkerThreadProxy.cpp:
        (WebCore::ServiceWorkerThreadProxy::createRTCDataChannelRemoteHandlerConnection):
        * workers/service/context/ServiceWorkerThreadProxy.h:

2021-03-22  Simon Fraser  <simon.fraser@apple.com>

        Fix a mistake in r274725 spotted by Darin.

        I accidentally removed the case statement for CSSPropertyWebkitTextSizeAdjust.

        * css/parser/CSSParserContext.cpp:
        (WebCore::CSSParserContext::isPropertyRuntimeDisabled const):

2021-03-22  Simon Fraser  <simon.fraser@apple.com>

        Rename WebCore's DisplayRefreshMonitorMac to indicate that it's only used in legacy WebKit
        https://bugs.webkit.org/show_bug.cgi?id=223543

        Reviewed by Tim Horton.

        DisplayRefreshMonitorMac in WebCore is only used for WebKitLegacy; WebProcess doesn't have
        WindowServer access so is unable to create CVDisplayLinkRefs.

        Rename it to indicate this, and reduce confusion with DisplayRefreshMonitorMac in WebKit2.
        Also add an assertion that LegacyDisplayRefreshMonitorMac is not being created in the
        WebProcess.

        For EmptyPageClients (like the Page used by createPageForSanitizingWebContent()) we need
        a DisplayRefreshMonitor implementation that doesn't try to CVDisplayLinkRefs in the
        Web Process, so add an EmptyDisplayRefreshMonitor that never fires.

        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/EmptyClients.cpp:
        (WebCore::EmptyDisplayRefreshMonitor::create):
        (WebCore::EmptyDisplayRefreshMonitor::EmptyDisplayRefreshMonitor):
        (WebCore::EmptyChromeClient::createDisplayRefreshMonitor const):
        * loader/EmptyClients.h:
        * platform/graphics/DisplayRefreshMonitor.cpp:
        (WebCore::DisplayRefreshMonitor::createDefaultDisplayRefreshMonitor):
        * platform/graphics/mac/LegacyDisplayRefreshMonitorMac.cpp: Renamed from Source/WebCore/platform/graphics/mac/DisplayRefreshMonitorMac.cpp.
        (WebCore::LegacyDisplayRefreshMonitorMac::LegacyDisplayRefreshMonitorMac):
        (WebCore::LegacyDisplayRefreshMonitorMac::~LegacyDisplayRefreshMonitorMac):
        (WebCore::LegacyDisplayRefreshMonitorMac::stop):
        (WebCore::displayLinkCallback):
        (WebCore::LegacyDisplayRefreshMonitorMac::requestRefreshCallback):
        (WebCore::LegacyDisplayRefreshMonitorMac::displayLinkFired):
        * platform/graphics/mac/LegacyDisplayRefreshMonitorMac.h: Renamed from Source/WebCore/platform/graphics/mac/DisplayRefreshMonitorMac.h.
        (WebCore::LegacyDisplayRefreshMonitorMac::create):

2021-03-22  Myles C. Maxfield  <mmaxfield@apple.com>

        [GPU Process] Style: Remove unnecessary { }s from case statements in DisplayListItemBuffer.cpp
        https://bugs.webkit.org/show_bug.cgi?id=223550

        Reviewed by Wenson Hsieh.

        They're unnecessary, and none of the other case statements in displaylists/ have them.
        Deleting them allows more of the program to fit on the screen at a time.

        No new tests because there is no behavior change.

        * platform/graphics/displaylists/DisplayListItemBuffer.cpp:
        (WebCore::DisplayList::ItemHandle::apply):
        (WebCore::DisplayList::ItemHandle::destroy):

2021-03-19  Dean Jackson  <dino@apple.com>

        Link against the ANGLE Shared Library
        https://bugs.webkit.org/show_bug.cgi?id=218539
        <rdar://problem/69062211>

        Reviewed by Tim Horton.

        Weak link against libANGLE-shared.dylib.

        * Configurations/WebCore.xcconfig:
        * Configurations/WebCoreTestSupport.xcconfig:
        * Sources.txt:
        * SourcesGTK.txt:
        * SourcesWPE.txt:
        * platform/graphics/cocoa/GraphicsContextGLOpenGLCocoa.mm:
        (WebCore::isANGLEAvailable):
        (WebCore::GraphicsContextGLOpenGL::create):

2021-03-19  Lauro Moura  <lmoura@igalia.com>

        Unreviewed. WPE Debug build fix after r274695

        * platform/xr/openxr/PlatformXROpenXR.cpp:
        (PlatformXR::OpenXRDevice::submitFrame):

2021-03-19  Kate Cheney  <katherine_cheney@apple.com>

        Cannot login to microsoftonline.com without allowing storage access
        https://bugs.webkit.org/show_bug.cgi?id=223510
        <rdar://problem/75619058>

        Reviewed by John Wilander.

        This patch introduces two changes: 

        1. Activate the storage access quirks for default browsers only. This
        is the main place we test them, and can lead to unexpected behavior in
        apps otherwise.

        2. Doesn't cancel the click even if the user denies storage access.
        Previously we we were not allowing the click because it produces
        unexpected behavior. But, sites like login.microsoftonline.com are used
        by multiple Microsoft login flows. Since only a subset require storage
        access, canceling the click across the board could be considered
        regressing behavior.

        Since storage access data is stored in the network process, we
        currently cancel the user's click on quirked sites while we wait
        asyncronously for the IPC response. If the user grants storage access,
        we store this in the web content process and dispatch a synthetic
        click. In this case, when the click triggers another storage access
        check, we can allow the click because we no longer need to wait for
        information from the network process.

        We need some heuristic in the web content process to handle the case
        of the user denying storage access to know whether to allow a
        synthetic click to happen. This patch introduces
        hasDeniedCrossPageStorageAccess which stores domains in the web
        content process which have been denied storage access via quirk. If
        a user has previously denied storage access in that web content
        process, we don't prompt again. A new web content process will give them
        another opportunity to allow/deny storage access.

        * dom/Element.cpp:
        (WebCore::Element::dispatchMouseEvent):
        * loader/FrameLoaderClient.h:
        Add a client function to check if the parent process is a full web
        browser, and pass this to the place we apply the quirks.

        * loader/ResourceLoadObserver.h:
        (WebCore::ResourceLoadObserver::setHasDeniedCrossPageStorageAccess):
        (WebCore::ResourceLoadObserver::hasDeniedCrossPageStorageAccess const):
        * page/Quirks.cpp:
        (WebCore::hasDeniedCrossPageStorageAccess):
        (WebCore::Quirks::requestStorageAccessAndHandleClick const):
        (WebCore::Quirks::triggerOptionalStorageAccessQuirk const):
        * page/Quirks.h:

2021-03-19  Zalan Bujtas  <zalan@apple.com>

        Unreviewed, reverting r274596.

        Google logo is not visible on google.com

        Reverted changeset:

        "[css-grid] Incorrect track sizing when using relative sized
        items in 'auto' column tracks"
        https://bugs.webkit.org/show_bug.cgi?id=191627
        https://commits.webkit.org/r274596

2021-03-19  Cameron McCormack  <heycam@apple.com>

        Anonymous table rows do not collapse if there are any other non-anonymous table row siblings.
        https://bugs.webkit.org/show_bug.cgi?id=223490

        Reviewed by Zalan Bujtas.

        Currently, when a RenderTableRow is detached from its parent, we will
        check whether all of the remaining RenderTableRow siblings are anonymous
        before deciding to merge them.  This means that if removing the
        RenderTableRow would produce a sequence of anonymous RenderTableRows
        that could be collapsed, but we have some other non-anonymous
        RenderTableRow as a sibling, then we'll incorrectly skip the collapsing.

        Instead we should look only to the previous and next sibling, and
        collapse them together if they're both anonymous.

        Test: fast/table/table-anonymous-row-collapse.html

        * rendering/updating/RenderTreeBuilderTable.cpp:
        (WebCore::RenderTreeBuilder::Table::collapseAndDestroyAnonymousSiblingRows):
        Change from requiring all siblings after the detachment to be anonymous, to
        looking only at the previous and following siblings.

2021-03-19  Jer Noble  <jer.noble@apple.com>

        Many media/media-fragments/ tests are crashing due to other tests that run before them.
        https://bugs.webkit.org/show_bug.cgi?id=223277
        <rdar://problem/75492360>

        Reviewed by Eric Carlson.

        Work around the crashing function by pre-conforming the fragment identifier according
        to the format required by the crashing function.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::hasBrokenFragmentSupport):
        (WebCore::conformFragmentIdentifierForURL):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVAssetForURL):

2021-03-19  Youenn Fablet  <youenn@apple.com>

        Custom scheme handled origins should be considered secure
        https://bugs.webkit.org/show_bug.cgi?id=223423

        Reviewed by Alex Christensen.

        If an app registers 'custom' as scheme handler, 'custom://localhost/page.html' is considered secure context
        but 'custom://test/page.html' is not.
        This patch makes it so that any 'custom://XXX/' origin will be considered secure context if 'custom' is a registered scheme handler.
        Covered by API test and new test.

        Test: http/tests/events/device-orientation-motion-insecure-context.html

        * WebCore.xcodeproj/project.pbxproj:
        * page/SecurityOrigin.cpp:
        (WebCore::shouldTreatAsPotentiallyTrustworthy):

2021-03-19  ChangSeok Oh  <changseok@webkit.org>

        Animated AVIF support
        https://bugs.webkit.org/show_bug.cgi?id=222804
        <rdar://problem/75362181>

        Reviewed by Philippe Normand.

        This change implements animation of the avif sequence. The decoding approach
        is similar to ones for other image formats, i.e., decoding frames in BGRA pixels
        then bit-copying them into ScalableImageDecoderFrame. The decoded frames are cached
        for future use. The repetition is missing in this change. It will be addressed
        in separate patches.

        The added avif animation test compares the last frame of each avifs and a static
        avif image. The embeded avifs images are originated from corresponding webp images
        for animated-webp.html, and encoded with timescale 100 (i.e., the duration of each frame
        is 0.01s). The total duration and the track duration are same so the added avifs samples
        are supposed to be played one time.

        Test: fast/images/animated-avif.html

        * platform/image-decoders/avif/AVIFImageDecoder.cpp:
        (WebCore::AVIFImageDecoder::repetitionCount const):
        (WebCore::AVIFImageDecoder::findFirstRequiredFrameToDecode):
        (WebCore::AVIFImageDecoder::frameBufferAtIndex):
        (WebCore::AVIFImageDecoder::isComplete):
        (WebCore::AVIFImageDecoder::tryDecodeSize):
        (WebCore::AVIFImageDecoder::decode):
        * platform/image-decoders/avif/AVIFImageDecoder.h:
        * platform/image-decoders/avif/AVIFImageReader.cpp:
        (WebCore::AVIFImageReader::decodeFrame):
        (WebCore::AVIFImageReader::imageCount const):
        (WebCore::AVIFImageReader::~AVIFImageReader): Deleted.
        * platform/image-decoders/avif/AVIFImageReader.h:

2021-03-19  Martin Robinson  <mrobinson@igalia.com>

        scroll-snap-stop: always not respected during momentum scrolling
        https://bugs.webkit.org/show_bug.cgi?id=223406

        Reviewed by Simon Fraser.

        Test: tiled-drawing/scrolling/scroll-snap/scroll-snap-stop-momentum-scroll.html

        * platform/ScrollSnapAnimatorState.cpp:
        (WebCore::ScrollSnapAnimatorState::targetOffsetForStartOffset const): Enable directional scroll
        snapping when handling momentum scrolling. This turns on scroll-snap-stop as well as a few other
        features.

2021-03-19  Simon Fraser  <simon.fraser@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=223141
        Runtime-disabled CSS features still still appear enabled via two-arg CSS.supports()

        Address post-landing review comments from Darin.

        * css/parser/CSSParserContext.cpp:
        (WebCore::CSSParserContext::isPropertyRuntimeDisabled const):

2021-03-19  Sam Weinig  <weinig@apple.com>

        Add PropertyName parameter to custom setters to allow shared implementations to do late name lookup
        https://bugs.webkit.org/show_bug.cgi?id=223413

        Reviewed by Alexey Shvayka.

        Update bindings to account for new PropertyName parameter being passed to custom setters.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateAttributeSetterTrampolineDefinition):
        * bindings/scripts/test/JS/JSDOMWindow.cpp:
        (WebCore::JSC_DEFINE_CUSTOM_SETTER):
        * bindings/scripts/test/JS/JSDedicatedWorkerGlobalScope.cpp:
        (WebCore::JSC_DEFINE_CUSTOM_SETTER):
        * bindings/scripts/test/JS/JSPaintWorkletGlobalScope.cpp:
        (WebCore::JSC_DEFINE_CUSTOM_SETTER):
        * bindings/scripts/test/JS/JSServiceWorkerGlobalScope.cpp:
        (WebCore::JSC_DEFINE_CUSTOM_SETTER):
        * bindings/scripts/test/JS/JSTestCEReactions.cpp:
        (WebCore::JSC_DEFINE_CUSTOM_SETTER):
        * bindings/scripts/test/JS/JSTestCEReactionsStringifier.cpp:
        (WebCore::JSC_DEFINE_CUSTOM_SETTER):
        * bindings/scripts/test/JS/JSTestCSSProperty.cpp:
        (WebCore::JSC_DEFINE_CUSTOM_SETTER):
        * bindings/scripts/test/JS/JSTestCallTracer.cpp:
        (WebCore::JSC_DEFINE_CUSTOM_SETTER):
        * bindings/scripts/test/JS/JSTestConditionalIncludes.cpp:
        (WebCore::JSC_DEFINE_CUSTOM_SETTER):
        * bindings/scripts/test/JS/JSTestConditionallyReadWrite.cpp:
        (WebCore::JSC_DEFINE_CUSTOM_SETTER):
        * bindings/scripts/test/JS/JSTestDefaultToJSON.cpp:
        (WebCore::JSC_DEFINE_CUSTOM_SETTER):
        * bindings/scripts/test/JS/JSTestDefaultToJSONInherit.cpp:
        (WebCore::JSC_DEFINE_CUSTOM_SETTER):
        * bindings/scripts/test/JS/JSTestDefaultToJSONInheritFinal.cpp:
        (WebCore::JSC_DEFINE_CUSTOM_SETTER):
        * bindings/scripts/test/JS/JSTestEnabledBySetting.cpp:
        (WebCore::JSC_DEFINE_CUSTOM_SETTER):
        * bindings/scripts/test/JS/JSTestEnabledForContext.cpp:
        (WebCore::JSC_DEFINE_CUSTOM_SETTER):
        * bindings/scripts/test/JS/JSTestGlobalObject.cpp:
        (WebCore::JSC_DEFINE_CUSTOM_SETTER):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSC_DEFINE_CUSTOM_SETTER):
        * bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp:
        (WebCore::JSC_DEFINE_CUSTOM_SETTER):
        * bindings/scripts/test/JS/JSTestLegacyNoInterfaceObject.cpp:
        (WebCore::JSC_DEFINE_CUSTOM_SETTER):
        * bindings/scripts/test/JS/JSTestMapLikeWithOverriddenOperations.cpp:
        (WebCore::JSC_DEFINE_CUSTOM_SETTER):
        * bindings/scripts/test/JS/JSTestNode.cpp:
        (WebCore::JSC_DEFINE_CUSTOM_SETTER):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::JSC_DEFINE_CUSTOM_SETTER):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::JSC_DEFINE_CUSTOM_SETTER):
        * bindings/scripts/test/JS/JSTestSetLikeWithOverriddenOperations.cpp:
        (WebCore::JSC_DEFINE_CUSTOM_SETTER):
        * bindings/scripts/test/JS/JSTestStringifierReadWriteAttribute.cpp:
        (WebCore::JSC_DEFINE_CUSTOM_SETTER):
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::JSC_DEFINE_CUSTOM_SETTER):
        * bindings/scripts/test/JS/JSWorkerGlobalScope.cpp:
        (WebCore::JSC_DEFINE_CUSTOM_SETTER):
        * bindings/scripts/test/JS/JSWorkletGlobalScope.cpp:
        (WebCore::JSC_DEFINE_CUSTOM_SETTER):

2021-03-19  Rob Buis  <rbuis@igalia.com>

        Protect frame before calling didBeginDocument
        https://bugs.webkit.org/show_bug.cgi?id=217185

        Reviewed by Alex Christensen.

        Protect frame before calling didBeginDocument
        since it could potentially delete the frame
        through event handling.

        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::begin):

2021-03-19  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GStreamer][EME] Remove DRM resources release
        https://bugs.webkit.org/show_bug.cgi?id=223436

        Reviewed by Philippe Normand.

        Releasing DRM resources should not be needed according to the
        spec. If we needed this in the future because of whatever reason
        we need to study it again in some other way.

        * platform/encryptedmedia/CDMProxy.cpp:
        (WebCore::CDMInstanceProxy::trackSession): Deleted.
        (WebCore::CDMInstanceSessionProxy::removeFromInstanceProxy): Deleted.
        * platform/encryptedmedia/CDMProxy.h:
        (WebCore::CDMProxy::releaseDecryptionResources): Deleted.
        (WebCore::CDMInstanceSessionProxy::releaseDecryptionResources): Deleted.
        (WebCore::CDMInstanceProxy::removeSession): Deleted.
        (WebCore::CDMInstanceProxy::releaseDecryptionResources): Deleted.
        * platform/encryptedmedia/clearkey/CDMClearKey.cpp:
        (WebCore::CDMInstanceClearKey::createSession):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::~MediaPlayerPrivateGStreamer):
        * platform/graphics/gstreamer/eme/CDMProxyClearKey.cpp:
        (WebCore::CDMProxyClearKey::releaseDecryptionResources): Deleted.
        * platform/graphics/gstreamer/eme/CDMProxyClearKey.h:
        * platform/graphics/gstreamer/eme/CDMThunder.cpp:
        (WebCore::CDMInstanceThunder::createSession):
        (WebCore::CDMInstanceSessionThunder::requestLicense):
        (WebCore::CDMInstanceSessionThunder::closeSession):
        (WebCore::CDMInstanceSessionThunder::removeSessionData):
        * platform/graphics/gstreamer/eme/CDMThunder.h:

2021-03-19  Devin Rousso  <drousso@apple.com>

        CSP headers can block default <video> controls
        https://bugs.webkit.org/show_bug.cgi?id=223422
        <rdar://problem/41192193>

        Reviewed by Antoine Quint.

        Covered by existing tests.

        * Modules/modern-media-controls/controls/icon-service.js:
        (IconService.prototype.imageForIconAndLayoutTraits):
        In order for an `<img>` to skip CSP checks it must be `isInUserAgentShadowTree` before setting `src`.

        * Modules/modern-media-controls/main.js:
        (createControls):
        Provide the UA `shadowRoot` to the `iconService` so it can temporarily attach the `<img>`.

        * dom/Element.cpp:
        (WebCore::Element::addShadowRoot):
        Web Inspector should be notified about new UA shadow roots before they're modified.

2021-03-19  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r274706.
        https://bugs.webkit.org/show_bug.cgi?id=223506

        Attempt to fix WPE debug build failed

        Reverted changeset:

        "Unreviewed, fix WPE debug build after r274695"
        https://trac.webkit.org/changeset/274706

2021-03-19  Youenn Fablet  <youenn@apple.com>

        Disable SFrame compatibility mode for audio senders and receivers
        https://bugs.webkit.org/show_bug.cgi?id=223391
        <rdar://problem/75538500>

        Reviewed by Eric Carlson.

        Add RTCRtpSFrameTransformer::setMediaType to allow setting the authentication size.
        In case mode is H264/VP8 and media type is audio, set back mode to none.
        Covered by API test.

        * Modules/mediastream/RTCRtpSFrameTransform.cpp:
        (WebCore::RTCRtpSFrameTransform::initializeTransformer):
        * Modules/mediastream/RTCRtpSFrameTransformer.h:
        (WebCore::RTCRtpSFrameTransformer::setMediaType):
        * WebCore.xcodeproj/project.pbxproj:

2021-03-17  Sergio Villar Senin  <svillar@igalia.com>

        [css-flex] Make {main|cross}SizeForPercentageResolution() return booleans instead of actual sizes
        https://bugs.webkit.org/show_bug.cgi?id=223377

        Reviewed by Manuel Rego Casasnovas.

        These two methods were only called by childLogicalHeightForPercentageResolution() and they either returned
        WTF::nullopt or the overridingContentLogicalHeight(). We could simplify a bit the code by returning a boolean
        which means whether the overriding content logical height should be used to resolve a percentage or not. Apart
        from changing the return value we're also improving the naming so it becomes obvious that we are dealing with
        flex items and not the flex container.

        We're also removing some comments in those methods that were not really accurate.

        No new tests as there is no change in functionality.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::availableLogicalHeightForPercentageComputation const):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeReplacedLogicalHeightUsing const):
        (WebCore::RenderBox::availableLogicalHeightUsing const):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::hasAutoHeightOrContainingBlockWithAutoHeight const):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::useChildOverridingCrossSizeForPercentageResolution): Renamed from crossSizeForPercentageResolution.
        (WebCore::RenderFlexibleBox::useChildOverridingMainSizeForPercentageResolution): Renamed from mainSizeForPercentageResolution.
        (WebCore::RenderFlexibleBox::useChildOverridingLogicalHeightForPercentageResolution): Renamed from childLogicalHeightForPercentageResolution.
        (WebCore::RenderFlexibleBox::crossSizeForPercentageResolution): Deleted.
        (WebCore::RenderFlexibleBox::mainSizeForPercentageResolution): Deleted.
        (WebCore::RenderFlexibleBox::childLogicalHeightForPercentageResolution): Deleted.
        * rendering/RenderFlexibleBox.h:

2021-03-19  Diego Pino Garcia  <dpino@igalia.com>

        Unreviewed, fix WPE debug build after r274695

        * platform/xr/openxr/PlatformXROpenXR.cpp:
        (PlatformXR::OpenXRDevice::submitFrame):

2021-03-19  Yusuke Suzuki  <ysuzuki@apple.com>

        WebCore::ThreadGlobalData should not initialize fields eagerly
        https://bugs.webkit.org/show_bug.cgi?id=223481

        Reviewed by Chris Dumez.

        ThreadGlobalData is used in various cases. For example, WebCore::Timer uses it, and
        this is even also used in GPUProcess. We observed something (e.g. EventNames, QualifiedNameCache etc.)
        is initialized even in GPUProcess just because GPUProcess's audio stack uses WebCore::Timer.

        This patch makes these fields lazily-allocated to avoid initializing eagerly in the threads that
        are not interested in DOM etc.

        * platform/ThreadGlobalData.cpp:
        (WebCore::ThreadGlobalData::ThreadGlobalData):
        (WebCore::ThreadGlobalData::initializeCachedResourceRequestInitiators):
        (WebCore::ThreadGlobalData::initializeEventNames):
        (WebCore::ThreadGlobalData::initializeQualifiedNameCache):
        (WebCore::ThreadGlobalData::initializeMimeTypeRegistryThreadGlobalData):
        (WebCore::ThreadGlobalData::mimeTypeRegistryThreadGlobalData): Deleted.
        * platform/ThreadGlobalData.h:
        (WebCore::ThreadGlobalData::ThreadGlobalData::cachedResourceRequestInitiators):
        (WebCore::ThreadGlobalData::ThreadGlobalData::eventNames):
        (WebCore::ThreadGlobalData::ThreadGlobalData::qualifiedNameCache):
        (WebCore::ThreadGlobalData::ThreadGlobalData::mimeTypeRegistryThreadGlobalData):
        (WebCore::ThreadGlobalData::ThreadGlobalData::threadTimers):

2021-03-18  Simon Fraser  <simon.fraser@apple.com>

        Attempt to fix the macOS build after r274695.

        * platform/graphics/GraphicsContextGL.h:
        * testing/WebFakeXRDevice.cpp:
        * testing/WebFakeXRDevice.h:

== Rolled over to ChangeLog-2021-03-18 ==
