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 ==
