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